KR20160089863A - 하이브리드 온디맨드 그래픽 변환 테이블 쉐도잉 - Google Patents
하이브리드 온디맨드 그래픽 변환 테이블 쉐도잉 Download PDFInfo
- Publication number
- KR20160089863A KR20160089863A KR1020157033348A KR20157033348A KR20160089863A KR 20160089863 A KR20160089863 A KR 20160089863A KR 1020157033348 A KR1020157033348 A KR 1020157033348A KR 20157033348 A KR20157033348 A KR 20157033348A KR 20160089863 A KR20160089863 A KR 20160089863A
- Authority
- KR
- South Korea
- Prior art keywords
- gtt
- shadow
- graphics
- virtual
- command
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1081—Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/60—Shadow generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45591—Monitoring or debugging support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/15—Use in a specific computing environment
- G06F2212/151—Emulated environment, e.g. virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/30—Providing cache or TLB in specific location of a processing system
- G06F2212/302—In image processor or graphics adapter
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
몇몇 실시형태에서, 가상 그래픽 프로세서를 하나 이상의 가상 머신으로 제공하기 위해 그래픽 프로세서는 가상 머신 모니터(VMM)에 커플링된다. 가상 그래픽 프로세서에 대한 중재기는 트랩 및 에뮬레이트 가상화를 사용하여 가상 머신의 게스트 그래픽 변환 테이블(GTT)에 대한 수정을 VMM의 쉐도우 GTT에 동기적으로 쉐도잉한다. 임계치를 초과하는 게스트 GTT에 대한 수정의 빈도를 중재기가 검출하면, 중재기는 게스트 GTT의 적어도 일부를 쉐도우 GTT에 비동기적으로 쉐도잉하고 가상 그래픽 프로세서에 대한 커맨드를 그래픽 프로세서에 제출하기 이전에 쉐도우 GTT를 재구축한다.
Description
실시형태는 일반적으로 그래픽 가상화 환경에 관한 것이다. 특히, 실시형태는 그래픽 변환 테이블(graphics translation table)의 관리에 관한 것이다.
그래픽 가상화는 가상 머신(virtual machine, VM) 내에서 실행하는 소프트웨어가 다양한 이벤트를 제어하고 물리적 머신 상의 그래픽 하드웨어 리소스에 액세스하는 것을 가능하게 할 수도 있는데, 이 경우 가상 머신 모니터(virtual machine monitor, VMM)가 물리적 머신 상에서 VM을 생성하여 실행할 수도 있다. 따라서, VM 소프트웨어는 총칭하여 게스트 소프트웨어로 칭해질 수도 있고 VMM은 호스트로서 칭해질 수도 있다. 다수의 VM 사이에서 그래픽 하드웨어 리소스를 구획하는 것은 효율성 및 보안성과 관련하여 소정의 도전과제를 제시할 수도 있다. 예를 들면, 종래의 그래픽 가상화 솔루션에서의 호스트 및 게스트 소프트웨어는 그래픽 메모리 어드레스 공간의 동일한 시야(view)(예를 들면, 사이즈 및 레이아웃)를 갖지 않을 수도 있고, 소정의 경우에 게스트 그래픽 메모리 어드레스 공간이 시스템 메모리 어드레스 공간과 동일하지 않을 수도 있다. 따라서, 게스트 커맨드(예를 들면, 렌더링 커맨드)가 게스트 소프트웨어에 의해 그래픽 하드웨어로 발행될 때, 게스트 시야에서 호스트 시야로의 어드레스 리매핑 및/또는 조정(fixing)(예를 들면, 커맨드에서 게스트 어드레스를 발견하고 그것을 호스트 어드레스로 대체하는 것)이 행해질 수도 있다. 하드웨어 기반의 어드레스 리매핑 및/또는 조정은 복잡성을 부가하는 태깅 기술(tagging technology)을 수반할 수도 있다. 또한, 소프트웨어 기반의 어드레스 리매핑 및/또는 조정은, VMM 인터셉션, 파싱 및/ 각각의 게스트 커맨드의 변환을 수반할 수도 있는데, 이것은 추가적인 오버헤드를 야기할 수도 있다.
실시형태의 다양한 이점은, 하기의 명세서 및 첨부의 청구범위의 정독함으로써, 그리고 하기의 도면을 참조함으로써 기술분야의 숙련된 자에게 명백해질 것인데, 도면에서,
도 1은 하나 이상의 프로세서 코어 및 그래픽 프로세서를 구비하는 프로세서를 갖는 컴퓨터 시스템의 한 실시형태의 블록도이다.
도 2는 하나 이상의 프로세서 코어, 통합형 메모리 컨트롤러, 및 통합형 그래픽 프로세서를 구비하는 프로세서의 일 실시형태의 블록도이다.
도 3은 별개의 그래픽 프로세싱 유닛일 수도 있는, 또는 복수의 프로세싱 코어와 통합되는 그래픽 프로세서일 수도 있는 그래픽 프로세서의 일 실시형태의 블록도이다.
도 4는 그래픽 프로세서용 그래픽 프로세싱 엔진의 한 실시형태의 블록도이다.
도 5는 그래픽 프로세서의 다른 실시형태의 블록도이다.
도 6은 프로세싱 엘리먼트의 어레이를 포함하는 스레드 실행 로직의 블록도이다.
도 7은 한 실시형태에 따른 그래픽 프로세서 실행 유닛 명령어 포맷을 예시한다.
도 8은, 그래픽 파이프라인, 미디어 파이프라인, 디스플레이 엔진, 스레드 실행 로직, 및 렌더 출력 파이프라인(render output pipeline)을 포함하는 그래픽 프로세서의 다른 실시형태의 블록도이다.
도 9a는 한 실시형태에 따른 그래픽 프로세서 커맨드 포맷을 예시하는 블록도이다.
도 9b는 한 실시형태에 따른 그래픽 프로세서 커맨드 시퀀스를 예시하는 블록도이다.
도 10은 한 실시형태에 따른 데이터 프로세싱 시스템에 대한 예시적인 그래픽 소프트웨어 아키텍쳐를 예시한다.
도 11은, 한 실시형태에 따른, 그래픽 변환 테이블을 포함하는 예시적인 GPU 프로그래밍 모델의 개관(overview)을 제공한다.
도 12는, 한 실시형태에 따른, 예시적인 전역적 및 프로세스마다의(per process) 그래픽 변환 테이블의 블록도이다.
도 13은 한 실시형태에 따른 예시적인 그래픽 가상화 환경의 블록도이다.
도 14는 게스트 그래픽 변환 테이블에 대한 비동기 모드에 진입하기 위한 로직의 흐름도이다.
도 15a 및 도 15b는, 한 실시형태에 따른, 쉐도우 그래픽 변환 테이블 재구성의 블록도이다.
도 16은 쉐도우 그래픽 변환 테이블의 적어도 일부를 재구성하기 위한 흐름도이다.
도 17a 및 도 17b는 게스트 그래픽 변환 테이블에 대한 비동기 모드를 탈출하기 위한 로직을 포함하는 흐름도이다.
도 18은, 한 실시형태에 따른, 하이브리드 동기화를 예시하는 블록도이다.
도 19는, 한 실시형태에 따른, 하이브리드 동기화를 수행하기 위한 로직의 흐름도이다.
도 1은 하나 이상의 프로세서 코어 및 그래픽 프로세서를 구비하는 프로세서를 갖는 컴퓨터 시스템의 한 실시형태의 블록도이다.
도 2는 하나 이상의 프로세서 코어, 통합형 메모리 컨트롤러, 및 통합형 그래픽 프로세서를 구비하는 프로세서의 일 실시형태의 블록도이다.
도 3은 별개의 그래픽 프로세싱 유닛일 수도 있는, 또는 복수의 프로세싱 코어와 통합되는 그래픽 프로세서일 수도 있는 그래픽 프로세서의 일 실시형태의 블록도이다.
도 4는 그래픽 프로세서용 그래픽 프로세싱 엔진의 한 실시형태의 블록도이다.
도 5는 그래픽 프로세서의 다른 실시형태의 블록도이다.
도 6은 프로세싱 엘리먼트의 어레이를 포함하는 스레드 실행 로직의 블록도이다.
도 7은 한 실시형태에 따른 그래픽 프로세서 실행 유닛 명령어 포맷을 예시한다.
도 8은, 그래픽 파이프라인, 미디어 파이프라인, 디스플레이 엔진, 스레드 실행 로직, 및 렌더 출력 파이프라인(render output pipeline)을 포함하는 그래픽 프로세서의 다른 실시형태의 블록도이다.
도 9a는 한 실시형태에 따른 그래픽 프로세서 커맨드 포맷을 예시하는 블록도이다.
도 9b는 한 실시형태에 따른 그래픽 프로세서 커맨드 시퀀스를 예시하는 블록도이다.
도 10은 한 실시형태에 따른 데이터 프로세싱 시스템에 대한 예시적인 그래픽 소프트웨어 아키텍쳐를 예시한다.
도 11은, 한 실시형태에 따른, 그래픽 변환 테이블을 포함하는 예시적인 GPU 프로그래밍 모델의 개관(overview)을 제공한다.
도 12는, 한 실시형태에 따른, 예시적인 전역적 및 프로세스마다의(per process) 그래픽 변환 테이블의 블록도이다.
도 13은 한 실시형태에 따른 예시적인 그래픽 가상화 환경의 블록도이다.
도 14는 게스트 그래픽 변환 테이블에 대한 비동기 모드에 진입하기 위한 로직의 흐름도이다.
도 15a 및 도 15b는, 한 실시형태에 따른, 쉐도우 그래픽 변환 테이블 재구성의 블록도이다.
도 16은 쉐도우 그래픽 변환 테이블의 적어도 일부를 재구성하기 위한 흐름도이다.
도 17a 및 도 17b는 게스트 그래픽 변환 테이블에 대한 비동기 모드를 탈출하기 위한 로직을 포함하는 흐름도이다.
도 18은, 한 실시형태에 따른, 하이브리드 동기화를 예시하는 블록도이다.
도 19는, 한 실시형태에 따른, 하이브리드 동기화를 수행하기 위한 로직의 흐름도이다.
시스템 개관
도 1은, 한 실시형태에 따른, 데이터 프로세싱 시스템(100)의 블록도이다. 데이터 프로세싱 시스템(100)은 하나 이상의 프로세서(102) 및 하나 이상의 그래픽 프로세서(108)를 포함하고, 싱글 프로세서 데스크탑 시스템, 멀티프로세서 워크스테이션 시스템, 또는 많은 수의 프로세서(102) 또는 프로세서 코어(107)를 구비하는 서버 시스템일 수도 있다. 일 실시형태에서, 데이터 프로세싱 시스템(100)은, 모바일, 핸드헬드 또는 임베딩된 디바이스에서 사용하기 위한 시스템 온 칩(system-on-a-chip, SoC) 집적 회로이다.
데이터 프로세싱 시스템(100)의 실시형태는, 서버 기반 게임용 플랫폼, 게임 및 미디어 콘솔을 포함하는 게임 콘솔, 모바일 게임용 콘솔, 핸드헬드 게임 콘솔, 또는 온라인 게임 콘솔을 포함할 수 있거나, 또는 이들 내에 통합될 수도 있다. 몇몇 실시형태에서, 데이터 프로세싱 시스템(100)은 모바일폰, 스마트폰, 태블릿 컴퓨팅 디바이스 또는 모바일 인터넷 디바이스이다. 데이터 프로세싱 시스템(100)은 또한, 스마트 워치 웨어러블 디바이스, 스마트 아이웨어 디바이스, 증강현실 디바이스, 또는 가상 현실 디바이스와 같은 웨어러블 디바이스를 포함할 수도 있거나, 이들과 커플링될 수도 있거나, 또는 이들 내에 통합될 수도 있다. 몇몇 실시형태에서, 데이터 프로세싱 시스템(100)은 하나 이상의 프로세서(102) 및 하나 이상의 그래픽 프로세서(108)에 의해 생성되는 그래픽 인터페이스를 구비하는 텔레비전 또는 셋탑박스 디바이스이다. 일 실시형태에서, 데이터 프로세싱 시스템(100)은, 홈 네트워크 게이트웨이, 홈 미디어 서버, 또는 공공 영역(예를 들면, 병원)에 대한 콤비네이션 액세스 포인트/디지털 사이니지(synage) 솔루션으로 사용하기 위한 무선 라우터 또는 액세스 포인트이다.
몇몇 실시형태에서, 하나 이상의 프로세서(102) 각각은, 실행시 시스템 및 유저 소프트웨어에 대한 동작을 수행하는 명령어를 프로세싱하기 위한 하나 이상의 프로세서 코어(107)를 포함한다. 몇몇 실시형태에서, 하나 이상의 프로세서 코어(107)의 각각은 특정 명령어 세트(109)를 프로세싱하도록 구성된다. 몇몇 실시형태에서, 명령어 세트(109)는 복합 명령어 세트 컴퓨팅(Complex Instruction Set Computing, CISC), 축약형 명령어 세트 컴퓨팅(Reduced Instruction Set Computing, RISC), 또는 매우 긴 명령어 워드(Very Long Instruction Word, VLIW)를 가능하게 할 수도 있다. 다수의 프로세서 코어(107) 각각은, 다른 명령어 세트의 에뮬레이션을 가능하게 하기 위한 명령어를 포함할 수도 있는 상이한 명령어 세트(109)를 프로세싱할 수도 있다. 프로세서 코어(107)는 디지털 신호 프로세서(Digital Signal Processor, DSP)와 같은 다른 프로세싱 디바이스를 또한 포함할 수도 있다.
몇몇 실시형태에서, 프로세서(102)는 캐시 메모리(104)를 포함할 수도 있다. 아키텍쳐에 따라, 프로세서(102)는 단일의 내부 캐시 또는 다수 레벨의 내부 캐시를 구비할 수 있다. 몇몇 실시형태에서, 캐시 메모리는 프로세서(102)의 다양한 컴포넌트 사이에서 공유된다. 몇몇 실시형태에서, 프로세서(102)는, 공지의 캐시 일관성(cache coherency) 기술을 사용하여 프로세서 코어(107) 사이에서 공유될 수도 있는 외부 캐시(예를 들면, 레벨-3(L3) 캐시 또는 라스트 레벨 캐시(Last Level Cache, LLC))(도시되지 않음)를 또한 사용한다. 상이한 타입의 데이터(예를 들면, 정수 레지스터, 부동 소수점 레지스터, 상태 레지스터, 및 명령어 포인터 레지스터)를 저장하기 위한 상이한 타입의 레지스터를 포함할 수도 있는 레지스터 파일(106)이 프로세서(102)에 추가적으로 포함된다. 몇몇 레지스터는 범용 레지스터일 수도 있지만, 다른 레지스터는 프로세서(102)의 설계에 고유할 수도 있다.
몇몇 실시형태에서, 프로세서(102)는 프로세서(102)와 시스템(100)의 다른 컴포넌트 사이에서 데이터 신호를 전송하기 위해 프로세서 버스(110)에 커플링된다. 시스템(100)은, 메모리 컨트롤러 허브(116) 및 입출력(input output, I/O) 컨트롤러 허브(130)를 포함하는 예시적인 '허브' 시스템 아키텍쳐를 사용한다. 메모리 컨트롤러 허브(116)는 메모리 디바이스와 시스템(100)의 다른 컴포넌트 사이의 통신을 가능하게 하고, 한편 I/O 컨트롤러 허브(I/O Controller Hub, ICH)(130)는 로컬 I/O 버스를 통해 I/O 디바이스에 대한 연결을 제공한다.
메모리 디바이스(120)는 동적 랜덤 액세스 메모리(dynamic random access memory, DRAM) 디바이스, 정적 랜덤 액세스 메모리(static random access memory, SRAM) 디바이스, 플래시 메모리 디바이스, 또는 프로세스 메모리로서 기능하기 위한 적절한 성능을 구비하는 몇몇 다른 메모리 디바이스일 수 있다. 메모리(120)는, 프로세서(102)가 프로세스를 실행할 때 사용할 데이터(122) 및 명령어(121)을 저장할 수 있다. 메모리 컨트롤러 허브(116)는, 그래픽 및 미디어 동작을 수행하도록 프로세서(102)의 하나 이상의 그래픽 프로세서(108)와 통신할 수도 있는 옵션사항인(optional) 외부 그래픽 프로세서(112)와 또한 커플링된다.
몇몇 실시형태에서, ICH(130)는 주변장치가 고속 I/O 버스를 통해 메모리(120) 및 프로세서(102)에 연결되는 것을 가능하게 한다. I/O 주변장치는 오디오 컨트롤러(146), 펌웨어 인터페이스(128), 무선 트랜시버(126)(예를 들면, 와이파이, 블루투스), 데이터 스토리지 디바이스(124)(예를 들면, 하드 디스크 드라이브, 플래시 메모리 등등), 및 레거시(예를 들면, 퍼스널 시스템 2(Personal System 2, PS/2) 디바이스를 시스템에 커플링하기 위한 레거시 I/O 컨트롤러를 포함한다. 하나 이상의 범용 직렬 버스(Universal Serial Bus, USB) 컨트롤러(142)는, 키보드 및 마우스(144) 조합과 같은 입력 디바이스를 연결한다. 네트워크 컨트롤러(134)가 또한 ICH(130)에 커플링될 수도 있다. 몇몇 실시형태에서, 고성능 네트워크 컨트롤러(도시되지 않음)가 프로세서 버스(110)에 커플링된다.
도 2는 하나 이상의 프로세서 코어(202A-N), 통합형 메모리 컨트롤러(214), 및 통합형 그래픽 프로세서(208)를 구비하는 프로세서(200)의 한 실시형태의 블록도이다. 본원의 임의의 다른 도면의 엘리먼트와 동일한 도면 부호(또는 명칭)를 갖는 도 2의 이러한 엘리먼트는 본원의 다른 곳에서 설명되는 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있지만, 이러한 것에 한정되는 것은 아니다. 프로세서(200)는 점선의 박스에 의해 표시되는 추가적인 코어(202N)를 포함하는 것까지 추가적인 코어를 포함할 수 있다. 코어(202A-N)의 각각은 하나 이상의 내부 캐시 유닛(204A-N)을 포함한다. 몇몇 실시형태에서, 각각의 코어는 또한 하나 이상의 공유된 캐시 유닛(206)에 대한 액세스를 갖는다.
내부 캐시 유닛(204A-N) 및 공유된 캐시 유닛(26)은 프로세서(200) 내에서의 캐시 메모리 계층을 나타낸다. 캐시 메모리 계층은, 각각의 코어 내의 명령어 및 데이터 캐시의 적어도 하나의 레벨 및 공유된 중간 레벨 캐시의 하나 이상의 레벨, 예컨대 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 캐시의 다른 레벨을 포함할 수도 있는데, 이 경우, 외부 메모리 이전의 캐시의 최고 레벨은 LLC로서 분류된다. 몇몇 실시형태에서, 캐시 일관성 로직은 다양한 캐시 유닛(206과 204A-N) 사이의 일관성을 유지한다.
몇몇 실시형태에서, 프로세서(200)는 시스템 에이전트(210) 및 하나 이상의 버스 컨트롤러 유닛(216)의 세트를 또한 포함할 수도 있다. 하나 이상의 버스 컨트롤러 유닛은 주변장치 버스, 예컨대 하나 이상의 주변장치 컴포넌트 인터커넥트(Peripheral Component Interconnect) 버스(예를 들면, PCI, PCI 익스프레스)의 세트를 관리한다. 시스템 에이전트(210)는 다양한 프로세서 컴포넌트에 대한 관리 기능성(functionality)을 제공한다. 몇몇 실시형태에서, 시스템 에이전트(210)는, 다양한 외부 메모리 디바이스(도시되지 않음)에 대한 액세스를 관리하기 위해 하나 이상의 통합형 메모리 컨트롤러(214)를 포함한다.
몇몇 실시형태에서, 코어(202A-N) 중 하나 이상은 동시적 멀티스레딩에 대한 지원을 포함한다. 이러한 실시형태에서, 시스템 에이전트(210)는 멀티스레드 프로세싱 동안 코어(202A-N)를 조정하고 동작시키기 위한 컴포넌트를 포함한다. 시스템 에이전트(210)는, 코어(202A-N) 및 그래픽 프로세서(208)의 전력 상태를 조절하기 위한 로직 및 컴포넌트를 포함하는 전력 제어 유닛(power control unit, PCU)을 추가적으로 포함할 수도 있다.
몇몇 실시형태에서, 프로세서(200)는 그래픽 프로세싱 동작을 실행하기 위해 그래픽 프로세서(208)를 추가적으로 포함한다. 몇몇 실시형태에서, 그래픽 프로세서(208)는, 공유된 캐시 유닛(206), 및 하나 이상의 통합형 메모리 컨트롤러(214)를 포함하는 시스템 에이전트 유닛(210)의 세트와 커플링된다. 몇몇 실시형태에서, 그래픽 프로세서 출력을 하나 이상의 커플링된 디스플레이로 구동하기 위해 디스플레이 컨트롤러(211)가 그래픽 프로세서(208)와 커플링된다. 몇몇 실시형태에서, 디스플레이 컨트롤러(211)는 적어도 하나의 인터커넥트를 통해 그래픽 프로세서와 커플링되는 별개의 모듈일 수도 있거나, 또는 그래픽 프로세서(208) 또는 시스템 에이전트(210) 내에 통합될 수도 있다.
몇몇 실시형태에서, 프로세서(200)의 내부 컴포넌트를 커플링하기 위해 링 기반의 인터커넥트 유닛(212)이 사용된다. 그러나, 포인트 투 포인트 인터커넥트, 스위치식 인터커넥트, 또는 기술분야에서 널리 공지된 기술을 포함하는 다른 기술과 같은 대안적인 인터커넥트 유닛이 사용될 수도 있다. 몇몇 실시형태에서, 그래픽 프로세서(208)는 I/O 링크(213)를 통해 링 인터커넥트(212)와 커플링된다.
예시적인 I/O 링크(213)는, 다양한 프로세서 컴포넌트와 고성능의 임베딩된 메모리 모듈(218), 예컨대 eDRAM 모듈 사이의 통신을 가능하게 하는 온 패키지 I/O 인터커넥트(on package I/O interconnect)를 포함하는 다수의 다양한 I/O 인터커넥트 중 적어도 하나를 나타낸다. 몇몇 실시형태에서, 코어(202A-N)의 각각과 그래픽 프로세서(208)는 임베딩된 메모리 모듈(218)을 공유된 라스트 레벨 캐시로서 사용한다.
몇몇 실시형태에서, 코어(202A-N)는 동일한 명령어 세트 아키텍쳐를 실행하는 동종의(homogenous) 코어이다. 다른 실시형태에서, 코어(202A-N)는 명령어 세트 아키텍쳐(instruction set architecture, ISA)의 관점에서 이종성(heterogeneous)인데, 이 경우 코어(202A-N) 중 하나 이상은 제1 명령어 세트를 실행하지만, 다른 코어 중 적어도 하나는 제1 명령어 세트의 서브세트 또는 상이한 명령어 세트를 실행한다.
몇몇 실시형태에서, 프로세서(200)는, 다수의 프로세스 기술 중 임의의 것을 사용하는 하나 이상의 기판, 예를 들면, 상보형 금속 산화물 반도체(Complementary metal-oxide-semiconductor, CMOS), 바이폴라 접합/상보형 금속 산화물 반도체(Bipolar Junction/Complementary metal-oxide-semiconductor, BiCMOS) 또는 N 타입 금속 산화물 반도체 로직(N-type metal-oxide-semiconductor logic, NMOS)의 일부이거나, 또는 이들 상에서 구현된다. 추가적으로, 프로세서(200)는, 다른 컴포넌트 외에, 예시된 컴포넌트를 구비하는 SoC 집적 회로로서 또는 하나 이상의 칩 상에서 구현될 수 있다.
도 3은 별개의 그래픽 프로세싱 유닛일 수도 있는, 또는 복수의 프로세싱 코어와 통합되는 그래픽 프로세서일 수도 있는 그래픽 프로세서(300)의 블록도이다. 몇몇 실시형태에서, 그래픽 프로세서는 그래픽 프로세서 상의 레지스터에 대한 메모리 매핑된 I/O 인터페이스를 통해 그리고 프로세서 메모리 안으로 배치되는 커맨드와 통신한다. 몇몇 실시형태에서, 그래픽 프로세서(300)는 메모리에 액세스하기 위한 메모리 인터페이스(314)를 포함한다. 메모리 인터페이스(314)는 로컬 메모리, 하나 이상의 내부 캐시, 하나 이상의 공유된 외부 캐시에 대한, 및/또는 시스템 메모리에 대한 인터페이스일 수 있다.
몇몇 실시형태에서, 그래픽 프로세서(300)는 디스플레이 출력 데이터를 디스플레이 디바이스(320)로 구동하기 위한 디스플레이 컨트롤러(302)를 또한 포함한다. 디스플레이 컨트롤러(302)는 비디오 또는 유저 인터페이스 엘리먼트의 다수의 층의 디스플레이 및 구성(composition)을 위한 하나 이상의 오버레이 플레인용 하드웨어를 포함한다. 몇몇 실시형태에서, 그래픽 프로세서(300)는, MPEG-2와 같은 동영상 전문가 그룹(Moving Picture Experts Group, MPEG) 포맷, H.264/MPEG-4 AVC와 같은 어드밴스드 비디오 코딩(Advanced Video Coding, AVC) 포맷 뿐만 아니라, 영화 텔레비전 기술자 협회(Society of Motion Picture & Television Engineers, SMPTE) 421M/VC-1, 및 JPEG 및 모션 JPEG(Motion JPEG, MJPEG) 포맷과 같은 공동 사진 전문가 그룹(Joint Photographic Experts Group, JPEG) 포맷을 포함하는, 그러나 이들에 한정되지 않는 하나 이상의 미디어 인코딩 포맷으로, 그 하나 이상의 미디어 인코딩 포맷으로부터, 또는 그 하나 이상의 미디어 인코딩 포맷 사이에서 미디어를 인코딩하거나, 디코딩하거나, 또는 트랜스코딩하기 위한 비디오 코덱 엔진(306)을 포함한다.
몇몇 실시형태에서, 그래픽 프로세서(300)는, 예를 들면, 비트 영역 블록 전송(bit-boundary block transfer)을 포함하는 2차원(2D) 래스터라이저(rasterizer) 동작을 수행하기 위해 블록 이미지 전송(block image transfer, BLIT) 엔진(304)을 포함한다. 그러나, 일 실시형태에서, 2D 그래픽 동작은 그래픽 프로세싱 엔진(graphics-processing engine, GPE)(310)의 하나 이상의 컴포넌트를 사용하여 수행된다. 몇몇 실시형태에서, 그래픽 프로세싱 엔진(310)은, 3차원(3D) 그래픽 동작 및 미디어 동작을 포함하는 그래픽 동작을 수행하기 위한 계산 엔진(compute engine)이다.
몇몇 실시형태에서, GPE(310)는, 3D 프리미티브 형상(예를 들면, 직사각형, 삼각형 등등)에 대해 작용하는 프로세싱 기능을 사용하여 3차원 이미지 및 장면을 렌더링하는 것과 같은 3D 동작을 수행하기 위한 3D 파이프라인(312)을 포함한다. 3D 파이프라인(312)은, 엘리먼트 내에서의 다양한 태스크를 수행하고/하거나 3D/미디어 서브시스템(315)으로의 실행 스레드를 생성하는(spawn) 프로그래밍가능하고 고정된 기능을 포함한다. 3D 파이프라인(312)이 미디어 동작을 수행하기 위해 사용될 수 있지만, GPE(310)의 실시형태는, 비디오 사후 프로세싱(post-processing) 및 이미지 향상과 같은 미디어 동작을 수행하기 위해 특정하게 사용되는 미디어 파이프라인(316)을 또한 포함한다.
몇몇 실시형태에서, 미디어 파이프라인(316)은, 비디오 코덱 엔진(306) 대신, 또는 비디오 코덱 엔진(306)을 위해, 비디오 디코드 가속, 비디오 디인터레이싱 및 비디오 인코드 가속과 같은 하나 이상의 특수 미디어 동작을 수행하기 위한 고정된 기능 또는 프로그래밍가능한 로직 유닛을 포함한다. 몇몇 실시형태에서, 미디어 파이프라인(316)은 3D/미디어 서브시스템(315) 상에서의 실행을 위한 스레드를 생성할 스레드 생성 유닛(thread spawning unit)을 추가적으로 포함한다. 생성된 스레드는 3D/미디어 서브시스템(315)에 포함된 하나 이상의 그래픽 실행 유닛 상에서의 미디어 동작에 대한 계산을 수행한다.
몇몇 실시형태에서, 3D/미디어 서브시스템(315)은 미디어 파이프라인(316) 및 3D 파이프라인(312)에 의해 생성되는 스레드를 실행하기 위한 로직을 포함한다. 일 실시형태에서, 파이프라인은 스레드 실행 요청을, 다양한 요청을 이용가능한 스레드 실행 리소스로 중재하고 디스패칭하기 위한 스레드 디스패치 로직을 포함하는 3D/미디어 서브시스템(315)으로 전송한다. 실행 리소스는 3D 및 미디어 스레드를 프로세싱하기 위한 그래픽 실행 유닛의 어레이를 포함한다. 몇몇 실시형태에서, 3D/미디어 서브시스템(315)은 스레드 명령어 및 데이터에 대한 하나 이상의 내부 캐시를 포함한다. 몇몇 실시형태에서, 서브시스템은, 스레드 사이에서 데이터를 공유하기 위한 그리고 출력 데이터를 저장하기 위한, 레지스터 및 주소지정가능한(addressable) 메모리를 포함하는 공유 메모리(shared memory)를 또한 포함한다.
3D/미디어 프로세싱
도 4는 몇몇 실시형태에 따른 그래픽 프로세서의 그래픽 프로세싱 엔진(410)의 블록도이다. 일 실시형태에서, GPE(410)는 도 3에 도시된 GPE(310)의 한 버전이다. 본원의 임의의 다른 도면의 엘리먼트와 동일한 도면 부호(또는 명칭)를 갖는 도 4의 엘리먼트는 본원의 다른 곳에서 설명되는 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있지만, 이러한 것에 한정되는 것은 아니다.
몇몇 실시형태에서, GPE(410)는, 커맨드 스트림을 GPE 3D 및 미디어 파이프 라인(412, 416)으로 제공하는 커맨드 스트리머(command streamer, 403)와 커플링된다. 몇몇 실시형태에서, 커맨드 스트리머(403)는, 시스템 메모리, 또는 내부 캐시 메모리 및 공유 캐시 메모리 중 하나 이상일 수 있는 메모리에 커플링된다. 몇몇 실시형태에서, 커맨드 스트리머(403)는 메모리로부터 커맨드를 수신하고 그 커맨드를 3D 파이프라인(412) 및/또는 미디어 파이프라인(416)으로 전송한다. 3D 및 미디어 파이프라인은, 각각의 파이프라인 내의 로직을 통해 동작을 수행하는 것에 의해 또는 하나 이상의 실행 스레드를 실행 유닛 어레이(414)로 디스패칭하는 것에 의해, 커맨드를 프로세싱한다. 몇몇 실시형태에서, 실행 유닛 어레이(414)은, GPE(410)의 목표 전력 및 성능 레벨에 기초하여 어레이가 가변적인 수의 실행 유닛을 포함하도록 확장가능하다(scalable).
몇몇 실시형태에서, 샘플링 엔진(430)이 메모리(예를 들면, 캐시 메모리 또는 시스템 메모리) 및 실행 유닛 어레이(414)와 커플링된다. 몇몇 실시형태에서, 샘플링 엔진(430)은, 실행 유닛 어레이(414)가 메모리로부터 그래픽 및 미디어 데이터를 판독하는 것을 허용하는 실행 유닛 어레이(414)에 대한 메모리 액세스 메커니즘을 제공한다. 몇몇 실시형태에서, 샘플링 엔진(430)은 미디어에 대한 특수한 이미지 샘플링 동작을 수행하기 위한 로직을 포함한다.
몇몇 실시형태에서, 샘플링 엔진(430)의 특수한 미디어 샘플링 로직은 노이즈 제거/디인터레이스 모듈(432), 모션 추정 모듈(434), 및 이미지 스케일링 및 필터링 모듈(436)을 포함한다. 몇몇 실시형태에서, 노이즈 제거/디인터레이스 모듈(432)은, 디코딩된 비디오 데이터에 대해 노이즈 제거 또는 디인터레이스 알고리즘 중 하나 이상을 수행하기 위한 로직을 포함한다. 디인터레이스 로직은 인터레이싱된 비디오 컨텐츠의 교대하는 필드를 단일 프레임의 비디오로 결합한다. 노이즈 제거 로직은 비디오 및 이미지 데이터로부터 데이터 노이즈를 감소시키거나 제거한다. 몇몇 실시형태에서, 노이즈 제거 로직 및 디인터레이스 로직은 모션 적응적이고 비디오 데이터에서 검출되는 모션의 양에 기초하여 공간적 또는 시간적 필터링을 사용한다. 몇몇 실시형태에서, 노이즈 제거/디인터레이스 모듈(432)은 (예를 들면, 모션 추정 엔진(434) 내에) 전용 모션 검출 로직을 포함한다.
몇몇 실시형태에서, 모션 추정 엔진(434)은, 비디오 데이터에 대한 모션 벡터 추정 및 예측과 같은 비디오 가속 기능을 수행하는 것에 의해, 비디오 동작에 대한 하드웨어 가속을 제공한다. 모션 추정 엔진은, 연속하는 비디오 프레임 사이의 이미지 데이터의 변화를 설명하는 모션 벡터를 결정한다. 몇몇 실시형태에서, 그래픽 프로세서 미디어 코덱은, 매크로 블록 레벨에서 비디오에 대한 동작을 수행하기 위해 모션 추정 엔진(434)을 사용하는데, 매크로 블록에서가 아니라면 범용 프로세서로 수행하기에는 너무 계산 집약적일 수도 있다. 몇몇 실시형태에서, 모션 추정 엔진(434)은, 비디오 데이터 내에서의 모션의 방향 또는 크기에 민감하거나 적응적인 비디오 디코드 및 프로세싱 기능을 보조하기 위해 그래픽 프로세서 컴포넌트에게 일반적으로 이용가능하다.
몇몇 실시형태에서, 이미지 스케일링 및 필터링 모듈(436)은, 생성된 이미지 및 비디오의 시각적 품질을 향상시키기 위해 이미지 프로세싱 동작을 수행한다. 몇몇 실시형태에서, 스케일링 및 필터링 모듈(436)은, 데이터를 실행 유닛 어레이(414)로 제공하기 이전의 샘플링 동작 동안 이미지 및 비디오 데이터를 프로세싱한다.
몇몇 실시형태에서, GPE(410)는, 그래픽 서브시스템이 메모리에 액세스하기 위한 추가적인 메커니즘을 제공하는 데이터 포트(444)를 포함한다. 몇몇 실시형태에서, 데이터 포트(444)는, 렌더 타겟 기록, 일정한 버퍼 판독, 스크래치 메모리 공간 판독/기록, 및 미디어 표면 액세스를 포함하는 동작에 대한 메모리 액세스를 가능하게 한다. 몇몇 실시형태에서, 데이터 포트(444)는 메모리에 대한 액세스를 캐싱하기 위한 캐시 메모리 공간을 포함한다. 캐시 메모리는 단일의 데이터 캐시이거나 또는 데이터 포트를 통해 메모리에 액세스하는 다수의 서브시스템에 대한 다수의 캐시(예를 들면, 렌더 버퍼 캐시, 일정한 버퍼 캐시 등등)로 분리될 수 있다. 몇몇 실시형태에서, 실행 유닛 어레이(414)의 실행 유닛 상에서 실행하는 스레드는, GPE(410)의 서브시스템의 각각을 커플링하는 데이터 분배 인터커넥트를 통해 메시지를 교환하는 것에 의해 데이터 포트와 통신한다.
실행 유닛
도 5는 그래픽 프로세서(500)의 다른 실시형태의 블록도이다. 본원의 임의의 다른 도면의 엘리먼트와 동일한 도면 부호(또는 명칭)를 갖는 도 5의 엘리먼트는 본원의 다른 곳에서 설명되는 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있지만, 이러한 것에 한정되는 것은 아니다.
몇몇 실시형태에서, 그래픽 프로세서(500)는 링 인터커넥트(502), 파이프라인 프론트엔드(504), 미디어 엔진(537), 및 그래픽 코어(580A-N)를 포함한다. 몇몇 실시형태에서, 링 인터커넥트(502)는 그래픽 프로세서를, 다른 그래픽 프로세서 또는 하나 이상의 범용 프로세서 코어를 포함하는 다른 프로세싱 유닛에 커플링된다. 몇몇 실시형태에서, 그래픽 프로세서는 멀티코어 프로세싱 시스템 내에 통합되는 많은 프로세서들 중 하나이다.
몇몇 실시형태에서, 그래픽 프로세서(500)은 링 인터커넥트(502)를 통해 커맨드의 배치(batch)를 수신한다. 유입하는 커맨드는 파이프라인 프론트엔드(504)의 커맨드 스트리머(503)에 의해 해석된다. 몇몇 실시형태에서, 그래픽 프로세서(500)는, 그래픽 코어(들)(580A-N)를 통해 3D 지오메트리 프로세싱 및 미디어 프로세싱을 수행하기 위한 확장가능한 실행 로직을 포함한다. 3D 지오메트리 프로세싱 커맨드의 경우, 커맨드 스트리머(503)는 그 커맨드를 지오메트리 파이프라인(536)으로 공급한다. 적어도 몇몇의 미디어 프로세싱 커맨드의 경우, 커맨드 스트리머(503)는 그 커맨드를, 미디어 엔진(537)과 커플링하는 비디오 프론트엔드(534)로 공급한다. 몇몇 실시형태에서, 미디어 엔진(537)은 비디오 및 이미지 사후 프로세싱을 위한 비디오 품질 엔진(Video Quality Engine, VQE)(530) 및 하드웨어 가속 미디어 데이터 인코드 및 디코드를 제공하기 위한 멀티포맷 인코드/디코드(multi-format encode/decode, MFX)(533)를 포함한다. 몇몇 실시형태에서, 지오메트리 파이프라인(536) 및 미디어 엔진(537) 각각은, 적어도 하나의 그래픽 코어(580A)에 의해 제공되는 스레드 실행 리소스에 대한 실행 스레드를 생성한다.
몇몇 실시형태에서, 그래픽 프로세서(500)는 확장가능한 스레드 실행 리소스를 특징으로 하는 모듈러 코어(580A-N)을 포함하는데, 그 각각은 다수의 서브코어(550A-N, 560A-N)(종종, 코어 서브슬라이스로 칭해짐)를 구비한다. 몇몇 실시형태에서, 그래픽 프로세서(500)는 그래픽 코어(580A 내지 580N) 중 임의의 수를 가질 수도 있다. 몇몇 실시형태에서, 그래픽 프로세서(500)는 적어도 제1 서브코어(550A) 및 제2 서브코어(560A)를 구비하는 그래픽 코어(580A)를 포함한다. 다른 실시형태에서, 그래픽 프로세서는 단일의 서브코어(예를 들면, 550A)를 갖는 저전력 프로세서이다. 몇몇 실시형태에서, 그래픽 프로세서(500)는 다수의 그래픽 코어(580A-N)를 포함하는데, 각각은 제1 서브코어(550A-N)의 세트 및 제2 서브코어(560A-N)의 세트를 포함한다. 제1 서브코어(550A-N)의 세트의 각각의 서브코어는 실행 유닛(552A-N) 및 미디어/텍스쳐 샘플러(554A-N)의 적어도 제1 세트를 포함한다. 제2 서브코어(550A-N)의 세트의 각각의 서브코어는 실행 유닛(562A-N) 및 샘플러(564A-N)의 적어도 제2 세트를 포함한다. 몇몇 실시형태에서, 각각의 서브코어(550A-N, 560A-N)는 공유 리소스(shared resource)(570A-N)의 세트를 공유한다. 몇몇 실시형태에서, 공유 리소스는 공유 캐시 메모리 및 픽셀 연산 로직(pixel operation logic)을 포함한다. 그래픽 프로세서의 다양한 실시형태에서, 다른 공유 리소스가 또한 포함될 수도 있다.
도 6은 GPE의 몇몇 실시형태에서 활용되는 프로세싱 엘리먼트의 어레이를 포함하는 스레드 실행 로직(600)을 예시한다. 본원의 임의의 다른 도면의 엘리먼트와 동일한 도면 부호(또는 명칭)를 갖는 도 6의 엘리먼트는 본원의 다른 곳에서 설명되는 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있지만, 이러한 것에 한정되는 것은 아니다.
몇몇 실시형태에서, 스레드 실행 로직(600)은, 픽셀 쉐이더(602), 스레드 디스패처(thread dispatcher, 604), 명령어 캐시(606), 복수의 실행 유닛(608A-N)을 포함하는 확장가능한 실행 유닛 어레이, 샘플러(610), 데이터 캐시(612), 및 데이터 포트(614)를 포함한다. 일 실시형태에서, 포함된 컴포넌트는 컴포넌트의 각각을 연결하는 인터커넥트 패브릭을 통해 인터커넥트된다. 몇몇 실시형태에서, 스레드 실행 로직(600)은, 명령어 캐시(606), 데이터 포트(614), 샘플러(610), 및 실행 유닛 어레이(608A-N) 중 하나 이상을 통한, 시스템 메모리 또는 캐시 메모리와 같은 메모리에 대한 하나 이상의 연결을 포함한다. 몇몇 실시형태에서, 각각의 실행 유닛(예를 들면, 608A)은 다수의 동시적 스레드를 실행할 수 있는 그리고 각각의 스레드에 대한 다수의 데이터 엘리먼트를 병렬로 프로세싱할 수 있는 각각의 벡터 프로세서이다. 몇몇 실시형태에서, 실행 유닛 어레이(608A-N)는 임의의 수의 각각의 실행 유닛을 포함한다.
몇몇 실시형태에서, 실행 유닛 어레이(608A-N)는 "쉐이더" 프로그램을 실행하기 위해 주로 사용된다. 몇몇 실시형태에서, 어레이(608A-N)의 실행 유닛은, 그래픽 라이브러리(예를 들면, Direct 3D 및 OpenGL)로부터의 쉐이더가 최소의 변환을 가지고 실행되도록, 많은 표준 3D 그래픽 쉐이더 명령어에 대한 기본 지원을 포함하는 명령어 세트를 실행한다. 실행 유닛은 버텍스(vertex) 및 지오메트리 프로세싱(예를 들면, 버텍스 프로그램, 지오메트리 프로그램, 버텍스 쉐이더), 픽셀 프로세싱(예를 들면, 픽셀 쉐이더, 단편(fragment) 쉐이더) 및 범용 프로세싱(예를 들면, 계산 및 미디어 쉐이더)를 지원한다.
실행 유닛 어레이(608A-N)의 각각의 실행 유닛은 데이터 엘리먼트의 어레이에 대해 동작한다. 데이터 엘리먼트의 수는 "실행 사이즈"이거나, 또는 명령어에 대한 채널의 수이다. 실행 채널은 데이터 엘리먼트 액세스, 마스킹, 및 명령어 내에서의 플로우 제어를 위한 실행의 논리적 단위이다. 채널의 수는, 특정한 그래픽 프로세서에 대한 물리적 산술 로직 유닛(Arithmetic Logic Unit, ALU) 또는 부동 소수점 유닛(Floating Point Unit, FPU)의 수에 독립적일 수도 있다. 몇몇 실시형태에서, 실행 유닛(608A-N)은 정수 및 부동 소수점 데이터 타입을 지원한다.
실행 유닛 명령어 세트는 단일 명령어 다중 데이터(single instruction multiple data, SIMD) 명령어를 포함한다. 다양한 데이터 엘리먼트는 패킹된(packed) 데이터 타입으로서 레지스터에 저장될 수도 있고 실행 유닛은 다양한 엘리먼트를 엘리먼트의 데이터 사이즈에 기초하여 프로세싱할 것이다. 예를 들면, 256 비트 폭의 벡터에 대해 연산하는 경우, 256 비트의 벡터는 레지스터에 저장되고 실행 유닛은 벡터에 대해 4개의 별개의 64 비트의 패킹된 데이터 엘리먼트(쿼드 워드(Quad-Word, QW) 사이즈의 데이터 엘리먼트), 8개의 별개의 32비트의 패킹된 데이터 엘리먼트(더블 워드(Double Word, DW) 사이즈의 데이터 엘리먼트), 16개의 별개의 16 비트의 패킹된 데이터 엘리먼트(워드(Word: W) 사이즈의 데이터 엘리먼트), 또는 32개의 별개의 8 비트의 데이터 엘리먼트(바이트(byte: B) 사이즈의 데이터 엘리먼트)로서의 벡터의 대해 연산한다. 그러나, 상이한 벡터 폭 및 레지스터 사이즈가 가능하다.
하나 이상의 내부 명령어 캐시(예를 들면, 606)는 실행 유닛에 대한 스레드 명령어를 캐싱하기 위해 스레드 실행 로직(600)에 포함된다. 몇몇 실시형태에서, 스레드 실행 동안 스레드 데이터를 캐싱하기 위해, 하나 이상의 데이터 캐시(예를 들면, 612)가 포함된다. 몇몇 실시형태에서, 3D 동작에 대해 텍스쳐 샘플링을 그리고 미디어 동작에 대해 미디어 샘플링을 제공하기 위해, 샘플러(610)가 포함된다. 몇몇 실시형태에서, 샘플러(610)는, 샘플링된 데이터를 실행 유닛으로 제공하기 이전의 샘플링 프로세스 동안 텍스쳐 또는 미디어 데이터를 프로세싱하기 위해 특수한 텍스쳐 또는 미디어 샘플링 기능성을 포함한다.
실행 동안, 그래픽 및 미디어 파이프라인은 스레드 개시 요청을 스레드 생성 및 디스패치 로직을 통해 스레드 실행 로직(600)으로 전송한다. 몇몇 실시형태에서, 스레드 실행 로직(600)은, 그래픽 및 미디어 파이프라인으로부터의 스레드 개시 요청을 중재하고 요청된 스레드를 하나 이상의 실행 유닛(608A-N) 상에서 인스턴스화하는 로컬 스레드 디스패처(604)를 포함한다. 예를 들면, 지오메트리 파이프라인(예를 들면, 도 5의 536)은 버텍스 프로세싱, 테셀레이션(tessellation), 또는 지오메트리 프로세싱 스레드를 스레드 실행 로직(600)(도 6)으로 디스패치한다. 몇몇 실시형태에서, 스레드 디스패처(604)는 실행 쉐이더 프로그램으로부터의 실시간 스레드 생성 요청을 또한 프로세싱할 수 있다.
지오메트릭 오브젝트(geometric object)의 그룹이 프로세싱되어 픽셀 데이터로 래스터라이징되면, 픽셀 쉐이더(602)는 출력 정보를 추가로 계산하도록 그리고 결과가 출력 표면(예를 들면, 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼 등등)에 기록되게 하도록 호출된다. 몇몇 실시형태에서, 픽셀 쉐이더(602)는, 래스터라이징된 오브젝트에 걸쳐 보간될(interpolated) 다양한 버텍스 속성의 값을 계산한다. 몇몇 실시형태에서, 픽셀 쉐이더(602)는, 그 다음, API 공급 픽셀 쉐이더 프로그램(API-supplied pixel shader program)을 실행한다. 픽셀 쉐이더 프로그램을 실행하기 위해, 픽셀 쉐이더(602)는 스레드를 스레드 디스패처(604)를 통해 실행 유닛(예를 들면, 608A)으로 디스패치한다. 몇몇 실시형태에서, 픽셀 쉐이더(602)는 메모리에 저장된 텍스쳐 맵의 텍스쳐 데이터에 액세스하기 위해 샘플러(610)의 텍스쳐 샘플링 로직을 사용한다. 텍스쳐 데이터 및 입력 지오메트리 데이터에 대한 산술적 연산은 각각의 지오메트릭 단편(fragment)에 대한 픽셀 컬러 데이터를 계산하거나, 또는 추가 프로세싱으로부터 하나 이상의 픽셀을 버린다.
몇몇 실시형태에서, 데이터 포트(614)는, 그래픽 프로세서 출력 파이프라인에 대한 프로세싱을 위해, 메모리에 대한 메모리 액세스 메커니즘을, 스레드 실행 로직(600) 출력 프로세싱 데이터에게 제공한다. 몇몇 실시형태에서, 데이터 포트(614)는, 데이터 포트를 통한 메모리 액세스를 위해 데이터를 캐싱하기 위한 하나 이상의 캐시 메모리(예를 들면, 데이터 캐시(612))를 포함하거나 또는 그 하나 이상의 캐시 메모리에 커플링된다.
도 7은 몇몇 실시형태에 따른 그래픽 프로세서 명령어 포맷(700)을 예시하는 블록도이다. 하나 이상의 실시형태에서, 그래픽 프로세서 실행 유닛은 다수의 포맷의 명령어를 구비하는 명령어 세트를 지원한다. 실선 박스는 실행 유닛 명령어에 일반적으로 포함되는 컴포넌트를 예시하고, 한편 점선 라인은 옵션사항인 또는 명령어의 서브세트에만 포함되는 컴포넌트를 포함한다. 몇몇 실시형태에서, 설명되고 예시되는 명령어 포맷(700)은, 명령어가 프로세싱되면 명령어 디코드로부터 유래하는 마이크로 연산과는 반대로, 이들이 실행 유닛으로 공급되는 명령어가라는 점에서 매크로 명령어가다.
몇몇 실시형태에서, 그래픽 프로세서 실행 유닛은 128 비트 포맷(710)의 명령어를 기본적으로 지원한다. 64비트의 압축된(compacted) 명령어 포맷(730)은, 선택된 명령어, 명령어 옵션, 및 피연산자(operand)의 수에 기초하여 몇몇 명령어에 대해 이용가능하다. 기본적인 128 비트 포맷(710)은 모든 명령어 옵션에 대한 액세스를 제공하지만, 64 비트 포맷(730)에서는 몇몇 옵션 및 연산이 제한된다. 64 비트 포맷(730)에서 이용가능한 기본적인 명령어는 실시예에 의해 변한다. 몇몇 실시형태에서, 명령어는 인덱스 필드(713)의 인덱스 값의 세트를 사용하여 부분적으로 압축된다. 실행 유닛 하드웨어는 인덱스 값에 기초하여 압축 테이블의 세트를 참조하고, 128 비트 포맷(710)의 기본 명령어를 재구성하기 위해 압축 테이블 출력을 사용한다.
각각의 포맷의 경우, 명령어 연산코드(opcode)(712)는 실행 유닛이 수행할 동작을 정의한다. 실행 유닛은 각각의 피연산자의 다수의 데이터 엘리먼트에 걸쳐 각각의 명령어를 병렬로 실행한다. 예를 들면, 가산 명령어에 응답하여, 실행 유닛은 텍스쳐 엘리먼트 또는 픽쳐 엘리먼트를 나타내는 각각의 컬러 채널에 걸쳐 동시적 가산 동작을 수행한다. 디폴트로, 실행 유닛은 피연산자의 모든 데이터 채널에 걸쳐 각각의 명령어를 수행한다. 몇몇 실시형태에서, 명령어 제어 필드(712)는, 채널 선택(예를 들면, 예측) 및 데이터 채널 순서(예를 들면, 스위즐(swizzle))와 같은 소정의 실행 옵션에 대한 제어를 가능하게 한다. 128 비트 명령어(710)의 경우, 실행 사이즈 필드(716)는 병렬로 실행될 데이터 채널의 수를 제한한다. 몇몇 실시형태에서, 실행 사이즈 필드(716)는 64 비트 압축 명령어 포맷(730)에서 사용에 이용가능하지 않다.
몇몇 실행 유닛 명령어는, 2개의 소스 피연산자(src0(722), src1(722)) 및 하나의 목적지(destination)(718)를 포함하는 3개까지의 피연산자를 구비한다. 몇몇 실시형태에서, 실행 유닛은 이중 목적지 명령어를 지원하는데, 이 경우 목적지 중 하는 암시된다. 데이터 조작 명령어(data manipulation instruction)은 제3 소스 피연산자(예를 들면, SRC2(724))를 구비할 수 있는데, 이 경우 명령어 연산코드(712)는 소스 피연산자의 수를 결정한다. 명령어의 최종 소스 피연산자는 명령어를 이용하여 전달되는 즉시(예를 들면, 하드코딩된) 값일 수 있다.
몇몇 실시형태에서, 128 비트 명령어 포맷(710)은, 명령어에 대해 어드레스 모드 및/또는 액세스 모드를 명시하는 액세스/어드레스 모드 필드(726)를 포함한다. 일 실시형태에서, 액세스 모드는 명령어에 대한 데이터 액세스 정렬을 정의하는 것이다. 몇몇 실시형태는 16 바이트의 정렬된 액세스 모드 및 1바이트의 정렬된 액세스 모드를 포함하는 액세스 모드를 지원하는데, 이 경우, 액세스 모드의 바이트 정렬은 명령어 피연산자의 액세스 정렬을 결정한다. 일 실시형태에서, 액세스/어드레스 모드 필드(726)의 어드레스 모드 부분은, 명령어가 직접적인 주소지정을 사용할 것인지 또는 간접적인 주소지정을 사용할 것인지의 여부를 결정한다.
몇몇 실시형태에서, 명령어는 연산코드 디코드(740)를 간단히 하기 위해 연산코드 비트 필드에 기초하여 그룹화된다. 8 비트 연산코드의 경우, 비트 4, 5, 6은 실행 유닛이 연산코드의 타입을 결정하는 것을 허용한다. 도시된 엄밀한 연산코드 그룹화는 예에 불과하다. 몇몇 실시형태에서, 이동 및 로직 연산코드 그룹(move and logic opcode group, 742)은 데이터 움직임 및 로직 명령어(예를 들면, 이동(mov), 비교(cmp))을 포함한다. 몇몇 실시형태에서, 이동 및 로직 그룹(742)은 5개의 최상위 비트(most significant bit, MSB)를 공유하는데, 이 경우 이동(mov) 명령어는 0000xxxxb(예를 들면, 0x0x)의 형태이고 로직 명령어는 0001xxxxb(예를 들면, 0x01)의 형태이다. 플로우 제어 명령어 그룹(744)(예를 들면, 호출, 점프(jmp))은 0010xxxxb(예를 들면, 0x20) 형태의 명령어를 포함한다. 기타(miscellaneous) 명령어 그룹(746)은, 0011xxxxb(예를 들면, 0x30) 형태의 동기화 명령어(예를 들면, 대기, 전송)을 포함하는 명령어의 혼합체를 포함한다. 병렬 수학 명령어 그룹(parallel math instruction group, 748)은 컴포넌트 단위 산술 명령어(component-wise arithmetic instruction)(예를 들면, 가산, 승산(mul))을 0100xxxxb(예를 들면, 0x40) 형태로 포함한다. 병렬 수학 그룹(748)은 산술 연산을 데이터 채널에 걸쳐 병렬로 수행한다. 벡터 수학 그룹(750)은 0101xxxxb(예를 들면, 0x50) 형태의 산술 명령어(예를 들면, dp4)을 포함한다. 벡터 수학 그룹은 벡터 피연산자에 대해 내적(dot product)과 같은 계산을 수행한다.
그래픽 파이프라인
도 8은 그래픽 프로세서(800)의 다른 실시형태의 블록도이다. 본원의 임의의 다른 도면의 엘리먼트와 동일한 도면 부호(또는 명칭)를 갖는 도 8의 엘리먼트는 본원의 다른 곳에서 설명되는 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있지만, 이러한 것에 한정되는 것은 아니다.
몇몇 실시형태에서, 그래픽 프로세서(800)는, 그래픽 파이프라인(820), 미디어 파이프라인(830), 디스플레이 엔진(840), 스레드 실행 로직(850), 및 렌더 엔진(870)을 포함한다. 몇몇 실시형태에서, 그래픽 프로세서(800)는, 하나 이상의 범용 프로세싱 코어를 포함하는 멀티코어 프로세싱 시스템 내의 그래픽 프로세서이다. 그래픽 프로세서는, 하나 이상의 제어 레지스터(도시되지 않음)에 대한 레지스터 기록에 의해 또는 링 인터커넥트(802)를 통해 그래픽 프로세서(800)로 내려지는 커맨드를 통해 제어된다. 몇몇 실시형태에서, 링 인터커넥트(802)는 그래픽 프로세서(800)를, 다른 그래픽 프로세서 또는 범용 프로세서와 같은 다른 프로세싱 컴포넌트에 커플링된다. 링 인터커넥트(802)로부터의 커맨드는, 그래픽 파이프라인(820) 또는 미디어 파이프라인(830)의 각각의 컴포넌트로 명령어를 공급하는 커맨드 스트리머(803)에 의해 해석된다.
몇몇 실시형태에서, 커맨드 스트리머(803)는, 메모리로부터 버텍스 데이터를 판독하고 커맨드 스트리머(803)에 의해 제공되는 버텍스 프로세싱 커맨드를 실행하는 버텍스 페처(vertex fetcher, 805)의 동작을 감독한다. 몇몇 실시형태에서, 버텍스 페처(805)는 버텍스 데이터를, 좌표 공간 변환 및 각각의 버텍스에 대해 라이팅(lighting) 동작을 수행하는 버텍스 쉐이더(807)로 제공한다. 몇몇 실시형태에서, 버텍스 페처(805) 및 버텍스 쉐이더(807)는 실행 스레드를 스레드 디스패처(831)를 통해 실행 유닛(852A, 852B)으로 디스패칭하는 것에 의해 버텍스 프로세싱 명령어를 실행한다.
몇몇 실시형태에서, 실행 유닛(852A, 852B)은 그래픽 및 미디어 동작을 수행하기 위한 명령어를 구비하는 벡터 프로세서의 어레이이다. 몇몇 실시형태에서, 실행 유닛(852A, 852B)은, 각각의 어레이에 대해 고유하거나 또는 어레이 사이에서 공유되는 부착형 L1 캐시(851)을 구비한다. 캐시는, 데이터 캐시, 명령어 캐시 또는 상이한 구획에 데이터 및 명령어를 포함하도록 구획되는 단일의 캐시로서 구성될 수 있다.
몇몇 실시형태에서, 그래픽 파이프라인(820)은 3D 오브젝트의 하드웨어 가속 테셀레이션을 수행하기 위한 테셀레이션 컴포넌트를 포함한다. 몇몇 실시형태에서, 프로그래밍가능한 헐 쉐이더(hull shader, 811)가 테셀레이션 동작을 구성한다. 프로그래밍가능한 도메인 쉐이더(817)는 테셀레이션 출력의 백엔드(back-end) 평가를 제공한다. 테셀레이터(813)는 헐 쉐이더(811)의 방향에서 동작하고, 그래픽 파이프라인(820)에 대한 입력으로서 제공되는 대략적인 지오메트릭 모델에 기초하여 상세한 지오메트릭 오브젝트의 세트를 생성하기 위한 특수 목적의 로직을 포함한다. 몇몇 실시형태에서, 테셀레이션이 사용되지 않으면, 테셀레이션 컴포넌트(811, 813, 817)는 바이패스될 수 있다.
몇몇 실시형태에서, 완전한 지오메트릭 오브젝트는, 실행 유닛(852A, 852B)으로 디스패치되는 하나 이상의 스레드를 통해 지오메트리 쉐이더(819)에 의해 프로세싱될 수 있거나, 또는 클리퍼(clipper, 829)로 바로 진행할 수 있다. 몇몇 실시형태에서, 지오메트리 쉐이더는, 그래픽 파이프라인의 이전 단계에서와 같이 버텍스 또는 버텍스의 패치 대신, 전체(entire) 지오메트릭 오브젝트에 대해 동작한다. 테셀레이션이 디스에이블되면, 지오메트리 쉐이더(819)는 버텍스 쉐이더(807)로부터 입력을 수신한다. 몇몇 실시형태에서, 지오메트리 쉐이더(819)는, 테셀레이션 유닛이 디스에이블되면 지오메트리 테셀레이션을 수행하기 위한 지오메트리 쉐이더 프로그램에 의해 프로그래밍가능하다.
래스터라이징화 이전에, 클리퍼(829)가 버텍스 데이터를 프로세싱한다. 클리퍼(829)는 클리핑 및 지오메트리 쉐이더 기능을 갖는 프로그래밍가능한 클리퍼 또는 고정된 기능의 클리퍼일 수도 있다. 몇몇 실시형태에서, 렌더 출력 파이프라인(870)의 래스터라이저(873)는, 지오메트릭 오브젝트를 그들의 픽셀당 표현으로 변환하기 위해 픽셀 쉐이더를 디스패치한다. 몇몇 실시형태에서, 픽셀 쉐이더 로직은 스레드 실행 로직(850)에 포함된다. 몇몇 실시형태에서, 애플리케이션은 래스터라이저(873)를 바이패스할 수 있고 스트림 출력 유닛(823)을 통해 래스터라이징되지 않은 버텍스 데이터에 액세스할 수 있다.
그래픽 프로세서(800)는, 인터커넥트 버스, 인터커넥트 패브릭, 또는 프로세서의 주요 컴포넌트 사이에서 데이터 및 메시지가 전달되는 것을 허용하는 몇몇 다른 인터커넥트 메커니즘을 구비한다. 몇몇 실시형태에서, 실행 유닛(852A, 852B) 및 관련 캐시(들)(851), 텍스쳐 및 미디어 샘플러(854), 및 텍스쳐/샘플러 캐시(858)는, 메모리 액세스를 수행하고 프로세서의 렌더 출력 파이프라인 컴포넌트와 통신하도록, 데이터 포트(856)를 통해 인터커넥트된다. 몇몇 실시형태에서, 샘플러(854), 캐시(851, 858) 및 실행 유닛(852A, 852B) 각각은 별개의 메모리 액세스 경로를 구비한다.
몇몇 실시형태에서, 렌더 출력 파이프라인(870)은, 버텍스 기반의 오브젝트를 관련된 픽셀 기반의 표현으로 변환하는 래스터라이저 및 깊이 테스트 컴포넌트(873)를 포함한다. 몇몇 실시형태에서, 래스터라이저 로직은 고정된 기능의 삼각형 및 직선 래스터라이즈화를 수행하기 위한 윈도워/마스커(windower/masker) 유닛을 포함한다. 몇몇 실시형태에서, 관련된 렌더 및 깊이 버퍼 캐시(878, 879)도 또한 이용가능하다. 픽셀 동작 컴포넌트(877)는 데이터에 대한 픽셀 기반의 동작을 수행하지만, 몇몇 경우에서는, 2D 동작과 관련되는 픽셀 동작(예를 들면, 블렌딩에 의한 비트 블록 이미지 전송)은 2D 엔진(841)에 의해 수행되거나, 또는 디스플레이시 오버레이 디스플레이 플레인을 사용하여 디스플레이 컨트롤러(843)에 의해 대체된다. 몇몇 실시형태에서, 공유된 L3 캐시(875)는 모든 그래픽 컴포넌트에게 이용가능하여, 메인 시스템 메모리의 사용 없이 데이터의 공유를 가능하게 한다.
몇몇 실시형태에서, 그래픽 프로세서 미디어 파이프라인(830)은 미디어 엔진(837) 및 비디오 프론트엔드(834)를 포함한다. 몇몇 실시형태에서, 비디오 프론트엔드(834)는 커맨드 스트리머(803)로부터 파이프라인 커맨드를 수신한다. 몇몇 실시형태에서, 미디어 파이프라인(830)은 별개의 커맨드 스트리머를 포함한다. 몇몇 실시형태에서, 비디오 프론트엔드(834)는 미디어 커맨드를, 그 커맨드를 미디어 엔진(837)으로 전송하기 이전에, 프로세싱한다. 몇몇 실시형태에서, 미디어 엔진(337)은 스레드 디스패처(831)를 통해 스레드 실행 로직(850)으로의 디스패치를 위한 스레드를 생성할 스레드 생성 기능성을 포함한다.
몇몇 실시형태에서, 그래픽 프로세서(800)는 디스플레이 엔진(840)을 포함한다. 몇몇 실시형태에서, 디스플레이 엔진(840)은 프로세서(800) 외부에 있고 링 인터커넥트(802), 또는 몇몇 다른 인터커넥트 버스 또는 패브릭을 통해 그래픽 프로세서와 커플링된다. 몇몇 실시형태에서, 디스플레이 엔진(840)은 2D 엔진(841) 및 디스플레이 컨트롤러(843)를 포함한다. 몇몇 실시형태에서, 디스플레이 엔진(840)은 3D 파이프라인과 무관하게 동작할 수 있는 특수 목적의 로직을 포함한다. 몇몇 실시형태에서, 디스플레이 컨트롤러(843)는, 랩탑 컴퓨터에서와 같은 시스템 통합 디스플레이 디바이스일 수도 있는, 또는 디스플레이 디바이스 커넥터를 통해 부착된 외부 디스플레이 디바이스일 수도 있는 디스플레이 디바이스(도시되지 않음)와 커플링된다.
몇몇 실시형태에서, 그래픽 파이프라인(820) 및 미디어 파이프라인(830)은 다수의 그래픽 및 미디어 프로그래밍 인터페이스에 기초하여 동작을 수행하도록 구성가능하고 임의의 하나의 애플리케이션 프로그래밍 인터페이스(application programming interface, API)에 특정되지 않는다. 몇몇 실시형태에서, 그래픽 프로세서에 대한 드라이버 소프트웨어는, 특정 그래픽 또는 미디어 라이브러리에 고유한 API 호출을, 그래픽 프로세서에 의해 프로세싱될 수 있는 커맨드로 변환한다. 몇몇 실시형태에서, Khronos Group으로부터의 오픈 그래픽 라이브러리(Open Graphics Library, OpenGL) 및 오픈 컴퓨팅 랭기지(Open Computing Language, OpenCL), Microsoft Corporation으로부터의 Direct3D 라이브러리에 대한 지원이 제공되거나, 또는 OpenGL 및 D3D 둘 모두에 대한 지원이 제공될 수도 있다. 오픈 소스 컴퓨터 비전 라이브러리(Open Source Computer Vision Library, OpenCV)에 대해서도 지원이 제공될 수도 있다. 미래의 API의 파이프라인으로부터 그래픽 프로세서의 파이프라인으로의 매핑이 이루어질 수 있으면, 호환가능한 3D 파이프라인을 갖는 미래의 API도 또한 지원될 것이다.
그래픽 파이프라인 프로그래밍
도 9a는 몇몇 실시형태에 따른 그래픽 프로세서 커맨드 포맷(900)을 예시하는 블록도이다. 도 9b는 한 실시형태에 따른 그래픽 프로세서 커맨드 시퀀스(910)를 예시하는 블록도이다. 도 9a에서 실선 박스는 그래픽 커맨드에 일반적으로 포함되는 컴포넌트를 예시하고, 한편 점선 라인은 그래픽 커맨드의 서브세트에만 포함되거나 또는 옵션사항인 컴포넌트를 포함한다. 도 9a의 예시적인 그래픽 프로세서 커맨드 포맷(900)은, 커맨드의 타겟 클라이언트(902), 커맨드 동작 코드(연산코드)(904), 커맨드에 대한 관련 데이터(906)를 식별하기 위한 데이터 필드를 포함한다. 몇몇 커맨드에서는, 서브연산코드(905) 및 커맨드 사이즈(908)도 또한 포함된다.
몇몇 실시형태에서, 타겟 클라이언트(902)는 커맨드 데이터를 프로세싱하는 그래픽 디바이스의 클라이언트 유닛을 특정한다. 몇몇 실시형태에서, 그래픽 프로세서 커맨드 파서는, 커맨드의 미래의 프로세싱을 컨디셔닝하기 위해 그리고 커맨드 데이터를 적절한 클라이언트 유닛으로 라우팅하기 위해 각각의 커맨드의 클라이언트 필드를 검사한다. 몇몇 실시형태에서, 그래픽 프로세서 클라이언트 유닛은 메모리 인터페이스 유닛, 렌더 유닛, 2D 유닛, 3D 유닛, 및 미디어 유닛을 포함한다. 각각의 클라이언트 유닛은, 커맨드를 프로세싱하는 대응하는 프로세싱 파이프라인을 구비한다. 커맨드가 클라이언트 유닛에 의해 수신되면, 클라이언트 유닛은 수행할 동작을 결정하기 위해, 연산코드(904) 및, 만약 있다면, 서브연산코드(905)를 판독한다. 클라이언트 유닛은 데이터 필드(906)의 정보를 사용하여 커맨드를 수행한다. 몇몇 커맨드의 경우, 명시적인 커맨드 사이즈(908)는 커맨드의 사이즈를 특정할 것으로 예상된다. 몇몇 실시형태에서, 커맨드 파서는 커맨드 연산코드에 기초하여 커맨드의 적어도 일부의 사이즈를 자동적으로 결정한다. 몇몇 실시형태에서, 커맨드는 다수의 더블 워드를 통해 정렬된다.
도 9b에서의 흐름도는 예시적인 커맨드 시퀀스(910)를 도시한다. 몇몇 실시형태에서, 그래픽 프로세서의 한 실시형태를 특징짓는 데이터 프로세싱 시스템의 소프트웨어 또는 펌웨어는, 그래픽 동작의 세트를 셋업하고, 실행하고 그리고 종료하도록 도시된 커맨드 시퀀스의 한 버전을 사용한다. 샘플 커맨드 시퀀스가 예시의 목적만을 위해 도시되고 설명되지만, 실시형태는 이들 특정 커맨드에 또는 이 커맨드 시퀀스로 한정되지는 않는다. 또한, 커맨드는 커맨드 시퀀스에서 커맨드의 배치(batch)로서 발행될 수도 있고, 그 결과 그래픽 프로세서가 커맨드의 시퀀스를 적어도 부분적으로 동시에 프로세싱할 것이다.
몇몇 실시형태에서, 샘플 커맨드 시퀀스(910)는, 임의의 액티브 그래픽 파이프라인으로 하여금 파이프라인에 대해 현재 펜딩 중인 커맨드를 완료하게 하는 파이프라인 플러시 커맨드(pipeline flush command, 192)로 시작할 수도 있다. 몇몇 실시형태에서, 3D 파이프라인(922) 및 미디어 파이프라인(924)은 동시에 동작하지 않는다. 파이프라인 플러시는, 액티브 그래픽 파이프라인으로 하여금 임의의 펜딩 중인 커맨드를 완료하게 하도록 수행된다. 파이프라인 플러시에 응답하여, 그래픽 프로세서에 대한 커맨드 파서는, 액티브 드로잉 엔진이 펜딩 중인 동작을 완료하고 관련 판독 캐시가 무효로 될 때까지 커맨드 프로세싱을 중지할 것이다. 옵션사항으로서, "더티(dirty)"로 마킹되는 렌더 캐시의 임의의 데이터는 메모리로 플러시된다. 몇몇 실시형태에서, 파이프라인 플러시 커맨드(192)는 파이프라인 동기화를 위해 또는 그래픽 프로세서를 저전력 상태로 두기 이전에 사용될 수 있다.
몇몇 실시형태에서, 그래픽 프로세서가 파이프라인 사이에서 명시적으로 스위칭하는 것을 커맨드 시퀀스가 필요로 할 때, 파이프라인 선택 커맨드(913)가 사용된다. 몇몇 실시형태에서, 파이프라인 선택 커맨드(913)는 실행 컨텍스트(context) 내에서, 그 컨텍스트(context)가 파이프라인 둘 다에 대해 커맨드를 발행해야 하지 않는 한, 파이프라인 커맨드를 발행하기 이전에 한 번만 요구된다. 몇몇 실시형태에서, 파이프라인 플러시 커맨드(912)는 파이프라인 선택 커맨드(913)를 통한 파이프라인 스위칭 직전에 요구된다.
몇몇 실시형태에서, 파이프라인 제어 커맨드(914)는 동작을 위한 그래픽 파이프라인을 구성하고 3D 파이프라인(922) 및 미디어 파이프라인(924)을 프로그래밍하기 위해 사용된다. 몇몇 실시형태에서, 파이프라인 제어 커맨드(914)는 액티브 파이프라인에 대한 파이프라인 상태를 구성한다. 일 실시형태에서, 파이프라인 제어 커맨드(914)는 파이프라인 동기화를 위해 그리고 커맨드의 배치를 프로세싱하기 이전에 액티브 파이프라인 내의 하나 이상의 캐시 메모리로부터 데이터를 소거(clear)하기 위해 사용된다.
몇몇 실시형태에서, 데이터를 기록하도록 각각의 파이프라인에 대한 리턴 버퍼의 세트를 구성하기 위해, 리턴 버퍼 상태 커맨드(916)가 사용된다. 몇몇 파이프라인 동작은 하나 이상의 리턴 버퍼의 할당, 선택, 또는 구성을 필요로 하는데, 프로세싱 동안 동작은 그 리턴 버퍼 안으로 중간 데이터를 기록한다. 몇몇 실시형태에서, 그래픽 프로세서는 출력 데이터를 저장하기 위해 그리고 크로스 스레드 통신을 수행하기 위해 하나 이상의 리턴 버퍼를 또한 사용한다. 몇몇 실시형태에서, 리턴 버퍼 상태(916)는 파이프라인 동작의 세트에 대해 사용할 리턴 버퍼의 사이즈 및 수를 선택하는 것을 포함한다.
커맨드 시퀀스에서의 나머지 커맨드는 동작에 대한 액티브 파이프라인에 기초하여 상이하다. 파이프라인 결정(920)에 기초하여, 커맨드 시퀀스는 3D 파이프라인 상태(930)로 시작하는 3D 파이프라인(922), 또는 미디어 파이프라인 상태(940)에서 시작하는 미디어 파이프라인(924)으로 맞춤된다(tailored).
3D 파이프라인 상태(930)에 대한 커맨드는, 버텍스 버퍼 상태, 버텍스 엘리먼트 상태, 일정한 컬러 상태, 깊이 버퍼 상태, 및 3D 프리미티브 커맨드가 프로세싱되기 이전에 구성되어야 하는 다른 상태 변수에 대한 3D 상태 설정 커맨드를 포함한다. 이들 커맨드의 값은, 사용 중인 특정한 3D API에 적어도 부분적으로 기초하여 결정된다. 몇몇 실시형태에서, 3D 파이프라인 상태(930) 커맨드는 또한, 소정의 파이프라인 엘리먼트를, 이들 엘리먼트가 사용되지 않을 것이면, 선택적으로 디스에이블하거나 바이패스할 수 있다.
몇몇 실시형태에서, 3D 프리미티브(932) 커맨드는 3D 파이프라인에 의해 프로세싱될 3D 프리미티브를 제출하기(submit) 위해 사용된다. 3D 프리미티브(932) 커맨드를 통해 그래픽 프로세서로 전달되는 커맨드 및 관련 파라미터는 그래픽 파이프라인의 버텍스 페치 기능으로 포워딩된다. 버텍스 페치 기능은 3D 프리미티브(932) 커맨드 데이터를 사용하여 버텍스 데이터 구조체를 생성한다. 버텍스 데이터 구조체는 하나 이상의 리턴 버퍼에 저장된다. 몇몇 실시형태에서, 3D 프리미티브(932) 커맨드는 버텍스 쉐이더를 통해 3D 프리미티브에 대한 버텍스 연산을 수행하기 위해 사용된다. 버텍스 쉐이더를 프로세싱하기 위해, 3D 파이프라인(922)은 쉐이더 실행 스레드를 그래픽 프로세서 실행 유닛으로 디스패치한다.
몇몇 실시형태에서, 3D 파이프라인(922)은 실행(934) 커맨드 또는 이벤트를 통해 트리거된다. 몇몇 실시형태에서, 레지스터 기록은 커맨드 실행을 트리거한다. 몇몇 실시형태에서, 실행은 커맨드 시퀀스의 'go' 또는 'kick' 커맨드를 통해 트리거된다. 일 실시형태에서, 커맨드 실행은, 커맨드 시퀀스를 그래픽 파이프라인을 통해 플러시하기 위한 파이프라인 동기화 커맨드를 사용하여 트리거된다. 3D 파이프라인은 3D 프리미티브에 대한 지오메트리 프로세싱을 수행할 것이다. 동작이 완료되면, 결과적으로 나타나는 지오메트릭 오브젝트는 래스터라이징되고 픽셀 엔진은 결과적으로 나타나는 픽셀을 채색한다. 픽셀 쉐이딩 및 픽셀 백엔드 동작을 제어하기 위한 추가적인 커맨드가 이들 동작에 대해 또한 포함될 수도 있다.
몇몇 실시형태에서, 샘플 커맨드 시퀀스(910)는, 미디어 동작을 수행할 때 미디어 파이프라인(924) 경로를 따른다. 일반적으로, 미디어 파이프라인(924)에 대한 프로그래밍의 특정 사용 및 방식은 수행될 미디어 또는 계산 동작에 의존한다. 특정 미디어 디코드 동작은 미디어 디코드 동안 미디어 파이프라인으로 맡겨질 수도 있다. 몇몇 실시형태에서, 미디어 파이프라인은 또한 바이패스될 수도 있고 미디어 디코드는 하나 이상의 범용 프로세싱 코어에 의해 제공되는 리소스를 전체적으로 또는 부분적으로 사용하여 수행될 수 있다. 일 실시형태에서, 미디어 파이프라인은 범용 그래픽 프로세서 유닛(general-purpose graphics processor unit, GPGPU) 동작을 위한 엘리먼트를 또한 포함하는데, 이 경우, 그래픽 프로세서는, 그래픽 프리미티브의 렌더링에 명시적으로 관련되지 않는 계산적 쉐이더 프로그램을 사용하여 SIMD 벡터 연산을 수행하기 위해 사용된다.
몇몇 실시형태에서, 미디어 파이프라인(924)은 3D 파이프라인(922)과 유사한 방식으로 구성된다. 미디어 오브젝트 커맨드(942) 이전에, 미디어 파이프라인 상태 커맨드(940)의 세트가 디스패치되거나 커맨드 큐에 놓이게 된다. 몇몇 실시형태에서, 미디어 파이프라인 상태 커맨드(940)는, 미디어 오브젝트를 프로세싱하기 위해 사용될 미디어 파이프라인 엘리먼트를 구성하기 위한 데이터를 포함한다. 이것은, 인코드 또는 디코드 포맷과 같은, 미디어 파이프라인 내에 비디오 디코드 및 비디오 인코드 로직을 포함하기 위한 데이터를 포함한다. 몇몇 실시형태에서, 미디어 파이프라인 상태 커맨드(940)는, 상태 설정의 배치를 포함하는 "간접적인" 상태 엘리먼트에 대한 하나 이상의 포인터의 사용을 또한 지원한다.
몇몇 실시형태에서, 미디어 오브젝트 커맨드(942)는 미디어 파이프라인에 의한 프로세싱을 위한 미디어 오브젝트로 포인터를 공급한다. 미디어 오브젝트는 프로세싱될 비디오 데이터를 포함하는 메모리 버퍼를 포함한다. 몇몇 실시형태에서, 모든 미디어 파이프라인 상태는, 미디어 오브젝트 커맨드(942)를 발행하기 이전에 유효해야만 한다. 파이프라인 상태가 구성되고 미디어 오브젝트 커맨드(942)가 큐잉되면, 미디어 파이프라인(924)은 실행 커맨드(944) 또는 등가의 실행 이벤트(예를 들면, 레지스터 기록)를 통해 트리거된다. 그 다음, 미디어 파이프라인(924)으로부터의 출력은, 3D 파이프라인(922) 또는 미디어 파이프라인(924)에 의해 제공되는 동작에 의해 사후 프로세싱될 수도 있다. 몇몇 실시형태에서, 미디어 동작과 유사한 방식으로 GPGPU 동작이 구성되고 실행된다.
그래픽 소프트웨어
아키텍쳐
도 10은 몇몇 실시형태에 따른 데이터 프로세싱 시스템에 대한 예시적인 그래픽 소프트웨어 아키텍쳐(1000)를 예시한다. 몇몇 실시형태에서, 소프트웨어 아키텍쳐는 3D 그래픽 애플리케이션(1010), 오퍼레이팅 시스템(1020), 및 적어도 하나의 프로세서(1030)를 포함한다. 몇몇 실시형태에서, 프로세서(1030)는 그래픽 프로세서(1032) 및 하나 이상의 범용 프로세서 코어(들)(1034)를 포함한다. 그래픽 애플리케이션(1010) 및 오퍼레이팅 시스템(1020) 각각은 데이터 프로세싱 시스템의 시스템 메모리(1050)에서 실행한다.
몇몇 실시형태에서, 3D 그래픽 애플리케이션(1010)은 쉐이더 명령어(1012)을 포함하는 하나 이상의 쉐이더 프로그램을 포함한다. 쉐이더 언어 명령어는 하이 레벨 쉐이더 언어, 예컨대 하이 레벨 쉐이더 언어(High Level Shader Language, HLSL) 또는 OpenGL 쉐이더 언어(OpenGL Shader Language, GLSL)일 수도 있다. 애플리케이션은, 범용 프로세서 코어(1034)에 의한 실행에 적합한 기계어(machine language)로 실행가능한 명령어(1014)을 또한 포함한다. 애플리케이션은 버텍스 데이터에 의해 정의되는 그래픽 오브젝트(1016)를 또한 포함한다.
몇몇 실시형태에서, 오퍼레이팅 시스템(1020)은 Microsoft Corporation으로부터의 Microsoft® Windows® 오퍼레이팅 시스템, 독점적 UNIX형 오퍼레이팅 시스템(a proprietary UNIX-like operating system), 또는 리눅스 커널의 변형을 사용하는 오퍼레이팅 시스템이다. Direct3D API가 사용되면, 오퍼레이팅 시스템(1020)은 HLSL의 임의의 쉐이더 명령어(1012)을 더 하위 레벨의 쉐이더 언어로 컴파일하기 위해 프론트엔드 쉐이더 컴파일러(1024)를 사용한다. 컴파일은 적시(just-in-time, JIT)의 컴파일일 수도 있거나 또는 애플리케이션은 쉐이더 프리컴파일(pre-compilation)을 수행할 수도 있다. 몇몇 실시형태에서, 하이 레벨 쉐이더는 3D 그래픽 애플리케이션(1010)의 컴파일 동안 하위 레벨의 쉐이더로 컴파일된다.
몇몇 실시형태에서, 유저 모드 그래픽 드라이버(1026)는, 쉐이더 명령어(1012)을 하드웨어 고유의 표현으로 변환하기 위한 백엔드 쉐이더 컴파일러(1027)를 포함한다. OpenGL API가 사용되면, GLSL 하이 레벨 언어의 쉐이더 명령어(1012)은 컴파일을 위해 유저 모드 그래픽 드라이버(1026)로 전달된다. 몇몇 실시형태에서, 유저 모드 그래픽 드라이버(1026)는 커널 모드 그래픽 드라이버(1029)와 통신하기 위해 오퍼레이팅 시스템 커널 모드 기능(1028)을 사용한다. 몇몇 실시형태에서, 커널 모드 그래픽 드라이버(1029)는 커맨드 및 명령어를 디스패치하기 위해 그래픽 프로세서(1032)와 통신한다.
그래픽 변환 테이블
도 11은, 한 실시형태에 따른, 그래픽 변환 테이블을 포함하는 예시적인 GPU 프로그래밍 모델의 개관을 제공한다. 프로그래밍 모델은, 일 실시형태에서 시스템 메모리일 수도 있는 공유 메모리(1104)를 사용하는 하나 이상의 프로세서(1102)와 GPU(1108) 사이의 상호작용을 예시한다. 공유 메모리는 커맨드 버퍼(1114) 및 프레임 버퍼(1124)를 포함한다. 커맨드 버퍼(1114) 및 프레임 버퍼(1124)를 포함하는 시스템 메모리에 대한 그래픽 메모리 액세스를 가능하게 하기 위해, 그래픽 변환 테이블(graphics translation table, GTT)의 세트가 사용된다.
일 실시형태에서, 하나 이상의 시스템 프로세서(1102)는, 도 9a 및 도 9b에서 설명된 것과 같이, GPU 고유의 커맨드를 사용하여 GPU(1108)를 프로그래밍한다. 일 실시형태에서, 그래픽 드라이버는 시스템 메모리(1104)에 저장되는 커맨드 버퍼(1114) 안으로 커맨드를 프로그래밍한다. 일 실시형태에서, 하나 이상의 프로세서는 GPU에게, 예를 들면, 실행 리스트의 제출 및/또는 렌더링 링 버퍼의 테일 레지스터(tail register)와 같은 프로세서 고유의 방법을 통해, 커맨드가 실행될 준비가 되는 때를 통지한다. 그 다음, GPU(1108)의 렌더 엔진(1128)은 커맨드 버퍼(1114)의 커맨드를 페치하여 실행한다. 페치 및 실행은, 렌더링 링의 커맨드가 준비가 된 것을 프로세서가 GPU에게 통지한 직후 발생할 수도 있거나, 또는 페치는 GPU 내부 스케줄링 또는 관리 정책에 기초하여 나중의 시점에 발생할 수도 있다.
일 실시형태에서, GPU는 모든 펜딩 중인 커맨드 및 명령어의 단일의 페치를 수행하고, 변환을 위해 GTT를 사용하고, 그래픽 커맨드의 실행을 시작하기 이전에 GTT 데이터를 내부 캐시에 저장한다. 일 실시형태에서, GPU는 내부 리소스 이용가능성에 기초하여 명령어를 페치하여 실행하고 그래픽 커맨드를 프로세싱하는 동안 메모리 변환을 위해 GTT를 다수 회 참조할 수도 있다. 일 실시형태에서, GPU 렌더링 엔진은 하나 이상의 프로세서들 중 어떤 것과도 독립적으로 실행할 수 있고 프로세서 및 GPU는 임의의 다른 상대편의 실행 속도에 관한 가정을 피해야만 한다. 프로세서 또는 GPU 중 어느 하나로부터의 실행 결과의 이용가능성은, 프로세서와 GPU 사이에 명시적인 동기화 이벤트가 없는 것으로 가정되지 않아야 한다.
일 실시형태에서, 렌더 엔진(1128)은 커맨드에 기초하여 그래픽 동작을 수행하고 렌더링된 데이터를 메모리의 렌더 타겟으로 출력하는데, 렌더링된 데이터는 궁극적으로는 메모리의 프레임 버퍼(1124)에 기록된다. 일 실시형태에서, 하나 이상의 프로세서는 GPU(1108)와 병렬로 몇몇 동작을 수행하고 그들의 결과를 프레임 버퍼(1124)에 출력할 수도 있다. 그 다음, 디스플레이 엔진은 프레임 버퍼(1124)로부터 픽셀 데이터를 페치하고 픽셀 데이터를 디스플레이로 출력한다.
몇몇 실시형태에서, 시스템 메모리는 GTT(1118)에 의해 다수의 가상 어드레스 공간으로 매핑될 수 있다. 일 실시형태에서, 2GB의 전역적 가상 어드레스 공간이 GPU(1108) 및 하나 이상의 프로세서(1102) 둘 모두로부터 액세스가능하고 GTT(1118)의 전역적 페이지 테이블을 통해 매핑된다. 일 실시형태에서, 다수의 2GB 로컬 가상 어드레스 공간을 통해 렌더 엔진에 대해 로컬 그래픽 메모리가 지원된다.
도 12는, 한 실시형태에 따른, 그래픽 가상화 환경 내에서의 예시적인 전역적 및 프로세스마다의 그래픽 변환 테이블을 도시한다. 일 실시형태에서, 그래픽 가상화 환경(1200)은, 그래픽 모듈(1290)(예를 들면, 도 11의 렌더 엔진(1128), 디스플레이 엔진(1138)) 대신 메모리(1296)에 대한 액세스를 구성하기 위해 전역적 GTT(1288) 및 프로세스마다의 GTT(1289)를 포함한다. 일 실시형태에서, 로컬한 프로세스마다의 GTT는 2레벨의 페이징 구조를 사용하여 구현된다. 제1 레벨은 페이지 디렉토리 테이블(page directory table, PDT)(1292)에 페이지 디렉토리 엔트리(page directory entry, PDE)를 포함한다. 페이지 디렉토리(1292)의 PDE는 페이지 테이블 베이스 어드레스를 포함한다. 제2 레벨은 페이지 테이블(예를 들면, 1294)을 포함한다. 각각의 페이지 테이블(1294)은, 그래픽 모듈(1290)에 매핑되는 물리적 메모리의 페이지 프레임 어드레스(예를 들면, 페이지 프레임 번호)를 저장하는 페이지 테이블 엔트리(page table entry, PTE)를 포함한다.
분리되어 예시되지만, 일 실시형태에서, 프로세스마다의 GTT의 페이지 테이블 디렉토리(1292)의 엔트리 중 적어도 몇몇은 전역적 GTT(1288)에 포함된다.
GPU
가상화
본원에서 설명되는 실시형태는 GPU 가상화 시스템에 의해 가상화될 수도 있다. GPU 가상화는, 가상 머신 내의 가상 GPU(virtual GPU, vGPU)가 GPU 하드웨어에 의해 제공되는 모든(full) 기능성에 액세스하는 것을 가능하게 한다. 가상 GPU는 다수의 게스트 가상 머신(virtual machine, VM)에 제공될 수도 있다. 게스트 VM은 GPU 피쳐의 모든 어레이에 액세스할 수 있고 가상 그래픽 프로세서를 관리하기 위해 기본적인 GPU 드라이버 소프트웨어를 사용할 수 있다. vCPU 컨텍스트는 퀀텀(quantum) 또는 이벤트마다 스위칭되고, 이 경우 각각의 VM의 vGPU는 주기적으로 "오너 게스트(owner guest)"가 된다. 일 실시형태에서, 컨텍스트 스위칭은 GPU 렌더링 엔진마다 발생할 수도 있다. 주기적 스위칭은 다수의 VM이 물리적 GPU를 유저에게 투명한 방식으로 공유하는 것을 허용한다.
일 실시형태에서, 가상 GPU는, 그래픽 프로세서 메모리를 시스템 메모리로 매핑하는 게스트 및 쉐도우 그래픽 변환 테이블(GTT)을 통해 그래픽 메모리 매핑을 관리한다. 각각의 VM은, 그래픽 메모리 페이지 번호로부터 게스트 메모리 페이지 번호(guest memory page number, GPN)로 변환하기 위한 게스트 GTT를 구비한다. 쉐도우 GTT 엔트리는 그래픽 메모리 페이지 번호로부터 호스트 메모리 페이지 번호(host memory page number, HPN)로 변환된다. 일 실시형태에서, 쉐도우 GTT는 공유되고 다수의 VM에 대한 변환을 유지한다. 일 실시형태에서, 각각의 VM은 프로세스마다의 GTT 및 전역적 GTT 둘 다를 포함한다. 본원에서 설명되는 GTT 동기화 메커니즘은 전역적 GTT 및 프로세스마다의 GTT 둘 다를 동기화하기 위해 사용될 수도 있다.
일 실시형태에서, 게스트 및 쉐도우 GTT는, 게스트 GTT 액세스 휴리스틱스(heuristics)에 기초하여 동기 또는 비동기 쉐도우 GTT 구현 중 어느 하나를 구현하는 하이브리드 쉐도우 구성 방식(hybrid shadow construction scheme, HSCS)을 통해 동기화된다. 일 실시형태에서, 동기 동작 동안 게스트 GTT의 메모리 페이지는 기록 보호된다(write protected). 게스트 GTT에 대한 각각의 업데이트는, 중재기(mediator)에 의해 핸들링되는 기록 보호 트랩(write-protection trap)을 야기한다. VM 중재기는, 정책 마다 쉐도우 GTT 및 게스트 GTT 둘 다에 대한 대응하는 업데이트를 수행하는 것에 의해 그 트랩을 핸들링한다. 일 예에서, 게스트 GTT는 GPN을 이용하여 업데이트될 수도 있고, 쉐도우 GTT는 HPN을 이용하여 업데이트될 수도 있다. 동기 동작에서, 게스트 및 쉐도우 GTT는, 게스트가 오너 게스트가 아닌 경우에도 동기되어 유지된다. 비동기 동작에서, 게스트 GTT는 기록 보호되지 않으며 게스트는 GTT 엔트리를 자유롭게 업데이트할 수도 있다. 게스트 VM이 소정의 렌더링 링의 오너 게스트가 되면, 프로세서는 GPU에게, 커맨드가 실행 준비가 된 것을 (예를 들면, 테일 레지스터 업데이트를 통해) 통지할 수 있다. 일 실시형태에서, VMM은 통지를 트랩하고 커맨드를 제출하기 이전에 쉐도우 GTT를 재구축한다. 일 실시형태에서, 게스트 GTT는, 커맨드가 물리적 GPU로 실제로 제출될 때까지 쉐도우 GTT와의 동기화에서 벗어나도록(예를 들면, 비동기적으로 동작하도록) 허용될 수도 있다.
도 13은 한 실시형태에 따른 예시적인 그래픽 가상화 환경의 블록도이다. 일 실시형태에서, 가상화 환경은, 호스팅되는(예를 들면, 타입2의) 하이퍼바이저/가상 머신 모니터(VMM)(1320)와 인터페이싱하는 호스트 오퍼레이팅 시스템일 수 있는 호스트 또는 서비스 VM(1302) - 이 경우 VMM은 호스트 OS 커널 컴포넌트의 일부로서 상주함 - , 또는 베어 메탈(예를 들면, 타입1의) VMM(1320) 인터페이스 상에서 동작하는 특권 서비스(privileged service) VM - 이 경우 VMM은 특권 서비스 VM 하에 놓임 - 을 포함한다. VMM(1320)은 하나 이상의 게스트 VM(예를 들면, VM1(1304), VM2(1306))에게 그래픽 프로세서(예를 들면, GPU)(1330)에 대한 가상화된 액세스를 제공한다. 게스트 VM(1304, 1306) 및 호스트/서비스 VM(1302)은, 가상화되지 않은 GPU를 제어하기 위해 사용되는 GPU 드라이버 소프트웨어의 버전인 기본적인 GPU 드라이버(1308a-b)를 이용하여 로딩될 수도 있다. 일 실시형태에서, 호스트/서비스 VMM(1302)은, VMM(1320) 내의 vGPU VMM 모듈(1324)을 통해 GPU 가상화를 관리하기 위한 vGPU 디바이스 모델 드라이버(1314)를 포함하는 중재기(1312)를 추가로 포함한다. 중재기(1312)는 기본적인 GPU 드라이버의 일부, 또는 별개의 모듈일 수도 있다.
일 실시형태에서, 중재기의 동작은 타입1 또는 타입2 하이퍼바이저의 사용에 따라 상이하다. 타입2 하이퍼바이저의 경우, 중재기(1312)에 의해 제공되는 액세스 기능을 vGPU가 호출하기 위해 훅(hook)이 드라이버 코드 안으로 배치될 수도 있다. 타입1 하이퍼바이저의 경우, 소프트웨어 트랩은 중재기(1312)가 기능성을 vGPU로 제공하는 것을 가능하게 하기 위해 사용될 수도 있다. 트랩 또는 트랩 및 에뮬레이트 모델(trap-and-emulate model)의 사용이 본원에서 설명되는 경우, vGPU 중재기(1312)에 액세스하기 위해, 드라이버 코드에 소프트웨어 훅을 사용하는 타입2 하이퍼바이저를 사용하여 유사한 기능성이 제공될 수도 있다는 것이 이해될 것이다. 따라서, 본원에서 설명되는 실시형태는 임의의 특정한 타입의 하이퍼바이저로 한정되지 않는다.
일 실시형태에서, VMM(1320)으로부터의 개입 없이 GPU(1330) 내의 성능이 중요한 리소스(performance-critical resource)에 게스트 VM(1304, 1306)이 직접 액세스할 있게 되는 중재된 패스쓰루(mediated pass through)가 인에이블된다. 이러한 실시형태에서, VM(예를 들면, 렌더 동작)으로부터의 성능이 중요한 동작은 GPU(1330)로의 패스쓰루 호출(1316)을 사용하여 수행될 수 있다. 그러나, VM(1304, 1306)으로부터의 특권의 그래픽 동작은, 중재기(1312)로 라우팅되는 소프트웨어 트랩을 VM 액세스(1317)가 트리거하는 트랩 및 에뮬레이트 모델을 사용하여 핸들링된다. 그 다음, 중재기(1312)는 트랩을 에뮬레이팅하고 GPU 하드웨어에 대한 대응하는 동작을 수행할 수 있다. 타입1 하이퍼바이저에 대해 구성되는 일 실시형태에서, 중재기(1312)는, GPU(1330)로의 특권의 액세스를 구비하는, VMM(1320)의 vGPU VMM 모듈(1324)에 대한 하이퍼바이저 호출(1319)을 통해 트랩을 에뮬레이팅한다. 타입2 하이퍼바이저에 대해 구성되는 일 실시형태에서, 중재기(1312)는 트랩을 에뮬레이팅하고 호스트 OS의 기본적인 드라이버(1308a)를 통해 GPU 하드웨어를 동작시키는데, 이 경우 기본적인 드라이버(1308a)는 특권 모드에서 동작한다.
일 실시형태에서, vGPU 컨텍스트는 퀀텀마다 스위칭되는데, 이 경우 각각의 VM은 주기적으로 "오너 게스트"가 된다. 이 주기적 스위칭은 다수의 VM이 물리적 GPU를 VM의 유저에게 투명한 방식으로 공유하는 것을 허용한다. 예를 들면, 게스트는 커맨드 버퍼를 준비하고, VM이 GPU의 오너 게스트가 아닌 경우를 사용하여 가상 GPU의 그래픽 상태를 프로그래밍할 수도 있다. VMM은, VM이 GPU의 오너 게스트가 되면, 준비된 커맨드 버퍼를 GPU로 제출할 수도 있다. 일 실시형태에서, VM이 오너 게스트이면, 커맨드 버퍼의 VM 커맨드는 GPU(1330)의 렌더 엔진(예를 들면, 도 11의 렌더 엔진(1128))으로 제공된다.
게스트 VM(및 타입1 하이퍼바이저의 서비스 VM)의 각각의 기본적인 그래픽 드라이버는, 전역적 GTT 및 프로세스마다의 GTT를 포함하는 별개의 게스트 GTT(1311, 1310)를 구비할 수 있다. 중재기(1312)는, vGPU 디바이스 모델 드라이버(1314)를 사용하여, 각각의 게스트 GTT 수정과 동기하여 또는 렌더 커맨드가 제출되기 이전에 비동기적으로, 게스트 GTT(1311, 1310)를 쉐도우 GTT(1322)에 쉐도잉한다. 타입2 VMM에서, 호스트의 기본적인 그래픽 드라이버는 별개의 쉐도우 GTT를 추가로 관리할 수도 있다.
GPU 작업부하를 실행하는 프로세스는 그래픽 메모리를 배치로 할당하고 자유롭게 하는 경향이 있는데, 이것은 렌더링 프로세스에 대한 GTT 수정의 영향을 감소시킨다. 따라서, 게스트 GTT와 쉐도우 GTT의 동기화를 유지하는 것에 의해 야기되는 트랩 및 에뮬레이트 오버헤드는 일반적으로 제한된다. 그러나, 게스트가 GTT를 빈번하게 조작하는 경우에는 성능 문제가 발생할 수도 있다. 예를 들면, 몇몇 미디어 트랜스코딩 벤치마크는, 아주 많은 수의 GTT 수정을 도입하는 그래픽 메모리 페이징의 빈번한 스와핑으로 인해 빈약한 가상화 성능을 실현한다.
일 실시형태에서, 중재기(1312)는, 게스트가 다수의 인접한(contiguous) GTT 페이지 수정을 수행하고 있다는 것을 또는 동일한 GTT 엔트리에 대한 반복된 수정을 수행하고 있다는 것을 결정하기 위한 로직을 포함한다. 일 실시형태에서, 그 로직은 어떤 기간 내에 정의된 임계치(예를 들면, 초당 500회의 업데이트)를 초과하는 GTT 페이지 테이블 수정의 횟수를 결정할 것이다. 몇몇 실시형태에서, 정확한 임계치는 동적으로 결정될 수도 있다. 이 결정에 기초하여, 중재기는 게스트 GTT에 대한 기록 보호를 제거할 수 있고 비동기 동작으로 전이할 수 있는데, 비동기 동작에서, 게스트 GTT는, 게스트 VM 커맨드가 그래픽 하드웨어로 제공되도록 준비될 때까지 쉐도우 GTT와의 동기화에서 벗어날 것이다. 일 실시형태에서, 중재기는, 그 다음, VM이 오너 게스트가 될 때 쉐도우 GTT를 재구축하고 스위칭한다. 일 실시형태에서, 중재기는, 새로운 vGPU 커맨드가 물리적 GPU로 제출되어야 할 때 게스트 GTT와 동기화하도록 쉐도우 GTT를 재구축한다.
도 14는 게스트 그래픽 변환 테이블에 대한 비동기 모드에 진입하기 위한 로직의 흐름도이다. 게스트 GTT에 대한 액세스 패턴의 분석은, 게스트 VM이 인접한 블록에서 게스트 GTT(예를 들면, 전역적 또는 프로세스마다의 GTT) 수정을 수행하고 있다는 것을 드러낸다. 일 실시형태에서, 액세스 패턴이 다수의 인접한 GTT 수정, 또는 동일한 GTT 페이지에 대한 반복된 수정을 나타내면, 중재기는, 게스트 GTT, 또는 게스트 GTT의 적어도 일부를 비동기적으로 쉐도잉할지의 여부를 고려할 수도 있다.
일 실시형태에서, 1402에 도시된 바와 같이, 중재기는, 결정된 임계치 초과 횟수 및 빈도에서 GTT 수정의 블록을 검출하도록 구성될 수 있다. 검출에 응답하여, 중재기는 비동기 쉐도우 GTT 동작으로 전이할 수 있다. 비동기 쉐도우 GTT 동작은, 중재기가 게스트 GTT에 대한 기록 보호를 제거하고 GTT가 쉐도우 GTT와의 동기를 벗어나는 것을 허용할 때 블록 1404에서 시작할 수 있다. 한 기간 동안, 블록 1406에 도시된 바와 같이, 게스트 GTT는 게스트 VM으로부터 기록을 수신할 것이다. 게스트 vGPU가 스케줄링되어 있고(예를 들면, vGPU 컨텍스트가 물리적 GPU로 로딩되고) 및/또는 게스트 vGPU 커맨드의 배치가 GPU로 제출될 준비가 된 경우, 쉐도우 GTT는, 1408에 도시된 바와 같이, 재구성된다. 쉐도우 GTT가 게스트 GTT를 사용하여 재구성되면, 게스트 VM 커맨드는, 1410에 도시된 바와 같이, 그래픽 프로세서로 제출될 수 있다.
도 15a 및 도 15b는, 한 실시형태에 따른, 쉐도우 그래픽 변환 테이블 재구성의 블록도이다. 도 15a는 쉐도우 GTT의 완전한 재구성(1506)을 예시한다. 도 15b는 쉐도우 GTT의 부분적인 재구성(1516)을 예시한다.
도 15a에 도시된 바와 같이, 완전히 재구성된 쉐도우 GTT(1512)를 생성하기 위해, 기존의 쉐도우 GTT와 동기에서 벗어나도록 허용된 전체 기록 인에이블된(entire write-enabled) 게스트 GTT(1502)(예를 들면, 도 13의 전역적 GTT(1388) 또는 프로세스마다의 GTT(1389))가 사용된다. 일 실시형태에서, 완전히 재구성된 쉐도우 GTT는, 새로운 커맨드가 GPU로 제출될 때 스크래치(scratch)로부터 재생성된다. 재구성 동안, 게스트 GTT의 각각의 페이지 디렉토리 엔트리 또는 페이지 테이블 엔트리는, 게스트 VM이 액세스하도록 허용되는 메모리를 상기 엔트리가 참조하는 것을 보장하기 위해 검사된다.
도 15b에 도시된 바와 같이, 부분적인 재구성(1516)을 사용하는 하이브리드 쉐도우 GTT(1524)를 생성하기 위해, 기록 인에이블된 게스트 GTT(1504) 중 일부(예를 들면, 도 13의 전역적 GTT(1388) 또는 프로세스마다의 GTT(1389))가 사용되는데, 이 경우, 쉐도우 GTT 페이지 중 일부는 게스트 GTT와 동기화되지만, 쉐도우 GTT의 다른 일부는 그렇지 않다. 부분적인 재구성 또는 완전한 재구성의 선택은, 임의의 주어진 시간에 게스트가 수정하는 GTT 페이지의 수에 기초하여 휴리스틱하게 수행될 수도 있다. 예를 들면, 게스트 GTT(1504)의 수정된 페이지의 수가 임계치 아래이면, 부분적인 재구성이 수행될 수도 있는데, 여기서 게스트 GTT(1504)의 페이지 테이블 엔트리 또는 페이지 디렉토리 엔트리의 더티 비트(예를 들면, 수정된 상태 표시자 비트)는, 어떤 페이지 프레임 번호가 게스트 VM에 의해 수정되었는지를 결정하고, 수정된 게스트 GTT 페이지와 대응하는 쉐도우 GTT 페이지만을 동기화하기 위해 사용될 수도 있다. 부분적으로 재구성된 쉐도우 GTT(1524)는 기존의 쉐도우 GTT를 복제하거나 베이스로 재사용하는 것에 의해 그리고 게스트 GTT와 동기에서 벗어나는 GTT 엔트리만을 업데이트하는 것에 의해 생성될 수 있다.
수정된 게스트 페이지를 결정하는 것은, 게스트 페이지 더티 비트를 사용하는 것 외에, 다수의 상이한 기술을 사용하여 수행될 수도 있다. 일 실시형태에서, 수정된 GTT 페이지는, 기록 보호 게스트 GTT 페이지에 대한 게스트 VM 액세스로부터 게스트 폴트 어드레스(guest fault address)를 통해 결정된다. 일 실시형태에서, VMM은, 쉐도우 GTT와 비동기하도록 허용되는 게스트 GTT의 게스트 페이지의 리스트를 추적하기 위해, 별개의 데이터 구조(예를 들면, 링크 테이블, 해시 테이블, 선형 어레이)를 사용하고, 수정된 게스트 GTT 페이지 중 어떤 것이 대응하는 쉐도우 GTT 페이지에 동기화하는지를 결정하기 위해 데이터 구조를 사용하고, 및/또는 동기화할 페이지의 리스트의 폭을 좁히기 위해 추가적인 "더티" 비트를 사용할 수도 있다.
다른 실시형태에서, 쉐도우 GTT와의 동기화를 벗어나도록 허용되는 게스트 GTT 페이지의 수가 아주 크고, 쉐도우 GTT가 재구성될 때마다 게스트 GTT 페이지가 항상 수정되지 않으면, 쉐도우 GTT의 재구성 동안 업데이트되어야 하는 GTT 페이지를 식별하는 프로세스의 폭을 더 좁히기 위해, 더 상위 레벨의 페이지 테이블의 더티 비트가 사용될 수도 있다. 예시된 바와 같이, GPN_1(1505a) 및 GPN_n-1(1505b) 각각은 기록 인에이블된 GTT(1504)의 페이지 테이블 또는 페이지 디렉토리 엔트리에 대해 설정되는 페이지 테이블 더티 플래그를 구비한다. 따라서, 예시적인 부분적으로 재구성된 쉐도우 GTT(1524)는, 더티 페이지 테이블 엔트리(1505a-b)에 포함되는 페이지 프레임 또는 페이지 테이블 데이터를 이용하여 기존의 쉐도우 GTT를 업데이트하는 것에 의해 생성될 수 있다.
도 16은 쉐도우 그래픽 변환 테이블의 적어도 일부를 재구성하기 위한 흐름도이다. 일 실시형태에서, 1602에 도시된 바와 같이, 가상 GPU 중재기(예를 들면, 도 12의 중재기(1212))는 GTT 또는 GTT의 일부에 대한 재구성 모드를 결정한다. 일 실시형태에서, 비동기 모드에 의해 관리되는 GTT의 일부의 경우, 쉐도우 GTT는, 1604에서 결정되는 바와 같이, 부분적 또는 완전한 재구성을 사용하여 재구축될 수 있다. 일 실시형태에서, 쉐도우 GTT는, 게스트 vGPU의 커맨드가 물리적 GPU로 제출될 때 재구축된다. GTT가 부분적으로 재구성되지 않으면, 중재기는 1606에서 재구성을 위해 전체 쉐도우 GTT를 선택할 수 있다. 그렇지 않고, 1604에서 부분적인 재구성이 인에이블되면, 중재기는, 1607에서 재구성을 위해, 단락 <112>에서 언급된 데이터 구조에 기초하여, 특정 GTT 페이지를 선택할 수 있다.
1608에서, 중재기는, 선택된 동기화를 벗어난 페이지의 모두(예를 들면, 완전한 재구성이 인에이블되면 전체 쉐도우 GTT 또는 부분적인 재구성이 인에이블되면 선택된 GTT 페이지의 모두)가 재구성되어야 할지를 결정한다. 더디 페이지만이 재구성되어야 하면, 1609에서, 중재기는 기존의 선택된 쉐도우 GTT 페이지를 복제 또는 재사용하고, 블록 1611에서, 게스트 GTT의 페이지 테이블 또는 페이지 디렉토리 엔트리에서의 더티 비트에 기초하여, 선택된 GTT 페이지의 하위 선택(sub-selection)을 생성한다. 쉐도우 GTT가 완전히 재구성되어야 하면, 신규의 쉐도우 GTT가 1610에서 생성된다.
1612에서, 신규의 또는 기존의 쉐도우 GTT는, 전체 GTT, 이전에 선택된 특정 GTT 페이지, 게스트 GTT 더티 비트에 기초하여 게스트 GTT의 하위 선택된 부분과 관련되는 쉐도우 GTT 엔트리일 수 있는 쉐도우 GTT의 선택된 또는 하위 선택된 부분을 사용하여 재구성된다. 일 실시형태에서, 게스트 더티 비트는 옵션적으로, 1614에서 도시된 바와 같이, 재구성 이후에 소거된다.
도 17a 및 도 17b는 GTT에 대한 동작의 비동기 모드를 벗어나게 전이하기 위한 그리고 GTT의 적어도 서브세트를 동기 동작으로 전이하기 위한 예시적인 로직을 예시하는 흐름도이다. 일 실시형태에서, 관련 쉐도우 GTT(들)가 동기하고 있으며 그래픽 프로세서로 커맨드를 제출하는 것을 포함하는 도 14에 예시된 동작을 수행한 이후, 중재기는, vGPU VMM 모듈(예를 들면, 도 13의 중재기(1312) 및 vGPU VMM 모듈(1324))을 통해, 비동기 동작을 탈출할 것을 결정하고 게스트 및 쉐도우 GTT 사이의 동기 동작으로 복귀할 수도 있다. 동작이 순차적으로 도시되지만, 몇몇 실시형태들에서는, 예시된 동작은 적어도 부분적으로 병렬로 수행될 수도 있다. 예를 들면, 다수의 독립적인 결정 및 평가는 동시에 수행될 수도 있다. 또한, 게스트의 전역적 또는 프로세스마다의 GTT는 상이한 동작 모드에서 관리될 수도 있고, 그 결과 GTT의 다른 부분이 비동기적으로 관리되는 동안, GTT의 일부는 동시에 관리될 수도 있다. 추가적으로, 프로세스마다의 GTT의 적어도 일부가, 커맨드가 GPU에 제출될 때까지, 관련된 프로세스마다의 쉐도우 GTT 페이지와는 비동기적으로 동작하도록 허용되는 동안, 전역적 GTT는 동기적으로 관리될 수도 있다.
도 17a는, 한 실시형태에 따른, GTT의 적어도 일부를 동기 동작으로 전이하기 위한 로직을 포함하는 흐름도이다. 도 17b는, 한 실시형태에 따른, GTT 페이지의 세트를 선택하여 동기 동작으로 전이하기 위한 로직을 포함하는 흐름도이다.
일 실시형태에서, 도 17a의 1730에 도시된 바와 같이, 동기 동작으로의 전이를 시작할 때, 1732에서, 중재기는 GTT의 완전한 전이(full transition)를 수행할지의 여부를 결정한다. 전체의 전역적 또는 프로세스마다의 GTT가 동기 모드로 전이해야 하면, 중재기는, 1740에서, 전체 GTT를 동기 모드로 전이할 수 있다. 일 실시형태에서, 완전한 전이는, 1738에서 동기 동작으로의 전이를 완료할 때 관련 쉐도우 GTT의 완전한 재구성을 트리거한다.
일 실시형태에서, 동기 모드로의 전이는 전체보다 더 적은 GTT에 대해 수행될 수 있다. 예를 들면, 비동기 GTT 페이지의 수가 페이지 수 임계치를 초과하기 때문에 동기 동작으로의 전이가 트리거되었다는 것을 중재기가 1734에서 결정하면, 중재기는 1742a에서 전이할 소정의 GTT 페이지를 선택할 수 있다. 대안적으로, 1736에 도시된 바와 같이, 다양한 이유로 인해 중재기 로직에 의해, 자발적 페이지 선택이 수행될 수도 있다. 예를 들면, 일 실시형태에서, 페이지의 연령(age)이 연령 임계치를 초과하는지를 결정하기 위해, 비동기 GTT 페이지의 연령이 모니터링된다. 페이지의 소정의 수가 연령 임계치를 초과하면, 중재기 로직은 1736에서 오래된(older) 페이지의 모두 또는 일부를 선택하여 1742a에서 동기 동작으로 전이할 수도 있다.
1742a에서의 GTT 페이지의 선택은 미리 결정된 정책에 기초하여 또는 실시간으로 수정될 수도 있는 동적 정책에 기초하여 수행될 수도 있다. 1742a에서 각각의 GTT 페이지를 선택하여 전이시키기 위한 예시적인 로직은 도 17b에 포함된다. 1744에서, GTT 페이지의 임의의 하드웨어에 캐싱된 버전은 플러시되고 이들 페이지는 동기 동작으로 전이된다. 그 다음, 중재기는 1738에서 동기 동작으로의 전이를 완료할 수도 있다. 일 실시형태에서, GTT 페이지의 서브세트를 전이하는 것은, 관련 쉐도우 GTT의 부부적인 재구성을 트리거한다.
도 17a의 1742a에서의 GTT 페이지의 선택은, 일 실시형태에서, 도 17b의 1742b에서 시작한다. 각각의 GTT 페이지를 선택하여 전이시키기 위한 로직은 1750에서 페이지 포인터를 초기화하는 것을 포함한다. 페이지 포인터는, 중재기에 의해 유지되는 비동기 GTT 페이지의 NULL 종료 리스트(NULL-terminated list)의 상부(top)로 초기화되는 레지스터 또는 메모리 어드레스일 수도 있다. 초기 NULL 체크는 리스트를 트래버싱(traversing)하기 이전에 1754에서 수행될 수도 있는데, 이 경우, NULL 리스트는, 1764에서, 중재기로 하여금 리스트의 완료를 시그널링하게 한다. 리스트가 NULL이 아니면, 리스트의 각각의 엘리먼트에 대해, 중재기는, 1756에서, 비동기 GTT 페이지의 리스트에서 한 페이지를 선택하고, 1758에서, 그 페이지가 비동기 모드를 탈출할 후보인지를 결정할 수도 있다. 일 실시형태에서, 1758에서의 결정은, 그 페이지에 대한 액세스의 빈도, 또는 페이지가 비동기 모드에 있었던 시간의 길이, 또는 페이지가 최종 수정된 이후 VM 스케줄 싸이클의 수를 결정하기 위한 GTT 페이지에 대한 메타데이터를 결정하는 것에 의해 수행된다. 일 실시형태에서, 페이지가 빈번하게 또는 최근에 액세스되면, 중재기는, 1760에서, 페이지가 탈출 후보가 아니라는 것을 결정할 수도 있다. 그 다음, 중재기는, 1763에서, 리스트에서의 다음 페이지를 선택할 수도 있다. 대안적으로, 1760에서, 페이지가 탈출 후보이면, 중재기는 선택된 페이지를 비동기 모드에서 탈출시키고, 1763에서 리스트에서의 다음 페이지를 선택하기 이전에, 1762에서 그 페이지를 비동기 페이지의 리스트에서 제거할 수도 있다. 일 실시형태에서, 리스트가 완전히 트래버싱되면, 1763에서 선택된 리스트에서의 다음 페이지는 NULL일 것이다. 따라서, 1754에서의 NULL 리스트 결정은, 1764에서, 중재기로 하여금 리스트의 완료를 시그널링하게 할 것이다. 그 다음, 중재기는, 도 17a의 1738에서, 선택된 GTT에 대한 동기 동작으로의 전이를 완료할 수도 있다.
도 18은, 한 실시형태에 따른, 하이브리드 동기화를 예시하는 블록도이다. 일 실시형태에서, 하이브리드 동기화를 사용하는 게스트 VM 중재기는 동기 모드를 사용하여 GTT의 일부를 관리하고 GTT의 다른 부분은 비동기 모드를 사용하여 관리된다. 예시된 바와 같이, 일 실시형태는 다수의 게스트 GTT에 대한 쉐도우 엔트리를 포함하는 공유 쉐도우 GTT(1830)를 사용한다. 공유 쉐도우 GTT(1830)가 도시되지만, 다른 실시형태에서는, 공유 쉐도우 GTT(1830)와 유사한 VM마다의(per-VM) 쉐도우 GTT가 사용된다.
일 실시형태에서, 제1 VM 게스트 GTT(1801)는, HPN(A)(1833)을 포함하는 호스트 페이지 번호의 관련 세트와 연속적으로 동기화되는 GPN(A)(1803)을 포함하는 게스트 페이지 번호의 세트를 포함하고, 그 결과 GPN(A)(1803) 및 HPN(A)(1833)은 시스템 메모리(1820)에서의 동일한 프레임(예를 들면, 페이지 프레임 (A)(1823))을 연속적으로 가리킨다. 일 실시형태에서, 공유 쉐도우 GTT(1830)는, 제2 VM 게스트 GTT(1802)(GPN(B)(1804)을 포함함)에서의 관련 게스트 페이지 번호와 동기화되지 않는(예를 들면, 비동기적인) HPN(B)(1834)을 포함하는 호스트 페이지 번호의 세트를 또한 포함한다. 따라서, 일 실시형태에서, HPN(B)(1834) 및 GPN(B)(1804)은, 게스트 VM(예를 들면, 게스트 VM의 vGPU 렌더링 엔진) 커맨드가 GPU로 제출될 때까지, 시스템 메모리(1820)에서의 동일한 프레임(예를 들면, 페이지 프레임 (B)(1824))을 가리키지 않는다.
도 19는, 한 실시형태에 따른, 하이브리드 동기화를 수행하기 위한 로직의 흐름도이다. 일 실시형태에서, 게스트 VM 중재기는, 1902에서, 게스트의 전역적 또는 프로세스마다의 GTT에 대한 동기 동작을 구성한다. 동기 동작 동안, 중재기는, 1904에 도시된 바와 같이, GTT로의 게스트 기록을 에뮬레이팅한다. 일 실시형태에서, 중재기는 게스트 GTT 기록을 에뮬레이팅하기 위해 트랩 및 에뮬레이트 모델을 사용한다. 1906에서, 게스트 GTT 기록 보호 폴트를 선택적으로 트랩하도록 하이브리드 동기화 로직이 구성되면, 일 실시형태에서, 중재기는, GTT에 대한 게스트 기록에 의한 기록 보호 폴트 원인에 대한 트랩 동안, (동기 모드의 그들 GTT 페이지에 대한) 게스트 GTT 기록을 에뮬레이팅한다. 일 실시형태에서, 중재기는 타입1 VMM에서 호스트 OS에서 실행하고 호스트 그래픽 드라이버와 함께 작동할 수도 있다. GTT의 호스트 OS 기록은 GTT의 게스트(예컨대 타입2 VMM에서의 서비스 VM) 기록으로서 간주되고 중재기는 호스트 그래픽 드라이버의 GTT 기록 폴트를 트래핑하지 않는다. 대신, 1909에서 도시된 바와 같이, GTT의 일 실시형태의 드라이버 액세스는 중재기에 의해 후킹되는데(hooked), 이것은 호스트 OS에 대한 GTT 기록(이하, 게스트 GTT 기록으로 간주됨)을 수행하기 위해 중재기에 대한 그래픽 드라이버 호출을 사용한다. 일 실시형태에서, 트랩 대 훅 구성은, GTT를 가상화하기 위해 사용되는 하이퍼바이저에 기초하는데, 이 경우, 게스트 GTT 기록은 타입1 하이퍼바이저가 사용되고 있을 때 1908에서 트랩되고, 중재기 훅은 타입2 하이퍼바이저가 사용되고 있을 때 1909에서 사용된다.
게스트 GTT 기록이 에뮬레이팅되는 메커니즘에도 불구하고, 중재기가, 1910에서, 게스트 GTT의 일부에 대한 빈번한 게스트 GTT 수정을 검출하면, 중재기는, 1912에서, 게스트 GTT의 일부에 대해, 중재기 에뮬레이션 없이 게스트가 게스트 GTT에 기록하는 것을 허용하는 비동기 동작을 구성할 수 있다. 일 실시형태에서, 1914에서 도시된 바와 같이, 동기화 로직은 레지스터, 캐시 메모리, 또는 기록 보호되지 않은, 또는 그렇지 않으면 쉐도우 GTT와는 비동기적으로 동작하고 있는 게스트 GTT의 일부를 추적하기 위한 시스템 메모리의 데이터 구조를 포함한다. 1916에 도시된 바와 같이, 동기화 로직은, 커맨드를 GPU 하드웨어로 제출하기 이전에 쉐도우 GTT와 비동기적인 게스트 GTT의 추적된 부분에 기초하여 쉐도우 GTT의 관련 부분을 재구성한다.
일 실시형태에서, 게스트 GTT의 적어도 일부는, 하드웨어 커맨드가 제출될 때까지, 쉐도우 GTT 중 자신과 관련된 부분과 동기에서 벗어나도록 허용될 수도 있다. 그러나, GTT는, 커맨드가 하드웨어로 제출되거나 또는 GPU 커맨드의 실행이 실패할 수도 있기 이전에 적절히 동기화되어야만 한다. GPU 하드웨어가 GTT 페이지를 캐싱하도록 구성되는 경우, GPU 하드웨어는, 그래픽 커맨드를 실행하고 있는 동안, 관련 GTT 페이지를 하드웨어에 캐싱할 수도 있다.
일 실시형태에서, 도 15 및 도 16에 도시된 바와 같이, 게스트 GTT의 비동기 부분의 수정된 상태 표시자 비트(예를 들면, 더티 비트)는 게스트 GTT의 비동기 부분의 변화된 엘리먼트를 결정하기 위해 사용된다. 이러한 실시형태에서, 쉐도우 GTT의 일부를 재구성하기 위해, 실질적으로 변경된 그들 게스트 GTT 엘리먼트만이 사용되어, 기존의 쉐도우 GTT가 신규의 쉐도우 GTT의 구성에 대한 기초로서 사용되는 것을 허용한다.
다양한 실시형태는 하드웨어 엘리먼트, 소프트웨어 엘리먼트, 또는 양자의 조합을 사용하여 구현될 수도 있다. 하드웨어 엘리먼트의 예는, 프로세서, 마이크로프로세서, 회로, 회로 엘리먼트(예를 들면, 트랜지스터, 레지스터, 커패시터, 인덕터 등등), 집적 회로, 주문형 반도체(application specific integrated circuit, ASIC), 프로그래밍가능한 로직 디바이스(programmable logic device, PLD), 디지털 신호 프로세서(DSP), 필드 프로그래머블 게이트 어레이(field programmable gate array, FPGA), 로직 게이트, 레지스터, 반도체 디바이스, 칩, 마이크로칩, 칩셋 등등을 포함할 수도 있다. 소프트웨어의 예는, 소프트웨어 컴포넌트, 프로그램, 애플리케이션, 컴퓨터 프로그램, 애플리케이션 프로그램, 시스템 프로그램, 머신 프로그램, 오퍼레이팅 시스템 소프트웨어, 미들웨어, 펌웨어, 소프트웨어 모듈, 루틴, 서브루틴, 기능, 방법, 프로시져, 소프트웨어 인터페이스, 애플리케이션 프로그램 인터페이스(API), 명령어 세트, 컴퓨팅 코드, 컴퓨터 코드, 코드 세그먼트, 컴퓨터 코드 세그먼트, 워드, 값, 심볼, 또는 이들의 임의의 조합을 포함할 수도 있다. 실시형태가 하드웨어 엘리먼트 사용하여 구현되는지 및/또는 소프트웨어 엘리먼트를 사용하여 구현되는지의 여부를 결정하는 것은, 소망의 계산 레이트(computational rate), 전력 레벨, 열 내성, 프로세싱 싸이클 버짓(budget), 입력 데이터 레이트, 출력 데이터 레이트, 메모리 리소스, 데이터 버스 속도 및 다른 디자인 또는 성능 제한과 같은 임의의 다수의 요인에 따라 변할 수도 있다.
적어도 하나의 실시형태의 하나 이상의 양태는, 머신에 의한 판독시 머신으로 하여금 본원에서 설명되는 기술을 수행하기 위한 로직을 만들게 하는, 프로세서 내의 다양한 로직을 나타내는 머신 판독가능 매체 상에 저장되는 대표적인 명령어에 의해 구현될 수도 있다. "IP 코어"로 알려진 이러한 표현은 유형의(tangible) 머신 판독가능한 매체 상에 저장될 수도 있고 로직 또는 프로세서를 실제 만드는 제조 머신 안으로 로딩되도록 다양한 고객 또는 제조 설비에 공급될 수도 있다.
실시형태는 모든 타입의 반도체 집적 회로(integrated circuit, "IC") 칩과의 사용에 적용가능하다. 이들 IC 칩의 예는, 프로세서, 컨트롤러, 칩셋 컴포넌트, 프로그래밍가능한 로직 어레이(programmable logic array, PLA), 메모리 칩, 네트워크 칩 등등을 포함하지만 이들에 한정되는 것은 아니다. 또한, 도면 중 몇몇에서, 신호 도체 라인은 라인으로 표현된다. 몇몇은, 더 많은 구성 신호 경로를 나타내기 위해, 상이할 수도 있고, 다수의 상이한 신호 경로를 나타내기 위해, 번호 라벨을 가질 수도 있고, 및/또는 주요 정보 흐름 방향을 나타내기 위해, 하나 이상의 끝을 갖는 화살표를 가질 수도 있다. 그러나, 이것은 제한적인 방식으로 간주되어선 안된다. 대신, 이러한 추가된 상세는, 회로의 더 쉬운 이해를 용이하게 하기 위해 하나 이상의 예시적인 실시형태와 연계하여 사용될 수도 있다. 임의의 표현되는 신호 라인은, 추가적인 정보를 갖든 또는 그렇지 않든 간에, 다수의 방향으로 이동할 수 있으며 임의의 적절한 타입의 신호 방식, 예를 들면, 차동 쌍, 광섬유 라인, 및/또는 단일 종단 라인(single-ended line)으로 구현되는 디지털 또는 아날로그 라인과 함께 구현될 수도 있는 하나 이상의 신호를 실제 포함할 수도 있다.
예시적인 사이즈/모델/값/범위가 주어졌지만, 실시형태는 동일한 것에 한정되는 것은 아니다. 제조 기술(예를 들면, 리소그래피)이 시간에 걸쳐 발달함에 따라, 더 소형의 사이즈의 디바이스가 제조될 수도 있다는 것이 예상된다. 또한, 예시 및 논의의 간략화를 위해, 그리고 실시형태의 소정의 양태를 모호하게 하지 않기 위해, IC 칩 및 다른 컴포넌트에 대한 널리 공지된 전력/접지 연결은 도면 내에서 도시될 수도 있고 도시되지 않을 수도 있다. 또한, 실시형태를 모호하게 하는 것을 방지하기 위해, 그리고 또한, 이러한 블록도 배치예의 구현예에 관한 상세가, 실시형태가 구현되어야 하는 플랫폼에 크게 의존할 수도 있다는 사실, 즉 이러한 상세가 기술분야의 숙련된 자의 이해 내에 완전히 있어야 한다는 사실의 관점에서, 블록도 형태로 배치예가 도시될 수도 있다. 예시적인 실시형태를 설명하기 위해 특정 상세(예를 들면, 회로)가 개시되는 경우, 실시형태는, 이들 특정 상세 없이, 또는 이들 특정 상세의 변형과 함께 실시될 수 있다는 것이 기술분야의 숙련된 자에게 명백해야 한다. 따라서, 설명은 제한적인 것이 아니라 예시적인 것으로 간주되어야 한다. 또한, 일 실시형태와 관련하여 설명되는 양태는 본원에서 설명되는 다른 실시형태와 조합될 수도 있다.
몇몇 실시형태는, 예를 들면, 머신에 의한 실행시, 머신으로 하여금 실시형태에 따른 방법 및/또는 동작을 수행하게 할 수도 있는 명령어 또는 명령어의 세트를 저장할 수도 있는 유형의 컴퓨터 판독가능 매체 또는 물품 또는 머신을 사용하여 구현될 수도 있다. 이러한 머신은, 예를 들면, 임의의 적절한 프로세싱 플랫폼, 컴퓨팅 플랫폼, 컴퓨팅 디바이스, 프로세싱 디바이스, 컴퓨팅 시스템, 프로세싱 시스템, 컴퓨터, 프로세서 등등을 포함할 수도 있고, 하드웨어 및/또는 소프트웨어의 임의의 적절한 조합을 사용하여 구현될 수도 있다.
그렇지 않다고 명시적으로 언급되지 않는 한, "프로세싱", "컴퓨팅", "계산하는", "결정하는" 등등과 같은 용어는, 컴퓨팅 시스템의 레지스터 및/또는 메모리 내의 물리량으로 표현되는 데이터(예를 들면, 전자적)를, 컴퓨팅 시스템의 메모리, 레지스터 또는 다른 이러한 정보 스토리지, 전송 또는 디스플레이 디바이스 내에서의 물리량으로 유사하게 표현되는 다른 데이터로 조작하고 및/또는 변환하는, 컴퓨터 또는 컴퓨팅 시스템, 또는 유사한 전자 컴퓨팅 디바이스의 액션 및/또는 프로세스를 가리키는 것이 이해될 수도 있다. 실시형태는 이러한 컨텍스트에 제한되지 않는다.
용어 "커플링되는"은 본원에서, 직접적인 또는 간접적인, 문제가 되고 있는 컴포넌트 사이의 임의의 타입의 관계를 가리키기 위해 사용될 수도 있고, 전기적, 기계적, 유체적, 광학적, 전자기적, 전자기계적 또는 다른 연결에 적용될 수도 있다. 또한, 용어 "제1", "제2" 등등은 본원에서 논의를 용이하게 위해서만 사용될 수도 있으며, 그렇지 않다고 나타내어지지 않는 한, 어떠한 특정한 시간적 또는 연대기적 유의성을 전달하지 않는다.
본 명세서에서 그리고 청구범위에서 사용되는 바와 같이, 용어 "하나 이상의"와 결합되는 용어의 열거는 열거되는 용어의 임의의 조합을 의미할 수도 있다. 예를 들면, 구 "하나 이상의 A, B 또는 C"는 A, B, C, A와 B, A와 C, B와 C, 또는 A, B 및 C를 의미할 수도 있다.
다수의 타입의 하이퍼바이저는, '호스팅되는'(예를 들면, 타입2) 또는 '베어 메탈'(예를 들면, 타입1) 하이퍼바이저를 포함하여 설명된다는 것이 이해될 것이다. 설명되는 기술은 하이퍼바이저의 임의의 특정한 타입, 형태, 또는 모델로 한정되지 않으며 타입1, 타입2, 또는 임의의 형태의 하이브리드 하이퍼바이저를 통해 인에이블되는 가상 GPU에 적용될 수 있다.
실시형태에서, 가상 머신을 관리하기 위한 시스템, 방법 및 장치가 본원에서 설명된다. 일 실시형태에서, 장치는 가상 그래픽 프로세서를 제1 가상 머신에 제공하기 위해 가상 머신 모니터(VMM)에 커플링되는 그래픽 프로세서 및 제1 가상 머신의 게스트 그래픽 변환 테이블(GTT)에 대한 수정을 VMM의 쉐도우 GTT에 동기적으로 쉐도잉하기 위한 가상 그래픽 프로세서에 대한 중재기를 포함한다. 중재기는 제1 게스트 GTT에 대한 수정의 빈도가 임계치를 초과하는지를 검출하고, 검출에 응답하여, 제1 게스트 GTT의 적어도 일부를 쉐도우 GTT에 비동기적으로 쉐도잉하도록 또한 구성될 수도 있다. 중재기가, 일 실시형태에서, 임계치를 초과하는 수정의 빈도를 검출하도록 구성될 수도 있지만, 중재기는 임계치를 초과하는 다수의 인접한 수정, 또는 GTT의 동일한 영역에 대한 다수의 반복된 수정을 검출하도록 또한 구성될 수도 있다.
적어도 하나의 실시형태의 하나 이상의 양태는, 머신에 의한 판독시 머신으로 하여금 본원에서 설명되는 기술을 수행하기 위한 로직을 만들게 하는, 프로세서 내의 다양한 로직을 나타내는 머신 판독가능 매체 상에 저장되는 대표적인 데이터에 의해 구현될 수도 있다. "IP 코어"로 알려진 이러한 표현은 유형의 머신 판독가능한 매체("테이프") 상에 저장될 수도 있고 로직 또는 프로세서를 실제 만드는 제조 머신 안으로 로딩되도록 다양한 고객 또는 제조 설비에 공급될 수도 있다. 예를 들면, ARM Holdings, Ltd.에 의해 개발되는 그래픽 솔루션의 Mali™군(family) 및 중국 과학원(Chinese Academy of Sciences)의 계산기술연구소(Institute of Computing Technology, ICT)에 의해 개발되는 Loongson IP 코어와 같은 IP 코어는, 텍사스 인스트루먼츠(Texas Instruments), 퀄컴(Qualcomm), 애플(Apple), 또는 삼성(Samsung)과 같은 다양한 고객 또는 라이센스를 취득한 자(licensee)에게 라이센스가 부여되거나 판매될 수도 있고 이들 고객 또는 라이센스를 취득한 자에 의해 제조되는 프로세서로 구현될 수도 있다.
이러한 IP 코어의 개발은, 본원에서 설명되는 특정 실시형태의 GPU 하드웨어를 모델링하기 위해 사용될 수도 있는 시뮬레이션 소프트웨어 또는 하드웨어의 사용을 포함한다. IP 코어 설계를 나타내는 데이터는 제조 설비로 제공될 수도 있는데, 제조 설비에서는 IP 코어는 설명된 실시형태와 관련되는 기능성에 대한 써드파티에 의해 제조될 수 있다.
기술분야의 숙련된 자는 상기 설명으로부터, 실시형태의 광의의 기술이 다양한 형태로 구현될 수 있다는 것을 알 수 있을 것이다. 따라서, 실시형태가 그 특정한 예와 연계하여 설명되었지만, 도면, 상세한 설명, 및 하기의 청구범위의 검토시 다른 수정예가 당업자에게 명백할 것이기 때문에, 실시형태의 진정한 범위는 그렇게 한정되지 않아야 한다.
Claims (25)
- 가상 머신을 관리하기 위한 장치로서,
가상 머신 모니터(virtual machine monitor, VMM)에 커플링되어 가상 그래픽 프로세서를 제1 가상 머신에 제공하는 그래픽 프로세서와,
상기 제1 가상 머신의 제1 그래픽 변환 테이블(graphics translation table, GTT)에 대한 수정을 상기 VMM의 쉐도우 GTT에 동기적으로 쉐도잉(synchronously shadow)하기 위한, 상기 가상 그래픽 프로세서에 대한 중재기를 포함하고,
상기 중재기는 또한, 상기 제1 GTT에 대한 수정의 빈도가 임계치를 초과하는지를 검출하고, 상기 검출에 응답하여, 상기 제1 GTT의 적어도 일부를 상기 쉐도우 GTT에 비동기적으로 쉐도잉하는
가상 머신을 관리하기 위한 장치.
- 제 1 항에 있어서,
상기 중재기는 또한, 상기 제1 가상 머신으로부터의 상기 가상 그래픽 프로세서에 대한 커맨드가 상기 그래픽 프로세서로 제출되기 이전에 상기 제1 GTT의 적어도 상기 일부를 비동기적으로 쉐도잉하는
가상 머신을 관리하기 위한 장치.
- 제 1 항에 있어서,
상기 제1 GTT는 상기 가상 그래픽 프로세서에 대한 제1 그래픽 메모리 어드레스를 시스템 메모리 어드레스로 변환하는
가상 머신을 관리하기 위한 장치.
- 제 1 항에 있어서,
상기 VMM의 상기 쉐도우 GTT는 호스트 그래픽 메모리 어드레스를 시스템 메모리 어드레스로 변환하는
가상 머신을 관리하기 위한 장치.
- 제 1 항에 있어서,
상기 제1 가상 머신은 기본적인(native) 그래픽 드라이버 소프트웨어를 사용하여 상기 가상 그래픽 프로세서를 관리하는
가상 머신을 관리하기 위한 장치.
- 제 1 항에 있어서,
상기 중재기는 상기 가상 그래픽 프로세서에 대한 디바이스 모델을 포함하는
가상 머신을 관리하기 위한 장치.
- 제 1 항에 있어서,
상기 제1 GTT는 전역적인(global) GTT 및 프로세스마다의(per process) GTT를 포함하는
가상 머신을 관리하기 위한 장치.
- 제 7 항에 있어서,
상기 프로세스마다의 GTT는 페이지 디렉토리 테이블 및 페이지 테이블을 포함하는
가상 머신을 관리하기 위한 장치.
- 제 1 항 내지 제 8 항 중 어느 한 항에 있어서,
상기 VMM은 또한, 제2 가상 그래픽 프로세서를 제2 가상 머신으로 제공하는
가상 머신을 관리하기 위한 장치.
- 제 9 항에 있어서,
상기 중재기는 또한, 제2 가상 머신의 제2 그래픽 변환 테이블(GTT)에 대한 수정을 상기 VMM의 상기 쉐도우 GTT에 동기적으로 쉐도잉하는
가상 머신을 관리하기 위한 장치.
- 제 10 항에 있어서,
상기 중재기는 또한, 상기 제2 GTT에 대한 수정의 상기 빈도가 임계치를 초과하는지를 검출하고, 상기 검출에 응답하여, 상기 제2 가상 머신으로부터의 상기 가상 그래픽 프로세서에 대한 커맨드가 상기 그래픽 프로세서로 제출되기 이전에 상기 제2 GTT를 상기 쉐도우 GTT에 비동기적으로 쉐도잉하는
가상 머신을 관리하기 위한 장치.
- 가상 머신을 관리하는 방법으로서,
제1 가상 머신의 제1 그래픽 변환 테이블(GTT)을 가상 머신 모니터(VMM)의 쉐도우 GTT에 동기적으로 쉐도잉하는 단계와,
상기 제1 GTT의 인접한 GTT 엔트리의 적어도 제1 부분에 대한 수정의 횟수가 임계치를 초과했다고 검출하는 단계와,
상기 제1 GTT의 적어도 상기 제1 부분에 대한 비동기 동작을 구성하는 단계를 포함하고,
상기 구성하는 단계는 상기 제1 가상 머신으로부터 그래픽 커맨드를 제출하기 이전에 상기 제1 GTT의 상기 제1 부분과 관련되는 상기 쉐도우 GTT의 적어도 일부를 재구성하는 단계를 포함하는
가상 머신을 관리하는 방법.
- 제 12 항에 있어서,
상기 제1 GTT를 상기 쉐도우 GTT에 동기적으로 쉐도잉하는 단계는, 상기 제1 가상 머신에 의한 상기 제1 GTT에 대한 각각의 기록을 트래핑(trapping)하고 에뮬레이팅(emulating)하는 단계를 포함하는
가상 머신을 관리하는 방법.
- 제 13 항에 있어서,
상기 제1 GTT에 대한 각각의 기록을 트래핑하고 에뮬레이팅하는 단계는, 상기 제1 GTT를 수정하려는 시도에 응답하여 기록 보호 트랩(write protect trap)을 수신하는 단계, 상기 제1 GTT를 수정하는 단계 및 상기 쉐도우 GTT에 대한 상기 수정을 쉐도잉하는 단계를 포함하는
가상 머신을 관리하는 방법.
- 제 12 항 내지 제 14 항 중 어느 한 항에 있어서,
상기 제1 GTT의 적어도 상기 제1 부분에 대한 비동기 동작을 구성하는 단계는, 상기 제1 GTT의 적어도 상기 제1 부분으로부터 기록 보호를 제거하는 단계를 포함하는
가상 머신을 관리하는 방법.
- 가상 머신을 관리하기 위한 시스템으로서,
코프로세서 디바이스에 커플링되는 하나 이상의 프로세서와,
가상 코프로세서를 가상 머신에 제공하기 위한 가상 머신 모니터(VMM)와,
상기 하나 이상의 프로세서로 하여금,
상기 가상 머신의 메모리 변환 테이블 - 상기 메모리 변환 테이블은 상기 가상 머신에 의한 수정으로부터 보호되고 상기 메모리 변환 테이블의 수정은 상기 메모리 변환 테이블에 대한 수정의 에뮬레이션을 포함함 - 에 대한 수정의 빈도가 임계치를 초과했음을 검출하게 하고,
에뮬레이션 없이 상기 메모리 변환 테이블의 수정을 허용하기 위해 상기 메모리 변환 테이블의 적어도 일부로부터 상기 보호를 제거하게 하고,
상기 가상 코프로세서에 대한 커맨드가 상기 코프로세서 디바이스로 제출되기 이전에 수정된 상기 메모리 변환 테이블에 기초하여 쉐도우 변환 테이블을 구성하게 하는
중재기 모듈을 포함하는
가상 머신을 관리하기 위한 시스템.
- 제 16 항에 있어서,
상기 중재기 모듈은 상기 하나 이상의 프로세서로 하여금:
상기 가상 코프로세서가 커맨드를 상기 코프로세서 디바이스로 제출하도록 스케줄링되는지를 결정하게 하고,
상기 쉐도우 변환 테이블의 구성 이후에 상기 가상 코프로세서에 대한 커맨드를 제출하게 하는
가상 머신을 관리하기 위한 시스템.
- 제 17 항에 있어서,
상기 변환 테이블은 그래픽 변환 테이블(GTT)이고 상기 가상 코프로세서는 가상 그래픽 프로세서인
가상 머신을 관리하기 위한 시스템. - 제 18 항에 있어서,
상기 GTT는 상기 가상 그래픽 프로세서에 대한 게스트 GTT인
가상 머신을 관리하기 위한 시스템.
- 제 19 항에 있어서,
상기 중재기 모듈은 또한 상기 하나 이상의 프로세서로 하여금, 상기 게스트 GTT의 보호된 부분에 대한 제1 수정을 동기적으로 에뮬레이팅하게 하고, 상기 쉐도우 변환 테이블에 대한 상기 제1 수정을 동기적으로 미러링하게 하고, 상기 쉐도우 변환 테이블의 상기 구성 동안 상기 게스트 GTT의 보호되지 않은 부분에 대한 제2 수정을 상기 쉐도우 변환 테이블에 비동기적으로 미러링하게 하는
가상 머신을 관리하기 위한 시스템.
- 제 19 항에 있어서,
상기 중재기 모듈은 또한 상기 하나 이상의 프로세서로 하여금, 상기 쉐도우 변환 테이블의 완전한 재구성 동안 상기 쉐도우 변환 테이블에 대한 상기 제2 수정을 미러링하게 하는
가상 머신을 관리하기 위한 시스템. - 제 19 항에 있어서,
상기 중재기 모듈은 또한 상기 하나 이상의 프로세서로 하여금, 상기 쉐도우 변환 테이블의 부분적인 재구성 동안 상기 쉐도우 변환 테이블에 대한 상기 제2 수정을 미러링하게 하는
가상 머신을 관리하기 위한 시스템.
- 제 19 항에 있어서,
상기 중재기 모듈은 또한,
재구성을 위한 쉐도우 변환 테이블을 선택하고,
기존의 쉐도우 변환 테이블 페이지를 재사용하는
추가 동작을 수행하는 것에 의해 상기 하나 이상의 프로세서로 하여금 상기 쉐도우 변환 테이블을 부분적으로 재구성하게 하는
가상 머신을 관리하기 위한 시스템.
- 제 23 항에 있어서,
상기 중재기 모듈은 또한,
상기 선택된 쉐도우 변환 테이블 페이지와 관련되는 GTT 페이지의 상태 표시자에 기초하여 재구성을 위한 쉐도우 변환 테이블의 하위 선택을 생성하는 추가 동작을 수행하는 것에 의해 상기 하나 이상의 프로세서로 하여금 상기 쉐도우 변환 테이블을 부분적으로 재구성하게 하는
가상 머신을 관리하기 위한 시스템.
- 제 24 항에 있어서,
상기 중재기 모듈은 또한 상기 하나 이상의 프로세서로 하여금 상기 GTT 페이지의 상기 상태 표시자를 소거하게(clear) 하는
가상 머신을 관리하기 위한 시스템.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2014/094804 WO2016101172A1 (en) | 2014-12-24 | 2014-12-24 | Hybrid on-demand graphics translation table shadowing |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160089863A true KR20160089863A (ko) | 2016-07-28 |
KR101751629B1 KR101751629B1 (ko) | 2017-06-27 |
Family
ID=55130149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020157033348A KR101751629B1 (ko) | 2014-12-24 | 2014-12-24 | 하이브리드 온디맨드 그래픽 변환 테이블 쉐도잉 |
Country Status (7)
Country | Link |
---|---|
US (1) | US9619860B2 (ko) |
KR (1) | KR101751629B1 (ko) |
CN (1) | CN105518746B (ko) |
DE (1) | DE112014002771T5 (ko) |
GB (1) | GB2535823B (ko) |
TW (1) | TWI570564B (ko) |
WO (1) | WO2016101172A1 (ko) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10481937B2 (en) * | 2015-03-23 | 2019-11-19 | Intel Corporation | Shadow command ring for graphics processor virtualization |
CN109690505B (zh) * | 2016-09-26 | 2023-08-08 | 英特尔公司 | 用于针对虚拟化输入/输出实施方式的混合层地址映射的设备和方法 |
US10504259B2 (en) * | 2017-04-24 | 2019-12-10 | Intel Corporation | Separately processing regions or objects or interest from a render engine to a display engine or a display panel |
US10565671B2 (en) * | 2017-04-24 | 2020-02-18 | Intel Corporation | Reduce power by frame skipping |
CN107436797A (zh) * | 2017-08-14 | 2017-12-05 | 深信服科技股份有限公司 | 一种基于虚拟化环境的指令数据处理方法及装置 |
EP3688583A1 (en) | 2017-09-26 | 2020-08-05 | INTEL Corporation | Methods and apparatus to process commands from virtual machines |
CN108170519B (zh) * | 2018-01-25 | 2020-12-25 | 上海交通大学 | 优化可扩展gpu虚拟化的系统、装置和方法 |
US11900157B2 (en) * | 2018-09-19 | 2024-02-13 | Intel Corporation | Hybrid virtual GPU co-scheduling |
US11068175B2 (en) * | 2018-12-21 | 2021-07-20 | Intel Corporation | Technology to manage capacity loss in storage drives |
US11113091B2 (en) | 2019-03-12 | 2021-09-07 | Arm Limited | Apparatus for forwarding a mediated request to processing circuitry in response to a configuration request |
US11211542B2 (en) | 2019-11-19 | 2021-12-28 | International Business Machines Corporation | Cryogenic refrigeration for low temperature devices |
US11302857B2 (en) | 2019-11-19 | 2022-04-12 | International Business Machines Corporation | Cryogenic refrigeration for low temperature devices |
CN111462295B (zh) * | 2020-03-27 | 2023-09-05 | 咪咕文化科技有限公司 | 增强现实合拍中的阴影处理方法、设备及存储介质 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6362826B1 (en) * | 1999-01-15 | 2002-03-26 | Intel Corporation | Method and apparatus for implementing dynamic display memory |
US7370324B2 (en) | 2003-09-30 | 2008-05-06 | Intel Corporation | Switching between a service virtual machine and a guest virtual machine in a virtual machine monitor environment |
US7451443B2 (en) * | 2003-10-01 | 2008-11-11 | Hewlett-Packard Development Company, L.P. | Online computer maintenance utilizing a virtual machine monitor |
US7421689B2 (en) | 2003-10-28 | 2008-09-02 | Hewlett-Packard Development Company, L.P. | Processor-architecture for facilitating a virtual machine monitor |
US9058292B2 (en) * | 2004-12-29 | 2015-06-16 | Intel Corporation | System and method for one step address translation of graphics addresses in virtualization |
US7395405B2 (en) | 2005-01-28 | 2008-07-01 | Intel Corporation | Method and apparatus for supporting address translation in a virtual machine environment |
US7363463B2 (en) * | 2005-05-13 | 2008-04-22 | Microsoft Corporation | Method and system for caching address translations from multiple address spaces in virtual machines |
US7650603B2 (en) * | 2005-07-08 | 2010-01-19 | Microsoft Corporation | Resource management for virtualization of graphics adapters |
JP4978008B2 (ja) | 2006-01-11 | 2012-07-18 | 株式会社日立製作所 | 仮想計算機上でのページテーブルアドレスの変更を高速化する方法 |
CN100466929C (zh) | 2006-02-24 | 2009-03-11 | 中芯国际集成电路制造(上海)有限公司 | 具有可移除钢脚趾罩的净室安全鞋物件和处理该鞋的方法 |
US7544594B2 (en) | 2006-06-28 | 2009-06-09 | Intel Corporation | Method of forming a transistor having gate protection and transistor formed according to the method |
US7868897B2 (en) * | 2006-06-30 | 2011-01-11 | Intel Corporation | Apparatus and method for memory address re-mapping of graphics data |
US8065687B2 (en) * | 2007-01-05 | 2011-11-22 | Moka5, Inc. | Bypass virtualization |
TWI342521B (en) | 2007-07-13 | 2011-05-21 | King Yuan Electronics Co Ltd | System and method for managing virtual machines |
US8516481B2 (en) | 2008-04-04 | 2013-08-20 | Hewlett-Packard Development Company, L.P. | Virtual machine manager system and methods |
US8359422B2 (en) * | 2009-06-26 | 2013-01-22 | Vmware, Inc. | System and method to reduce trace faults in software MMU virtualization |
US20110102443A1 (en) * | 2009-11-04 | 2011-05-05 | Microsoft Corporation | Virtualized GPU in a Virtual Machine Environment |
US8635615B2 (en) | 2011-05-14 | 2014-01-21 | Industrial Technology Research Institute | Apparatus and method for managing hypercalls in a hypervisor and the hypervisor thereof |
US9672583B2 (en) * | 2011-12-21 | 2017-06-06 | Intel Corporation | GPU accelerated address translation for graphics virtualization |
WO2013119211A1 (en) * | 2012-02-07 | 2013-08-15 | Intel Corporation | A method and apparatus for supporting address translation in a multiprocessor virtual machine environment using tracking data to eliminate interprocessor interrupts |
US9146762B2 (en) * | 2012-08-23 | 2015-09-29 | Citrix Systems, Inc. | Specialized virtual machine to virtualize hardware resource for guest virtual machines |
US8989183B2 (en) * | 2012-10-10 | 2015-03-24 | Microsoft Technology Licensing, Llc | Virtual machine multicast/broadcast in virtual network |
US9363187B2 (en) * | 2012-11-28 | 2016-06-07 | Nvidia Corporation | Jitter buffering system and method of jitter buffering |
TWI588751B (zh) | 2013-05-31 | 2017-06-21 | 聯想企業解決方案(新加坡)有限公司 | 透過基板管理控制器管理虛擬機器的電腦主機與方法 |
-
2014
- 2014-12-24 GB GB1518811.3A patent/GB2535823B/en active Active
- 2014-12-24 WO PCT/CN2014/094804 patent/WO2016101172A1/en active Application Filing
- 2014-12-24 US US14/777,738 patent/US9619860B2/en active Active
- 2014-12-24 CN CN201480030019.9A patent/CN105518746B/zh not_active Expired - Fee Related
- 2014-12-24 DE DE112014002771.5T patent/DE112014002771T5/de not_active Ceased
- 2014-12-24 KR KR1020157033348A patent/KR101751629B1/ko active IP Right Grant
-
2015
- 2015-11-23 TW TW104138744A patent/TWI570564B/zh active
Also Published As
Publication number | Publication date |
---|---|
CN105518746B (zh) | 2018-12-04 |
TWI570564B (zh) | 2017-02-11 |
GB2535823B (en) | 2021-08-04 |
CN105518746A (zh) | 2016-04-20 |
KR101751629B1 (ko) | 2017-06-27 |
US20160292816A1 (en) | 2016-10-06 |
WO2016101172A1 (en) | 2016-06-30 |
TW201636854A (zh) | 2016-10-16 |
US9619860B2 (en) | 2017-04-11 |
DE112014002771T5 (de) | 2016-10-13 |
GB2535823A (en) | 2016-08-31 |
GB201518811D0 (en) | 2015-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11847719B2 (en) | Apparatus and method for managing data bias in a graphics processing architecture | |
KR101751629B1 (ko) | 하이브리드 온디맨드 그래픽 변환 테이블 쉐도잉 | |
US10304421B2 (en) | Apparatus and method for remote display and content protection in a virtualized graphics processing environment | |
US20200005427A1 (en) | Apparatus and method for dynamic provisioning, quality of service, and prioritization in a graphics processor | |
US10983821B2 (en) | Apparatus and method for a hybrid layer of address mapping for a virtualized input/output (I/O) implementation | |
US10853118B2 (en) | Apparatus and method for pattern-driven page table shadowing for graphics virtualization | |
US10482567B2 (en) | Apparatus and method for intelligent resource provisioning for shadow structures | |
US10891237B2 (en) | Apparatus and method for mediate pass through and shared memory page merge | |
US9996892B2 (en) | Apparatus and method for efficient graphics processing in a virtual execution environment | |
US11650928B2 (en) | Cache optimization for graphics systems | |
TWI719985B (zh) | 用以增進圖形處理單元(gpu)虛擬化的可擴充性之設備、方法及系統 | |
US11281500B2 (en) | Apparatus and method for cloud-based graphics validation | |
US20220188965A1 (en) | Apparatus and method for scheduling graphics processing resources | |
US10565354B2 (en) | Apparatus and method for protecting content in virtualized and graphics environments | |
US20180033116A1 (en) | Apparatus and method for software-agnostic multi-gpu processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |