KR20160038071A - 그래픽 프로세싱을 위한 임의적 제어 지점들에서의 결함-허용 선점 메커니즘 - Google Patents
그래픽 프로세싱을 위한 임의적 제어 지점들에서의 결함-허용 선점 메커니즘 Download PDFInfo
- Publication number
- KR20160038071A KR20160038071A KR1020167007543A KR20167007543A KR20160038071A KR 20160038071 A KR20160038071 A KR 20160038071A KR 1020167007543 A KR1020167007543 A KR 1020167007543A KR 20167007543 A KR20167007543 A KR 20167007543A KR 20160038071 A KR20160038071 A KR 20160038071A
- Authority
- KR
- South Korea
- Prior art keywords
- buffer
- commands
- command buffer
- execution
- command
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/36—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
- G09G5/39—Control of the bit-mapped memory
- G09G5/399—Control of the bit-mapped memory using two or more bit-mapped memories, the operations of which are switched in time, e.g. ping-pong buffers
-
- 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/46—Multiprogramming arrangements
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/483—Multiproc
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Image Generation (AREA)
- Controls And Circuits For Display Device (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Image Processing (AREA)
Abstract
본 개시물은 그래픽 프로세싱에서 임의적 제어 지점들에서의 선점에 대한 기법들 및 구조들을 제시한다. 그래픽 프로세싱의 방법은, 커맨드 버퍼에 있는 커맨드들을 실행하는 단계 (커맨드들은 판독-수정-기록 메모리 리소스에 있는 데이터에 대해 동작한다), 제 1 버퍼가 판독-수정-기록 메모리 리소스의 원래의 데이터를 저장하고 제 2 버퍼가 커맨드 버퍼에 있는 커맨드들을 실행함으로써 생성된 임의의 수정된 데이터를 저장하도록, 판독-수정-기록 메모리 리소스에서 데이터를 이중 버퍼링하는 단계, 커맨드 버퍼에 있는 모든 커맨드들을 완료하기 전에 커맨드 버퍼에 있는 커맨드들의 실행을 선점하기 위한 요청을 수신하는 단계, 및 제 1 버퍼에 있는 원래의 데이터를 이용하여 커맨드 버퍼의 시작부터 커맨드들의 실행을 재시작하는 단계를 포함할 수도 있다.
Description
본 개시물은 그래픽 프로세싱에 대한 기법들에 관한 것으로, 좀더 구체적으로 그래픽 프로세싱에서 임의적 제어 지점들에서의 선점에 대한 기법들에 관한 것이다.
디스플레이를 위한 시각적 컨텐트, 예컨대 그래픽 사용자 인터페이스들 및 비디오 게임들을 위한 컨텐트는 그래픽 프로세싱 유닛 (graphics processing unit; GPU) 에 의해 발생될 수도 있다. GPU 는 2-차원 또는 3-차원 (3D) 오브젝트들을 디스플레이될 수도 있는 2-차원 (2D) 픽셀 표현으로 컨버팅할 수도 있다. 3D 오브젝트들을 디스플레될 수 있는 비트 맵으로 컨버팅하는 것에 관한 정보는 픽셀 렌더링이라고 알려져 있고, 상당한 메모리 및 프로세싱 전력을 요구한다. 과거에, 3D 그래픽 능력들은 오직 강력한 워크스테이션들에서만 이용가능했다. 그러나, 현재는 3D 그래픽 가속기들이 개인용 컴퓨터 (personal computer; PC) 들에서, 뿐만 아니라 스마트 폰들, 태블릿 컴퓨터들, 휴대용 미디어 재생기들, 휴대용 비디오 게이밍 콘솔들과 같은 모바일 디바이스들에서도 흔히 발견된다. 통상적으로, 모바일 디바이스는 종래의 PC 들과 비교하여 보다 적은 계산 파워 및 메모리 용량을 갖는다. 그에 따라, 3D 그래픽 렌더링 기법들에서의 증가된 복잡도는 모바일 디바이스 상에서 그러한 기법들을 구현할 시에 어려움들을 야기한다.
많은 시스템들에서, GPU 에서 커맨드들의 실행을 선점하기 위한 기법들은 GPU 프로세싱을 요구하는 보다 높은 우선순위 태스크들이 실행될 수도 있도록 하기 위해 사용된다. 그러한 선점 기법들은 일반적으로 하나의 커맨드 스트림을 통한 GPU 의 진행이 추적되는 프로세스들을 포함한다. 이러한 방식으로, GPU 는 보다 높은 우선순위 태스크로 전환하고, 그 다음에 GPU 가 중단된 지점에서 원래의 태스크로 돌아올 수도 있다.
일반적으로, 본 개시물은 그래픽 프로세싱 시스템에서 임의의 제어 지점들에서의 선점에 대한 기법들을 설명한다. 특히, 본 개시물의 기법들은 GPU 에서 현재 실행하고 있는 커맨드 버퍼가 임의의 지점에서 선점되고, GPU 가 보다 높은 우선순위 태스크로 빠르게 전환하는 것을 할 수 있게 한다. 보다 높은 우선순위 태스크가 완료된 후에, GPU 는 원래의 커맨드 버퍼로 돌아가, 처음부터 시작한다. 그러한 재시작을 가능하게 하기 위해, 본 개시물의 기법들은 커맨드 버퍼에서 커맨드들에 의해 이용되는 임의의 판독-수정-기록 메모리 리소스들을 이중-버퍼링하는 것을 제안하여, 판독-수정-기록 리소스의 원래의 상태가 재저장될 수도 있도록 한다.
본 개시물의 일 예에서, 그래픽 프로세싱의 방법은 그래픽 프로세싱 유닛에 대해 커맨드 버퍼에서 커맨드들을 실행하는 단계 (커맨드는 판독-수정-기록 메모리 리소스에서의 데이터에 대해 동작한다), 제 1 버퍼에, 판독-수정-기록 메모리 리소스의 원래의 데이터를 저장하는 단계, 제 2 버퍼에, 커맨드 버퍼에 커맨드들을 실행함으로써 생성된 임의의 수정된 데이터를 저장하는 단계, 커맨드 버퍼에 있는 모든 커맨드들을 완료하기 전에 커맨드 버퍼에 있는 커맨드들의 실행을 선점하는 단계, 및 실행을 선점한 후에, 제 1 버퍼에 있는 원래의 데이터를 이용하여 커맨드 버퍼의 시작에서 커맨드들의 실행을 재시작하는 단계를 포함한다.
본 개시물의 기법들은 장치, 그래픽 프로세싱 유닛, 및 프로세서로 하여금 기법들을 수행하게 하는 명령들을 저장하는 컴퓨터-판독가능 저장 매체의 면에서 또한 설명된다. 하나 이상의 실시형태들의 세부사항들은 첨부된 도면과 하기의 설명으로부터 설명된다. 다른 피처들, 목적들, 및 이점들은 하기의 설명과 도면들 및 하기의 청구범위로부터 명확해질 것이다.
도 1 은 본 개시물의 기법들을 이용하도록 구성된 일 예시적인 컴퓨팅 디바이스를 보여주는 블록도이다.
도 2 는 일 예시적인 그래픽 렌더링 시스템을 보여주는 블록도이다.
도 3 은 GPU 를 이용하는 일 예시적인 범용 컴퓨팅 시스템을 보여주는 블록도이다.
도 4 는 선점 요청을 보여주는 개념도이다.
도 5 는 본 개시물의 하나 이상의 예들에 따른 개념 요청 처리를 보여주는 개념도이다.
도 6 은 본 개시물의 기법들에 따른 일 예시적인 방법을 보여주는 플로차트이다.
도 2 는 일 예시적인 그래픽 렌더링 시스템을 보여주는 블록도이다.
도 3 은 GPU 를 이용하는 일 예시적인 범용 컴퓨팅 시스템을 보여주는 블록도이다.
도 4 는 선점 요청을 보여주는 개념도이다.
도 5 는 본 개시물의 하나 이상의 예들에 따른 개념 요청 처리를 보여주는 개념도이다.
도 6 은 본 개시물의 기법들에 따른 일 예시적인 방법을 보여주는 플로차트이다.
본 개시물은 그래픽 프로세싱에 대한 기법들에 관한 것으로, 좀더 구체적으로 그래픽 프로세싱에서 임의적 제어 지점들에서의 선점에 대한 기법들에 관한 것이다. 특히, 본 개시물은 컴퓨팅 시스템에서 입력/출력 (I/O) 디바이스에 대한 선점 메커니즘들에 대한 기법들에 관한 것이다. 특히, 본 개시물은 그래픽 프로세싱, 예를 들어, 그래픽 프로세싱 유닛 (graphics processing unit; GPU) 에서 실행되는 그래픽 프로세싱을 중단하고 재개하기 위해 운영 체제에서 이용되는 선점 메커니즘의 면에서 설명될 것이다.
쉬운 말로, GPU 에 대한 선점 요청은 GPU 프로세싱을 필요로 하는 다른 보다 높은 우선순위 동작에 유리하도록 커맨드 버퍼의 현재의 그래픽 프로세싱을 중단하기 위해 그래픽 프로세싱 시스템의 다른 엔티티 (예를 들어, 중앙 프로세싱 유닛 (central processing unit; CPU) 에서 실행되는 애플리케이션) 에 의해 이루어지는 요청이다. 종종, 그러한 선점 요청들은 운영 체제에서 생길 것이다. 그래픽 프로세싱의 선점을 위한 종래의 기법들은 이른바 "안전한 지점들" 의 이용에 의존한다. 즉, GPU 가 현재의 프로세싱을 선점하기 위한 요청을 수신하는 경우, GPU 는 특정 지점 (예를 들어, 커맨드 버퍼에서의 특정 지점) 까지 계속 프로세싱하고 해당 지점에서의 프로세싱의 상태에 관한 정보를 저장한다. 그러한 정보는 프로세싱이 중단되었고 재개되어야 하는 커맨드 버퍼에서의 지점, GPU 프로세싱의 출력물을 수신하는 임의의 버퍼의 컨텐츠, 및 커맨드에서 그 지점에서 임의의 GPU 프로세싱을 위한 입력 데이터로서 이용될 수도 있는 하나 이상의 버퍼들의 컨텐츠를 포함할 수도 있다.
그러한 상태 정보를 저장하는 것은 GPU 가 정확한 입력 및 출력 데이터로 알려진 지점에서 프로세싱을 재시작하는 것을 할 수 있게 한다. 그러나, 선점 요청이 수신된 경우에 안전한 지점까지 프로세싱하고 상태 정보를 저장하는 것은 쉽게 가늠할 수 없는 시간의 양이 소요된다. 선점 요청들은 GPU 에 의해 실행되는 커맨드 버퍼에서의 비동기 지점들에서 발생할 수도 있고, 그에 따라, 안전한 지점에 도달할 때까지 얼마나 오랫동안 GPU 가 동작할 필요가 있을 수도 있는지를 예측하는 것이 가능하지 않을 수도 있다. 일부 상황들에서, GPU 가 선점 요청에 응답하여 안전한 지점에 도달하고, 상태 정보를 저장하고, 새로운 커맨드 버퍼를 프로세싱하는 것을 시작하기 위한 시간은 바람직하지 않게 길 수도 있다. 일부 애플리케이션들은 보다 높은 우선순위 그래픽 태스크들이 즉시 시작되도록 할 수 없으면 열악한 사용자 경험을 초래할 수도 있다.
단점들의 관점에서, 본 개시물은 임의의 제어 지점들에서 선점 요청들을 프로세싱하기 위한 기법들을 제시한다. 특히, 본 개시물의 기법들은 원래의 태스크에 대해 커맨드 버퍼를 실행하기 위해 GPU 에 의해 이용되는 판독-수정-기록 리소스를 이중-버퍼링하는 것을 포함하여, 커맨드 버퍼를 부분 프로세싱한 결과물들이 버려질 수도 있고, 보다 높은 우선순위 태스크를 실행하기 위한 선점 요청에 응답하여 커맨드 버퍼가 처음에서 재-가동될 수도 있다. 이러한 방식으로, 원래의 태스크의 프로세싱을 재시작하기 위한 안정적인 상태를 여전히 유지하면서, 선점 요청들은 즉시 처리될 수도 있다.
일 예에서, 그래픽 프로세싱에 대한 커맨드 스트림은 후속하는 프레임을 렌더링하기 위해 이전에 렌더링된 프레임 버퍼의 컨텐츠를 판독하고 그 다음에 수정할 수도 있다. 현재의 프레임의 렌더링이 그 프레임이 완료되기 전에 선점되면, 본 개시물의 기법들은 시작 (즉, 처음에서부터 프레임을 렌더링하기 시작하는 것) 에서부터 커맨드 버퍼의 실행을 재시작하는 것을 포함한다. 선점 중에, 커맨드 버퍼의 전체 컨텐트는 추후의 지점에서의 재생을 위해 저장된다. 이전의 프레임 버퍼의 부분들이 선점 전에 수정되었으면, 프레임 버퍼의 그러한 부분들은 현재 프로세싱된 프레임의 정확한 입력물이 아닐 것이다. 그에 따라, 본 개시물의 기법들은 또한 전체 커맨드 버퍼가 프로세싱될 때까지 판독-수정-기록 리소스 (예를 들어, 이전의 프레임의 프레임 버퍼의 컨텐츠) 의 복사본을 저장하는 것을 포함한다. 이전의 프레임 버퍼의 컨텐트에 대한 임의의 수정물은 상이한 버퍼에 저장된다 (즉, 판독-수정-기록 버퍼는 이중 버퍼링된다).
도 1 은 임의의 제어 지점들에서의 선점을 위해 본 개시물의 기법들을 구현하는데 이용될 수도 있는 일 예시적인 컴퓨팅 디바이스 (2) 를 도시하는 블록도이다. 컴퓨팅 디바이스 (2) 는, 예를 들어, 개인용 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 컴퓨터 워크스테이션, 비디오 게임 플랫폼 또는 콘솔, 예를 들어, 이른바 스마트폰, 지상 전화기, 인터넷 전화기를 포함하는, 예를 들어, 셀룰러 또는 위성 전화기와 같은 모바일 전화기, 휴대용 비디오 게임 디바이스 또는 개인 휴대 정보 단말기 (personal digital assistant; PDA) 와 같은 핸드헬드 디바이스, 개인용 음악 재생기, 비디오 재생기, 디스플레이 디바이스, 텔레비전, 텔레비전 셋-탑 박스, 서버, 중간 네트워크 디바이스, 메인프레임 컴퓨터, 임의의 모바일 디바이스, 또는 그래픽 데이터를 프로세싱하고/하거나 디스플레이하는 임의의 다른 유형의 디바이스를 포함할 수도 있다.
도 1 의 예에 도시된 바와 같이, 컴퓨팅 디바이스 (2) 는 사용자 입력 인터페이스 (4), 중앙 프로세싱 유닛 (CPU) (6), 메모리 제어기 (8), 시스템 메모리 (10), 그래픽 프로세싱 유닛 (GPU) (12), 그래픽 메모리 (14), 디스플레이 인터페이스 (16), 디스플레이 (18), 및 버스들 (20 및 22) 을 포함할 수도 있다. 일부 예들에서, 그래픽 메모리 (14) 는 GPU (12) 를 갖는 "온-칩" 일 수도 있음에 유의한다. 일부 경우들에서, 도 1 에 도시된 모든 하드웨어 엘리먼트들은, 예를 들어, 시스템 온 칩 (system on a chip; SoC) 설계에서의 온-칩일 수도 있다. 사용자 입력 인터페이스 (4), CPU (6), 메모리 제어기 (8), GPU (12), 및 디스플레이 인터페이스 (16) 는 버스 (20) 를 이용하여 서로 통신할 수도 있다. 메모리 제어기 (8) 및 시스템 메모리 (10) 는 또한 버스 (22) 를 이용하여 서로 통신할 수도 있다. 버스들 (20, 22) 은 3 세대 버스 (예를 들어, 하이퍼트랜스포트 (HyperTransport) 버스 또는 인피니밴드 (InfiniBand) 버스), 2 세대 버스 (예를 들어, 어드밴스드 그래픽 포트 버스, 주변 컴포넌트 상호접속 (Peripheral Component Interconnect; PCI) 익스프레스 버스, 또는 어드밴스드 익스텐서블 인터페이스 (Advanced eXentisible Interface; AXI) 버스) 와 같은 다양한 버스 구조들 중 임의의 것, 또는 다른 유형의 버스 혹은 디바이스 상호접속부일 수도 있다. 도 1 에 도시된 상이한 컴포넌트들 사이의 버스들 및 통신 인터페이스들의 특정 구성은 단지 예시일 뿐이고, 동일하거나 상이한 컴포넌트들을 갖는 컴퓨팅 디바이스들 및/또는 다른 그래픽 프로세싱 시스템들의 다른 구성들이 본 개시물의 기법들을 구현하는데 이용될 수도 있다는 것에 유의해야 한다.
CPU (6) 는 컴퓨팅 디바이스 (2) 의 동작을 제어하는 범용 또는 특수-목적용 프로세서를 포함할 수도 있다. 사용자는 CPU (6) 로 하여금 하나 이상의 소프트웨어 애플리케이션들을 실행하게 하기 위해 컴퓨팅 디바이스 (2) 에 입력을 제공할 수도 있다. CPU (6) 에서 실행되는 소프트웨어 애플리케이션들은, 예를 들어, 운영 체제, 워드 프로세서 애플리케이션, 이메일 애플리케이션, 스프레드 시트 애플리케이션, 미디어 재생기 애플리케이션, 비디오 게임 애플리케이션, 그래픽 사용자 인터페이스 애플리케이션, 또는 다른 프로그램을 포함할 수도 있다. 또한, CPU (6) 는 GPU (12) 의 동작을 제어하기 위해 GPU 드라이버 (7) 를 실행할 수도 있다. 사용자는 키보드, 마우스, 마이크로폰, 터치 패드, 또는 사용자 입력 인터페이스 (4) 를 통해 컴퓨팅 디바이스 (2) 에 커플링되는 다른 입력 디바이스와 같은 하나 이상의 입력 디바이스들 (미도시) 을 통해 컴퓨팅 디바이스 (2) 에 입력을 제공할 수도 있다.
CPU (6) 상에서 실행하는 소프트웨어 애플리케이션들은 CPU (6) 로 하여금 디스플레이에 그래픽 데이터의 렌더링을 하게 하는 명령하는 하나 이상의 그래픽 렌더링 명령들을 포함할 수도 있다. 일부 예들에서, 소프트웨어 명령들은, 예를 들어, OpenGL® (Open Graphics Library) API, OpenGL ES (Open Graphics Library Embedded Systems) API, Direct3D API, X3D API, RenderMan API, WebGL API, 또는 임의의 다른 공공 또는 사설 표준 그래픽 API 와 같은 그래픽 애플리케이션 프로그래밍 인터페이스 (application programming interface; API) 에 따를 수도 있다. 그래픽 렌더링 명령들을 프로세싱하기 위해, CPU (6) 는 (예를 들어, GPU 드라이버 (7) 를 통해) GPU (12) 에 하나 이상의 그래픽 렌더링 커맨드들을 발행하여 GPU (12) 로 하여금 그래픽 데이터의 렌더링의 일부 또는 전부를 수행하게 할 수도 있다. 일부 예들에서, 렌더링될 그래픽 데이터는 그래픽 프리미티브들, 예를 들어, 포인트들, 라인들, 삼각형들, 사각형들, 삼각형 스트립들 등의 리스트를 포함할 수도 있다.
메모리 제어기 (8) 는 시스템 메모리 (10) 안으로 들어오고 나가는 데이터의 전송을 가능하게 한다. 예를 들어, 메모리 제어기 (8) 는 메모리 판독 및 기록 커맨드들을 수신하고, 컴퓨팅 디바이스 (2) 에서의 컴포넌트들에 대해 메모리 서비스들을 제공하기 위해 시스템 메모리 (10) 에 대해 그러한 커맨드들을 서비스할 수도 있다. 메모리 제어기 (8) 는 메모리 버스 (22) 를 통해 시스템 메모리 (10) 에 통신가능하게 커플링된다. 메모리 제어기 (8) 가 CPU (6) 및 시스템 메모리 (10) 양자와 별도인 프로세싱 모듈로 도 1 에 도시되어 있지만, 다른 예들에서, 메모리 제어기 (8) 의 기능성의 일부 또는 전부는 CPU (6) 및 시스템 메모리 (10) 중 어느 하나 또는 양자에서 구현될 수도 있다.
시스템 메모리 (10) 는 CPU (6) 에 의한 실행을 위해 액세스가능한 프로그램 모듈들 및/또는 명령들, 및/또는 CPU (6) 에서 실행하는 프로그램들에 의한 이용을 위한 데이터를 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 디스플레이 (18) 상에 그래픽 사용자 인터페이스 (graphical user interface; GUI) 를 보여주기 위해 CPU (6) 에 의해 이용되는 윈도우 관리자 애플리케이션을 저장할 수도 있다. 또한, 시스템 메모리 (10) 는 사용자 애플리케이션들 및 애플리케이션들과 연관된 애플리케이션 표면 데이터를 저장할 수도 있다. 시스템 메모리 (10) 는 컴퓨팅 디바이스 (2) 의 다른 컴포넌트들에 의한 이용 및/또는 발생을 위해 정보를 추가적으로 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 GPU (12) 에 대해 디바이스 메모리의 역할을 할 수도 있고, GPU (12) 에 의해 동작될 데이터 뿐만 아니라 GPU (12) 에 의해 수행된 동작들로부터 비롯되는 데이터를 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 텍스쳐 버퍼들, 심도 버퍼들, 스텐실 버퍼들, 정점 버퍼들, 프레임 버퍼들 등의 임의의 조합을 저장할 수도 있다. 시스템 메모리 (10) 는, 예를 들어, 랜덤 액세스 메모리 (random access memory; RAM), 정적 RAM (static RAM; SRAM), 동적 RAM (dynamic RAM; DRAM), 판독-전용 메모리 (read-only memory; ROM), 소거가능한 프로그램가능 ROM (erasable programmable ROM; EPROM), 전기적으로 소거가능한 프로그램가능 ROM (electrically erasable programmable ROM; EEPROM), 플래시 메모리, 자기 데이터 매체들, 또는 광학 저장 매체들과 같은 하나 이상의 휘발성 또는 비-휘발성 메모리들 또는 저장 디바이스들을 포함할 수도 있다.
GPU (12) 는 디스플레이 (18) 에 하나 이상의 그래픽 프리미티브들을 렌더링하기 위한 그래픽 동작들을 수행하도록 구성될 수도 있다. 따라서, CPU (6) 에서 실행하는 소프트웨어 애플리케이션들 중 하나의 소프트웨어 애플리케이션이 그래픽 프로세싱을 요구하는 경우, CPU (6) 는 디스플레이 (18) 에 렌더링하기 위해 GPU (12) 에 그래픽 커맨드들 및 그래픽 데이터를 제공할 수도 있다. 그래픽 데이터는, 예를 들어, 드로잉 커맨드들, 상태 정보, 프리미티브 정보, 텍스쳐 정보 등을 포함할 수도 있다. GPU (12) 는, 일부 사례들에서, CPU (6) 보다 복잡한 그래픽-관련 동작들의 보다 효율적인 프로세싱을 제공하는 고-병렬 구조로 제작될 수도 있다. 예를 들어, GPU (12) 는 병렬 방식으로 다수의 정점들 또는 픽셀들에 대해 동작하도록 구성된 복수의 프로세싱 엘리먼트들을 포함할 수도 있다. GPU (12) 의 고 병렬 속성은, 일부 사례들에서, GPU (12) 가 CPU (6) 를 이용하여 디스플레이 (18) 에 직접적으로 장면들을 드로잉하는 것보다 빠르게 디스플레이 (18) 상에 그래픽 이미지들 (예를 들어, GUI 들 및 2-차원 (2D) 및/또는 3-차원 (3D) 그래픽 장면들) 을 드로잉하는 것을 허용할 수도 있다.
다른 예들에서, GPU (12) 는 그래픽 외의 애플리케이션들에 대한 계산들을 수행하기 위해 범용 "쉐이더 프로그램들" 을 실행하도록 구성될 수도 있다. GPU 의 그러한 이용은 범용 GPU (general-purpose GPU; GPGPU) 라고 종종 지칭된다. GPU 프로세싱 엘리먼트들의 높은 병렬 속성으로 인해, 일부 유형의 계산들은 CPU 보다는 GPU 에 의해 보다 효율적으로 수행될 수도 있다.
GPU (12) 는, 일부 사례들에서, 컴퓨팅 디바이스 (2) 의 마더보드에 통합될 수도 있다. 다른 사례들에서, GPU (12) 는 컴퓨팅 디바이스 (2) 의 마더보드에 있는 포트에 설치된 그래픽 카드에 존재할 수도 있거나, 그렇지 않으면 컴퓨팅 디바이스 (2) 와 상호동작하도록 구성된 주변 디바이스 내에 포함될 수도 있다. GPU (12) 는 하나 이상의 프로세서들, 예컨대, 하나 이상의 마이크로프로세서들, 주문형 반도체 (application specific integrated circuit; ASIC) 들, 필드 프로그램가능 게이트 어레이 (field programmable gate array; FPGA) 들, 디지털 신호 프로세서 (digital signal processors; DSP) 들, 또는 다른 등가의 집적 또는 이산 로직 회로부를 포함할 수도 있다.
GPU (12) 는 그래픽 메모리 (14) 에 직접적으로 커플링될 수도 있다. 따라서, GPU (12) 는 버스 (20) 를 이용하지 않고 그래픽 메모리 (14) 로부터 데이터를 판독하고 그래픽 메모리 (14) 에 데이터를 기록할 수도 있다. 다시 말해, GPU (12) 는 오프-칩 메모리 대신에 로컬 스토리지를 이용하여 로컬로 데이터를 프로세싱할 수도 있다. 이는, 심한 버스 트래픽을 겪을 수도 있는, GPU (12) 가 버스 (20) 를 통해 데이터를 판독하고 기록할 필요성을 제거함으로써, GPU (12) 가 보다 효율적인 방식으로 동작하는 것을 할 수 있게 한다. 일부 사례들에서는, 그러나, GPU (12) 는 별도의 메모리를 포함하지 않을 수도 있고, 대신 버스 (20) 를 통해 시스템 메모리 (10) 를 사용할 수도 있다. 그래픽 메모리 (14) 는, 예를 들어, 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 소거가능한 프로그램 가능 ROM (EPROM), 전기적으로 소거가능한 프로그램가능 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체들, 또는 광학 저장 매체들과 같은 하나 이상의 휘발성 또는 비-휘발성 메모리들 또는 저장 디바이스들을 포함할 수도 있다.
CPU (6) 및/또는 GPU (12) 는 프레임 버퍼 (15) 에 렌더링된 이미지 데이터를 저장할 수도 있다. 프레임 버퍼 (15) 는 독립적인 메모리일 수도 있거나, 시스템 메모리 (10) 내에 할당될 수도 있다. 디스플레이 인터페이스 (16) 는 프레임 버퍼 (15) 로부터 데이터를 취출하고 렌더링된 이미지 데이터에 의해 표현되는 이미지를 디스플레이하도록 디스플레이 (18) 를 구성할 수도 있다. 일부 예들에서, 디스플레이 인터페이스 (16) 는 프레임 버퍼로부터 취출된 디지털 값들을 디스플레이 (18) 에 의해 소비가능한 아날로그 신호로 컨버팅하도록 구성된 디지털-대-아날로그 컨버터 (digital-to-analog converter; DAC) 를 포함할 수도 있다. 다른 예들에서, 디스플레이 인터페이스 (16) 는 디스플레이 (18) 에서 디스플레이 프로세서에 의한 프로세싱을 위해 디스플레이 (18) 에 직접적으로 디지털 값들을 전해줄 수도 있다. 디스플레이 (18) 는 모니터, 텔레비전, 프로젝션 디바이스, 액정 디스플레이 (liquid crystal display; LCD), 플라즈마 디스플레이 패널, 발광 다이오드 (light emitting diode; LED) 어레이, 예컨대, 유기 LED (organic LED; OLED) 디스플레이, 음극선관 (cathode ray tube; CRT) 디스플레이, 전자 종이, 표면-전도 전자-방출 디스플레이 (surface-conduction electron-emitted display; SED), 레이저 텔레비전 디스플레이, 나노크리스털 디스플레이, 또는 다른 유형의 디스플레이 유닛을 포함할 수도 있다. 디스플레이 (18) 는 컴퓨팅 디바이스 (2) 내에 통합될 수도 있다. 예를 들어, 디스플레이 (18) 는 모바일 전화기의 스크린일 수도 있다. 대안으로, 디스플레이 (18) 는 유선 또는 무선 통신 링크를 통해 컴퓨팅 디바이스 (2) 에 커플링된 독립형 디바이스일 수도 있다. 예를 들어, 디스플레이 (18) 는 케이블 또는 무선 링크를 통해 개인용 컴퓨터에 접속된 컴퓨터 모니터 또는 평면 패널 디스플레이일 수도 있다.
본 개시물의 선점 기법들은 3D 렌더링, 2D 렌더링, GPGPU 애플리케이션들, 또는 GPU 에 의해 수행될 수도 있는 임의의 다른 계산들을 포함하여, GPU 의 임의의 애플리케이션에 이용될 수도 있다. 도 2 및 도 3 은 2 개의 상이한 GPU 애플리케이션들의 통상적인 시스템 아키텍처들의 2 개의 예들을 도시한다. 도 2 는 2D 및/또는 3D 그래픽 렌더링 애플리케이션에서의 도 1 의 CPU (6), GPU (12), 및 시스템 메모리 (10) 의 예시적인 구현들을 도시하는 블록도이다. CPU (6) 는 적어도 하나의 소프트웨어 애플리케이션 (24), 그래픽 API (26), 및 GPU 드라이버 (7) 를 포함할 수도 있으며, 이들의 각각은 CPU (6) 에서 실행하는 하나 이상의 소프트웨어 애플리케이션들 또는 서비스들일 수도 있다. GPU (12) 는 그래픽 프로세싱 커맨드들을 실행하기 위해 함께 동작하는 복수의 그래픽 프로세싱 스테이지들을 포함하는 그래픽 프로세싱 파이프라인 (30) 을 포함할 수도 있다. GPU (12) 는 비닝 렌더링 모드 및 다이렉트 렌더링 모드를 포함하는, 다양한 렌더링 모드들에서 그래픽 프로세싱 파이프라인 (30) 을 실행하도록 구성될 수도 있다. 도 2 에 도시된 바와 같이, 그래픽 프로세싱 파이프라인 (30) 은 커맨드 엔진 (32), 기하 프로세싱 스테이지 (34), 래스터화 스테이지 (36), 및 픽셀 프로세싱 파이프라인 (38) 을 포함할 수도 있다. 그래픽 프로세싱 파이프라인 (30) 에서의 컴포넌트들의 각각은 고정-기능부 컴포넌트들, (예를 들어, 프로그램가능 쉐이더 유닛에서 실행하는 쉐이더 프로그램의 일부분으로서) 프로그램가능 컴포넌트들, 또는 고정-기능부와 프로그램가능 컴포넌트들의 조합으로 구현될 수도 있다. CPU (6) 및 GPU (12) 가 이용가능한 메모리는 시스템 메모리 (10) 및 프레임 버퍼 (15) 를 포함할 수도 있다. 프레임 버퍼 (15) 는 시스템 메모리 (10) 의 일부분일 수도 있거나, 시스템 메모리 (10) 로부터 분리될 수도 있다. 프레임 버퍼 (15) 는 렌더링된 이미지 데이터를 저장할 수도 있다.
소프트웨어 애플리케이션 (24) 은 GPU (12) 의 기능성을 사용하는 임의의 애플리케이션일 수도 있다. 예를 들어, 소프트웨어 애플리케이션 (24) 은 GUI 애플리케이션, 운영 체제, 휴대용 맵핑 애플리케이션, 엔지니어링 또는 아트 애플리케이션들을 위한 컴퓨터-보조 디자인 프로그램, 비디오 게임 애플리케이션, 또는 2D 혹은 3D 그래픽을 이용하는 다른 유형의 소프트웨어 애플리케이션일 수도 있다.
소프트웨어 애플리케이션 (24) 은 그래픽 사용자 인터페이스 (graphical user interface; GUI) 및/또는 그래픽 장면을 렌더링하도록 GPU (12) 에 명령하는 하나 이상의 드로잉 명령들을 포함할 수도 있다. 예를 들어, 드로잉 명령들은 GPU (12) 에 의해 렌더링될 하나 이상의 그래픽 프리미티브들의 세트를 정의하는 명령들을 포함할 수도 있다. 일부 예들에서, 드로잉 명령들은, 집합적으로, GUI 에서 이용되는 복수의 윈도윙 표면들의 전부 또는 일부를 정의할 수도 있다. 추가적인 예들에서, 드로잉 명령들은, 집합적으로, 애플리케이션에 의해 정의되는 모델 공간 또는 세계 공간 내의 하나 이상의 그래픽 오브젝트들을 포함하는 그래픽 장면의 전부 또는 일부를 정의할 수도 있다.
소프트웨어 애플리케이션 (24) 은 그래픽 API (26) 를 통해 GPU 드라이버 (7) 를 작동시켜, 하나 이상의 그래픽 프리미티브들을 디스플레이가능한 그래픽 이미지들로 렌더링하기 위해 GPU (12) 에 하나 이상의 커맨드들을 발행할 수도 있다. 예를 들어, 소프트웨어 애플리케이션 (24) 은 그래픽 API (26) 를 통해 GPU 드라이버 (7) 를 작동시켜 GPU (12) 에 프리미티브 정의들을 제공할 수도 있다. 일부 사례들에서, 프리미티브 정의들은 드로잉 프리미티브들, 예를 들어, 삼각형들, 직사각형들, 삼각형 팬들, 삼각형 스트립들 등의 리스트의 형태로 GPU (12) 에 제공될 수도 있다. 프리미티브 정의들은 렌더링될 프리미티브들과 연관된 하나 이상의 정점들을 명시하는 정점 명세들을 포함할 수도 있다. 정점 명세들은 각각의 정점에 대한 포지션 좌표, 및 다른 사례들에서는, 정점과 연관된 다른 속성들, 예컨대, 예를 들어, 색상 좌표, 정규 벡터들, 및 텍스쳐 좌표를 포함할 수도 있다. 프리미티브 정의들은 또한 프리미티브 유형 정보 (예를 들어, 삼각형, 직사각형, 삼각형 팬, 삼각형 스트립 등), 스케일링 정보, 회전 정보 등을 포함할 수도 있다. 소프트웨어 애플리케이션 (24) 에 의해 GPU 드라이버 (7) 에 발행된 명령들에 기초하여, GPU 드라이버 (7) 는 프리미티브들을 렌더링하도록 수행하기 위한 GPU (12) 에 대한 하나 이상의 동작들을 명시하는 하나 이상의 커맨드들을 만들어낼 수도 있다. GPU (12) 가 CPU (6) 로부터 커맨드를 수신하는 경우, 그래픽 프로세싱 파이프라인 (30) 은 그래픽 프로세싱 파이프라인 (30) 내의 커맨드를 디코딩하고 하나 이상의 프로세싱 엘리먼트들을 구성하여 커맨드에 명시된 동작을 수행한다. 명시된 동작들을 수행한 후에, 그래픽 프로세싱 파이프라인 (30) 은 디스플레이 디바이스와 연관된 프레임 버퍼 (40) 에 렌더링된 데이터를 출력한다. 그래픽 파이프라인 (30) 은 비닝 렌더링 모드 및 다이렉트 렌더링 모드를 포함하여, 복수의 상이한 렌더링 모드들 중 하나의 렌더링 모드에서 실행하도록 구성될 수도 있다. 비닝 렌더링 모드 및 다이렉트 렌더링 모드의 동작은 하기에서 보다 상세히 논의될 것이다.
GPU 드라이버 (7) 는 하나 이상의 쉐이더 프로그램들을 컴파일하고, 컴파일된 쉐이더 프로그램들을 GPU (12) 내에 포함된 하나 이상의 프로그램가능 쉐이어 유닛들에 다운로드하도록 더 구성될 수도 있다. 쉐이더 프로그램들은, 예를 들어, GLSL (OpenGL Shading Language), HLSL (High Level Shading Language), Cg (C for Graphics) 쉐이딩 언어 등과 같은 고차원 쉐이딩 언어로 기록될 수도 있다. 컴파일된 쉐이더 프로그램들은 GPU (12) 내의 프로그램가능 쉐이더 유닛의 동작을 제어하는 하나 이상의 명령들을 포함할 수도 있다. 예를 들어, 쉐이더 프로그램들은 정점 쉐이더 프로그램들 및/또는 픽셀 쉐이더 프로그램들을 포함할 수도 있다. 정점 쉐이더 프로그램은 프로그램가능 정점 쉐이더 유닛 또는 통합 쉐이더 유닛의 실행을 제어하고, 하나 이상의 정점당 동작들을 명시하는 명령들을 포함할 수도 있다. 픽셀 쉐이더 프로그램은 프로그램가능 픽셀 쉐이더 유닛 또는 통합 쉐이더 유닛의 실행을 제어하는 픽셀 쉐이더 프로그램들을 포함하고, 하나 이상의 픽셀당 동작들을 명시하는 명령들을 포함할 수도 있다. 본 개시물의 일부 예시적인 실시형태들에 따르면, 픽셀 쉐이더 프로그램은 또한 선택적으로 소스 픽셀에 대한 대응하는 정의 알파 값들에 기초하여 소스 픽셀들에 대한 텍스쳐 값들이 취출되게 하는 명령들을 포함할 수도 있다.
하기에서 보다 상세히 설명될 바와 같이, 그래픽 드라이버 (7) 는 또한 다른 일을 위해 GPU (12) 의 현재의 프로세싱을 중단하도록 GPU (12) 에 선점 요청을 발행하기 위해 소프트웨어 애플리케이션 (24) 에 의해 이용될 수도 있다.
그래픽 프로세싱 파이프라인 (30) 은 그래픽 드라이버 (28) 를 통해 CPU (6) 로부터 하나 이상의 그래픽 프로세싱 커맨드들을 수신하고, 디스플레이가능한 그래픽 이미지들을 발생시키기 위해 그래픽 프로세싱 커맨드들을 실행하도록 구성될 수도 있다. 위에서 논의된 바와 같이, 그래픽 프로세싱 파이프라인 (30) 은 그래픽 프로세싱 커맨드들을 실행하기 위해 함께 동작하는 복수의 스테이지들을 포함한다. 그러나, 그러한 스테이지들은 반드시 별도의 하드웨어 블록들로 구현될 필요가 없음을 유의해야 한다. 예를 들어, 기하 프로세싱 스테이지 (34) 및 픽셀 프로세싱 파이프라인 (38) 의 부분들은 통합 쉐이더 유닛의 일부분으로서 구현될 수도 있다. 다시, 그래픽 파이프라인 (30) 은 비닝 렌더링 모드 및 다이렉트 렌더링 모드를 포함하여, 복수의 상이한 렌더링 모드들 중 하나의 렌더링 모드에서 실행하도록 구성될 수도 있다.
커맨드 엔진 (32) 은 그래픽 프로세싱 커맨드들을 수신하고 그래픽 프로세싱 파이프라인 (30) 내의 남아있는 프로세싱 스테이지들이 그래픽 프로세싱 커맨드들을 이행하기 위한 다양한 동작들을 수행하도록 구성할 수도 있다. 그래픽 프로세싱 커맨드들은, 예를 들어, 드로잉 커맨드들 및 그래픽 상태 커맨드들을 포함할 수도 있다. 드로잉 커맨드들은 하나 이상의 정점들에 대한 포지션 좌표, 및 일부 사례들에서, 정점들의 각각과 연관된 다른 속성 값들, 예컨대, 예를 들어, 색상 좌표, 정규 벡터들, 텍스쳐 좌표, 및 포그 (fog) 좌표를 명시하는 정점 명세 커맨드들을 포함할 수도 있다. 그래픽 상태 커맨드들은 프리미티브 유형 커맨드들, 변환 커맨드들, 조명 커맨드들 등을 포함할 수도 있다. 프리미티브 유형 커맨드들은 렌더링될 프리미티브의 유형 및/또는 프리미티브를 형성하기 위해 정점들이 어떻게 결합되는지를 명시할 수도 있다. 변환 커맨드들은 정점들에서 수행하기 위한 변환들의 유형을 명시할 수도 있다. 조명 커맨드들은 그래픽 장면 내의 상이한 광들의 유형, 방향, 및/또는 배치를 명시할 수도 있다. 커맨드 엔진 (32) 은 기하 프로세싱 스테이지 (34) 로 하여금 하나 이상의 수신된 커맨드들과 연관된 정점들 및/또는 프리미티브들에 대해 기하 프로세싱을 수행하게 할 수도 있다.
기하 프로세싱 스테이지 (34) 는 래스터화 스테이지 (36) 를 위한 프리미티브 데이터를 발생시키기 위해 정점당 동작들 및/또는 하나 이상의 정점들에 대한 프리미티브 설정 동작들을 수행할 수도 있다. 각각의 정점은, 예를 들어, 포지션 좌표, 색상 값들, 정규 벡터, 및 텍스쳐 좌표와 같은 속성들의 세트와 연관될 수도 있다. 기하 프로세싱 스테이지 (34) 는 다양한 정점당 동작들에 따라 이러한 속성들 중 하나 이상의 속성을 수정한다. 예를 들어, 기하 프로세싱 스테이지 (34) 는 정점 포지션 좌표에 대해 하나 이상의 변환들을 수행하여 수정된 정점 포지션 좌표를 생성할 수도 있다. 기하 프로세싱 스테이지 (34) 는, 예를 들어, 정점 포지션 좌표에 모델링 변환, 뷰잉 변환, 프로젝션 변환, 모델뷰 (ModelView) 변환, 모델뷰프로젝션 (ModelViewProjection) 변환, 뷰포트 변환, 및 심도 범위 스케일링 변환을 하나 이상의 변환을 적용하여 수정된 정점 포지션 좌표를 발생시킬 수도 있다. 일부 사례들에서, 정점 포지션 좌표는 모델 공간 좌표일 수도 있고, 수정된 정점 포지션 좌표는 스크린 공간 좌표일 수도 있다. 스크린 공간 좌표는 모델링, 뷰잉, 프로젝션, 및 뷰포트 변환들의 적용 후에 획득될 수도 있다. 일부 사례들에서, 기하 프로세싱 스테이지 (34) 는 또한 정점들에 대해 정점당 조명 동작들을 수행하여 정점들에 대한 수정된 색상 좌표를 발생시킬 수도 있다. 기하 프로세싱 스테이지 (34) 는 또한, 예를 들어, 정규 변환들, 정규 정규화 동작들, 뷰 볼륨 클립핑, 균등 분할, 및/또는 뒷면 컬링 동작들을 포함하여, 다른 동작들을 수행할 수도 있다.
기하 프로세싱 스테이지 (34) 는 래스터화될 프리미티브 뿐만 아니라 프리미티브를 형성하기 위해 정점들이 어떻게 결합되는지를 명시하는 데이터를 정의하는 하나 이상의 수정된 정점들의 세트를 포함하는 프리미티브 데이터를 생성할 수도 있다. 수정된 정점들의 각각은, 예를 들어, 수정된 정점 포지션 좌표 및 정점과 연관된 프로세싱된 정점 속성 값들을 포함할 수도 있다. 프리미티브 데이터는 그래픽 프로세싱 파이프라인 (30) 의 추후의 스테이지들에 의해 래스터화될 프리미티브에 집합적으로 대응할 수도 있다. 개념적으로, 각각의 정점은 프리미티브의 2 개의 에지들이 만나는 프리미티브의 코너에 대응할 수도 있다. 기하 프로세싱 스테이지 (34) 는 추가적인 프로세싱을 위해 래스터화 스테이지 (36) 에 프리미티브 데이터를 제공할 수도 있다.
일부 예들에서, 기하 프로세싱 스테이지 (34) 의 전부 또는 일부는 하나 이상의 쉐이더 유닛들에 대해 실행하는 하나 이상의 쉐이더 프로그램들에 의해 구현될 수도 있다. 예를 들어, 기하 프로세싱 스테이지 (34) 는, 그러한 예들에서, 정점 쉐이더, 기하 쉐이더, 또는 이들의 임의의 조합에 의해 구현될 수도 있다. 다른 예들에서, 기하 프로세싱 스테이지 (34) 는 고정-기능 하드웨어 프로세싱 파이프라인으로 또는 고정-기능 하드웨어와 하나 이상의 쉐이더 유닛들에 대해 실행하는 하나 이상의 쉐이더 프로그램들의 조합으로 구현될 수도 있다.
래스터화 스테이지 (36) 는, 기하 프로세싱 스테이지 (34) 로부터, 래스터화될 프리미티브를 표현하는 프리미티브 데이터를 수신하고, 프리미티브들을 래스터화하여 래스터화된 프리미티브에 대응하는 복수의 소스 픽셀들을 발생시키도록 구성된다. 일부 예들에서, 래스터화 스테이지 (36) 는 어떤 스크린 픽셀 위치들이 래스터화될 프리미티브에 의해 커버되는지를 결정하고, 프리미티브에 의해 커버될 것으로 결정된 각각의 스크린 픽셀 위치에 대한 소스 픽셀을 발생시킬 수도 있다. 래스터화 스테이지 (36) 는 어떤 스크린 픽셀 위치들이, 예를 들어, 에지-워킹 기법, 에지 등식들 평가 등과 같이 당업자들에게 알려진 기법들을 이용하여 프리미티브에 의해 커버되는지를 결정할 수도 있다. 래스터화 스테이지 (36) 는 추가적인 프로세싱을 위해 픽셀 프로세싱 파이프라인 (38) 에 결과적인 소스 픽셀들을 제공할 수도 있다.
래스터화 스테이지 (36) 에 의해 발생된 소스 픽셀들은 스크린 픽셀 위치, 예를 들어, 목적지 픽셀에 대응하고, 하나 이상의 색상 속성들과 연관될 수도 있다. 특정 래스터화된 프리미티브에 대해 발생된 소스 픽셀들 모두는 래스터화된 프리미티브와 연관된다고 말할 수도 있다. 프리미티브에 의해 커버될 것으로 래스터화 스테이지 (36) 에 의해 결정되는 픽셀들은 프리미티브들의 정점들을 표현하는 픽셀들, 프리미티브의 에지들을 표현하는 픽셀들, 및 프리미티브의 내부를 표현하는 픽셀들을 개념적으로 포함할 수도 있다.
픽셀 프로세싱 파이프라인 (38) 은 래스터화된 프리미티브와 연관된 소스 픽셀을 수신하고, 소스 픽셀에 대해 하나 이상의 픽셀당 동작들을 수행하도록 구성된다. 픽셀 프로세싱 파이프라인 (38) 에 의해 수행될 수도 있는 픽셀당 동작들은, 예를 들어, 알파 테스트, 텍스쳐 맵핑, 색상 계산, 픽셀 쉐이딩, 픽셀당 조명, 포그 프로세싱, 블렌딩, 픽셀 소유권 테스트, 소스 알파 테스트, 스텐실 테스트, 심도 테스트, 시저 (scissors) 테스트, 및/또는 점조각 (stippling) 동작들을 포함한다. 또한, 픽셀 프로세싱 파이프라인 (38) 은 하나 이상의 픽셀 쉐이더 프로그램들을 실행하여 하나 이상의 픽셀당 동작들을 수행할 수도 있다. 픽셀 프로세싱 파이프라인 (38) 에 의해 생성되는 결과적인 데이터는 목적지 픽셀 데이터라고 본원에서 지칭되고 프레임 버퍼 (15) 에 저장될 수도 있다. 목적지 픽셀 데이터는 프로세싱된 소스 픽셀과 동일한 디스플레이 위치를 갖는 프레임 버퍼 (15) 에서의 목적지 픽셀과 연관될 수도 있다. 목적지 픽셀 데이터는, 예를 들어, 색상 값들, 목적지 알파 값들, 심도 값들 등과 같은 데이터를 포함할 수도 있다.
프레임 버퍼 (15) 는 GPU (12) 에 대해 목적지 픽셀들을 저장한다. 각각의 목적지 픽셀은 고유한 스크린 픽셀 위치와 연관될 수도 있다. 일부 예들에서, 프레임 버퍼 (15) 는 각각의 목적지 픽셀에 대한 색상 컴포넌트들 및 목적지 알파 값을 저장할 수도 있다. 예를 들어, 프레임 버퍼 (15) 는 각각의 픽셀에 대해 RGBA (Red, Green, Blue, Alpha) 컴포넌트들을 저장할 수도 있으며, 여기서 "RGB" 컴포넌트들은 색상 값들에 대응하고 "A" 컴포넌트는 목적지 알파 값에 대응한다. 프레임 버퍼 (15) 및 시스템 메모리 (10) 가 별도의 메모리 유닛들인 것으로 예시되었으나, 다른 예들에서, 프레임 버퍼 (15) 는 시스템 메모리 (10) 의 일부분일 수도 있다.
도 3 은 GPGPU 애플리케이션에서의 도 1 의 CPU (6), GPU (12), 및 시스템 메모리 (10) 의 예시적인 구현들을 도시하는 블록도이다. 도 1 의 시스템의 GPU (12) 는 GPU 에서 구동하도록 로딩된 소프트웨어 뿐만 아니라 GPU 의 동작을 제어하는데 이용되는 드라이버에 기초하여 그래픽 프로세싱 태스크, GPGPU 태스크, 또는 GPU 에 적합한 임의의 다른 유형의 태스크를 수행하도록 선택적으로 구동될 수도 있음에 유의해야 한다. 도 3 의 예에서, CPU (6) 는 적어도 하나의 소프트웨어 애플리케이션 (25) 및 GPGPU 드라이버 (50) 를 실행할 수도 있으며, 이들의 각각은 CPU (6) 에서 실행하는 하나 이상의 소프트웨어 애플리케이션들 또는 서비스들일 수도 있다. GPU (12) 는 범용 쉐이더 (52) 를 실행하도록 구성될 수도 있다. 범용 쉐이더 (52) 는 계산들을 수행하기 위해 GPU (12) 의 프로세싱 엘리먼트들의 병렬 속성을 이용하는 GPU (12) 에서의 실행을 위해 적용가능한 임의의 애플리케이션일 수도 있다. 다시, CPU (6) 및 GPU (12) 가 이용가능한 메모리는 시스템 메모리 (10) 를 포함할 수도 있다. GPU (12) 는 또한 보다 빠른 로컬 그래픽 메모리 (14) 를 이용할 수도 있다.
소프트웨어 애플리케이션 (25) 은 GPU (12) 의 기능성을 사용하는 임의의 애플리케이션일 수도 있다. 예를 들어, 소프트웨어 애플리케이션 (25) 은 GPU (12) 에 의해 이루어질 복잡한 계산을 요구하는 애플리케이션일 수도 있다.
소프트웨어 애플리케이션 (25) 은 GPGPU 드라이버 (50) 를 작동시켜, 예를 들어, 범용 쉐이더 (52) 를 실행하기 위해 GPU (12) 에 하나 이상의 커맨드들을 발행할 수도 있다. 하기에서 보다 상세히 설명될 바와 같이, GPGPU 드라이버 (50) 는 또한 다른 일을 위해 GPU (12) 의 현재의 프로세싱을 중단하도록 GPU (12) 에 선점 요청을 발행하기 위해 소프트웨어 애플리케이션 (25) 에 의해 이용될 수도 있다.
위에서 논의된 바와 같이, 본 개시물은 그래픽 프로세싱에 대한 기법들에 관한 것으로, 좀더 구체적으로 그래픽 프로세싱에서 임의적 제어 지점들에서의 선점에 대한 기법들에 관한 것이다. 특히, 본 개시물은 컴퓨팅 시스템에서 I/O 디바이스에 대한 선점 메커니즘들에 대한 기법들에 관한 것이다. 특히, 본 개시물은 그래픽 프로세싱, 예를 들어, 그래픽 프로세싱 유닛 (GPU) 에서 실행되는 그래픽 프로세싱을 중단하고 재개하기 위해 운영 체제에서 이용되는 선점 메커니즘의 면에서 설명될 것이다.
쉬운 말로, GPU 에 대한 선점 요청은 GPU 프로세싱을 필요로 하는 다른 보다 높은 우선순위 동작에 유리하게 커맨드 버퍼의 현재의 그래픽 프로세싱을 중단하기 위해 그래픽 프로세싱 시스템의 다른 엔티티 (예를 들어, 중앙 프로세싱 유닛 (CPU) 에서 실행되는 애플리케이션) 에 의해 이루어지는 요청이다. 통상적으로, 그러한 선점 요청들은 운영 체제에서 생길 것이다. 그에 따라, 보다 높은 우선순위 동작은 운영 체제에 의해 해당 시점에서 보다 높은 우선순위인 것으로 여겨지는, GPU (12) 에 의해 실행가능한 임의의 동작일 수도 있다.
도 4 는 일 예시적인 선점 요청을 도시하는 블록도이다. 도 4 에 도시된 바와 같이, CPU (6) 는 현재의 태스크를 실행하는 것을 중단하도록 GPU (12) 에 선점 요청을 발행한다. 일부 예들에서, 선점 요청은 GPU 드라이버 (7) 를 통해 GPU (12) 에 통신될 수도 있다. 도 4 의 예에서, GPU (12) 에 의해 실행되는 현재의 태스크는 커맨드 버퍼 (68) 에 있는 렌더링 커맨드 스트림이다. 커맨드 버퍼 (68) 는 삼각형 프리미티브들 (A, B, 및 C) 에 대한 드로우 커맨드들을 보여준다. CPU (6) 에 대한 선점 요청은 현재의 태스크를 중단하고, 대신에 상이한 태스크, 예를 들어, 이차 커맨드 버퍼 (70) 에서 보여지는 렌더링 커맨드들을 프로세싱할 것을 시작하도록 GPU (12) 에 명령한다. 다시, 이차 커맨드 버퍼 (70) 에 있는 커맨드들은 (예를 들어, 커맨드 버퍼 (68) 를 통해 현재 렌더링되고 있던 것과는 상이한 프레임 또는 타일을 렌더링하기 위한) 삼각형 프리미티브들의 상이한 세트에 대한 상이한 드로우 커맨드들이다. 선점 요청들은 커맨드 스트림들을 렌더링하는 것으로 제한되고, 임의의 유형의 커맨드 스트림 (렌더링, 일반적인 계산 등) 을 위해 GPU (12) 에 의해 현재 실행되는 임의의 종류의 커맨드 스트림을 선점하도록 될 수도 있다는 것에 유의해야 한다.
그래픽 프로세싱의 선점을 위한 종래의 기법들은 이른바 "안전한 지점들" 의 이용에 의존한다. 즉, GPU 가 현재의 프로세싱을 선점하기 위한 요청을 수신하는 경우, GPU 는 특정 지점 (예를 들어, 커맨드 버퍼에서의 특정 지점) 까지 계속 프로세싱하고 해당 지점에서의 프로세싱의 상태에 관한 정보를 저장한다. 그러한 정보는 프로세싱이 중단되었고 재개되어야 하는 커맨드 버퍼에서의 지점, GPU 프로세싱의 출력물을 수신하는 임의의 버퍼의 컨텐츠, 및 커맨드에서 그 지점에서 임의의 GPU 프로세싱을 위한 입력 데이터로서 이용될 수도 있는 하나 이상의 버퍼들의 컨텐츠를 포함할 수도 있다.
안전한 지점들을 사용하는 종래의 선점 메커니즘들은 하드웨어 및 소프트웨어 구현들 모두를 포함한다. 일부 소프트웨어 솔루션들은 안전한 지점들이 위치되는 곳을 결정하기 위해 다이렉트 메모리 액세스 버퍼의 사이즈를 이용한다. 다른 소프트웨어 솔루션들은 드로우 경계들 또는 빈 경계들 (즉, 프레임의 특정 영역들) 을 이용하여 안전한 지점들을 위치시킬 곳을 결정한다. 선점에 대한 다른 기법들은 비닝, 삼각형, 또는 픽셀 레벨에서 보다 과립의 (granular) 선점에 영향을 주기 위해 추가적인 하드웨어 지원을 사용할 수도 있다. 소프트웨어-단독 기법들보다 빨리 동작하게 하지만, 그러한 하드웨어 기법들은 보다 많은 복잡도를 요구한다.
임의의 경우에, 그러한 상태 정보를 저장하는 것은 GPU 가 정확한 입력 및 출력 데이터로 알려진 지점에서 프로세싱을 재시작하는 것을 할 수 있게 한다. 그러나, 선점 요청이 수신된 경우에 안전한 지점까지 프로세싱하고 상태 정보를 저장하는 것은 쉽게 가늠할 수 없는 시간의 양이 소요된다. 선점 요청들은 GPU 에 의해 실행되는 커맨드 버퍼에서의 비동기 지점들에서 발생할 수도 있고, 그에 따라, 안전한 지점에 도달할 때까지 얼마나 오랫동안 GPU 가 동작할 필요가 있을 수도 있는지를 예측하는 것이 가능하지 않을 수도 있다. 일부 상황들에서, GPU 가 선점 요청에 응답하여 안전한 지점에 도달하고, 상태 정보를 저장하고, 새로운 커맨드 버퍼를 프로세싱하는 것을 시작하기 위한 시간은 바람직하지 않게 길 수도 있다. 일부 애플리케이션들은 보다 높은 우선순위 그래픽 태스크가 즉시 시작되도록 할 수 없으면 열악한 사용자 경험을 초래할 수도 있다.
예를 들어, 사용자 인터페이스 (UI) 는 선점 요청에 응답한 긴 지연들이 바람직하지 않은 애플리케이션의 일 예이다. 일반적으로, 사용자의 관심에 초점을 맞추도록 구성된 임의의 애플리케이션, 또는 애플리케이션의 부분은 다른 예의 낮은 지연 선점 요청 (예를 들어, 인기 있는 배경의 렌더링을 선점하는 것, 또는 비디오, 팝-업 텍스트, 또는 사용자의 초점의 중심에 있는 애플리케이션의 임의의 다른 부분을 렌더링하는 것) 으로부터 혜택을 받을 수도 있다. 다른 예시적인 애플리케이션은 사용자의 시야의 이동에 기초하여 적절히 포지셔닝된 헤드-업 디스플레이 (heads-up display; HUD) 를 유지하는 것이 GPU 에 의해 실행되는 다른 태스크들보다 중요할 수도 있는 증강 현실 애플리케이션이다.
이러한 단점들의 관점에서, 본 개시물을 임의의 제어 지점들에서 선점 요청들을 프로세싱하기 위한 기법들을 제시한다. 특히, 본 개시물의 기법들은 원래의 태스크에 대해 커맨드 버퍼를 실행하기 위해 GPU 에 의해 이용되는 판독-수정-기록 리소스를 이중-버퍼링하는 것을 포함하여, 커맨드 버퍼를 부분 프로세싱한 결과물들이 버려질 수도 있고, 보다 높은 우선순위 태스크를 실행하기 위한 선점 요청에 응답하여 커맨드 버퍼가 처음부터 재-가동될 수도 있다. 이러한 방식으로, 선점 요청들은, 원래의 태스크의 프로세싱을 재시작하기 위해 안정적이고 무-결함 상태 (즉, 정확한 입력 데이터를 갖는 상태) 를 여전히 유지하면서, 즉시 처리될 수도 있다. 본 개시물의 기법들은 단독으로, 또는 기존의 안전한-지점 선점 기법들과 연계하여 이용될 수도 있다. 즉, 본 개시물의 기법들은 상황에 따라 또는 애플리케이션마다 적용되고, 모든 다른 선점 기법들을 대체할 필요가 없을 수도 있다.
도 5 는 본 개시물의 선점 기법들을 도시하는 개념도이다. 도 5 에 도시된 바와 같이, GPU (12) 는 커맨드 버퍼 (68) 에 있는 커맨드 스트림을 실행하도록 구성될 수도 있다. 다시, 커맨드 버퍼 (68) 는 3D 그래픽, 2D 그래픽, GPGPU 쉐이더 애플리케이션들에 대한 커맨드들을 포함한, 임의의 유형의 커맨드들, 또는 GPU 에서 실행될 수도 있는 임의의 유형의 커맨드들을 포함할 수도 있다. 도 5 에 도시된 바와 같이, 커맨드 버퍼 (68) 는 3D 그래픽 렌더링 커맨드들 (예를 들어, 삼각형 드로우 커맨드들) 을 포함한다.
커맨드 버퍼 내의 임의의 지점에서 커맨드 버퍼 (68) 의 선점을 할 수 있게 하기 위해, GPU (12) 에 의해 이용되는 임의의 판독-수정-기록 리소스는 임의의 데이터가 GPU (12) 에 의해 수정되기 전에 복사된다. 도 5 에 도시된 바와 같이, 프레임 버퍼 (72) 는 커맨드 버퍼 (68) 에서 커맨드 스트림을 실행하기 위한 입력 데이터로서 이용될 수도 있는 판독-수정-기록 리소스이다. 프레임 버퍼 (72) 는 GPU (12) 또는 CPU (6) 에 의해 복사되어 (즉, 이중 버퍼링되어) 프레임 버퍼 (72) 의 임의의 컨텐츠가 GPU (12) 에 의해 수정되기 전에 프레임 버퍼 (72) 의 복사본 (프레임 버퍼 복사본 (74)) 이 메모리 (즉, 제 1 버퍼) 에 저장된다. 프레임 버퍼 (72) 의 수정된 컨텐츠는 제 2 버퍼로 고려될 수 있다. 본 개시물의 기법들은 프레임 버퍼들로 제한되지 않고, 프레임 버퍼들, 렌더링 타겟들, 불규칙 액세스 뷰 (unorder access view; UAV) 버퍼, 표면 등을 포함하여, 임의의 유형의 판독-수정-기록 리소스들에 의해 사용될 수도 있다.
프레임 버퍼들의 맥락에서, 제 1 버퍼 (즉, 프레임 버퍼 복사본 (74)) 는 이전의 프레임 버퍼의 복사본 (즉, 커맨드들이 커맨드 버퍼 (68) 에서 실행되기 전의 프레임 버퍼의 컨텐트) 이다. 제 2 버퍼 (즉, 프레임 버퍼 (72)) 는 현재 렌더링되는 프레임 버퍼 (즉, 현재의 프레임 버퍼) 에 대한 수정된 컨텐츠를 포함한다.
프레임 버퍼 (72) 의 원래의 컨텐트의 복사본을 포함하는 제 1 버퍼 (즉, 프레임 버퍼 복사본 (74)), 뿐만 아니라 (프레임 버퍼 (72) 의 수정된 컨텐트를 포함하는) 제 2 버퍼는 별도의 메모리 유닛들, 단일 메모리 유닛의 별도의 파티션들, 또는 제 1 버퍼 및 제 2 버퍼가 별도로 어드레싱될 수 있는 공간들인 메모리 유닛들의 임의의 다른 구성으로 구성될 수도 있다.
이러한 맥락에서, 이중 버퍼링은 핑-퐁 버퍼링과 동일하지 않다는 것이 이해되어야 한다. 핑-퐁 버퍼링은 2 개의 메모리 버퍼들 (하나는 판독용이고 다른 하나는 기록용) 을 수반할 수도 있다. 본 개시물의 맥락에서, 이중 버퍼링은 해당 리소스를 이용하는 전체 커맨드 스트림이 완료되었다는 것이 확인될 때까지 판독-수정-기록 리소스의 복사본을 저장하는 것 (또는 그러한 리소스의 일부분의 복사본을 저장하는 것) 을 수반한다.
본 개시물의 일 예에서, 커맨드 버퍼 (68) (또는 GPU (12) 에 의해 현재 프로세싱되고 있는 임의의 커맨드 스트림) 를 계류 상태로 두는 것 (pending) 은 완료를 위해 GPU (12) 에 의해 추적된다. (예를 들어, GPU 드라이버 (7) 와 같은, CPU (6) 에서 실행하는 애플리케이션으로부터의) 선점 요청이 커맨드 버퍼 (68) 에 있는 모든 커맨드들이 완료되기 전에 한 지점에서 발생하면, GPU (12) 는 그 지점까지 생성된 프레임 버퍼 (72) 에 있는 모든 수정된 컨텐트를 폐기한다. 선점 요청의 대상이었던 태스크를 완료한 후에, GPU (12) 는 원래의 커맨드 버퍼 (68) 로 되돌아가 커맨드 스트림의 처음에서부터 시작한다. 종래의 시스템들에서, 이는 커맨드 스트림에서 이용되는 입력 데이터의 일부가 커맨드 스트림의 프로세싱을 통해 겹쳐쓰기되었기 (예를 들어, 프레임 버퍼 (72) 에 있는 수정된 컨텐트) 때문에 가능하지 않을 것이다. 그러나, 프레임 버퍼 (72) 가 이중 버퍼링되었기 때문에, GPU (12) 는 선점 후에 커맨드 버퍼 (68) 의 실행을 재개시하는 경우 입력으로서 프레임 버퍼 복사본 (74) 을 이용할 수도 있다. 프레임 버퍼 복사본 (74) 은 그 다음에 그 자체가 이중-버퍼링될 것이다.
본 개시물의 다른 예에서, 커맨드 버퍼가 계속적으로 선점되는 상황을 피하기 위해 추가적인 기법들이 포함될 수도 있다. 본 개시물의 기법들이 처음에서부터 선점된 커맨드 버퍼를 재시작하는 것을 포함하기 때문에, 완료하는데 시간이 오래 걸리는 일부 커맨드 버퍼들은 1회 이상 선점될 수도 있다는 것이 이해될 수 있다. 커맨드 버퍼가 원하는 것보다 오래 선점되는 상황을 피하기 위해, 본 개시물은, 특정 커맨드 버퍼가 선점된 횟수를 카운트하는, GPU (12), GPU 드라이버 (7), 또는 CPU (6) 에서 실행하는 일부 애플리케이션에 의해 실행되는 카운팅 메커니즘을 포함할 것을 더 제안한다. 선점들의 수가 어떤 임계치를 초과하면, 해당 커맨드 버퍼에 대해 더 이상의 선점들이 허용되지 않는다. 임계치는 GPU (12) 에 의해 실행되는 유형에 따라 달라질 수도 있다. 일반적으로, 복잡한 계산 업무 (예를 들어, 범용 GPU 애플리케이션) 는 다른 애플리케이션들보다 자주 선점될 것으로 예상할 수도 있고, 선점들의 수의 한도가 정해지는 기법들로부터 혜택을 얻을 수도 있다.
도 6 은 본 개시물의 일 예에 따른 방법을 도시하는 플로차트이다. 도 6 의 기법들은, GPU (12) 및/또는 CPU (6) 를 포함하여, 하나 이상의 프로세서들에 의해 이행될 수도 있다.
본 개시물의 일 예에서, GPU (12) 는 커맨드 버퍼에 있는 커맨드들을 실행하도록 구성될 수도 있으며, 커맨드들은 판독-수정-기록 메모리 리소스에 있는 데이터에 대해 동작한다 (600). GPU (12) 는, 제 1 버퍼에, 판독-수정-기록 메모리 리소스의 원래의 데이터를 저장하고 (602), 제 2 버퍼에, 커맨드 버퍼에 있는 커맨드들을 실행함으로써 생성된 임의의 수정된 데이터를 저장하도록 (604) 더 구성될 수도 있다. 본 개시물의 일 예에서, 판독-수정-기록 메모리 리소스는 프레임 버퍼이며, 여기서 제 1 버퍼는 이전의 프레임에 대한 프레임 버퍼의 복사본이고 제 2 버퍼는 현재의 프레임 버퍼이다.
GPU (12) 는 커맨드 버퍼에 있는 모든 커맨드들을 완료하기 전에 커맨드 버퍼에 있는 커맨드들의 실행을 선점하도록 더 구성될 수도 있다 (606). 본 개시물의 일 예에서, GPU (12) 는 커맨드 버퍼에 있는 커맨드들의 완료를 추적하여 모든 커맨드들이 완료되었음을 결정하도록 더 구성될 수도 있다. 실행을 선점한 후에, GPU (12) 는 제 1 버퍼에 있는 원래의 데이터를 이용하여 커맨드 버퍼의 시작부터 커맨드들의 실행을 재시작하도록 더 구성될 수도 있다 (608).
본 개시물의 다른 예에서, GPU (12) 는 메모리에 커맨드 버퍼를 저장하고, 커맨드 버퍼에 있는 커맨드들의 실행을 선점하는 것에 응답하여 이차 커맨드 버퍼에서 커맨드들을 실행하도록 구성될 수도 있다. 본 개시물의 일 예에서, GPU (12) 는 중앙 프로세싱 유닛에서 실행하는 소프트웨어로부터 수신되는 실행을 선점하기 위한 요청에 응답하여 실행을 선점하도록 구성된다. 일 예에서, 소프트웨어는 그래픽 드라이버를 포함한다.
본 개시물의 다른 예에서, GPU (12) 는 커맨드 버퍼가 선점된 횟수를 추적하고, 커맨드 버퍼가 선점된 횟수가 임계치를 초과하는 경우에 선점을 거부하고, 커맨드 버퍼가 선점된 횟수가 임계치 아래인 경우에 선점을 할 수 있게 하도록 구성될 수도 있다.
하나 이상의 예들에서, 위에서 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현된다면, 기능들은 비일시적 컴퓨터-판독가능 매체를 포함하는 제조의 물에 하나 이상의 명령들 또는 코드들로서 저장될 수도 있다. 컴퓨터-판독가능 매체들은 컴퓨터 데이터 저장 매체들을 포함할 수도 있다. 데이터 저장 매체들은 본 개시물에서 설명된 기법들의 구현을 위해 명령들, 코드, 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체들일 수도 있다. 제한하지 않고, 예로서, 그러한 컴퓨터 판독가능 매체는 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 스토리지, 자기 디스크 스토리지, 또는 다른 자기 스토리지 디바이스들, 플래시 메모리, 또는 명령들이나 데이터 구조들의 형태로 원하는 프로그램 코드를 전하거나 저장할 수 있고, 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 본원에서 이용되는 바와 같은 디스크 (disk) 및 디스크 (disc) 는 CD (compact disc), 레이저 디스크, 광 디스크, DVD (digital versatile disc), 플로피 디스크, 및 블루레이 디스크를 포함하는데, 여기서 디스크 (disk) 는 보통 데이터를 자기적으로 재생하며, 반면 디스크 (disc) 는 레이저들을 이용하여 광학적으로 데이터를 재생한다. 위의 조합들도 컴퓨터-판독가능 매체들의 범위 내에 포함되어야 한다.
하나 이상의 DSP 들, 범용 마이크로프로세서들, ASIC 들, FPGA 들, 또는 다른 등가의 집적 또는 이산 로직 회로부와 같은 하나 이상의 프로세서들에 의해 코드가 실행될 수도 있다. 또한, 일부 양상들에서, 본원에 설명된 기능성은 전용 하드웨어 및/또는 소프트웨어 모듈들 내에 제공될 수도 있다. 또한, 본원에서 개시된 기술들은 하나 이상의 회로들 또는 로직 소자들에서 완전히 구현될 수 있다.
본 개시물의 기법들은 무선 핸드셋, 집적 회로 (integrated circuit; IC), 또는 IC 들의 세트 (예를 들어, 칩셋) 를 포함하여, 매우 다양한 디바이스들 또는 장치들로 구현될 수도 있다. 개시된 기술들을 수행하도록 구성된 디바이스들의 기능적 양태를 강조하기 위해 다양한 컴포넌트들, 모듈들, 또는 유닛들이 본 개시에서 설명되었지만, 반드시 상이한 하드웨어 유닛들에 의해 실현될 필요는 없다. 오히려, 상술한 바와 같이, 다양한 유닛들은, 적절한 소프트웨어 및/또는 펌웨어와 연계하여, 코덱 하드웨어 유닛에 통합되거나 또는 상술한 하나 이상의 프로세서들을 포함하여 상호 동작적인 하드웨어 유닛들의 집합에 의해 제공될 수도 있다.
다양한 예들이 설명되었다. 이들 및 다른 실시형태들은 다음의 청구범위 내에 있다.
Claims (35)
- 그래픽 프로세싱의 방법으로서,
그래픽 프로세싱 유닛에 대한 커맨드 버퍼에 있는 커맨드들을 실행하는 단계로서, 상기 커맨드들은 판독-수정-기록 메모리 리소스에 있는 데이터에 대해 동작하는, 상기 커맨드 버퍼에 있는 커맨드들을 실행하는 단계;
제 1 버퍼에, 상기 판독-수정-기록 메모리 리소스의 원래의 데이터를 저장하는 단계;
제 2 버퍼에, 상기 커맨드 버퍼에 있는 상기 커맨드들을 실행함으로써 생성된 임의의 수정된 데이터를 저장하는 단계;
상기 커맨드 버퍼에 있는 모든 커맨드들을 완료하기 전에 상기 커맨드 버퍼에 있는 상기 커맨드들의 실행을 선점하는 (preempting) 단계; 및
실행을 선점한 후에, 상기 제 1 버퍼에 있는 상기 원래의 데이터를 이용하여 상기 커맨드 버퍼의 시작에서 상기 커맨드들의 실행을 재시작하는 단계
를 포함하는, 그래픽 프로세싱의 방법. - 제 1 항에 있어서,
상기 커맨드 버퍼에 있는 상기 커맨드들의 완료를 추적하는 단계를 더 포함하는, 그래픽 프로세싱의 방법. - 제 1 항에 있어서,
메모리에 상기 커맨드 버퍼를 저장하는 단계; 및
상기 커맨드 버퍼에 있는 상기 커맨드들의 실행을 선점하는 것에 응답하여 이차 커맨드 버퍼에 있는 커맨드들을 실행하는 단계
를 더 포함하는, 그래픽 프로세싱의 방법. - 제 1 항에 있어서,
중앙 프로세싱 유닛에서 실행하는 소프트웨어로부터 수신된 실행을 선점하기 위한 요청에 응답하여 상기 커맨드들의 실행을 선점하는 단계를 더 포함하는, 그래픽 프로세싱의 방법. - 제 4 항에 있어서,
상기 소프트웨어는 그래픽 드라이버를 포함하는, 그래픽 프로세싱의 방법. - 제 1 항에 있어서,
상기 판독-수정-기록 메모리 리소스는 프레임 버퍼이고, 상기 제 1 버퍼는 이전의 프레임에 대한 상기 프레임 버퍼의 복사본이고 상기 제 2 버퍼는 현재의 프레임 버퍼인, 그래픽 프로세싱의 방법. - 제 1 항에 있어서,
상기 커맨드 버퍼가 선점된 횟수를 추적하는 단계;
상기 커맨드 버퍼가 선점된 횟수가 임계치를 초과하는 경우에 선점을 거부하는 단계; 및
상기 커맨드 버퍼가 선점된 횟수가 상기 임계치 아래인 경우에 선점을 허용하는 단계
를 더 포함하는, 그래픽 프로세싱의 방법. - 그래픽 프로세싱을 위해 구성된 장치로서,
하나 이상의 프로세서들을 포함하고,
상기 하나 이상의 프로세서들은,
그래픽 프로세싱 유닛에 대한 커맨드 버퍼에 있는 커맨드들을 실행하는 것으로서, 상기 커맨드들은 판독-수정-기록 메모리 리소스에 있는 데이터에 대해 동작하는, 상기 커맨드 버퍼에 있는 커맨드들을 실행하고;
제 1 버퍼에, 상기 판독-수정-기록 메모리 리소스의 원래의 데이터를 저장하며;
제 2 버퍼에, 상기 커맨드 버퍼에 있는 상기 커맨드들을 실행함으로써 생성된 임의의 수정된 데이터를 저장하고;
상기 커맨드 버퍼에 있는 모든 커맨드들을 완료하기 전에 상기 커맨드 버퍼에 있는 상기 커맨드들의 실행을 선점하며;
실행을 선점한 후에, 상기 제 1 버퍼에 있는 상기 원래의 데이터를 이용하여 상기 커맨드 버퍼의 시작에서 상기 커맨드들의 실행을 재시작하도록 구성되는, 그래픽 프로세싱을 위해 구성된 장치. - 제 8 항에 있어서,
상기 하나 이상의 프로세서들은,
상기 커맨드 버퍼에 있는 상기 커맨드들의 완료를 추적하도록 더 구성되는, 그래픽 프로세싱을 위해 구성된 장치. - 제 8 항에 있어서,
상기 하나 이상의 프로세서들은,
메모리에 상기 커맨드 버퍼를 저장하고;
상기 커맨드 버퍼에 있는 상기 커맨드들의 실행을 선점하는 것에 응답하여 이차 커맨드 버퍼에 있는 커맨드들을 실행하도록
더 구성되는, 그래픽 프로세싱을 위해 구성된 장치. - 제 8 항에 있어서,
상기 하나 이상의 프로세서들은 중앙 프로세싱 유닛에서 실행하는 소프트웨어로부터 수신된 실행을 선점하기 위한 요청에 응답하여 상기 커맨드들의 실행을 선점하도록 더 구성되는, 그래픽 프로세싱을 위해 구성된 장치. - 제 11 항에 있어서,
상기 소프트웨어는 그래픽 드라이버를 포함하는, 그래픽 프로세싱을 위해 구성된 장치. - 제 8 항에 있어서,
상기 판독-수정-기록 메모리 리소스는 프레임 버퍼이고, 상기 제 1 버퍼는 이전의 프레임에 대한 상기 프레임 버퍼의 복사본이고 상기 제 2 버퍼는 현재의 프레임 버퍼인, 그래픽 프로세싱을 위해 구성된 장치. - 제 8 항에 있어서,
상기 하나 이상의 프로세서들은,
상기 커맨드 버퍼가 선점된 횟수를 추적하고;
상기 커맨드 버퍼가 선점된 횟수가 임계치를 초과하는 경우에 선점을 거부하며;
상기 커맨드 버퍼가 선점된 횟수가 상기 임계치 아래인 경우에 선점을 허용하도록
더 구성되는, 그래픽 프로세싱을 위해 구성된 장치. - 그래픽 프로세싱을 위해 구성된 장치로서,
그래픽 프로세싱 유닛에 대한 커맨드 버퍼에 있는 커맨드들을 실행하는 수단으로서, 상기 커맨드들은 판독-수정-기록 메모리 리소스에 있는 데이터에 대해 동작하는, 상기 커맨드 버퍼에 있는 커맨드들을 실행하는 수단;
제 1 버퍼에, 상기 판독-수정-기록 메모리 리소스의 원래의 데이터를 저장하는 수단;
제 2 버퍼에, 상기 커맨드 버퍼에 있는 상기 커맨드들을 실행함으로써 생성된 임의의 수정된 데이터를 저장하는 수단;
상기 커맨드 버퍼에 있는 모든 커맨드들을 완료하기 전에 상기 커맨드 버퍼에 있는 상기 커맨드들의 실행을 선점하는 수단; 및
실행을 선점한 후에, 상기 제 1 버퍼에 있는 상기 원래의 데이터를 이용하여 상기 커맨드 버퍼의 시작에서 상기 커맨드들의 실행을 재시작하는 수단
을 포함하는, 그래픽 프로세싱을 위해 구성된 장치. - 제 15 항에 있어서,
상기 커맨드 버퍼에 있는 상기 커맨드들의 완료를 추적하는 수단을 더 포함하는, 그래픽 프로세싱을 위해 구성된 장치. - 제 15 항에 있어서,
메모리에 상기 커맨드 버퍼를 저장하는 수단; 및
상기 커맨드 버퍼에 있는 상기 커맨드들의 실행을 선점하는 것에 응답하여 이차 커맨드 버퍼에 있는 커맨드들을 실행하는 수단
을 더 포함하는, 그래픽 프로세싱을 위해 구성된 장치. - 제 15 항에 있어서,
중앙 프로세싱 유닛에서 실행하는 소프트웨어로부터 수신된 실행을 선점하기 위한 요청에 응답하여 상기 커맨드들의 실행을 선점하는 수단을 더 포함하는, 그래픽 프로세싱을 위해 구성된 장치. - 제 18 항에 있어서,
상기 소프트웨어는 그래픽 드라이버를 포함하는, 그래픽 프로세싱을 위해 구성된 장치. - 제 15 항에 있어서,
상기 판독-수정-기록 메모리 리소스는 프레임 버퍼이고, 상기 제 1 버퍼는 이전의 프레임에 대한 상기 프레임 버퍼의 복사본이고 상기 제 2 버퍼는 현재의 프레임 버퍼인, 그래픽 프로세싱을 위해 구성된 장치. - 제 15 항에 있어서,
상기 커맨드 버퍼가 선점된 횟수를 추적하는 수단;
상기 커맨드 버퍼가 선점된 횟수가 임계치를 초과하는 경우에 선점을 거부하는 수단; 및
상기 커맨드 버퍼가 선점된 횟수가 상기 임계치 아래인 경우에 선점을 허용하는 수단
을 더 포함하는, 그래픽 프로세싱을 위해 구성된 장치. - 명령들을 저장하는 컴퓨터-판독가능 저장 매체로서,
상기 명령들은, 실행되는 경우, 그래픽 프로세싱을 위한 디바이스의 하나 이상의 프로세서들로 하여금,
그래픽 프로세싱 유닛에 대한 커맨드 버퍼에 있는 커맨드들을 실행하는 것으로서, 상기 커맨드들은 판독-수정-기록 메모리 리소스에 있는 데이터에 대해 동작하는, 상기 커맨드 버퍼에 있는 커맨드들을 실행하게 하고;
제 1 버퍼에, 상기 판독-수정-기록 메모리 리소스의 원래의 데이터를 저장하게 하며;
제 2 버퍼에, 상기 커맨드 버퍼에 있는 상기 커맨드들을 실행함으로써 생성된 임의의 수정된 데이터를 저장하게 하고;
상기 커맨드 버퍼에 있는 모든 커맨드들을 완료하기 전에 상기 커맨드 버퍼에 있는 상기 커맨드의 실행을 선점하게 하며;
실행을 선점한 후에, 상기 제 1 버퍼에 있는 상기 원래의 데이터를 이용하여 상기 커맨드 버퍼의 시작에서 상기 커맨드들의 실행을 재시작하게 하는, 컴퓨터-판독가능 저장 매체. - 제 22 항에 있어서,
상기 명령들은, 또한, 상기 하나 이상의 프로세서들로 하여금,
상기 커맨드 버퍼에 있는 상기 커맨드들의 완료를 추적하게 하는, 컴퓨터-판독가능 저장 매체. - 제 22 항에 있어서,
상기 명령들은, 또한, 상기 하나 이상의 프로세서들로 하여금,
메모리에 상기 커맨드 버퍼를 저장하게 하고;
상기 커맨드 버퍼에 있는 상기 커맨드들의 실행을 선점하는 것에 응답하여 이차 커맨드 버퍼에 있는 커맨드들을 실행하게 하는,
컴퓨터-판독가능 저장 매체. - 제 22 항에 있어서,
상기 명령들은, 또한, 상기 하나 이상의 프로세서들로 하여금, 중앙 프로세싱 유닛에서 실행하는 소프트웨어로부터 수신된 실행을 선점하기 위한 요청에 응답하여 상기 커맨드들의 실행을 선점하게 하는, 컴퓨터-판독가능 저장 매체. - 제 25 항에 있어서,
상기 소프트웨어는 그래픽 드라이버를 포함하는, 컴퓨터-판독가능 저장 매체. - 제 22 항에 있어서,
상기 판독-수정-기록 메모리 리소스는 프레임 버퍼이고, 상기 제 1 버퍼는 이전의 프레임에 대한 상기 프레임 버퍼의 복사본이고 상기 제 2 버퍼는 현재의 프레임 버퍼인, 컴퓨터-판독가능 저장 매체. - 제 22 항에 있어서,
상기 명령들은, 또한, 상기 하나 이상의 프로세서들로 하여금,
상기 커맨드 버퍼가 선점된 횟수를 추적하게 하고;
상기 커맨드 버퍼가 선점된 횟수가 임계치를 초과하는 경우에 선점을 거부하게 하며;
상기 커맨드 버퍼가 선점된 횟수가 상기 임계치 아래인 경우에 선점을 허용하게 하는,
컴퓨터-판독가능 저장 매체. - 그래픽 프로세싱 유닛으로서,
그래픽 프로세싱 유닛에 대한 커맨드 버퍼에 있는 커맨드들을 실행하는 것으로서, 상기 커맨드들은 판독-수정-기록 메모리 리소스에 있는 데이터에 대해 동작하는, 상기 커맨드 버퍼에 있는 커맨드들을 실행하고;
제 1 버퍼에, 상기 판독-수정-기록 메모리 리소스의 원래의 데이터를 저장하며;
제 2 버퍼에, 상기 커맨드 버퍼에 있는 상기 커맨드들을 실행함으로써 생성된 임의의 수정된 데이터를 저장하고;
상기 커맨드 버퍼에 있는 모든 커맨드들을 완료하기 전에 상기 커맨드 버퍼에 있는 상기 커맨드들의 실행을 선점하며;
실행을 선점한 후에, 상기 제 1 버퍼에 있는 상기 원래의 데이터를 이용하여 상기 커맨드 버퍼의 시작에서 상기 커맨드들의 실행을 재시작하도록
구성되는, 그래픽 프로세싱 유닛. - 제 29 항에 있어서,
상기 커맨드 버퍼에 있는 상기 커맨드들의 완료를 추적하도록 더 구성되는, 그래픽 프로세싱 유닛. - 제 29 항에 있어서,
메모리에 상기 커맨드 버퍼를 저장하고;
상기 커맨드 버퍼에 있는 상기 커맨드들의 실행을 선점하는 것에 응답하여 이차 커맨드 버퍼에 있는 커맨드들을 실행하도록
더 구성되는, 그래픽 프로세싱 유닛. - 제 29 항에 있어서,
중앙 프로세싱 유닛에서 실행하는 소프트웨어로부터 수신된 실행을 선점하기 위한 요청에 응답하여 상기 커맨드들의 실행을 선점하도록 더 구성되는, 그래픽 프로세싱 유닛. - 제 32 항에 있어서,
상기 소프트웨어는 그래픽 드라이버를 포함하는, 그래픽 프로세싱 유닛. - 제 29 항에 있어서,
상기 판독-수정-기록 메모리 리소스는 프레임 버퍼이고, 상기 제 1 버퍼는 이전의 프레임에 대한 상기 프레임 버퍼의 복사본이고 상기 제 2 버퍼는 현재의 프레임 버퍼인, 그래픽 프로세싱 유닛. - 제 29 항에 있어서,
상기 커맨드 버퍼가 선점된 횟수를 추적하고;
상기 커맨드 버퍼가 선점된 횟수가 임계치를 초과하는 경우에 선점을 거부하며;
상기 커맨드 버퍼가 선점된 횟수가 상기 임계치 아래인 경우에 선점을 허용하도록
더 구성되는, 그래픽 프로세싱 유닛.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/023,170 US9230518B2 (en) | 2013-09-10 | 2013-09-10 | Fault-tolerant preemption mechanism at arbitrary control points for graphics processing |
US14/023,170 | 2013-09-10 | ||
PCT/US2014/054271 WO2015038429A1 (en) | 2013-09-10 | 2014-09-05 | Fault-tolerant preemption mechanism at arbitrary control points for graphics processing |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20160038071A true KR20160038071A (ko) | 2016-04-06 |
KR101697910B1 KR101697910B1 (ko) | 2017-01-18 |
Family
ID=51627352
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020167007543A KR101697910B1 (ko) | 2013-09-10 | 2014-09-05 | 그래픽 프로세싱을 위한 임의적 제어 지점들에서의 결함-허용 선점 메커니즘 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9230518B2 (ko) |
EP (1) | EP3044754B1 (ko) |
JP (1) | JP6001221B1 (ko) |
KR (1) | KR101697910B1 (ko) |
CN (1) | CN105518742B (ko) |
WO (1) | WO2015038429A1 (ko) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9418397B2 (en) * | 2013-10-25 | 2016-08-16 | Harman International Industries, Incorporated | Start-up processing task distribution among processing units |
US9690928B2 (en) | 2014-10-25 | 2017-06-27 | Mcafee, Inc. | Computing platform security methods and apparatus |
GB2536964B (en) * | 2015-04-02 | 2019-12-25 | Ge Aviat Systems Ltd | Avionics display system |
JP2016212874A (ja) * | 2015-05-08 | 2016-12-15 | 飛捜股▲ふん▼有限公司 | アプリケーションプログラムとバーチャルマシンとの間のコミュニケーションのシステムと方法 |
CN105139356B (zh) * | 2015-08-25 | 2018-06-22 | 北京锤子数码科技有限公司 | 一种图像数据的毛玻璃效果处理方法和装置 |
US9842376B2 (en) * | 2015-09-29 | 2017-12-12 | Qualcomm Incorporated | Graphics processing unit preemption with pixel tile level granularity |
GB2545508B (en) | 2015-12-18 | 2019-04-10 | Imagination Tech Ltd | Controlling operation of a GPU |
JP6821924B2 (ja) * | 2016-03-02 | 2021-01-27 | 株式会社リコー | 画像処理装置、画像処理方法 |
US10198784B2 (en) | 2016-07-29 | 2019-02-05 | Microsoft Technology Licensing, Llc | Capturing commands in a multi-engine graphics processing unit |
US10402345B2 (en) * | 2016-10-28 | 2019-09-03 | Intel Corporation | Deferred discard in tile-based rendering |
US10657619B2 (en) * | 2017-06-02 | 2020-05-19 | Apple Inc. | Task execution on a graphics processor using indirect argument buffers |
US10628274B2 (en) | 2017-12-05 | 2020-04-21 | Qualcomm Incorporated | Self-test during idle cycles for shader core of GPU |
GB2572404B (en) * | 2018-03-29 | 2020-04-15 | Imagination Tech Ltd | Method and system for controlling processing |
US11474917B2 (en) | 2018-04-27 | 2022-10-18 | Hewlett-Packard Development Company, L.P. | Failure shield |
US10269167B1 (en) * | 2018-05-21 | 2019-04-23 | Apple Inc. | Indirect command buffers for graphics processing |
US10672099B2 (en) * | 2018-06-01 | 2020-06-02 | Apple Inc. | Memory cache management for graphics processing |
US10981059B2 (en) * | 2019-07-03 | 2021-04-20 | Sony Interactive Entertainment LLC | Asset aware computing architecture for graphics processing |
CN111080505B (zh) * | 2019-12-27 | 2024-04-12 | 芯瞳半导体技术(山东)有限公司 | 一种提高图元装配效率的方法、装置及计算机存储介质 |
US11907764B2 (en) * | 2020-05-20 | 2024-02-20 | GE Precision Healthcare LLC | Managing computer resources for clinical applications |
US11605366B2 (en) * | 2020-09-10 | 2023-03-14 | Microchip Technology Incorporated | LCC (low cost controllerless) graphics processing |
US20230084603A1 (en) * | 2021-09-14 | 2023-03-16 | Arm Limited | Methods and apparatus for context switching |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110084977A1 (en) * | 2009-10-13 | 2011-04-14 | Duluk Jr Jerome Francis | State shadowing to support a multi-threaded driver environment |
US20130124838A1 (en) * | 2011-11-10 | 2013-05-16 | Lacky V. Shah | Instruction level execution preemption |
US20130162661A1 (en) * | 2011-12-21 | 2013-06-27 | Nvidia Corporation | System and method for long running compute using buffers as timeslices |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7234144B2 (en) * | 2002-01-04 | 2007-06-19 | Microsoft Corporation | Methods and system for managing computational resources of a coprocessor in a computing system |
US9158574B2 (en) * | 2002-11-18 | 2015-10-13 | Arm Limited | Handling interrupts in data processing |
US6911983B2 (en) * | 2003-03-12 | 2005-06-28 | Nvidia Corporation | Double-buffering of pixel data using copy-on-write semantics |
US7545381B2 (en) * | 2005-11-10 | 2009-06-09 | Via Technologies, Inc. | Interruptible GPU and method for context saving and restoring |
US8310491B2 (en) * | 2007-06-07 | 2012-11-13 | Apple Inc. | Asynchronous notifications for concurrent graphics operations |
CA2793537A1 (en) | 2010-04-13 | 2011-10-20 | Et International, Inc. | Runspace method, system and apparatus |
US20120188259A1 (en) | 2010-12-13 | 2012-07-26 | Advanced Micro Devices, Inc. | Mechanisms for Enabling Task Scheduling |
US9727385B2 (en) * | 2011-07-18 | 2017-08-08 | Apple Inc. | Graphical processing unit (GPU) implementing a plurality of virtual GPUs |
US8793696B2 (en) | 2011-10-13 | 2014-07-29 | Google, Inc. | Dynamic scheduling for frames representing views of a geographic information environment |
US20130132711A1 (en) | 2011-11-22 | 2013-05-23 | Lacky V. Shah | Compute thread array granularity execution preemption |
US9164935B2 (en) * | 2013-01-04 | 2015-10-20 | International Business Machines Corporation | Determining when to throttle interrupts to limit interrupt processing to an interrupt processing time period |
-
2013
- 2013-09-10 US US14/023,170 patent/US9230518B2/en active Active
-
2014
- 2014-09-05 EP EP14777214.9A patent/EP3044754B1/en not_active Not-in-force
- 2014-09-05 KR KR1020167007543A patent/KR101697910B1/ko active IP Right Grant
- 2014-09-05 JP JP2016534126A patent/JP6001221B1/ja not_active Expired - Fee Related
- 2014-09-05 CN CN201480049417.5A patent/CN105518742B/zh active Active
- 2014-09-05 WO PCT/US2014/054271 patent/WO2015038429A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110084977A1 (en) * | 2009-10-13 | 2011-04-14 | Duluk Jr Jerome Francis | State shadowing to support a multi-threaded driver environment |
US20130124838A1 (en) * | 2011-11-10 | 2013-05-16 | Lacky V. Shah | Instruction level execution preemption |
US20130162661A1 (en) * | 2011-12-21 | 2013-06-27 | Nvidia Corporation | System and method for long running compute using buffers as timeslices |
Also Published As
Publication number | Publication date |
---|---|
JP2016538646A (ja) | 2016-12-08 |
WO2015038429A1 (en) | 2015-03-19 |
EP3044754A1 (en) | 2016-07-20 |
US9230518B2 (en) | 2016-01-05 |
US20150070369A1 (en) | 2015-03-12 |
JP6001221B1 (ja) | 2016-10-05 |
CN105518742B (zh) | 2017-04-26 |
EP3044754B1 (en) | 2018-01-17 |
KR101697910B1 (ko) | 2017-01-18 |
CN105518742A (zh) | 2016-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101697910B1 (ko) | 그래픽 프로세싱을 위한 임의적 제어 지점들에서의 결함-허용 선점 메커니즘 | |
EP3257024B1 (en) | Hybrid rendering in graphics processing | |
US9928565B2 (en) | Flex rendering based on a render target in graphics processing | |
US9117302B2 (en) | Switching between direct rendering and binning in graphics processing using an overdraw tracker | |
KR102614847B1 (ko) | 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법 | |
EP3427229B1 (en) | Visibility information modification | |
US9324127B2 (en) | Techniques for conservative rasterization | |
US10694197B2 (en) | Composition based dynamic panel mode switch | |
US10416808B2 (en) | Input event based dynamic panel mode switch | |
WO2024055221A1 (en) | Fast msaa techniques for graphics processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
A302 | Request for accelerated examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |