KR20150051868A - 하드웨어 컨텍스트 복구 흐름 동안에 프로그램가능한 소프트웨어 컨텍스트 상태 실행을 지원하기 위한 방법 및 장치 - Google Patents

하드웨어 컨텍스트 복구 흐름 동안에 프로그램가능한 소프트웨어 컨텍스트 상태 실행을 지원하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR20150051868A
KR20150051868A KR1020140134605A KR20140134605A KR20150051868A KR 20150051868 A KR20150051868 A KR 20150051868A KR 1020140134605 A KR1020140134605 A KR 1020140134605A KR 20140134605 A KR20140134605 A KR 20140134605A KR 20150051868 A KR20150051868 A KR 20150051868A
Authority
KR
South Korea
Prior art keywords
context
detour
buffer
pointer
execution
Prior art date
Application number
KR1020140134605A
Other languages
English (en)
Other versions
KR101693662B1 (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 KR20150051868A publication Critical patent/KR20150051868A/ko
Application granted granted Critical
Publication of KR101693662B1 publication Critical patent/KR101693662B1/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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • 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
    • 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)
  • Executing Machine-Instructions (AREA)
  • Computer Graphics (AREA)

Abstract

하드웨어 컨텍스트 복구 흐름 동안에 프로그램가능한 소프트웨어 컨텍스트 상태 실행을 지원하기 위한 방법 및 장치가 설명된다. 한 예에서, 고유 컨텍스트 메모리 버퍼, 고유 우회 컨텍스트 포인터 및 컨텍스트 ID에 대한 대응하는 크기, 우회 컨텍스트 오프셋, 및 우회 컨텍스트 버퍼 주소 범위를 포함하는 컨텍스트 ID가 그래픽 애플리케이션에 할당된다. 제1 컨텍스트 작업부하의 실행이 우회되면, 제1 컨텍스트 작업부하의 상태는, 할당된 컨텍스트 메모리 버퍼에 보관된다. 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋 및 우회 컨텍스트 버퍼 주소 범위의 크기는, 보관된 컨텍스트 상태와는 독립된 레지스터들에 보관된다. 컨텍스트는, 보관된 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋 및 버퍼 크기에 액세스함으로써 복구된다.

Description

