KR20150036726A - 그래픽 프로세싱 유닛 명령 스트림들을 스케줄링하기 위한 연기된 선점 기법들 - Google Patents

그래픽 프로세싱 유닛 명령 스트림들을 스케줄링하기 위한 연기된 선점 기법들 Download PDF

Info

Publication number
KR20150036726A
KR20150036726A KR20157004395A KR20157004395A KR20150036726A KR 20150036726 A KR20150036726 A KR 20150036726A KR 20157004395 A KR20157004395 A KR 20157004395A KR 20157004395 A KR20157004395 A KR 20157004395A KR 20150036726 A KR20150036726 A KR 20150036726A
Authority
KR
South Korea
Prior art keywords
gpu
instruction stream
execution
instruction
stream
Prior art date
Application number
KR20157004395A
Other languages
English (en)
Other versions
KR101770900B1 (ko
Inventor
에두아르두스 에이 메츠
나이젤 테렌스 풀
콜린 크리스토퍼 샤프
앤드류 그루버
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20150036726A publication Critical patent/KR20150036726A/ko
Application granted granted Critical
Publication of KR101770900B1 publication Critical patent/KR101770900B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)
  • Processing Or Creating Images (AREA)

Abstract

이 개시물은 GPU 상에서의 실행을 위해 그래픽 프로세싱 유닛 (GPU) 명령 스트림들을 스케줄링하기 위한 연기된 선점 기법들을 지향한다. 연기된-선점 스케줄링을 수행하도록 GPU 를 제어하도록 구성되는 호스트 GPU 가 설명된다. 예를 들어, 호스트 CPU 는, 선점 통지를 수신하는 것에 응답하여 선점이 발생하도록 허용되는 하나 이상의 로케이션들인 것으로서 GPU 명령 스트림에서 하나 이상의 로케이션들을 선택하고, 그 선택된 하나 이상의 로케이션들에 기초하여 GPU 명령 스트림에 하나 이상의 토큰들을 배치할 수도 있다. 토큰들은, 선택된 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 GPU 에 대해 나타낼 수도 있다. 이 개시물은, GPU 명령 스트림에 배치된 하나 이상의 토큰들에 기초하여 GPU 명령 스트림의 실행을 선택하도록 구성된 GPU 를 더 설명한다.

Description

