KR20140138842A - 그래픽스 프로세싱 유닛 상의 그래픽스 및 비그래픽스 어플리케이션들의 실행 - Google Patents

그래픽스 프로세싱 유닛 상의 그래픽스 및 비그래픽스 어플리케이션들의 실행 Download PDF

Info

Publication number
KR20140138842A
KR20140138842A KR1020147027883A KR20147027883A KR20140138842A KR 20140138842 A KR20140138842 A KR 20140138842A KR 1020147027883 A KR1020147027883 A KR 1020147027883A KR 20147027883 A KR20147027883 A KR 20147027883A KR 20140138842 A KR20140138842 A KR 20140138842A
Authority
KR
South Korea
Prior art keywords
shader cores
gpu
graphics
shader
graphics application
Prior art date
Application number
KR1020147027883A
Other languages
English (en)
Other versions
KR101552079B1 (ko
Inventor
알렉세이 브이 부르드
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20140138842A publication Critical patent/KR20140138842A/ko
Application granted granted Critical
Publication of KR101552079B1 publication Critical patent/KR101552079B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5094Allocation of resources, e.g. of the central processing unit [CPU] where the allocation takes into account power or heat criteria
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

본 개시에 설명된 기법들은 그래픽스 프로세싱 유닛 (GPU) 상의 그래픽스 및 비그래픽스 어플리케이션의 효율적인 병렬 실행에 관한 것이다. GPU 는 쉐이더 프로세서 내의 복수의 쉐이더 코어들을 포함할 수도 있다. 그 기법들은, 상기 그래픽스 어플리케이션을 실행하기 위해 하나 이상의 쉐이더 코어들을 예약하고 상기 비그래픽스 어플리케이션을 실행하기 위해 하나 이상의 다른 쉐이더 코어들을 예약할 수도 있다. 이런 식으로, 비그래픽스 어플리케이션의 실행은 그래픽스 어플리케이션의 실행을 방해하지 않을 수도 있고, 그 역 또한 마찬가지이다.

Description

그래픽스 프로세싱 유닛 상의 그래픽스 및 비그래픽스 어플리케이션들의 실행{EXECUTION OF GRAPHICS AND NON-GRAPHICS APPLICATIONS ON A GRAPHICS PROCESSING UNIT}
본 개시는 그래픽스 프로세싱 유닛 (GPU) 상에서 실행되는 어플리케이션들에 관한 것이고, 보다 상세하게는 GPU 가 그러한 어플리케이션을 실행하는 방식에 관한 것이다.
그래픽스 프로세싱 유닛 (GPU) 은 전통적으로, 매우 제한된 기능상 유연성을 제공하는 고정 기능 파이프라인에서 그래픽스 관련 프로세싱만을 수행하는 것으로 제한된다. 보다 새로운 GPU 들은 프로그램들을 실행하는 프로그램가능 코어를 포함하고, 그에 의해 전통적인 GPU 들에 비해 보다 큰 기능적 유연성을 제공한다. 프로그램가능 코어들은, 그래픽스 어플리케이션 및 비그래픽스 어플리케이션 양자 모두를 실행할 수도 있으며, 소위 범용 GPU (GPGPU) 어플리케이션들을 허용한다.
개요
일반적으로, 본 개시는 그래픽스 프로세싱 유닛 (GPU) 상의 그래픽스 어플리케이션 (graphics application) 들 및 비그래픽스 어플리케이션 (non-graphics application) 들의 병렬 실행을 위한 기술에 관한 것이다. GPU 는, 하나 이상의 그래픽스 어플리케이션들 및 하나 이상의 비그래픽스 어플리케이션들을 실행할 수 있는 복수의 쉐이더 코어 (shader core) 들을 포함할 수도 있다. 본 개시에 기재된 기법들은, 그래픽스 어플리케이션들을 위해 제 1 세트의 쉐이더 코어들, 그리고 비그래픽스 어플리케이션들을 위해 제 2 세트의 쉐이더 코어들을 선택적으로 예약할 수도 있다. 그 기법들은 또한, 그래픽스 어플리케이션들을 위한 명령들과 비그래픽스 어플리케이션을 위한 명령들간에 구별할 수도 있다. 이런 방식으로, 제 1 세트의 쉐이더 코어들 상에 실행되는 그래픽스 어플리케이션들은, 제 2 세트의 쉐이더 코어들 상에 실행되는 비그래픽스 어플리케이션들의 실행을 방해하지 않을 수도 있고, 그 역 또한 마찬가지이다. 그러한 구별된 실행은 GPU 상에서 동시에 (즉, 병렬로) 그래픽스 및 비그래픽스 어플리케이션들의 효율적인 실행을 증진시킬 수도 있다.
하나의 예에서, 본 개시는, 그래픽스 프로세싱 유닛 (GPU) 으로, 그래픽스 어플리케이션을 위해 예약된 GPU의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들의 표시를 수신하는 단계, 및, GPU 로, 비그래픽스 어플리케이션을 위해 예약된 GPU의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들의 표시를 수신하는 단계를 포함하는 방법을 설명한다. 그 방법은, GPU 로, 그래픽스 어플리케이션의 명령들을 수신하는 단계, 및 GPU 로, 비그래픽스 어플리케이션의 명령들을 수신하는 단계를 더 포함한다. 그 방법은 또한, GPU 로, 제 1 세트의 쉐이더 코어들에 의해 그래픽스 어플리케이션들의 명령들을 실행하는 단계, 및 그래픽스 어플리케이션의 명령들을 실행하는 것과 실질적으로 동시에, GPU 로, 제 2 세트의 쉐이더 코어들에 의해 비그래픽스 어플리케이션의 명령들을 실행하는 단계를 포함한다.
또 다른 예에서, 본 개시는, 프로세서 상의 드라이버로, 제 1 세트의 쉐이더 코어들 상에서 실행될 그래픽스 어플리케이션을 위해 예약된 그래픽스 프로세싱 유닛 (GPU) 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정하는 단계, 및 프로세서 상의 드라이버로, 제 2 세트의 쉐이더 코어들에 의해 실행될 비그래픽스 애플리케이션을 위해 예약된 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정하는 단계를 포함하는 방법을 설명한다. 그 방법은 또한, GPU 에, 제 1 세트의 쉐이더 코어들의 표시 (indication) 및 제 2 세트의 쉐이더 코어들의 표시를 송신하는 단계를 포함한다.
또 다른 예에서, 본 개시는, 복수의 쉐이더 코어들을 포함하는 쉐이더 프로세서를 포함하는 그래픽스 프로세싱 유닛 (GPU) 을 설명한다. GPU 는 또한, 그래픽스 어플리케이션의 명령들을 실행하기 위해 예약된 제 1 세트의 쉐이더 코어들의 표시를 수신하고, 그래픽스 어플리케이션의 명령들을 수신하도록 구성된 제 1 커맨드 프로세서를 포함한다. GPU 는 또한, 비그래픽스 어플리케이션의 명령들을 실행하기 위해 예약된 제 2, 상이한 세트의 쉐이더 코어들의 표시를 수신하고, 비그래픽스 어플리케이션의 명령들을 수신하도록 구성된 제 2 커맨드 프로세서를 포함한다.
또 다른 예에서, 본 개시는, 제 1 세트의 쉐이더 코어들 상에서 실행될 그래픽스 어플리케이션을 위해 예약된 그래픽스 프로세싱 유닛 (GPU) 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정하고, 제 2 세트의 쉐이더 코어들에 의해 실행될 비그래픽스 애플리케이션을 위해 예약된 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정하도록 구성된 프로세서를 설명한다. 그 프로세서는 또한, GPU 에, 제 1 세트의 쉐이더 코어들의 표시 및 제 2 세트의 쉐이더 코어들의 표시를 송신하도록 구성된다.
또 다른 예에서, 본 개시는, 그래픽스 어플리케이션을 위해 예약된 GPU의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들의 표시를 수신하는 제 1 수단, 및 비그래픽스 어플리케이션을 위해 예약된 GPU의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들의 표시를 수신하는 제 2 수단을 포함하는 GPU를 설명한다. GPU 는 또한, 그래픽스 어플리케이션의 명령들을 수신하는 제 3 수단 및 비그래픽스 어플리케이션의 명령들을 수신하는 제 4 수단을 포함한다. 그 GPU 는, 제 1 세트의 쉐이더 코어들에 의해 그래픽스 어플리케이션의 명령들을 실행하는 수단, 및 그래픽스 어플리케이션의 명령들을 실행하는 것과 동시에, 제 2 세트의 쉐이더 코어들에 의해 비그래픽스 어플리케이션의 명령들을 실행하는 수단을 더 포함한다.
또 다른 예에서, 본 개시는, 하나 이상의 프로세서들로 하여금, 그래픽스 프로세싱 유닛 (GPU) 으로, 그래픽스 어플리케이션을 위해 예약된 GPU의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들의 표시를 수신하고, 및 GPU 로, 비그래픽스 어플리케이션을 위해 예약된 GPU의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들의 표시를, 수신하게 하는 명령들을 포함하는 컴퓨터 판독가능 저장 매체를 설명한다. 그 명령들은 또한, 하나 이상의 프로세서들로 하여금, GPU 로, 그래픽스 어플리케이션의 명령들을 수신하고, 및 GPU 로, 비그래픽스 어플리케이션의 명령들을 수신하게 한다. 그 명령들은 또한 하나 이상의 프로세서들로 하여금, GPU 로, 제 1 세트의 쉐이더 코어들에 의해 그래픽스 어플리케이션들의 명령들을 실행하고, 그래픽스 어플리케이션의 명령들을 실행하는 것과 동시에, GPU 로, 제 2 세트의 쉐이더 코어들에 의해 비그래픽스 어플리케이션의 명령들을 실행하게 한다.
또 다른 예에서, 본 개시는, 제 1 세트의 쉐이더 코어들 상에서 실행될 그래픽스 어플리케이션을 위해 예약된 그래픽스 프로세싱 유닛 (GPU) 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정하는 수단, 및 제 2 세트의 쉐이더 코어들에 의해 실행될 비그래픽스 애플리케이션을 위해 예약된 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정하는 수단을 포함하는 프로세서를 설명한다. 그 프로세서는 또한, GPU 에, 제 1 세트의 쉐이더 코어들의 표시 및 제 2 세트의 쉐이더 코어들의 표시를 송신하는 수단을 포함한다.
또 다른 예에서, 본 개시는, 하나 이상의 프로세서들로 하여금, 하나 이상의 프로세서들 상의 드라이버로, 제 1 세트의 쉐이더 코어들 상에서 실행될 그래픽스 어플리케이션을 위해 예약된 그래픽스 프로세싱 유닛 (GPU) 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정하고, 하나 이상의 프로세서들 상의 드라이버로, 제 2 세트의 쉐이더 코어들에 의해 실행될 비그래픽스 애플리케이션을 위해 예약된 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정하게 하는 명령들을 포함하는 컴퓨터 판독가능 저장 매체를 설명한다. 그 명령들은 또한 하나 이상의 프로세서들로 하여금, GPU 에, 제 1 세트의 쉐이더 코어들의 표시 및 제 2 세트의 쉐이더 코어들의 표시를 송신하게 한다.
또 다른 예에서, 본 개시는, 프로세서 및 그래픽스 프로세싱 유닛 (GPU) 을 포함하는 장치를 설명한다. 프로세서는, 제 1 세트의 쉐이더 코어들 상에 실행될 그래픽스 어플리케이션을 위해 예약된 GPU 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정하고, 제 2 세트의 쉐이더 코어들에 의해 실행될 비그래픽스 어플리케이션을 위해 예약된 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정하고, GPU 에, 제 1 세트의 쉐이더 코어들의 표시 및 제 2 세트의 쉐이더 코어들의 표시를 송신하도록 구성된다. GPU 는, 제 1 세트의 쉐이더 코어들 및 제 2 세트의 쉐이더 코어들을 포함하는 복수의 쉐이더 코어들을 포함하는 쉐이더 프로세서, 그래픽스 어플리케이션의 명령들을 실행하기 위해 예약된 제 1 세트의 쉐이더 코어들의 표시를 수신하고 그래픽스 어플리케이션의 명령들을 수신하도록 구성된 제 1 커맨드 프로세서, 및 비그래픽스 어플리케이션의 명령들을 실행하기 위해 예약된 제 2, 상이한 세트의 쉐이더 코어들의 표시를 수신하고 비그래픽스 어플리케이션의 명령들을 수신하도록 구성된 제 2 커맨드 프로세서를 포함한다.
본 개시의 하나 이상의 양태들의 상세는 첨부 도면 및 아래의 설명에 제시되어 있다. 본 개시의 다른 특징, 목적 및 이점들은 상세한 설명 및 도면, 그리고 특허청구범위로부터 분명해질 것이다.
도 1은 본 개시에서 설명된 하나 이상의 예시적인 기법들을 구현할 수도 있는 디바이스를 예시하는 블록도이다.
도 2는 도 1의 그래픽스 프로세싱 유닛 (GPU) 의 예를 더 상세하게 예시하는 블록도이다.
도 3은 도 1의 GPU 의 또 다른 예를 더 상세하게 예시하는 블록도이다.
도 4은 본 개시에 설명된 하나 이상의 예들에 따른 예시적인 기법을 예시하는 플로우차트이다.
도 5는 본 개시에 설명된 하나 이상의 예들에 따른 또 다른 예시적인 기법을 예시하는 플로우차트이다.
도 6은 도 1에 예시된, 예시적인 디바이스를 더 상세하게 예시하는 블록도이다.
그래픽스 프로세싱 유닛 (GPU) 은, 커맨드 프로세서, 고정 기능 (fixed-function) 그래픽스 프로세싱 하드웨어 유닛들, 및 쉐이더 프로세서를 형성하는 하나 이상의 쉐이더 코어들을 포함한다. 종래에, 쉐이더 프로세서의 하나 이상의 쉐이더 코어들이, 그래픽스 데이터에 대한 기능들을 수행하는 것으로 제한된 프로그램들을 실행했다. 예를 들어, 하나 이상의 쉐이더 코어들은, 버텍스 쉐이더 (vertex shader) 들 및 프래그먼트 쉐이더 (fragment shader) 들을 실행하고, 종래에 비그래픽스 어플리케이션들을 실행하지 않는다.
하지만, GPU 에 의해 지원되는 대량 병렬 계산 효율은 비그래픽스 관련 어플리케이션에 유익할 수도 있다. 예를 들어, 더 새로운 GPU 들은, 일반 프로세싱 기능성을 제공하고, 범용 GPU (GPGPU) 로 지칭될 수도 있다. 이 GPGPU 들의 쉐이더 코어들은 그래픽스 어플리케이션 그리고 비그래픽스 어플리케이션을 실행할 수도 있다.
그래픽스 어플리케이션 및 비그래픽스 어플리케이션 양자 모두가 GPGPU 의 하나 이상의 쉐이더 코어들 상에서 실행되기 때문에, 비그래픽스 어플리케이션의 실행은 가능하게는 그래픽스 어플리케이션의 실행을 방해할 수도 있다. 예를 들어, GPGPU 의 쉐이더 코어들이, 비그래픽스 어플리케이션 및 디바이스를 위한 사용자 인터페이스를 생성하는 그래픽스 어플리케이션을 실행하고 있다고 가정한다. 이 예에서, 비그래픽스 어플리케이션의 실행이 사용자 인터페이스의 생성을 방해하는 것이 가능할 수도 있다. 이 방해는 사용자 인터페이스가 무반응이 되게 할 수도 있고 이는 가능하게는 사용자 체험을 저하시킬 수도 있다.
아래에 더 상세하게 설명된 바처럼, 본 개시는, 비그래픽스 어플리케이션이 그래픽스 어플리케이션의 성능을 방해함이 없이 그리고 그 역 또한 마찬가지로, 단일 GPGPU의 쉐이더 프로세서의 하나 이상의 쉐이더 코어들이 그래픽스 어플리케이션 및 비그래픽스 어플리케이션을 실행할 수도 있는 기법들을 설명한다. 가령, 쉐이더 프로세서의 하나 이상의 쉐이더 코어들이 그래픽스 어플리케이션들을 위해 예약될 수도 있고, 쉐이더 프로세서의 하나 이상의 다른 세이더 코어들은 비그래픽스 어플리케이션을 위해 예약될 수도 있다. 쉐이더 코어들의 예약은 정적으로 또는 동적으로 일어날 수도 있다. 예를 들어, 쉐이더 코어들의 예약은 미리결정될 수도 있다. 또 다른 예에서, 그래픽스 및 비그래픽스 어플리케이션의 실행 동안, 그 기법들은 얼마나 많은 쉐이더 코어들이 그래픽스 어플리케이션들을 위해 예약되야 하고 얼마나 많이 비그래픽스 어플리케이션들을 위해 예약되야 하는지를 선택할 수도 있다. 그 기법들은, 단일 임베딩된 GPU를 그래픽스와 비그래픽스 어플리케이션들 사이에 공유하기 훨씬 더 쉽게 만들 수도 있고, 이는 높은 레이턴시 비그래픽스 어플리케이션이 낮은 레이턴시 그래픽스 어플리케이션에 지장을 주지 않고서 실행될 수 있게 할 수도 있다.
도 1은 본 개시에서 설명된 하나 이상의 예시적인 기법들을 구현할 수도 있는 디바이스를 예시하는 블록도이다. 도 1은, 프로세서 (12), 그래픽스 프로세싱 유닛 (GPU) (16) 및 시스템 메모리 (26) 를 포함하는 디바이스 (10) 를 예시한다. 디바이스 (10) 는, 도 6에 더 예시된 바처럼, 도 1에 예시된 것들에 추가적으로 컴포넌트들을 포함한다. 디바이스 (10) 의 예들은, 비디오 디바이스, 이를테면 미디어 플레이어, 셋톱 박스, 무선 핸드셋 이를테면 모바일 텔레폰 또는 소위 스마트폰, PDA (personal digital assistant), 데스크톱 컴퓨터, 랩톱 컴퓨터, 게이밍 콘솔, 비디오 컨퍼런싱 유닛, 테블릿 컴퓨팅 디바이스 등을 포함하지만, 이에 한정되지는 않는다.
프로세서 (12) 는, 디바이스 (10) 의 CPU (central processing unit) 일 수도 있다. GPU (16) 는 그래픽스 관련 기능들을 수행하도록 구성된 프로세싱 유닛일 수도 있다. 예를 들어, GPU (16) 는, 디스플레이 상의 표현을 위해 그래픽스 데이터를 생성 및 출력할 수도 있고, GPU (16) 에 의해 제공되는 대량 프로세싱 병행성 (massive processing parallelism) 을 이용하는 비그래픽스 관련 기능들을 수행할 수도 있다. 예를 들어, GPU (16) 는, 계산 어플리케이션들로도 지칭되는, 비그래픽스 어플리케이션들 및 그래픽스 어플리케이션들 양자 모두를 실행할 수도 있다. GPU (16) 가 그래픽스 프로세싱 능력들에 더하여 범용 프로세싱 능력들을 제공할 수도 있기 때문에, GPU (16) 는 범용 GPU (GPGPU) 로 지칭될 수도 있다.
프로세서 (12) 및 GPU (16) 의 예들은, 다양한 또는 범용 또는 특수 목적 (special purpose) 프로세싱 하드웨어, 이를테면 디지털 신호 프로세서 (DSP), 범용 마이크로프로세서, ASIC (application specific integrated circuit), FPGA (field programmable logic array), 또는 다른 동등한 직접 또는 이산 로직 회로를 포함하지만 이에 한정되지는 않는다. 일부 예들에서, GPU (16) 는, 그래픽스를 프로세싱하기 위한 그리고 비그래픽스 관련 어플리케이션들을 실행하기 위한 대량 병렬 프로세싱을 제공하는 것과 같은 특수 사용을 위해 설계된 다수의 프로세서 코어들을 갖는 마이크로프로세서일 수도 있다. 게다가, 비록 프로세서 (12) 및 GPU (16) 는, 분리된 컴포넌트들로서 예시되어 있지만, 본 개시의 양태들은 그에 한정되지는 않는다. 예를 들어, 프로세서 (12) 및 GPU (16) 는 공통 집적 회로 (IC) 에 상주할 수도 있다.
시스템 메모리 (26) 는 디바이스 (10) 의 시스템 메모리이고 프로세서 (12) 및 GPU (16) 의 외부에 상주한다. 예를 들어, 시스템 메모리 (26) 는 프로세서 (12) 및 GPU (16) 에 대해 오프칩 (off-chip) 일 수도 있고 시스템 버스를 통하여 액세스가능할 수도 있다. 예시된 바처럼, 시스템 메모리 (26) 는 프로세서 (12) 및 GPU (16) 에 의해 실행되는 어플리케이션들을 저장할 수도 있다. 가령, 그래픽스 애플리케이션 (28) 은, GPU (16) 가 실행하는 그래픽스 어플리케이션이다. 그래픽스 어플리케이션 (28) 의 예들은 버텍스 쉐이더 및 프래그먼트 쉐이더를 포함한다. 비그래픽스 애플리케이션 (30) 은, GPU (16) 가 실행하는 비그래픽스 어플리케이션이다. 비그래픽스 어플리케이션 (30) 의 예는, 파노라마 사진을 생성하기 위하여 다른 사진들을 스티치 (stitch) 하는 어플리케이션이다. 예를 들어, 사진들은, 디바이스 (10) 에 의해 캡쳐되고 GPU (16) 로 함께 스티치되는 사진일 수도 있다. GPU 드라이버 (14) 는, 시스템 메모리 (26) 가 저장하는 어플리케이션의 또 다른 예이다. 프로세서 (12) 는 GPU 드라이버 (14) 를 실행할 수도 있고, 이는 프로세서 (12) 와 GPU (16) 사이의 통신을 용이하게 하는 어플리케이션일 수도 있다.
게다가, 시스템 메모리 (26) 는, 실행된 어플리케이션들의 동작 기반인 데이터, 그리고 그 어플리케이션으로부터 발생되는 데이터를 저장할 수도 있다. 하지만, 모든 그러한 데이터가 모든 예에서 시스템 메모리 (26) 에 저장될 필요가 있는 것은 아니다. 일부 경우에, 데이터는 프로세서 (12) 또는 GPU (16) 상의 메모리에 로컬로 저장될 수도 있다.
시스템 메모리 (26) 는, 예를 들어, 컴퓨터 판독가능 저장 매체의 예일 수도 잇다. 예를 들어, 시스템 메모리 (26) 는, 프로세서 (12) 및 GPU (16) 로 하여금 이 개시에 있는 각각에 속하는 기능들을 수행하게 하는 명령들을 저장할 수도 있다. 시스템 메모리 (26) 는, 하나 이상의 프로세서들로 하여금, 예를 들어 어플리케이션 프로세서 (12) 또는 GPU (16) 로 하여금 다양한 기능들을 수행하게 하는 명령들을 포함하는 컴퓨터 판독가능 저장 매체로서 고려될 수도 있다.
시스템 메모리 (26) 의 예들은, RAM (random access memory), ROM (read only memory), 또는 EEPROM (electrically erasable programmable read-only memory), 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 지니거나 또는 저장하는데 사용될 수 있고 컴퓨터 또는 프로세서에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이에 한정되지는 않는다. 시스템 메모리 (26) 는, 일부의 예들에서, 비일시적 저장 매체로서 고려될 수도 있다. 용어 "비일시적" 은, 저장 매체가 캐리어 파 (carrier wave) 또는 전파되는 신호에서 구체화되지 않는다는 것을 나타낼 수도 있다. 하지만, 용어 "비일시적" 은, 시스템 메모리 (26) 가 이동가능하지 않다는 것을 의미하는 것으로 해석되서는 안된다. 일 예로서, 시스템 메모리 (26) 는 디바이스로부터 제거되고, 또 다른 디바이스로 이동될 수도 있다. 또 다른 예로서, 시스템 메모리 (26) 와 실질적으로 유사한, 저장 디바이스가 디바이스 (10) 내에 삽입될 수도 있다. 특정 예들에서, 비일시적 저장 매체는, 경시적으로, (예를 들어, RAM 에서) 변화할 수 있는 데이터를 저장할 수도 있다.
상술된 바처럼, GPU (16) 는, 하나 이상의 그래픽스 어플리케이션들 (예를 들어, 그래픽스 어플리케이션 (28)) 그리고 하나 이상의 비그래픽스 어플리케이션 (예를 들어, 비그래픽스 어플리케이션 (30)) 을 동시에 (즉, 병렬로) 실행할 수도 있다. 하지만, 불량한 리소스 관리는 비그래픽스 어플리케이션 (30) 의 실행이 그래픽스 어플리케이션 (28) 의 실행을 방해하는 원인이 될 수도 있다. 본 개시의 기법들에 따르면, GPU (16) 는 최소의 실행 방해로 동시에 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 을 실행가능할 수도 있다.
예시된 바처럼, GPU (16) 는 그래픽스 기능 파이프라인들 (18A 및 18B) (그래픽스 기능 파이프라인 (18) 으로 총칭된다), 비그래픽스 기능 파이프라인들 (20A 및 20B) (비그래픽스 기능 파이프라인 (20) 으로 총칭된다), 쉐이더 프로세서 (22), 및 GPU 메모리 (24) 를 포함한다. GPU 메모리 (24) 는 GPU (16) 를 위한 온칩 메모리일 수도 있다. 예를 들어, GPU 메모리 (24) 는, 그래픽스 기능 파이프라인 (18), 비그래픽스 기능 파이프라인 (20) 및 쉐이더 프로세서 (22) 로 하여금 데이터에 빠르게 액세스할 수 있게 하는 캐시 메모리일 수도 있다.
그래픽스 기능 파이프라인 (18) 은 그래픽스 관련 기능들을 다루고, 비그래픽스 기능 파이프라인 (20) 은 비그래픽스 관련 기능들을 다룬다. 이런 식으로, 본 개시에 기재된 기법들은 비그래픽스 관련 기능들을 위한 리소스들로부터 그래픽스 관련 기능들을 위한 리소스들을 구별한다. 예를 들어, 그래픽스 기능 파이프라인 (18) 에 의해 프로세싱되는 그래픽스 관련 기능들은, GPU (16) 가 그래픽스 및 비그래픽스 관련 기능들 양자 모두를 동시에 수행하고 있을 때에도, 비그래픽스 기능 파이프라인 (20) 에 의해 프로세싱되는 비그래픽스 관련 기능들을 방해하지 않을 수도 있고, 그 역 또한 마찬가지이다. 다른 말로, 그래픽스 기능 파이프라인 (18) 및 비그래픽스 기능 파이프라인 (20) 은 각각의 기능들을 병렬로 수행할 수도 있다.
일부 예들에서, 그래픽스 기능 파이프라인 (18) 및 비그래픽스 기능 파이프라인 (20) 은 고정 기능 유닛들을 포함할 수도 있다. 하지만, 그래픽스 기능 파이프라인 (18) 및 비그래픽스 기능 파이프라인 (20) 은, 쉐이더 프로세서 (22) 를 공유할 수도 있다. 쉐이더 프로세서 (22) 는 그래픽스 및 비그래픽스 어플리케이션 양자 모두를 동시에 실행하도록 구성된다. 예를 들어, 쉐이더 프로세서 (22) 는 그래픽스 어플리케이션 (28) 을 실행할 수도 있고, 동시에, 비그래픽스 어플리케이션 (30) 을 실행할 수도 있다. 도 1은 하나의 그래픽스 어플리케이션 및 하나의 비그래픽스 어플리케이션만을 예시하지만, 본 개시의 양태들은 그에 한정되지 않는다. 다른 예들에서, GPU (16) 는 하나 이상의 그래픽스 어플리케이션들 및 하나 이상의 비그래픽스 어플리케이션 모두를 동시에 실행할 수도 있다.
그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 을 실행하기 위하여, 쉐이더 프로세서 (22) 는, 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 의 명령들을 실행하는 복수의 쉐이더 코어들을 포함한다. 예를 들어, 쉐이더 코어들은, 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 의, 워크그룹 또는 태스크로 지칭되는, 명령들의 서브세트들을 실행할 수도 있다. 이들 쉐이더 코어들은, 그래픽스 어플리케이션 (28) 또는 비그래픽스 어플리케이션 (30) 에 할당될 수 있다.
본 개시에 기재된 기법들에서, GPU 드라이버 (14) 는 그래픽스 어플리케이션 (28) 을 실행하기 위하여 쉐이더 프로세서 (22) 내의 제 1 세트의 쉐이더 코어들을 예약할 수도 있고 비그래픽스 어플리케이션 (30) 을 실행하기 위하여 쉐이더 프로세서 (22) 내의 제 2 세트의 쉐이더 코어들을 예약할 수도 있다. 전술된 바처럼, GPU 드라이버 (14) 는 프로세서 (12) 및 GPU (15) 가 서로 통신하게 할 수도 있다. 쉐이더 코어의 예약은, 그래픽스 어플리케이션 (28) 또는 비그래픽스 어플리케이션 (30) 중 특정한 하나에 쉐이더 프로세서 (22) 내의 그 쉐이더 코어를 할당하는 것을 지칭할 수도 있다. 예를 들어, 그래픽스 어플리케이션 (28) 을 위해 예약된 쉐이더 코어는 그래픽스 어플리케이션 (28) 의 명령들을 실행하기 위해 할당되고, 쉐이더 코어가 그래픽스 어플리케이션 (28) 을 위해 더 이상 예약되지 않을 때까지 비그래픽스 어플리케이션 (30) 의 명령들을 실행가능하지 않을 수도 있다. 유사하게, 비그래픽스 어플리케이션 (30) 을 위해 예약된 쉐이더 코어는, 쉐이더 코어가 비그래픽스 어플리케이션 (30) 을 위해 더 이상 예약되지 않을 때까지 그래픽스 어플리케이션 (28) 의 명령들을 실행하는데 이용가능하지 않을 수도 있다.
예시적 예로서, 쉐이더 프로세서 (22) 는 4개의 쉐이더 코어들을 포함할 수도 있지만, 더 많거나 더 적은 수의 쉐이더 코어들도 가능하다. 이 예에서, GPU 드라이버 (14) 는, 그래픽스 어플리케이션 (28) 을 위해 4개의 쉐이더 코어들 중 2개, 그리고 비그래픽스 어플리케이션 (30) 을 위해 다른 2개의 쉐이더 코어들을 예약할 수도 있다. 하지만, 쉐이더 코어들의 임의의 조합이 가능하다. 예를 들어, GPU 드라이버 (14) 는, 그래픽스 어플리케이션 (28) 을 위해 4개의 쉐이더 코어들 중 3개, 그리고 비그래픽스 어플리케이션 (30) 을 위해 다른 하나의 쉐이더 코어를 예약할 수도 있다. 심지어, GPU 드라이버 (14) 가 그래픽스 어플리케이션 (28) 을 위해 모두 4개의 쉐이더 코어들을 예약하고, 비그래픽스 어플리케이션 (30) 을 위해 아무것도 예약하지 않는 것도 가능할 수도 있거나, 또는 그 역 또한 마찬가지이다.
GPU 드라이버 (14) 는, 프로세서 (12) 로 하여금 GPU (16) 를 제어할 수 있게 하는 프로세서 (12) 와 GPU (16) 간의 인터페이스로서 기능할 수도 있다. 예를 들어, 프로세서 (12) 가 커맨드를 GPU (16) 로 송신할 필요가 있을 때, GPU 드라이버 (14) 를 통하여 프로세서 (12) 는 커맨드를 송신한다. 프로세서 (12) 가 GPU (16) 로 송신할 수도 있는 커맨드들은, 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 의 명령들을 로드 및 실행하기 위한 커맨드들, 데이터가 시스템 메모리 (26) 에서 어디에 위치되어 있는지를 GPU (16) 에 나타내는 커맨드들, 및 다른 그러한 커맨드들을 포함한다. 이런 방식으로, 프로세서 (12) 는 GPU (16) 의 기능을 제어할 수도 있다.
예시된 바처럼, GPU 드라이버 (14) 가 프로세서 (12) 내에 파선으로 나타나 있다. 이것은, GPU 드라이버 (14) 가 프로세서 (12) 상에서 실행되는 소프트웨어임을 예시하기 위한 것이다. 이 예에서, 시스템 메모리 (26) 는, 프로세서 (12) 가 실행을 위해 취출하는 GPU 드라이버 (14) 의 소스 코드 또는 오브젝트 코드를 저장한다. 다르게는, GPU 드라이버 (14) 는, 프로세서 (12) 내에 임베딩된 하드웨어, 또는 프로세서 (12) 및 GPU (16) 에 커플링되는 프로세서 (12) 외부의 하드웨어일 수도 있다. 일반적으로, GPU 드라이버 (14) 는 하드웨어, 소프트웨어, 펌웨어 또는 이들의 임의의 조합일 수도 있다. 예시 및 명료성을 위하여, 본 개시에 설명된 예들은, GPU 드라이버 (14) 가 프로세서 (12) 상에서 실행되는 소프트웨어라는 맥락에서 설명된다.
GPU 드라이버 (14) 는, 그래픽스 어플리케이션 (28) 을 위해 그리고 비그래픽스 어플리케이션 (30) 을 위해 예약되야 하는 쉐이더 코어들의 수를 결정하는데 다양한 기준들을 이용할 수도 있다. 하나의 예로서, 프로세서 (12) 가 GPU (16) 를 제어하기 때문에, 프로세서 (12) 는 그래픽스 어플리케이션 (28) 을 위해 얼마나 많은 명령들 그리고 비그래픽스 어플리케이션 (30) 을 위해 얼마나 많은 명령들이 쉐이더 프로세서 (22) 의 쉐이더 코어들에 의한 실행을 위해 현재 큐잉되는지에 대해 잘 알 수도 있다. 이 예에서, GPU 드라이버 (14) 는, 쉐이더 프로세서 (22) 에 의한 실행을 위해 큐에 있는 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 을 위한 명령들의 수에 기초하여 쉐이더 코어들을 예약할 수도 있다.
예를 들어, 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 을 위해 큐잉되는 동일한 수의 명령들이 있으면, GPU 드라이버 (14) 는 각 타입의 어플리케이션을 위해 쉐이더 프로세서 (22) 의 동일한 수의 쉐이더 코어들을 예약할 수도 있다. 그래픽스 어플리케이션 (28) 보다 비그래픽스 어플리케이션 (30) 을 위해 더 많은 커맨드들이 있으면, GPU 드라이버 (14) 는 그래픽스 어플리케이션 (28) 을 위한 것보다 비그래픽스 어플리케이션 (30) 을 위해 더 많은 쉐이더 코어들을 예약할 수도 있다. 실행을 위해 현재 큐잉되는 비그래픽스 어플리케이션 (30) 을 위한 명령들이 없으면, GPU 드라이버 (14) 는 그래픽스 어플리케이션 (28) 을 위해 모든 쉐이더 코어들을 예약할 수도 있다. 일부의 예들에서, 각 어플리케이션을 위해 예약된 쉐이더 코어들의 수는, 실행을 위해 큐잉되는 명령들의 수에 비례할 수도 있다. 하지만, 다른 인자들, 이를테면 실행 시간 및 우선도 (priority) 가 또한, 각 어플리케이션을 위해 예약되는 쉐이더 코어들의 수에 영향을 미칠 수도 있다.
일부 예들에서, GPU 드라이버 (14) 는 그래픽스 어플리케이션 (28) 쪽으로 바이어스 (bias) 될 수도 있다. 예를 들어, 무반응 그래픽스 어플리케이션은 사용자 체험을 저하시킬 수도 있다. 사용자 체험의 그러한 저하를 제한하기 위하여, GPU 드라이버 (14) 는, 결과적으로 비그래픽스 어플리케이션 (30) 의 명령들을 실행함에 있어서 약간의 저하가 초래되더라도, 그래픽스 어플리케이션 (28) 에 대해 전용되는 충분한 쉐이더 코어들이 있게 보장하도록 구성될 수도 있다. 다른 말로, 사용자 체험 관점으로부터, 그래픽스 어플리케이션 (28) 의 시기적절한 실행이 비그래픽스 어플리케이션 (30) 의 시기적절한 실행보다 더 소중할 수도 있다. 더 나은 사용자 체험을 돕기 위하여, GPU 드라이버 (14) 는 충분한 쉐이더 코어들을 그래픽스 어플리케이션 (28) 에 전용하기 위하여 비그래픽스 어플리케이션 (30) 의 시기적절한 실행을 희생하도록 구성될 수도 있다.
이러한 경우들에서, GPU 드라이버 (14) 는 쉐이더 코어들을 동일하지 않게 할당할 수도 있다. 가령, 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 을 위해 큐잉되는 동일한 수의 명령들이 있으면, GPU 드라이버 (14) 는 비그래픽스 어플리케이션 (30) 을 위한 것보다 그래픽스 어플리케이션 (28) 을 위해 더 많은 쉐이더 코어들을 예약할 수도 있다. 그래픽스 어플리케이션 (28) 을 위해 있는 것보다 비그래픽스 어플리케이션 (30) 을 위한 명령들이 2배 많으면, GPU 드라이버 (14) 는 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 의 각각에 동일한 수의 쉐이더 코어들을 할당할 수도 있다.
이런 식으로, GPU 드라이버 (14) 는, 적합한 사용자 체험을 제공하기 위하여 얼마나 많은 쉐이더 코어들이 그래픽스 어플리케이션 (28) 에 의해 필요한지 그리고 얼마나 많은 쉐이더 코어들이 비그래픽스 어플리케이션 (30) 에 의해 필요한지를 결정할 수도 있다. 그러한 적합한 사용자 체험을 달성하기 위하여, GPU 드라이버 (14) 는 특정 기준들을 이용할 수도 있다. 예를 들어, 위에서 논의된 바처럼, 그래픽스 어플리케이션 (28) 의 비중단 실행이 비그래픽스 어플리케이션 (30) 의 느리거나 지연된 실행보다 더 중요할 수도 있고, GPU 드라이버 (14) 는, 비그래픽스 어플리케이션 (30) 을 위해 더 적은 수의 쉐이더 코어들이 있을 것이라는 것을 의미하는 경우에도, 충분한 쉐이더 코어들이 그래픽스 어플리케이션 (28) 을 위해 이용가능하게 보장하도록 구성될 수도 있다.
일부 예들에서, 그래픽스 어플리케이션 (28) 에 비해 비그래픽스 어플리케이션 (30) 의 실행을 우선화하는 것이 가능할 수도 있다. 예를 들어, 비그래픽스 어플리케이션 (30) 은, 그래픽스 디스플레이에 있어서의 가능한 작은 저하보다 시기적절한 실행이 더 소중할 수도 있는 중요 어플리케이션일 수도 있다. 이런 식으로, 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 의 상대적인 우선도가 구성가능할 수도 있다.
예를 들어, 프로세서 (12) 에 의해 실행되는 GPU 드라이버 (14) 는 얼마나 많은 쉐이더 코어들이 그래픽스 어플리케이션 (28) 을 위해 예약되야 하는지 그리고 얼마나 많은 쉐이더 코어들이 비그래픽스 어플리케이션 (30) 을 위해 예약되야 하는지를 결정함에 있어서 추가적인 기준들을 이용할 수도 있다. 예를 들어, 그래픽스 어플리케이션 (28) 의 하나 이상의 태스크 (task) 들이 상대적으로 짧은 기간 (예를 들어, 수 밀리초) 에 완료될 수도 있는 한편, 비그래픽스 어플리케이션 (30) 의 하나 이상의 태스크들이 상대적으로 긴 기간 (예를 들어, 수 초) 에 완료될 수도 있다. 예시적인 예로서, GPU (16) 는, 복수의 그래픽스 어플리케이션들로서, 그 중 하나가 그래픽스 어플리케이션 (28) 인, 그러한 복수의 그래픽스 어플리케이션들을 실행하여 사용자 인터페이스 스크린 또는 비디오 게임의 프레임을 생성할 수도 있다. GPU (16) 는 또한, 예로서, 비그래픽스 어플리케이션들 (30) 을 실행하여, 일 예로서 다수의 카메라 사진들을 단일 파노라마 이미지로 스티치하거나, 또는 다른 예로서, 복호 (decryption) 또는 압축해제 (decompression) 를 제공할 수도 있다.
이런 상황에서, GPU (16) 는, 매끄러운 애니메이션을 달성하기 위하여 초당 30 내지 60 프레임의 리프레쉬 레이트로 프레임들을 생성할 필요가 있을 수도 있다. 그러한 초당 30 내지 60 프레임의 리프레쉬 레이트는, GPU (16) 가 초당 30 내지 60 프레임의 리프레쉬 레이트를 달성할 수 있도록 수 밀리초 내에 그래픽스 어플리케이션 (28) 의 태스크들의 실행을 완료하도록 쉐이더 프로세서 (22) 에 요구할 수도 있다. 비그래픽스 어플리케이션 (30) 의 실행은, 매끄러운 애니메이션 또는 그 것에 관해서 임의의 애니메이션을 달성할 것을 요구하지 않을 수도 있다. 그러므로, GPU (16) 는, 수 밀리초보다 더 긴 시간안에 비그래픽스 어플리케이션 (30) 의 실행을 완료하는 것이 적합할 수도 있다. 가령, 이 예에서, 비그래픽스 어플리케이션 (30) 은 단일 파노라마 이미지로의 카메라 사진들의 스티칭을 수 밀리초 이내에 완료하는 것이 필요하지 않을 수도 있고, 그것이 그 스티칭을 완료하는데 0.5 내지 1 초가 걸리는 것이 적합할 수도 있다.
GPU 드라이버 (14) 는, 일반적으로 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 이 그래픽스 어플리케이션 (28) 및 그래픽스 어플리케이션 (30) 을 위해 쉐이더 코어들의 수를 결정하기 위한 태스크들을 완료하는데 다른 양의 시간을 요구할 수도 있다는 기준을 이용할 수도 있다. 본 개시에 사용된 태스크는, 그래픽스 어플리케이션 (28) 또는 비그래픽스 어플리케이션 (30) 에 의해 수행되는 기능들의 서브세트를 지칭한다. 태스크는 워크그룹으로서 고려될 수도 있다. 그래픽스 어플리케이션 (28) 에 대하여, 워크그룹들을 기술하기 위한 논리적인 방식들이 있을 수도 있다. 예를 들어, 하나의 워크그룹은, 그래픽스 어플리케이션 (28) 을 위한 하나의 프레임, 또는 프레임에서 타일을 생성하는데 필요한 모든 기능들을 포함할 수도 있다. 워크그룹의 이 논리적인 기술 (logical delineation) 때문에, 쉐이더 프로세서 (22) 가 그래픽스 어플리케이션 (28) 을 위한 태스크를 완료하는데 얼마나 오래 걸릴 것인지 예측하는 것이 용이할 수도 있다.
비그래픽스 어플리케이션 (30) 을 위한 기능들을 기술하기 위한 논리적인 방식들이 없을 수도 있는데, 이는 쉐이더 프로세서 (22) 가 비그래픽스 어플리케이션 (30) 을 위한 태스크를 완료하는데 걸리는 시간 양을 추정하는 것을 어렵게 만들 수도 있다. 그래픽스 어플리케이션 (28) 을 위한 쉐이더 프로세서 (22) 의 쉐이더 코어들을 예약하고 비그래픽스 어플리케이션 (30) 을 위해 쉐이더 프로세서 (22) 의 쉐이더 코어들을 예약하는 것에 의해, 그 기법들은, 비그래픽스 어플리케이션 (30) 이 태스크들을 완료하는데 얼마나 많은 시간이 걸릴지 예측하는 것이 어려울 수도 있는 경우에도, 그래픽스 어플리케이션 (28) 과 비그래픽스 어플리케이션 (30) 사이의 실행 방해를 최소화 가능할 수도 있다.
본 개시에 설명된 기법들은, 시스템 메모리 (26) 에의 과도한 액세스 없이, 그리고 다수의 GPU들을 필요로 함이 없이, 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 의 효율적인 병렬 실행을 허용할 수도 있다. 예를 들어, GPU (16) 는, 그래픽스 어플리케이션 (28) 을 실행하기 위하여 비그래픽스 어플리케이션 (30) 을 실행하는 것을 정지할 필요가 없을 수도 있다. 예를 들어, 비그래픽스 어플리케이션들에의 전용의 쉐이더 프로세서 (22) 의 쉐이더 코어들이 비그래픽스 어플리케이션들에만 동작하는 한편, 그래픽스 어플리케이션들에의 전용의 쉐이더 프로세서 (22) 의 프로세서 코어들은 따로 그래픽스 어플리케이션들에만 동작한다. 또한, 그 기법은 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 양자 모두가 단일 GPU (16) 상에서 실행되는 것을 허용할 수도 있다.
일부 다른 기법들은, 그래픽스 어플리케이션 (28) 의 실행을 허용하기 위하여 비그래픽스 어플리케이션 (30) 의 실행을 정지할 수도 있다. 하지만, 비그래픽스 어플리케이션 (30) 의 실행을 정지하기 위하여, 이들 다른 기법들에서 사용된 GPU 는 일시정지되는 순간에 비그래픽스 어플리케이션의 모든 상태 정보를 시스템 메모리 (26) 내에 저장하고, 비그래픽스 어플리케이션 (30) 실행이 재개될 때 시스템 메모리 (26) 로부터 모든 상태 정보를 취출하도록 요구될 수도 있다. 모든 상태 정보의 이러한 저장 및 취출은 버스 대역폭을 소비하고 상대적으로 큰 양의 전력을 요구할 수도 있다.
비그래픽스 어플리케이션 (30) 의 실행을 정지하고 다음으로 나중에 그 실행을 재개하는 이들 다른 기법들은, 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 을 동시에 실행하는 것보다는, 이들 어플리케이션들의 실행을 인터리빙 (inter-leaving) 하는 것으로서, 고려될 수도 있다. 본 개시에 설명된 바처럼, 쉐이더 프로세서 (22) 의 상이한 세트의 프로세서 코어들을 이용하여, 동시 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 의 효율적인 병렬 (즉, 동시) 실행은, 이들 어플리케이션들의 실행을 인터리빙하는 것을 요구하지 않을 수도 있으며, 이로써 버스 대역폭 및 전력 소비의 효율적인 이용을 증진할 수도 있다.
일부 다른 추가 기법들의 예들에서, 비그래픽스 어플리케이션 (30) 과 같은 비그래픽스 어플리케이션이 GPU 상에서 얼마나 오래 실행될지 타이밍한다. 그 실행이 임계 시간보다 더 오래 걸리면, GPU 는 비그래픽스 어플리케이션 (30) 을 실행하는 것을 전부 정지한다. 하지만, 그러한 기법들은 특정 타입의 비그래픽스 어플리케이션들 (실행에 할당된 것보다 더 많은 시간을 요구하는 것들) 이 실행되는 것을 허용하지 않는다.
또 일부 다른 기법들에서, 디바이스는 2개의 GPU 들을 포함한다. 하나의 GPU 는 그래픽스 어플리케이션 (28) 을 위해 예약되고 다른 하나는 비그래픽스 어플리케이션 (30) 을 위해 예약된다. 하지만, 2개의 그래픽스 프로세싱 디바이스들을 이용하는 것은, 디바이스 상에서 추가 리얼 에스테이트 (real-estate) 를 이용하는데, 여기서 그러한 추가 리얼 에스테이트는 이용가능하지 않을 수도 있다. 또한, 주어진 순간에, 실행될 필요가 있는 그래픽스 어플리케이션이 있는 것이 아니라, 실행될 필요가 있는 비그래픽스 어플리케이션이 있는 것이 가능할 수도 있거나, 또는 그 역 또한 마찬가지이다. 이들 경우들 중 어느 하나에서, 하나의 GPU 는 유휴 상태로 남는 반면, 다른 GPU 는 활성 상태로 남는데, 이는 GPU들의 비효율적인 사용일 수도 있다.
도 2는 도 1의 GPU 의 예를 더 상세하게 예시하는 블록도이다. 예를 들어, 도 2는 GPU (16) 를 더 상세히 예시하고, 여기서 GPU (16) 는 범용 GPU (GPGPU) 의 예이다. 예시된 바처럼, 쉐이더 프로세서 (22) 및 GPU 메모리 (24) 에 추가로, GPU (16) 는 그래픽스 커맨드 프로세서 (32), 그래픽스 워크로드 분배 유닛 (34), 그래픽스 고정 기능 유닛들 (36A 및 36B) (그래픽스 고정 기능 유닛들 (36) 로 총칭된다), 비그래픽스 커맨드 프로세서 (38), 및 비그래픽스 워크로드 분배 유닛 (40) 을 포함할 수도 있다. 쉐이더 프로세서 (22) 는, 다수의 쉐이더 코어들 (42A-42N) (쉐이더 코어 (42) 로 총칭된다) 을 포함할 수도 있다. 예를 들어, 쉐이더 프로세서 (22) 는 4개의 쉐이더 코어들 (42) 을 포함할 수도 있지만, 더 많거나 더 적은 수의 쉐이더 코어들 (42) 도 가능하다. 일부 예들에서, 쉐이더 코어들 (42) 은, 쉐이더/텍스쳐 코어들로 지칭되어 텍스쳐링이 또한 그러한 코어들에서 일어날 수도 있다는 것을 나타낼 수도 있다. 하지만, 이해를 쉽게하기 위하여, 쉐이더 코어들 (42) 은 쉐이더 코어들 또는 쉐이더/텍스쳐 코어들을 지칭한다.
GPU (16) 는 도 2에 예시된 것들보다 추가의 컴포넌트들을 포함할 수도 있다. 예를 들어, 예시된 바처럼, 비그래픽스 워크로드 분배 유닛 (40) 은 직접 쉐이더 프로세서 (22) 로 출력하고 쉐이더 프로세서 (22) 는 직접 GPU 메모리 (24) 로 출력한다. 다른 예들에서, 비그래픽스 워크로드 분배 유닛 (40) 과 쉐이더 프로세서 (22) 사이에, 그리고 쉐이더 프로세서 (22) 와 GPU 메모리 (24) 사이에 하나 이상의 컴포넌트들이 있을 수도 있다. 게다가, GPU (16) 내의 컴포넌트들의 특정 배열이 또한 예시의 목적을 위해 제공되고, 제한적으로 고려되지 않아야 한다. 대안의 예들에서, 컴포넌트들은 도 2에 예시된 것과는 상이한 방식으로 순서화될 수도 있다.
도 2에서, 그래픽스 커맨드 프로세서 (32), 그래픽스 워크로드 분배 유닛 (34), 그래픽스 고정 기능 유닛 (36A), 및 그래픽스 고정 기능 유닛 (36B) 은 그래픽스 기능 파이프라인들 (18A 및 18B) 의 부분일 수도 있다 (도 1). 또한, 비그래픽스 커맨드 프로세서 (38) 및 비그래픽스 워크로드 분배 유닛 (40) 은 비그래픽스 기능 파이프라인 (20A) (도 1) 의 부분일 수도 있다. GPU (16) 는, 명료성의 목적을 위해 도 2에 예시되지는 않은 비그래픽스 기능 파이프라인 (20B) (도 1) 의 부분인 컴포넌트들을 포함할 수도 있다. GPU (16) 의 이들 다양한 컴포넌트들은 하드웨어, 하드웨어 상에서 실행되는 소프트웨어, 또는 이들의 조합으로서 구현될 수도 있다. 오직 예시의 목적을 위해 그리고 비한정적으로, GPU (16) 의 컴포넌트들은 하드웨어 유닛들로서 설명된다.
예시된 바처럼, GPU (16) 는 2개의 커맨드 프로세서들 (즉, 그래픽스 커맨드 프로세서 (32) 및 비그래픽스 커맨드 프로세서 (38)) 를 포함한다. 대안의 예들에서, 도 3을 참조하여 더 상세히 설명되는 바처럼, GPU (16) 가 단일 커맨드 프로세서를 포함하는 것이 가능할 수도 있다. 도 2의 예에서, 그래픽스 커맨드 프로세서 (32) 및 비그래픽스 커맨드 프로세서 (38) 는 서로 동일할 수도 있다. 그래픽스 커맨드 프로세서 (32) 는, 비그래픽스 기능들을 위한 것이 아니라, 그래픽스 기능들을 위한 커맨드들 또는 명령들에 대해 동작할 수도 있다. 비그래픽스 커맨드 프로세서 (38) 는, 그래픽스 기능들을 위한 것이 아니라, 비그래픽스 기능들을 위한 커맨드들 또는 명령들에 대해 동작할 수도 있다. 이런 식으로, GPU (16) 는 그래픽스와 비그래픽스 커맨드들 및 명령들간에 구별할 수도 있고, 이는 GPU (16) 상의 그래픽스 및 비그래픽스 어플리케이션들 양자 모두의 효율적인 병렬 (예를 들어, 동시) 실행을 증진할 수도 있다.
예를 들어, 도 1에 예시된 바처럼, 프로세서 (12) 상에서 실행되는, GPU 드라이버 (14) 는 그래픽스 커맨드 프로세서 (32) 에 명령하여 그래픽스 어플리케이션 (28) 의 명령들 및 그 명령들에 의해 사용될 데이터를 시스템 메모리 (26) 로부터 취출하게 할 수도 있다. GPU 드라이버 (14) 는 또한, 그래픽스 어플리케이션 (28) 을 위해 예약된 쉐이더 코어들 (42) (예를 들어, 그래픽스 어플리케이션 (28) 을 위해 예약된 제 1 세트의 쉐이더 코어들 (42)) 의 수, 그리고 가능하게는 쉐이더 코어들 (42) 중 어느 것들이 그래픽스 어플리케이션 (28) 을 위해 예약되는지 나타내는 표시를 그래픽스 커맨드 프로세서 (32) 에 송신할 수도 있다. 유사하게, GPU 드라이버 (14) 는 비그래픽스 커맨드 프로세서 (38) 에 명령하여 비그래픽스 어플리케이션 (30) 의 명령들 및 그 명령들에 의해 사용될 데이터를 시스템 메모리 (26) 로부터 취출하게 할 수도 있다. GPU 드라이버 (14) 는 또한, 비그래픽스 어플리케이션 (30) 을 위해 예약된 쉐이더 코어들 (42) (예를 들어, 비그래픽스 어플리케이션 (30) 을 위해 예약된 제 2 세트의 하나 이상의 쉐이더 코어들 (42)) 의 수, 그리고 가능하게는 쉐이더 코어 (42) 중 어느 것들이 비그래픽스 어플리케이션 (30) 을 위해 예약되는지 나타내는 표시를 비그래픽스 커맨드 프로세서 (38) 에 송신할 수도 있다.
그래픽스 커맨드 프로세서 (32) 및 비그래픽스 커맨드 프로세서 (38) 양자 모두를 포함하는 GPU (16) 는, 단일 커맨드 프로세서를 포함하는 다른 GPU들에 비하여, GPU (16) 의 전체적인 크기를 증가시킬 수도 있다. 하지만, 추가적인 커맨드 프로세서의 포함에 기인한 크기 증가는 상당히 최소한일 수도 있다. 대부분의 경우들에서, 추가적인 커맨드 프로세서의 포함에 기인한 크기 증가는, 전술된 바처럼, 2개의 분리된 그래픽스 프로세싱 디바이스들을 사용하는 것보다 훨씬 더 작을 수도 있다.
게다가, 추가적인 커맨드 프로세서의 포함은, 단일 커맨드 프로세서를 포함하는 GPU 들에 비하여, GPU (16) 로 하여금 추가적인 전력을 사용하게 할 수도 있다. 하지만, 본 개시에 설명된 기법들은 추가적인 전력의 사용을 최소화할 수도 있다. 예를 들어, 전술된 바처럼, GPU 드라이버 (14) 는 비그래픽스 어플리케이션 (30) 및 그래픽스 어플리케이션 (28) 을 위한 명령들 또는 커맨드들이 있는지를 결정하도록 구성될 수도 있다. 비그래픽스 어플리케이션 (30) 을 위한 명령들이 없는 경우에, GPU 드라이버 (14) 는 비그래픽스 커맨드 프로세서 (38) 에 명령하여 파워 다운하게 할 수도 있다. 다음으로, GPU 드라이버 (14) 는 필요할 때 커맨드 프로세서 (38) 를 파워업하도록 명령할 수도 있다.
그래픽스 워크로드 분배 유닛 (34) 및 비그래픽스 워크로드 분배 유닛 (40) 은, 각각의 예약된 쉐이더 코어들 (42) 에 워크로드를 분배할 방법을 결정한다. 예를 들어, 그래픽스 워크로드 분배 유닛 (34) 은, 그래픽스 커맨드 프로세서 (32) 로부터 쉐이더 코어들 (42) 의 어느 것들이 그래픽스 어플리케이션 (28) 을 위해 예약되어 있는지의 표시를 수신할 수도 있다. 그래픽스 워크로드 분배 유닛 (34) 은, 그래픽스 커맨드 프로세서 (32) 가 시스템 메모리 (26) 로부터 취출하는 명령들이 그래픽스 어플리케이션 (28) 을 위해 예약된 쉐이더 코어들 (42) 중에서 어떻게 분할되야 하는지를 결정할 수도 있다. 비그래픽스 워크로드 분배 유닛 (40) 은, 비그래픽스 커맨드 프로세서 (38) 로부터 쉐이더 코어들 (42) 의 어느 것들이 비그래픽스 어플리케이션 (30) 을 위해 예약되어 있는지의 표시를 수신할 수도 있다. 비그래픽스 워크로드 분배 유닛 (40) 은, 비그래픽스 커맨드 프로세서 (38) 가 시스템 메모리 (26) 로부터 취출하는 명령들이 비그래픽스 어플리케이션 (30) 을 위해 예약된 쉐이더 코어들 (42) 중에서 어떻게 분할되야 하는지를 결정할 수도 있다.
그래픽스 고정 기능 유닛들 (36) 은, 특정 그래픽스 기능들을 수행하는 하드와이어의 고정 기능 로직 유닛들일 수도 있다. 예를 들어, 쉐이더 프로세서 (22) 의 예약된 쉐이더 코어들 (42) 상에서 실행되는 그래픽스 어플리케이션 (28) 은, 기능적 유연성을 허용할 수도 있는 한편, 그래픽스 고정 기능 유닛들 (36) 은, 제공하더라도 최소한의 기능적 유연성을 제공할 수도 있다. 그래픽스 고정 기능 유닛들 (36) 의 각각의 것은, 다양한 하드와이어의 유닛들 이를테면 프리미티브 (primitive) 어셈블리 유닛, 프러스텀 (frustum) 유닛, 퍼스펙티브 분할 (perspective divide) 유닛, 뷰포트 (viewport) 변환 유닛, 깊이 테스팅 유닛, 래스터화 유닛, 퍼프래그먼트 (per-fragment) 동작 유닛, 그리고 알파 블렌딩 유닛을 포함할 수도 있다. 그래픽스 기능 파이프라인 (18A) 의 부분을 형성할 수도 있는 고정 기능 유닛들 (36) 의 이러한 유닛들은 예시 목적을 위해 제공되고 제한적인 것으로 고려되지 않아야 한다. 게다가, 이들 유닛들 중 일부는 그래픽스 고정 기능 유닛들 (36A) 에 상주할 수도 있는 한편, 다른 것들은 그래픽스 고정 기능 유닛들 (36B) 에 상주할 수도 있다. 이들 유닛들의 특정 순서는 또한 다른 예들에서는 다를 수도 있다.
도 2에서, 그래픽스 고정 기능 유닛 (36B) 및 쉐이더 프로세서 (22) 는 GPU 메모리 (24) 에 출력할 수도 있다. GPU 메모리 (24) 는, 캐시 메모리 이를테면 컬러 버퍼 캐시를 포함하는 멀티스테이지 특수 캐시 또는 범용 캐시 (예를 들어, 어드레스 기반), 또는 이들의 임의의 조합일 수도 있다. 일부 예들에서, GPU 메모리 (24) 는 2개의 영역들 (즉, 그래픽스 메모리 (44) 및 비그래픽스 메모리 (46)) 로 나누어질 수도 있다. 이 예에서, 그래픽스 메모리 (44) 는 그래픽스 기능들을 위해 예약될 수도 있고, 비그래픽스 메모리 (46) 는 비그래픽스 기능들을 위해 예약될 수도 있다.
GPU 메모리 (24) 는, 비그래픽스 메모리 (46) 에 비해 그래픽스 메모리 (44) 를 위해 저장 공간을 우선화할 수도 있다. 일 예로서, 그래픽스 커맨드 프로세서 (32) 및 비그래픽스 커맨드 프로세서 (38) 의 적어도 하나는 GPU 메모리 (24) 에 명령하여 비그래픽스 데이터에 비해 저장 그래픽스 데이터를 우선화할 수도 있다. 다른 말로, 그래픽스 기능들 (예를 들어, 명령들 또는 커맨드들, 그 명령들 또는 커맨드들에 의해 사용될 데이터, 그리고 결과적인 데이터) 를 위한 저장은 비그래픽스 기능들을 위한 저장에 비해 우선화될 수도 있다. 이 예에서, 다음으로 비그래픽스 기능들을 위한 데이터는, 로컬로 GPU 메모리 (24) 내 보다는, 시스템 메모리 (26) 에 저장될 수도 있다. 또한, 캐시 미스 (cache miss) 가 일어나는 경우들에서, 일반적으로 그래픽스 기능들, 및 그래픽스 어플리케이션 (28) 을 위한 요청은, 예를 들어, 시스템 버스를 통해, 시스템 메모리 (26) 에의 액세스를 위해 일반적으로 비그래픽스 기능들 및 비그래픽스 어플리케이션 (30) 에 비해 우선도가 주어질 수도 있다. 메모리 저장 및 취출에서의 그러한 우선도는 또한, 그래픽스 어플리케이션이 시기적절한 방식으로 실행되어 사용자 체험에 있어서의 저하를 최소화하도록 보장할 수도 있다.
도 3은 도 1의 GPU 의 또 다른 예를 더 상세하게 예시하는 블록도이다. 도 3에 예시된 GPU (16) 는 도 2에 예시된 GPU (16) 와 실질적으로 유사할 수도 있다. 따라서, 간결성의 목적을 위해서, 상이한 그러한 유닛들만이 상세히 설명된다. 도 2에 예시된 유닛들과 동일한 도면 부호를 갖는 도 3에 예시된 유닛들은 실질적으로 유사한 방식으로 기능할 수도 있다.
도 3의 예에서, GPU (16) 는, 2개의 상이한 커맨드 프로세서들 (예를 들어, 도 2의 그래픽스 커맨드 프로세서 (32) 및 비그래픽스 커맨드 프로세서 (38)) 보다는, 단일 커맨드 프로세서 (33) 를 포함할 수도 있다. 이 예에서, 커맨드 프로세서 (33) 는 병렬로 (즉, 동시에) 커맨드들의 2개 이상의 스트림들을 프로세싱하도록 구성될 수도 있다. 예를 들어, GPU 드라이버 (14) 는, GPU 드라이버 (14) 가 그래픽스 커맨드 프로세서 (32) 및 비그래픽스 커맨드 프로세서 (38) 에 송신한 명령들과 유사한 명령들을 커맨드 프로세서 (33) 에 송신할 수도 있다.
일 예로서, GPU 드라이버 (14) 는 커맨드 프로세서 (33) 에 명령하여, 시스템 메모리 (26) 로부터 그래픽스 어플리케이션 (28) 의 명령들을 취출하고, 시스템 메모리 (26) 로부터 명령들에 의해 사용될 데이터를 취출하고, 그래픽스 어플리케이션 (28) 을 위해 예약된 쉐이더 코어들 (42) 의 수를 나타내고, 가능하게는 쉐어더 코어들 (42) 의 어느 것들이 그래픽스 어플리케이션 (28) 을 위해 예약되는지를 나타내게 할 수도 있다. 커맨드 프로세서 (33) 가 그래픽스 어플리케이션 (28) 을 위한 명령들을 수신하는 것과 동시 또는 겹치는 시간에, 커맨드 프로세서 (33) 는, 시스템 메모리 (26) 로부터 비그래픽스 어플리케이션 (30) 의 명령들을 취출하고, 시스템 메모리 (26) 로부터 명령들에 의해 사용될 데이터를 취출하고, 비그래픽스 어플리케이션 (30) 을 위해 예약된 쉐이더 코어들 (42) 의 수를 나타내고, 가능하게는 쉐이더 코어들 (42) 의 어느 것들이 비그래픽스 어플리케이션 (30) 을 위해 예약되는지를 나타내도록 커맨드 프로세서 (33) 에 명령하는 명령들을 GPU 드라이버 (14) 로부터 수신할 수도 있다.
이 예에서, 커맨드 프로세서 (33) 는, 어느 명령들이 그래픽스 기능들을 위한 것이고 어느 명령들이 비그래픽스 명령들을 위한 것인지 구별하도록 구성될 수도 있다. 예를 들어, GPU 드라이버 (14) 는, GPU 드라이버 (14) 가 커맨드 프로세서 (33) 에 송신하는 명령들이 그래픽스 기능들을 위한 것인지 또는 비그래픽스 기능들을 위한 것인지 나타낼 수도 있다. 일반적으로, GPU 드라이버 (14) 및 커맨드 프로세서 (33) 는, 그래픽스 어플리케이션 (28) 의 명령들과 같은 그래픽스 기능들을 위한 명령들, 그리고 비그래픽스 어플리케이션 (30) 의 명령들과 같은 비그래픽스 기능들을 위한 명령들을 기술하는데 임의의 기법을 이용할 수도 있다.
단일 커맨드 프로세서를 포함하는 GPU들의 다른 예들에서, 그러한 커맨드 프로세서는, 동시 또는 겹치는 시간에 프로세서로부터 다수의 명령 스트림들을 수신가능하지 않을 수도 있다. 커맨드 프로세서 (33) 는, GPU (16) 가 동시에 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 을 위한 명령들을 프로세싱하게 할 수도 있다. 일부의 경우들에서, 그래픽스 어플리케이션 (28) 을 위한 명령들이 없거나, 또는 그래픽스 어플리케이션 (28) 이 유휴인 경우에, 커맨드 프로세서 (33) 는, 실행을 위해 비그래픽스 어플리케이션 (30) 을 위한 명령들을 여전히 수신할 수도 있다. 유사하게는, 비그래픽스 어플리케이션 (30) 을 위한 명령들이 없거나, 또는 그래픽스 어플리케이션 (30) 이 유휴인 경우에, 커맨드 프로세서 (33) 는, 실행을 위해 그래픽스 어플리케이션 (28) 을 위한 명령들을 여전히 수신할 수도 있다.
도 4은 본 개시에 설명된 하나 이상의 예들에 따른 예시적인 기법을 예시하는 플로우차트이다. 오직 예시의 목적을 위하여 그리고 이해를 용이하게 하기 위하여, 도 1 내지 도 3 을 참조한다.
GPU 는, 그래픽스 어플리케이션을 위해 예약되는 GPU 의 쉐이더 프로세서의 제 1 세트의 하나 이상의 쉐이더 코어들의 표시를 수신할 수도 있다 (48). GPU 는 또한, 비그래픽스 어플리케이션을 위해 예약되는 쉐이더 프로세서의 제 2, 상이한 세트의 하나 이상의 쉐이더 코어들의 표시를 수신할 수도 있다 (50). 일 예로서, GPU (16) 의 제 1 커맨드 프로세서 (예를 들어, 그래픽스 커맨드 프로세서 (32)) 는 그래픽스 어플리케이션 (28) 을 위해 예약되는 쉐이더 코어들 (42) 로부터 제 1 세트의 쉐이더 코어들의 GPU 드라이버 (14) 로부터 표시를 수신할 수도 있다. 이 예에서, GPU (16) 의 제 2, 상이한 커맨드 프로세서 (예를 들어, 비그래픽스 커맨드 프로세서 (38)) 는 비그래픽스 어플리케이션 (30) 을 위해 예약되는 쉐이더 코어들 (42) 로부터 제 2, 상이한 세트의 쉐이더 코어들의 GPU 드라이버 (14) 로부터 표시를 수신할 수도 있다. 대안의 예에서, 제 1 및 제 2 커맨드 프로세서들은 동일한 커맨드 프로세서일 수도 있다. 예를 들어, 이 대안의 예에서, 커맨드 프로세서 (33) 는, 그래픽스 어플리케이션 (28) 을 위해 예약되는 제 1 세트의 쉐이더 코어들의 GPU 드라이버 (14) 로부터 표시, 그리고 비그래픽스 어플리케이션 (30) 을 위해 예약되는 제 2, 상이한 세트의 쉐이더 코어들의 표시를 수신할 수도 있다.
이들 예들 중 어느 하나에서, 제 1 세트의 쉐이더 코어들의 표시 그리고 제 2, 상이한 세트의 쉐이더 코어들의 표시가, 그래픽스 어플리케이션 (28) 을 위해 얼마나 많은 쉐이더 코어들 (42) 이 예약되는지, 그리고 비그래픽스 어플리케이션 (30) 을 위해 얼마나 많은 쉐이더 코어들 (42) 이 예약되는지를 나타내는 표시를 포함할 수도 있다. 일부 예들에서, 제 1 세트의 쉐이더 코어들의 표시 그리고 제 2, 상이한 세트의 쉐이더 코어들의 표시는 또한, 쉐이더 코어들 (42) 의 어느 것들이 그래픽스 어플리케이션 (28) 을 위해 예약되는지, 그리고 쉐이더 코어들 (42) 의 어느 것들이 비그래픽스 어플리케이션 (30) 을 위해 예약되는지의 표시를 포함할 수도 있다.
제 1 세트의 쉐이더 코어들 (예를 들어, 하나 이상의 쉐이더 코어들 (42)) 은 그래픽스 어플리케이션 (28) 과 같은 그래픽스 어플리케이션의 명령들을 실행할 수도 있다 (52). 예를 들어, 그래픽스 커맨드 프로세서 (32) 또는 커맨드 프로세서 (33) 는 실행을 위해 그래픽스 어플리케이션 (28) 의 명령들을 수신할 수도 있고, 제 1 세트의 쉐이더 코어들로 하여금 그래픽스 어플리케이션 (28) 의 명령들을 실행하게 할 수도 있다. 이 예에서, 제 1 세트의 쉐이더 코어들은 비그래픽스 어플리케이션 (30) 의 명령들을 실행하지 않을 수도 있다. 일부 예들에서, 제 1 워크로드 분배 유닛 (예를 들어, 그래픽스 워크로드 분배 유닛 (34)) 은 제 1 세트의 쉐이더 코어들의 어느 것들이 그래픽스 어플리케이션 (28) 의 명령들의 어느 것들을 실행하는지를 결정할 수도 있다. 이 예에서, 제 1 세트의 쉐이더 코어들은, 그래픽스 워크로드 분배 유닛 (34) 에 의해 결정되는 명령들을 실행할 수도 있다.
제 2 세트의 쉐이더 코어들 (예를 들어, 하나 이상의 남아있는 쉐이더 코어들 (42)) 은 비그래픽스 어플리케이션 (30) 의 명령을 실행할 수도 있다 (54). 예를 들어, 비그래픽스 커맨드 프로세서 (38) 또는 커맨드 프로세서 (33) 는 실행을 위해 비그래픽스 어플리케이션 (30) 의 명령들을 수신할 수도 있고, 제 2 세트의 쉐이더 코어들로 하여금 비그래픽스 어플리케이션 (30) 의 명령들을 실행하게 할 수도 있다. 이 예에서, 제 2 세트의 쉐이더 코어들은 그래픽스 어플리케이션 (28) 의 명령들을 실행하지 않을 수도 있다. 일부 예들에서, 제 2 워크로드 분배 유닛 (예를 들어, 비그래픽스 워크로드 분배 유닛 (40)) 은 제 2 세트의 쉐이더 코어들의 어느 것들이 비그래픽스 어플리케이션 (30) 의 명령들의 어느 것들을 실행하는지를 결정할 수도 있다. 이 예에서, 제 2 세트의 쉐이더 코어들은, 비그래픽스 워크로드 분배 유닛 (40) 에 의해 결정되는 명령들을 실행할 수도 있다.
일부 예들에서, 제 1 세트의 쉐이더 코어들이 그래픽스 어플리케이션 (28) 의 명령들을 실행하는 것과 동시에, 제 2 세트의 쉐이더 코어들이 비그래픽스 어플리케이션 (30) 의 명령들을 실행하여, 그래픽스 어플리케이션 (28) 및 비그래픽스 어플리케이션 (30) 의 병렬 실행을 허용할 수도 있다. 일부 예들에서, GPU (16) 가, 그래픽스 커맨드 프로세서 (32) 또는 커맨드 프로세서 (33) 를 통해, 그래픽스 어플리케이션 (28) 을 위한 명령들을 수신하는 것과 동시에, GPU (16) 는, 비그래픽스 커맨드 프로세서 (38) 또는 커맨드 프로세서 (33) 를 통해, 비그래픽스 어플리케이션 (30) 을 위한 명령들을 수신한다.
도 5는 본 개시에 설명된 하나 이상의 예들에 따른 또 다른 예시적인 기법을 예시하는 플로우차트이다. 오직 예시의 목적을 위하여 그리고 이해를 용이하게 하기 위하여, 도 1 내지 도 3 을 참조한다.
프로세서 상의 드라이버는, 제 1 세트의 쉐이더 코어들 상에 실행될 그래픽스 어플리케이션을 위해 예약된 GPU 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정할 수도 있다 (56). 예를 들어, 프로세서 (12) 상에서 실행할 수도 있는 GPU 드라이버 (14) 는, 그래픽스 어플리케이션 (28) 을 실행하기 위해 GPU (16) 의 쉐이더 프로세서 (22) 의 얼마나 많은 쉐이더 코어들 (42) 이 그리고 쉐이더 코어들 (42) 의 어느 것들이 그래픽스 어플리케이션 (28) 을 위해 예약되는지를 결정할 수도 있다.
프로세서 상의 드라이버는, 제 2 세트의 쉐이더 코어들 상에 실행될 비그래픽스 어플리케이션을 위해 예약된 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정할 수도 있다 (58). 예를 들어, GPU 드라이버 (14) 는, 비그래픽스 어플리케이션 (30) 을 실행하기 위해 GPU (16) 의 쉐이더 프로세서 (22) 의 얼마나 많은 쉐이더 코어들 (42) 이 그리고 쉐이더 코어들 (42) 의 어느 것들이 비그래픽스 어플리케이션 (30) 을 위해 예약되는지를 결정할 수도 있다.
일부 예들에서, GPU 드라이버 (14) 는, 제 1 세트의 쉐이더 코어들 (즉, 그래픽스 어플리케이션 (28) 을 위해 예약된 것들) 이 제 2 세트의 쉐이더 코어들 (즉, 비그래픽스 어플리케이션 (30) 을 위해 예약된 것들) 보다 더 많은 쉐이더 코어들을 포함한다고 결정할 수도 있다. 얼마나 많은 쉐이더 코어들이 그래픽스 어플리케이션 (28) 을 위해 예약되야 하는지를 결정하기 위하여, GPU 드라이버 (14) 는 현재 큐잉되는 그래픽스 어플리케이션 (28) 의 명령들의 수를 결정할 수도 있다. 유사하게, 얼마나 많은 쉐이더 코어들이 비그래픽스 어플리케이션 (30) 을 위해 예약되야 하는지를 결정하기 위하여, GPU 드라이버 (14) 는 현재 큐잉되는 비그래픽스 어플리케이션 (30) 의 명령들의 수를 결정할 수도 있다.
드라이버는, 제 1 세트의 쉐이더 코어들의 표시를 GPU 내의 제 1 커맨드 프로세서에 송신할 수도 있다 (60). 드라이버는 또한, 제 2 세트의 쉐이더 코어들의 표시를 GPU 내에서 제 2 커맨드 프로세서에 송신할 수도 있다 (62). 다음으로 GPU 는 제 1 세트의 쉐이더 코어들 상에서 그래픽스 어플리케이션 (28) 을 실행할 수도 있고, 제 2 세트의 쉐이더 코어들 상에서 비그래픽스 어플리케이션 (30) 을 실행할 수도 있다. 일부 예들에서, 제 1 및 제 2 커맨드 프로세서들은 상이한 커맨드 프로세서들일 수도 있다. 대안의 예에서, 제 1 및 제 2 커맨드 프로세서는 동일한 커맨드 프로세서일 수도 있다. 가령, 제 1 및 제 2 커맨드 프로세서들이 상이한 커맨드 프로세서들인 예들에서, GPU 드라이버 (14) 는, 얼마나 많은 쉐이더 코어들 (42) 이 그리고 쉐이더 코어들 (42) 의 어느 것들이 그래픽스 어플리케이션 (28) 을 위해 예약되는지 나타내는 표시를 그래픽스 커맨드 프로세서 (32) 에 송신할 수도 있고, 얼마나 많은 쉐이더 코어들 (42) 이 그리고 쉐이더 코어들 (42) 의 어느 것들이 비그래픽스 어플리케이션 (30) 을 위해 예약되는지를 나타내는 표시를 비그래픽스 커맨드 프로세서 (38) 에 송신할 수도 있다. 또 다른 예에서, 제 1 및 제 2 커맨드 프로세서들이 동일한 커맨드 프로세서인 경우들에서, GPU 드라이버 (14) 는, 얼마나 많은 쉐이더 코어들 (42) 이 그리고 쉐이더 코어들 (42) 의 어느 것들이 그래픽스 어플리케이션 (28) 을 위해 예약되는지 나타내는 표시를 커맨드 프로세서 (33) 에 송신할 수도 있고, 얼마나 많은 쉐이더 코어들 (42) 이 그리고 쉐이더 코어들 (42) 의 어느 것들이 비그래픽스 어플리케이션 (30) 을 위해 예약되는지를 나타내는 표시를 커맨드 프로세서 (33) 에 송신할 수도 있다.
도 6은 도 1에 예시된, 예시적인 디바이스를 더 상세하게 예시하는 블록도이다. 예를 들어, 도 6은 도 1의 디바이스 (10) 를 더 상세하게 예시한다. 간결성을 위해서, 도 1에 예시된 것이 아니라 도 6에 예시된 디바이스 (10) 의 컴포넌트들만이 상세히 설명된다.
도 6의 예에서, 디바이스 (10) 는, 프로세서 (12), GPU (16), 메모리 (26), 트랜시버 모듈 (64), 사용자 인터페이스 (66), 디스플레이 (68), 및 디스플레이 프로세서 (70) 를 포함할 수도 있다. 디바이스 (10) 는, 명료성을 위해 도 6에 도시되지 않은 추가의 모듈들 또는 유닛들을 포함할 수도 있다. 예를 들어, 디바이스 (10) 가 이동 무선 전화기인 예들에서 전화 통신, 또는 디바이스 (10) 가 미디어 플레이어인 경우에 스피커를 이루기 위하여, 디바이스 (10) 는, 어느 것도 도 6에 도시되지 않은, 스피커 및 마이크로폰을 포함할 수도 있다. 디바이스 (10) 는 또한 비디오 카메라를 포함할 수도 있다. 게다가, 디바이스 (10) 에서 보여진 다양한 모듈들 및 유닛들은 디바이스 (10) 의 모든 예에서 필요하지 않을 수도 있다. 예를 들어, 사용자 인터페이스 (66) 및 디스플레이 (68) 는, 디바이스 (10) 가 데스크톱 컴퓨터 또는 외부 사용자 인터페이스 또는 디스플레이와 인터페이스하도록 구비된 다른 디바이스인 예들에서 디바이스 (10) 의 외부에 있을 수도 있다.
사용자 인터페이스 (66) 의 예들은, 트랙볼, 마우스, 키보드, 및 다른 타입의 입력 디바이스들을 포함하지만 이에 한정되지 않는다. 사용자 인터페이스 (66) 는 또한 터치 스크린일 수도 있고 디스플레이 (68) 의 부분으로 포함될 수도 있다. 트랜시버 모듈 (64) 은, 디바이스 (10) 와 또 다른 디바이스 또는 네트워크 간에 무선 또는 유선 통신을 허용하기 위한 회로를 포함할 수도 있다. 트랜시버 모듈 (64) 은, 변조기, 복조기, 증폭기 및 유선 또는 무선 통신을 위한 다른 그러한 회로를 포함할 수도 있다. 디스플레이 (68) 은, LCD (liquid crystal display), OLED (organic light emitting diode display), CRT (cathode ray tube) 디스플레이, 플라즈마 디스플레이, 또는 또 다른 타입의 디스플레이 디바이스를 포함할 수도 있다.
일부 예들에서, GPU (16) 는 디스플레이 (68) 상의 디스플레이를 위해 그래픽스 데이터를 생성한 후에, GPU (16) 는 임시 저장을 위해 시스템 메모리 (26) 에 결과적인 그래픽스 데이터를 출력할 수도 있다. 디스플레이 프로세서 (70) 는 시스템 메모리 (26) 로부터 그래픽스 데이터를 취출할 수도 있고, 그래픽스 데이터에 대한 임의의 포스트 프로세싱을 수행할 수도 있고, 결과적인 그래픽스 데이터를 디스플레이 (68) 로 출력할 수도 있다. 예를 들어, 디스플레이 프로세서 (70) 는, 임의의 추가 향상을 수행하거나 또는 GPU (16) 에 의해 생성되는 그래픽스 데이터를 스케일링할 수도 있다. 다른 예들에서, GPU (16) 는 그래픽스 데이터를 시스템 메모리 (26) 내의 프레임 버퍼에 출력하고 이는 다음으로 그래픽스 데이터를 디스플레이 (68) 에 출력하는 것이 가능할 수도 있다. 이 예에서, 디스플레이 프로세서 (70) 는 필요하지 않을 수도 있다.
도 6의 예에서, 프로세서 (12) 및 GPU (16) 는 도 1 내지 도 5를 참조하여 전술된 바처럼 구성될 수도 있다. 예를 들어, GPU (16) 는, 복수의 쉐이더 코어들을 포함하는 쉐이더 프로세서를 포함할 수도 있다. 프로세서 (12) 는, 그래픽스 어플리케이션을 실행하기 위하여 GPU (16) 를 위해 제 1 세트의 복수의 쉐이더 코어들을 예약할 수도 있고, 비그래픽스 어플리케이션을 실행하기 위하여 GPU (16) 를 위해 제 2 세트의 복수의 쉐이더 코어들을 예약할 수도 있다. 이 예에서, 그리고 전술된 바처럼, 그래픽스 어플리케이션들을 위해 예약된 쉐이더 코어들은 비그래픽스 어플리케이션들을 위한 명령들을 실행하지 않을 수도 있고 그 역 또한 마찬가지이다.
하나 이상의 예들에서, 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되면, 기능들은 컴퓨터 판독가능 매체 상의 하나 이상의 명령들 또는 코드로서 저장될 수도 있다. 컴퓨터 판독가능 매체는 컴퓨터 데이터 저장 매체를 포함할 수도 있다. 데이터 저장 매체는, 본 개시에서 설명된 기술들의 구현을 위해 명령들, 코드 및/또는 데이터 구조들을 취출하기 위하여 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 가용 매체일 수도 있다. 비한정적 예로서, 이러한 컴퓨터 판독가능 매체는 RAM (random access memory), ROM (read-only memory), EEPROM, CD-ROM 또는 다른 광학 디스크 저장, 자성 디스크 저장 또는 다른 자성 저장 디바이스들, 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 저장하는데 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 여기에 설명된 바와 같이, 디스크 (disk) 및 디스크 (disc) 는 콤팩트 디스크 (CD), 레이저 디스크, 광 디스크, DVD (digital versatile disc), 플로피 디스크 및 블루-레이 디스크를 포함하며, 여기서, 디스크 (disk) 는 일반적으로 데이터를 자기적으로 재생하지만, 디스크 (disc) 는 레이저를 이용하여 광학적으로 데이터를 재생한다. 또한, 상기의 조합은 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
코드는 하나 이상의 프로세서, 이를테면 하나 이상의 DSP (digital signal processor), 범용 마이크로프로세서, ASIC (application specific integrated circuit), FPGA (field programmable logic array), 또는 다른 동등한 집적 또는 이산 로직 회로에 의해 실행될 수도 있다. 따라서, 본원에 사용된 용어 "프로세서" 는 이전 구조 중 임의의 것 또는 본원에 설명된 기술들의 구현에 적합한 임의의 다른 구조를 지칭할 수도 있다. 또한, 그 기법들은 하나 이상의 회로 또는 로직 엘리먼트들에서 완전히 구현될 수 있다.
본 개시의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 IC 들의 세트 (즉, 칩 세트) 를 포함하여, 폭넓게 다양한 디바이스들 또는 장치들에서 구현될 수도 있다. 다양한 컴포넌트들, 모듈들, 또는 유닛들이, 개시된 기술들을 수행하도록 구성된 디바이스들의 기능적인 양태들을 강조하기 위하여 본 개시에 설명되었지만, 다른 하드웨어 유닛들에 의한 실현을 반드시 필요로 하는 것은 아니다. 오히려, 전술된 바처럼, 다양한 유닛들이 하드웨어 유닛으로 결합될 수도 있거나 또는 적합한 소프트웨어 및/또는 펌웨어와 함께, 전술된 하나 이상의 프로세서들을 포함하는 연동적인 (interoperative) 하드웨어 유닛들의 집합에 의해 제공될 수도 있다.
다양한 예들이 설명되었다. 이들 및 다른 예들은 다음의 청구항들의 범위 내에 있다.

Claims (41)

  1. 그래픽스 프로세싱 유닛 (GPU) 으로, 그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들의 표시를 수신하는 단계;
    상기 GPU 로, 비그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들의 표시를 수신하는 단계;
    상기 GPU 로, 상기 그래픽스 어플리케이션의 명령들을 수신하는 단계;
    상기 GPU 로, 상기 비그래픽스 어플리케이션의 명령들을 수신하는 단계;
    상기 GPU 로, 상기 제 1 세트의 쉐이더 코어들에 의해 상기 그래픽스 어플리케이션의 명령들을 실행하는 단계; 및
    상기 그래픽스 어플리케이션의 명령들을 실행하는 것과 실질적으로 동시에, 상기 GPU 로, 상기 제 2 세트의 쉐이더 코어들에 의해 상기 비그래픽스 어플리케이션의 명령들을 실행하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들의 표시를 수신하는 단계는, 상기 GPU 의 제 1 커맨드 프로세서로, 상기 제 1 세트의 쉐이더 코어들의 표시를 수신하는 단계를 포함하고, 상기 제 2 세트의 쉐이더 코어들의 표시를 수신하는 단계는, 상기 GPU 의 제 2, 상이한 커맨드 프로세서로, 상기 제 2 세트의 쉐이더 코어들의 표시를 수신하는 단계를 포함하는, 방법.
  3. 제 1 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들의 표시를 수신하는 단계는, 상기 GPU 의 커맨드 프로세서로, 상기 제 1 세트의 쉐이더 코어들의 표시를 수신하는 단계를 포함하고, 상기 제 2 세트의 쉐이더 코어들의 표시를 수신하는 단계는, 동일한 커맨드 프로세서로, 상기 제 2 세트의 쉐이더 코어들의 표시를 수신하는 단계를 포함하는, 방법.
  4. 제 1 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들에 의해 상기 비그래픽스 어플리케이션의 명령들을 실행하지 않는 단계; 및
    상기 제 2 세트의 쉐이더 코어들에 의해 상기 그래픽스 어플리케이션의 명령들을 실행하지 않는 단계를 더 포함하는, 방법.
  5. 제 1 항에 있어서,
    상기 비그래픽스 어플리케이션의 명령들을 수신하는 단계는, 상기 그래픽스 어플리케이션의 명령들을 수신하는 것과 동시에 상기 비그래픽스 어플리케이션의 명령들을 수신하는 단계를 포함하는, 방법.
  6. 제 1 항에 있어서,
    제 1 워크로드 분배 유닛으로, 상기 제 1 세트의 쉐이더 코어들의 어느 것들이 상기 그래픽스 어플리케이션의 명령들의 어느 것들을 실행하는지를 결정하는 단계; 및
    제 2, 상이한 워크로드 분배 유닛으로, 상기 제 2 세트의 쉐이더 코어들의 어느 것들이 상기 비그래픽스 어플리케이션의 명령들의 어느 것들을 실행하는지를 결정하는 단계를 더 포함하고,
    상기 그래픽스 어플리케이션의 명령을 실행하는 단계는, 상기 제 1 세트의 쉐이더 코어들의 어느 것들이 상기 그래픽스 어플리케이션의 명령들의 어느 것들을 실행하는지의 결정에 기초하여 상기 그래픽스 어플리케이션의 명령들을 실행하는 단계를 포함하고,
    상기 비그래픽스 어플리케이션의 명령을 실행하는 단계는, 상기 제 2 세트의 쉐이더 코어들의 어느 것들이 상기 비그래픽스 어플리케이션의 명령들의 어느 것들을 실행하는지의 결정에 기초하여 상기 비그래픽스 어플리케이션의 명령들을 실행하는 단계를 포함하는, 방법.
  7. 제 1 항에 있어서,
    상기 GPU 내의 메모리 캐시에서 상기 비그래픽스 어플리케이션의 명령들의 실행의 결과를 저장하는 것에 비해 상기 GPU 내의 상기 메모리 캐시에서 상기 그래픽스 어플리케이션의 명령들의 실행의 결과의 저장을 우선화하는 단계를 더 포함하는, 방법.
  8. 제 1 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들의 표시를 수신하는 단계는, 상기 GPU 의 제 1 커맨드 프로세서로, 상기 제 1 세트의 쉐이더 코어들의 표시를 수신하는 단계를 포함하고, 상기 제 2 세트의 쉐이더 코어들의 표시를 수신하는 단계는, 상기 GPU 의 제 2, 상이한 커맨드 프로세서로, 상기 제 2 세트의 쉐이더 코어들의 표시를 수신하는 단계를 포함하고,
    상기 방법은,
    상기 비그래픽스 어플리케이션의 명령들이 없을 때 상기 제 2 커맨드 프로세서를 파워 다운하기 위한 표시를 수신하는 단계; 및
    상기 표시를 수신하는 것에 응답하여 상기 제 2 커맨드 프로세서를 파워 다운하는 단계를 더 포함하는, 방법.
  9. 제 1 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들의 쉐이더 코어들의 수는 상기 제 2 세트의 쉐이더 코어들의 쉐이더 코어들의 수와 상이한, 방법.
  10. 프로세서 상의 드라이버로, 제 1 세트의 쉐이더 코어들 상에 실행될 그래픽스 어플리케이션을 위해 예약된 그래픽스 프로세싱 유닛 (GPU) 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정하는 단계;
    상기 프로세서 상의 드라이버로, 제 2 세트의 쉐이더 코어들에 의해 실행될 비그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 상기 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정하는 단계; 및
    상기 GPU 에, 상기 제 1 세트의 쉐이더 코어들의 표시 및 상기 제 2 세트의 쉐이더 코어들의 표시를 송신하는 단계를 포함하는, 방법.
  11. 제 10 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들을 결정하는 단계는, 얼마나 많은 상기 쉐이더 코어들이 그리고 상기 쉐이더 코어들의 어느 것들이 상기 그래픽스 어플리케이션을 위해 예약되야 하는지를 결정하는 단계를 포함하고, 상기 제 2 세트의 쉐이더 코어들을 결정하는 단계는 얼마나 많은 상기 쉐이더 코어들이 그리고 상기 쉐이더 코어들의 어느 것들이 상기 비그래픽스 어플리케이션을 위해 예약되야 하는지를 결정하는 단계를 포함하는, 방법.
  12. 제 10 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들은 상기 제 2 세트의 쉐이더 코어들보다 더 많은 쉐이더 코어들을 포함한다고 결정하는 단계를 더 포함하는, 방법.
  13. 제 10 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들을 결정하는 단계는, 상기 그래픽스 어플리케이션들의 큐잉된 명령들의 수에 기초하여 상기 제 1 세트의 쉐이더 코어들을 결정하는 단계를 포함하는, 방법.
  14. 제 10 항에 있어서,
    상기 제 2 세트의 쉐이더 코어들을 결정하는 단계는, 상기 비그래픽스 어플리케이션들의 큐잉된 명령들의 수에 기초하여 상기 제 2 세트의 쉐이더 코어들을 결정하는 단계를 포함하는, 방법.
  15. 제 10 항에 있어서,
    상기 송신하는 단계는
    상기 제 1 세트의 쉐이더 코어들의 표시를 상기 GPU 내의 제 1 커맨드 프로세서에 송신하는 단계; 및
    상기 제 2 세트의 쉐이더 코어들의 표시를 상기 GPU 내의 제 2, 상이한 프로세서에 송신하는 단계를 포함하는, 방법.
  16. 제 10 항에 있어서,
    상기 송신하는 단계는
    상기 제 1 세트의 쉐이더 코어들의 표시를 상기 GPU 내의 커맨드 프로세서에 송신하는 단계; 및
    상기 제 2 세트의 쉐이더 코어들의 표시를 상기 GPU 내의 동일한 커맨드 프로세서에 송신하는 단계를 포함하는, 방법.
  17. 그래픽스 프로세싱 유닛 (GPU) 으로서,
    복수의 쉐이더 코어들을 포함하는 쉐이더 프로세서;
    그래픽스 어플리케이션의 명령들을 실행하기 위해 예약된 제 1 세트의 쉐이더 코어들의 표시를 수신하고, 상기 그래픽스 어플리케이션의 명령들을 수신하도록 구성된 제 1 커맨드 프로세서; 및
    비그래픽스 어플리케이션의 명령들을 실행하기 위해 예약된 제 2, 상이한 세트의 쉐이더 코어들의 표시를 수신하고, 상기 비그래픽스 어플리케이션의 명령들을 수신하도록 구성된 제 2 커맨드 프로세서를 포함하는, 그래픽스 프로세싱 유닛 (GPU).
  18. 제 17 항에 있어서,
    상기 제 1 커맨드 프로세서는 상기 제 2 커맨드 프로세서와 상이한, 그래픽스 프로세싱 유닛 (GPU).
  19. 제 17 항에 있어서,
    상기 제 1 커맨드 프로세서는 상기 제 2 커맨드 프로세서와 동일한, 그래픽스 프로세싱 유닛 (GPU).
  20. 제 17 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들은 상기 그래픽스 어플리케이션의 명령들을 실행하도록 구성되고,
    상기 그래픽스 어플리케이션의 명령들의 실행과 실질적으로 동시에, 상기 제 2 세트의 쉐이더 코어들은 상기 비그래픽스 어플리케이션의 명령들을 실행하도록 구성되는, 그래픽스 프로세싱 유닛 (GPU).
  21. 제 17 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들은 상기 비그래픽스 어플리케이션의 명령들을 실행하지 않도록 구성되고,
    상기 제 2 세트의 쉐이더 코어들은 상기 그래픽스 어플리케이션의 명령들을 실행하지 않도록 구성되는, 그래픽스 프로세싱 유닛 (GPU).
  22. 제 17 항에 있어서,
    상기 제 1 커맨드 프로세서는, 상기 제 2 커맨드 프로세서가 상기 비그래픽스 어플리케이션의 명령들을 수신하는 것과 동시에 상기 그래픽스 어플리케이션의 명령들을 수신하도록 구성되는, 그래픽스 프로세싱 유닛 (GPU).
  23. 제 17 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들의 어느 것들이 상기 그래픽스 어플리케이션의 명령들의 어느 것들을 실행하는지를 결정하도록 구성된 제 1 워크로드 분배 유닛; 및
    상기 제 2 세트의 쉐이더 코어들의 어느 것들이 상기 비그래픽스 어플리케이션의 명령들의 어느 것들을 실행하는지를 결정하도록 구성된 제 2, 상이한 워크로드 분배 유닛을 더 포함하고,
    상기 제 1 세트의 쉐이더 코어들은 상기 제 1 워크로드 분배 유닛의 결정에 기초하여 상기 그래픽스 어플리케이션의 명령들을 실행하도록 구성되고,
    상기 제 2 세트의 쉐이더 코어들은 상기 제 2 워크로드 분배 유닛의 결정에 기초하여 상기 비그래픽스 어플리케이션의 명령들을 실행하도록 구성되는, 그래픽스 프로세싱 유닛 (GPU).
  24. 제 17 항에 있어서,
    메모리 캐시를 더 포함하고,
    상기 제 1 커맨드 프로세서 및 상기 제 2 커맨드 프로세서의 적어도 하나는, 상기 메모리 캐시에서 상기 비그래픽스 어플리케이션의 명령들의 실행의 결과의 저장에 비하여 상기 메모리 캐시에서 상기 그래픽스 어플리케이션의 명령들의 실행의 결과의 저장을 우선화하도록 구성되는, 그래픽스 프로세싱 유닛 (GPU).
  25. 제 17 항에 있어서,
    상기 GPU 는 상기 비그래픽스 어플리케이션의 명령들이 없을 때 상기 제 2 커맨드 프로세서를 파워 다운하기 위한 표시를 수신하고, 상기 파워 다운하기 위한 표시의 수신에 응답하여 상기 제 2 커맨드 프로세서를 파워 다운하도록 구성되는, 그래픽스 프로세싱 유닛 (GPU).
  26. 제 17 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들의 쉐이더 코어들의 수는 상기 제 2 세트의 쉐이더 코어들의 쉐이더 코어들의 수와 상이한, 그래픽스 프로세싱 유닛 (GPU).
  27. 제 1 세트의 쉐이더 코어들 상에 실행될 그래픽스 어플리케이션을 위해 예약된 그래픽스 프로세싱 유닛 (GPU) 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정하고;
    제 2 세트의 쉐이더 코어들에 의해 실행될 비그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정하고;
    상기 GPU 에, 상기 제 1 세트의 쉐이더 코어들의 표시 및 상기 제 2 세트의 쉐이더 코어들의 표시를 송신하도록 구성되는, 프로세서.
  28. 제 27 항에 있어서,
    상기 프로세서는 상기 결정 및 상기 GPU 에의 송신을 수행하는 드라이버를 실행하는, 프로세서.
  29. 제 27 항에 있어서,
    상기 프로세서는, 상기 제 1 세트의 쉐이더 코어들을 결정하기 위하여 얼마나 많은 상기 쉐이더 코어들이 그리고 상기 쉐이더 코어들의 어느 것들이 상기 그래픽스 어플리케이션을 위해 예약되야 하는지를 결정하고, 상기 제 2 세트의 쉐이더 코어들을 결정하기 위하여 얼마나 많은 상기 쉐이더 코어들이 그리고 상기 쉐이더 코어들의 어느 것들이 상기 비그래픽스 어플리케이션을 위해 예약되야 하는지를 결정하도록 구성되는, 프로세서.
  30. 제 27 항에 있어서,
    상기 프로세서는 상기 제 1 세트의 쉐이더 코어들이 상기 제 2 세트의 쉐이더 코어들보다 더 많은 쉐이더 코어들을 포함한다고 결정하도록 구성되는, 프로세서.
  31. 제 27 항에 있어서,
    상기 프로세서는, 상기 그래픽스 어플리케이션의 큐잉된 명령들의 수에 기초하여 상기 제 1 세트의 쉐이더 코어들을 결정하도록 구성되는, 프로세서.
  32. 제 27 항에 있어서,
    상기 프로세서는, 상기 비그래픽스 어플리케이션의 큐잉된 명령들의 수에 기초하여 상기 제 2 세트의 쉐이더 코어들을 결정하도록 구성되는, 프로세서.
  33. 제 27 항에 있어서,
    상기 프로세서는
    상기 제 1 세트의 쉐이더 코어들의 표시를 상기 GPU 의 제 1 커맨드 프로세서에 송신하고;
    상기 제 2 세트의 쉐이더 코어들의 표시를 상기 GPU 의 제 2, 상이한 커맨드 프로세서에 송신하도록 구성되는, 프로세서.
  34. 제 27 항에 있어서,
    상기 프로세서는
    상기 제 1 세트의 쉐이더 코어들의 표시를 상기 GPU 의 커맨드 프로세서에 송신하고;
    상기 제 2 세트의 쉐이더 코어들의 표시를 상기 GPU 의 동일한 커맨드 프로세서에 송신하도록 구성되는, 프로세서.
  35. 그래픽스 프로세싱 유닛 (GPU) 으로서,
    그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들의 표시를 수신하는 제 1 수단;
    비그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들의 표시를 수신하는 제 2 수단;
    상기 그래픽스 어플리케이션의 명령들을 수신하는 제 3 수단;
    상기 비그래픽스 어플리케이션의 명령들을 수신하는 제 4 수단;
    상기 제 1 세트의 쉐이더 코어들에 의해 상기 그래픽스 어플리케이션의 명령들을 실행하는 수단; 및
    상기 그래픽스 어플리케이션의 명령들을 실행하는 것과 동시에, 상기 제 2 세트의 쉐이더 코어들에 의해 상기 비그래픽스 어플리케이션의 명령들을 실행하는 수단을 포함하는, 그래픽스 프로세싱 유닛 (GPU).
  36. 제 35 항에 있어서,
    상기 수신하는 제 1 수단 및 상기 수신하는 제 2 수단은 상이한 수신하는 수단을 포함하는, 그래픽스 프로세싱 유닛 (GPU).
  37. 하나 이상의 프로세서들로 하여금,
    그래픽스 프로세싱 유닛 (GPU) 으로, 그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들의 표시를 수신하고;
    상기 GPU 로, 비그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들의 표시를 수신하고;
    상기 GPU 로, 상기 그래픽스 어플리케이션의 명령들을 수신하고;
    상기 GPU 로, 상기 비그래픽스 어플리케이션의 명령들을 수신하고;
    상기 GPU 로, 상기 제 1 세트의 쉐이더 코어들에 의해 상기 그래픽스 어플리케이션의 명령들을 실행하고; 및
    상기 그래픽스 어플리케이션의 명령들을 실행하는 것과 동시에, 상기 GPU 로, 상기 제 2 세트의 쉐이더 코어들에 의해 상기 비그래픽스 어플리케이션의 명령들을 실행하게 하는 명령들을 포함하는, 컴퓨터 판독가능 저장 매체.
  38. 제 37 항에 있어서,
    상기 제 1 세트의 쉐이더 코어들의 표시를 수신하기 위한 명령들은 제 1 커맨드 프로세서에 의해 상기 제 1 세트의 쉐이더 코어들의 표시를 수신하기 위한 명령들을 포함하고, 상기 제 2 세트의 쉐이더 코어들의 표시를 수신하기 위한 명령들은 제 2, 상이한 커맨드 프로세서에 의해 상기 제 2 세트의 쉐이더 코어들의 표시를 수신하기 위한 명령들을 포함하는, 컴퓨터 판독가능 저장 매체.
  39. 제 1 세트의 쉐이더 코어들 상에 실행될 그래픽스 어플리케이션을 위해 예약된 그래픽스 프로세싱 유닛 (GPU) 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정하는 수단;
    제 2 세트의 쉐이더 코어들에 의해 실행될 비그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정하는 수단;
    상기 GPU 에, 상기 제 1 세트의 쉐이더 코어들의 표시 및 상기 제 2 세트의 쉐이더 코어들의 표시를 송신하는 수단을 포함하는, 프로세서.
  40. 하나 이상의 프로세서들로 하여금
    상기 하나 이상의 프로세서들 상의 드라이버로, 제 1 세트의 쉐이더 코어들 상에 실행될 그래픽스 어플리케이션을 위해 예약된 그래픽스 프로세싱 유닛 (GPU) 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정하고;
    상기 하나 이상의 프로세서들 상의 드라이버로, 제 2 세트의 쉐이더 코어들에 의해 실행될 비그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정하고; 및
    상기 GPU 에, 상기 제 1 세트의 쉐이더 코어들의 표시 및 상기 제 2 세트의 쉐이더 코어들의 표시를 송신하게 하는 명령들을 포함하는, 컴퓨터 판독가능 저장 매체.
  41. 장치로서,
    프로세서; 및
    그래픽스 프로세싱 유닛 (GPU) 을 포함하고,
    상기 프로세서는
    제 1 세트의 쉐이더 코어들 상에 실행될 그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 1 세트의 쉐이더 코어들을 결정하고;
    제 2 세트의 쉐이더 코어들에 의해 실행될 비그래픽스 어플리케이션을 위해 예약된 상기 GPU 의 쉐이더 프로세서의 제 2, 상이한 세트의 쉐이더 코어들을 결정하고;
    상기 GPU 에, 상기 제 1 세트의 쉐이더 코어들의 표시 및 상기 제 2 세트의 쉐이더 코어들의 표시를 송신하도록 구성되고,
    상기 GPU 는
    상기 제 1 세트의 쉐이더 코어들 및 상기 제 2 세트의 쉐이더 코어들을 포함하는 복수의 쉐이더 코어들을 포함하는 상기 쉐이더 프로세서;
    상기 그래픽스 어플리케이션의 명령들을 실행하기 위해 예약된 상기 제 1 세트의 쉐이더 코어들의 표시를 수신하고, 상기 그래픽스 어플리케이션의 명령들을 수신하도록 구성된 제 1 커맨드 프로세서; 및
    비그래픽스 어플리케이션의 명령들을 실행하기 위해 예약된 상기 제 2, 상이한 세트의 쉐이더 코어들의 표시를 수신하고, 상기 비그래픽스 어플리케이션의 명령들을 수신하도록 구성된 제 2 커맨드 프로세서를 포함하는, 장치.
KR1020147027883A 2012-03-07 2013-02-18 그래픽스 프로세싱 유닛 상의 그래픽스 및 비그래픽스 어플리케이션들의 실행 KR101552079B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/414,450 2012-03-07
US13/414,450 US9019289B2 (en) 2012-03-07 2012-03-07 Execution of graphics and non-graphics applications on a graphics processing unit
PCT/US2013/026596 WO2013133957A1 (en) 2012-03-07 2013-02-18 Execution of graphics and non-graphics applications on a graphics processing unit

Publications (2)

Publication Number Publication Date
KR20140138842A true KR20140138842A (ko) 2014-12-04
KR101552079B1 KR101552079B1 (ko) 2015-09-09

Family

ID=47833377

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147027883A KR101552079B1 (ko) 2012-03-07 2013-02-18 그래픽스 프로세싱 유닛 상의 그래픽스 및 비그래픽스 어플리케이션들의 실행

Country Status (8)

Country Link
US (1) US9019289B2 (ko)
EP (1) EP2823459B1 (ko)
JP (1) JP5792402B2 (ko)
KR (1) KR101552079B1 (ko)
CN (1) CN104160420B (ko)
ES (1) ES2572555T3 (ko)
HU (1) HUE027044T2 (ko)
WO (1) WO2013133957A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180128075A (ko) * 2016-05-23 2018-11-30 퀄컴 인코포레이티드 그래픽스 프로세싱을 위한 퍼-쉐이더 프리앰블

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102007054876A1 (de) * 2006-11-22 2008-06-19 Sms Demag Ag Verfahren und Vorrichtung zur Wärmebehandlung von Schweißnähten
US10817043B2 (en) * 2011-07-26 2020-10-27 Nvidia Corporation System and method for entering and exiting sleep mode in a graphics subsystem
US10198788B2 (en) * 2013-11-11 2019-02-05 Oxide Interactive Llc Method and system of temporally asynchronous shading decoupled from rasterization
CN105786449B (zh) * 2014-12-26 2018-07-24 龙芯中科技术有限公司 基于图形处理的指令调度方法及装置
US20160210231A1 (en) * 2015-01-21 2016-07-21 Mediatek Singapore Pte. Ltd. Heterogeneous system architecture for shared memory
US20160260246A1 (en) * 2015-03-02 2016-09-08 Advanced Micro Devices, Inc. Providing asynchronous display shader functionality on a shared shader core
US20180033114A1 (en) * 2016-07-26 2018-02-01 Mediatek Inc. Graphics Pipeline That Supports Multiple Concurrent Processes
US10417734B2 (en) * 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10417731B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US11037356B2 (en) 2018-09-24 2021-06-15 Zignal Labs, Inc. System and method for executing non-graphical algorithms on a GPU (graphics processing unit)
US10861126B1 (en) 2019-06-21 2020-12-08 Intel Corporation Asynchronous execution mechanism
US11436783B2 (en) 2019-10-16 2022-09-06 Oxide Interactive, Inc. Method and system of decoupled object space shading
US11282160B2 (en) 2020-03-12 2022-03-22 Cisco Technology, Inc. Function-as-a-service (FaaS) model for specialized processing units
GB2600712A (en) * 2020-11-04 2022-05-11 Advanced Risc Mach Ltd Data processing systems

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070204268A1 (en) 2006-02-27 2007-08-30 Red. Hat, Inc. Methods and systems for scheduling processes in a multi-core processor environment
US8251825B2 (en) 2006-08-14 2012-08-28 Wms Gaming Inc. Applying graphical characteristics to graphical objects in a wagering game machine
US20090305790A1 (en) * 2007-01-30 2009-12-10 Vitie Inc. Methods and Apparatuses of Game Appliance Execution and Rendering Service
US8922565B2 (en) 2007-11-30 2014-12-30 Qualcomm Incorporated System and method for using a secondary processor in a graphics system
US20100265250A1 (en) 2007-12-21 2010-10-21 David Koenig Method and system for fast rendering of a three dimensional scene
DE102008005124A1 (de) 2008-01-18 2009-07-23 Kuka Roboter Gmbh Computersystem, Steuerungsvorrichtung für eine Maschine, insbesondere für einen Industrieroboter, und Industrieroboter
WO2011023204A1 (en) 2009-08-24 2011-03-03 Abb Research Ltd. Simulation of distributed virtual control systems
US9142057B2 (en) 2009-09-03 2015-09-22 Advanced Micro Devices, Inc. Processing unit with a plurality of shader engines
US8310492B2 (en) * 2009-09-03 2012-11-13 Ati Technologies Ulc Hardware-based scheduling of GPU work
US20110063309A1 (en) * 2009-09-16 2011-03-17 Nvidia Corporation User interface for co-processing techniques on heterogeneous graphics processing units
US20110212761A1 (en) 2010-02-26 2011-09-01 Igt Gaming machine processor
EP2383648B1 (en) * 2010-04-28 2020-02-19 Telefonaktiebolaget LM Ericsson (publ) Technique for GPU command scheduling
US9311102B2 (en) * 2010-07-13 2016-04-12 Advanced Micro Devices, Inc. Dynamic control of SIMDs
US20120229481A1 (en) * 2010-12-13 2012-09-13 Ati Technologies Ulc Accessibility of graphics processing compute resources
US20130141447A1 (en) * 2011-12-06 2013-06-06 Advanced Micro Devices, Inc. Method and Apparatus for Accommodating Multiple, Concurrent Work Inputs

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180128075A (ko) * 2016-05-23 2018-11-30 퀄컴 인코포레이티드 그래픽스 프로세싱을 위한 퍼-쉐이더 프리앰블

Also Published As

Publication number Publication date
EP2823459B1 (en) 2016-02-17
KR101552079B1 (ko) 2015-09-09
JP2015515052A (ja) 2015-05-21
EP2823459A1 (en) 2015-01-14
WO2013133957A1 (en) 2013-09-12
JP5792402B2 (ja) 2015-10-14
HUE027044T2 (en) 2016-08-29
US20130235053A1 (en) 2013-09-12
ES2572555T3 (es) 2016-06-01
CN104160420A (zh) 2014-11-19
US9019289B2 (en) 2015-04-28
CN104160420B (zh) 2016-08-24

Similar Documents

Publication Publication Date Title
KR101552079B1 (ko) 그래픽스 프로세싱 유닛 상의 그래픽스 및 비그래픽스 어플리케이션들의 실행
US9396032B2 (en) Priority based context preemption
EP3365865B1 (en) Gpu operation algorithm selection based on command stream marker
US20220101479A1 (en) Apparatus and method for graphics processing unit hybrid rendering
US11763419B2 (en) GPR optimization in a GPU based on a GPR release mechanism
CN111080761A (zh) 一种渲染任务的调度方法、装置及计算机存储介质
KR102223446B1 (ko) 비특권 애플리케이션에 의한 그래픽 작업부하 실행의뢰
US20130173933A1 (en) Performance of a power constrained processor
US11055808B2 (en) Methods and apparatus for wave slot management
US20200311859A1 (en) Methods and apparatus for improving gpu pipeline utilization
US11574380B2 (en) Methods and apparatus for optimizing GPU kernel with SIMO approach for downscaling utilizing GPU cache
US20220172695A1 (en) Methods and apparatus for plane planning for overlay composition
WO2021012257A1 (en) Methods and apparatus to facilitate a unified framework of post-processing for gaming
TW202341063A (zh) 動態波配對
CN112988364A (zh) 一种动态的任务调度方法、装置及存储介质

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180628

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190624

Year of fee payment: 5