하드웨어 컨텍스트 복구 흐름 동안에 프로그램가능한 소프트웨어 컨텍스트 상태 실행을 지원하기 위한 방법 및 장치{A METHOD AND APPARATUS FOR SUPPORTING PROGRAMMABLE SOFTWARE CONTEXT STATE EXECUTION DURING HARDWARE CONTEXT RESTORE FLOW}
본 발명은 그래픽 애플리케이션 실행 분야에 관한 것으로, 특히, 우회(indirection) 이후의 컨텍스트 복구에 관한 것이다.
컴퓨팅 시스템에서 그래픽 처리 유닛에 의한 그래픽 작업부하의 실행에서, 운영 체제(OS)를 통한 애플리케이션은 그래픽 드라이버에 작업부하를 제출한다. 그래픽 드라이버는 그래픽 처리 유닛이 작업부하를 실행할 수 있도록 작업부하를 구성한다. 각각의 작업부하는 컨텍스트(context)라고도 하는 복수의 그래픽 애플리케이션으로 분할될 수 있다. 각각의 컨텍스트는 디스플레이 상에 그래픽을 렌더링하기 위해 그래픽 처리 하드웨어의 파이프라인의 각 스테이지를 통과한다. 그래픽 드라이버는 각각의 그래픽 애플리케이션에 대해 고유한 컨텍스트 ID(식별자)를 할당한다. 애플리케이션이 그래픽 드라이버에 작업부하를 제출할 때마다, 그래픽 드라이버는 컨텍스트 ID로 작업부하를 식별한 다음, 그것을 그래픽 처리 유닛(GPU)에 제출한다.
그래픽 처리 유닛은, 각각의 컨텍스트를 그 컨텍스트가 완료될 때까지 또는 그 컨텍스트가 인터럽트될 때까지 실행한다. 그래픽 하드웨어는, 컨텍스트 내의 명령어 시퀀스가 컨텍스트 ID의 변화에 도달하면 컨텍스트 스위칭을 검출한다. 컨텍스트는 임의의 다양한 상이한 이유로 그래픽 드라이버에 의해 스위칭 아웃될 수 있다. 특정한 컨텍스트는 상위 우선순위 컨텍스트에게 선점권을 내줄 수 있다. 컨텍스트가 이벤트 대기로 인해 정체된다면 그 컨텍스트는 스위칭 아웃될 수 있다. 이것은 정체된 컨텍스트가 계속 대기하는 동안 또 다른 컨텍스트가 실행되는 것을 허용한다. 컨텍스트는 스위칭 아웃되어 그 컨텍스트가 실행을 계속하기 위해 요구되는 즉각적 결과를 또 다른 컨텍스트가 생성할 수 있다. 한 컨텍스트의 스위칭 아웃과 또 다른 컨텍스트의 스위칭 인은 우회(indirection)라 부른다.
컨텍스트가 스위칭 아웃되면, 그 컨텍스트의 현재 상태는 하드웨어에 의해 보관된다. 그 컨텍스트가 다시 스위칭 인되면, 보관된 상태는 하드웨어에 의해 복구된다. 보관된 컨텍스트 상태는 컨텍스트 스위칭 시점의 컨텍스트의 하드웨어 상태를 포함한다. 이것은 컨텍스트가 작용하는 표면들(예를 들어, 버텍스 버퍼, 스트림 아웃 버퍼, 깊이 버퍼, 렌더 타겟, 샘플러 텍스쳐 맵, 다양한 쉐이더에 대한 커널 상태 포인터 등)에 대한 그래픽 주소를 포함한다.
그래픽 메모리 표면을 저장하는데 이용되는 주소는 핀닝(pin)된다. 애플리케이션이 실행 중인 한, 그래픽 메모리 표면은 온전히 남아 있고 컨텍스트가 그래픽 드라이버에 의해 GPU에 재제출될 때 있는 그대로 이용될 수 있다.
본 발명의 실시예들은 유사한 참조 번호는 유사한 요소를 가리키는 첨부된 도면에서, 제한이 아닌 예로서 예시된다.
도 1a는 본 발명의 실시예에 따른 컨텍스트 상태 버퍼(context state buffer)와 컨텍스트 상태 버퍼에 상태를 보관하기 위한 우회 명령어 스택(indirection instruction stack)을 갖춘 하드웨어 로직도이다.
도 1b는 본 발명의 실시예에 따른 도 1의 컴포넌트에 접속된 컨텍스트 상태 복구 명령어 스택(context state restore instruction stack)을 갖춘 하드웨어 로직도이다.
도 2a는 본 발명의 실시예에 따른 컨텍스트를 복구하기 위한 프로세스 흐름도의 제1 부분이다.
도 2b는 본 발명의 실시예에 따른 컨텍스트를 복구하기 위한 도 2a의 프로세스 흐름도의 제2 부분이다.
도 3a는 본 발명의 실시예에 따른 한 컨텍스트로부터 또 다른 컨텍스트로의 우회의 간략화된 프로세스 흐름도이다.
도 3b는 본 발명의 실시예에 따른 2개 이상의 상이한 컨텍스트들 사이의 우회의 간략화된 프로세스 흐름도이다.
도 3c는 본 발명의 실시예에 따른 한 컨텍스트로부터 또 다른 컨텍스트로의 우회의 또 다른 관점의 간략화된 프로세스 흐름도이다.
도 4는 본 발명의 실시예에서 이용하기에 적합한 그래픽 처리 유닛의 일부의 블록도이다.
도 5는 본 발명의 실시예에서 이용하기에 적합한 컴퓨터 시스템의 블록도이다.
핀닝되지 않는 메모리 자원에 의해, 운영 체제(OS)는 컨텍스트가 스위칭 아웃(switch out)될 때 메모리 페이지들을 또 다른 위치에 스왑핑할 수 있다. OS에 의한 이러한 종류의 메모리 스왑에 의해, 비활성 컨텍스트의 메모리 자원에 속하는 그래픽 주소가 변할 것이다. 컨텍스트 상태가 다시 스위칭 인(switch in)되면, 컨텍스트 상태는 새로운 그래픽 주소로 갱신될 필요가 있다. 그러면 그래픽 하드웨어는 컨텍스트를 복구하기 위해 갱신된 주소를 이용할 수 있다.
하드웨어는 변경이 있을 때 그래픽 주소의 갱신을 보조할 수 있다. 하드웨어 컨텍스트 상태는 하드웨어에 보관될 수 있고 이것은 컨텍스트의 복구시에 이용될 수 있다. OS, 애플리케이션, 또는 그래픽 드라이버는 통상적으로 보관된 컨텍스트를 복구하기 위하여 컨텍스트를 재제출할 것이다. 재제출된 컨텍스트는 컨텍스트 복구시에 하드웨어가 이용할 그래픽 주소를 가질 것이다. 재제출된 컨텍스트는 컨텍스트 복구시에 하드웨어가 이용할 그래픽 주소를 가질 것이다. 주소, 특히 가상 주소는 컨텍스트 상태를 갱신하는 한 예로서 이용된다. 그러나, 상태의 기타 임의의 원하는 양태는 여기서 설명되는 이 기술을 이용하여 오버라이드(override)될 수 있다. 이것이 이하에서 더 설명된다. 제출들 사이에서 상태와 작업 부하가 변화될 수 있는 많은 다른 이용 모델들이 있다. 다양한 상이한 상태와 작업 부하 변화는 여기서 설명되는 방법 및 장치를 이용하여 이루어질 수 있다.
하드웨어는 복구 동안에 그 자신의 보관된 상태의 그래픽 주소를 오버라이드하기 위해 소프트웨어에 의해 제공되는 컨텍스트 상태를 이용할 수 있다. SW에 의해 제공된 컨텍스트 상태는 상당한 양이거나 요구되는 그래픽 주소를 오버라이드하는데 요구되는 최소치만큼일 수도 있다.
하드웨어에 의해 복구된 컨텍스트 상태는 순서 의존성을 가질 수도 있다. 그 결과, SW에 의해 제공된 컨텍스트 상태는 정확한 우회 위치에서 재제출된 컨텍스트로부터 상태를 오버라이드하는 메커니즘과 함께 이용될 수 있다. 이것은 우회된 컨텍스트를 복구하는 명령어 흐름 동안일 수 있다.
소프트웨어에 의해 제공된 컨텍스트 상태는 HW 컨텍스트의 복구 동안에 복수의 장소에서 재제출된 컨텍스트를 위해 GPU에 의해 복구된 하드웨어 컨텍스트 상태를 오버라이드할 수 있다. 즉, 재제출된 컨텍스트의 하드웨어 컨텍스트 복구 동안에 이전 상태를 오버라이드하는 하나보다 많은 예가 있을 수 있다. 또한, 우회를 위해 보관된 레지스터 값들을 이용하여 복수의 상태들이 지원될 수 있다.
여기의 예에서는, 값들은, 하드웨어에 의해 각각의 컨텍스트에 대한 우회 컨텍스트 포인터 레지스터(Indirect Context Pointer Register) 및 우회 컨텍스트 포인터 오프셋 레지스터(Indirect Context Pointer Offset Register)에 보관될 수 있다. 이 예에서, 우회 컨텍스트 포인터는, 하드웨어 상태를 오버라이드하기 위해 소프트웨어에 의해 제공된 상태를 갖는 그래픽 메모리 내의 버퍼를 가리킨다. 이 상태는 우회된 컨텍스트를 복구하기 위해 하드웨어에 의해 실행되는 커맨드(command)의 형태일 수도 있다. 우회 컨텍스트 포인터는 또한 실행을 위한 버퍼 크기를 나타낸다. 우회 컨텍스트 포인터 오프셋은 하드웨어 상태의 컨텍스트 메모리 버퍼에서 베이스 주소로부터의 오프셋을 운반한다. 하드웨어가 컨텍스트 복구 흐름 동안에 이 오프셋에 도달하면, 하드웨어는 우회 컨텍스트 포인터가 가리키는 버퍼로부터의 커맨드의 실행을 트리거할 수 있다. 우회 컨텍스트 포인터로부터의 커맨드의 실행 후에, 정기적인 컨텍스트 복구 실행이 재개될 수 있다.
우회 컨텍스트 포인터 버퍼는, 이 프로세스는 컨텍스트 복구 동안에 더 나중 지점에 다시 한번 트리거될 수 있도록 우회 컨텍스트 포인터와 우회 컨텍스트 포인터 오프셋을 변경하는 커맨드들을 가질 수 있다.
한 예에서, 우회 컨텍스트 포인터와 우회 컨텍스트 포인터 오프셋은 하드웨어 내의 MMIO(Memory Mapped Input/Output) 레지스터들로서 유지된다. 이들 레지스터들은 각각의 컨텍스트에 대해 독립적으로 유지되고 대응하는 컨텍스트가 스위칭될 때 하드웨어 상태의 일부로서 보관될 수 있다.
그래픽 드라이버의 관점에서, 소프트웨어는, 새로운 컨텍스트가 생성될 때마다 우회 컨텍스트 포인터와 우회 컨텍스트 오프셋을 할당한다. 이들 값들은 컨텍스트가 처음으로 하드웨어에 제출될 때 하드웨어 내에 프로그램된다.
동일한 컨텍스트가 소프트웨어에 의해 재제출되면, 소프트웨어는 수정될 필요가 있는 하드웨어 상태를 안다. 수정될 필요가 있는 하드웨어 상태는 주어진 결과물(product)을 위해 교정(fix)된다. 하드웨어 상태와 컨텍스트 이미지 내의 그 위치에 기초하여, 소프트웨어는 요구되는 버퍼들을 생성하고 우회 컨텍스트 포인터 오프셋을 정확히 프로그램하여 이전의 컨텍스트의 복구 동안에 요구되는 하드웨어 상태를 오버라이드할 수 있다. 컨텍스트의 재제출 이전에, 소프트웨어는 컨텍스트에 대응하는 우회 컨텍스트 포인터 버퍼들을 갱신된 하드웨어 상태로 갱신한다.
도 1은, 컨텍스트 우회, 포인터, 버퍼들을 도시하는 도면이다. 도 1의 예에서, 2개의 컨텍스트, 3D 게임 컨텍스트와 미디어 컨텍스트가 있다. 이것은, 단일의 컴퓨팅 장치가 게임을 플레이하고 또한 미디어를 렌더링, 예를 들어, 영화를 재생하는데 이용되는 예를 나타낸다. 이들 2개의 컨텍스트는 간략화된 예로서 이용된다. 게임과 영화 플레이어는 양쪽 모두 각각의 복수의 컨텍스트를 가질 수 있고, 많은 더 많은 컨텍스트들이 존재할 수 있다. 다양한 백그라운드 서비스들도 역시 컨텍스트를 가질 수 있다. 또한, 임의의 하나의 특정한 컨텍스트는 또 다른 관련된 컨텍스트에 대한 우회를 포함할 수 있다. 이들 2개의 컨텍스트가 예로서 제공되지만, 동일한 타입이든 상이한 타입이든 관계없이 기타 임의의 2개 이상의 컨텍스트에 동일한 원리가 적용될 수 있다.
그래픽 하드웨어에 의해 수행되는 프로세스들이 중앙 컬럼(120)에 도시되어 있다. 각각의 파이프라인 스테이지에 대한 컨텍스트의 하드웨어 상태를 보관하기 위한 버퍼들이 좌측 컬럼(130)에 도시되어 있다. 각각의 파이프라인 스테이지에 대한 컨텍스트의 하드웨어 상태를 복구하기 위한 버퍼들이 우측 컬럼(140)에 도시되어 있다. 프로세스 흐름의 상부에서는, 112에서 게임 컨텍스트가 그래픽 엔진에 제출된다. 컨텍스트는 작업흐름을 개시하고 컨텍스트의 작업부하를 수행하는데 이용될 그래픽 주소를 포함한다. 그 다음, 그래픽 엔진은 작업부하를 실행하기 시작한다.
114에서, 게임 컨텍스트는 명령어와 결과를 저장하기 위해 그래픽 버퍼 내의 한 세트의 레지스터를 이용한다. 이들 레지스터들은 그래픽 메모리에게 가상 주소(VA) a, b, c, d, e로서 표시된다. 실제의 논리 및 물리 주소는 상이한 실제 명칭들을 가질 것이고 5개보다 많은 주소가 있을 수 있다. 116에서, 우회가 있다. 미디어 컨텍스트가 제출되었으므로 게임 컨텍스트의 상태가 그래픽 엔진에 의해 보관된다. 컨텍스트는 원래 VA a, b, c, d, e를 이용하도록 할당되었기 때문에, 컨텍스트 상태는 이들 주소와 함께 보관된다.
좌측 버퍼도(130)를 참조하면, 하드웨어 상태는 소정 범위의 버퍼(130)에 보관된다. 좌측(130) 및 우측(140) 컬럼은 한 세트의 하드웨어 그래픽 파이프라인 또는 그래픽 엔진에 대한 명령어 실행의 하이브리드 도면이다. 컬럼들은 또한, 그래픽 파이프라인들 각각에 의해 이용되는 버퍼링된 명령어들을 포함하는 별개의 레지스터 시퀀스들을 나타낸다. 각각의 컬럼은 또한, 훨씬 큰 그래픽 버퍼의 동일하거나 상이한 작은 부분들을 나타낸다. 따라서, 좌측 컬럼(130)의 상부 라인(148)은 게임 컨텍스트의 보관된 상태에 대한 베이스 주소를 나타낸다. 이것은 또한, 명령어 시퀀스에 대한 헤더 정보와 파이프라인들에 대한 커맨드 스트리머(command streamer)를 나타낸다. 우회 명령어(116)에서, 그래픽 엔진은 좌측 컬럼에 도시된 바와 같이 게임 컨텍스트의 상태를 버퍼들에 보관한다.
버퍼(130)에서, 게임 컨텍스트의 보관된 상태에 대한 첫 번째 주소는 컨텍스트 메모리 버퍼(Context Memory Buffer, 148)라 불리는 레지스터 내의 값에 의해 표시된다. 도면에서 X1로서 도시된, 또 다른 값, IND_CTX_PTR_ADDR 또는 우회 컨텍스트 포인터 주소값은, 우회된 컨텍스트를 복구하기 위해 하드웨어에 의해 실행되는 커맨드들을 갖는 그래픽 메모리 내의 버퍼를 가리키고, 이들 커맨드들은, 실행을 위해 컨텍스트를 하드웨어에 재제출하기 이전에 하드웨어 상태를 오버라이드하기 위해 요구되는 갱신된 상태로 소프트웨어에 의해 프로그램된다. 우회 컨텍스트 포인터는 또한 실행을 위한 버퍼 크기를 나타낸다. 주소를 포함하는 레지스터의 위치는 버퍼(130)의 제1 섹션(136)인 것으로 표시되어 있다. 이 섹션은 임의의 특정한 하드웨어에 대응하지 않는다. 이 섹션은 또한, 값 δ1을 갖는 것으로 표시된, IND_CTX_PTR_OFFSET 또는 우회 컨텍스트 포인터 오프셋(Indirect Context Pointer Offset)을 포함한다. 우회 컨텍스트 포인터 오프셋은, 우회 컨텍스트 포인터가 가리키는 버퍼로부터의 커맨드의 실행이 트리거되는 베이스 주소(148)로부터의 오프셋을 나타낸다. 이들 2개의 값, IND_CTX_PTR_ADDR 및 IND_CTX_PTR_OFFSET은 상태가 보관될 때 적절한 레지스터들에 저장된다. X1은 상태1을 오버라이드하는 그래픽 메모리 내의 제1 버퍼를 나타낸다. δ1은 상태1을 오버라이드하기 위해 버퍼1이 실행되어야 하는 컨텍스트 이미지 베이스 주소로부터의 오프셋을 나타낸다.
좌측 컬럼의 블록(138)은, 여기서는 파이프라인 0으로서 표시된, 제1 하드웨어 파이프라인에 대한 컨텍스트 복구 명령어들을 저장하는 제1 세트의 레지스터들을 나타낸다. 이것은, 게임 컨텍스트에 대한 표면 주소들과 즉석값들을 저장하기 위해 게임 컨텍스트에 의해 이용되는, 주소 a, b, c, d, e를 갖는 레지스터들의 일부분의 위치이다. 레지스터 VA a, b가 예로서 표시되어 있지만, 임의의 실제의 컨텍스트에서는, 더 많은 레지스터들이 있으므로, a, b는, 단지 전체 개수의 레지스터들의 일부분임을 나타내기 위해 이용되는 것일 뿐이다.
유사하게, 하드웨어 파이프라인1은 버퍼의 제2 섹션(142)에 보관되는 그 상태를 가진다. 이것은, 여기서는 0, 1, ... N으로 넘버링된 것으로 표시된 그래픽 파이프라인들 모두에 대해 계속된다. 파이프라인 N(146)은 버퍼의 끝인 것으로 표시되어 있고 다른 파이프라인들(144)은 파이프라인1(142)과 파이프라인 N(146) 사이에 있는 것으로 표시되어 있다. 하드웨어 파이프라인 N은, 값 VA c, d, e를 갖는 것으로 도시된, 그래픽 주소 레지스터들 중 마지막을 포함하는 버퍼의 이 부분의 마지막 섹션(146)에 보관된 그 상태를 가진다. 이 버퍼의 끝은 컨텍스트가 보관되는 마지막 주소이다. 이것은, 우회 컨텍스트 포인터 주소에서 버퍼 크기값으로 표시된 마지막 주소이다.
중앙 컬럼 실행으로 돌아가면, 116에서 좌측 버퍼도와 함께 도시된 바와 같이 컨텍스트를 보관한 후에, 그래픽 엔진은 118에서 게임 컨텍스트를 스위칭 아웃한다. 이 때, 운영 체제는 게임 컨텍스트에 의해 이용 중이었던 그래픽 주소 VA a, b, c, d, e를 해제(release)한다. 대안으로서, 애플리케이션, 그래픽 드라이버, 가상 머신, 또는 메모리 관리를 책임지는 다른 엔티티 등의 또 다른 엔티티가 레지스터들을 해제할 수도 있다. 제1 컨텍스트의 스위칭 아웃은 제2 컨텍스트, 이 예에서는 미디어 컨텍스트가 개시되는 것을 허용한다.
운영 체제 또는 다른 책임있는 엔티티는 119에서 미디어 컨텍스트를 제출하지만, 특정한 구현에 따라 다른 컨텍스트가 제출될 수도 있다. 작업부하가 제출되면, 미디어 컨텍스트에 대한 작업부하가 시작할 수 있다. 컨텍스트는 컨텍스트가 작업부하 실행을 위해 이용할 수 있는 한 세트의 그래픽 주소 레지스터를 포함할 것이다. 이 예의 122에서, 그래픽 VA 1, 2, 3, 4, 5는 할당된 주소 세트에 대한 예시적 지정으로서 표시된 것이다.
123에서, 소정 개수의 명령어에 대해 미디어 컨텍스트 작업부하 실행이 진행된 후에, 또 다른 우회가 존재한다. 우회는 미디어 컨텍스트의 일부이거나, 상이한 비관련 컨텍스트가 실행되는 것을 허용하기 위해 OS에 의해 제출될 수도 있다. 이 예에서는, 간소화를 위해 그래픽 엔진이 게임 컨텍스트로 복귀하지만, 2개보다 많은 상이한 컨텍스트들이 부분적으로 및 순서대로 실행중일 수도 있다. 우회와 함께, 그래픽 엔진은 할당된 레지스터 값들 VA 1, 2, 3, 4, 5를 이용하여 미디어 컨텍스트 상태를 보관한다. 이것은, 좌측 컬럼 버퍼와 파이프라인 하드웨어도(130)에 제시된 것과 유사한 방식으로 발생하지만, 도면의 간소화를 위해 도시되지 않는다. 이전과 같이, OS는, 다른 컨텍스트들의 작업부하의 실행에 이용하기 위해 이들 레지스터들을 해제할 것이다.
126에서, 재제출된 컨텍스트는 게임 컨텍스트 실행을 위한 그래픽 메모리 주소들의 새로운 할당을 포함한다. 재제출된 컨텍스트는 이 컨텍스트가 처음 제출될 때 제공된 원래의 컨텍스트 ID를 포함할 것이다. 이것은 또한, 컨텍스트의 작업부하를 실행하는데 이용되는 그래픽 레지스터들의 식별자를 포함할 것이다. 이들 그래픽 레지스터들은, 원래 할당받았던 것과는 상이한 세트의 그래픽 주소들이기 쉽상이고 결과들 전부가 저장되었던 그래픽 주소들일 가능성은 적다. 여기서 이들은 VA p, q, r, s, t로서 표시된다.
128에서, 게임 컨텍스트가 재제출된다. 게임 컨텍스트의 재제출의 수신에 응답하여, 그래픽 엔진은 게임 컨텍스트를 복구하는데 이용되는 동작들을 개시한다.
129에서, 그래픽 엔진은 보관된 상태로부터 게임 컨텍스트를 복구한다. 이 상태는 원래 그래픽 주소 레지스터들 VA a, b, c, d, e에서 활성이었다. 그러나, 이들 레지스터들은 오래된 것이다. 그곳에 원래 저장된 값들은 다른 컨텍스트들에 의해 덮어쓰기되었을 수 있고 이들은 다른 컨텍스트들에 의해 이용중에 있기 때문에 이용할 수 없다. 범용 처리 유닛과 그래픽 처리 유닛 사이에서 공유되는 메모리와 함께, 이들 레지스터들은 완전히 무관한 프로세스를 위해 범용 처리 유닛에 의해 이용중일 수도 있다. 그 결과, 116에서의 컨텍스트 보관으로부터의 저장된 하드웨어 상태는 VA a, b, c, d, e로서 회수되는 반면, 갱신된 값들은 각각 p, q, r, s, t이다. 작업부하의 실행이 시작되기 전에, 작업부하가 우회되었을 때의 컨텍스트의 상태가 복구된다.
소프트웨어 시스템, 예를 들어, 소프트웨어 그래픽 드라이버는, 컨텍스트 VA a, b, c, d, e에 대해 이전에 이용된 그래픽 주소 값들 또는 레지스터들은 오래된 것이고 컨텍스트에 더 이상이 유효하지 않다는 것을 안다. 드라이버는, 보관된 컨텍스트 상태가 할당된 그래픽 주소 레지스터들 VA p, q, r, s, t 내에 기입될 필요가 있다는 것도 안다. 컨텍스트 복구 프로세스는 이것이 이루어지도록 허용하고 값들이 각각의 파이프라인에 대해 복구되는 것을 허용한다.
복구 프로세스는, 동시에 한 세트의 버퍼 레지스터, 복구 명령어들, 및 하드웨어 파이프라인들에 대응하는 좌측 컬럼(130)과 유사한 우측 컬럼(140)에서 도표화되어 있다. 우측 그래픽 버퍼 레지스터들은, 그래픽 파이프라인 0 내지 N들 각각의 우회시의 상태에 대한 기본 섹션(164), 및 섹션들(156, 158, 160, 162)을 포함한다. 그래픽 버퍼로서, 기본 섹션(164)은 우회 컨텍스트 포인터 주소 X1과 우회 컨텍스트 포인터 오프셋 δ1에 대한 레지스터들(152, 154)을 가진다. 이들 레지스터들은 액세스되어 복구 프로세스를 적절한 장소로 안내해 게임 컨텍스트의 복구를 시작한다. 베이스 주소(148) + 오프셋 δ1은 복구 프로세스가 주소 X1에서 시작하도록 지시한다.
위치 X1은 제1 하드웨어 파이프라인 상태 레지스터들 VA a, b를 VA p, q인 SW 갱신된 값들로 덮어쓰기하는 커맨드(166)를 가진다. 일단 이것이 달성되고 나면, 우회 컨텍스트 포인터 주소를 새로운 값으로, 이 경우에는 X1로부터 X2로 갱신하고 우회 컨텍스트 포인터 오프셋을 δ1로부터 δ2로 갱신하는 커맨드들이 있다. 이들 커맨드들 및 관련된 값들은 컨텍스트가 처음으로 보관된 후에 소프트웨어에 의해 수정될 수 있다. 복구 프로세스에서 이러한 우회는, 컨텍스트가 재제출될 때 가용 자원에 기초하여 소프트웨어가 파이프라인 상태 레지스터들을 수정하고 우회 컨텍스트 포인터 및 우회 컨텍스트 오프셋을 변경하는 것을 허용한다. X2는 다음 파이프라인에 대한 상태를 오버라이드하는데 이용되는 그래픽 메모리 내의 다음 위치를 나타낸다. δ2는 버퍼가 실행되는 컨텍스트 이미지 베이스 주소(148)로부터의 오프셋을 나타낸다.
제1 파이프라인인 파이프라인 0에 대해 주소 X1에서의 커맨드들을 완료한 후에, 복구 프로세스가 재개되고 주소 X2의 다음 위치에 도달할 때까지 계속된다. X2는 베이스 주소로부터의 거리 또는 오프셋 δ2라는 점에 유의한다. X2에서, 그래픽 주소 레지스터들을 VA c, d, e,로부터 VA r, s, t로 오버라이드하는 커맨드들(168)이 있다. a, b로서 식별된 레지스터들의 이용을 보관하는 컨텍스트에서와 같이, 레지스터들 c, d, e는, 레지스터들 중 일부는 X1에서 갱신되고 다른 레지스터들은 주소 X2에서 갱신된다는 것을 보여주는 것이다. 레지스터들은 컬럼(140)에 대응하는 명령어들의 시퀀스에서 많은 다른 위치들에서 갱신될 수도 있다. 2개 또는 3개보다 많은 레지스터들이 존재하거나 2개 또는 3개보다 많은 레지스터 뱅크들이 존재할 수도 있다. a, b, c, d, e 및 p, q, r, s, t의 이용은, 컨텍스트 메모리 버퍼로부터의 값들이 재제출된 컨텍스트에 대한 새로운 작동 버퍼 주소에 복구된다는 것을 보여준다. 예시의 버퍼 주소들 a, b, c, d, e는 여기서는 예로서 제시된 것이다. 제출들 사이에서 상태와 작업 부하가 변화를 가질 수도 있는 많은 다른 이용 모델들이 있다. 다양한 상이한 상태와 작업 부하 변화는 여기서 설명되는 방법 및 장치를 이용하여 이루어질 수 있다.
메모리 버퍼들을 오버라이드하는 커맨드들 외에도, 166과 유사하게, 우회 컨텍스트 포인터 주소와 우회 컨텍스트 오프셋을 갱신하는 커맨드들도 있다. 이들 커맨드들의 완료시, 복구 프로세스는 마지막 파이프라인인 파이프라인 N에 대한 복구 명령어의 메인 플로우로 되돌아간다. 제1 예에서는, 제1 컨텍스트 포인터는 파이프라인에 대한 복구 명령어의 끝에서의 주소 X1을 나타낸다는 점에 유의한다. 제2 예에서는, 이 포인터는 파이프라인에 대한 복구 명령어의 중간에서의 주소 X2를 나타낸다.
복구 프로세스는 컨텍스트 메모리 버퍼의 끝에 도달할 때 종료한다. 이 버퍼의 마지막 주소는, 컨텍스트가 처음 보관될 때 저장되는 버퍼 크기값 또는 버퍼 주소 범위를 이용해 표시된다. 한 실시예에서, 이것은 우회 컨텍스트 포인터에 저장되지만, 대안으로서는 다른 위치에 저장될 수도 있다. 도 1의 예에서, 이것은 베이스 주소(148)로부터 버퍼의 끝까지의 오프셋인 값 δ3로서 표시되어 있다.
129의 복구 프로세스의 끝에 도달하면, 132에서 게임 컨텍스트의 작업부하는 실행될 수 있다. 게임 컨텍스트가 처음 인터럽트, 보류, 또는 선점권을 내주었을 때 보관되었던 표면들과 다른 값들 모두는 새로운 주소 레지스터들에 복구된다. 새로운 주소 레지스터들은 컨텍스트 재제출되었을때 할당된 것들이다. 그러면, 새로운 레지스터들 내의 복구된 작업부하의 실행은 작업부하가 완료되거나 134에서 또 다른 우회가 있을 때까지 계속된다. 이러한 우회는, 우회시에 그 현재 상태에서의 컨텍스트를 보관함으로써 게임 컨텍스트가 다시 스위칭 아웃되게 한다.
도 2a 및 도 2b는 상이한 관점에서 컨텍스트 복구 프로세스를 보여주는 프로세스 흐름도이다. 보관된 컨텍스트를 복구하는 프로세스가 210에서 시작된다. 복구 프로세스는, 그래픽 엔진이, 한 컨텍스트의 실행시에, 이전 프로세스를 복구하는 커맨드를 만날 때 트리거된다. 이 커맨드는 통상적으로 소정 컨텍스트보다 선점권을 갖도록 운영 체제 또는 애플리케이션에 의해 삽입된다. 이것은, 단일의 렌더링 프로세스를 실행하기 위해 수 개의 상이한 컨텍스트들을 이용하는 그래픽 작업부하의 일부일 수도 있다. 소프트웨어 에이전트는 이전의 컨텍스트를 재제출함으로써 임의의 시점에서 컨텍스트 복구를 야기할 수 있다. 재제출된 컨텍스트는, 우회 컨텍스트 포인터 오프셋(240), 우회 컨텍스트 포인터 주소, 및 우회 컨텍스트 포인터 크기(242)에 대한 값들을 포함할 것이다.
그래픽 엔진은 이전의 컨텍스트를 복구하기 위해 자신이 이용할 명령어들을 얻는다. 명령어들을 인출하기 위해, 그래픽 엔진은 먼저, 212에서 컨텍스트 베이스 주소를 컨텍스트 복구 인출 주소에 로딩하고 컨텍스트 복구 크기를 컨텍스트 인출 크기에 로딩한다. 로딩된 이들 값들에 의해, 컨텍스트 복구 인출 주소가, 우회 컨텍스트 포인터 오프셋에 가산된 컨텍스트 베이스 주소와 비교될 수 있다. 이들이 동일하지 않다면, 216에서 컨텍스트 복구 인출 주소에서 시작하여 명령어가 인출될 수 있다. 212에서 베이스 주소가 인출 주소에 로딩되므로 컨텍스트 복구가 베이스 주소로부터 로딩한다. 이것은 컨텍스트가 자신이 보관되었던 것들과 동일한 레지스터들에 복구되고 있는 경우에 대응한다.
베이스 주소에서 시작하는 각각의 명령어 인출에 의해, 218에서 컨텍스트 인출 크기는 1씩 감소하고 인출 주소는 1씩 증가한다. 220에서 미결된 컨텍스트 메모리 데이터도 역시 증가된다. 미결된 컨텍스트 메모리 데이터 값은 카운터(244)에 공급된다. 이것은, 전체 세트의 복구 명령어들이 인출될 때까지 계속된다. 각각의 인출(216)과 감소(218) 후에 222에서 컨텍스트 인출 크기는 제로와 비교된다. 모든 명령어들이 인출되면, 224에서 컨텍스트 복구 인출은 완료된다.
반면, 214에서 인출 주소가 베이스 주소 + 우회 컨텍스트 포인터 오프셋과 동일하다면, 명령어들은 우회 컨텍스트 포인터에 의해 표시된 위치로부터 인출된다. 228에서 우회 컨텍스트 포인터(242)로부터의 주소는 우회 컨텍스트 복구 인출 주소에 로딩되고 우회 컨텍스트 포인터 인출 크기는 우회 컨텍스트 인출 크기에 로딩된다. 그러면, 컨텍스트 복구 명령어들이 이 정보를 이용하여 인출된다. 230에서 새로운 인출 주소에 대해 메모리 요청이 이루어진다. 각각의 인출 후에, 230에서 우회 컨텍스트 포인터 인출 주소가 증가되고 크기는 감소된다. 234에서 미결 컨텍스트 메모리 데이터가 증가되고 카운터(244)에 공급된다. 236에서 이러한 인출 프로세스는 인출 크기가 고갈될 때까지, 즉, 모든 명령어들이 인출될 때까지 반복된다.
컨텍스트 복구 프로세스가 210에서 시작하면, 전술된 바와 같은 명령어 인출 프로세스가 있게 된다. 또한 250에서 인출된 컨텍스트 복구 커맨드를 실행하는 프로세스도 있다. 252에서 이들 명령어들은 컨텍스트 데이터에 액세스한다. 인출 프로세스(216 또는 230)는 하나 이상의 명령어를 실행하고 그 다음 254에서 데이터는 복구 커맨드 실행에 이용가능하게 될 것이다. 데이터가 이용가능하면, 256에서 명령어들이 실행된다. 262에서의 각각의 실행 이후에, 프로세스는 복귀하여 254에서 이용가능한 데이터가 더 있는지를 판정하고 있다면 또 다른 명령어가 실행된다.
254에서 이용가능한 데이터가 더 없다면, 커맨드 실행은, 264에서, 컨텍스트 복구 인출들, 즉, 명령어 인출들 모두가 완료되었는지를 알아보려고 한다. 이러한 결정은 224에서 명령어 인출 프로세스로부터의 정보를 이용한다. 복구 인출들이 완료되지 않았다면, 프로세스는 복귀하여 254에서 실행할 데이터가 더 있는지를 찾아본다. 이것은 데이터가 더 발견될 때까지 반복된다. 216 및 230에서 이루어지는 모든 메모리 요청은 메모리로부터의 데이터를 야기할 것이다. 252에서 메모리로부터 회수된 데이터는 246에서 검출될 수 있고, 도달시, 이것은 미결 컨텍스트 메모리 데이터를 감소시킨다. 246에서, 감소가 발생한다.
264에서 컨텍스트 복구 인출이 완료되면, 실행 프로세스는 임의의 나머지 컨텍스트 메모리 데이터를 찾기 위해 검사한다. 실행할 데이터가 더 있다면, 254에서 실행이 계속된다. 그렇지 않다면, 컨텍스트 복구 커맨드 실행은 268에서 종료한다. 실행이 종료하면, 결과는 도 2a의 전체 프로세스 블록(226)에 공급되어, 컨텍스트 복구 커맨드 실행의 정지 여부를 결정하고, 정지의 경우, 컨텍스트 복구 프로세스가 종료한다.
임의의 미결 컨텍스트 메모리 데이터가 있는지에 대한 도 2b에서의 결정(226)은 미결 메모리 카운터(244)를 이용하여 이루어질 수 있다. 이 카운터는 요청이 이루어질 때마다 증가되고(220, 234), 메모리에 대해 이루어진 요청에 대한 데이터가 반환될 때마다 감소된다(246).
도 2a에 추가로 도시된 바와 같이, 236에서 우회 컨텍스트 포인터 버퍼가 가리키는 메모리 버퍼가 고갈되면, 미결 컨텍스트 메모리 데이터 카운터(244)와 254에서의 실행에 이용가능한 데이터가 있는지의 결정이 함께 이용된다. 이것은, 추가로 진행하기 전에 우회 컨텍스트 포인터로부터의 명령어들 모두가 인출되어 실행되는 것을 보장한다. 이들 양쪽 모두는, 우회 컨텍스트 포인터 주소로부터의 인출 프로세스가 종료된 것을 나타내면, 214에서 원래의 컨텍스트 복구 인출 주소가 이용되어 임의의 추가 명령어를 인출할 수 있다. 베이스 주소(214)로부터의 인출은, 222에서 이 버퍼가 완료되고 224에서 컨텍스트 복구 인출이 이루어질 때까지 전술된 바와 같이 계속될 것이다.
256에서 컨텍스트 복구 커맨드들이 실행되는 동안, 258에서 우회 컨텍스트 포인터를 갱신하거나 260에서 우회 컨텍스트 포인터 오프셋을 갱신하는 커맨드를 만나는 것이 가능하다. 이들 커맨드들은 통상적으로 함께 오지만 이것이 반드시 요구되는 것은 아니다. 이들 명령어들은 임의의 시간에 도달하여 도 1의 166 및 168에서 도시된 바와 같이 컨텍스트 복구 프로세스에서 우회를 야기할 수 있다. 명령어는 후속 명령어들이 이동된 후에 운영 체제 또는 다른 소프트웨어 에이전트에 의해 삽입되어 컨텍스트가 정확히 복구되는 것을 보장한다.
이들 커맨드들을 조우하게 되면, 발생한 커맨드에 따라 270에서 우회 컨텍스트 포인터가 갱신되거나 272에서 우회 컨텍스트 포인터 오프셋이 갱신되거나 양쪽 모두가 발생한다. 도시된 바와 같이 이들 커맨드들은 커맨드 실행 시퀀스에서 임의의 지점에서 발생할 수 있다. 이들이 정말로 발생하면, 이들은 실행되고 262에서 실행은 다음 명령어를 계속한다.
커맨드(260)에 기초하여 우회 컨텍스트 포인터 오프셋(240)을 변경하는 것은 컨텍스트 복구 인출 프로세스를 변경한다. 각각의 명령어 인출(216) 후에, 컨텍스트 복구 프로세스는 214에서 우회 컨텍스트 포인터 오프셋(240)을 검사한다. 이것이 변경되었다면, 인출 프로세스는 228에서 우회 컨텍스트 포인터와 포인터 오프셋에 의해 표시된 주소로 가서, 236에서 이 버퍼가 소진될 때까지 이 위치로부터 주소를 인출한다. 이것은, 주소 X1이 X2로 갱신되고 오프셋 δ1이 δ2로 갱신되는 것을 허용하는 (166, 168)에서의 우회 커맨드들에 대응한다.
프로세스는 소프트웨어가 컨텍스트 재제출들 사이에서 하드웨어 상태를 신속하고 효율적으로 오버라이드 및 갱신하는 것을 허용한다. 소프트웨어는 단순히 우회 컨텍스트 포인터와 우회 컨텍스트 포인터 오프셋에서 새로운 값을 삽입한다. 이들은 또한, 컨텍스트가 복구될 때 복구 프로세스 흐름에서의 커맨드들에 의해 갱신될 수 있다.
도 3a는 전술된 기술들의 간략화된 프로세스 흐름도이다. 302에서, 컨텍스트 ID들(식별자들)이 복수의 그래픽 애플리케이션들 각각에 할당된다. 할당은 그래픽 드라이버 또는 OS에 의해 이루어질 수 있다. 그래픽 애플리케이션은 그래픽 프로세서에 의해 컨텍스트로서 실행될 것이다. 304에서, 각각의 컨텍스트 ID에 고유 컨텍스트 메모리 버퍼가 할당된다.
306에서, 고유 우회 컨텍스트 포인터가 각각의 컨텍스트 ID에 할당된다. 우회 컨텍스트 포인터는 우회 컨텍스트 버퍼 내의 주소를 가리킨다. 대응하는 우회 컨텍스트 버퍼 크기도 역시 각각의 컨텍스트 ID에 할당된다. 308에서, 우회 컨텍스트 오프셋이 각각의 컨텍스트 ID에 할당된다. 우회 컨텍스트 오프셋은 우회 컨텍스트 버퍼 내로의 오프셋을 나타낸다. 마지막으로 310에서, 우회 컨텍스트 버퍼 주소 범위가 각각의 컨텍스트 ID에 할당된다. 이것은 우회 컨텍스트 버퍼에 대한 버퍼 주소의 범위를 말한다. 주소는, 가상 주소, 물리 주소, 또는 실제나 가상화된 메모리 내의 기타 임의 타입의 주소일 수 있다.
상기에서 제공된 바와 같이 정의된 컨텍스트와 함께, 312에서, 할당된 컨텍스트 ID에 대응하는 제1 컨텍스트 작업부하의 적어도 일부가 실행된다. 314에서의 이 컨텍스트의 실행 동안에, 제1 컨텍스트 작업부하의 실행은 컨텍스트의 실행이 완료되기 전에 우회된다.
316에서, 우회시에 및 제1 컨텍스트로부터의 이탈 전환(switching away)시에, 제1 컨텍스트 작업부하의 상태는 할당된 컨텍스트 메모리 버퍼에 보관된다. 318에서, 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋 및 우회 컨텍스트 버퍼 주소 범위의 크기가, 보관된 컨텍스트 상태와는 독립된 레지스터들에 보관된다.
320에서 제1 컨텍스트가 보관됨과 함께, 그래픽 프로세서는 제2 컨텍스트 작업부하의 적어도 일부를 실행한다. 322에서 소정 시간 후에, 보관된 제1 컨텍스트 상태는, 보관된 우회 컨텍스트 포인터, 보관된 우회 컨텍스트 오프셋 및 보관된 버퍼 크기에 액세스함으로써 복구된다. 312에서, 제1 컨텍스트 작업부하의 실행이 재개된다. 제1 컨텍스트 상태는 보관되기 때문에 재개될 수 있다. 우회 컨텍스트 포인터와 우회 컨텍스트 오프셋 상태 때문에, 보관된 상태가 이동되었거나 원래의 레지스터들이 더 이상 안정적이지 않더라도 보관된 상태가 발견될 수 있다.
도 3b는 교대하는 우회 시퀀스가 존재할 때 컨텍스트가 어떻게 전후로 복구될 수 있는지를 보여주는 간략화된 프로세스 흐름도이다. 단 2개의 컨텍스트만이 도시되어 있지만, 더 많이 존재할 수도 있고, 부드러운 시스템 동작을 위해 바람직한 바와 같이 우회는 임의의 순서로 한 컨텍스트로부터 다른 컨텍스트로 갈 수도 있다. 330에서, 컨텍스트 ID 파라미터들이 할당된다. 도 3a에 나타낸 바와 같이, 이들은, 각각이 연관된 컨텍스트 메모리 버퍼, 우회 컨텍스트 포인터, 우회 컨텍스트 메모리 버퍼 크기, 우회 컨텍스트 오프셋, 및 우회 컨텍스트 버퍼 주소 범위를 갖는 컨텍스트 ID들을 포함할 수 있다. 이들 파라미터들 중 일부는 모든 구현에 요구되는 것은 아닐 수도 있다. 또한, 동일한 정보가 상이한 방식으로 할당될 수도 있는데, 예를 들어, 하나의 파라미터가 2개의 다른 파라미터로부터 유도되거나, 베이스 주소로부터의 오프셋 대신에, 끝이나 어떤 다른 지점으로부터의 오프셋이 이용될 수도 있다. 특정한 구현에 따라, 다른 변형들도 역시 가능하다.
330에서의 컨텍스트 파라미터 세트와 함께, 332에서 제1 컨텍스트 작업부하가 실행된다. 제1 컨텍스트 작업부하 실행은 334에서 우회되고 현재의 작업부하의 현재 상태는 336에서 보관된다.
332에서, 할당된 컨텍스트 ID에 대응하는 제1 컨텍스트 작업부하가 실행된다. 334에서의 이 컨텍스트의 실행 동안에, 제1 컨텍스트 작업부하의 실행은 컨텍스트의 실행이 완료되기 전에 우회된다. 336에서, 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋 및 우회 컨텍스트 버퍼 주소 범위의 크기가, 334로부터의 보관된 컨텍스트 상태와는 독립된 레지스터들에 보관된다.
340에서, 상이한 컨텍스트가 복구된다. 우회 커맨드는, 새로운 컨텍스트에 대한, 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋 및 우회 컨텍스트 버퍼 주소 범위의 크기를 나타낸다. 이들은 보관된 컨텍스트를 발견하고 이를 복구하는데 이용된다. 이들 값들은 처음에 컨텍스트를 보관할 때 그래픽 프로세서에 의해 보관되지만, 이들은, 컨텍스트가 복구되기 전에, 그래픽 드라이버, 애플리케이션 또는 운영 체제에 의해 변경될 수도 있다. 342에서, 새로운 복구된 컨텍스트가 실행을 시작한다.
344에서, 또 다른 우회 커맨드가 조우된다. 제2 컨텍스트의 실행은 인터럽트되거나 보류된다. 346에서, 제2 컨텍스트가 보관된다. 348에서, 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋 및 우회 컨텍스트 버퍼 주소 범위의 크기가 보관된다. 350에서, 또 다른 컨텍스트가 복구되고 이 프로세스는 실행을 재개한다. 도 3b의 예에서, 우회는 제1 컨텍스트에 대한 것이므로 제1 컨텍스트 작업부하의 실행은 332에서 재개된다. 그러나, 우회는 기타 임의의 컨텍스트에 대한 것일 수도 있다. 컨텍스트는 이전에 보관된 것일 수 있으므로 복구된다. 대안으로서, 우회는 새로운 컨텍스트에 대한 것일 수도 있다.
도 3c는 전술된 기술들 중 적어도 일부에 대한 프로세스 흐름도에 관한 대안적 관점을 제공한다. 도 3c의 예에서, 360에서, 제1 컨텍스트 ID(식별자)가 그래픽 프로세서에 전송된다. 컨텍스트 ID는 그래픽 프로세서에 의해 실행되는 그래픽 애플리케이션, 고유 컨텍스트 메모리 버퍼, 고유 우회 컨텍스트 포인터, 대응하는 크기, 우회 컨텍스트 오프셋, 및 버퍼 주소 범위를 식별한다. 컨텍스트 ID는, 그래픽 드라이버, 애플리케이션, 및 운영 체제 중 하나 이상 또는 조합에 의해 생성 및 전송될 수 있다. 컨텍스트 ID의 제출은 그래픽 프로세서가 제1 컨텍스트로 우회되게 한다. 임의의 현재 동작 프로세스는 인터럽트될 것이고, 그래픽 프로세서는 제1 컨텍스트로 방향전환된다.
362에서, 제2 컨텍스트 ID가 그래픽 프로세서에 의한 실행을 위해 그래픽 프로세서에 전송된다. 이것은 제1 컨텍스트로부터 제2 컨텍스트로의 우회를 야기할 것이다. 364에서, 제1 컨텍스트 ID는 그래픽 프로세서에 재제출되어 그래픽 프로세서에게 제1 컨텍스트의 실행을 재개할 것을 명령한다. 다시 한번, 재제출은, 그래픽 프로세서에 의해 실행되는 그래픽 애플리케이션, 고유 컨텍스트 메모리 버퍼, 고유 우회 컨텍스트 포인터, 대응하는 크기, 우회 컨텍스트 오프셋, 및 버퍼 주소 범위를 포함할 수 있다. 이들은 전술된 바와 같이 제1 세션을 복구하기 위해 그래픽 프로세서에 의해 이용된다.
336에서, 제1 컨텍스트의 실행을 재개하는 명령어를 인출하기 위해 그래픽 프로세서에 의해 이용되는 레지스터에 값이 보관된다. 값을 할당하는 것은, 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로서 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 레지스터의 값을 갱신하는 것, 및 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로부터의 오프셋으로서 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 오프셋 레지스터의 값을 갱신하는 것을 포함할 수 있다. 값 할당은 그래픽 프로세서가 OS 또는 애플리케이션에 의한 어떠한 추가 참여 없이 컨텍스트를 복구하기 위해 자율적으로 동작하는 것을 허용한다.
도 4는 본 발명에서 이용하기에 적합한 그래픽 처리 유닛의 일반화된 하드웨어 도면이다. GPU(201)는 ALU(101)를 포함하는 커맨드 스트리머(211)를 포함한다. 커맨드 스트리머로부터의 데이터는 미디어 파이프라인(213)에 인가된다. 커맨드 스트리머는 3D 고정 기능 파이프라인(215)에도 결합된다. 커맨드 스트리머는, 파이프라인들 사이에서 스위칭하고 커맨드 스트림들을 활성 파이프라인에 포워딩함으로써 3D의 이용과 미디어 파이프라인을 관리한다. 3D 파이프라인은 전문화된 원시적(primitive) 처리 기능을 제공하는 반면 미디어 파이프라인은 더 일반적인 기능을 수행한다. 3D 렌더링의 경우, 3D 파이프라인은 버텍스 버퍼(217)에 의해 공급받는 반면 미디어 파이프라인은 별개의 메모리 객체(219) 그룹에 의해 공급받는다. 3D 및 미디어 파이프라인으로부터의 중간 결과 뿐만 아니라 커맨드 스트리머로부터의 커맨드들도, 파이프라인 및 커맨드 스트리머에 직접 결합된 그래픽 서브시스템(221)에 공급된다.
그래픽 서브시스템(221)은, 그래픽 처리 코어(225) 어레이에 결합된 통일된 반환 버퍼(223)를 포함한다. 이것은 상기에서 그래픽 엔진이라 언급된다. 통일된 반환 버퍼는, 쓰레드들이 다른 기능이나 쓰레드에 의해 나중에 소비될 데이터를 반환하는 것을 허용하기 위해 다양한 기능들에 의해 공유되는 메모리를 포함한다. 이것은 상기에서 메모리, 버퍼, 레지스터라 언급된다. 코어 어레이(225)는 파이프라인 스트리머로부터의 값을 처리하여 결국 목적 표면(destination surface, 227)을 생성한다. 코어 어레이는, 샘플러 기능(229), 수학 기능(231), 쓰레드간 통신(233), 색상 계산기(235), 및 최종적으로 렌더링된 표면을 캐슁하는 렌더러 캐쉬(237)에 액세스한다. 이들은 상기에서 파이프라인 또는 하드웨어 파이프라인이라 언급된다. 한 세트의 소스 표면(239)이 그래픽 서브시스템(221)에 인가되고, 이들 기능들(229, 231, 235, 237, 239) 모두가 코어 어레이에 의해 적용된 후에, 한 세트의 목적 표면(227)이 생성된다. 범용 계산의 목적을 위해, 커맨드 스트리머(211)와 ALU가 이용되어 특정한 구현에 따라 ALU에만 또는 코어 어레이(225)를 통해서도 연산을 실행한다.
도 5를 참조하면, 그래픽 코어(201)가 더 큰 컴퓨터 시스템(501)의 일부로서 도시되어 있다. 컴퓨터 시스템은 DMI(Direct Media Interface)(507)를 통해 입력/출력 제어기 허브(ICH; input/output controller hub)(505)에 결합된 CPU(503)를 가진다. CPU는, 그래픽 코어(201)에 결합되고 마지막 레벨 캐쉬(511)를 공유하는 범용 컴퓨팅을 위한 하나 이상의 코어(509)를 가진다. CPU는, 메모리 인터페이스(515), 디스플레이 인터페이스(517), 및 PCIe 인터페이스(519) 등의 시스템 에이전트(513)를 포함한다. 도시된 예에서, PCIe 인터페이스는 PCI express 그래픽을 위한 것이고 디스플레이(미도시)에 결합될 수 있는 그래픽 어댑터(521)에 결합될 수 있다. 제2 또는 대안적 디스플레이(523)는 시스템 에이전트의 디스플레이 모듈에 결합될 수 있다. 이 디스플레이는 그래픽 코어(201)에 의해 구동될 것이다. 메모리 인터페이스(515)는 시스템 메모리(525)에 결합된다.
입력/출력 제어기 허브(505)는, 대용량 스토리지(531), 외부 주변 장치(533), 및 키보드와 마우스 등의 사용자 입력/출력 장치(535)로의 접속을 포함한다. 많은 시스템들은, 사용자가, 손이나 몸 움직임, 얼굴 표정, 및 얼굴 인식 등의 그러한 이것으로 제한되지 않는 물리적 제스쳐를 이용하여 컴퓨터 시스템을 제어하고 데이터를 컴퓨터나 텔레비젼에 제공하는 것을 허용한다. 이 목적을 위해, 사용자 입력/출력 장치들은, 카메라, 근접 센서 및 마이크로폰을 포함할 수 있다. 대용량 스토리지는, 이용을 위해 DDR 메모리(525) 내에 일부가 로딩될 수 있는, 운영 체제, 드라이버, 및 애플리케이션을 저장하는데 이용될 수 있다. 입력/출력 제어기 허브는, 디스플레이 인터페이스(537) 및 기타의 추가적 인터페이스를 포함할 수도 있다. 디스플레이 인터페이스(537)는 비디오 처리 서브시스템(539) 내에 있다. 이 서브시스템은 선택사항으로서 디스플레이 링크(541)를 통해 CPU의 그래픽 코어에 결합될 수도 있다.
광범위한 추가의 및 대안적인 장치들이 도 5에 도시된 컴퓨터 시스템(501)에 결합될 수 있다. 대안으로서, 본 발명의 실시예들은 도시된 것과는 상이한 아키텍쳐들 및 시스템들에 적응될 수도 있다. 추가의 컴포넌트들이 도시된 기존의 유닛들 내에 병합될 수 있고 더 많거나 더 적은 하드웨어 컴포넌트들이 설명된 기능을 제공하기 위해 이용될 수도 있다. 설명된 기능들 중 하나 이상이 전체 시스템으로부터 삭제될 수도 있다.
그래픽 코어(201)가 범용 처리 코어(509) 및 기타의 컴포넌트들을 역시 포함하는 CPU와 통합된 것으로 도시되어 있지만, 그래픽 코어는 LLC 및 범용 코어에 대한 통신 인터페이스를 갖춘 별개의 컴포넌트로서 구성될 수도 있다. 대안으로서, 예를 들어, 도 4에 도시된 그래픽 코어 및 그 관련된 컴포넌트들은 동일하거나 상이한 팩키지 내에 인클로징되는 별개의 다이 상에 구성될 수도 있다. 메모리(525), ICH(505), 및 시스템 에이전트(513) 등의 기타의 컴포넌트들도 역시 동일하거나 상이한 팩키지 내의 동일하거나 상이한 다이 상에 구성될 수도 있다.
본 발명의 실시예들은, 특정한 레지스터들에 위치한 그래픽 주소 값들과 함께 컨텍스트 ID의 재제출에 기초하여 컨텍스트가 복구되는 메커니즘을 제공한다. 설명된 예에서, 이것은 우회 컨텍스트 포인터 및 우회 컨텍스트 포인터 오프셋을 이용하여 이루어지지만, 본 발명은 이것으로 제한되지 않는다. 이것은 운영 체제, 그래픽 드라이버, 또는 임의의 애플리케이션에 의한 추가의 참여없이 그래픽 엔진에 의한 이전의 컨텍스트의 복구를 제공한다.
광범위한 추가의 및 대안적인 장치들이 도 5에 도시된 컴퓨터 시스템(501)에 결합될 수 있다. 대안으로서, 본 발명의 실시예들은 도시된 것과는 상이한 아키텍쳐들 및 시스템들에 적응될 수도 있다. 추가의 컴포넌트들이 도시된 기존의 유닛들 내에 병합될 수 있고 더 많거나 더 적은 하드웨어 컴포넌트들이 설명된 기능을 제공하기 위해 이용될 수도 있다. 설명된 기능들 중 하나 이상이 전체 시스템으로부터 삭제될 수도 있다.
상기에서 설명된 예들보다 더 적게 또는 더 많이 장착된 시스템이 소정의 구현에서는 선호될 수도 있다는 것을 이해해야 한다. 따라서, 예시적 시스템 및 회로들의 구성은, 가격 제약, 성능 요건, 기술적 향상, 또는 기타의 상황 등의 다양한 요인들에 따라 구현마다 달라질 수 있다.
실시예들은, 마더보드를 이용하여 접속된 하나 이상의 마이크로칩 또는 집적 회로, 하드와이어드 로직, 메모리 장치에 의해 저장되고 마이크로프로세서에 의해 실행되는 소프트웨어, 펌웨어, 주문형 집적 회로(ASIC), 및/또는 필드 프로그래머블 게이트 어레이(FPGA) 중 임의의 것 또는 조합으로서 구현될 수도 있다. 용어 "로직"은, 예로서, 소프트웨어 또는 하드웨어 및/또는 소프트웨어와 하드웨어의 조합을 포함할 수도 있다.
"한 실시예", "실시예", "예시적 실시예", "다양한 실시예" 등의 언급은, 이와 같이 기술된 본 발명의 실시예(들)이 특정한 피쳐, 구조 또는 특성을 포함할 수 있지만, 모든 실시예가 반드시 그 특정한 피쳐, 구조, 또는 특성을 포함하는 것은 아님을 나타낸다. 또한, 일부 실시예들은 다른 실시예들에 대해 설명된 피쳐들 중 일부, 전부를 갖거나, 아무것도 갖지 않을 수도 있다.
상세한 설명 및 청구항에서, 용어 "결합된" 및 그 파생어들이 사용될 수 있다. "결합된"은, 2개 이상의 요소들이 서로 함께 동작하거나 상호작용하지만, 이들은 자신들 사이에 개재하는 물리적 또는 전기적 컴포넌트를 갖거나 갖지 않을 수도 있다.
청구항에서 사용될 때, 달리 명시하지 않는 한, 공통된 요소를 기술하는 서수사 "제1", "제2", "제3" 등은, 유사한 요소들의 상이한 사례들이 언급되고 있다는 것을 나타내며, 그렇게 기술된 요소들이, 시간적으로, 공간적으로, 등급에 있어서, 또는 기타의 방식으로, 주어진 순서로 존재해야 한다는 것을 암시하고자 함이 아니다.
도면과 상기 설명은 실시예들의 예를 제공한다. 당업자라면, 설명된 요소들 중 하나 이상은 마찬가지로 단일의 기능 요소로 결합될 수도 있다는 것을 이해할 것이다. 대안으로서, 소정 요소들은 복수의 기능 요소들로 분할될 수도 있다. 한 실시예로부터의 요소들은 또 다른 실시예에 첨가될 수도 있다. 예를 들어, 여기서 설명된 프로세스들의 순서는 변경될 수 있고 여기서 설명된 방식으로 제한되지 않는다. 게다가, 임의의 흐름도의 동작들은 도시된 순서로 구현될 필요는 없다; 또한 동작들의 모두가 수행될 필요가 있는 것은 아니다. 또한, 다른 동작들에 의존하지 않는 동작들은 다른 동작들과 병렬로 수행될 수도 있다. 실시예의 범위는 어떤 식으로든 이들 특정한 예에 의해 제한되지 않는다. 구조, 치수, 및 재료의 이용 등에서의 차이점과 같은, 명세서에서 명시적으로 주어진 것이든 아니든, 수많은 변형이 가능하다. 실시예들의 범위는 적어도 이하의 청구항에 의해 주어진 바와 같이 넓다.
이하의 예들은 추가 실시예에 관한 것이다. 예에서의 구체적인 사항은 하나 이상의 실시예의 임의의 곳에서 이용될 수 있다. 한 실시예에서, 방법은, 그래픽 프로세서에 의해 컨텍스트로서 실행되는 복수의 그래픽 애플리케이션들 각각에 컨텍스트 ID(식별자)를 할당하는 단계, 각각의 컨텍스트 ID에 고유 컨텍스트 메모리 버퍼를 할당하는 단계, 각각의 컨텍스트 ID에 고유한 우회 컨텍스트 포인터 ―우회 컨텍스트 포인터는 우회 컨텍스트 버퍼 내의 주소를 가리킴― 및 대응하는 크기를 할당하는 단계, 각각의 컨텍스트 ID에 우회 컨텍스트 오프셋 ―우회 컨텍스트 오프셋은 우회 컨텍스트 버퍼 내로의 오프셋을 나타냄― 을 할당하는 단계, 각각의 컨텍스트 ID에 우회 컨텍스트 버퍼 주소 범위를 할당하는 단계, 할당된 컨텍스트 ID에 대응하는 제1 컨텍스트 작업부하의 일부를 실행하는 단계, 실행의 완료 전에 제1 컨텍스트 작업부하의 실행을 우회하는 단계, 제1 컨텍스트로부터의 이탈 전환(switching away)시에 할당된 컨텍스트 메모리 버퍼에 우회시의 제1 컨텍스트 작업부하의 상태를 보관하는 단계, 보관된 컨텍스트 상태와는 독립된 레지스터들에 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋 및 우회 컨텍스트 버퍼 주소 범위의 크기를 보관하는 단계, 제2 컨텍스트 작업부하의 적어도 일부를 실행하는 단계, 보관된 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋 및 버퍼 크기에 액세스함으로써 실행 후에 보관된 제1 컨텍스트 상태를 복구하는 단계, 및 제1 컨텍스트 작업부하의 실행을 재개하는 단계를 포함한다.
일부 실시예에서, 할당된 컨텍스트 메모리 버퍼는 대응하는 컨텍스트에 대한 상태를 보관하기 위해 그래픽 프로세서에 의해 이용된다. 일부 실시예에서, 제1 컨텍스트의 상태를 보관하는 단계는 보관된 제1 컨텍스트 상태를 복구할 때 실행을 위한 할당된 컨텍스트 메모리 버퍼에 명령어를 보관하는 단계를 포함한다.
일부 실시예는 컨텍스트 상태 복구 커맨드를 오버라이드하기 위해 우회 컨텍스트 버퍼 내에 커맨드들을 로딩하는 단계를 포함한다. 일부 실시예에서, 로딩하는 단계는 보관된 제1 컨텍스트를 복구하는 그래픽 프로세서와는 독립된 소프트웨어 프로세스이다. 일부 실시예에서, 보관된 제1 컨텍스트를 복구하는 단계는, 컨텍스트 메모리 버퍼 내의 커맨드들을 실행하는 단계, 우회 컨텍스트 오프셋에 대응하는 컨텍스트 메모리 버퍼 주소에 도달하면, 우회 컨텍스트 포인터를 인출하는 단계, 및 우회 컨텍스트 포인터에 대응하는 버퍼 주소에 저장된 커맨드들을 실행하는 단계를 포함한다.
일부 실시예에서, 우회 컨텍스트 포인터를 인출하는 단계 및 우회 컨텍스트 포인터에 대응하는 버퍼 주소에 저장된 커맨드들을 실행하는 단계는, 컨텍스트 메모리 버퍼로부터의 복구를 보류하는 단계 및 우회 컨텍스트 포인터에 의해 표시된 메모리 주소로부터 인출하는 단계를 포함한다.
일부 실시예는, 우회 컨텍스트 포인터에 의해 표시된 메모리 주소로부터 인출된 명령어들을 실행한 후에, 컨텍스트 메모리 버퍼로부터의 복구를 재개하는 단계를 포함한다. 일부 실시예에서, 우회 컨텍스트 포인터에 의해 표시된 메모리 주소로부터 실행된 명령어들은 우회 컨텍스트 포인터와 우회 컨텍스트 오프셋의 새로운 값들을 보관하는 단계를 포함한다. 일부 실시예에서, 우회하는 단계는, 제1 컨텍스트의 실행을 보류하는 단계, 제1 컨텍스트의 실행보다 선점권을 갖는 단계, 및 제1 컨텍스트의 실행을 인터럽트하는 단계 중 적어도 하나를 포함한다.
일부 실시예는, 컨텍스트 작업부하를 실행하지 않는 소프트웨어 에이전트에 의해, 보관된 제1 컨텍스트를 복구하기 위해, 우회 컨텍스트 포인터 오프셋 및 우회 컨텍스트 포인터를 대응하는 레지스터들에 로딩하고 우회 커맨드를 전송하는 단계를 포함한다.
일부 실시예는 제2 컨텍스트 작업부하의 실행 동안에 제1 컨텍스트 ID를 수신하는 단계를 포함하고, 보관된 제1 컨텍스트 상태를 복구하는 단계는, 제1 컨텍스트 ID를 수신하는 것에 응답하여 보관된 제1 컨텍스트 상태를 복구하는 단계를 포함한다.
일부 실시예는 보관된 제1 컨텍스트 상태를 복구하기 전에 제2 컨텍스트의 상태를 보관하는 단계를 포함한다. 일부 실시예에서 제1 컨텍스트 작업부하의 상태를 보관하는 단계는 제1 컨텍스트 작업부하가 작용하는 표면들에 대한 주소들을 보관하는 단계를 포함한다.
일부 실시예는, 머신에 의해 실행될 때 머신으로 하여금, 그래픽 프로세서에 의해 컨텍스트로서 실행되는 복수의 그래픽 애플리케이션들 각각에 컨텍스트 ID(식별자)를 할당하는 단계, 각각의 컨텍스트 ID에 고유 컨텍스트 메모리 버퍼를 할당하는 단계, 각각의 컨텍스트 ID에 고유한 우회 컨텍스트 포인터 ―우회 컨텍스트 포인터는 우회 컨텍스트 버퍼 내의 주소를 가리킴― 및 대응하는 크기를 할당하는 단계, 각각의 컨텍스트 ID에 우회 컨텍스트 오프셋 ―우회 컨텍스트 오프셋은 우회 컨텍스트 버퍼 내로의 오프셋을 나타냄― 을 할당하는 단계, 각각의 컨텍스트 ID에 우회 컨텍스트 버퍼 주소 범위를 할당하는 단계, 할당된 컨텍스트 ID에 대응하는 제1 컨텍스트 작업부하의 일부를 실행하는 단계, 실행의 완료 전에 제1 컨텍스트 작업부하의 실행을 우회하는 단계, 제1 컨텍스트로부터의 이탈 전환(switching away)시에 할당된 컨텍스트 메모리 버퍼에 우회시의 제1 컨텍스트 작업부하의 상태를 보관하는 단계, 보관된 컨텍스트 상태와는 독립된 레지스터들에 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋 및 우회 컨텍스트 버퍼 주소 범위의 크기를 보관하는 단계, 제2 컨텍스트 작업부하의 적어도 일부를 실행하는 단계, 보관된 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋 및 버퍼 크기에 액세스함으로써 실행 후에 보관된 제1 컨텍스트 상태를 복구하는 단계, 및 제1 컨텍스트 작업부하의 실행을 재개하는 단계를 포함할 수 있는 동작들을 수행하게 하는 명령어들을 저장하고 있는 머신-판독가능한 매체에 관한 것이다.
일부 실시예에서, 제1 컨텍스트의 상태를 보관하는 단계는 보관된 제1 컨텍스트 상태를 복구할 때 실행을 위한 할당된 컨텍스트 메모리 버퍼에 명령어를 보관하는 단계를 포함한다.
일부 실시예는 컨텍스트 상태 복구 커맨드를 오버라이드하기 위해 우회 컨텍스트 버퍼 내에 커맨드들을 로딩하는 단계를 포함한다.
일부 실시예에서, 보관된 제1 컨텍스트를 복구하는 단계는, 컨텍스트 메모리 버퍼 내의 커맨드들을 실행하는 단계, 우회 컨텍스트 오프셋에 대응하는 컨텍스트 메모리 버퍼 주소에 도달하면, 우회 컨텍스트 포인터를 인출하는 단계, 우회 컨텍스트 포인터에 대응하는 버퍼 주소에 저장된 커맨드를 실행하는 단계를 포함한다. 일부 실시예에서, 우회 컨텍스트 포인터를 인출하는 단계 및 우회 컨텍스트 포인터에 대응하는 버퍼 주소에 저장된 커맨드를 실행하는 단계는, 컨텍스트 메모리 버퍼로부터의 복구를 보류하는 단계 및 우회 컨텍스트 포인터에 의해 표시된 메모리 주소로부터 인출하는 단계를 포함한다.
일부 실시예는, 우회 컨텍스트 포인터에 의해 표시된 메모리 주소로부터 인출된 명령어를 실행한 후에, 컨텍스트 메모리 버퍼로부터의 복구를 재개하는 단계를 포함한다. 일부 실시예에서, 우회 컨텍스트 포인터에 의해 표시된 메모리 주소로부터 실행된 명령어들은 우회 컨텍스트 포인터와 우회 컨텍스트 오프셋의 새로운 값들을 보관하는 단계를 포함한다.
일부 실시예는 제2 컨텍스트 작업부하의 실행 동안에 제1 컨텍스트 ID를 수신하는 단계를 포함하고, 보관된 제1 컨텍스트 상태를 복구하는 단계는, 제1 컨텍스트 ID를 수신하는 것에 응답하여 보관된 제1 컨텍스트 상태를 복구하는 단계를 포함한다.
일부 실시예는 보관된 제1 컨텍스트 상태를 복구하기 전에 제2 컨텍스트의 상태를 보관하는 단계를 포함한다. 일부 실시예에서 제1 컨텍스트 작업부하의 상태를 보관하는 단계는 제1 컨텍스트 작업부하가 작용하는 표면들에 대한 주소들을 보관하는 단계를 포함한다.
일부 실시예는, 복수의 고유 컨텍스트 메모리 버퍼, 우회 컨텍스트 버퍼, 고유 컨텍스트 메모리 버퍼 및 우회 컨텍스트 버퍼에 결합된 그래픽 프로세서, 및 그래픽 프로세서에 의해 컨텍스트로서 실행되는 복수의 그래픽 애플리케이션들 각각에 컨텍스트 ID(식별자)를 할당하고, 각각의 컨텍스트 ID에 고유 컨텍스트 메모리 버퍼를 할당하며, 각각의 컨텍스트 ID에 고유 우회 컨텍스트 포인터 ―우회 컨텍스트 포인터는 우회 컨텍스트 버퍼 내의 주소를 가리킴― 및 대응하는 크기를 할당하고, 각각의 컨텍스트 ID에 우회 컨텍스트 오프셋 ―우회 컨텍스트 오프셋은 우회 컨텍스트 버퍼 내로의 오프셋을 나타냄― 을 할당하며, 각각의 컨텍스트 ID에 우회 컨텍스트 버퍼 주소 범위를 할당하는 중앙 처리 유닛을 포함하는 장치에 관한 것이다. 그래픽 프로세서는, 할당된 컨텍스트 ID에 대응하는 제1 컨텍스트 작업부하의 일부를 실행하고, 실행의 완료 전에 제1 컨텍스트 작업부하의 실행을 우회하고, 제1 컨텍스트로부터의 이탈 전환(switching away)시에 할당된 컨텍스트 메모리 버퍼에 우회시의 제1 컨텍스트 작업부하의 상태를 보관하며, 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋, 및 우회 컨텍스트 버퍼 주소 범위의 크기를, 보관된 컨텍스트 상태와는 독립된 레지스터들에 보관하고, 제2 컨텍스트 작업부하의 적어도 일부를 실행하며, 보관된 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋, 및 버퍼 크기에 액세스함으로써 실행 후에 보관된 제1 컨텍스트 상태를 복구하고, 제1 컨텍스트 작업부하의 실행을 재개한다.
일부 실시예에서, 그래픽 프로세서는, 보관된 제1 컨텍스트 상태를 복구할 때 실행을 위한 할당된 컨텍스트 메모리 버퍼에 명령어를 보관함으로써 제1 컨텍스트의 상태를 보관한다. 일부 실시예에서, 중앙 처리 유닛은, 컨텍스트 상태 복구 커맨드를 오버라이드하기 위해 우회 컨텍스트 버퍼 내에 커맨드들을 로딩한다. 일부 실시예에서, 그래픽 프로세서는, 컨텍스트 메모리 버퍼 내의 커맨드들을 실행하고, 우회 컨텍스트 오프셋에 대응하는 컨텍스트 메모리 버퍼 주소에 도달하면, 우회 컨텍스트 포인터를 인출하고, 컨텍스트 메모리 버퍼로부터의 복구를 보류하고 우회 컨텍스트 포인터에 의해 표시된 메모리 주소로부터 인출하며, 우회 컨텍스트 포인터에 대응하는 버퍼 주소에 저장된 커맨드들을 실행한 다음, 컨텍스트 메모리 버퍼로부터의 복구를 재개함으로써, 보관된 제1 컨텍스트를 복구한다.
일부 실시예에서, 그래픽 프로세서는 또한, 우회 컨텍스트 포인터에 의해 표시된 메모리 주소로부터 실행된 명령어에 기초하여, 우회 컨텍스트 포인터와 우회 컨텍스트 오프셋의 새로운 값들을 보관한다. 일부 실시예에서, 중앙 처리 유닛은 또한, 우회 컨텍스트 포인터 오프셋과 우회 컨텍스트 포인터를 대응하는 레지스터들에 로딩하고 우회 커맨드를 그래픽 프로세서에 전송하여 보관된 제1 컨텍스트를 복구한다.
일부 실시예는, 그래픽 컨텍스트 작업부하 결과들을 디스플레이하기 위한 디스플레이 시스템, 복수의 그래픽 애플리케이션을 갖는 대용량 메모리, 복수의 고유 컨텍스트 메모리 버퍼와 우회 컨텍스트 버퍼를 갖는 그래픽 메모리, 고유 컨텍스트 메모리 버퍼와 우회 컨텍스트 버퍼에 결합된 그래픽 프로세서, 및 그래픽 프로세서에 의해 컨텍스트로서 실행되는 복수의 그래픽 애플리케이션들 각각에 컨텍스트 ID(식별자)를 할당하고, 각각의 컨텍스트 ID에 고유 컨텍스트 메모리 버퍼를 할당하며, 각각의 컨텍스트 ID에 고유 우회 컨텍스트 포인터 ―우회 컨텍스트 포인터는 우회 컨텍스트 버퍼 내의 주소를 가리킴― 및 대응하는 크기를 할당하고, 각각의 컨텍스트 ID에 우회 컨텍스트 오프셋 ―우회 컨텍스트 오프셋은 우회 컨텍스트 버퍼 내로의 오프셋을 나타냄― 을 할당하며, 각각의 컨텍스트 ID에 우회 컨텍스트 버퍼 주소 범위를 할당하는 중앙 처리 유닛을 포함하는 시스템에 관한 것이다.
그래픽 프로세서는, 할당된 컨텍스트 ID에 대응하는 제1 컨텍스트 작업부하의 일부를 실행하고, 실행의 완료 전에 제1 컨텍스트 작업부하의 실행을 우회하고, 제1 컨텍스트로부터의 이탈 전환(switching away)시에 할당된 컨텍스트 메모리 버퍼에 우회시의 제1 컨텍스트 작업부하의 상태를 보관하며, 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋, 및 우회 컨텍스트 버퍼 주소 범위의 크기를, 보관된 컨텍스트 상태와는 독립된 레지스터들에 보관하고, 제2 컨텍스트 작업부하의 적어도 일부를 실행하며, 보관된 우회 컨텍스트 포인터, 우회 컨텍스트 오프셋, 및 버퍼 크기에 액세스함으로써 실행 후에 보관된 제1 컨텍스트 상태를 복구하고, 제1 컨텍스트 작업부하의 실행을 재개한다.
일부 실시예에서, 중앙 처리 유닛은, 컨텍스트 상태 복구 커맨드를 오버라이드하기 위해 우회 컨텍스트 버퍼 내에 커맨드들을 로딩한다.
일부 실시예에서, 그래픽 프로세서는, 컨텍스트 메모리 버퍼 내의 커맨드들을 실행하고, 우회 컨텍스트 오프셋에 대응하는 컨텍스트 메모리 버퍼 주소에 도달하면, 우회 컨텍스트 포인터를 인출하며, 컨텍스트 메모리 버퍼로부터의 복구를 보류하고 우회 컨텍스트 포인터에 의해 표시된 메모리 주소로부터 인출하며, 우회 컨텍스트 포인터에 대응하는 버퍼 주소에 저장된 커맨드들을 실행한 다음, 컨텍스트 메모리 버퍼로부터의 복구를 재개함으로써, 보관된 제1 컨텍스트를 복구한다.
일부 실시예에서, 중앙 처리 유닛은 또한, 우회 컨텍스트 포인터 오프셋과 우회 컨텍스트 포인터를 대응하는 레지스터들에 로딩하고 우회 커맨드를 그래픽 프로세서에 전송하여 보관된 제1 컨텍스트를 복구한다.
일부 실시예는, 그래픽 프로세서에 제1 컨텍스트 ID(식별자) ―컨텍스트 ID는 그래픽 프로세서에 의해 실행되는 그래픽 애플리케이션, 고유 컨텍스트 메모리 버퍼, 고유 우회 컨텍스트 포인터, 대응하는 크기, 우회 컨텍스트 오프셋, 및 버퍼 주소 범위를 식별함― 를 전송하는 단계, 그래픽 프로세서에 의한 실행을 위해 그래픽 프로세서에 제2 컨텍스트 ID를 전송하는 단계, 그래픽 프로세서에게 제1 컨텍스트의 실행을 재개할 것을 명령하기 위해 그래픽 프로세서에게 제1 컨텍스트 ID를 재제출하는 단계, 및 제1 컨텍스트의 실행을 재개하는 명령어를 인출하기 위해 그래픽 프로세서에 의해 이용되는 레지스터에 값을 할당하는 단계를 포함하는 방법에 관한 것이다.
일부 실시예에서, 그래픽 프로세서는 제2 컨텍스트를 실행하기 전에 식별된 컨텍스트 메모리 버퍼에 제1 컨텍스트의 현재 상태를 보관한다. 일부 실시예에서, 값을 할당하는 단계는, 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로서 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 레지스터의 값을 갱신하는 단계, 및 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로부터의 오프셋으로서 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 오프셋 레지스터의 값을 갱신하는 단계를 포함한다.
일부 실시예는, 머신에 의해 실행될 때 머신으로 하여금, 그래픽 프로세서에 제1 컨텍스트 ID(식별자) ―컨텍스트 ID는 그래픽 프로세서에 의해 실행되는 그래픽 애플리케이션, 고유 컨텍스트 메모리 버퍼, 고유 우회 컨텍스트 포인터, 대응하는 크기, 우회 컨텍스트 오프셋, 및 버퍼 주소 범위를 식별함― 를 전송하는 단계, 그래픽 프로세서에 의한 실행을 위해 그래픽 프로세서에 제2 컨텍스트 ID를 전송하는 단계, 그래픽 프로세서에게 제1 컨텍스트의 실행을 재개할 것을 명령하기 위해 그래픽 프로세서에게 제1 컨텍스트 ID를 재제출하는 단계, 및 제1 컨텍스트의 실행을 재개하는 명령어를 인출하기 위해 그래픽 프로세서에 의해 이용되는 레지스터에 값을 할당하는 단계를 포함하는 동작을 수행하게 하는 명령어들을 저장하고 있는 머신-판독가능한 매체에 관한 것이다.
일부 실시예에서, 그래픽 프로세서는 제2 컨텍스트를 실행하기 전에 식별된 컨텍스트 메모리 버퍼에 제1 컨텍스트의 현재 상태를 보관한다.
일부 실시예에서, 값을 할당하는 단계는, 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로서 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 레지스터의 값을 갱신하는 단계, 및 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로부터의 오프셋으로서 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 오프셋 레지스터의 값을 갱신하는 단계를 포함한다.
일부 실시예는, 그래픽 프로세서에 제1 컨텍스트 ID(식별자) ―컨텍스트 ID는 그래픽 프로세서에 의해 실행되는 그래픽 애플리케이션, 고유 컨텍스트 메모리 버퍼, 고유 우회 컨텍스트 포인터, 대응하는 크기, 우회 컨텍스트 오프셋, 및 버퍼 주소 범위를 식별함― 를 전송하고, 그래픽 프로세서에 의한 실행을 위해 그래픽 프로세서에 제2 컨텍스트 ID를 전송하며, 그래픽 프로세서에게 제1 컨텍스트의 실행을 재개할 것을 명령하기 위해 그래픽 프로세서에게 제1 컨텍스트 ID를 재제출하고, 및 제1 컨텍스트의 실행을 재개하는 명령어를 인출하기 위해 그래픽 프로세서에 의해 이용되는 레지스터에 값을 할당하는 중앙 처리 유닛을 포함하는 장치에 관한 것이다.
일부 실시예에서, 값을 할당하는 단계는, 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로서 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 레지스터의 값을 갱신하는 단계, 및 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로부터의 오프셋으로서 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 오프셋 레지스터의 값을 갱신하는 단계를 포함한다.