그래픽 프로세싱 유닛 명령 스트림들을 스케줄링하기 위한 연기된 선점 기법들{DEFERRED PREEMPTION TECHNIQUES FOR SCHEDULING GRAPHICS PROCESSING UNIT COMMAND STREAMS}
본 개시물은 그래픽 프로세싱 시스템들에 관한 것이고, 보다 구체적으로는, 명령 스트림들을 이용하는 그래픽 프로세싱 시스템들에 관한 것이다.
컴퓨팅 디바이스들은 종종 디스플레이를 위해 그래픽 데이터의 렌더링 (rendering) 을 가속화하기 위해 그래픽 프로세싱 유닛 (GPU) 을 이용한다. 이러한 컴퓨팅 디바이스들은 예를 들어, 컴퓨터 워크스테이션들, 모바일 전화기들, 예컨대, 스마트폰들, 내장 시스템들, 퍼스널 컴퓨터들, 태블릿 컴퓨터들, 및 비디오 게임 콘솔들을 포함할 수도 있다. GPU 들은 통상적으로, 그래픽 프로세싱 명령들을 실행하기 위해 함께 동작하는 복수의 프로세싱 스테이지들을 포함하는 그래픽 프로세싱 파이프라인 (pipeline) 을 실행한다. 호스트 (host) 중앙 처리 유닛 (CPU) 은 하나 이상의 그래픽 프로세싱 명령들을 GPU 에 발행함으로써 GPU 의 동작을 제어할 수도 있다. 현대의 GPU 들은 통상적으로 각각 실행 동안 GPU 를 이용할 필요가 있을 수도 있는 다중 애플리케이션들을 동시에 실행하는 것이 가능하다. 호스트 CPU 상에서 동시에 실행되고 있는 상이한 애플리케이션들 사이의 GPU 자원의 중재 (arbitration) 는, 특히 어떤 애플리케이션들이 GPU 에 대한 높은 우선순위 액세스를 필요로할 수도 있는 경우들에서, 호스트 CPU 에 대해 심각한 난제를 야기할 수도 있다.
본 개시물은 GPU 상에서의 실행을 위해 그래픽 프로세싱 유닛 (graphics processing unit; GPU) 명령 스트림들 (command streams) 을 스케줄링 (scheduling) 하기 위한 연기된 선점 기법들 (deferred preemption techniques) 을 지향한다. 일부 예들에서, 이 개시물의 기술들은 선점이 발생하는 것이 허용되는 GPU 명령 스트림에서의 특정 로케이션들 (locations) 을 나타내기 위해 GPU 명령 스트림에 하나 이상의 토큰들 (tokens) 을 배치하는 것을 포함할 수도 있다. GPU 가 GPU 명령 스트림을 프로세싱하고 있고 다른 GPU 명령 스트림을 실행하기 위해 GPU 명령 스트림의 실행을 선점 (preempt) 하기 위한 호스트 디바이스로부터의 통지 (notification) 를 수신할 때, GPU 가 선점이 발생하는 것이 허용되는 GPU 명령 스트림에서의 로케이션에 도달할 때까지 GPU 는 GPU 명령 스트림에서 명령들을 프로세싱하는 것을 계속할 수도 있다. 선점이 발생하는 것이 허용되는 로케이션에 도달시, GPU 는 그 다른 GPU 명령 스트림을 실행하는 것으로 전환할 수도 있다. GPU 명령 스트림들은, 일부 예들에서, 상이한 그래픽 프로세싱 컨텍스트들 (contexts) 과 연관될 수도 있다.
일예에서, 이 개시물은, GPU 명령 스트림의 실행을 선점하기 위한 프로세서로부터의 통지를 수신하는 것에 응답하여, GPU 명령 스트림을 프로세싱하는 GPU 가 GPU 명령 스트림의 실행을 선점하도록 허용되는 하나 이상의 로케이션들인 것으로서의 하나 이상의 로케이션들을 GPU 명령 스트림에서, 프로세서로, 선택하는 단계를 포함하는 방법을 기술한다. 이 방법은, 프로세서로, 그 선택된 하나 이상의 로케이션들에 기초하여 GPU 명령 스트림에 하나 이상의 토큰들을 배치하는 것을 더 포함한다. 하나 이상의 토큰들은, GPU 명령 스트림에서의 선택된 하나 이상의 로케이션들에서 선점이 발생하는 것이 허용되는 것을 GPU 에 대해 나타낸다.
다른 예에서, 이 개시물은, GPU 명령 스트림의 실행을 선점하기 위한 프로세서로부터의 통지를 수신하는 것에 응답하여 GPU 명령 스트림을 프로세싱하는 GPU 가 GPU 명령 스트림의 실행을 선점하도록 허용되는 하나 이상의 로케이션들인 것으로서 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택하도록 구성된 프로세서를 포함하는 디바이스를 기술한다. 이 프로세서는, 선택된 하나 이상의 로케이션들에 기초하여 GPU 명령 스트림에 하나 이상의 토큰들을 배치하도록 더 구성된다. 하나 이상의 토큰들은 GPU 명령 스트림에서의 선택된 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 GPU 에 대해 나타낸다.
또 다른 예에서, 본 개시물은, GPU 명령 스트림의 실행을 선점하기 위한 통지를 수신하는 것에 응답하여 GPU 명령 스트림을 프로세싱하는 GPU 가 GPU 명령 스트림의 실행을 선점하도록 허용되는 하나 이상의 로케이션들인 것으로서 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택하는 수단을 포함하는 장치를 기술한다. 이 장치는, 선택된 하나 이상의 로케이션들에 기초하여 GPU 명령 스트림에 하나 이상의 토큰들을 배치하는 수단을 더 포함한다. 하나 이상의 토큰들은 GPU 명령 스트림에서의 선택된 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 GPU 에 대해 나타낸다.
다른 예에서, 이 개시물은, 실행될 때, 하나 이상의 프로세스들로 하여금, GPU 명령 스트림의 실행을 선점하기 위한 하나 이상의 프로세서들로부터의 통지를 수신하는 것에 응답하여 GPU 명령 스트림을 프로세싱하는 GPU 가 GPU 명령 스트림의 실행을 선점하도록 허용되는 하나 이상의 로케이션들인 것으로서 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택하게 하는 명령들을 저장하는 컴퓨터 판독가능 저장 매체를 기술한다. 명령들은 또한, 하나 이상의 프로세서들로 하여금, 선택된 하나 이상의 로케이션들에 기초하여 GPU 명령 스트림에 하나 이상의 토큰들을 배치하게 한다. 하나 이상의 토큰들은 GPU 명령 스트림에서의 선택된 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 상기 GPU 에 대해 나타낸다.
또 다른 예에서, 이 개시물은, GPU로, GPU 명령 스트림에 포함된 하나 이상의 토큰들에 기초하여 GPU 명령 스트림의 실행을 선점하는 단계를 포함하는 방법을 기술한다. 하나 이상의 토큰들은 GPU 명령 스트림에서의 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 나타낸다.
또 다른 예에서, 이 개시물은, GPU 명령 스트림에 포함된 하나 이상의 토큰들에 기초하여 GPU 명령 스트림의 실행을 선점하도록 구성된 GPU 를 포함한다. 하나 이상의 토큰들은 GPU 명령 스트림에서의 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 나타낸다.
또 다른 예에서, 이 개시물은 GPU 명령 스트림을 실행하는 수단을 포함하는 장치를 기술한다. 장치는, GPU 명령 스트림에 포함된 하나 이상의 토큰들에 기초하여 GPU 명령 스트림의 실행을 선점하는 수단을 더 포함한다. 하나 이상의 토큰들은 GPU 명령 스트림에서의 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 나타낸다.
또 다른 예에서, 이 개시물은, 실행될 때, GPU 로 하여금, GPU 명령 스트림에 포함된 하나 이상의 토큰들에 기초하여 GPU 명령 스트림의 실행을 선점하게 하는 명령들을 저장하는 컴퓨터 판독가능 저장 매체를 기술한다. 하나 이상의 토큰들은 GPU 명령 스트림에서의 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 나타낸다
이 개시물의 하나 이상의 예들의 상세들은 첨부 도면들 및 이하의 상세한 설명에서 전개된다. 이 개시물의 다른 특징들, 목적들, 및 이점들은 상세한 설명과 도면들로부터, 그리고 청구항들로부터 명백해질 것이다.
도 1 은, 이 개시물의 연기된-선점형 GPU 명령 스트림 스케줄링 기법들을 구현하기 위해 이용될 수도 있는 예시적인 컴퓨팅 디바이스를 나타내는 블록도이다.
도 2 는 도 1 에서의 컴퓨팅 디바이스에서의 CPU, GPU, 및 메모리를 더 자세히 나타내는 블록도이다.
도 3 은 이 개시물에 따라 토큰들이 배치될 수도 있는 GPU 명령 스트림을 나타내는 개념도이다.
도 4 는 이 개시물에 따라 도 3 의 GPU 명령 스트림에 토큰들을 배치하기 위한 기법을 나타내는 개념도이다.
도 5 는 이 개시물에 따라 도 3 의 GPU 명령 스트림에 토큰들을 배치하기 위한 다른 예시적인 기법을 나타내는 개념도이다.
도 6 은 이 개시물에 따라 연기된-선점형 스케줄링을 수행하기 위해 GPU 를 제어하기 위한 예시적인 기법을 나타내는 흐름도이다.
도 7 은 이 개시물에 따라 GPU 명령 스트림에 배치된 토큰들에 기초하여 명령 스트림들의 실행을 선점하기 위한 예시적인 기법을 나타내는 흐름도이다.
도 8 은 이 개시물에 따라 GPU 명령 스트림들을 프로세싱하기 위한 예시적인 기법을 나타내는 흐름도이다.
도 9 는 도 8 에 나타난 기법에 따라 명령 스트림들을 프로세싱할 때 선점 통지를 핸들링 (handling) 하기 위한 예시적인 기술을 나타내는 흐름도이다.
도 10 은 이 개시물에 따라 GPU 명령 스트림들을 프로세싱하기 위한 다른 예시적인 기법을 나타내는 흐름도이다.
도 11 은 도 10 에 나타난 기법에 따라 명령 스트림들을 프로세싱할 때 선점 통지들을 핸들링하기 위한 예시적인 기법을 나타내는 흐름도이다.
이 개시물은 GPU 상에서의 실행을 위해 그래픽 프로세싱 유닛 (GPU) 명령 스트림들을 스케줄링하기 위한 연기된 선점 기법들에 관한 것이다. 오늘 날, GPU 들은 사용자 인터페이스 (UI) 렌더링을 위해 점점 더 이용되고 있다. UI 명령 스트림들은 통상적으로, 사용자들이 UI 에서 기대하게 되는 적절한 시각적 효과들 및 응답성을 달성하도록 시기 적절하게 서비스되어야할 필요가 있다. 높은 우선순위의 UI 명령 스트림이 GPU 상에서 실행되도록 호스트 CPU 에 의해 큐될 때, GPU 는 예를 들어 비-UI 그래픽 컨텍스트 또는 일반적 목적의 연산 태스크 (즉, 그래픽 프로세싱 유닛 상의 일반적 목적의 연산 (GPGPU) 태스크) 를 수행하기 위해 GPU 를 이용하는 컨텍스트와 같은 낮은 우선순위 (priority) 를 갖는 다른 컨텍스트와 연관된 다른 큐된 (queued) 명령 스트림을 실행하고 있을 수도 있다. 상위-우선순위 (higher-priority) UI 명령 스트림을 실행하기 이전에 하위-우선순위 (lower-priority) 가 실행 완료하기를 기다리는 것은, 일부 경우들에서, UI 에 관하여 수용가능한 사용자 경험 (user experience) 을 산출하지 못할 수도 있다.
이 문제에 대한 한 가지 솔루션 (solution) 은 호스트 CPU 로 하여금, 하위-우선순위 명령 스트림의 실행을 선점하고, 그 호스트 CPU 가 상위-우선순위 명령 스트림이 실행될 필요가 있다고 결정할 때마다 상위-우선순위 명령 스트림을 서비스 (service) 하는 것을 허용하는 것이다. 하지만, 이러한 솔루션은, GPU 명령 스트림에서의 임의의 포인트들 (arbitrary points) 에서 컨텍스트 스위칭 (context switching) 을 수행할 필요가 있는 오버헤드 (overhead) (예를 들어, 추가적인 프로세싱 시간, 추가적인 메모리 대역폭 사용, 및/또는 추가적인 메모리 사용) 의 면에서 고비용 (expensive) 일 수 있다. 예를 들어, 상위-우선순위 명령 스트림이 하위-우선순위 명령 스트림에 대해 선점할 필요가 있을 때마다, 하위-우선순위 명령 스트림에 대한 GPU 상태는 상위-우선순위 명령 스트림을 실행하기 이전에 저장되고 상위-우선순위 명령 스트림을 실행한 후에 후속하여 복원될 필요가 있을 수도 있다. 이러한 컨텍스트 스위칭을 수행하기 위해 필요한 추가적인 오버헤드는 GPU 명령 스트림에서의 다른 로케이션들보다 GPU 명령 스트림에서의 특정 로케이션들에서 고비용일 수도 있다. 따라서, GPU 명령 스트림에서의 임의의 포인트들에서 선점이 발생하도록 허용하는 것은, 컨텍스트 스위칭으로 인한 오버헤드가 비교적 고비용인 로케이션들에서의 GPU 명령 스트림의 선점을 초래할 수도 있고, 이에 의해, GPU 의 전체 성능을 감소시킬 수도 있다.
이 개시물에서 설명된 다양한 예들에 따르면, 연기된-선점형 스케줄링 기법들 (deferred-preemptive scheduling techniques) 이 그래픽 프로세싱 시스템에 대해 제공된다. 연기된-선점형 스케줄링 기법들은 상위-우선순위 명령 스트림이 하위-우선순위 명령 스트림 내에서의 특정 선점 포인트들에서 하위-우선순위 명령 스트림의 실행에 대해 선점하는 것을 허용하기 위해 이용될 수도 있다. 즉, 이 개시물의 기법들은 호스트 CPU 가, 선점이 발생하도록 허용되는 하위-우선순위 명령 스트림에서의 특정 로케이션들을 나타내기 위해 하위-우선순위 명령 스트림에 하나 이상의 토큰들을 배치하는 것을 허용할 수도 있다. 하위-우선순위 명령 스트림이 CPU 상에서 실행되고 있고 GPU 명령 엔진이 상위-우선순위 명령 스트림이 실행될 준비가 되었다는 것을 나타내는 호스트 CPU 로부터의 신호를 수신할 때, 그 명령 엔진은 하위-우선순위 명령 스트림에서 다음 선점 포인트가 맞닥뜨려질 때까지 하위-우선순위 명령 스트림의 선점을 연기 (defer) 할 수도 있다.
호스트 CPU 는, 일부 경우들에서, 선점으로 인한 오버헤드 (예를 들어, 추가적인 프로세싱 시간, 추가적인 메모리 대역폭 사용, 및/또는 추가적인 메모리 사용) 가, 하위-우선순위 명령 스트림에서의 다른 위치들에서의 선점으로 인해 발생할 수도 있는 오버헤드에 비해 상대적으로 작은 하위-우선순위 명령 스트림에서의 로케이션들에 선점 포인트들을 배치한다. 선점 오버헤드가 비교적 저렴한 (inexpensive) 하위-우선순위 명령 스트림 내의 그들 로케이션들로 선점을 연기함으로써, 이 개시물의 기법들은, GPU 상에서 실행되는 상위-우선순위 명령 스트림 (예를 들어, UI 명령 스트림) 이 다른 하위-우선순위 명령 스트림들에 대해 선점할 필요가 있을 수도 있는 그래픽 프로세싱 시스템의 전체 성능을 향상시키는 것이 가능할 수도 있다.
도 1 은 이 개시물의 연기된-선점 GPU 명령 스트림 스케줄링 기법들을 구현하는데 사용될 수도 있는 예시적인 컴퓨팅 디바이스 (2) 를 나타내는 블록도이다. 컴퓨팅 디바이스 (2) 는 퍼스널 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 컴퓨터 워크스테이션, 비디오 게임 플랫폼 또는 콘솔, (예를 들어, 모바일 전화기, 셀룰러 폰, 위성 전화기, 및/또는 이동 전화 헤드셋과 같은) 무선 통신 디바이스, 랜드라인 전화기, 인터넷 전화기, 포터블 비디오 게임 디바이스 또는 개인 휴대정보 단말기 (PDA) 와 같은 헨드헬드 디바이스, 퍼스널 뮤직 플레이어, 비디오 플레이어, 디스플레이 디바이스, 텔레비젼, 텔레비젼 셋톱 박스, 서버, 중계 네트워크 디바이스, 메인프레임 컴퓨터 또는 그래픽 데이터를 프로세싱 및/또는 디스플레이하는 임의의 다른 유형의 디바이스를 포함할 수도 있다.
도 1 의 예에 도시된 바와 같이, 컴퓨팅 디바이스 (2) 는 사용자 입력 인터페이스 (4), CPU (6), 메모리 제어기 (8), 시스템 메모리 (10), 그래픽 프로세싱 유닛 (GPU) (12), GPU 캐시 (14), 디스플레이 인터페이스 (16), 디스플레이 (18) 및 버스 (20) 를 포함한다. 사용자 입력 인터페이스 (4), CPU (6), 메모리 제어기 (8), GPU (12) 및 디스플레이 인터페이스 (16) 는 버스 (20) 를 이용하여 서로 통신할 수도 있다. 버스들 (20) 는 제 3 세대 버스 (예를 들어, HyperTransport 버스 또는 InfiniBand 버스), 제 2 세대 버스 (예를 들어, 어드밴스드 그래픽 포트 버스, PCI (Peripheral Component Interconnect) 익스프레스 버스, 또는 AXI (Advanced eXentisible Interface) 버스) 또는 버스 또는 디바이스 상호연결의 다른 유형과 같은, 다양한 버스 구조들 중 어느 것일 수도 있다. 도 1 에 도시된 상이한 컴포넌트들 사이의 통신 인터페이스들 및 버스들의 특정 구성은 단지 예시일 뿐이고, 동일하거나 상이한 컴포넌트들을 갖는 컴퓨팅 디바이스들의 다른 구성들 및/또는 다른 그래픽 프로세싱 시스템들이 이 개시물의 기법들을 구현하는데 사용될 수도 있음을 유념해야 한다.
CPU (6) 는 컴퓨팅 디바이스 (2) 의 동작을 제어하는 일반적 목적 또는 특수 목적 프로세서를 포함할 수도 있다. 사용자는 CPU (6) 로 하여금 하나 이상의 소프트웨어 애플리케이션들을 실행하게 하기 위한 입력을 컴퓨팅 디바이스 (2) 에 제공할 수도 있다. CPU (6) 상에서 실행되는 소프트웨어 애플리케이션들은, 예를 들어, 오퍼레이팅 시스템, 워드 프로세서 애플리케이션, 이메일 애플리케이션, 스프레드 시트 애플리케이션, 미디어 플레이어 애플리케이션, 비디오 게임 애플리케이션, 그래픽 사용자 인터페이스 애플리케이션 또는 다른 프로그램을 포함할 수도 있다. 사용자는 키보드, 마우스, 마이크로폰, 터치 패드 또는, 사용자 입력 인터페이스 (4) 를 통해 컴퓨팅 디바이스 (2) 에 커플링되는 다른 입력 디바이스와 같은 하나 이상의 입력 디바이스들 (도시되지 않음) 을 통해 컴퓨팅 디바이스 (2) 에 입력을 제공할 수도 있다.
CPU (6) 상에서 실행되는 소프트웨어 애플리케이션들은 디스플레이 (18) 에의 그래픽 데이터의 렌더링을 야기하도록 CPU (6) 에 지시하는 하나 이상의 그래픽 렌더링 명령들을 포함할 수도 있다. 일부 예들에서, 소프트웨어 명령들은 예를 들어 오픈 그래픽 라이브러리 (OpenGL®) API, 오픈 그래픽 라이브러리 임베딩된 시스템들 (OpenGL ES) API, Direct3D API, X3D API, RenderMan API, WebGL API, 또는 임의의 다른 공중 또는 사설 표준 그래픽 API 와 같은 그래픽 애플리케이션 프로그래밍 인터페이스 (API) 에 따를 수도 있다. 그래픽 렌더링 명령들을 프로세싱하기 위해서, CPU (6) 는 GPU (12) 로 하여금 그래픽 데이터의 렌더링의 일부 또는 전부를 수행하게 하는 하나 이상의 그래픽 렌더링 명령들을 GPU (12) 에 발행할 수도 있다. 일부 예들에서, 렌더링될 그래픽 데이터는 그래픽 프리미티브들 (primitives), 예를 들어 포인트들, 라인들, 삼각형들, 사변형들, 삼각형 스트립들 등을 포함할 수도 있다.
메모리 제어기 (8) 는 시스템 메모리 (10) 로 들어가고 이 메모리로부터 나오는 데이터의 전달을 용이하게 한다. 예를 들어, 메모리 제어기 (8) 는 메모리 판독 및 기록 명령들을 수신하고, 컴퓨팅 디바이스 (2) 에서의 컴포넌트들에 대해 메모리 서비스들을 제공하기 위해 메모리 시스템 (10) 에 관한 이러한 명령들에 대해 서비스할 수도 있다. 메모리 제어기 (8) 는 시스템 메모리 (10) 에 통신가능하게 커플링된다. 도 1 의 예시적인 컴퓨팅 디바이스 (2) 에서는 메모리 제어기 (8) 가 CPU (6) 및 시스템 메모리 (10) 양자 모두와 분리된 프로세싱 모듈인 것으로서 도시되지만, 다른 예들에서, 메모리 제어기 (8) 의 기능성의 일부 또는 전부가 CPU (6) 및 시스템 메모리 (10) 의 일방 또는 양방 상에서 구현될 수도 있다.
시스템 메모리 (10) 는 CPU (6) 에 의한 실행을 위해 액세스 가능한 프로그램 모듈들 및/또는 명령들 및/또는 CPU (6) 상에서 실행되는 프로그램들에 의한 사용을 위한 데이터를 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 사용자 애플리케이션들 및 이 애플리케이션들과 연관된 그래픽 데이터를 저장할 수도 있다. 시스템 메모리 (10) 는 컴퓨팅 디바이스 (2) 의 다른 컴포넌트들에 의한 사용을 위한 및/또는 이 컴포넌트들에 의해 생성된 정보를 추가적으로 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 GPU (12) 에 대한 디바이스 메모리로서 작용할 수도 있고, GPU (12) 에 의해 동작되는 데이터 뿐만 아니라 GPU (12) 에 의해 수행된 동작들로부터 유발되는 데이터를 저장할 수도 있다. 예를 들어, 시스템 메모리 (10) 는 텍스처 (texture) 버퍼들, 심도 버퍼들, 스텐실 버퍼들, 버텍스 버퍼들, 프레임 버퍼들 등의 임의의 조합을 저장할 수도 있다. 또한, 시스템 메모리 (10) 는 GPU (12) 에 의한 프로세싱을 위해 명령 스트림들을 저장할 수도 있다. 시스템 메모리 (10) 는, 예를 들어 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 판독 전용 메모리 (ROM), 소거가능한 프로그램가능 ROM (EPROM), 전기적으로 소거가능한 프로그램가능 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체들 또는 광학적 저장 매체들과 같은, 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들을 포함할 수도 있다.
GPU (12) 는 하나 이상의 그래픽 프리미티브들을 디스플레이 (18) 에 렌더링하기 위해 그래픽 동작들을 수행하도록 구성될 수도 있다. 따라서, CPU (6) 상에서 실행되는 소프트웨어 애플리케이션들 중 하나가 그래픽 프로세싱을 필요로 할 때, CPU (6) 는 디스플레이 (18) 로의 렌더링을 위해 그래픽 명령들 및 그래픽 데이터를 GPU (12) 에 제공할 수도 있다. 그래픽 명령들은, 예를 들어, 드로잉 명령들, GPU 상태 프로그래밍 명령들, 메모리 전송 명령들, 범용 연산 명령들, 커널 실행 명령들 등을 포함할 수도 있다. 일부 예들에서, CPU (6) 는 GPU (12) 에 의해 액세스될 수도 있는 메모리 (10) 에 명령들 및 그래픽 데이터를 쓰기함으로써 명령들 및 그래픽 데이터를 제공할 수도 있다. 일부 예들에서, GPU (12) 는 CPU (6) 상에서 실행되는 애플리케이션들을 위해 범용 연산을 수행하도록 더 구성될 수도 있다.
GPU (12) 는, 일부 경우들에서, CPU (6) 보다 더 효율적인 프로세싱을 제공하는 고도 병렬 구조로 내장될 수도 있다. 예를 들어, GPU (12) 는 병렬 방식으로 다중 버텍스들 또는 픽셀들 상에서 동작하도록 구성되는 복수의 프로세싱 엘리먼트들을 포함할 수도 있다. GPU (12)의 고도 병렬 성질은, 일부 경우들에서, GPU (12)가 CPU (6) 를 사용하여 디스플레이 (18) 에 장면들을 직접 드로잉하는 것보다 더 빨리 디스플레이 (18) 상으로 그래픽 이미지들 (예를 들어, GUI 들 및 2 차원 (2D) 및/또는 3 차원 (3D) 그래픽 장면들) 을 드로잉하는 것을 허용할 수도 있다. 또한, GPU (12) 의 고도 병렬 성질은 GPU (12) 가 CPU (6) 보다 더 빨리 범용 연산 애플리케이션들에 대해 특정 유형들의 벡터 및 매트릭스 동작들을 프로세싱하는 것을 허용할 수도 있다.
GPU (12) 는, 일부 경우들에서, 컴퓨팅 디바이스 (2) 의 마더보드에 집적될 수도 있다. 다른 경우들에서, GPU (12) 는 컴퓨팅 디바이스 (2) 의 마더보드에서 포트에 설치되는 그래픽 카드 상에 존재할 수도 있고, 또는 그렇지 않으면 컴퓨팅 디바이스 (2) 와 상호동작하도록 구성된 주변 디바이스 내에 통합될 수도 있다. 추가적인 경우들에서, GPU (12) 는 시스템 온 칩 (SoC) 을 형성하는 CPU (6) 와 동일한 마이크로칩 상에 위치될 수도 있다. GPU (12) 는 하나 이상의 프로세서들, 예컨대 하나 이상의 마이크로프로세서들, 주문형 집적회로 (ASIC) 들, 필드 프로그램가능 게이트 어레이 (FPGA) 들, 디지털 신호 프로세서 (DSP) 들, 또는 다른 등가의 집적 또는 이산 로직 회로를 포함할 수도 있다.
GPU (12) 는 GPU 캐시 (14) 에 직접 커플링될 수도 있다. 따라서, GPU (12) 는 버스 (20) 를 사용할 필요 없이 GPU 캐시 (14) 로부터 데이터를 판독하고 GPU 캐시 (14) 에 데이터를 기록할 수도 있다. 다르게 말하면, GPU (12)는 오프칩 메모리 대신 로컬 스토리지를 사용하여 데이터를 국부적으로 프로세싱할 수도 있다. 이는 과중한 버스 트래픽을 경험할 수도 있는, GPU (12) 의 버스 (20) 를 통한 데이터의 판독 및 기록에 대한 필요성을 제거함으로써, GPU (12) 가 보다 효율적인 방식으로 동작하는 것을 허용한다. 하지만, 일부 경우들에서, GPU (12) 는 별도의 캐시를 포함하지 않을 수도 있지만, 대신 버스 (20) 를 통해 시스템 메모리 (10) 를 이용할 수도 있다. GPU 캐시 (14) 는, 예를 들어 랜덤 액세스 메모리 (RAM), 정적 RAM (SRAM), 동적 RAM (DRAM), 소거가능한 프로그램가능 ROM (EPROM), 전기적으로 소거가능한 프로그램가능 ROM (EEPROM), 플래시 메모리, 자기 데이터 매체들 또는 광학적 저장 매체들과 같은, 하나 이상의 휘발성 또는 비휘발성 메모리들 또는 저장 디바이스들을 포함할 수도 있다.
CPU (6) 및/또는 GPU (12) 는 시스템 메모리 (10) 내에 할당되는 프레임 버퍼에 렌더링된 이미지 데이터를 저장할 수도 있다. 디스플레이 인터페이스 (16) 는 프레임 버퍼로부터 데이터를 취출하고 렌더링된 이미지 데이터에 의해 표현된 이미지를 디스플레이하도록 디스플레이 (18) 를 구성할 수도 있다. 일부 예들에서, 디스플레이 인터페이스 (16) 는 프레임 버퍼로부터 취출된 디지털 값들을 디스플레이 (18) 에 의해 소비가능한 (consumable) 아날로그 신호로 변환하도록 구성된 디지털-대-아날로그 컨버터 (DAC) 를 포함할 수도 있다. 다른 예들에서, 디스플레이 인터페이스 (16) 는 프로세싱을 위해 디지털 값들을 디스플레이 (18) 에 직접 패스할 수도 있다. 디스플레이 (18) 는 모니터, 텔레비젼, 프로젝션 디바이스, 액정 디스플레이 (LCD), 플라즈마 디스플레이 패널, 발광 다이오드 (LED) 어레이, 캐소드 레이 튜브 (CRT) 디스플레이, 전자 페이퍼, 표면 전도 전자 방출 디스플레이 (SED), 레이저 텔레비젼 디스플레이, 나노결정 디스플레이 또는 다른 유형의 디스플레이 유닛을 포함할 수도 있다. 디스플레이 (18) 는 컴퓨팅 디바이스 (2) 내에 통합될 수도 있다. 이를 테면, 디스플레이 (18) 는 이동 전화 핸드셋 또는 태블릿 컴퓨터의 스크린일 수도 있다. 대안적으로, 디스플레이 (18) 는 유선 또는 무선 통신들 링크를 통해 컴퓨터 디바이스 (2) 에 커플링된 독립형 디바이스일 수도 있다. 이를 테면, 디스플레이 (18) 는 케이블 또는 무선 링크를 통해 퍼스널 컴퓨터에 접속된 평판 디스플레이 또는 컴퓨터 모니터일 수도 있다.
이 개시물에 따르면, CPU (6) 는, GPU (12) 가 명령 스트림들의 실행을 선점하도록 허용되는 명령 스트림들에서의 위치들을 나타내는 하나 이상의 토큰들을 포함하는 명령 스트림들을 GPU (12) 에 의한 실행을 위해 생성할 수도 있다. 예를 들어, CPU (6) 는, GPU 명령 스트림의 실행을 선점하기 위한 CPU (6) 로부터의 통지를 수신하는 것에 응답하여, GPU 명령 스트림을 프로세싱하는 GPU (12) 가 GPU 명령 스트림의 실행을 선점하도록 허용되는 하나 이상의 로케이션들인 것으로서 GPU 명령 스트림에서 하나 이상의 로케이션들을 선택할 수도 있다. CPU (6) 는 선택된 하나 이상의 로케이션들에 기초하여 GPU 명령 스트림에 하나 이상의 토큰들을 배치할 수도 있다. 하나 이상의 토큰들은, GPU 명령 스트림에서의 선택된 하나 이상의 로케이션들에서 선점이 일어나도록 허용되는 것을 GPU (12) 에 대해 나타낼 수도 있다. 예를 들어, CPU (6) 는 선택된 로케이션들의 각각에 대해 GPU 명령 스트림에 하나 이상의 토큰들을 배치할 수도 있다. 이러한 예들에서, 선택된 로케이션들의 각각에 대해, 각각의 로케이션과 연관된 하나 이상의 토큰들은 그 각각의 로케이션에서 선점이 발생하도록 허용되는 것을 GPU (12) 에 대해 나타낼 수도 있다. 일부 예들에서, CPU (6) 는 결과적인 명령 스트림을 메모리 (10) 에 저장할 수도 있고, 이는 GPU (12) 에 의해 액세스가능할 수도 있다. GPU 명령 스트림은 CPU (6) 상에서 실행되는 특정 애플리케이션 컨텍스트와 연관된 GPU 명령들의 순서화된 시퀀스 (ordered sequence) 일 수도 있다.
일부 예들에서, 선점이 발생하도록 허용되는 로케이션들은 GPU 명령 스트림 내의 명령 경계들일 수도 있다. 명령 경계 (command boundary) 는, 제 1 GPU 명령의 실행의 완료 후에 그리고 제 2 GPU 명령의 실행의 시작 전에 발생하는 GPU 명령 스트림에서의 포인트를 지칭할 수도 있다. 제 1 및 제 2 GPU 명령들은 특정 명령 경계에 대한 경계 명령들로서 지칭될 수도 있다. 제 2 GPU 명령은 GPU 명령 스트림을 형성하는 GPU 명령들의 시퀀스에서 제 1 GPU 명령 직후에 발생할 수도 있다. 이러한 예들에서, CPU (6) 는, 선점이 발생하는 것을 허용하기 위한 GPU 명령 스트림에서의 특정 명령 경계들을 선택하고, GPU 에 선택된 명령 경계들을 나타내는 하나 이상의 토큰들을 GPU 명령 스트림에 배치할 수도 있다. 선점이 발생하도록 허용하기 위해 CPU (6) 에 의해 선택되는 명령 경계는 본 명세서에서 선점 포인트 (preemption point) 로서 지칭될 수도 있다.
추가적인 예들에서, 선점이 발생하도록 허용되는 로케이션들은 GPU 명령 스트림에서의 하나 이상의 GPU 명령들의 시퀀스일 수도 있다. 하나 이상의 GPU 명령들의 시퀀스는, GPU 명령 스트림을 형성하는 GPU 명령들의 순서화된 시퀀스의 일부를 형성할 수도 있다. 이러한 예들에서, CPU (6) 는 선점이 발생하도록 허용하기 위해 GPU 명령 스트림으로부터 GPU 명령들의 특정 시퀀스를 선택하고, GPU 명령들의 선택된 시퀀스를 나타내는 하나 이상의 토큰들을 GPU 명령 스트림에 배치할 수도 있다. 선점이 발생하도록 허용하기 위해 CPU (6) 에 의해 선택되는 명령들의 시퀀스는 본원에서 선점 범위 (preemption range) 로서 지칭될 수도 있다. 추가적인 예들에서, 선점이 발생하도록 허용되는 로케이션들은 선점 포인트들 및 선점 범위들의 조합을 포함할 수도 있다.
일부 경우들에서, CPU (6) 는, 적어도 부분적으로, GPU 명령 스트림으로부터 선점이 발생하도록 허용하지 않기 위한 GPU 명령들의 특정 시퀀스를 선택함으로써, GPU 명령 스트림으로부터, 선점이 발생하도록 허용하기 위한 GPU 명령들의 특정 시퀀스를 선택할 수도 있다. 선점이 발생하도록 허용하지 않기 위해 CPU (6) 에 의해 선택되는 명령들의 시퀀스는 본 명세서에서 GPU 명령들의 비-인터럽트가능 범위 (non-interruptible range) 로서 지칭될 수도 있다. 이러한 예들에서, CPU (6) 는 GPU 명령들의 선택된 비-인터럽트가능 시퀀스를 나타내는 하나 이상의 토큰들을 GPU 명령 스트림에 배치할 수도 있다.
CPU (6) 는 선점이 발생하도록 허용되는 로케이션들을 나타내는 하나 이상의 토큰들을 포함하는 결과적인 GPU 명령 스트림을 생성할 수도 있다. 몇몇 예들에서, 결과적인 GPU 명령 스트림은 명령 슬롯들 (command slots) 의 순서화된 시퀀스를 포함할 수도 있고, 명령 슬롯들의 각각은 GPU 명령 또는 선점 토큰 중 적어도 일방을 포함한다. CPU (6) 가 선점 포인트로서 명령 경계를 선택하는 경우들에서, CPU (6) 는, 일부 예들에서, 명령 경계의 경계 명령들과 연관된 2 개의 상이한 명령 슬롯들 사이에 있는 명령 슬롯에 토큰을 배치할 수도 있다. CPU (6) 가 선점 범위로서 명령 시퀀스를 선택하는 경우들에서, CPU (6) 는, 일부 예들에서, 명령 시퀀스의 제 1 GPU 명령을 유지하는 명령 슬롯 바로 전에 발생하는 명령 슬롯에 토큰을 배치하고, 명령 시퀀스의 마지막 GPU 명령을 유지하는 명령 직후에 다른 토큰을 배치할 수도 있다. CPU (6) 가 비-인터럽트가능 범위로서 명령 시퀀스를 선택하는 경우들에서, CPU (6) 는, 일부 예들에서, 명령들의 비-인터럽트가능 범위의 제 1 GPU 명령을 유지하는 명령 슬롯 바로 이전에 발생하는 명령 슬롯에 토큰을 배치하고, 명령들의 비-인터럽트가능 범위의 마지막 GPU 명령을 유지하는 명령 슬롯 직후에 다른 토큰을 배치할 수도 있다.
CPU (6) 는 다양한 선택 기준들에 기초하여 선점 포인트들이 될 GPU 명령 스트림에서의 특정 로케이션들을 선택할 수도 있다. 일부 예들에서, CPU (6) 는, GPU 명령 스트림에서의 특정 로케이션들에서 컨텍스트 스위치 (context switch) 를 수행하는 추정된 비용에 기초하여 선점이 발생하도록 허용하기 위한 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택할 수도 있다. 이러한 예들에서, GPU 컨텍스트 스위치를 수행하는 추정된 비용은, 일부 예들에서, 다음 중 하나 이상의 함수일 수도 있다: (1) GPU 컨텍스트 스위치를 수행하기 위해 필요한 프로세싱 시간의 추정된 또는 실제의 양 (즉, 프로세싱 시간 오버헤드); (2) GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리 대역폭 사용의 추정된 또는 실제 양 (즉, 메모리 대역폭 오버헤드); (3) GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리의 추정된 또는 실제의 양 (즉, 메모리 사용 오버헤드); 및 (4) GPU 컨텍스트 스위치의 성능과 연관된 임의의 다른 오버헤드 파라미터.
추가적인 예들에서, CPU (6) 는 GPU 명령 스트림에서의 명령들의 그룹핑들 (groupings) 을 나타내는 정보에 기초하여 선점이 발생하는 것을 허용하는 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택할 수도 있다. 이러한 예들에서, 명령들의 그룹핑들의 각각은 GPU (12) 에 의해 수행될 태스크 (task) 또는 태스크들의 셋트와 연관될 수도 있다. 일부 경우들에서, 명령들의 그룹핑들의 하나 이상은 복수의 그래픽 프레임들의 각각의 그래픽 프레임의 렌더링과 연관될 수도 있다. 추가적인 경우들에서, 명령들의 그룹핑들의 하나 이상은 복수의 GPU 커널들의 각각의 GPU 커널의 실행과 연관될 수도 있다. 추가적인 경우들에서, 명령들의 그룹핑들의 하나 이상은 복수의 GPU 태스크들의 각각의 GPU 태스크의 실행과 연관될 수도 있다. GPU 태스크는, 일부 경우들에서, 단일 프리미티브 (예를 들어, 삼각형) 또는 프리미티브들의 그룹의 렌더링일 수도 있다. 명령들의 그룹핑이 단일 프리미티브의 렌더링과 연관되는 경우들에서, CPU (6) 는, 예를 들어, GPU 명령 스트림에서 각각의 그리기 호출 (draw call) 명령 (즉, GPU 에게 프리미티브 또는 삼각형을 렌더링하도록 지시하는 명령) 전 및/또는 후에 토큰을 GPU 명령 스트림에 배치할 수도 있다. 명령들의 그룹핑이 다수의 프리미티브들의 렌더링과 연관되는 경우들에서, CPU (6) 는, 예를 들어, GPU 명령 스트림에서 다수의 프리미티브들의 렌더링과 연관된 다수의 그리기 호출 명령들 전 및/또는 후에 토큰을 GPU 명령 스트림에 배치할 수도 있다.
추가적인 예들에서, CPU (6) 는, 선점이 발생하여야 하는 특정 명령들 및 선점이 발생하지 않아야 하는 특정 명령들 중 적어도 일방을 나타내는, GPU 명령 스트림과 연관된 소프트웨어 애플리케이션으로부터 수신된 정보에 기초하여 선점이 발생하는 것을 허용하기 위한 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택할 수도 있다. 다른 예들에서, CPU (6) 는 GPU 명령 스트림에서의 각각의 명령 사이 또는 GPU 명령 스트림의 서브셋트의 각각의 명령 사이에 선점 토큰을 배치할 수도 있다. 추가적인 예들은 전술한 기준들에 추가하여 또는 그 대신에 이들 기준들 또는 다른 기준들의 조합들을 이용할 수도 있다.
일반적으로, GPU 명령 스트림에 배치된 토큰은 GPU 명령 스트림에서의 하나 이상의 로케이션들에서 선점이 발생하는 것이 허용되는지 여부를 나타내는 GPU 명령 스트림에 배치된 임의의 유형의 정보일 수도 있다. 일부 예들에서, 토큰은, GPU 명령 스트림의 명령 슬롯에 배치되는 그리고 GPU 명령 스트림에서의 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는지 여부를 나타내는 명령일 수도 있다. 예를 들어, 하나 이상의 특정 연산 코드들 (즉, OP 코드들) 은 명령이 선점 토큰이라는 것을 나타내기 위해 이용될 수도 있다. 이러한 예들에서, CPU (6) 는, 적어도 부분적으로, 명령이 선점 토큰이라는 것을 나타내는 OP 코드를 갖는 명령을 GPU 명령 스트림 내로 배치함으로써, GPU 명령 스트림에 토큰을 배치할 수도 있다. 일부 경우들에서, 상이한 유형들의 선점 토큰들 (예를 들어, 선점 포인트들을 나타내는 토큰들 및/또는 선점 범위들 또는 비-인터럽트가능 범위들의 시작 및 끝을 나타내는 토큰들) 을 나타내기 위해 상이한 명령들 또는 OP 코드들이 이용될 수도 있다.
추가적인 예들에서, 토큰들은 기존의 GPU 명령들 내로 통합될 수도 있다. 예를 들어, GPU 명령 포맷은, 특정 GPU 명령이 선점 토큰을 포함하는지 여부를 나타내는 정보 필드를 포함할 수도 있다. 이러한 예들에서, 선점 토큰들은 예를 들어 GPU 그래픽 명령들 및/또는 GPU 컴퓨팅 명령들과 같은, 선점에 반드시 관련될 필요는 없는 다른 GPU 명령들과 동일한 명령 슬롯에 배치될 수도 있다. 이러한 예들에서, 토큰은, 특정 GPU 명령이 선점 토큰을 포함하는 것을 나타내는 정보 필드 내에 배치되는 값일 수도 있고, CPU (6) 는, 적어도 부분적으로, 특정 GPU 명령의 정보 필드를 그 특정 GPU 명령이 선점 토큰을 포함하는 것을 나타내는 값으로 설정함으로써, GPU 명령 스트림에 토큰을 배치할 수도 있다. 일부 경우들에서, 상이한 유형들의 선점 토큰들 (예를 들어, 선점 포인트들을 나타내는 토큰들 및/또는 선점 범위들 또는 비-인터럽트가능 범위들의 시작 및 끝을 나타내는 토큰들) 을 나타내기 위해 상이한 값들이 정보 필드 및/또는 하나 이상의 추가적인 정보 필드들 내로 배치될 수도 있다. 정보 필드들은 1-비트 플래그들 (flags), 다중-비트 코드들 등을 포함할 수도 있다.
추가적인 예들에서, 토큰은, 특정 코드의 부존재, 특정 명령 필드의 부존재, 하나 이상의 비트들의 부존재, 명령의 부존재 또는 GPU 명령 스트림에 통상적으로 포함되는 다른 피처 (feature) 의 부존재의 형태를 취할 수도 있다. 예를 들어, 비트는 토큰들을 포함하지 않는 모든 명령들에 포함될 수도 있지만, 이러한 비트는 선점 토큰들을 포함하는 명령들에서는 생략될 수도 있다. 다른 예로서, 명령을 포함하지 않는 명령 슬롯 (예를 들어, 무연산 (no-op) 을 포함하는 명령 슬롯) 이 선점 토큰으로서 기능할 수도 있다.
추가적인 예들에서, 토큰들은 전술한 유형들의 토큰들의 임의의 조합을 포함할 수도 있다. 예를 들어, CPU (6) 는 토큰들을 지정하기 위해 다른 유형들의 명령들 내의 정보 필드들 및 토큰들로서 전용 명령들을 이용할 수도 있다.
GPU (12) 는 CPU (6) 에 의해 GPU 명령 스트림 내에 배치된 하나 이상의 토큰들에 기초하여 GPU 명령 스트림의 실행을 선점하도록 구성될 수도 있다. 예를 들어, GPU (12) 는 GPU (12) 에서 하나 이상의 프로세싱 유닛들 상에서의 실행을 위해 제 1 GPU 명령 스트림에 하나 이상의 명령들을 디스패치 (dispatch) 하고, 제 2 GPU 명령 스트림이 GPU (12) 상에서 실행될 준비가 된 것을 나타내는 CPU (6) 로부터의 선점 통지 (preemption notification) 를 수신할 수도 있다. 제 2 GPU 명령 스트림은 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 가질 수도 있다. 선점 통지를 수신하는 것에 응답하여, GPU (12) 는 제 1 GPU 명령 스트림에 배치된 하나 이상의 토큰들에 기초하여 제 1 GPU 명령 스트림의 실행을 선점할 때를 결정할 수도 있다.
일부 예들에서, 선점 통지를 수신하는 것에 응답하여, GPU (12) 는 제 1 GPU 명령 스트림에서 토큰이 맞닥뜨려질 때까지 GPU (12) 에서 하나 이상의 프로세싱 유닛들 상에서의 실행을 위해 제 1 GPU 명령 스트림에 하나 이상의 명령들을 디스패치할 수도 있다. 제 1 GPU 명령 스트림에서 토큰을 맞닥뜨리는 것에 응답하여, GPU (12) 는 제 1 GPU 명령 스트림의 실행을 선점하고 제 2 GPU 명령 스트림의 실행으로 스위치할 수도 있다. 예를 들어, GPU (12) 는 제 1 GPU 명령 스트림의 실행과 연관된 GPU (12) 의 상태를 저장하고, GPU (12) 에서의 하나 이상의 프로세싱 유닛들 상에서의 실행을 위해 제 2 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치할 수도 있다.
추가적인 예들에서, GPU (12) 가 제 1 GPU 명령 스트림을 프로세싱하고 있는 동안, GPU (12) 는 선점 허용 상태 변수를 유지할 수도 있고, 시간에서의 주어진 포인트에서 그것의 값은, GPU (12) 가 시간에서의 그 주어진 포인트에서 제 1 GPU 명령 스트림의 실행을 선점하도록 허용되는지 여부를 나타낼 수도 있다. GPU (12) 는 제 1 GPU 명령 스트림에 포함된 토큰들에 응답하여 선점 허용 상태 변수를 업데이트 또는 변경할 수도 있다. 제 1 GPU 명령 스트림에서의 토큰들이 GPU 명령들의 선점 범위의 시작 및 끝을 나타내는 예들에서, GPU (12) 는, 시작하는 선점 범위 토큰을 프로세싱하는 것에 응답하여 선점이 발생하는 것이 허용되는 것을 나타내는 값으로 선점 허용 상태 변수를 업데이트할 수도 있고, 종료하는 선점 범위 토큰을 프로세싱하는 것에 응답하여 선점이 발생하는 것이 허용되지 않는 것을 나타내는 값으로 선점 허용 상태 변수를 업데이트할 수도 있다. 제 1 GPU 명령 스트림에서의 토큰들이 GPU 명령들의 비-인터럽트가능 범위의 시작 및 끝을 나타내는 예들에서, GPU (12) 는, 시작하는 비-인터럽트가능 범위 토큰을 프로세싱하는 것에 응답하여 선점이 발생하는 것이 허용되지 않는 것을 나타내는 값으로 선점 허용 상태 변수를 업데이트할 수도 있고, 종료하는 비-인터럽트가능 범위 토큰을 프로세싱하는 것에 응답하여 선점이 발생하는 것이 허용되지 않는 것을 나타내는 값으로 선점 허용 상태 변수를 업데이트할 수도 있다.
CPU (6) 는, 일부 경우들에서, 선점으로 인한 오버헤드 (예를 들어, 추가적인 프로세싱 시간, 추가적인 메모리 대역폭 사용, 및/또는 추가적인 메모리 사용) 가 명령 스트림에서의 다른 로케이션들에서 선점으로 인해 발생할 수도 있는 오버헤드에 비해 상대적으로 작은 로케이션들을 명령 스트림에서 선점을 위해 선택할 수도 있다. 선점 오버헤드가 비교적 저렴한 하위-우선순위 명령 스트림 내에서의 그들 로케이션들로 선점을 연기함으로써, 이 개시물의 기법들은, 상위-우선순위 명령 스트림이 GPU 상에서 실행되는 다른 명령 스트림들에 대해 선점할 필요가 있을 수도 있는 그래픽 프로세싱 시스템의 전체 성능을 향상시키는 것이 가능할 수도 있다.
도 2 는 도 1 에서의 컴퓨팅 디바이스 (2) 의 CPU (6), GPU (12), 및 메모리 (10) 를 더 자세히 나타내는 블록도이다. 도 2 에 도시된 바와 같이, CPU (6) 는 GPU (12) 및 메모리 (10) 에 통신가능하게 커플링되고, GPU (12) 는 CPU (6) 및 메모리 (10) 에 통신가능하게 커플링된다. GPU (12) 는, 일부 예들에서, CPU (6) 를 갖는 마더보드 상으로 통합될 수도 있다. 추가적인 예들에서, GPU (12) 는 CPU (6) 를포함하는 마더보드의 포트에 설치되는 그래픽 카드 상에서 구현될 수도 있다. 추가적인 예들에서, GPU (12) 는 CPU (6) 와 상호작용하도록 구성되는 주변 디바이스 내에 통합될 수도 있다. 추가적인 예들에서, GPU (12) 는 칩 온 시스템 (SoC) 을 형성하는 CPU (6) 와 동일한 마이크로칩 상에 위치될 수도 있다. CPU (6) 는 소프트웨어 애플리케이션들 (24A, 24B), 그래픽 API (26), GPU 드라이버 (28), 및 오퍼레이팅 시스템 (30) 을 실행하도록 구성된다. GPU (12) 는 명령 엔진 (32) 및 하나 이상의 프로세싱 유닛들 (34) 을 포함한다. 메모리 (10) 는 명령 스트림들 (36A, 36B) 을 저장한다.
소프트웨어 애플리케이션들 (24A, 24B) 은 각각, 그래픽 이미지들이 디스플레이되도록 하는 하나 이상의 명령들 또는 비-그래픽 태스크 (예를 들어, 일반적 목적의 연산 태스크) 가 GPU (12) 상에서 수행되도록 하는 하나 이상의 명령들 중 적어도 하나를 포함할 수도 있다. 소프트웨어 애플리케이션들 (24A, 24B) 은 그래픽 API (26) 에 대해 명령들을 발행할 수도 있다. 그래픽 API (26) 는 소프트웨어 애플리케이션들 (24A, 24B) 로부터 수신된 명령들을 GPU 드라이버 (28) 에 의해 소비가능한 포맷으로 변환하는 런타임 서비스 (runtime service) 일 수도 있다.
GPU 드라이버 (28) 는 그래픽 API (26) 를 통해 소프트웨어 애플리케이션들 (24A, 24B) 로부터 명령들을 수신하고, 그 명령들에 대해 서비스하도록 GPU (12) 의 동작을 제어한다. 예를 들어, GPU 드라이버 (28) 는 하나 이상의 명령 스트림들 (36A, 36B) 을 포뮬레이트 (formulate) 하고, 명령 스트림들 (36A, 36B) 을 메모리 (10) 내에 배치하며, GPU (12) 에게 명령 스트림들 (36A, 36B) 을 실행하도록 지시할 수도 있다. GPU 드라이버 (28) 는 명령 스트림들 (36A, 36B) 을 메모리 (10) 내에 배치하고 오퍼레이팅 시스템 (30) 을 통해 예를 들어 하나 이상의 시스템 호출들을 통해 GPU (12) 와 통신할 수도 있다.
GPU 드라이버 (28) 는 다른 명령 스트림 (예를 들어, 상위-우선순위 명령 스트림) 이 실행을 위해 준비되었다는 것을 나타내기 위해 선점 통지를 GPU 명령 엔진 (32) 에 전송할 수도 있다. 일부 예들에서, 선점 통지는 또한 GPU (12) 에게 현재 실행되고 있는 명령 스트림의 선점 시에 어느 명령 스트림을 실행할지를 나타낼 수도 있다. GPU 드라이버 (28) 는, 예를 들어, GPU 명령 엔진 (32) 에 의해 폴링된 (polled) 하나 이상의 GPU 레지스터들에 (예를 들어, 오퍼레이팅 시스템 (30) 을 통해) 하나 이상의 값들을 쓰기함으로써, GPU 명령 엔진 (12) 에 선점 통지를 전송할 수도 있다. 하나 이상의 GPU 레지스터들은, GPU (12) 내에 위치된 하나 이상의 하드웨어 GPU 레지스터들, 메모리 (예를 들어, 메모리 (10)) 내에 위치된 하나 이상의 메모리-맵핑된 GPU 레지스터들 또는 이들의 임의의 조합을 포함할 수도 있다. 메모리-맵핑된 GPU 레지스터에 값들을 쓸 때, CPU (6) 는 GPU 명령 엔진 (32) 에 의해 폴링되는 메모리 (10) 내의 하나 이상의 특정 메모리 어드레스들에 그 값들을 쓸 수도 있다. 일부 예들에서, GPU 드라이버 (28) 는 선점 통지를 활성화하기 위해 제 1 값을 하나 이상의 GPU 레지스터들에 쓰고, 현재 실행되고 있는 명령 스트림의 선점 시에 실행할 명령 스트림의 로케이션을 식별하는 제 2 값을 하나 이상의 GPU 레지스터들에 쓸 수도 있다.
명령 엔진 (32) 은, 명령 스트림들 (36A, 36B) 에 저장된 명령들을 취출 (retrieve) 하고 그 명령들을 프로세싱 유닛들 (34) 의 하나 이상에 실행을 위해 디스패치하도록 구성된다. 명령 엔진 (32) 은 프로세싱 유닛들 (34) 의 전부 또는 서브셋트에 실행을 위해 명령 스트림으로부터의 명령들을 디스패치할 수도 있다. 일부 예들에서, 명령 엔진 (32) 은 CPU (6) 가 GPU (12) 에 선점 통지를 전송하였는지 여부를 나타내는 하나 이상의 GPU 레지스터들을 폴링하도록 구성될 수도 있다. GPU 레지스터들이 메모리-맵핑된 레지스터들인 경우들에서, 명령 엔진 (32) 은 CPU (6) 가 GPU (12) 에 명령 통지를 전송하였는지 여부를 나타내는 메모리 (10) 내의 하나 이상의 특정 메모리 어드레스들을 폴링하도록 구성될 수도 있다. 하나 이상의 GPU 레지스터들이 CPU (6) 가 GPU (12) 에 선점 통지를 전송하였다는 것을 나타내는 것에 응답하여, 명령 엔진 (32) 은 현재 실행하고 있는 GPU 명령 스트림의 실행을 선점하고 다른 명령 스트림을 실행하기를 시작할 수도 있다. 일부 경우들에서, 명령 엔진 (32) 은 선점 시 실행할 명령 스트림을 식별하는 하나 이상의 GPU 레지스터들 (12) 에 저장된 정보를 읽기함으로써 현재 실행하는 명령 스트림의 선점 시에 실행할 명령 스트림을 결정하도록 구성될 수도 있다. 예를 들어, CPU (6) 는 상위 우선순위 명령 스트림의 메모리 로케이션을 식별하는 포인터 (pointer) 를 하나 이상의 GPU 레지스터들에 저장할 수도 있다.
명령 스트림을 선점하기 위해, 명령 엔진 (32) 은 명령 스트림의 실행과 연관된 GPU (12) 의 상태를 저장할 수도 있다. GPU 명령 스트림의 실행과 연관된 GPU (12) 의 상태는 프로그램 카운터들, 스레드 활성화 상태들, (예를 들어, 컬러, 프리미티브 유형, 변환 유형 등과 같은) 그래픽 그리기 상태 변수들, 메모리 상태 및/또는 명령 스트림을 실행하기 위해 이용되는 임의의 다른 상태를 포함할 수도 있다. 일부 예들에서, 상태 변수들 (state variables) 은 개별 프로세싱 유닛들 (34) 또는 프로세싱 유닛들 (34) 의 그룹들과 연관된 로컬 (local) 상태 변수들, GPU (12) 의 글로벌 (global) 실행과 연관된 글로벌 상태 변수들, 또는 이들의 임의의 조합들일 수도 있다. GPU (12) 의 상태를 저장하는 것은, 예를 들어, GPU (12) 에서의 하나 이상의 레지스터들의 현재 값들을 다른 온-칩 또는 오프-칩 로케이션에 저장하는 것을 수반할 수도 있다. GPU (12) 의 상태를 저장하는 것은, 예를 들어, 로컬 GPU 메모리의 현재 상태를 다른 온-칩 또는 오프-칩 로케이션에 저장하는 것을 수반할 수도 있다. 일부 예들에서, 명령 엔진 (32) 은 GPU 상태를 메모리 (10) 에 저장할 수도 있다.
명령 스트림 선점의 실행이 완료된 후에, 명령 엔진 (32) 은 선점 통지 이전에 실행되고 있던 선점된 명령 스트림의 저장된 상태를 복원할 수도 있다. 저장된 상태를 복원하는 것은, 예를 들어, GPU (12) 의 하나 이상의 레지스터들 내로 상태 변수들을 리로딩 (reloading) 하는 것 및/또는 로컬 GPU 메모리 내로 저장된 메모리 상태를 리로딩하는 것을 수반할 수도 있다. GPU 상태가 메모리 (10) 에 저장되는 예들에서, 명령 엔진 (32) 은 선점된 명령 스트림의 추가적인 실행을 위해 GPU (12) 상으로 메모리 (10) 에 저장된 저장된 상태를 리로딩할 수도 있다.
프로세싱 유닛들 (34) 은 하나 이상의 프로세싱 유닛들을 포함할 수도 있고, 이들 각각은 프로그램가능 (programmable) 프로세싱 유닛 또는 고정 함수 (fixed function) 프로세싱 유닛일 수도 있다. 프로그램가능 프로세싱 유닛은, 예를 들어, CPU (6) 로부터 GPU (12) 상으로 다운로드되는 하나 이상의 셰이더 (shader) 프로그램들을 실행하도록 구성되는 프로그램가능 셰이더 유닛을 포함할 수도 있다. 셰이더 프로그램은, 일부 예들에서, GLSL (OpenGL Shading Language), HLSL (High Level Shading Language), Cg (C for Graphics) 셰이딩 언어 등과 같은, 하이-레벨 셰이딩 언어로 쓰여진 프로그램의 컴파일링된 버전일 수도 있다. 일부 예들에서, 프로그램가능 셰이더 유닛은, 예컨대 SIMD 파이프라인과 같이 병렬로 동작하도록 구성되는 복수의 프로세싱 유닛들을 포함할 수도 있다. 프로그램가능 셰이더 유닛은, 페치 (fetch) 될 다음 명령 또는 실행되고 있는 프로그램 메모리에서의 현재 명령을 나타내는 프로그램 카운터 레지스터 등과 같은 실행 상태 레지스터 및 셰이더 프로그램 명령들을 저장하는 프로그램 메모리를 가질 수도 있다. 프로세싱 유닛들 (34) 에서의 프로그램가능 셰이더 유닛들은, 예를 들어, 버텍스 (vertex) 셰이더 유닛들, 픽셀 셰이더 유닛들, 지오메트리 (geometry) 셰이더 유닛들, 헐 (hull) 셰이더 유닛들, 도메인 셰이더 유닛들, 컴퓨트 셰이더 유닛들, 및/또는 통합된 셰이더 유닛들을 포함할 수도 있다.
고정 함수 프로세싱 유닛은 어떤 기능들을 수행하도록 하드와이어드된 (hard-wired) 하드웨어를 포함할 수도 있다. 고정 함수 하드웨어는 상이한 기능들을 수행하기 위해, 예를 들어 하나 이상의 제어 신호들을 통해, 설정가능할 수도 있지만, 고정 함수 하드웨어는 통상적으로 사용자-컴파일링된 프로그램들을 수신할 수 있는 프로그램 메모리를 포함하지 않는다. 일부 예들에서, 프로세싱 유닛 (34) 에서의 고정 함수 프로세싱 유닛들은 예를 들어, 예를 들어 심도 테스팅, 시저스 (scissors) 테스팅, 알파 블렌딩 등과 같은 래스터 연산 (raster operation) 들을 수행하는 프로세싱 유닛들을 포함할 수도 있다.
도 2 의 예시적인 그래픽 프로세싱 시스템에서, 메모리 (10) 는 2 개의 명령 스트림들 (36A, 36B) 을 포함하고, 각 명령 스트림 (36A, 36B) 은 상이한 그래픽 애플리케이션 컨텍스트 (즉, 소프트웨어 애플리케이션들 (24A, 24B) 중 상이한 것) 와 연관된다. 예를 들어, 명령 스트림 (36A) 은 소프트웨어 애플리케이션 (24A) 에 대한 그래픽 애플리케이션 컨텍스트와 연관되고, 명령 스트림 (36B) 은 소프트웨어 애플리케이션 (24B) 에 대한 그래픽 애플리케이션 컨텍스트와 연관된다. 도시의 용이함을 위해, 2 개의 GPU 명령 스트림들 (36A, 36B) 은 도 2 의 예시적인 그래픽 프로세싱 시스템의 메모리 (10) 내에 저장되는 것으로서 묘사된다. 하지만, 다른 예들에서, 그래픽 프로세싱 시스템의 동일 또는 상이한 컴포넌트들에 저장된 동일 또는 상이한 수의 GPU 명령 스트림들이 이용될 수도 있다.
도 2 에 도시된 바와 같이, 각 명령 스트림 (36A, 36B) 은 명령 스트림의 상부에 걸친 번호들에 의해 식별되는 복수의 명령 슬롯들을 갖는다. 각 명령 슬롯은 명령 패킷 (C) 또는 토큰 패킷 (T) 을 유지할 수도 있다. 명령 패킷은 GPU 상에서의 실행을 위한 하나 이상의 GPU 명령들을 포함할 수도 있다. 토큰 패킷은 반드시 명령을 포함할 필요는 없을 수도 있지만, 선점이 발생하도록 허용되는 명령 스트림에서의 특정 위치 (즉, 선점 포인트), 명령이 발생하도록 허용되는 명령들의 특정 범위 (즉, 선점 범위), 또는 선점이 발생하도록 허용되지 않는 명령들의 특정 범위 (즉, 비-인터럽트가능 범위) 를 나타내기 위해 이용되는 토큰을 포함할 수도 있다.
CPU (6) 의 GPU 드라이버 (28) 는 메모리 (10) 에 명령 스트림들 (36A, 36B) 을 쓰도록 구성될 수도 있고, GPU (12) 의 명령 엔진 (32) 은 메모리 (10) 로부터 명령 스트림들 (36A, 36B) 중 하나 이상을 읽도록 구성될 수도 있다. 일부 예들에서, 명령 스트림들 (36A, 36B) 중의 일방 또는 양방은 메모리 (10) 에 링 버퍼로서 저장될 수도 있다. 링 버퍼는, CPU (6) 및 GPU (12) 가 링 버퍼에 데이터를 쓰는 것 및 링 버퍼로부터 데이터를 읽는 것과 연관된 동기화된 상태 변수들을 유지하는 순환형 어드레싱 스킴 (scheme) 을 갖는 버퍼일 수도 있다. 예를 들어, 명령 스트림 (36A) 이 링 버퍼인 경우에, CPU (6) 및 GPU (12) 의 각각은 쓰여질 다음 어드레스를 나타내는 기록 포인터를 링 버퍼에 저장할 수도 있고, 판독될 다음 어드레스를 나타내는 판독 포인터를 링 버퍼에 저장할 수도 있다. CPU (6) 가 새로운 명령을 링 버퍼에 쓸 때, CPU (6) 는 CPU (6) 에서의 기록 포인터를 업데이트하고 GPU (12) 에게 GPU (12) 에서의 기록 포인터를 업데이트하도록 지시할 수도 있다. 유사하게, CPU (6) 가 새로운 명령을 링 버퍼로부터 읽을 때, GPU (12) 는 GPU (12) 에서의 기록 포인터를 업데이트하고 CPU (6) 에게 CPU (6) 에서의 판독 포인터를 업데이트하도록 지시할 수도 있다. 다른 동기화 메커니즘들이 가능하다. 판독 및/또는 기록 포인터들이 링 버퍼에 대해 할당된 어드레스들의 범위에서 최상위 어드레스에 도달할 때, 판독 및/또는 기록 포인터들은 순환형 어드레싱 스킴을 구현하기 위해 최하위 어드레스로 랩어라운드 (wrap around) 할 수도 있다.
이 개시물에 따라 설계된 예시적인 GPU 드라이버 (28) 및 예시적인 GPU 명령 엔진 (32) 의 예시적인 동작이 이제 도 2 를 참조하여 설명될 것이다. 이 예에서, 소프트웨어 애플리케이션 (24B) 은 소프트웨어 애플리케이션 (24A) 의 스케줄링 우선순위보다 더 높은 스케줄링 우선순위를 갖는다. 특히, 이 예에서, 소프트웨어 애플리케이션 (24B) 은 그래픽 이미지로 하여금 디스플레이되게 하고 UI 의 시기적절한 업데이트들을 보장하도록 GPU (12) 에 대한 높은 우선순위 액세스를 요구하는 하나 이상의 명령들을 포함하는 사용자 인터페이스 (UI) 소프트웨어 애플리케이션이다. 한편, 이 예에서, 소프트웨어 애플리케이션 (24A) 은, 그래픽 이미지가 디스플레이되게 하는 하나 이상의 명령들 및/또는 비-그래픽 태스크 (예를 들어, GPGPU 컴퓨팅 태스크) 가 GPU (12) 상에서 수행되게 하는 하나 이상의 명령들을 포함하는 하위-우선순위 애플리케이션이다.
GPU 드라이버 (28) 는 GPU (12) 에 의해 수행될 그래픽 동작들 및/또는 일반적-목적의 컴퓨팅 동작들을 명시하는 소프트웨어 애플리케이션 (24A) 으로부터의 하나 이상의 명령들을 수신한다. GPU 드라이버 (28) 는 수신된 명령들에 의해 명시된 동작들을 수행하기 위한 중간 명령 스트림을 생성하고, 선점이 발생하는 것을 허용하기 위해 중간 명령 스트림에서 하나 이상의 로케이션들을 선택하며, 출력 명령 스트림 (36A) 을 생성하기 위해 선점이 발생하도록 허용되는 로케이션들의 각각에서 중간 명령 스트림에 토큰을 배치한다. GPU 드라이버 (28) 는 출력 명령 스트림 (36A) 을 메모리 (10) 내에 배치하고, 이는 GPU 명령 엔진 (32) 에 의해 액세스가능하다. GPU 드라이버 (28) 는 소프트웨어 애플리케이션 (24A) 에 대응하는 명령 스트림 (36A) 이 프로세싱을 위해 이용가능한 것을 GPU 명령 엔진 (32) 에 통지한다. 예를 들어, GPU 드라이버 (28) 는 명령 스트림 (36A) 이 GPU 레지스터 (예를 들어, GPU (12) 에 의해 폴링된 GPU 하드웨어 레지스터 및/또는 GPU (12) 에 의해 폴링된 GPU 메모리-맵핑된 레지스터) 에 대해 실행을 위해 준비되었다는 것을 나타내는 하나 이상을 값들을 쓸 수도 있다.
명령 스트림 (36A) 이 실행을 위해 준비되었다는 통지 시에, GPU (12) 의 명령 엔진 (32) 은, 명령 스트림 (36A) 을 실행하는 것을 시작하기 위해 GPU (12) 상에서 자원이 현재 이용가능한지를 결정할 수도 있다. 자원이 이용가능한 경우, 명령 엔진 (32) 은 명령 슬롯에 기초하여 명령 스트림 (36A) 에서의 명령들을 번호순으로 디스패치하는 것을 시작한다. 보다 구체적으로, 명령 엔진 (32) 은 프로세싱 유닛들 (34) 중 하나 이상에서 실행을 위해 명령 슬롯들 1 및 2 에 포함된 명령 패킷들을 디스패치한다. 명령 슬롯 3 에서 토큰 패킷을 맞닥뜨리는 것에 응답하여, 명령 엔진 (32) 은, GPU (12) 가 CPU (6) 로부터 임의의 선점 통지들을 수신하였는지를 결정한다. 이 경우에, 명령 엔진 (32) 은 임의의 선점 통지들을 수신하지 않았고, 따라서, 명령 엔진 (32) 은 명령 스트림 (36A) 의 명령 슬롯 4 에서 명령을 디스패치하는 것으로 계속 진행한다.
한편, GPU 드라이버 (28) 는, GPU (12) 에 의해 수행될 높은-우선순위 그래픽 동작들을 명시하는 UI 소프트웨어 애플리케이션 (24B) 으로부터 하나 이상의 명령들을 수신한다. GPU 드라이버 (28) 는 수신된 명령들에 의해 명시된 동작들을 수행하기 위해 높은-우선순위 명령 스트림 (36B) 을 발생시키고, 결과적인 명령 스트림 (36B) 을 메모리 (10) 내에 배치한다. GPU 드라이버 (28) 는, 높은-우선순위 명령 스트림 (36) 이 프로세싱을 위해 준비된 것을 나타내고 또한 명령 스트림 (36) 이 본 개시의 연기된 선점 기법들에 따라 GPU (12) 상에서 실행되고 있는 임의의 다른 하위-우선순위 명령 스트림들에 대해 선점하여야 하는 것을 나타내는 선점 통지를 GPU 명령 엔진 (32) 에 제공한다. 일부 예들에서, GPU 드라이버 (28) 는, GPU (12) 에 의해 폴링되는 GPU 하드웨어 레지스터에 쓰기하는 것 및/또는 GPU (12) 에 의해 폴링되는 메모리-맵핑된 레지스터 (예를 들어, 메모리 (10) 내의 특정 로케이션) 에 쓰기하는 것에 의해 GPU (12) 에 선점 통지를 제공할 수도 있다.
명령 스트림 (36A) 에서 명령 슬롯 5 에서의 명령을 디스패치하기 이전에, GPU 명령 엔진 (32) 은, 상위-우선순위 명령 스트림 (36B) 이 프로세싱을 위해 준비된 것을 나타내고 또한 상위-우선순위 명령 스트림 (36B) 이 임의의 다른 하위-우선순위 명령 스트림들 (즉, 명령 스트림 (36A)) 의 프로세싱에 대해 선점하여야 하는 것을 나타내는 선점 통지를 수신한다. 하지만, 명령 엔진 (32) 이 연기된 선점 스킴을 구현하기 때문에, 명령 엔진 (32) 은, 토큰 패킷 (즉, 선점 포인트) 이 명령 스트림 (36A) 에서 맞닥뜨려질 때까지 명령 스트림 (36A) 으로부터 명령들을 디스패치하는 것을 계속한다. 보다 구체적으로, 명령 엔진 (32) 은 프로세싱 엘리먼트들 (34) 중 하나 이상에서의 실행을 위해 명령 슬롯들 5 및 6 에서 명령들을 디스패치한다.
명령 슬롯 (7) 에서 토큰 패킷을 맞닥뜨리는 것에 응답하여, 명령 엔진 (32) 은, GPU (12) 가 CPU (6) 로부터 임의의 선점 통지를 수신하였는지를 결정한다. 이 경우에, GPU (12) 는 선점 통지를 수신하였고, 따라서, 명령 엔진 (32) 은, 명령 스트림 (36A) 과 연관된 명령들을 프로세싱하는 것으로부터 높은-우선순위 명령 스트림 (36B) 과 연관된 명령들을 프로세싱하는 것으로의 컨텍스트 스위치를 수행하는 것으로 계속 진행한다. 일부 경우들에서, 컨텍스트 스위치를 수행하기 위해, 명령 엔진 (32) 은, 현재 프로세싱되는 컨텍스트에 대한 (즉, 소프트웨어 애플리케이션 (24A) 에 대한) GPU 의 상태 (예를 들어, GPU (12) 에서의 메모리의 상태 및/또는 하나 이상의 레지스터들의 상태) 를 메모리 (10) 에 저장할 수도 있다. 또한, GPU 상태가 UI 소프트웨어 애플리케이션 (24B) 에 대해 이전에 저장되었었던 경우에는, 컨텍스트 스위치는 또한 UI 소프트웨어 애플리케이션 (24B) 에 대해 이전에 저장된 GPU 상태를 복원할 수도 있다.
컨텍스트 스위치를 수행한 후에, 명령 엔진 (32) 은 GPU (12) 의 프로세싱 유닛들 (34) 중 하나 이상에서의 실행을 위해 명령 스트림 (36B) 의 명령 슬롯들 1-6 에서 명령들을 디스패치하는 것을 계속 진행한다. 명령 스트림 (36B) 의 프로세싱을 마친 후에, 명령 엔진 (32) 은 명령 스트림 (36A) 에서의 나머지 명령들을 프로세싱하는 것을 계속하기 위해 또 다른 컨텍스트 스위치를 수행한다. 컨텍스트 스위치를 수행하는 것은, GPU (12) 에서의 메모리 및/또는 레지스터들의 상태를 이전 컨텍스트 스위치 전에 저장되었었던 상태로 복원하는 것을 수반할 수도 있다. 컨텍스트 스위치를 수행하는 것 후에, 명령 엔진 (32) 은 프로세싱 유닛들 (34) 중 하나 이상에서의 실행을 위해 명령 스트림 (36A) 의 명령 슬롯 (8) 에서 명령을 디스패치하는 것을 계속 진행한다.
도 2 에 도시된 예시적인 명령 스트림 (36A) 에서, GPU 드라이버 (28) 는, 명령 슬롯들 4-6 에서의 명령들은 특정 GPU 태스크 또는 연산 (예를 들어, 특정 프레임의 렌더링 또는 특정 GPU 컴퓨팅 태스크의 실행) 의 실행과 연관된 명령들의 논리적 그룹핑을 형성하였다는 것 및 명령들의 논리적 그룹핑을 실행하면서 컨텍스트 스위치를 수행하기 위한 (예를 들어, 프로세싱 시간, 메모리 대역폭 사용, 및/또는 메모리 사용의 면에서의) 추정된 비용은 컨텍스트 스위치를 수행하기 위해 명령 슬롯 7 까지 단지 기다리는 것에 비해 상대적으로 비쌀 것이라는 것을 결정하였다. 따라서, GPU (12) 는 명령 슬롯 7 에서 명령 스트림의 실행을 선점하는 것이 허용되는 것을 나타내는 토큰을 명령 슬롯 7 에 배치하였다. 이와 같이, 명령 엔진 (32) 이 명령 슬롯 5 에서 명령을 실행하기 전에 선점 통지를 수신하였음에도 불구하고, 이 개시물의 연기된 선점 기법들은 선점이 명령 스트림 (36A) 에서의 포인트로 연기되도록 효율적으로 허용하였고, 여기서, 컨텍스트 스위치가 프로세싱 시간, 메모리 대역폭 사용 및/또는 메모리 사용의 면에서 덜 비쌀 것이다. 이러한 방식으로, 이 개시물의 기법들은 그래픽 프로세싱 시스템의 전반적인 성능을 향상시키기 위해 이용될 수도 있다.
도 2 는, 상위-우선순위 명령 스트림 (36B) (즉, UI 명령 스트림) 이 토큰 패킷들을 포함하지 않는 예를 나타내었지만, 다른 예들에서는, 명령 스트림 (36B) 은 명령 패킷들을 포함할 수도 있고, 이는, CPU (6) 가, 명령 스트림 (36B) 의 실행 동안 GPU (12) 에 선점 통지를 전송하는 경우에도 더 높은 상위-우선순위 명령 스트림에 의해 선점되도록 하는 것을 야기할 것이다. 일반적으로, 이 개시물의 기법들은, 일부 예들에서, 임의의 수의 네스팅된 (nested) 선점들이 발생하는 것을 허용할 수도 있다.
도 3 내지 도 5 는 이 개시물에 따라 GPU 명령 스트림들에 토큰들을 배치하기 위한 다양한 기법들을 나타내는 개념도들이다. 도 3 은, GPU 명령들의 시퀀스 (즉, C1, C2 ... C8) 을 포함하는 예시적인 중간 GPU 명령 스트림 (50) 을 나타낸다. GPU 명령들은 GPU 에 의해 실행될 수 있는 임의의 유형의 그래픽 프로세싱 명령일 수도 있다. 예를 들어, 명령들은 드로잉 명령들, 상태 프로그래밍 명령들, 일반적-목적의 GPU 컴퓨팅 명령들 등일 수도 있다. 명령 경계들 (52, 54, 56, 58, 60, 62, 64, 66, 및 68) 은 명령들의 각가 사이에서 정의된다. 일부 예들에서, GPU 드라이버 (28) 는 소프트웨어 애플리케이션들 (24A, 24B) 중 하나로부터 직접 중간 GPU 명령 스트림 (50) 을 수신할 수도 있다. 추가적인 예들에서, GPU 드라이버 (28) 는 소프트웨어 애플리케이션들 (24A, 24B) 중 하나로부터 수신된 명령들에 기초하여 중간 GPU 명령 스트림 (50) 을 생성할 수도 있다.
도 4 는 GPU 드라이버 (28) 에 의해 생성된 예시적인 출력 GPU 명령 스트림 (70) 을 나타낸다. 도 4 에서 도시된 바와 같이, 출력 GPU 명령 스트림 (70) 은 명령 슬롯들의 순서화된 시퀀스 (즉, S1, S2 ... S10) 를 포함한다. 각각의 명령 슬롯은 중간 GPU 명령 스트림 (50) 으로부터의 명령 또는 토큰 (즉, T) 중 적어도 하나를 포함한다. 일부 예들에서, 각각의 명령은 명령 패킷으로서 지칭될 수도 있고, 각각의 토큰은 토큰 패킷으로서 지칭될 수도 있다. 출력 GPU 명령 스트림 (70) 을 발생시키기 위해, GPU 드라이버 (28) 는 선점이 발생하도록 허용되는 로케이션들로서 명령 경계들 (56 및 64) 을 선택한다. 즉, GPU (12) 에게 출력 GPU 명령 스트림 (70) 의 실행을 선점하도록 지시하는 선점 통지를 GPU (12) 가 CPU (6) 로부터 수신하는 것에 응답하여 GPU (12) 가 출력 GPU 명령 스트림 (70) 의 실행을 선점하도록 허용되는 로케이션들이도록 명령 경계들 (56 및 64) 이 선택된다. 명령들 (C2 및 C3) 은 명령 경계 (56) 에 대한 경계 명령들로서 지칭될 수도 있고, 명령들 (C6 및 C7) 은 명령 경계 (64) 에 대해 경계 명령들로서 지칭될 수도 있다.
명령 경계 (56) 가, 선점이 발생하도록 허용되는 선택된 명령 경계인 것을 나타내기 위해, GPU 드라이버 (28) 는 명령 경계 (56) 에 대해 경계 명령들 (C2, C3) 을 유지하는 명령 슬롯들 (S2, S4) 사이에 있는 명령 슬롯 (S3) 에 토큰을 배치한다. 유사하게, 명령 경계 (64) 가, 선점이 발생하도록 허용되는 선택된 명령 경계인 것을 나타내기 위해, GPU 드라이버 (28) 는 명령 경계 (64) 에 대해 경계 명령들 (C6, C7) 을 유지하는 명령 슬롯들 (S7, S9) 사이에 있는 명령 슬롯 (S8) 에 토큰을 배치한다.
도 4 의 예시적인 출력 GPU 명령 스트림 (70) 에서, 토큰들은, GPU (12) 가 CPU (6) 로부터 선점 통지를 수신하는 것에 응답하여 출력 GPU 명령 스트림 (70) 의 실행을 선점하도록 허용되는 특정 선점 포인트들을 출력 GPU 명령 스트림 (70) 에서 나타낸다. 예를 들어, 특정 명령 스롯에 배치되는 토큰은, 그 토큰이 배치되는 명령 슬롯 바로 이전의 명령 슬롯에서의 명령을 실행하는 것 후에 그리고 그 토큰이 배치되는 명령 슬롯 바로 후의 명령 슬롯에서의 명령을 실행하는 것 이전에 선점이 발생하도록 허용되는 것을 나타낸다. 특정 예로서, S3 명령 슬롯에 배치된 토큰은, 명령 (C2) 를 실행하는 것 후에 그리고 명령 (C3) 을 실행하는 것 전에 선점이 발생하도록 허용되는 것을 나타낸다.
GPU (12) 가 출력 GPU 명령 스트림 (70) 을 프로세싱할 때, GPU (12) 가 토큰을 맞닥뜨리는 경우에는, GPU (12) 는 선점 통지가 CPU (6) 로부터 수신되었는지 여부를 결정할 수도 있다. 선점 통지가 CPU (6) 로부터 수신된 경우에는, GPU (12) 는 CPU (6) 에 의해 명시된 또 다른 GPU 명령 스트림을 싱핼하기 위해 출력 GPU 명령 스트림 (70) 의 실행을 선점할 수도 있다. 그렇지 않으면, GPU (12) 가 토큰을 맞닥뜨리지 않을 때 선점 통지가 수신되지 않은 경우에, GPU (12) 는 출력 GPU 명령 스트림 (70) 의 실행을 선점함이 없이 출력 GPU 명령 스트림 (70) 에서 다음 명령 슬롯을 프로세싱하는 것을 계속할 수도 있다.
GPU 드라이버 (28) 는 다양한 기준들에 기초하여 선점이 발생하는 것을 허용하기 위한 명령 경계들 (56, 64) 을 선택할 수도 있다. 일부 예들에서, GPU 드라이버 (28) 는 GPU 명령 스트림에서의 특정 로케이션들에서 GPU 컨텍스트 스위치를 수행하는 추정된 비용에 기초하여 출력 GPU 명령 스트림 (70) 에서 경계들 (56, 64) 을 선택할 수도 있다. 예를 들어, GPU 드라이버 (28) 는, 명령 경계들 (52, 54, 58, 60, 62, 66, 68) 중 하나 이상에서 GPU 컨텍스트 스위치를 수행하는 추정된 비용에 비해 명령 경계들 (56, 64) 의 각각에서 GPU 컨텍스트 스위치를 수행하는 추정된 비용이 더 낮은 것을 결정할 수도 있다. GPU 컨텍스트 스위치를 수행하는 추정된 비용은, 일부 예들에서, 다음 중 하나 이상의 함수일 수도 있다: (1) GPU 컨텍스트 스위치를 수행하기 위해 필요한 프로세싱 시간의 추정된 또는 실제 양 (즉, 프로세싱 시간 오버헤드); (2) GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리 대역폭 사용의 추정된 또는 실제 양 (즉, 메모리 대역폭 오버헤드); (3) GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리의 추정된 또는 실제 양 (즉, 메모리 사용 오버헤드); 및 (4) GPU 컨텍스트 스위치의 수행과 연관된 임의의 다른 오버헤드 파라미터.
추가적인 예들에서, GPU 드라이버 (28) 는, 특정 GPU 태스크 또는 연산 (예를 들어, 특정 프레임의 렌더링 또는 특정 GPU 태스크의 실행) 과 연관되는 중간 GPU 명령 스트림 (50) 에 포함된 명령들의 논리적 그룹핑을 나타내는 정보에 기초하여 출력 GPU 명령 스트림 (70) 에서 명령 경계들 (56, 64) 을 선택할 수도 있다. 일부 경우들에서, GPU 드라이버 (28) 는 중간 GPU 명령 스트림 (50) 과 연관된 소프트웨어 애플리케이션 (예를 들어, 소프트웨어 애플리케이션들 (24A, 24B) 으로부터 명령들의 논리적 그룹핑들을 나타내는 정보를 수신할 수도 있다. 예를 들어, GPU 드라이버 (28) 는 특정 GPU 태스크들의 셋트를 수행하기 위한 소프트웨어 애플리케이션으로부터의 명령들을 수생할 수도 있고, 그 수신된 명령들은 GPU 태스크들의 각각의 시작부 및/또는 종단부를 식별할 수도 있다. 추가적인 경우들에서, GPU 드라이버 (28) 는, GPU 드라이버 (28) 가 소프트웨어 애플리케이션으로부터 중간 GPU 명령 스트림 (50) 을 수신하는 경우들에서 중간 GPU 명령 스트림 (50) 에 기초하여 명령들의 논리적 그룹핑들을 나타내는 정보를 결정할 수도 있다.
일부 예들에서, 명령들의 논리적 그룹핑들은 단일 그래픽 프레임 또는 그래픽 프레임들의 단일 그룹의 렌더링과 연관된 명령들을 포함할 수도 있다. 예를 들어, 명령들의 상이한 그룹핑들은 상이한 렌더링 프레임들과 연관될 수도 있고, 토큰들은 상이한 렌더링 프레임들의 각각과 연관된 명령들의 상이한 그룹핑들 사이에서 출력 GPU 명령 스트림 (70) 에 배치될 수도 있다. 구체적인 예로서, 명령들 (C1 및 C2) 은 제 1 렌더링 프레임과 연관될 수도 있고, 명령들 (C3, C4, C5, 및 C6) 은 제 2 렌더링 프레임과 연관될 수도 있으며, 명령들 (C7 및 C8) 은 제 3 렌더링 프레임과 연관될 수도 있다. 이 구체적인 예에서, 토큰들은, 상이한 렌더링 프레임들에 대한 명령들의 프로세싱 사이에서 선점이 발생하는 것을 허용하기 위해 도 4 에서 도시된 바와 같이 명령 슬롯들 (S3 및 S8) 에 배치된다. 다르게 말하면, GPU 드라이버 (28) 는, 명령들 (C1 및 C2) 에 의해 정의된 명령 시퀀스, 명령들 (C3, C4, C5, 및 C6) 에 의해 정의된 명령 시퀀스, 및 명령들 (C7 및 C8) 에 의해 정의된 명령 시퀀스가 비-인터럽트가능 명령 시퀀스들인 것을 결정할 수도 있다. 추가적인 예들에서, 명령들의 논리적 그룹핑은 단일 GPU 커널 또는 단일 GPU 태스크의 실행과 연관된 명령들을 포함하거나 GPU 커널들 또는 태스크들의 그룹핑의 실행과 연관된 명령들을 포함할 수도 있다. 예를 들어, GPU 컴퓨팅 애플리케이션에 있어서, 명령들의 상이한 그룹핑들은 상이한 GPU 커널들 또는 태스크들의 실행과 연관될 수도 있고, 토큰들은 GPU 커널들 또는 태스크들의 각각과 연관된 명령들의 상이한 그룹핑들 사이에서 출력 GPU 명령 스트림 (70) 에 배치될 수도 있다.
추가적인 예들에서, GPU 드라이버 (28) 는 출력 GPU 명령 스트림 (70) 과 연관된 소프트웨어 애플리케이션 (예를 들어, 소프트웨어 애플리케이션들 (24A, 24B) 로부터 수신된 정보에 기초하여 출력 GPU 명령 스트림 (70) 에서 명령 경계들 (56, 64) 을 선택할 수도 있다. 예를 들어, 소프트웨어 애플리케이션은, 선점이 발생하여야 하는 하나 이상의 특정 명령들 및/또는 명령 경계들 및/또는 선점이 발생하지 않아야 하는 하나 이상의 특정 명령들 및/또는 명령 경계들을 나타내는 정보를 GPU 드라이버 (28) 에 제공할 수도 있다. GPU 드라이버 (28) 는 이들 로케이션들을 나타내기 위해 출력 GPU 명령 스트림 (70) 에 토큰들을 배치할 수도 있다.
도 5 는 GPU 드라이버 (28) 에 의해 생성된 예시적인 출력 GPU 명령 스트림 (80) 을 나타낸다. 도 5 에서 도시된 바와 같이, 출력 GPU 명령 스트림 (80) 은 명령 슬롯들의 순서화된 시퀀스 (즉, S1, S2 ... S10) 를 포함한다. 각각의 명령 슬롯은 중간 GPU 명령 스트림 (50) 으로부터의 명령 또는 토큰 (즉, T) 중 적어도 하나를 포함한다. 출력 GPU 명령 스트림 (80) 을 생성하기 위해, GPU 드라이버 (28) 는 선점이 발생하는 것이 허용되는 로케이션으로서 중간 GPU 명령 스트림 (50) (도 3) 에서 명령 시퀀스 (82) (즉, 명령들 C2, C3, C4, C5, C6) 를 선택한다. 즉, 명령 시퀀스 (82) 에서의 명령들은, 출력 GPU 명령 스트림 (80) 의 실행을 선점하기 위한 CPU (6) 로부터의 통지를 수신하는 것에 응답하여 GPU (12) 가 출력 GPU 명령 스트림 (80) 의 실행을 선점하도록 허용되는 로케이션들이도록 선택된다. 명령들 (C1 및 C7) 은 명령 시퀀스 (82) 에 대해 경계 명령들로서 지칭될 수도 있다.
명령 시퀀스 (82) 가, 선점이 발생하는 것이 허용되는 선택된 명령 범위인 것을 나타내기 위해, GPU 드라이버 (28) 는 명령 시퀀스 (82) 의 제 1 GPU 명령을 유지하는 명령 슬롯 (S3) 바로 전에 발생하는 명령 슬롯 (S2) 에 토큰을 배치한다. 또한, GPU 드라이버 (28) 는 명령 시퀀스 (82) 의 마지막 GPU 명령을 유지하는 명령 슬롯 (S6) 바로 후에 발생하는 명령 슬롯 (S7) 에 또 다른 토큰을 배치한다.
도 5 의 예시적인 출력 GPU 명령 스트림 (80) 에서, 토큰들은, CPU (6) 로부터 선점 통지를 수신하는 것에 응답하여 GPU (12) 가 출력 GPU 명령 스트림 (80) 의 실행을 선점하도록 허용되는 출력 GPU 명령 스트림 (80) 에서의 특정 선점 범위를 나타낸다. 예를 들어, 제 1 명령 슬롯 (S2) 에 배치된 시작 선점 범위 토큰은 선점 범위의 시작부를 나타낼 수도 있고, 제 2 명령 슬롯 (S7) 에 배치된 종단 선점 범위 토큰은 선점 범위의 종단부를 나타낼 수도 있다. 시작 선점 범위 토큰은, 시작 선점 범위 토큰의 프로세싱 후 및 종단 선점 범위 토큰의 프로세싱 전의 임의의 시간에 선점이 발생하는 것이 허용되는 것을 나타낼 수도 있다. 종담 선점 범위 토큰은, 종단 선점 범위 토큰 후에 선점이 발생하도록 허용되지 않는 것을 나타낼 수도 있다. 도 5 에 도시된 예시적인 선점 범위 (C2, C3, C4, C5) 에 있어서, 명령 슬롯들 (S2 및 S7) 에서의 토큰들은, 명령들 (C2, C3, C4, 및 C5) 중 어느 하나, 명령 (C2) 바로 전이지만 명령 슬롯 (S2) 에서의 토큰을 프로세싱한 후, 및 명령 (C5) 을 프로세싱한 후이지만 명령 슬롯 (S7) 에서의 토큰을 프로세싱하기 이전 사이에서 선점이 발생할 수도 있다는 것을 나타냄에 유의하여야 한다.
출력 GPU 명령 스트림 (80) 의 프로세싱 동안, GPU (12) 가 명령 슬롯 (S2) 에서 토큰에 맞닥뜨릴 때, GPU (12) 는 선점 허용 상태 변수를 현재 프로세싱되는 명령들에 대해 선점이 허용되는 것을 나타내는 값으로 설정한다. GPU (12) 가 명령 슬롯 (S7) 에 토큰을 맞닥뜨릴 때, GPU (12) 는 선점 허용 상태 변수를 현재 프로세싱되는 명령들에 대해 선점이 허용되지 않는 것을 나타내는 값으로 재설정한다. GPU (12) 가 CPU (6) 로부터 선점 통지를 수신하는 경우, GPU (12) 는 선점 허용 상태 변수가 선점이 현재 허용되는 것을 나타내는지 여부를 결정할 수도 있다. 선점이 현재 허용되는 경우에는, GPU (12) 는 출력 GPU 명령 스트림 (80) 의 실행을 선점할 수도 있다. 그렇지 않으면, 선점이 현재 허용되지 않는 경우에는, GPU (12) 는, 선점이 허용되는 명령 시퀀스의 시작부를 나타내는 다른 토큰이 맞닥뜨려질 때까지 선점을 연기할 수도 있다.
도 5 에 묘사된 예시적인 출력 GPU 명령 스트림 (80) 에서, 명령 슬롯들 (S2 및 S7) 에 배치된 선점 토큰들은 선점이 발생되도록 허용되는 명령 범위 (82) 의 시작부 및 종단부를 각각 나타낸다. 추가적인 예들에서, 명령 범위 (82) 는 명령들의 비-인터럽트가능 범위이도록 GPU 드라이버 (28) 에 의해 선택될 수도 있다. 이러한 예들에서, 명령 슬롯들 (S2 및 S7) 에 배치된 선점 토큰들은, 선점이 발생하도록 허용되지 않는 명령 범위 (82) 의 시작부 및 종단부를 각각 나타낼 수도 있다. 명령 범위 (82) 의 선택은 도 4 와 관련하여 상기 개략된 것들과 유사한 다양한 기준들에 기초할 수도 있다.
도 4 및 도 5 에 도시된 예시적인 출력 GPU 명령 스트림들 (70, 80) 은 추가적인 명령이 명령 슬롯에 포함되지 않은 개별 명령 슬롯들을 점유하는 것으로서 토큰들을 묘사하였지만, 다른 예들에서, 명령 슬롯은 토큰 및 명령 양자 모두를 포함할 수도 있다. 예를 들어, 특정 명령에 포함된 플래그는, 토큰이 명령과 동일한 명령 슬롯에 포함되는지 여부를 나타낼 수도 있다.
도 6 은 이 개시물에 따라 연기된-선점 스케줄링을 수행하도록 GPU 를 제어하기 위한 예시적인 기법을 나타내는 흐름도이다. 도 6 에 도시된 예시적인 기법은 예시적인 목적들을 위해 도 1 및 도 2 에 도시된 CPU (6) 에 의해 수행되는 것으로서 설명된다. 다른 예들에서, 도 6 에 예시된 기법은 이 개시물의 도 1 및 도 2 에 도시된 시스템들 또는 컴포넌트들 중 임의의 것 (예를 들어, CPU (6) 상에서 동작하는 GPU 드라이버 (28)) 에서 또는 본 명세서에서 구체적으로 언급되지 않은 다른 유형들의 그래픽 프로세싱 시스템들에서 구현될 수도 있다.
CPU (6) 는 선점이 발생하는 것을 허용하기 위한 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택한다 (100). 다르게 말하면, CPU (6) 는, GPU 명령 스트림의 실행을 선점하기 위한 GPU (6) 로부터의 선점 통지를 수신하는 것에 응답하여, GPU 명령 스트림을 프로세싱하는 GPU (12) 가 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들인 것으로서 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택한다. CPU (6) 는 선택된 하나 이상의 로케이션들에 기초하여 GPU 명령 스트림에 하나 이상의 토큰들을 배치한다 (102). 하나 이상의 토큰들은, GPU 명령 스트림에서의 선택된 하나 이상의 로케이션들에서 선점이 발생하는 것이 허용되는 것을 GPU (12) 에 대해 나타낼 수도 있다. 예를 들어, CPU (6) 는 선택된 로케이션들의 각각에 대해 GPU 명령 스트림에 하나 이상의 토큰들을 배치할 수도 있다. 이러한 예들에서, 선택된 로케이션들의 각각에 대해, 각기의 로케이션과 연관된 하나 이상의 토큰들은, 각기의 로케이션에서 선점이 발생하도록 허용되는 것을 GPU (12) 에 대해 나타낼 수도 있다. 일부 예들에서, CPU (6) 는 선점이 발생하도록 허용되는 로케이션들의 각각에 대해 GPU 명령 스트림에서 단일 토큰을 배치할 수도 있다. 이러한 예들에서, 단일 토큰은, 일부 경우들에서, 선점이 발생하도록 허용되는 GPU 명령 스트림에서 토큰들과 각기의 로케이션들 사이에 일-대-일 맵핑 (mapping) 을 생성하기 위해, 선점이 발생하도록 허용되는 GPU 명령 스트림에서의 실제 로케이션들 (예를 들어, 명령 경계) 에 배치될 수도 있다. 추가적인 예들에서, CPU (6) 는 선점이 발생하도록 허용되는 로케이션들의 각각에 대해 GPU 명령 스트림에 다수의 토큰들을 배치할 수도 있다. 추가적인 예들에서, CPU (6) 는, 반드시 선점이 발생하도록 허용되는 로케이션들일 필요는 없는 로케이션들에서 GPU 명령 스트림에 하나 이상의 토큰들을 배치할 수도 있지만, 이러한 토큰들은 그럼에도 불구하고 GPU 명령 스트림에서 선점이 발생하도록 허용되는 실제 로케이션들을 나타낼 수도 있다.
CPU (6) 는 GPU (12) 로 하여금 GPU 명령 스트림의 실행을 시작하게 한다 (104). GPU 명령 스트림이 GPU (12) 상에서 실행되고 있는 동안, CPU (6) 는, 다른 GPU 명령 스트림이 GPU (12) 상에서 실행될 준비가 되었다는 것을 나타내는 통지를 GPU (12) 에 전송한다 (106). 선점 통지는, GPU (12) 가, GPU 명령 스트림에 배치된 하나 이상의 토큰들에 기초하여 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 낮은 스케줄링 우선순위를 갖는, GPU (12) 상에서 실행되는 임의의 명령 스트림들에 대해 선점하여야 한다는 더 나타낼 수도 있다. 제 2 GPU 명령 스트림은 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 가질 수도 있다.
일부 예들에서, CPU (6) 는, GPU (12) 가 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 하나 이상의 명령 경계들을 선택하고, GPU (12) 에 대해 선택된 경계들을 나타내기 위해 GPU 명령 스트림에 하나 이상의 토큰들을 배치할 수도 있다. 예를 들어, 각각의 선택된 명령 경계에 대해, CPU (6) 는 각기의 명령 경계의 경계 명령들과 연관된 2 개의 상이한 명령 슬롯들 사이에 있는 명령 슬롯에 토큰을 배치할 수도 있다. 이러한 예들에서, 토큰들은, 일부 예들에서, 명령 경계 바로 전에 명령을 프로세싱한 후에 그리고 명령 경계 바로 후에 명령을 프로세싱하기 이전에 선점이 발생하도록 허용된다는 것을 나타낼 수도 있다.
추가적인 예들에서, CPU (6) 는, GPU (12) 가 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 하나 이상의 명령 범위들을 선택하고, GPU (12) 에 대해 선택된 명령 범위들을 나타내기 위해 GPU 명령 스트림에 하나 이상의 토큰들을 배치할 수도 있다. 예를 들어, 각각의 선택된 명령 범위에 대해, CPU (6) 는, 명령 범위의 제 1 GPU 명령을 유지하는 명령 슬롯 바로 이전에 발생하는 명령 슬롯에 토큰을 배치하고, 명령 범위의 마지막 GPU 명령을 유지하는 명령 슬롯 바로 후에 다른 토큰을 배치할 수도 있다. 이러한 예들에서, 토큰은, 일부 예들에서, 명령 범위 바로 이전에 명령을 프로세싱한 후에 그리고 명령 범위 바로 후에 명령을 프로세싱하기 전에, 명령 범위에서의 명령들 중 임의의 것을 프로세싱하는 것 사이에 선점이 발생하도록 허용되는 것을 나타낼 수도 있다.
추가적인 예들에서, CPU (6) 는, GPU 가 GPU 명령 스트림의 실행을 선점하도록 허용되지 않는 로케이션들로서 하나 이상의 명령 범위들을 선택하고, 그 선택된 하나 이상의 명령 범위들에 기초하여 GPU 가 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들인 것으로서 하나 이상의 로케이션들을 선택할 수도 있다. 예를 들어, CPU (6) 는, 명령들의 비-인터럽트가능 범위의 제 1 GPU 명령을 유지하는 명령 슬롯 바로 전에 발생하는 명령 슬롯에 토큰을 배치하고, 명령들의 비-인터럽트가능 범위의 마지막 GPU 명령을 유지하는 명령 슬롯 바로 후에 다른 토큰을 배치한다. 명령들의 비-인터럽트가능 범위의 시작부 및 종단부를 나타내는 토큰들은 또한, 선점이 발생하도록 허용되는 명령 범위들의 종단부 및 시작부를 각각 나타낼 수도 있다.
일부 예들에서, CPU (6) 는, 명령 스트림의 복수의 로케이션들에서 GPU 컨텍스트 스위치를 수행하는 추정된 비용에 기초하여 선점이 발생하도록 허용되는 명령 스트림에서의 로케이션들을 선택할 수도 있다. 예를 들어, CPU (6) 는, 특정 로케이션들에서 GPU 컨텍스트 스위치를 수행하는 추정된 비용이 임계치보다 적은 경우에 선점이 발생하도록 허용되는 로케이션으로서 그 특정 로케이션을 선택할 수도 있다. 일부 구현들에서, 임계치는 미리결정된 임계치일 수도 있다. 다른 구현들에서, 임계치는, 명령 스트림의 다양한 로케이션들에서 GPU 컨텍스트 스위치들을 수행하기 위한 추정된 비용들의 통계적 분석에 기초하여 결정될 수도 있다. 예를 들어, CPU (6) 는 하나 이상의 특정 로케이션들에서 GPU 컨텍스트 스위치를 수행하기 위한 추정된 비용이 하나 이상의 다른 비-선택된 로케이션들에서 GPU 컨텍스트 스위치를 수행하기 위한 추정된 비용보다 적은 경우에 선점이 발생하도록 허용되는 그들 하나 이상의 특정 로케이션들을 선택할 수도 있다. 또 다른 예로서, 가능한 로케이션들의 모두 중에서, GPU 드라이버는, GPU 컨텍스트 스위치를 수행하기 위한 최저 추정된 비용을 갖는 로케이션들의 10 퍼센트를 결정하고, 선점이 발생하도록 허용되는 로케이션들인 것으로서 그들 로케이션들을 선택할 수도 있다. GPU 컨텍스트 스위치를 수행하는 추정된 비용은, 일부 예들에서, CPU (6) 에 의해 결정된 실제 비용일 수도 있다. 추정된 또는 실제의 비용은, 일부 예들에서, 다음 중 하나 이상의 함수일 수도 있다: (1) GPU 컨텍스트 스위치를 수행하기 위해 필요한 프로세싱 시간의 추정된 또는 실제의 양 (즉, 프로세싱 시간 오버헤드); (2) GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리 대역폭 사용의 추정된 또는 실제의 양 (즉, 메모리 대역폭 오버헤드); (3) GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리의 추정된 또는 실제의 양 (즉, 메모리 사용 오버헤드); 및 (4) GPU 컨텍스트 스위치의 수행과 연관된 임의의 다른 오버헤드 파라미터.
추가적인 예들에서, CPU (6) 는, 명령 스트림과 연관된 소프트웨어 애플리케이션으로부터 수신된 명령들에 포함된 명령들의 논리적 그룹핑들에 기초하여 선점이 발생하도록 허용되는 명령 스트림에서의 로케이션들을 선택할 수도 있다. 명령들의 논리적 그룹핑 내의 명령들의 각각은 GPU (12) 에 의해 수행될 태스크 또는 태스크들의 셋트와 연관될 수도 있다. 일부 경우들에서, 명령들의 그룹핑들의 하나 이상은 복수의 GPU 커널들의 각각의 GPU 커널의 실행과 연관될 수도 있다. 예를 들어, 소프트웨어 애플리케이션들 (예를 들어, 소프트웨어 애플리케이션들 (24A, 24B) 에 의해 제공되는 명령들은 GPU (12) 에 의해 실행될 커널 (예를 들어, 동작들의 논리적 그룹핑의 수개의 인스턴스들이 GPU (12) 에 의해 병렬로 실행될 수도 있는 일반적-목적의 컴퓨팅 알고리즘에 대한 동작들의 논리적 그룹핑) 을 정의하는 명령들을 포함할 수도 있다. 이 예에서 커널을 정의하는 명령들의 실행에 끼어들기하는 것은, 프로세싱 시간, 메모리 대역폭 사용, 및/또는 메모리 사용의 면에서 비싼 (즉, 고비용의) 컨텍스트 스위치를 야기할 수도 있다. 따라서, 이 예에서, CPU (6) 는, GPU 커널의 실행과 연관되는 명령들의 그룹 내에 임의의 토큰들을 배치하지 않도록, 그리고, GPU 커널의 실행과 연관된 명령들의 그룹 전 및/또는 후에 하나 이상의 토큰들을 배치하도록 결정할 수도 있다.
추가적인 경우들에서, 명령들의 그룹핑들의 하나 이상은 복수의 그래픽 프레임들의 각각의 그래픽 프레임의 렌더링과 연관될 수도 있다. 예를 들어, 소프트웨어 애플리케이션에 의해 제공된 명령들은 렌더링될 복수의 그래픽 프레임들에 대한 드로잉 동작들을 포함할 수도 있다. 이러한 예들에서, CPU (6) 는, 복수의 그패픽 프레임의 렌더링과 연관되는 명령들의 그룹 내에 어떤 토큰들도 배치하지 않고, 그래픽 프레임의 렌더링과 연관된 명령들의 전 및/또는 후에 하나 이상의 토큰들을 배치하도록 결정할 수도 있다.
추가적인 경우들에서, 명령들의 그룹핑들의 하나 이상은 복수의 GPU 태스크들의 각기의 GPU 태스크의 실행과 연관될 수도 있다. 예를 들어, GPU 태스크는 드로우 콜 (draw call) 명령 (즉, GPU 로 하여금 프리미티브 또는 삼각형을 렌더링하도록 지시하는 명령) 일 수도 있고, CPU (6) 는, GPU 명령 스트림에서 드로우 명령들의 셋트에서의 각 드로우 콜 명령 사이 또는 GPU 명령 스트림에서 다수의 프리미티브들의 렌더링과 연관된 드로우 콜 명령들의 각 그룹 사이에 토큰을 배치할 수도 있다.
추가적인 예들에서, CPU (6) 는, 선점이 발생하도록 허용되어야하거나 허용되지 않아야 하는 특정 명령들에 관한 소프트웨어 애플리케이션으로부터 수신된 정보에 기초하여 선점이 발생하도록 허용되는 명령 스트림에서의 로케이션들을 선택할 수도 있다. 예를 들어, 소프트웨어 애플리케이션에 의해 제공된 명령들은 선점이 발생할 수도 있거나 발생하지 않을 수도 있는 프로그램에서의 동작들 및/또는 지시들의 논리적 그룹핑들을 식별할 수도 있다. 다른 예로서, 소프트웨어 애플리케이션에 의해 제공된 명령들은, 선점이 발생할 수도 있거나 발생하지 않을 수도 있는 프로그램 또는 명령들에서의 특정 지시들을 식별할 수도 있다. 이러한 경우에서, CPU (6) 는 이 정보에 기초하여 명령 스트림에 토큰들을 배치할 수도 있다.
도 7 내지 도 11 은, 이 개시물에 따라 GPU 명령 스트림에 배치된 토큰들에 기초하여 명령 스트림들의 실행을 선점하기 위한 다양한 기법들을 나타내는 흐름도이다. 도 7 내지 도 11 에 나타난 예시적인 기법들은 예시적인 목적을 위해 도 1 및 도 2 에서 도시된 GPU (12) 에 의해 수행되는 것으로 설명된다. 다른 예들에서, 도 7 내지 도 11 에서 나타난 기술들은 이 개시물의 도 1 및 도 2 에서 도시된 시스템들 또는 컴포넌트들의 어느 것 (예를 들어, GPU (12) 의 명령 엔진 (32)) 에서 또는 본 명세서에서 구체적으로 언급되지 않은 다른 유형들의 그래픽 프로세싱 시스템들에서 구현될 수도 있다.
도 7 은 이 개시물에 따라 GPU 명령 스트림에 배치된 토큰들에 기초하여 GPU 명령 스트림들의 실행을 선점하기 위한 예시적인 기법을 나타내는 흐름도이다. GPU (12) 는 GPU (12) 에서 프로세싱 유닛들의 하나 이상에서의 실행을 위해 제 1 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치한다 (108). GPU (12) 는 선점 통지를 수신한다 (110). 선점 통지는, 제 2 GPU 명령 스트림이 GPU (12) 상에서 실행될 준비가 되었다는 것을 나타낸다. 제 2 GPU 명령 스트림은 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 가질 수도 있다. 특정 GPU 명령 스트림에 대한 스케줄링 우선순위는, 일부 예들에서, 다음 중 하나 이상을 나타낸다: (1) 특정 GPU 명령 스트림이 다른 GPU 명령 스트림들의 실행에 대해 선점하도록 허용되는지 여부; (2) 있다면 다른 GPU 명령 스트림들의 어느 것에 대해 특정 GPU 명령 스트림이 선점하도록 허용되는지; (3) 특정 GPU 명령 스트림이 다른 GPU 명령 스트림들에 의해 선점되도록 허용되는지 여부; 및 (4) 있다면 다른 GPU 명령 스트림들 중 어느 것이 특정 GPU 명령 스트림에 대해 선점하도록 허용되는지.
일부 예들에서, 각 GPU 명령 스트림에 대한 스케줄링 우선순위는 가능한 스케줄링 우선순위 값들의 범위 내의 값과 동일할 수도 있다. 이러한 예들에서, 보다 높은 스케줄링 우선순위 값들을 갖는 GPU 명령 스트림들은, 일부 경우들에서, 보다 낮은 스케줄링 우선순위 값들을 갖는 GPU 명령 스트림들의 실행에 대해 선점하는 것이 가능할 수도 있다. 유사하게, 일부 경우들에서, 보다 낮은 스케줄링 우선순위 값들을 갖는 GPU 명령 스트림들은, 보다 높은 스케줄링 우선순위 값들을 갖는 GPU 명령 스트림들에 의해 선점되는 것이 가능할 수도 있다. 스케줄링 우선순위 값들은, 일부 예들에서, 그래픽 드라이버 (예를 들어, 도 1 에서의 GPU 드라이버 (28)) 에 의해서 또는 사용자 애플리케이션 (예를 들어, 도 1 에서의 애플리케이션들 (24A, 24B)) 에 의해서 특정될 수도 있다.
선점 통지를 수신하는 것에 응답하여, GPU (12) 는, 제 1 GPU 명령 스트림에서 토큰이 맞닥뜨려질 때까지, 프로세싱 유닛들 (34) 의 하나 이상에서의 실행을 위해 제 1 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치한다 (112). 제 1 GPU 명령 스트림에서 토큰을 맞닥뜨리는 것에 응답하여, GPU (12) 는 제 1 GPU 명령 스트림의 실행과 연관된 GPU (12) 의 상태를 저장한다 (114). GPU (12) 는 선택적으로, 제 2 GPU 명령 스트림의 실행과 관련하여 이전 상태가 저장된 경우에 제 2 GPU 명령 스트림의 실행과 연관된 GPU (12) 의 상태를 로드 (load) 할 수도 있다 (116). GPU (12) 는 GPU (12) 에서 프로세싱 유닛들 (34) 의 하나 이상에서의 실행을 위해 제 2 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치한다 (118).
도 8 은 이 개시물에 따라 GPU 명령 스트림을 프로세싱하기 위한 예시적인 기법을 나타내는 흐름도이다. 도 8 에서 나타난 기법은, 선점이 발생하도록 허용되는 특정 선점 포인트들을 나타내는 선점 토큰들, 예를 들어, 도 4 와 관련하여 상기 설명된 선점 토큰들과 함께 이용될 수도 있다.
GPU (12) 는 제 1 GPU 명령 스트림의 실행을 시작한다 (120). GPU (12) 는 프로세싱을 위한 다음 명령 슬롯을 선택한다 (122). GPU (12) 가 제 1 GPU 명령 스트림의 실행을 시작한 후의 제 1 시간 동안 프로세스 박스 (122) 를 수행하는 경우에, GPU (12) 는 프로세싱을 위해 제 1 GPU 명령 스트림에서 제 1 명령 슬롯을 선택한다.
GPU (12) 는 명령 슬롯이 토큰을 포함하는지를 결정한다 (124). 명령 슬롯이 토큰을 포함하지 않는다는 결정에 응답하여, GPU (12) 는 선점 통지가 수신되었는지 여부를 결정함이 없이 프로세싱 유닛들 (34) 의 하나 이상에 대해 명령 슬롯에서의 명령을 디스패치한다 (126). 실행을 위한 명령을 디스패치한 후에, GPU (12) 는 제 1 GPU 명령 스트림에서 프로세싱을 위한 다음 명령 슬롯을 선택할 수도 있다 (122). 다음 명령 슬롯은, 이전에 프로세싱된 명령 슬롯의 바로 후에 발생하는 명령 슬롯들의 시퀀스에서의 명령 슬롯일 수도 있다.
결정 블록 124 로 돌아 가서, 명령 슬롯이 토큰을 포함한다는 결정에 응답하여, GPU (12) 는, 이미 프로세싱되지 않은, 호스트 디바이스 (예를 들어, CPU (6)) 로부터 선점 통지가 수신되었는지 여부를 결정한다 (128). 예를 들어, GPU (12) 는 이미 프로세싱되지 않은, 선점 통지가 수신되었는지 여부를 나타내는 선점 통지 수신 상태 변수의 상태를 체크할 수도 있다. 선점 통지가 수신되지 않았다는 결정에 응답하여, GPU (12) 는 프로세싱 유닛들 (34) 의 하나 이상에 대해 명령 슬롯에서의 명령을 디스패치한다 (126). 실행을 위한 명령의 디스패치 후에, GPU (12) 는 제 1 GPU 명령 스트림에서 프로세싱을 위한 다음 명령 슬롯을 선택할 수도 있다 (122).
결정 박스 (128) 로 돌아 가서, 선점 통지가 수신되었다는 결정에 응답하여, GPU (12) 는 제 1 GPU 명령 스트림의 실행을 선점한다 (130). 제 1 GPU 명령 스트림의 실행의 선점은, 예를 들어, 제 1 GPU 명령 스트림의 실행과 연관된 GPU (12) 의 상태 저장 및, 일부 경우들에서, 제 2 GPU 명령 스트림의 실행을 위한 GPU (12) 의 이전에 저장된 상태의 로딩을 수반할 수도 있다. 일부 예들에서, GPU (12) 는, 제 2 GPU 명령 스트림의 로케이션을 식별하는 정보를 포함하는 CPU (6) 에 의해 쓰여진 GPU 레지스터를 읽음으로써 선점 통지에 응답하여 어느 명령 스트림을 실행할 것인지를 결정할 수도 있다.
GPU (12) 는 제 2 GPU 명령 스트림을 실행한다 (132). 일부 경우들에서, 제 2 GPU 명령 스트림은 제 2 GPU 명령 스트림의 선점을 허용하는 선점 토큰들을 포함할 수도 있다. 이러한 경우들에서, GPU (12) 는, 예를 들어, 제 2 GPU 명령 스트림을 실행하기 위해 도 8 에 도시된 기술을 재귀적으로 수행할 수도 있다. 즉, GPU (12) 는 프로세스 박스 (120) 에서 제 2 GPU 명령 스트림의 실행을 시작할 수도 있다.
제 2 GPU 명령 스트림의 실행을 완료한 후에, GPU (12) 는 제 1 GPU 명령 스트림의 실행을 재개한다 (134). 제 1 GPU 명령 스트림의 실행 재기는, 예를 들어, 제 1 GPU 명령 스트림의 실행과 연관된 GPU (12) 의 저장된 상태를 복원하는 것을 수반할 수도 있다. 제 1 GPU 명령 스트림의 실행 재개는, 선점 통지가 수신되지 않았다는 것을 나타내는 값으로 선점 통지 수신 상태 변수를 재설정하는 것을 또한 수반할 수도 있다. 제 1 GPU 명령 스트림의 실행 재개 후에, GPU (12) 는 제 1 GPU 명령 스트림에서 프로세싱을 위한 다음 명령 슬롯을 선택할 수도 있다 (122).
도 8 에 도시된 바와 같이, GPU (12) 는, 선점 통지가 수신되었다는 결정 (128-예) 및 현재 명령 프로세싱 사이클에 대한 명령 슬롯이 토큰을 포함한다는 결정 (124-예) 에 응답하여 GPU 명령 스트림의 실행을 선점할 수도 있다 (130). 한편, 주어진 명령 프로세싱 사이클에 대해, GPU (12) 는, 선점 통지가 수신되지 않았다는 결정 (128-아니오) 또는 현재 명령 프로세싱 사이클에 대한 명령 슬롯이 토큰을 포함지 않는다는 결정 (124-아니오) 에 응답하여, 주어진 명령 프로세싱 사이클 동안 GPU 명령 스트림의 실행의 선점 없이, GPU (12) 에서 프로세싱 유닛들 (34) 의 하나 이상에서의 실행을 위해 명령 슬롯에서의 명령을 디스패치할 수도 있다.
도 9 는 도 8 에 도시된 기법에 따라 명령 스트림들을 프로세싱할 때 선점 통지들을 핸들링 (handling) 하기 위한 예시적인 기법을 나타내는 흐름도이다. GPU (12) 는 선점 통지를 수신 및 검출한다 (136). 예를 들어, GPU (12) 는 CPU (6) 가 GPU (12) 에게 선점 통지를 전송하였는지 여부를 나타내는 값을 포함하는 GPU 레지스터 (예를 들어, GPU 하드웨어 레지스터 및/또는 GPU 메모리-맵핑된 레지스터) 를 폴 (poll) 할 수도 있다. CPU (6) 가 GPU 레지스터에서의 값을 어서트 (assert) 할 때, GPU (12) 는 선점 통지가 수신되었다는 것을 검출한다. 일부 예들에서, GPU (12) 는 선점 통지를 비동기적으로 검출할 수도 있다. 예를 들어, GPU 레지스터에서의 값이 CPU (6) 에 의해 어서트되었을 때, 인터럽트 (interrupt) 서비스 루틴은 어서션 (assertion) 을 핸들링할 수도 있다. 추가적인 예들에서, GPU (12) 는 선점 통지를 동기적으로 검출할 수도 있다. 예를 들어, GPU (12) 는, 선점 통지가 수신되었는지를 결정하기 위해 (예를 들어, 명령 슬롯에서의 명령을 프로세싱하기 이전에) 명령 슬롯 당 한번 GPU 레지스터를 폴할 수도 있다. 선점 통지의 수신 및/또는 검출에 응답하여, GPU (12) 는 선점 통지가 수신되었다는 것을 나타내기 위해 선점 통지 수신된 상태 변수의 상태를 변경한다 (138).
도 10 은 이 개시물에 따라 GPU 명령 스트림들을 프로세싱하기 위한 또 다른 예시적인 기법을 나타내는 흐름도이다. 도 10 에서 도시된 기법은, 선점이 발생되도록 허용되는 또는 아니면 발생되도록 허용되지 않는 특정 선점 범위들의 시작부와 종단부를 나타내는 섬점 토큰들, 예를 들어, 도 5 와 관련하여 설명된 선점 토큰들과 함께 이용될 수도 있다.
GPU (12) 는 제 1 GPU 명령 스트림을 실행하는 것을 시작한다 (140). GPU (12) 는 프로세싱을 위한 다음 명령을 선택한다 (142). GPU (12) 가 제 1 GPU 명령 스트림의 실행 시작 후에 제 1 시간 동안 프로세스 박스 (142) 를 수행하는 경우에, GPU (12) 는 프로세싱을 위해 제 1 GPU 명령 스트림에서 제 1 명령 슬롯을 선택한다.
GPU (12) 는 제 1 명령 슬롯이 토큰을 포함하는지를 결정한다 (144). 명령 슬롯이 토큰을 포함하지 않는다고 결정하는 것에 응답하여 GPU (12) 는 프로세싱 유닛들 (34) 에 명령 슬롯에서의 명령을 디스패치한다 (146). 실행을 위한 명령을 디스페치한 후에, GPU (12) 는 제 1 GPU 명령 스트림에서 프로세싱을 위한 다음 명령 슬롯을 선택할 수도 있다 (142). 다음 명령 슬롯은 이전에 프로세싱된 명령 슬롯 바로 후에 발생하는 명령 슬롯들의 시퀀스에서의 명령일 수도 있다.
결정 블록 (144) 으로 돌아가서, 명령 슬롯이 토큰을 포함하지 포함한다는 결정에 응답하여, GPU (12) 는 그 토큰에 기초하여 선점 허용 상태 변수를 변경한다 (148). 예를 들어, 토큰이 코드의 선점가능 범위 (즉, 선점 범위) 의 시작부를 지정하는 경우 또는 토큰이 코드의 비-인터럽트가능 범위의 종단부를 지정하는 경우에는, GPU (12) 는, 현재의 및 후속하는 명령 슬롯들을 프로세싱하는 것에 대해 선점이 현재 허용되는 것을 나타내는 값으로 선점 허용 상태 변수를 설정할 수도 있다. 다른 예로서, 토큰이 코드의 선점가능 범위 (즉, 선점 범위) 의 종단부를 지정하는 경우 또는 토큰이 코드의 비-인터럽트가능 범위의 시작부를 지정하는 경우에는, GPU (12) 는, 현재의 및 후속하는 명령 슬롯들을 프로세싱하는 것에 대해 선점이 현재 허용되지 않는 것을 나타내는 값으로 선점 허용 상태 변수를 설정할 수도 있다.
GPU (12) 는, 현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 결정한다 (150). 예를 들어, GPU (12) 는, 현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 나타내는 선점 허용 상태 변수에 기초하여 선점이 허용되는지 여부를 결정할 수도 있다. 프로세스 블록 (148) 과 관련하여 상기 설명된 바와 같이, GPU 명령 스트림에서 하나 이상의 토큰들을 프로세싱하는 것에 응답하여 선점 허용 상태 변수의 값이 변경 또는 설정될 수도 있다. 선점이 허용되지 않는다는 결정에 응답하여, GPU (12) 는 프로세싱 유닛들 (34) 의 하나 이상에 명령 슬롯에서의 명령을 디스패치한다 (146). 실행을 위한 명령을 디스패치한 후에, GPU (12) 는 제 1 GPU 명령 스트림에서 프로세싱을 위한 다음 명령 슬롯을 선택한다 (142).
한편, 선점이 허용된다는 결정에 응답하여, GPU (12) 는, 이미 프로세싱될 준비가 되지 않은 호스트 디바이스 (예를 들어, CPU (6)) 로부터의 선점 통지가 수신되었는지 여부를 결정한다 (152). 예를 들어, GPU (12) 는, 이미 프로세싱될 준비가 되지 않은 선점 통지가 수신되었는지 여부를 나타내는 선점 통지 수신 상태 변수의 상태를 체크할 수도 있다. 선점 통지가 수신되지 않았다는 결정에 응답하여, GPU (12) 는 현재의 프로세싱 사이클에 대해 GPU 명령 스트림을 반드시 선점할 필요 없이 프로세싱 유닛들 (34) 중 하나 이상에 대해 명령 슬롯에서 명령을 디스패치한다 (146). 실행을 위한 명령을 디스패치한 후에, GPU (12) 는 제 1 GPU 명령 스트림에서 프로세싱을 위한 다음 명령 슬롯을 선택한다 (142).
결정 블록 (152) 로 돌아가서, 섬점 통지가 수신되었다는 결정에 응답하여, GPU (12) 는 제 1 GPU 명령 스트림의 실행을 선점한다 (154). 제 1 GPU 명령 스트림의 실행의 선점은, 예를 들어, 제 1 GPU 명령 스트림의 실행과 연관된 GPU (12) 의 상태를 저장하는 것 및, 일부 경우들에서, 제 2 GPU 명령 스트림을 실행하기 위해 GPU (12) 의 이전에 저장된 상태를 로딩하는 것을 수반할 수도 있다. 일부 예들에서, GPU (12) 는, CPU (6) 에 의해 쓰여진 그리고 제 2 GPU 명령 스트림의 로케이션을 식별하는 정보를 포함하는 GPU 레지스터를 읽음으로써 선점 통지에 응답하여 어느 명령 스트림을 실행할지를 결정할 수도 있다.
GPU (12) 는 제 2 GPU 명령 스트림을 실행한다 (156). 일부 경우들에서, 제 2 GPU 명령 스트림은 제 2 GPU 명령 스트림의 선점에 대해 허용하는 선점 토큰들을 포함할 수도 있다. 일부 경우들에서, GPU (12) 는, 예를 들어, 제 2 GPU 명령 스트림을 실행하기 위해 도 10 에 도시된 기법을 재귀적으로 수행할 수도 있다. 즉, GPU (12) 는 프로세스 박스 (140) 에서 제 2 GPU 명령 스트림의 실행을 시작할 수도 있다.
제 2 GPU 명령 스트림의 실행을 완료한 후에, GPU (12) 는 제 1 GPU 명령 스트림의 실행을 재기한다 (158). 제 1 GPU 명령 스트림의 실행 재개는, 예를 들어, 제 1 GPU 명령 스트림의 실행과 연관된 GPU (12) 의 저장된 상태를 복원하는 것을 수반할 수도 있다. 제 1 GPU 명령 스트림의 실행 재개는 또한, 선점 통지가 수신되었다는 것을 나타내는 값으로 선점 통지 수신 상태 변수를 재설절하는 것을 수반할 수도 있다. 제 1 GPU 명령 스트림의 실행 재개 후에, GPU (12) 는 제 1 GPU 명령 스트림에서 프로세싱을 위한 다음 명령을 선택할 수도 있다 (142).
도 10 에 도시된 바와 같이, GPU (12) 는, 선점 통지가 수신되었다는 결정 (152-예) 및 현재의 명령 프로세싱 사이클에 대해 선점이 허용된다는 결정 (150-예) 에 응답하여 GPU 명령 스트림의 실행을 선점할 수도 있다. 한편, 주어진 명령 프로세싱 사이클에 대해, GPU (12) 는, 선점이 수신되지 않았다는 것 (152-아니오) 또는 선점이 현재의 명령 프로세싱 사이클에 대해 허용되지 않는다는 것 (150-아니오) 중 어느 일방의 결정에 응답하여 주어진 명령 프로세싱 사이클 동안 GPU 명령 스트림의 실행 선점 없이 GPU (12) 에서 프로세싱 유닛들 (34) 의 하나 이상의 실행을 위해 명령 슬롯에서 명령을 디스패치할 수도 있다.
도 11 은 도 10 에 도시된 기술에 딸 명령 스트림을 프로세싱할 때 선점 통지를 핸들링하기 위한 예시적인 기법을 나타내는 흐름도이다. GPU (12) 는 선점 통지를 수신 및/또는 검출한다 (160). 예를 들어, GPU (12) 는, 도 9 의 프로세스 박스 (136) 과 관련하여 상기 논의되었던 것과 유사한 방식으로 GPU (6) 가 GPU (12) 에 선점 통지를 전송하였는지 여부를 나타내는 값을 포함하는 GPU 레지스터 (예를 들어, GPU 하드웨어 레지스터 및/또는 GPU 메모리-맵핑된 레지스터) 를 폴할 수도 있다.
선점 통지를 수신 및/또는 검출하는 것에 응답하여, GPU (12) 는 현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 결정한다 (162). 예를 들어, GPU (12) 는, 현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 나타내는 선점 허용 상태 변수에 기초하여 선점이 허용되는지 여부를 결정할 수도 있다. 선점이 허용된다는 결정에 응답하여, GPU (12) 는 제 1 GPU 명령 스트림의 실행을 선점 (164) 하고 제 2 GPU 명령 스트림을 실행한다. 선점이 허용되지 않는다는 결정에 응답하여, GPU (12) 는, 선점 통지가 수신되지 않았다는 것을 나타내는 값으로 선점 통지 수신 상태 변수의 상태를 변경하고 (166), 선점이 허용되는 것을 나타내는 선점 토큰이 맞닥뜨려질 때까지 도 10 에 따라 명령 슬롯들을 프로세싱하는 것으로 리턴한다. 이러한 선점 토큰을 맞닥뜨린 후에, GPU (12) 는 도 10 에서 개략된 기법에 따라 이전의 선점 통지의 수신에 기초하여 제 1 GPU 명령 스트림의 실행을 선점할 수도 있다.
이 개시물의 다양한 양태들은 큐된 GPU 명령 스트림의 파싱 (parsing) 을 인터럽트하고 계류중의 보다 높은 우선순위 명령 스트림들에 대해 서비스하기 위한 연기된-선점형 스킴을 설명한다. 이 개시물의 기법들은, 일부 예들에서, 토큰들에 의해 마킹되는 GPU 명령 스트림 큐 (queue) 에서 선택된 포인트들에서 선점을 허용할 수도 있다. 일부 예들에서, 토큰들은 명령 스트림을 비-인터럽트가능 세그먼트들로 분할할 수도 있고, 이에 의해 명령 스트림의 민감한 부분들에서 선점이 일어나는 것을 방지할 수도 있다. 선점 포인트들은, 일부 예들에서, 정적으로 또는 동적으로 선택될 수도 있다. 일부 예들에서, 선점 요청 (즉, 선점 통지) 이 개시될 때, GPU 에서의 명령 파서 (command parser) (예를 들어, 명령 엔진 (32)) 는, 가장 가까운 토큰이 도달될 때까지 명령 스트림을 파싱하는 것을 계속할 수도 있고, 이 포인트에서, 명령 파서는 선점 요청에 의해 나타내어진 명령 스트림으로 스위치하고, 다 되면 정규 명령 스트림으로 다시 되돌아간다.
본 개시물에서 설명된 기법들은 적어도 부분적으로, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 예를 들어, 설명된 기법들의 다양한 양태들은, 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서 (DSP) 들, 주문형 집적회로 (ASIC) 들, 필드 프로그램가능 게이트 어레이 (FPGA) 들, 또는 다른 등가의 집적 또는 이산 로직 회로를 포함하는 하나 이상의 프로세서들 뿐만 아니라 그러한 컴포넌트들의 임의의 조합들로 구현될 수도 있다. 용어 "프로세서" 또는 "프로세싱 회로" 는 전술한 로직 회로 단독 또는 다른 로직 회로와의 조합 중 어느 것, 또는 프로세싱을 수행하는 이산 하드웨어와 같은 임의의 다른 등가 회로를 일반적으로 지칭할 수도 있다.
그러한 하드웨어, 소프트웨어 및 펌웨어는 동일한 디바이스 내에 또는 별도의 디바이스들 내에 구현되어 이 개시물에 설명된 다양한 동작들 및 기능들을 지원할 수도 있다. 또한, 설명된 유닛들, 모듈들 또는 컴포넌트들의 어느 것은 함께 또는 이산으로서 별개로 구현될 수도 있지만 로직 디바이스들을 상호동작가능하게 할 수도 있다. 모듈들 또는 유닛들로서 상이한 피쳐들의 묘사는 상이한 기능적 양태들을 강조하려는 의도이며, 그러한 모듈들 또는 유닛들이 별개의 하드웨어 또는 소프트웨어 컴포넌트들에 의해 실현되어야만 하는 것을 반드시 의미하는 것은 아니다. 오히려, 하나 이상의 모듈들 또는 유닛들과 연관된 기능성은 별개의 하드웨어, 펌웨어 및/또는 소프트웨어 컴포넌트들에 의해 수행될 수도 있고, 또는 공통 또는 별개의 하드웨어 또는 소프트웨어 컴포넌트들 내에 집적될 수도 있다.
이 개시물에서 설명된 기법들은 또한 명령들을 저장하는 컴퓨터 판독가능 저장 매체와 같은 컴퓨터 판독가능 매체에 저장되고, 수록되고 또는 인코딩될 수도 있다. 컴퓨터 판독가능 매체에 임베딩되거나 인코딩된 명령들은 하나 이상의 프로세서들로 하여금, 예를 들어 그 명령들이 하나 이상의 프로세서들에 의해 실행될 때, 본 명세서에서 설명된 기법들을 수행하게 할 수도 있다. 컴퓨터 판독가능 저장 매체는 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 프로그램가능 판독 전용 메모리 (PROM), 소거가능 프로그램가능 판독 전용 메모리 (EPROM), 전기적으로 소거가능한 프로그램가능 판독 전용 메모리 (EEPROM), 플래시 메모리, 하드 디스크, CD-ROM, 플로피 디스크, 카세트, 자기 매체들, 광학 매체들 또는 유형인 다른 컴퓨터 판독가능 저장 매체들을 포함할 수도 있다.
컴퓨터 판독가능 매체는 상기 열거한 것들과 같은, 유형의 저장 매체에 대응하는 컴퓨터 판독가능 저장 매체들을 포함할 수도 있다. 컴퓨터 판독가능 매체는 또한, 예를 들어 통신 프로토콜에 따라 일 장소에서 다른 장소로 컴퓨터 프로그램의 전달을 용이하게 하는 임의의 매체를 포함하는 통신 매체들을 포함할 수도 있다. 이러한 방식으로, 구문 "컴퓨터 판독가능 매체" 는 일반적으로 (1) 비일시적인, 유형의 컴퓨터 판독가능 저장 매체들, 및 (2) 신호 또는 반송파와 같은 비-유형의 컴퓨터 판독가능 통신 매체에 대응할 수도 있다.
다양한 양태들 및 예들이 설명되었다. 하지만, 다음의 청구항들의 범위로부터 벗어남이 없이 이 개시물의 구조 또는 기법들에 대해 변형들이 이루어질 수 있다.

Claims (74)

  1. 그래픽 프로세싱 유닛 (GPU) 명령 스트림의 실행을 선점하기 위한 프로세서로부터의 통지를 수신하는 것에 응답하여 상기 GPU 명령 스트림을 프로세싱하는 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 하나 이상의 로케이션들로서 상기 GPU 명령 스트림에서의 하나 이상의 로케이션들을, 상기 프로세서로, 선택하는 단계; 및
    선택된 상기 하나 이상의 로케이션들에 기초하여 상기 GPU 명령 스트림에 하나 이상의 토큰들을, 상기 프로세서로, 배치하는 단계로서, 상기 하나 이상의 토큰들은 상기 GPU 명령 스트림에서의 상기 선택된 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 상기 GPU 에 대해 나타내는, 상기 GPU 명령 스트림에 하나 이상의 토큰들을 상기 프로세서로 배치하는 단계를 포함하는, 방법.
  2. 제 1 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 단계는,
    상기 GPU 명령 스트림에서의 상기 하나 이상의 로케이션들의 각각에서 GPU 컨텍스트 스위치를 수행하기 위한 추정된 비용에 기초하여 상기 GPU 명령 스트림에서 상기 하나 이상의 로케이션들을 선택하는 단계를 포함하는, 방법.
  3. 제 2 항에 있어서,
    상기 GPU 컨텍스트 스위치를 수행하기 위한 추정된 비용은, 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 프로세싱 시간의 양, 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리 대역폭의 양, 및 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리의 양 중 적어도 하나의 함수인, 방법.
  4. 제 1 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 단계는,
    상기 GPU 명령 스트림에서의 명령들의 그룹핑들을 나타내는 정보에 기초하여 상기 GPU 명령 스트림에서 상기 하나 이상의 로케이션들을 선택하는 단계를 포함하고,
    상기 명령들의 그룹핑들의 각각은, 복수의 그래픽 프레임들의 각기의 그래픽 프레임의 렌더링, 복수의 GPU 커널들의 각기의 GPU 커널의 실행, 및 복수의 GPU 태스크들의 각기의 GPU 태스크의 실행 중 적어도 하나와 연관되는, 방법.
  5. 제 1 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 단계는,
    선점이 발생하여야 하는 특정 명령들 및 선점이 발생하지 않아야 하는 특정 명령들 중 적어도 일방을 나타내는, 상기 GPU 명령 스트림과 연관된 소프트웨어 애플리케이션으로부터 수신된 정보에 기초하여, 상기 GPU 명령 스트림에서 상기 하나 이상의 로케이션들을 선택하는 단계를 포함하는, 방법.
  6. 제 1 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 하나 이상의 로케이션들을 선택하는 단계는,
    상기 제 1 GPU 명령 스트림의 실행을 선점하기 위한 상기 프로세서로부터의 통지를 수신하는 것에 응답하여 상기 GPU 가 상기 제 1 GPU 명령 스트림의 실행으로부터 제 2 GPU 명령 스트림의 실행으로 스위치하도록 허용되는 하나 이상의 로케이션들로서 상기 GPU 명령 스트림에서의 상기 하나 이상의 로케이션들을 선택하는 단계를 포함하는, 방법.
  7. 제 1 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 단계는,
    상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 상기 GPU 명령 스트림에서 복수의 로케이션들을 선택하는 단계를 포함하는, 방법.
  8. 제 1 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 단계는,
    상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 하나 이상의 명령 경계들을 선택하는 단계를 포함하는, 방법.
  9. 제 1 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 단계는,
    상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 하나 이상의 명령 범위들을 선택하는 단계를 포함하는, 방법.
  10. 제 1 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 단계는,
    상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되지 않는 로케이션들로서 하나 이상의 명령 범위들을 선택하는 단계; 및
    선택된 상기 하나 이상의 명령 범위들에 기초하여 상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 상기 하나 이상의 로케이션들을 선택하는 단계를 포함하는, 방법.
  11. 제 1 항에 있어서,
    상기 GPU 에 의해 액세스가능한 메모리 내에 상기 GPU 명령 스트림을 배치하는 단계를 더 포함하는, 방법.
  12. 제 1 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 방법은,
    상기 GPU 로 하여금 상기 제 1 GPU 명령 스트림의 실행을 시작하게 하는 단계; 및
    상기 제 1 GPU 명령 스트림이 상기 GPU 상에서 실행되고 있는 동안, 상기 제 1 GPU 명령 스트림에 배치된 상기 하나 이상의 토큰들에 기초하여, 제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것 및 상기 GPU 는 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 낮은 스케줄링 우선순위를 갖는 상기 GPU 상에서 실행되고 있는 임의의 명령 스트림들에 대해 선점하여야 하는 것을 나타내는 통지를 상기 GPU 에 전송하는 단계를 더 포함하고,
    상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 방법.
  13. 제 1 항에 있어서,
    GPU 로, 상기 GPU 명령 스트림에 배치된 상기 하나 이상의 토큰들에 기초하여 상기 GPU 명령 스트림의 실행을 선점하는 단계를 더 포함하는, 방법.
  14. 제 1 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 방법은,
    GPU 로, 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하는 단계;
    상기 GPU 로, 제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것을 나타내는 통지를 수신하는 단계로서, 상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 상기 제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것을 나타내는 통지를 수신하는 단계;
    상기 통지를 수신하는 것에 응답하여, 상기 GPU 로, 상기 제 1 GPU 명령 스트림에서 상기 하나 이상의 토큰들의 토큰이 맞닥뜨려질 때까지, 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 명령들을 디스패치하는 단계;
    상기 GPU 로, 상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 제 1 GPU 명령 스트림의 실행과 연관된 상기 GPU 의 상태를 저장하는 단계; 및
    상기 GPU 로, 상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 2 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하는 단계를 더 포함하는, 방법.
  15. 제 14 항에 있어서,
    상기 제 2 GPU 명령 스트림의 실행 완료 후에 상기 GPU 의 저장된 상기 상태를 복원하는 단계를 더 포함하는, 방법.
  16. 프로세서를 포함하는 디바이스로서,
    상기 프로세서는,
    그래픽 프로세싱 유닛 (GPU) 명령 스트림의 실행을 선점하기 위한 상기 프로세서로부터의 통지를 수신하는 것에 응답하여 상기 GPU 명령 스트림을 프로세싱하는 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 하나 이상의 로케이션들로서 상기 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택하고, 선택된 상기 하나 이상의 로케이션들에 기초하여 상기 GPU 명령 스트림에 하나 이상의 토큰들을 배치하도록 구성되고,
    상기 하나 이상의 토큰들은 상기 GPU 명령 스트림에서의 상기 선택된 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 상기 GPU 에 대해 나타내는, 디바이스.
  17. 제 16 항에 있어서,
    상기 프로세서는, 상기 GPU 명령 스트림에서의 상기 하나 이상의 로케이션들의 각각에서 GPU 컨텍스트 스위치를 수행하기 위한 추정된 비용에 기초하여 상기 GPU 명령 스트림에서 상기 하나 이상의 로케이션들을 선택하도록 더 구성되는, 디바이스.
  18. 제 17 항에 있어서,
    상기 GPU 컨텍스트 스위치를 수행하기 위한 추정된 비용은, 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 프로세싱 시간의 양, 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리 대역폭의 양, 및 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리의 양 중 적어도 하나의 함수인, 디바이스.
  19. 제 16 항에 있어서,
    상기 프로세서는, 상기 GPU 명령 스트림에서의 명령들의 그룹핑들을 나타내는 정보에 기초하여 상기 GPU 명령 스트림에서 상기 하나 이상의 로케이션들을 선택하도록 더 구성되고,
    상기 명령들의 그룹핑들의 각각은, 복수의 그래픽 프레임들의 각기의 그래픽 프레임의 렌더링, 복수의 GPU 커널들의 각기의 GPU 커널의 실행, 및 복수의 GPU 태스크들의 각기의 GPU 태스크의 실행 중 적어도 하나와 연관되는, 디바이스.
  20. 제 16 항에 있어서,
    상기 프로세서는, 선점이 발생하여야 하는 특정 명령들 및 선점이 발생하지 않아야 하는 특정 명령들 중 적어도 일방을 나타내는, 상기 GPU 명령 스트림과 연관된 소프트웨어 애플리케이션으로부터 수신된 정보에 기초하여, 상기 GPU 명령 스트림에서 상기 하나 이상의 로케이션들을 선택하도록 더 구성되는, 디바이스.
  21. 제 16 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 프로세서는, 상기 제 1 GPU 명령 스트림의 실행을 선점하기 위한 상기 프로세서로부터의 통지를 수신하는 것에 응답하여 상기 GPU 가 상기 제 1 GPU 명령 스트림의 실행으로부터 제 2 GPU 명령 스트림의 실행으로 스위치하도록 허용되는 하나 이상의 로케이션들로서 상기 GPU 명령 스트림에서의 상기 하나 이상의 로케이션들을 선택하도록 더 구성되는, 디바이스.
  22. 제 16 항에 있어서,
    상기 프로세서는, 상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 상기 GPU 명령 스트림에서 복수의 로케이션들을 선택하도록 더 구성되는, 디바이스.
  23. 제 16 항에 있어서,
    상기 프로세서는, 상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 하나 이상의 명령 경계들을 선택하도록 더 구성되는, 디바이스.
  24. 제 16 항에 있어서,
    상기 프로세서는, 상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 하나 이상의 명령 범위들을 선택하도록 더 구성되는, 디바이스.
  25. 제 16 항에 있어서,
    상기 프로세서는, 상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되지 않는 로케이션들로서 하나 이상의 명령 범위들을 선택하도록, 그리고, 선택된 상기 하나 이상의 명령 범위들에 기초하여 상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 상기 하나 이상의 로케이션들을 선택하도록 더 구성되는, 디바이스.
  26. 제 16 항에 있어서,
    상기 프로세서는, 상기 GPU 에 의해 액세스가능한 메모리 내에 상기 GPU 명령 스트림을 배치하도록 더 구성되는, 디바이스.
  27. 제 16 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 프로세서는,
    상기 GPU 로 하여금 상기 제 1 GPU 명령 스트림의 실행을 시작하게 하고; 그리고
    상기 제 1 GPU 명령 스트림이 상기 GPU 상에서 실행되고 있는 동안, 상기 GPU 명령 스트림에 배치된 상기 하나 이상의 토큰들에 기초하여, 제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것 및 상기 GPU 는 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 낮은 스케줄링 우선순위를 갖는 상기 GPU 상에서 실행되고 있는 임의의 명령 스트림들에 대해 선점하여야 하는 것을 나타내는 통지를 상기 GPU 에 전송하도록 더 구성되며,
    상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 디바이스.
  28. 제 16 항에 있어서,
    상기 GPU 명령 스트림에 배치된 상기 하나 이상의 토큰들에 기초하여 상기 GPU 명령 스트림의 실행을 선점하도록 구성된 GPU 를 더 포함하는, 디바이스.
  29. 제 16 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 GPU 는,
    상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하고;
    제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것을 나타내는 통지를 수신하며;
    상기 통지를 수신하는 것에 응답하여, 상기 제 1 GPU 명령 스트림에서 상기 하나 이상의 토큰들의 토큰이 맞닥뜨려질 때까지, 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 명령들을 디스패치하고;
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 제 1 GPU 명령 스트림의 실행과 연관된 상기 GPU 의 상태를 저장하며; 그리고
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 2 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하도록 더 구성되고,
    상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 디바이스.
  30. 제 29 항에 있어서,
    상기 GPU 는, 상기 제 2 GPU 명령 스트림의 실행 완료 후에 상기 GPU 의 저장된 상기 상태를 복원하도록 더 구성되는, 디바이스.
  31. 제 16 항에 있어서,
    상기 디바이스는 무선 통신 디바이스를 포함하는, 디바이스.
  32. 제 16 항에 있어서,
    상기 디바이스는 모바일 폰 핸드셋을 포함하는, 디바이스.
  33. 장치로서,
    그래픽 프로세싱 유닛 (GPU) 명령 스트림의 실행을 선점하기 위한 통지를 수신하는 것에 응답하여 상기 GPU 명령 스트림을 프로세싱하는 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 하나 이상의 로케이션들로서 상기 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택하는 수단; 및
    선택된 상기 하나 이상의 로케이션들에 기초하여 상기 GPU 명령 스트림에 하나 이상의 토큰들을 배치하는 수단을 포함하고,
    상기 하나 이상의 토큰들은 상기 GPU 명령 스트림에서의 상기 선택된 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 상기 GPU 에 대해 나타내는, 장치.
  34. 제 33 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 수단은,
    상기 GPU 명령 스트림에서의 상기 하나 이상의 로케이션들의 각각에서 GPU 컨텍스트 스위치를 수행하기 위한 추정된 비용에 기초하여 상기 GPU 명령 스트림에서 상기 하나 이상의 로케이션들을 선택하는 수단을 포함하는, 장치.
  35. 제 34 항에 있어서,
    상기 GPU 컨텍스트 스위치를 수행하기 위한 추정된 비용은, 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 프로세싱 시간의 양, 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리 대역폭의 양, 및 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리의 양 중 적어도 하나의 함수인, 장치.
  36. 제 33 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 수단은, 상기 GPU 명령 스트림에서의 명령들의 그룹핑들을 나타내는 정보에 기초하여 상기 GPU 명령 스트림에서 상기 하나 이상의 로케이션들을 선택하는 수단을 포함하고,
    상기 명령들의 그룹핑들의 각각은, 복수의 그래픽 프레임들의 각기의 그래픽 프레임의 렌더링, 복수의 GPU 커널들의 각기의 GPU 커널의 실행, 및 복수의 GPU 태스크들의 각기의 GPU 태스크의 실행 중 적어도 하나와 연관되는, 장치.
  37. 제 33 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 수단은,
    상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 하나 이상의 명령 경계들을 선택하는 수단을 포함하는, 장치.
  38. 제 33 항에 있어서,
    상기 하나 이상의 로케이션들을 선택하는 수단은,
    상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 하나 이상의 명령 범위들을 선택하는 수단을 포함하는, 장치.
  39. 제 33 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 장치는,
    상기 GPU 로 하여금 상기 제 1 GPU 명령 스트림의 실행을 시작하게 하는 수단; 및
    상기 제 1 GPU 명령 스트림이 상기 GPU 상에서 실행되고 있는 동안, 상기 GPU 명령 스트림에 배치된 상기 하나 이상의 토큰들에 기초하여, 제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것 및 상기 GPU 는 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 낮은 스케줄링 우선순위를 갖는 상기 GPU 상에서 실행되고 있는 임의의 명령 스트림들에 대해 선점하여야 하는 것을 나타내는 통지를 상기 GPU 에 전송하는 수단을 더 포함하고,
    상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 장치.
  40. 제 33 항에 있어서,
    상기 GPU 명령 스트림에 배치된 상기 하나 이상의 토큰들에 기초하여 상기 GPU 명령 스트림의 실행을 선점하는 수단을 더 포함하는, 장치.
  41. 제 33 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 장치는,
    상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하는 수단;
    제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것을 나타내는 통지를 수신하는 수단;
    상기 통지를 수신하는 것에 응답하여, 상기 제 1 GPU 명령 스트림에서 상기 하나 이상의 토큰들의 토큰이 맞닥뜨려질 때까지, 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 명령들을 디스패치하는 수단;
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 제 1 GPU 명령 스트림의 실행과 연관된 상기 GPU 의 상태를 저장하는 수단; 및
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 2 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하는 수단을 더 포함하고,
    상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 장치.
  42. 명령들을 저장한 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은, 실행될 때, 하나 이상의 프로세스들로 하여금,
    그래픽 프로세싱 유닛 (GPU) 명령 스트림의 실행을 선점하기 위한 상기 하나 이상의 프로세서들로부터의 통지를 수신하는 것에 응답하여 상기 GPU 명령 스트림을 프로세싱하는 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 하나 이상의 로케이션들로서 상기 GPU 명령 스트림에서의 하나 이상의 로케이션들을 선택하게 하고; 그리고
    선택된 상기 하나 이상의 로케이션들에 기초하여 상기 GPU 명령 스트림에 하나 이상의 토큰들을 배치하게 하며,
    상기 하나 이상의 토큰들은 상기 GPU 명령 스트림에서의 상기 선택된 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 상기 GPU 에 대해 나타내는, 컴퓨터 판독가능 저장 매체.
  43. 제 42 항에 있어서,
    상기 하나 이상의 프로세서들로 하여금 상기 하나 이상의 로케이션들을 선택하게 하는 상기 명령들은, 실행될 때 상기 하나 이상의 프로세서들로 하여금,
    상기 GPU 명령 스트림에서의 상기 하나 이상의 로케이션들의 각각에서 GPU 컨텍스트 스위치를 수행하기 위한 추정된 비용에 기초하여 상기 GPU 명령 스트림에서 상기 하나 이상의 로케이션들을 선택하게 하는 명령들을 포함하는, 컴퓨터 판독가능 저장 매체.
  44. 제 43 항에 있어서,
    상기 GPU 컨텍스트 스위치를 수행하기 위한 추정된 비용은, 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 프로세싱 시간의 양, 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리 대역폭의 양, 및 상기 GPU 컨텍스트 스위치를 수행하기 위해 필요한 메모리의 양 중 적어도 하나의 함수인, 컴퓨터 판독가능 저장 매체.
  45. 제 42 항에 있어서,
    상기 하나 이상의 프로세서들로 하여금 상기 하나 이상의 로케이션들을 선택하게 하는 상기 명령들은, 실행될 때 상기 하나 이상의 프로세서들로 하여금,
    상기 GPU 명령 스트림에서의 명령들의 그룹핑들을 나타내는 정보에 기초하여 상기 GPU 명령 스트림에서 상기 하나 이상의 로케이션들을 선택하게 하는 명령들을 포함하고,
    상기 명령들의 그룹핑들의 각각은, 복수의 그래픽 프레임들의 각기의 그래픽 프레임의 렌더링, 복수의 GPU 커널들의 각기의 GPU 커널의 실행, 및 복수의 GPU 태스크들의 각기의 GPU 태스크의 실행 중 적어도 하나와 연관되는, 컴퓨터 판독가능 저장 매체.
  46. 제 42 항에 있어서,
    상기 하나 이상의 프로세서들로 하여금 상기 하나 이상의 로케이션들을 선택하게 하는 상기 명령들은, 실행될 때 상기 하나 이상의 프로세서들로 하여금,
    상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 하나 이상의 명령 경계들을 선택하게 하는 명령들을 포함하는, 컴퓨터 판독가능 저장 매체.
  47. 제 42 항에 있어서,
    상기 하나 이상의 프로세서들로 하여금 상기 하나 이상의 로케이션들을 선택하게 하는 상기 명령들은, 실행될 때 상기 하나 이상의 프로세서들로 하여금,
    상기 GPU 가 상기 GPU 명령 스트림의 실행을 선점하도록 허용되는 로케이션들로서 하나 이상의 명령 범위들을 선택하게 하는 명령들을 포함하는, 컴퓨터 판독가능 저장 매체.
  48. 제 42 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 컴퓨터 판독가능 저장 매체는,
    실행될 때 상기 하나 이상의 프로세서들로 하여금,
    상기 GPU 로 하여금 상기 제 1 GPU 명령 스트림의 실행을 시작하게 하고; 그리고
    제 1 GPU 명령 스트림이 상기 GPU 상에서 실행되고 있는 동안, 상기 GPU 명령 스트림에 배치된 상기 하나 이상의 토큰들에 기초하여, 상기 제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것 및 상기 GPU 는 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 낮은 스케줄링 우선순위를 갖는 상기 GPU 상에서 실행되고 있는 임의의 명령 스트림들에 대해 선점하여야 하는 것을 나타내는 통지를 상기 GPU 에 전송하게 하는 명령들을 저장하며,
    상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 컴퓨터 판독가능 저장 매체.
  49. 그래픽 프로세싱 유닛 (GPU) 명령 스트림에 포함된 하나 이상의 토큰들에 기초하여 상기 GPU 명령 스트림의 실행을, GPU 로, 선점하는 단계를 포함하고,
    상기 하나 이상의 토큰들은 상기 GPU 명령 스트림에서의 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 나타내는, 방법.
  50. 제 49 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 방법은, 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 하나 이상의 명령들을, 상기 GPU 로, 디스패치하는 단계를 더 포함하고,
    상기 GPU 명령 스트림의 실행을 선점하는 단계는,
    제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것을 나타내는 호스트 디바이스로부터의 통지를, 상기 GPU 로, 수신하는 단계로서, 상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 상기 제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것을 나타내는 호스트 디바이스로부터의 통지를 상기 GPU 로 수신하는 단계,
    상기 통지를 수신하는 것에 응답하여, 상기 GPU 로, 상기 제 1 GPU 명령 스트림에서 상기 하나 이상의 토큰들의 토큰이 맞닥뜨려질 때까지, 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해, 상기 GPU 로, 상기 제 1 GPU 명령 스트림에서 명령들을 디스패치하는 단계,
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 제 1 GPU 명령 스트림의 실행과 연관된 상기 GPU 의 상태를, 상기 GPU 로, 저장하는 단계, 및
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해, 상기 GPU 로, 상기 제 2 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하는 단계를 포함하는, 방법.
  51. 제 49 항에 있어서,
    GPU 명령 스트림에서의 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함하는지 여부를 결정하는 단계; 및
    호스트 디바이스로부터 선점 통지가 수신되었는지 여부를 결정하는 단계를 더 포함하고,
    상기 GPU 명령 스트림의 실행을 선점하는 단계는, 선점 통지가 수신되었고 상기 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함한다는 결정에 응답하여 상기 GPU 명령 스트림의 실행을 선점하는 단계를 포함하는, 방법.
  52. 제 51 항에 있어서,
    선점 통지가 수신되지 않았다는 결정 또는 상기 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함하지 않는다는 결정 중 어느 일방의 결정에 응답하여, 현재의 명령 프로세싱 사이클 동안 상기 GPU 명령 스트림의 실행을 선점함이 없이 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 명령 슬롯에서 명령을 디스패치하는 단계를 더 포함하는, 방법.
  53. 제 49 항에 있어서,
    현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 나타내는 선점 허용 상태 변수에 기초하여 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 결정하는 단계로서, 상기 선점 허용 상태 변수의 값은 상기 GPU 명령 스트림에서의 상기 하나 이상의 토큰들의 하나 이상을 프로세싱하는 것에 응답하여 변경되는, 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 결정하는 단계; 및
    호스트 디바이스로부터 선점 통지가 수신되었는지 여부를 결정하는 단계를 더 포함하고,
    상기 GPU 명령 스트림의 실행을 선점하는 단계는, 선점 통지가 수신되었고 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용된다는 결정에 응답하여 상기 GPU 명령 스트림의 실행을 선점하는 단계를 포함하는, 방법.
  54. 제 53 항에 있어서,
    선점 통지가 수신되지 않았다는 결정 또는 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용되지 않는다는 결정 중 어느 일방의 결정에 응답하여, 현재의 명령 프로세싱 사이클 동안 상기 GPU 명령 스트림의 실행을 선점함이 없이 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 명령 슬롯에서 명령을 디스패치하는 단계를 더 포함하는, 방법.
  55. 장치로서,
    그래픽 프로세싱 유닛 (GPU) 명령 스트림에 포함된 하나 이상의 토큰들에 기초하여 상기 GPU 명령 스트림의 실행을 선점하도록 구성된 그래픽 프로세싱 유닛 (GPU) 을 포함하고,
    상기 하나 이상의 토큰들은 상기 GPU 명령 스트림에서의 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 나타내는, 장치.
  56. 제 55 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 GPU 는,
    상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하고;
    제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것을 나타내는 호스트 디바이스로부터의 통지를 수신하고;
    상기 통지를 수신하는 것에 응답하여, 상기 제 1 GPU 명령 스트림에서 상기 하나 이상의 토큰들이 맞닥뜨려질 때까지, 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 명령들을 디스패치하며;
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 제 1 GPU 명령 스트림의 실행과 연관된 상기 GPU 의 상태를 저장하고; 그리고
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 2 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하도록 더 구성되고,
    상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 장치.
  57. 제 55 항에 있어서,
    상기 GPU 는,
    GPU 명령 스트림에서의 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함하는지 여부를 결정하고;
    호스트 디바이스로부터 선점 통지가 수신되었는지 여부를 결정하며; 그리고
    선점 통지가 수신되었고 상기 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함한다는 결정에 응답하여 상기 GPU 명령 스트림의 실행을 선점하도록 더 구성되는, 장치.
  58. 제 57 항에 있어서,
    상기 GPU 는, 선점 통지가 수신되지 않았다는 결정 또는 상기 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함하지 않는다는 결정 중 어느 일방의 결정에 응답하여, 현재의 명령 프로세싱 사이클 동안 상기 GPU 명령 스트림의 실행을 선점함이 없이 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 명령 슬롯에서 명령을 디스패치하도록 더 구성되는, 장치.
  59. 제 55 항에 있어서,
    상기 GPU 는,
    현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 나타내는 선점 허용 상태 변수에 기초하여 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 결정하고;
    호스트 디바이스로부터 선점 통지가 수신되었는지 여부를 결정하며; 그리고
    선점 통지가 수신되었고 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용된다는 결정에 응답하여 상기 GPU 명령 스트림의 실행을 선점하도록 더 구성되고,
    상기 선점 허용 상태 변수의 값은 상기 GPU 명령 스트림에서의 상기 하나 이상의 토큰들의 하나 이상을 프로세싱하는 것에 응답하여 변경되는, 장치.
  60. 제 59 항에 있어서,
    상기 GPU 는, 선점 통지가 수신되지 않았다는 결정 또는 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용되지 않는다는 결정 중 어느 일방의 결정에 응답하여, 상기 현재의 명령 프로세싱 사이클 동안 상기 GPU 명령 스트림의 실행을 선점함이 없이 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 명령 슬롯에서 명령을 디스패치하도록 더 구성되는, 장치.
  61. 제 55 항에 있어서,
    상기 장치는 무선 통신 디바이스를 포함하는, 장치.
  62. 제 55 항에 있어서,
    상기 장치는 모바일 폰 핸드셋을 포함하는, 장치.
  63. 장치로서,
    그래픽 프로세싱 유닛 (GPU) 명령 스트림을 실행하는 수단; 및
    GPU 명령 스트림에 포함된 하나 이상의 토큰들에 기초하여 상기 GPU 명령 스트림의 실행을 선점하는 수단을 포함하고,
    상기 하나 이상의 토큰들은 상기 GPU 명령 스트림에서의 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 나타내는, 장치.
  64. 제 63 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 장치는, 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하는 수단을 더 포함하고,
    상기 GPU 명령 스트림의 실행을 선점하는 수단은,
    제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것을 나타내는 호스트 디바이스로부터의 통지를, 상기 GPU 로, 수신하는 수단으로서, 상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 상기 제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것을 나타내는 호스트 디바이스로부터의 통지를 상기 GPU 로 수신하는 수단,
    상기 통지를 수신하는 것에 응답하여, 상기 제 1 GPU 명령 스트림에서 상기 하나 이상의 토큰들의 토큰이 맞닥뜨려질 때까지, 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 명령들을 디스패치하는 수단,
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 제 1 GPU 명령 스트림의 실행과 연관된 상기 GPU 의 상태를 저장하는 수단, 및
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 2 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하는 수단을 포함하는, 장치.
  65. 제 63 항에 있어서,
    GPU 명령 스트림에서의 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함하는지 여부를 결정하는 수단; 및
    호스트 디바이스로부터 선점 통지가 수신되었는지 여부를 결정하는 수단을 더 포함하고,
    상기 GPU 명령 스트림의 실행을 선점하는 수단은, 선점 통지가 수신되었고 상기 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함한다는 결정에 응답하여 상기 GPU 명령 스트림의 실행을 선점하는 수단을 포함하는, 장치.
  66. 제 65 항에 있어서,
    선점 통지가 수신되지 않았다는 결정 또는 상기 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함하지 않는다는 결정 중 어느 일방의 결정에 응답하여, 현재의 명령 프로세싱 사이클 동안 상기 GPU 명령 스트림의 실행을 선점함이 없이 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 명령 슬롯에서 명령을 디스패치하는 수단을 더 포함하는, 장치.
  67. 제 63 항에 있어서,
    현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 나타내는 선점 허용 상태 변수에 기초하여 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 결정하는 수단으로서, 상기 선점 허용 상태 변수의 값은 상기 GPU 명령 스트림에서의 상기 하나 이상의 토큰들의 하나 이상을 프로세싱하는 것에 응답하여 변경되는, 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 결정하는 수단; 및
    호스트 디바이스로부터 선점 통지가 수신되었는지 여부를 결정하는 수단을 더 포함하고,
    상기 GPU 명령 스트림의 실행을 선점하는 수단은, 선점 통지가 수신되었고 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용된다는 결정에 응답하여 상기 GPU 명령 스트림의 실행을 선점하는 수단을 포함하는, 장치.
  68. 제 67 항에 있어서,
    선점 통지가 수신되지 않았다는 결정 또는 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용되지 않는다는 결정 중 어느 일방의 결정에 응답하여, 현재의 명령 프로세싱 사이클 동안 상기 GPU 명령 스트림의 실행을 선점함이 없이 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 명령 슬롯에서 명령을 디스패치하는 수단을 더 포함하는, 장치.
  69. 명령들을 저장한 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은, 실행될 때, 그래픽 프로세싱 유닛 (GPU) 으로 하여금, GPU 명령 스트림에 포함된 하나 이상의 토큰들에 기초하여 상기 GPU 명령 스트림의 실행을 선점하게 하고,
    상기 하나 이상의 토큰들은 상기 GPU 명령 스트림에서의 하나 이상의 로케이션들에서 선점이 발생하도록 허용되는 것을 나타내는, 컴퓨터 판독가능 저장 매체.
  70. 제 69 항에 있어서,
    상기 GPU 명령 스트림은 제 1 GPU 명령 스트림이고,
    상기 컴퓨터 판독가능 저장 매체는,
    실행될 때 상기 GPU 로 하여금,
    상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하게 하고;
    제 2 GPU 명령 스트림이 상기 GPU 상에서 실행될 준비가 되어 있다는 것을 나타내는 호스트 디바이스로부터의 통지를 수신하게 하며;
    상기 통지를 수신하는 것에 응답하여, 상기 제 1 GPU 명령 스트림에서 상기 하나 이상의 토큰들의 토큰이 맞닥뜨려질 때까지, 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 1 GPU 명령 스트림에서 명령들을 디스패치하게 하고;
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 제 1 GPU 명령 스트림의 실행과 연관된 상기 GPU 의 상태를 저장하게 하며; 그리고
    상기 제 1 GPU 명령 스트림에서 상기 토큰을 맞닥뜨리는 것에 응답하여 상기 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 제 2 GPU 명령 스트림에서 하나 이상의 명령들을 디스패치하게 하는 명령들을 더 포함하고,
    상기 제 2 GPU 명령 스트림은 상기 제 1 GPU 명령 스트림의 스케줄링 우선순위보다 더 큰 스케줄링 우선순위를 갖는, 컴퓨터 판독가능 저장 매체.
  71. 제 69 항에 있어서,
    실행될 때 상기 GPU 로 하여금,
    GPU 명령 스트림에서의 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함하는지 여부를 결정하게 하고;
    호스트 디바이스로부터 선점 통지가 수신되었는지 여부를 결정하게 하며; 그리고
    선점 통지가 수신되었고 상기 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함한다는 결정에 응답하여 상기 GPU 명령 스트림의 실행을 선점하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 저장 매체.
  72. 제 71 항에 있어서,
    실행될 때 상기 GPU 로 하여금,
    선점 통지가 수신되지 않았다는 결정 또는 상기 명령 슬롯이 상기 하나 이상의 토큰들의 토큰을 포함하지 않는다는 결정 중 어느 일방의 결정에 응답하여, 현재의 명령 프로세싱 사이클 동안 상기 GPU 명령 스트림의 실행을 선점함이 없이 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 명령 슬롯에서 명령을 디스패치하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 저장 매체.
  73. 제 69 항에 있어서,
    상기 컴퓨터 판독가능 저장 매체는,
    실행될 때 상기 GPU 로 하여금,
    현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 나타내는 선점 허용 상태 변수에 기초하여 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용되는지 여부를 결정하게 하고;
    호스트 디바이스로부터 선점 통지가 수신되었는지 여부를 결정하게 하며; 그리고
    선점 통지가 수신되었고 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용된다는 결정에 응답하여 상기 GPU 명령 스트림의 실행을 선점하게 하는 명령들을 더 포함하고,
    상기 선점 허용 상태 변수의 값은 상기 GPU 명령 스트림에서의 상기 하나 이상의 토큰들의 하나 이상을 프로세싱하는 것에 응답하여 변경되는, 컴퓨터 판독가능 저장 매체.
  74. 제 73 항에 있어서,
    실행될 때 상기 GPU 로 하여금,
    선점 통지가 수신되지 않았다는 결정 또는 상기 현재의 명령 프로세싱 사이클에 대해 선점이 허용되지 않는다는 결정 중 어느 일방의 결정에 응답하여, 현재의 명령 프로세싱 사이클 동안 상기 GPU 명령 스트림의 실행을 선점함이 없이 상기 GPU 의 하나 이상의 프로세싱 유닛들에서의 실행을 위해 상기 명령 슬롯에서 명령을 디스패치하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 저장 매체.
KR1020157004395A 2012-07-20 2013-06-20 그래픽 프로세싱 유닛 명령 스트림들을 스케줄링하기 위한 연기된 선점 기법들 KR101770900B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/554,805 2012-07-20
US13/554,805 US10002021B2 (en) 2012-07-20 2012-07-20 Deferred preemption techniques for scheduling graphics processing unit command streams
PCT/US2013/046844 WO2014014614A1 (en) 2012-07-20 2013-06-20 Deferred preemption techniques for scheduling graphics processing unit command streams

Publications (2)

Publication Number Publication Date
KR20150036726A true KR20150036726A (ko) 2015-04-07
KR101770900B1 KR101770900B1 (ko) 2017-08-23

Family

ID=48782616

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157004395A KR101770900B1 (ko) 2012-07-20 2013-06-20 그래픽 프로세싱 유닛 명령 스트림들을 스케줄링하기 위한 연기된 선점 기법들

Country Status (5)

Country Link
US (1) US10002021B2 (ko)
EP (1) EP2875486B1 (ko)
KR (1) KR101770900B1 (ko)
CN (1) CN104641396B (ko)
WO (1) WO2014014614A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190085391A (ko) * 2018-01-10 2019-07-18 성균관대학교산학협력단 Gpu 커널 트랜잭션화 방법 및 컴퓨팅 장치

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8928678B2 (en) * 2012-08-02 2015-01-06 Intel Corporation Media workload scheduler
US9043865B2 (en) * 2012-08-31 2015-05-26 Motorola Solutions, Inc. Prioritized token based arbiter and method
US9632834B2 (en) * 2013-05-17 2017-04-25 Nvidia Corporation Assigning priorities to computational work streams by mapping desired execution priorities to device priorities
US9741090B2 (en) * 2013-06-03 2017-08-22 Panasonic Intellectual Property Corporation Of America Graphics display processing device, graphics display processing method, and vehicle equipped with graphics display processing device
US9996390B2 (en) * 2014-06-10 2018-06-12 Samsung Electronics Co., Ltd. Method and system for performing adaptive context switching
US10021161B2 (en) 2014-11-05 2018-07-10 Qualcomm Incorporated Compression of graphical commands for remote display
KR102224844B1 (ko) * 2014-12-23 2021-03-08 삼성전자주식회사 선점 방식을 선택하는 방법 및 장치.
US9886934B2 (en) * 2014-12-24 2018-02-06 Intel Corporation Ordering mechanism for offload graphics scheduling
US10319348B2 (en) 2015-05-11 2019-06-11 Vixs Systems, Inc. Memory subsystem consumer trigger
US20160335734A1 (en) * 2015-05-11 2016-11-17 Vixs Systems, Inc. Memory subsystem synchronization primitives
US9972064B1 (en) * 2015-06-29 2018-05-15 Amazon Technologies, Inc. Non-intrusive and low-power recording
EP3113169B1 (en) * 2015-07-02 2018-11-14 OpenSynergy GmbH Method for controlling a graphic processing unit in a control unit, in particular of a vehicle, computer program product and system for an embedded control unit
US10332230B2 (en) * 2015-08-31 2019-06-25 Qualcomm Incorporated Characterizing GPU workloads and power management using command stream hinting
US9842376B2 (en) * 2015-09-29 2017-12-12 Qualcomm Incorporated Graphics processing unit preemption with pixel tile level granularity
US10134103B2 (en) * 2015-10-23 2018-11-20 Qualcomm Incorporated GPU operation algorithm selection based on command stream marker
US10580108B2 (en) * 2015-12-22 2020-03-03 Intel Corporation Method and apparatus for best effort quality of service (QoS) scheduling in a graphics processing architecture
US10210593B2 (en) * 2016-01-28 2019-02-19 Qualcomm Incorporated Adaptive context switching
US9799089B1 (en) 2016-05-23 2017-10-24 Qualcomm Incorporated Per-shader preamble for graphics processing
US9799094B1 (en) 2016-05-23 2017-10-24 Qualcomm Incorporated Per-instance preamble for graphics processing
US10817224B2 (en) * 2016-06-23 2020-10-27 Qualcomm Incorporated Preemptive decompression scheduling for a NAND storage device
US10091904B2 (en) * 2016-07-22 2018-10-02 Intel Corporation Storage sled for data center
US10600141B2 (en) * 2016-09-23 2020-03-24 Nvidia Corporation Monitoring execution in a graphics processing unit
TWI602116B (zh) * 2017-03-07 2017-10-11 Silicon Motion Inc 資料儲存裝置及其資料維護方法
US10908962B1 (en) 2017-06-12 2021-02-02 Apple Inc. System and method to share GPU resources
US10373287B2 (en) 2017-08-18 2019-08-06 Apple Inc. Fast GPU context switch
CN107602771B (zh) 2017-09-20 2018-06-26 中国石油大学(北京) 适用于煤层气钻井的成膜剂及其制备方法和钻井液与应用
JP2019082819A (ja) * 2017-10-30 2019-05-30 株式会社日立製作所 アクセラレータ部の利用に対する課金を支援するシステム及び方法
CN108121566A (zh) * 2017-12-06 2018-06-05 中国航空工业集团公司西安航空计算技术研究所 一种图形指令解析设计方法
US11137815B2 (en) * 2018-03-15 2021-10-05 Nvidia Corporation Metering GPU workload with real time feedback to maintain power consumption below a predetermined power budget
US11423035B2 (en) 2019-02-04 2022-08-23 Pearson Education, Inc. Scoring system for digital assessment quality with harmonic averaging
US11854433B2 (en) * 2019-02-04 2023-12-26 Pearson Education, Inc. Systems and methods for item response modelling of digital assessments
US10748239B1 (en) * 2019-03-01 2020-08-18 Qualcomm Incorporated Methods and apparatus for GPU context register management
US11182215B2 (en) 2019-09-30 2021-11-23 Sony Interactive Entertainment LLC System and method for multi-tenant implementation of graphics processing unit
CN110784418B (zh) * 2019-10-24 2022-06-24 烽火通信科技股份有限公司 一种基于时延约束的数据发送方法及***
US11257179B2 (en) * 2020-03-13 2022-02-22 Apple Inc. Graphics processing techniques based on frame portion cost estimates
US11907764B2 (en) * 2020-05-20 2024-02-20 GE Precision Healthcare LLC Managing computer resources for clinical applications
CN112784755B (zh) * 2021-01-25 2024-07-12 瑞芯微电子股份有限公司 一种轻型的人脸跟踪方法和存储设备
US20230206379A1 (en) * 2021-12-28 2023-06-29 Advanced Micro Devices, Inc. Inline suspension of an accelerated processing unit

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6754690B2 (en) 1999-09-16 2004-06-22 Honeywell, Inc. Method for time partitioned application scheduling in a computer operating system
US6809735B1 (en) 2002-01-08 2004-10-26 Apple Computer, Inc. Virtualization of graphics resources
US7673304B2 (en) 2003-02-18 2010-03-02 Microsoft Corporation Multithreaded kernel for graphics processing unit
US7565659B2 (en) 2004-07-15 2009-07-21 International Business Machines Corporation Light weight context switching
US7548244B2 (en) * 2005-01-12 2009-06-16 Sony Computer Entertainment Inc. Interactive debugging and monitoring of shader programs executing on a graphics processor
GB0519981D0 (en) 2005-09-30 2005-11-09 Ignios Ltd Scheduling in a multicore architecture
US7545381B2 (en) 2005-11-10 2009-06-09 Via Technologies, Inc. Interruptible GPU and method for context saving and restoring
US7844970B2 (en) 2006-08-22 2010-11-30 International Business Machines Corporation Method and apparatus to control priority preemption of tasks
US8310492B2 (en) * 2009-09-03 2012-11-13 Ati Technologies Ulc Hardware-based scheduling of GPU work
US10169072B2 (en) 2009-09-23 2019-01-01 Nvidia Corporation Hardware for parallel command list generation
US9519943B2 (en) * 2010-12-07 2016-12-13 Advanced Micro Devices, Inc. Priority-based command execution
US9021146B2 (en) * 2011-08-30 2015-04-28 Apple Inc. High priority command queue for peripheral component
US8842122B2 (en) * 2011-12-15 2014-09-23 Qualcomm Incorporated Graphics processing unit with command processor
US20130179614A1 (en) * 2012-01-10 2013-07-11 Diarmuid P. Ross Command Abort to Reduce Latency in Flash Memory Access

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190085391A (ko) * 2018-01-10 2019-07-18 성균관대학교산학협력단 Gpu 커널 트랜잭션화 방법 및 컴퓨팅 장치

Also Published As

Publication number Publication date
EP2875486A1 (en) 2015-05-27
US10002021B2 (en) 2018-06-19
US20140022266A1 (en) 2014-01-23
CN104641396B (zh) 2018-04-10
KR101770900B1 (ko) 2017-08-23
CN104641396A (zh) 2015-05-20
WO2014014614A1 (en) 2014-01-23
EP2875486B1 (en) 2016-09-14

Similar Documents

Publication Publication Date Title
KR101770900B1 (ko) 그래픽 프로세싱 유닛 명령 스트림들을 스케줄링하기 위한 연기된 선점 기법들
US10210593B2 (en) Adaptive context switching
KR101587201B1 (ko) Gpu 워크의 하드웨어 기반 스케쥴링
US10026145B2 (en) Resource sharing on shader processor of GPU
US5917502A (en) Peer-to-peer parallel processing graphics accelerator
US10242420B2 (en) Preemptive context switching of processes on an accelerated processing device (APD) based on time quanta
EP3357034B1 (en) Graphics processing unit preemption with pixel tile level granularity
US8963933B2 (en) Method for urgency-based preemption of a process
KR101666416B1 (ko) 우선순위 기반의 컨텍스트 선점
WO2014099249A1 (en) Multi-mode memory access techniques for performing graphics processing unit-based memory transfer operations
US9122522B2 (en) Software mechanisms for managing task scheduling on an accelerated processing device (APD)
US9430281B2 (en) Heterogeneous enqueuing and dequeuing mechanism for task scheduling
US20120198458A1 (en) Methods and Systems for Synchronous Operation of a Processing Device
US20130263144A1 (en) System Call Queue Between Visible and Invisible Computing Devices
US20130135327A1 (en) Saving and Restoring Non-Shader State Using a Command Processor
US20080122843A1 (en) Multi-thread vertex shader, graphics processing unit and flow control method
US20130160019A1 (en) Method for Resuming an APD Wavefront in Which a Subset of Elements Have Faulted
US20130155079A1 (en) Saving and Restoring Shader Context State

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