Claims (25)

  1. 방법으로서,
    그래픽 프로세서에 의해 컨텍스트로서 실행되는 복수의 그래픽 애플리케이션들 각각에 컨텍스트 ID(식별자)를 할당하는 단계;
    각각의 컨텍스트 ID에 고유 컨텍스트 메모리 버퍼를 할당하는 단계;
    각각의 컨텍스트 ID에 고유 우회(indirect) 컨텍스트 포인터 ―상기 우회 컨텍스트 포인터는 우회 컨텍스트 버퍼 내의 주소를 가리킴― 및 대응하는 크기를 할당하는 단계;
    각각의 컨텍스트 ID에 우회 컨텍스트 오프셋 ―상기 우회 컨텍스트 오프셋은 상기 우회 컨텍스트 버퍼 내로의 오프셋을 나타냄― 을 할당하는 단계;
    각각의 컨텍스트 ID에 우회 컨텍스트 버퍼 주소 범위를 할당하는 단계;
    할당된 컨텍스트 ID에 대응하는 제1 컨텍스트 작업부하의 일부를 실행하는 단계;
    상기 실행의 완료 이전에 상기 제1 컨텍스트 작업부하의 실행을 우회(indirect)하는 단계;
    상기 제1 컨텍스트로부터의 이탈 전환(switching away)시에 상기 할당된 컨텍스트 메모리 버퍼에 우회시의 상기 제1 컨텍스트 작업부하의 상태를 보관하는 단계;
    상기 우회 컨텍스트 포인터, 상기 우회 컨텍스트 오프셋 및 상기 우회 컨텍스트 버퍼 주소 범위의 크기를 상기 보관된 컨텍스트 상태와는 독립된 레지스터들에 보관하는 단계;
    제2 컨텍스트 작업부하의 적어도 일부를 실행하는 단계;
    상기 보관된 우회 컨텍스트 포인터, 상기 우회 컨텍스트 오프셋 및 상기 버퍼 크기에 액세스함으로써 실행 이후에 상기 보관된 제1 컨텍스트 상태를 복구하는 단계; 및
    상기 제1 컨텍스트 작업부하의 실행을 재개하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 할당된 컨텍스트 메모리 버퍼는 대응하는 컨텍스트에 대한 상태를 보관하기 위해 상기 그래픽 프로세서에 의해 이용되는 방법.
  3. 제1항에 있어서, 상기 제1 컨텍스트의 상태를 보관하는 단계는 상기 보관된 제1 컨텍스트 상태를 복구할 때 실행을 위해 상기 할당된 컨텍스트 메모리 버퍼에 명령어들을 보관하는 단계를 포함하는, 방법.
  4. 제1항에 있어서, 컨텍스트 상태 복구 커맨드들을 오버라이드하기 위해 상기 우회 컨텍스트 버퍼 내에 커맨드들을 로딩하는 단계를 더 포함하는 방법.
  5. 제4항에 있어서, 상기 로딩하는 단계는 상기 보관된 제1 컨텍스트를 복구하는 상기 그래픽 프로세서와는 독립된 소프트웨어 프로세스인, 방법.
  6. 제1항에 있어서, 상기 보관된 제1 컨텍스트를 복구하는 단계는, 상기 컨텍스트 메모리 버퍼 내의 커맨드들을 실행하는 단계, 상기 우회 컨텍스트 오프셋에 대응하는 컨텍스트 메모리 버퍼 주소에 도달하면, 상기 우회 컨텍스트 포인터를 인출하는 단계, 및 상기 우회 컨텍스트 포인터에 대응하는 버퍼 주소에 저장된 커맨드들을 실행하는 단계를 포함하는, 방법.
  7. 제6항에 있어서, 상기 우회 컨텍스트 포인터를 인출하는 단계 및 상기 우회 컨텍스트 포인터에 대응하는 버퍼 주소에 저장된 커맨드들을 실행하는 단계는, 상기 컨텍스트 메모리 버퍼로부터의 복구를 보류하는 단계 및 상기 우회 컨텍스트 포인터에 의해 표시된 메모리 주소들로부터 인출하는 단계를 포함하는, 방법.
  8. 제7항에 있어서, 상기 우회 컨텍스트 포인터에 의해 표시된 메모리 주소들로부터 인출된 명령어들을 실행한 후에, 상기 컨텍스트 메모리 버퍼로부터의 복구를 재개하는 단계를 더 포함하는 방법.
  9. 제8항에 있어서, 상기 우회 컨텍스트 포인터에 의해 표시된 메모리 주소들로부터 실행된 명령어들은 상기 우회 컨텍스트 포인터와 우회 컨텍스트 오프셋의 새로운 값들을 보관하는 단계를 포함하는, 방법.
  10. 제1항에 있어서, 상기 우회하는 단계는, 상기 제1 컨텍스트의 실행을 보류하는 단계, 상기 제1 컨텍스트의 실행보다 선점권을 갖는 단계, 및 상기 제1 컨텍스트의 실행을 인터럽트하는 단계 중 적어도 하나를 포함하는, 방법.
  11. 제1항에 있어서, 컨텍스트 작업부하를 실행하지 않는 소프트웨어 에이전트에 의해, 상기 보관된 제1 컨텍스트를 복구하기 위해, 상기 우회 컨텍스트 포인터 오프셋 및 상기 우회 컨텍스트 포인터를 대응하는 레지스터들에 로딩하고 우회 커맨드를 전송하는 단계를 더 포함하는 방법.
  12. 제1항에 있어서, 상기 제2 컨텍스트 작업부하의 실행 동안에 상기 제1 컨텍스트 ID를 수신하는 단계를 더 포함하고, 상기 보관된 제1 컨텍스트 상태를 복구하는 단계는, 상기 제1 컨텍스트 ID를 수신하는 것에 응답하여 상기 보관된 제1 컨텍스트 상태를 복구하는 단계를 포함하는, 방법.
  13. 제12항에 있어서, 상기 보관된 제1 컨텍스트 상태를 복구하기 전에 상기 제2 컨텍스트의 상태를 보관하는 단계를 더 포함하는 방법.
  14. 제1항에 있어서, 상기 제1 컨텍스트 작업부하의 상태를 보관하는 단계는 상기 제1 컨텍스트 작업부하가 작용하는 표면들에 대한 주소들을 보관하는 단계를 포함하는, 방법.
  15. 머신에 의해 실행될 때 상기 머신으로 하여금 동작들을 수행하게 하는 명령어들을 저장하고 있는 적어도 하나의 컴퓨터-판독가능한 매체로서,
    상기 동작들은,
    그래픽 프로세서에 의해 컨텍스트로서 실행되는 복수의 그래픽 애플리케이션들 각각에 컨텍스트 ID(식별자)를 할당하는 동작;
    각각의 컨텍스트 ID에 고유 컨텍스트 메모리 버퍼를 할당하는 동작;
    각각의 컨텍스트 ID에 고유 우회 컨텍스트 포인터 ―상기 우회 컨텍스트 포인터는 우회 컨텍스트 버퍼 내의 주소를 가리킴― 및 대응하는 크기를 할당하는 동작;
    각각의 컨텍스트 ID에 우회 컨텍스트 오프셋 ―상기 우회 컨텍스트 오프셋은 상기 우회 컨텍스트 버퍼 내로의 오프셋을 나타냄― 을 할당하는 동작;
    각각의 컨텍스트 ID에 우회 컨텍스트 버퍼 주소 범위를 할당하는 동작;
    할당된 컨텍스트 ID에 대응하는 제1 컨텍스트 작업부하의 일부를 실행하는 동작;
    상기 실행의 완료 이전에 상기 제1 컨텍스트 작업부하의 실행을 우회하는 동작;
    상기 제1 컨텍스트로부터의 이탈 전환(switching away)시에 상기 할당된 컨텍스트 메모리 버퍼에 우회시의 상기 제1 컨텍스트 작업부하의 상태를 보관하는 동작;
    상기 우회 컨텍스트 포인터, 상기 우회 컨텍스트 오프셋 및 상기 우회 컨텍스트 버퍼 주소 범위의 크기를 상기 보관된 컨텍스트 상태와는 독립된 레지스터들에 보관하는 동작;
    제2 컨텍스트 작업부하의 적어도 일부를 실행하는 동작;
    상기 보관된 우회 컨텍스트 포인터, 상기 우회 컨텍스트 오프셋 및 상기 버퍼 크기에 액세스함으로써 실행 이후에 상기 보관된 제1 컨텍스트 상태를 복구하는 동작; 및
    상기 제1 컨텍스트 작업부하의 실행을 재개하는 동작
    을 포함하는 컴퓨터-판독가능한 매체.
  16. 제15항에 있어서, 상기 제1 컨텍스트의 상태를 보관하는 동작은 상기 보관된 제1 컨텍스트 상태를 복구할 때 실행을 위해 상기 할당된 컨텍스트 메모리 버퍼에 명령어들을 보관하는 동작을 포함하는, 컴퓨터-판독가능한 매체.
  17. 장치(apparatus)로서,
    복수의 고유 컨텍스트 메모리 버퍼;
    우회 컨텍스트 버퍼;
    상기 고유 컨텍스트 메모리 버퍼 및 상기 우회 컨텍스트 버퍼에 결합된 그래픽 프로세서; 및
    상기 그래픽 프로세서에 의해 컨텍스트로서 실행되는 복수의 그래픽 애플리케이션들 각각에 컨텍스트 ID(식별자)를 할당하고, 각각의 컨텍스트 ID에 고유 컨텍스트 메모리 버퍼를 할당하며, 각각의 컨텍스트 ID에 고유 우회 컨텍스트 포인터 ―상기 우회 컨텍스트 포인터는 상기 우회 컨텍스트 버퍼 내의 주소를 가리킴― 및 대응하는 크기를 할당하고, 각각의 컨텍스트 ID에 우회 컨텍스트 오프셋 ―상기 우회 컨텍스트 오프셋은 상기 우회 컨텍스트 버퍼 내로의 오프셋을 나타냄― 을 할당하며, 각각의 컨텍스트 ID에 우회 컨텍스트 버퍼 주소 범위를 할당하는 중앙 처리 유닛
    을 포함하고,
    상기 그래픽 프로세서는, 할당된 컨텍스트 ID에 대응하는 제1 컨텍스트 작업부하의 일부를 실행하고, 상기 실행의 완료 전에 상기 제1 컨텍스트 작업부하의 실행을 우회하고, 상기 제1 컨텍스트로부터의 이탈 전환(switching away)시에 상기 할당된 컨텍스트 메모리 버퍼에 우회시의 상기 제1 컨텍스트 작업부하의 상태를 보관하며, 상기 우회 컨텍스트 포인터, 상기 우회 컨텍스트 오프셋, 및 상기 우회 컨텍스트 버퍼 주소 범위의 크기를 상기 보관된 컨텍스트 상태와는 독립된 레지스터들에 보관하고, 제2 컨텍스트 작업부하의 적어도 일부를 실행하며, 상기 보관된 우회 컨텍스트 포인터, 상기 우회 컨텍스트 오프셋, 및 상기 버퍼 크기에 액세스함으로써 실행 후에 상기 보관된 제1 컨텍스트 상태를 복구하고, 상기 제1 컨텍스트 작업부하의 실행을 재개하는, 장치.
  18. 제17항에 있어서, 상기 그래픽 프로세서는, 상기 컨텍스트 메모리 버퍼 내의 커맨드들을 실행하고, 상기 우회 컨텍스트 오프셋에 대응하는 컨텍스트 메모리 버퍼 주소에 도달하면, 상기 우회 컨텍스트 포인터를 인출하고, 상기 컨텍스트 메모리 버퍼로부터의 복구를 보류하고 상기 우회 컨텍스트 포인터에 의해 표시된 메모리 주소들로부터 인출하며, 상기 우회 컨텍스트 포인터에 대응하는 버퍼 주소에 저장된 커맨드들을 실행한 다음, 상기 컨텍스트 메모리 버퍼로부터의 복구를 재개함으로써, 상기 보관된 제1 컨텍스트를 복구하는, 장치.
  19. 시스템으로서,
    그래픽 컨텍스트 작업부하 결과들을 디스플레이하기 위한 디스플레이 시스템;
    복수의 그래픽 애플리케이션을 갖는 대용량 메모리;
    복수의 고유 컨텍스트 메모리 버퍼와 우회 컨텍스트 버퍼를 갖는 그래픽 메모리;
    상기 고유 컨텍스트 메모리 버퍼들 및 상기 우회 컨텍스트 버퍼에 결합된 그래픽 프로세서; 및
    상기 그래픽 프로세서에 의해 컨텍스트로서 실행되는 복수의 그래픽 애플리케이션들 각각에 컨텍스트 ID(식별자)를 할당하고, 각각의 컨텍스트 ID에 고유 컨텍스트 메모리 버퍼를 할당하며, 각각의 컨텍스트 ID에 고유 우회 컨텍스트 포인터 ―상기 우회 컨텍스트 포인터는 상기 우회 컨텍스트 버퍼 내의 주소를 가리킴― 및 대응하는 크기를 할당하고, 각각의 컨텍스트 ID에 우회 컨텍스트 오프셋 ―상기 우회 컨텍스트 오프셋은 상기 우회 컨텍스트 버퍼 내로의 오프셋을 나타냄― 을 할당하며, 각각의 컨텍스트 ID에 우회 컨텍스트 버퍼 주소 범위를 할당하는 중앙 처리 유닛
    을 포함하고,
    상기 그래픽 프로세서는, 할당된 컨텍스트 ID에 대응하는 제1 컨텍스트 작업부하의 일부를 실행하고, 상기 실행의 완료 전에 상기 제1 컨텍스트 작업부하의 실행을 우회하고, 상기 제1 컨텍스트로부터의 이탈 전환(switching away)시에 상기 할당된 컨텍스트 메모리 버퍼에 우회시의 상기 제1 컨텍스트 작업부하의 상태를 보관하며, 상기 우회 컨텍스트 포인터, 상기 우회 컨텍스트 오프셋, 및 상기 우회 컨텍스트 버퍼 주소 범위의 크기를 상기 보관된 컨텍스트 상태와는 독립된 레지스터들에 보관하고, 제2 컨텍스트 작업부하의 적어도 일부를 실행하며, 상기 보관된 우회 컨텍스트 포인터, 상기 우회 컨텍스트 오프셋 및 상기 버퍼 크기에 액세스함으로써 실행 후에 상기 보관된 제1 컨텍스트 상태를 복구하고, 상기 제1 컨텍스트 작업부하의 실행을 재개하는, 시스템.
  20. 방법으로서,
    제1 컨텍스트 ID(식별자) ―상기 컨텍스트 ID는, 그래픽 프로세서에 의해 실행되는 그래픽 애플리케이션, 고유 컨텍스트 메모리 버퍼, 고유 우회 컨텍스트 포인터, 대응하는 크기, 우회 컨텍스트 오프셋, 및 버퍼 주소 범위를 식별함― 를 그래픽 프로세서에 전송하는 단계;
    상기 그래픽 프로세서에 의한 실행을 위해 상기 그래픽 프로세서에 제2 컨텍스트 ID를 전송하는 단계;
    상기 그래픽 프로세서에게 상기 제1 컨텍스트의 실행을 재개할 것을 명령하기 위해 상기 그래픽 프로세서에 상기 제1 컨텍스트 ID를 재제출하는 단계; 및
    상기 제1 컨텍스트의 실행을 재개하는 명령어들을 인출하기 위해 상기 그래픽 프로세서에 의해 이용되는 레지스터에 값을 할당하는 단계
    를 포함하는 방법.
  21. 제20항에 있어서, 상기 그래픽 프로세서는 상기 제2 컨텍스트를 실행하기 전에 식별된 컨텍스트 메모리 버퍼에 상기 제1 컨텍스트의 현재 상태를 보관하는, 방법.
  22. 제20항에 있어서, 상기 값을 할당하는 단계는,
    상기 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로서 상기 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 레지스터의 값을 갱신하는 단계; 및
    상기 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로부터의 오프셋으로서 상기 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 오프셋 레지스터의 값을 갱신하는 단계
    를 포함하는 방법.
  23. 머신에 의해 실행될 때 상기 머신으로 하여금 동작들을 수행하게 하는 명령어들을 저장하고 있는 적어도 하나의 컴퓨터-판독가능한 매체로서,
    상기 동작들은,
    제1 컨텍스트 ID(식별자) ―상기 컨텍스트 ID는, 그래픽 프로세서에 의해 실행되는 그래픽 애플리케이션, 고유 컨텍스트 메모리 버퍼, 고유 우회 컨텍스트 포인터, 대응하는 크기, 우회 컨텍스트 오프셋, 및 버퍼 주소 범위를 식별함― 를 그래픽 프로세서에 전송하는 동작;
    상기 그래픽 프로세서에 의한 실행을 위해 상기 그래픽 프로세서에 제2 컨텍스트 ID를 전송하는 동작;
    상기 그래픽 프로세서에게 상기 제1 컨텍스트의 실행을 재개할 것을 명령하기 위해 상기 그래픽 프로세서에 상기 제1 컨텍스트 ID를 재제출하는 동작; 및
    상기 제1 컨텍스트의 실행을 재개하는 명령어들을 인출하기 위해 상기 그래픽 프로세서에 의해 이용되는 레지스터에 값을 할당하는 동작
    을 포함하는 컴퓨터-판독가능한 매체.
  24. 장치(apparatus)로서,
    그래픽 프로세서에 제1 컨텍스트 ID(식별자) ―상기 컨텍스트 ID는 상기 그래픽 프로세서에 의해 실행되는 그래픽 애플리케이션, 고유 컨텍스트 메모리 버퍼, 고유 우회 컨텍스트 포인터, 대응하는 크기, 우회 컨텍스트 오프셋, 및 버퍼 주소 범위를 식별함― 를 전송하고, 상기 그래픽 프로세서에 의한 실행을 위해 상기 그래픽 프로세서에 제2 컨텍스트 ID를 전송하며, 상기 그래픽 프로세서에게 상기 제1 컨텍스트의 실행을 재개할 것을 명령하기 위해 상기 그래픽 프로세서에게 상기 제1 컨텍스트 ID를 재제출하고, 및 상기 제1 컨텍스트의 실행을 재개하는 명령어들을 인출하기 위해 상기 그래픽 프로세서에 의해 이용되는 레지스터에 값을 할당하는 중앙 처리 유닛
    을 포함하는 장치.
  25. 제24항에 있어서, 상기 값을 할당하는 것은,
    상기 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로서 상기 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 레지스터의 값을 갱신하는 것; 및
    상기 제1 컨텍스트의 실행을 재개하기 위한 베이스 주소로부터의 오프셋으로서 상기 그래픽 프로세서에 의해 이용되는 제1 컨텍스트 포인터 오프셋 레지스터의 값을 갱신하는 것
    을 포함하는 장치.
KR1020140134605A 2013-11-05 2014-10-06 하드웨어 컨텍스트 복구 흐름 동안에 프로그램가능한 소프트웨어 컨텍스트 상태 실행을 지원하기 위한 방법 및 장치 KR101693662B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/072,622 2013-11-05
US14/072,622 US9563466B2 (en) 2013-11-05 2013-11-05 Method and apparatus for supporting programmable software context state execution during hardware context restore flow

Publications (2)

Publication Number Publication Date
KR20150051868A true KR20150051868A (ko) 2015-05-13
KR101693662B1 KR101693662B1 (ko) 2017-01-17

Family

ID=53006712

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140134605A KR101693662B1 (ko) 2013-11-05 2014-10-06 하드웨어 컨텍스트 복구 흐름 동안에 프로그램가능한 소프트웨어 컨텍스트 상태 실행을 지원하기 위한 방법 및 장치

Country Status (2)

Country Link
US (1) US9563466B2 (ko)
KR (1) KR101693662B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017204443A1 (ko) * 2016-05-24 2017-11-30 삼성전자주식회사 전자 장치 및 그의 동작 방법

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10552321B2 (en) * 2017-08-04 2020-02-04 Microsoft Technology Licensing, Llc Flexible buffer sizing in graphics processors
US10713746B2 (en) * 2018-01-29 2020-07-14 Microsoft Technology Licensing, Llc FIFO queue, memory resource, and task management for graphics processing
US11734011B1 (en) * 2018-05-01 2023-08-22 Advanced Micro Devices, Inc. Context partitioning of branch prediction structures
US10719268B2 (en) 2018-06-29 2020-07-21 Microsoft Technology Licensing, Llc Techniques for safely and efficiently enqueueing and dequeueing data on a graphics processor
US10838725B2 (en) * 2018-09-26 2020-11-17 Apple Inc. Low latency fetch circuitry for compute kernels
KR102649351B1 (ko) * 2018-11-06 2024-03-20 삼성전자주식회사 세분화된 상태들에 기초한 그래픽스 프로세서 및 그래픽스 처리 방법
US10997686B2 (en) * 2019-01-09 2021-05-04 Intel Corporation Workload scheduling and distribution on a distributed graphics device
US11169811B2 (en) 2019-05-30 2021-11-09 Advanced Micro Devices, Inc. Graphics context bouncing

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030005722A (ko) * 2001-07-10 2003-01-23 (주)나인디지트 건식 금속 게르마늄 제조방법과 그 정제장치
KR20040014588A (ko) * 2001-06-29 2004-02-14 인텔 코오퍼레이션 그래픽 문맥 관리자를 구비하는 그래픽스-렌더링 엔진을갖는 장치, 방법, 및 시스템
US20070103476A1 (en) * 2005-11-10 2007-05-10 Via Technologies, Inc. Interruptible GPU and method for context saving and restoring
JP4354583B2 (ja) * 1999-09-09 2009-10-28 独立行政法人科学技術振興機構 アクセス方法及びアクセス処理プログラムを記録した記録媒体

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2841416B1 (fr) * 2002-06-20 2005-01-28 Cegetel Groupe Procede de gestion d'informations de contexte par serveur intermediaire
US8296727B2 (en) * 2005-10-14 2012-10-23 Oracle Corporation Sub-task mechanism for development of task-based user interfaces
US9438414B2 (en) * 2013-10-18 2016-09-06 Advanced Micro Devices, Inc. Virtualized SHA computational engine

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4354583B2 (ja) * 1999-09-09 2009-10-28 独立行政法人科学技術振興機構 アクセス方法及びアクセス処理プログラムを記録した記録媒体
KR20040014588A (ko) * 2001-06-29 2004-02-14 인텔 코오퍼레이션 그래픽 문맥 관리자를 구비하는 그래픽스-렌더링 엔진을갖는 장치, 방법, 및 시스템
KR20030005722A (ko) * 2001-07-10 2003-01-23 (주)나인디지트 건식 금속 게르마늄 제조방법과 그 정제장치
US20070103476A1 (en) * 2005-11-10 2007-05-10 Via Technologies, Inc. Interruptible GPU and method for context saving and restoring

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017204443A1 (ko) * 2016-05-24 2017-11-30 삼성전자주식회사 전자 장치 및 그의 동작 방법

Also Published As

Publication number Publication date
KR101693662B1 (ko) 2017-01-17
US9563466B2 (en) 2017-02-07
US20150123980A1 (en) 2015-05-07

Similar Documents

Publication Publication Date Title
KR101693662B1 (ko) 하드웨어 컨텍스트 복구 흐름 동안에 프로그램가능한 소프트웨어 컨텍스트 상태 실행을 지원하기 위한 방법 및 장치
JP5583180B2 (ja) 仮想gpu
JP5668014B2 (ja) プロセッサにおけるタスクおよびデータ管理
JP5170782B2 (ja) ヘテロジニアス処理ユニットのための集中デバイス仮想化レイヤ
US9176794B2 (en) Graphics compute process scheduling
US10026145B2 (en) Resource sharing on shader processor of GPU
JP5805675B2 (ja) ガーベッジコレクションに対するcpuサポート
JP7253507B2 (ja) 仮想化アクセラレーテッド処理デバイスの早期仮想化コンテキストスイッチ
EP2652614B1 (en) Graphics processing dispatch from user mode
US9069609B2 (en) Scheduling and execution of compute tasks
KR102540754B1 (ko) 가상화를 위한 gpu 작업 컨테이너로서의 vmid
US20130145202A1 (en) Handling Virtual-to-Physical Address Translation Failures
US20130160017A1 (en) Software Mechanisms for Managing Task Scheduling on an Accelerated Processing Device (APD)
KR100988395B1 (ko) 태스크 스케줄링 방법, 태스크 스케줄링 지원 장치, 코프로세싱 스케줄러에 관련하여 사용하기 위한 코프로세서, 및 컴퓨터 판독가능 저장 매체
US20120188259A1 (en) Mechanisms for Enabling Task Scheduling
TW201351276A (zh) 計算工作的排程和執行
US10802828B1 (en) Instruction memory
US20130135327A1 (en) Saving and Restoring Non-Shader State Using a Command Processor
US9329893B2 (en) Method for resuming an APD wavefront in which a subset of elements have faulted
US20130141446A1 (en) Method and Apparatus for Servicing Page Fault Exceptions
WO2013085794A1 (en) Method and apparatus for servicing page fault exceptions
US9147224B2 (en) Method for handling state transitions in a network of virtual processing nodes
KR101130361B1 (ko) 코프로세서 내의 연산을 스트림라인하는 방법
US20130155079A1 (en) Saving and Restoring Shader Context State
WO2013090605A2 (en) Saving and restoring shader context state and resuming a faulted apd wavefront

Legal Events

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

Payment date: 20200103

Year of fee payment: 4