KR102219545B1 - 소프트웨어 지원 콘텍스트 스위치를 갖는 미드-쓰레드 선점 - Google Patents

소프트웨어 지원 콘텍스트 스위치를 갖는 미드-쓰레드 선점 Download PDF

Info

Publication number
KR102219545B1
KR102219545B1 KR1020167036114A KR20167036114A KR102219545B1 KR 102219545 B1 KR102219545 B1 KR 102219545B1 KR 1020167036114 A KR1020167036114 A KR 1020167036114A KR 20167036114 A KR20167036114 A KR 20167036114A KR 102219545 B1 KR102219545 B1 KR 102219545B1
Authority
KR
South Korea
Prior art keywords
threads
processor
memory
logic
response
Prior art date
Application number
KR1020167036114A
Other languages
English (en)
Other versions
KR20170010833A (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 KR20170010833A publication Critical patent/KR20170010833A/ko
Application granted granted Critical
Publication of KR102219545B1 publication Critical patent/KR102219545B1/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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/253Centralized memory
    • G06F2212/2532Centralized memory comprising a plurality of modules

Abstract

소프트웨어 지원 콘텍스트 스위치를 갖는 미드-쓰레드 선점에 관한 방법 및 장치가 개시된다. 실시예에서, GPU(Graphics Processing Unit) 상에서 실행되는 하나 이상의 쓰레드는 하나 이상의 쓰레드를 선점하기 위한 요청에 응답하여 명령어 레벨 단위로 중단된다. 하나 이상의 쓰레드의 콘텍스트 데이터는 명령어 레벨 단위의 하나 이상의 쓰레드 및/또는 하나 이상의 명령어의 완료에 응답하여 메모리에 복사된다. 다른 실시예 또한 개시되고 청구된다.

Description

소프트웨어 지원 콘텍스트 스위치를 갖는 미드-쓰레드 선점{MID-THREAD PRE-EMPTION WITH SOFTWARE ASSISTED CONTEXT SWITCH}
본 개시는 일반적으로 전자 분야에 관한 것이다. 더 상세하게, 실시예는 소프트웨어 지원 콘텍스트 스위치를 갖는 미드-쓰레드 선점(mid-thread pre-emption)에 관한 것이다.
GPGPU(General-Purpose Computation on Graphics Processing Unit) 작업부하를 실행 중이고 다른 작업부하를 위해 하드웨어가 요구되는 경우, GPGPU 작업부하를 선점하거나 인터럽트하는 메커니즘이 사용될 수 있다. 이것은 일반적으로 인터럽션에 응답하여 하드웨어에서 모든 기존 또는 실행중인 쓰레드를 완료할 것을 요구한다. 이 메커니즘은 짧은 시간에 완료할 것으로 예상되는 쓰레드에 대해서는 잘 동작한다. 그러나, 쓰레드가 무한정으로 또는 긴 지속기간 동안 실행될 때, 콘텍스트 스위칭 시의 응답 시간이 매우 길고 때때로 페이지 장애(page fault)를 야기할 수 있다.
상세한 설명이 첨부 도면을 참조하여 제공된다. 도면에서, 참조 부호의 제일 최 좌측 숫자(들)는 참조 부호가 처음 나타나는 도면을 식별한다. 서로 다른 도면에서 동일한 참조 번호를 사용하는 것은 유사하거나 동일한 항목을 나타낸다.
도 1, 도 6 내지 도 8은 여기서 논의되는 다양한 실시예를 구현하는데 사용될 수 있는 컴퓨팅 시스템의 실시예의 블록도를 도시한다.
도 2는 일부 실시예에 따라 선점(preemption)을 다루기 위한 샘플 케이스를 도시한다.
도 3은 일 실시예에 따른 그래픽 로직의 컴포넌트의 블록도를 도시한다.
도 4는 일 실시예에 따른 그랙픽 로직의 콘텍스트를 저장하고 복구하는데 사용되는 선점된 메모리 맵을 도시한다.
도 5 및 도 5a는 일부 실시예에 따른 흐름도를 도시한다.
이하의 설명에서, 다양한 실시예에 대한 완전한 이해를 제공하기 위해 수많은 구체적인 상세가 기술되어 있다. 그러나, 다양한 실시예는 이러한 특정 상세 없이 실시될 수 있다. 다른 경우에 있어서, 이미 알려진 방법, 절차, 구성 요소, 및 회로는 특정 실시예를 모호하게 하지 않기 위해 상세하게 설명되지 않았다. 또한, 실시예의 다양한 양태는 다양한 수단, 예컨대 집적 반도체 회로("하드웨어"), 하나 이상의 프로그램으로 체계화된 컴퓨터 판독가능 명령어("소프트웨어"), 또는 하드웨어와 소프트웨어의 소정 조합을 이용하여 수행될 수 있다. 본 개시의 목적을 위해, "로직"에 대한 언급은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 소정 조합을 의미할 것이다.
일부 실시예는 소프트웨어 지원 콘텍스트 스위치를 갖는 미드-쓰레드 선점을 제공한다. 실시예는 GPGPU 커널 미드-쓰레드를 선점하거나 인터럽트한다. 시스템의 상태가 저장되고 선점된 커널의 실행을 계속해서 완료하기 위해 나중에 복구될 수 있다. 대조적으로, 다른 솔루션은 작업 부하의 완료에 완전히 의존하거나 또는 다른 작업부하로 스위칭할 수 있기 전 더 큰 단위(coarser granularity)의 작업 부하의 완료에 의존할 수 있다.
예를 들면, 쓰레드 그룹 내의 다중 쓰레드가 실행을 위해 디스패치되면, 일부 솔루션은 쓰레드 그룹 경계에서만 디스패치를 선점하기 위한 메커니즘을 제공할 수 있다. 그러면, 임의의 디스패치된 쓰레드는 자신의 작업을 완료할 필요가 있다. 이것은 중요한 인터럽트에 대해 GPU의 응답 시간을 증가시킨다. 미드-쓰레드 선점을 갖게 되면, 이미 실행 모드에 있는 모든 쓰레드가 임의의 명령어 쓰레드에서 인터럽트될 수 있다. 이것은 작업부하 간 스위칭의 성능을 향상시킨다.
여기서 논의되는 바와 같이, GPGPU는 GPU(Graphics Porcessing Unit) 상에서의 범용 계산을 지칭한다. GPU는 그래픽 로직, 또는 이미지, 프레임, 장면 등을 조작하는 동작과 같은 그래픽 작업(들)에 관한 계산(들)을 정상적으로 수행하는 다른 임의의 유형의 로직을 포함할 수 있지만, GPGPU의 경우에는, 범용 계산(들)을 실행하거나 수행할 수도 있다. 일부 실시예가 그래픽 로직을 참조하여 논의되고 있지만, 실시예는 그래픽 관련 로직에 한정되는 것은 아니고 다른 유형의 비-그래픽(예를 들면, 범용) 로직에도 적용될 수 있다. 더욱이, 다양한 실시예는 실시예에서 SOC(System On Chip) 상에서 구체화될 수 있는 데스크톱 컴퓨터, (스마트폰, 태블릿, UMPC(Ultra-Mobile Personal Computer), 랩톱 컴퓨터, 울트라북™ 컴퓨팅 디바이스, 스마트 워치, 스마트 글래스 등과 같은) 모바일 컴퓨터, 워크스테이션 등과 같은 임의의 유형의 컴퓨팅 디바이스에 대해 수행될 수 있다.
따라서, 일부 실시예는 다른 애플리케이션, 예를 들면, 작업부하가 더 높은 우선순위의 연산을 위해 완료하기 전에 중단될 필요가 있는 경우에 사용될 수 있는 상당히 유연성있는 솔루션을 제공한다. 일부 실시예는 애플리케이션 요청에 대한 하드웨어의 응답성을 향상시킨다. 그들은 또한 그래픽 로직이 다목적이 되도록 할 수 있다.
일부 실시예는, 예를 들면, 스마트폰, 태블릿, UMPC(Ultra-Mobile Personal Computer), 랩톱 컴퓨터, 울트라북™ 컴퓨팅 디바이스, 스마트 시계, 스마트 안경 등과 같은 모바일 컴퓨팅 디바이스를 포함하는, 도 1-8을 참조하여 설명되는 것과 같은 (예를 들면, 하나 이상의 프로세서 코어를 갖는) 하나 이상의 프로세서를 포함하는 컴퓨팅 시스템에서 적용될 수 있다. 더 구체적으로, 도 1은 일 실시예에 따른 컴퓨팅 시스템(100)의 블록도를 나타낸다. 시스템(100)은 (본 명세서에서 일반적으로 "프로세서들(102)" 또는 "프로세서(102)"로 지칭되는) 하나 이상의 프로세서(102-1 내지 102-N)를 포함할 수 있다. 프로세서(102)는 다양한 실시예에서 범용 CPU(Central Processing Units) 및/또는 GPU(Graphics Processing Units)일 수 있다. 프로세서(102)는 상호접속 또는 버스(104)를 통해 통신할 수 있다. 각각의 프로세서는 다양한 컴포넌트를 포함할 수 있고, 이들 중 일부가 단지 명료화를 위해 프로세서(102-1)를 참조하여 설명된다. 따라서, 나머지프로세서(102-2 내지 102-N) 각각은 프로세서(102-1)를 참조하여 설명되는 동일한 또는 유사한 컴포넌트를 포함할 수 있다.
일 실시예에서, 프로세서(102-1)는 (본 명세서에서 "코어들(106)" 또는 "코어(106)"로 지칭되는) 하나 이상의 프로세서 코어(106-1 내지 106-M), 캐시(108) 및/또는 라우터(110)를 포함할 수 있다. 프로세서 코어(106)는 단일 집적 회로(IC) 칩 상에 구현될 수 있다. 더욱이, 칩은 하나 이상의 공유 및/또는 비공개 캐시(예를 들면, 캐시(108)), 버스 또는 상호접속(예를 들면, 버스 또는 상호접속(112)), 그래픽 및/또는 메모리 컨트롤러(예를 들면, 도 6-8을 참조하여 설명되는 것), 또는 다른 컴포넌트를 포함할 수 있다.
일 실시예에서, 라우터(110)는 프로세서(102-1) 및/또는 시스템(100)의 다양한 컴포넌트 사이에서 통신하는데 사용될 수 있다. 더욱이, 프로세서(102-1)는 2개 이상의 라우터(110)를 포함할 수 있다. 더구나, 다수의 라우터(110)는 프로세서(102-1) 안의 또는 밖의 다양한 컴포넌트 사이의 데이터 라우팅을 가능하게 하도록 통신할 수 있다.
캐시(108)는 코어(106)와 같은 프로세서(102-1)의 하나 이상의 컴포넌트에 의해 사용되는 (예를 들면, 명령어를 포함하는) 데이터를 저장할 수 있다. 예를 들면, 캐시(108)는 프로세서(102)의 컴포넌트에 의한 더 빠른 액세스(예를 들면, 코어(106)에 의한 더 빠른 액세스)를 위해 메모리(114)에 저장된 데이터를 국지적으로 캐싱할 수 있다. 도 1에 도시된 바와 같이, 메모리(114)는 상호접속(104)을 통해 프로세서(102)와 통신할 수 있다. 일 실시예에서, (공유될 수 있는) 캐시(108)는 중간 레벨 캐시(MLC), 최종 레벨 캐시(LLC) 등일 수 있다. 또한, 코어(106) 각각은 (본 명세서에서 일반적으로 "L1 캐시(116)"로 지칭되는) 레벨 1(L1) 캐시(116-1) 또는 다른 레벨의 캐시, 예를 들면 레벨 2(L2) 캐시를 포함할 수 있다. 더욱이, 프로세서(102-1)의 다양한 컴포넌트는 캐시(108)와 직접, 버스(예를 들면, 버스(112)) 및/또는 메모리 컨트롤러 또는 허브를 통해 통신할 수 있다.
도 1에 도시된 바와 같이, 프로세서(102)는 여기서 논의되는 바와 같은 다양한 그래픽 및/또는 범용 계산(들) 관련 동작을 수행하기 위한 그래픽 로직(140)을 더 포함할 수 있다. 로직(140)은 여기서 논의되는 바와 같은 시스템(100)의 다양한 컴포넌트와 통신되는 정보와 같은 로직(140)의 동작에 관한 정보를 저장하기 위해 여기서 논의되는 (캐시(108), L1 캐시(116), 메모리(114), 레지스터(들), 또는 시스템(100) 내의 또 다른 메모리와 같은) 하나 이상의 스토리지 디바이스로의 액세스를 가질 수 있다. 또한, 로직(140)이 프로세서(102) 내부에 도시되어 있지만, 다양한 실시예에서 시스템(100)의 어느 곳에나 위치될 수 있다. 예를 들면, 로직(140)은 하나 이상의 코어(106)를 대체할 수 있고, 상호접속(112) 및/또는 상호접속(104) 등에 직접 결합될 수 있다.
일반적으로, 하드웨어(예를 들면, 로직(140)의 상태는, (a) 고정 기능 하드웨어에서의 상태; (b) 쓰레드의 상태(즉, 레지스터 및 명령어 포인터 등); 및 (c) SLM(즉, 중간 결과뿐만 아니라, 예를 들면, 빈번하게 재사용되는 버퍼링된 데이터를 포함하는 글로벌/메인 메모리에 대한 다른 분산/수집 동작의 캐싱/저장을 위해 그래픽 로직/GPU에 의해 사용되는 메모리를 지칭하는 공유 로컬 메모리(Shared Local Memory))로 분류될 수 있다. 예를 들면, SLM은 데이터를 공유하고 및/또는 그들 간에 데이터를 통과시키기 위한 상이한 쓰레드를 요구하는 동작을 지원할 수 있다.
일부 콘텍스트 저장 및 복구 프로세스는, 예를 들면, 정지 조건에서, 일부 형태의 DMA(Direct Memory Access) 엔진/로직이 모든 하드웨어 상태를 미리정해진 위치에, 및 미리 정해진 시퀀스 뒤에 메모리에 기입하는 상태 머신으로서 하드웨어 내에 구축될 수 있다. 일 실시예에서, 프로그래밍가능 엔진(그래픽 로직/GPU의 EU 또는 Execution Unit)에서의 기존 제어는 쓰레드의 콘텐츠를 소프트웨어 지원을 받는 메모리로 이동시키는데 사용된다. 디버그를 위해 주로 사용하는 예외적인 핸들링 하드웨어/로직은 이러한 목적으로 위해 확장될 수 있다. 또한, 커널은 하드웨어의 일부 컨텍스트를 메모리로 이동시킬 수 있는 시스템 루틴을 점프할 수 있다.
이러한 메커니즘은 인터럽트에 응답하여 EU의 상태를 저장하는데 사용될 수 있다. 일부 특징이 이미 존재할 수 있지만, 이들은 일반적으로 단지 일부 레지스터를 핸들링하는 것으로 제한되고 모든 쓰레드 상태를 저장할 수는 없다. 부가하여, 시스템 루틴의 프로세스는 완료 후 애플리케이션 루틴으로 리턴하도록 루틴에 요구한다. 일 실시예에서, 시스템은 시스템 루틴 후에 존재할 수 있다. 일부 실시예에 따라 선점을 핸들하는 상이한 경우를 도시하는 도 2에 그러한 변경이 도시되어 있다.
도 2에 다음과 같은 세 가지 경우가 도 2에 도시되어 있다:
경우 A: 기존 시스템 루틴 핸들러는 주어진 애플리케이션 루틴으로부터 시작한다. 론칭되는 새로운 쓰레드는 애플리케이션 루틴이다. 시스템 루틴은 완료를 위해 애플리케이션 루틴으로 리턴한다.
경우 B: 일 실시예는 시스템 루틴이 메모리에 기록 동작을 완료하고 애플리케이션 루틴으로의 리턴없이 작업부하를 종료하는 방법을 제공한다. 이것은 새로운 작업부하의 론칭을 가능하게 한다.
경우 C: 일 실시예는 시스템 루틴으로 쓰레드를 시작한 다음, 작업부하를 종료하는 것을 완료할 애플리케이션 루틴으로 이동하는 방법을 제공한다.
도 3은 일 실시예에 따른 그래픽 로직(140)의 컴포넌트의 블록도를 도시한다. 도 3에 도시된 바와 같이, 그래픽 로직(140)은 (예를 들면, 레거시 콘텍스트 저장 경로를 제공하는 것을 포함하는, 하나 이상의 소프트웨어 쓰레드를 스폰하는(spawn) 쓰레드 스포너(thread spawner)(302), (예를 들면, 시스템 루틴에 의해 개시된 저장 싸이클 데이터를 포함하는, 명령어를 실행하기 위한 하나 이상의 실행 유닛을 포함하는) EU 콤플렉스 로직, (예를 들면, DMA 기록 동작을 포함하는 공유 로컬 메모리 기능을 저장하고 핸들링하기 위한) SLM(306), 및 (여기서 논의되는 바와 같이, SLM(306)으로부터 SLM 데이터를 포함하는 그래픽 로직(140)의 동작에 관한 데이터를 저장하는) 메모리(308)를 포함한다. 메모리(308)는, 예를 들면, 캐시를 포함하는 도 1-8을 참조하여 여기서 논의되는 것과 같은 임의의 유형의 메모리일 수 있다. 또한, 멀티플렉서(310)는 메모리를 로직(302 및 306)뿐만 아니라 SLM(306)에 결합한다.
일 실시예에서, 그래픽 하드웨어/로직(140) 상태를 저장하는 시퀀스는 다음과 같다:
(a) 인터럽트 시에, 고정 기능(예를 들면, 쓰레드 스포너 로직(302))은 새로운 쓰레드가 (예를 들면, EU 콤플렉스(304) 내의 EU의) 파이프라인으로 스포닝되지 않게 한다;
(b) 고정 기능(예를 들면, 쓰레드 스포너 로직(302))은 쓰레드에게 실행을 중단하도록 요청한다;
(c) 쓰레드는 파이프라인에서의 임의의 미결의 계류중인 싸이클을 완료하고 중단을 완료한다;
(d) 시스템이 아이들이 될 때, 쓰레드는 시스템 루틴으로 진행한다;
(e) 시스템 루틴은 중간 레지스터, 플로우 제어 포인터, 스택, 구조적 제어 레지스터 등과 같은 (일 실시예에서 모든 작업이 소프트웨어에서 핸들링되는) 쓰레드의 하드웨어 상태를 메모리(308)로 이동시킨다(예를 들면, 그러한 이동의 위치는 일 실시예에서 미리정해져 있다);
(f) 모든 쓰레드가 데이터 이동을 완료한 경우, 시스템 루틴은 제어를 고정 기능(또한 SLM(306)과 같은 DMA 엔진에 액세스하는) 고정 기능으로 이동시킨다;
(g) 이 DMA는 이제 SLM(306) 데이터를 메모리(308)로 이동시킨다;
(h) 이 DMA 이동이 완료되면, 나머지 상태, 예를 들면, 파이프라인 상태, 워커 상태(walker state), 및 장벽을 핸들링하는 중간 상태 머신이 모두 콘텍스트에 저장된다;
(i) 하드웨어는 이제 새로운 컨텍스트를 플러싱(flush)하고 실행할 수 있다.
대조적으로, 이전 솔루션은 그러한 데이터 이동을 핸들링하는 미리 정해진 하드웨어 상태 머신의 사용을 포함하였다. 일부 실시예마다, 새로운 혼합 접근법은 소프트웨어 접근법이 사용됨에 따라 유연성을 향상시키고 위험을 감소시킨다.
도 4는 일 실시예에 따라 그래픽 로직(140)의 콘텍스트를 저장하고 복구하는데 사용되는 미리결정된 메모리 맵을 도시한다. 도시된 바와 같이, SLM마다 공간의 64KB까지 할당된다. 이 다음에 대응하는 EU 상에서 실행하는 각각의 쓰레드를 위한 전용 공간이 이어진다. 또한, 쓰레드 상태는 (GRF(General Purpose Register File) 레지스터, ARF(Architecture Register File) 레지스터, 및 선택적으로 일부 예비 공간으로 분할되는) 일 실시예에서의 8KB 사전-할당된 공간에 저장된다. 구현예 및 저장될 데이터의 양에 따라 다른 사전-할당된 공간이 사용될 수 있다.
도 5는 일부 실시예에 따라 소프트웨어 지원 콘텍스트를 갖는 미드-쓰레드 선점을 수행하기 위한 방법(500)의 흐름도를 도시한다. (예를 들면, 그래픽 로직(140)을 포함하는) 도 1-4 및 도 6-8을 참조하여 여기서 논의되는 하나 이상의 컴포넌트는 도 5를 참조하여 논의되는 하나 이상의 동작을 수행하는데 사용될 수 있다.
도 1-5를 참조하면, 선점 요청(예를 들면, 미드-쓰레드 또는 GPU 상에서 실행하는 하나 이상의 쓰레드의 실행 동안)이 (예를 들면, 인터럽트를 통해) 검출되면, 동작(504)에서, 시스템 내의 모든 쓰레드의 임의의 실행이, 예를 들면, 명령어 레벨 단위로 중단된다. 일 실시예에서, 선점 요청은 다른 쓰레드(들) 또는 동작(들)이 현재 실행 중인 쓰레드(들)의 실행을 선점하기 위한 것을 나타낸다. 현재 실행 중인 쓰레드(들) 및/또는 다른 선점 쓰레드 또는 동작이 GPGPU로서 실행될 수 있다.
동작(506)에서, 시스템의 나머지를 아이들 상태로 하기 위해 파이프라인에서의 모든 계류 중인 작업이 완료되었는지가 결정된다. 동작(508)에서, 메커니즘의 하드웨어/소프트웨어 조합을 사용하여 쓰레드 및 SLM 데이터를 포함하는 컨텍스트를 (도 3을 참조하여 논의된 바와 같은) 메모리로 이동/복사한다. 예를 들면, 컨텍스트 데이터는 하나 이상의 소프트웨어 명령어에 응답하여 메모리(308)에 복사될 수 있다. 동작(510)에서, (예를 들면, 선점 요청에 대응하거나 그의 생성에 기인한) 새로운 작업부하/쓰레드의 실행이 허용되고 또한 메커니즘은 (도 3을 참조하여 논의된 바와 같은) 이전에 중단된 저장된 작업부하를 계속하도록 제공된다.
전술한 저장 시퀀스와 유사한 시퀀스를 사용하여 이전에 저장된 컨텍스트를 복구할 수 있다. 더 상세하게, 도 5a는 일부 실시예에 따라 이전에 저장된 컨텍스트를 복구하기 위한 방법(550)의 흐름도를 도시한다. (예를 들면, 그래픽 로직(140)을 포함하는) 도 1-5 및 도 6-8을 참조하여 여기서 논의되는 하나 이상의 컴포넌트는 도 5a를 참조하여 논의되는 하나 이상의 동작을 수행하는데 사용될 수 있다. 일 실시예에서, 도 5a를 참조하여 논의되는 모든 데이터 흐름은 메모리로부터 하드웨어/로직(140)으로 된다.
도 1-5a를 참조하면, 동작(552)에서 컨텍스트 스위치가 개시된다. 동작(554)은 개시된 컨텍스트가 새로운 것인지를 결정한다. 컨텍스트가 새로운 것인지 또는 이전에 저장된 것인지에 따라, 방법(550)은 동작(556) 또는 (558-560)을 계속한다. 컨텍스트가 새로운 것이면, 동작(556)은 새로운 컨텍스트를 실행한다; 그렇지 않으면, 동작(558)은 대응하는 시스템 루틴을 호출하고 이전에 저장된 컨텍스트에 대한 데이터 복구 시퀀스를 시작한다. 동작(560)에서, 복구가 완료되면, 시스템 루틴은 다음 애플리케이션 루틴으로 이동한다. 예를 들면, 모든 상태 정보가 복구된 후, 시스템은 애플리케이션 커널 포인터로 점프하여 작업부하의 완료를위한 실행을 계속한다.
도 6은 일 실시예에 따른 컴퓨팅 시스템(600)의 블록도를 나타낸다. 컴퓨팅 시스템(600)은 상호접속 네트워크(또는 버스)(604)를 통해 통신하는 하나 이상의 중앙 처리 유닛(CPU)(602) 또는 프로세서를 포함할 수 있다. 프로세서(602)는 범용 프로세서, (컴퓨터 네트워크(603)를 통해 통신되는 데이터를 처리하는) 네트워크 프로세서, 또는 (축소 명령어 세트 컴퓨터(RISC) 프로세서 또는 콤플렉스 명령어 세트 컴퓨터(CISC)를 포함하는) 다른 타입의 프로세서를 포함할 수 있다.
더욱이, 프로세서(602)는 단일 또는 다중 코어 설계를 가질 수 있다. 다중 코어 설계를 갖는 프로세서(602)는 동일 집적 회로(IC) 다이 상에 상이한 타입의 프로세서 코어를 통합할 수 있다. 또한, 다중 코어 설계를 갖는 프로세서(602)는 대칭 또는 비대칭 멀티프로세서로서 구현될 수 있다. 일 실시예에서, 프로세서(602) 중 하나 이상은 도 1의 프로세서(102)와 동일 또는 유사할 수 있다. 또한, 시스템(600)의 하나 이상의 컴포넌트는 도 1-5와 관련하여 설명된 로직(140)을 포함할 수 있다. 또한, 도 1-5와 관련하여 설명된 동작은 시스템(600)의 하나 이상의 컴포넌트에 의해 수행될 수 있다.
칩셋(406)은 또한 상호접속 네트워크(604)와 통신할 수 있다. 칩셋(606)은 (도 6에 도시된 것과 같은) 시스템(600)의 다양한 컴포넌트 내에 위치할 수 있는 그래픽 메모리 제어 허브(GMCH)(608)를 포함할 수 있다. GMCH(608)는 (도 1의 메모리(114)와 동일 또는 유사할 수 있는) 메모리(612)와 통신하는 메모리 컨트롤러(610)를 포함할 수 있다. 메모리(612)는 CPU(602), 또는 컴퓨팅 시스템(600) 내에 포함된 임의의 다른 디바이스에 의해 실행될 수 있는 명령어의 시퀀스를 포함하는 데이터를 저장할 수 있다. 일 실시예에서, 메모리(412)는 하나 이상의 휘발성 저장(또는 메모리) 디바이스, 예를 들면 랜덤 액세스 메모리(RAM), 동적 RAM(DRAM), 동기식DRAM(SDRAM), 정적 RAM(SRAM) 또는 다른 타입의 저장 디바이스를 포함할 수 있다. 하드 디스크와 같은 비휘발성 메모리도 사용될 수 있다. 다수의 CPU 및/또는 다수의 시스템 메모리와 같은 추가 디바이스는 상호접속 네트워크(604)를 통해 통신할 수 있다.
GMCH(608)는 디스플레이 디바이스(616)와 통신하는 그래픽 인터페이스(614)도 포함할 수 있다. 일 실시예에서, 그래픽 인터페이스(614)는 가속 그래픽 포트(AGP) 또는 주변 컴포넌트 상호접속(PCI)(또는 PCI 익스프레스(PCIe) 인터페이스)을 통해 디스플레이 디바이스(616)와 통신할 수 있다. 일 실시예에서, (평면 디스플레이와 같은) 디스플레이(616)는 예를 들면 비디오 메모리 또는 시스템 메모리와 같은 저장 디바이스에 저장된 이미지의 디지털 표현을 디스플레이 디바이스(616)에 의해 해석 및 표시되는 디스플레이 신호로 변환하는 신호 컨버터를 통해 그래픽 인터페이스(614)와 통신할 수 있다. 디스플레이 디바이스에 의해 생성된 디스플레이 신호는 디스플레이(616)에 의해 해석된 후에 표시되기 전에 다양한 제어 디바이스를 통과할 수 있다.
허브 인터페이스(618)는 GMCH(608) 및 입출력 제어 허브(ICH)(620)가 통신하는 것을 가능하게 할 수 있다. ICH(620)는 컴퓨팅 시스템(600)과 통신하는 I/O 디바이스(들)에 대한 인터페이스를 제공할 수 있다. ICH(620)는 주변 컴포넌트 상호접속(PCI) 브리지, 유니버설 직렬 버스(USB) 컨트롤러 또는 다른 타입의 주변장치 브리지 또는 컨트롤러와 같은 주변장치 브리지(또는 컨트롤러)(624)를 통해 버스(622)와 통신할 수 있다. 브리지(624)는 CPU(602)와 주변 디바이스 사이의 데이터 경로를 제공할 수 있다. 다른 타입의 토폴로지가 사용될 수 있다. 또한, 다수의 버스가 예를 들면 다수의 브리지 또는 컨트롤러를 통해 ICH(620)와 통신할 수 있다. 더욱이, ICH(620)와 통신하는 다른 주변장치는 다양한 실시예에서 통합 드라이브 일렉트로닉스(IDE) 또는 소형 컴퓨터 시스템 인터페이스(SCSI) 하드 드라이브(들), USB 포트(들), 키보드, 마우스, 병렬 포트(들), 직렬 포트(들), 플로피 디스크 드라이브(들), 디지털 출력 지원(예를 들면, 디지털 비디오 인터페이스(DVI)) 또는 다른 디바이스를 포함할 수 있다.
버스(622)는 오디오 디바이스(626), 하나 이상의 디스크 드라이브(들)(628), 및 (컴퓨터 네트워크(603)와 통신하는) 네트워크 인터페이스 디바이스(630)와 통신할 수 있다. 다른 디바이스는 버스(622)를 통해 통신할 수 있다. 또한, (네트워크 인터페이스 디바이스(630)와 같은) 다양한 컴포넌트는 일부 실시예에서 GMCH(608)와 통신할 수 있다. 게다가, 프로세서(602) 및 GMCH(608)는 단일 칩을 형성하도록 결합될 수 있다. 더구나, 다른 실시예에서 그래픽 가속기가 GMCH(608) 내에 포함될 수 있다.
더구나, 컴퓨팅 시스템(600)은 휘발성 및/또는 비휘발성 메모리(또는 스토리지)를 포함할 수 있다. 예를 들면, 비휘발성 메모리는 판독 전용 메모리(ROM), 프로그래밍 가능 ROM(PROM), 소거 가능 PROM(EPROM), 전기적 EPROM(EEPROM), 디스크 드라이브(예를 들면, 628), 플로피 디스크, 컴팩트 디스크 ROM(CD-ROM), 디지털 다기능 디스크(DVD), 플래시 메모리, 광자기 디스크, 또는 (예를 들면, 명령어를 포함하는) 전자 데이터를 저장할 수 있는 다른 타입의 비휘발성 기계 판독 가능 매체 중 하나 이상을 포함할 수 있다.
도 7은 일 실시예에 따른, 점대점(PtP) 구성으로 배열된 컴퓨팅 시스템(700)을 나타낸다. 특히, 도 7은 프로세서, 메모리 및 입출력 디바이스가 다수의 점대점 인터페이스에 의해 상호접속되는 시스템을 나타낸다. 도 1-6과 관련하여 설명되는 동작은 시스템(700)의 하나 이상의 컴포넌트에 의해 수행될 수 있다.
도 7에 도시된 바와 같이, 시스템(700)은 여러 개의 프로세서를 포함할 수 있으며, 명료화를 위해 그들 중 2개의 프로세서(702, 704)만이 도시된다. 프로세서(702, 704)는 각각 메모리(710, 712)와의 통신을 가능하게 하기 위한 로컬 메모리 컨트롤러 허브(MCH)(706, 708)를 포함할 수 있다. 메모리(710 및/또는 712)는 도 6의 메모리(612)와 관련하여 설명된 것과 같은 다양한 데이터를 저장할 수 있다.
일 실시예에서, 프로세서(702, 704)은 도 6과 관련하여 설명된 프로세서(602) 중 하나일 수 있다. 프로세서(702, 704)은 각각 PtP 인터페이스 회로들(716, 718)을 이용하여 점대점(PtP) 인터페이스(714)를 통해 데이터를 교환할 수 있다. 또한, 프로세서(702, 704)는 각각 점대점 인터페이스 회로(726, 728, 730, 732)을 이용하여 개별 PtP 인터페이스(722, 724)를 통해 칩셋(720)과 데이터를 교환할 수 있다. 칩셋(720)은 또한 예를 들면 PtP 인터페이스 회로(737)를 이용하여 그래픽 인터페이스(736)를 통해 그래픽 회로(734)와 데이터를 교환할 수 있다.
적어도 하나의 실시예가 프로세서(702, 704) 내에 제공될 수 있다. 예를 들면, 시스템(700)의 하나 이상의 컴포넌트는 프로세서(702 및 704) 내에 위치된 것을 포함하는 도 1-6의 로직(140)을 포함할 수 있다. 그러나, 다른 실시예는 다른 회로, 로직 유닛, 또는 도 7의 시스템(700) 내의 디바이스 내에 존재할 수 있다. 더구나, 다른 실시예는 도 7에 도시된 여러 회로, 로직 유닛 또는 디바이스 전반에 분산될 수 있다.
칩셋(720)은 PtP 인터페이스 회로(741)를 이용하여 버스(740)와 통신할 수 있다. 버스(740)는 버스 브리지(742) 및 I/O 디바이스(743)과 같은 하나 이상의 디바이스와 통신할 수 있다. 버스(744)를 통해, 버스 브리지(742)는 키보드/마우스(745), 통신 디바이스(746)(예를 들면, 모뎀, 네트워크 인터페이스 디바이스, 또는 컴퓨터 네트워크(603)와 통신할 수 있는 다른 통신 디바이스), 오디오 I/O 디바이스(747) 및/또는 데이터 저장 디바이스(748)와 같은 다른 디바이스와 통신할 수 있다. 데이터 저장 디바이스(748)는 프로세서(702 및/또는 704)에 의해 실행될 수 있는 코드(749)를 저장할 수 있다.
더욱이, (예를 들면, 다양한 실시예에서 그래픽 로직에 의해 처리될 수 있는) 본 명세서에서 설명된 장면, 이미지 또는 프레임은 이미지 캡처 디바이스(예를 들면, (스마트폰, 태블릿, 랩탑, 독립 카메라 등과 같은 다른 디바이스 내에 내장될 수 있는) 디지털 카메라 또는 캡처된 이미지가 디지털 형태로 후속 변환되는 아날로그 디바이스)에 의해 캡처될 수 있다. 또한, 여기서 논의되는 장면, 이미지 또는 프레임은 예술 설계, 게임 설계, 또는 임의의 종류의 3D/2D(2차원/3차원) 산업 설계에 의해 생성될 수 있다. 예를 들면, 장면은 기하 구조 및 관련 텍스처 맵, 발광 효과 등의 세트를 지칭할 수 있다. 더욱이, 이미지 캡처 디바이스는 일 실시예에서 다수의 프레임을 캡처할 수 있다. 또한, 장면 내의 프레임 중 하나 이상은 일부 실시예에서 컴퓨터 상에서 설계/생성된다. 또한, 장면의 프레임 중 하나 이상은 (예를 들면 평면 디스플레이 디바이스 등을 포함하는, 도 6 및/또는 7와 관련하여 설명된 디스플레이와 같은) 디스플레이를 통해 제공될 수 있다.
일부 실시예에서, 본 명세서에서 설명되는 컴포넌트 중 하나 이상은 시스템 온 칩(SOC) 디바이스로서 구현될 수 있다. 도 8은 일 실시예에 따른 SOC 패키지의 블록도를 나타낸다. 도 8에 도시된 바와 같이, SOC(802)는 하나 이상의 중앙 처리 유닛(CPU) 코어(820), 하나 이상의 그래픽 프로세서 유닛(GPU) 코어(830), 입출력(I/O) 인터페이스(840) 및 메모리 컨트롤러(842)를 포함한다. SOC 패키지(802)의 다양한 컴포넌트는 다른 도면과 관련하여 본 명세서에서 설명된 바와 같은 상호접속 또는 버스에 결합될 수 있다. 또한, SOC 패키지(802)는 다른 도면과 관련하여 본 명세서에서 설명된 것과 같은 더 많거나 적은 컴포넌트를 포함할 수 있다. 또한, SOC 패키지(820)의 각각의 컴포넌트는 예를 들면 본 명세서에서 다른 도면과 관련하여 설명된 하나 이상의 다른 컴포넌트를 포함할 수 있다. 일 실시예에서, SOC 패키지(802)(및 그의 컴포넌트)는 예를 들면 단일 반도체 디바이스 내에 패키징되는 하나 이상의 집적 회로(IC) 다이 상에 제공된다.
도 8에 도시된 바와 같이, SOC 패키지(802)는 메모리 컨트롤러(842)를 통해 (본 명세서에서 다른 도면과 관련하여 설명되는 메모리와 유사하거나 동일할 수 있는) 메모리(860)에 결합된다. 일 실시예에서, 메모리(860)(또는 그의 일부)는 SOC 패키지(802) 상에 통합될 수 있다.
I/O 인터페이스(840)는 예를 들면 본 명세서에서 다른 도면들과 관련하여 설명된 바와 같은 상호접속 및/또는 버스를 통해 하나 이상의 I/O 디바이스(870)에 결합될 수 있다. I/O 디바이스(들)(870)는 키보드, 마우스, 터치패드, 디스플레이 디바이스, 이미지/비디오 캡처 디바이스(예를 들면, 카메라 또는 캠코더/비디오 레코더), 터치스크린, 스피커 등 중 하나 이상을 포함할 수 있다. 또한, SOC 패키지(802)는 일 실시예에서 로직(140)을 포함/통합할 수 있다. 대안으로서, 로직(140)은 SOC 패키지(802)의 외부에(즉, 개별 로직으로서) 제공될 수 있다.
다음의 예는 추가의 실시예에 관한 것이다. 예 1은 장치로서 로직을 포함하고, 상기 로직은 적어도 부분적으로 하드웨어 로직을 포함하고, GPU(Graphics Processing Unit) 상에서 실행되는 하나 이상의 쓰레드가 하나 이상의 쓰레드를 선점(pre-empt)하기 위한 요청에 응답하여 명령어 레벨 단위(granularity)로 중단되게 하며, 상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 명령어 레벨 단위의 하나 이상의 쓰레드의 완료에 응답하여 메모리로 복사된다. 예 2는 예 1의 장치를 포함하고, 상기 컨텍스트 데이터를 상기 메모리로 복사하기 전에 상기 컨텍스트 데이터를 저장하기 위한 SLM(Shared Local Memory)을 더 포함한다. 예 3은 예 2의 장치를 포함하고, 상기 로직은 상기 SLM으로부터의 컨텍스트 데이터를 메모리에 또한 복사한다. 예 4는 예 3의 장치를 포함하고, 상기 컨텍스트 데이터를 복사하기 위한 상기 로직은 DMA(Direct Memory Access) 로직을 포함한다. 예 5는 예 1의 장치를 포함하고, 상기 하나 이상의 쓰레드의 컨텍스트 데이터는 하나 이상의 소프트웨어 명령어에 응답하여 상기 메모리에 복사된다. 예 6은 예 1의 장치를 포함하고, 상기 로직은 상기 GPU 상에서 실행되는 모든 쓰레드가 상기 요청에 응답하여 상기 명령어 레벨 단위로 중단되게 한다. 예 7은 예 1의 장치를 포함하고, 상기 하나 이상의 쓰레드 또는 선점 요청에 대응하는 쓰레드는 GPU 상에서 GPGPU(General-Purpose Computation on Graphics Processing Unit)로서 실행된다. 예 8은 예 1의 장치를 포함하고, 상기 하나 이상의 쓰레드를 스폰(spawn)하기 위한 쓰레드 스포너 로직(thread spawner logic)을 더 포함한다. 예 9는 예 1의 장치를 포함하고, 프로세서는 상기 로직을 포함한다. 예 10은 예 1의 장치를 포함하고, 하나 이상의 프로세서 코어를 갖는 프로세서, 상기 로직, 또는 상기 메모리 중 하나 이상은 단일 집적 회로 다이 상에 있다.
예 11은 프로세서상에서 실행될 때 GPU(Graphics Processing Unit) 상에서 실행되는 하나 이상의 쓰레드가 하나 이상의 쓰레드를 선점하기 위한 요청에 응답하여 명령어 레벨 단위로 중단되게 하는 하나 이상의 동작을 수행하도록 상기 프로세서를 구성하는 하나 이상의 명령어를 포함하는 컴퓨터 판독가능 매체를 포함하고, 상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 명령어 레벨 단위의 하나 이상의 쓰레드의 완료에 응답하여 메모리로 복사된다. 예 12는 예 11의 컴퓨터 판독가능 매체를 포함하고, 또한, 상기 프로세서상에서 실행될 때 상기 하나 이상의 쓰레드의 컨텍스트 데이터가 하나 이상의 소프트웨어 명령어에 응답하여 상기 메모리에 복사되게 하는 하나 이상의 동작을 수행하도록 상기 프로세서를 구성하는 하나 이상의 명령어를 더 포함한다. 예 13은 예 11의 컴퓨터 판독가능 매체를 포함하고, 또한, 상기 프로세서상에서 실행될 때 상기 GPU 상에서 실행되는 모든 쓰레드가 상기 요청에 응답하여 상기 명령어 레벨 단위로 중단되게 하는 하나 이상의 동작을 수행하도록 상기 프로세서를 구성하는 하나 이상의 명령어를 더 포함한다. 예 14는 예 11의 컴퓨터 판독가능 명령어를 포함하고, 상기 하나 이상의 쓰레드 또는 선점 요청에 대응하는 쓰레드는 GPU 상에서 GPGPU(General-Purpose Computation on Graphics Processing Unit)로서 실행된다. 예 15는 예 11의 컴퓨터 판독가능 매체를 포함하고, 상기 프로세서상에서 실행될 때 상기 하나 이상의 쓰레드를 스폰(spawn)하게 하는 하나 이상의 동작을 수행하도록 상기 프로세서를 구성하는 하나 이상의 명령어를 더 포함한다.
예 16은 방법으로서 GPU(Graphics Processing Unit) 상에서 실행되는 하나 이상의 쓰레드가 하나 이상의 쓰레드를 선점하기 위한 요청에 응답하여 명령어 레벨 단위로 중단되게 하는 단계를 포함하고, 상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 명령어 레벨 단위의 하나 이상의 쓰레드의 완료에 응답하여 메모리로 복사된다. 예 17은 예 16의 방법을 포함하고, 상기 하나 이상의 쓰레드의 컨텍스트 데이터가 하나 이상의 소프트웨어 명령어에 응답하여 상기 메모리에 복사되게 하는 단계를 더 포함한다. 예 18은 예 16의 방법을 포함하고, 상기 GPU 상에서 실행되는 모든 쓰레드가 상기 요청에 응답하여 상기 명령어 레벨 단위로 중단되게 하는 단계를 더 포함한다. 예 19는 예 16의 방법을 포함하고, 상기 하나 이상의 쓰레드 또는 선점 요청에 대응하는 쓰레드를 GPU 상에서 GPGPU(General-Purpose Computation on Graphics Processing Unit)로서 실행하는 단계를 더 포함한다. 예 20은 예 16의 방법을 포함하고, 상기 하나 이상의 쓰레드를 스폰(spawn)하게 하는 단계를 더 포함한다.
예 21은 시스템으로서 하나 이상의 프로세서 코어를 구비한 프로세서; 상기 하나 이상의 프로세서 코어 중 적어도 하나에 의해 액세스될, 장면의 적어도 한 프레임에 대응하는 데이터를 저장하기 위한 메모리; 상기 장면의 적어도 하나의 프레임을 제시하기 위한 디스플레이 디바이스; 및 로직 - 상기 로직은 적어도 부분적으로 하드웨어 로직을 포함하고, GPU(Graphics Processing Unit) 상에서 실행되는 하나 이상의 쓰레드가 하나 이상의 쓰레드를 선점(pre-empt)하기 위한 요청에 응답하여 명령어 레벨 단위(granularity)로 중단되게 함 - 을 포함하고, 상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 명령어 레벨 단위의 하나 이상의 쓰레드의 완료에 응답하여 메모리로 복사된다. 예 22는 예 21의 시스템을 포함하고, 상기 컨텍스트 데이터를 상기 메모리로 복사하기 전에 상기 컨텍스트 데이터를 저장하기 위한 SLM(Shared Local Memory)을 더 포함한다. 예 23은 예 21의 시스템을 포함하고, 상기 하나 이상의 쓰레드의 컨텍스트 데이터는 하나 이상의 소프트웨어 명령어에 응답하여 상기 메모리에 복사된다. 예 24는 예 21의 시스템을 포함하고, 상기 로직은 상기 GPU 상에서 실행되는 모든 쓰레드가 상기 요청에 응답하여 상기 명령어 레벨 단위로 중단되게 한다. 예 25는 예 21의 시스템을 포함하고, 상기 하나 이상의 쓰레드 또는 선점 요청에 대응하는 쓰레드는 GPU 상에서 GPGPU(General-Purpose Computation on Graphics Processing Unit)로서 실행된다. 예 26은 예 21의 시스템을 포함하고, 상기 하나 이상의 쓰레드를 스폰(spawn)하기 위한 쓰레드 스포너 로직(thread spawner logic)을 더 포함한다. 예 27은 예 21의 시스템을 포함하고, 상기 프로세서는 상기 로직을 포함한다. 예 28은 예 21의 시스템을 포함하고, 상기 프로세서, 상기 로직, 또는 상기 메모리 중 하나 이상은 단일 집적 회로 다이 상에 있다.
예 29는 임의의 상기 예에 설명된 방법을 수행하기 위한 수단을 포함하는 ㅈ장치를 포함한다.
예 30은, 실행될 때, 임의의 상기 예에 설명된 방법을 구현하거나 장치를 실현하기 위한 머신 판독가능 명령어를 포함하는 머신 판독가능 스토리지를 포함한다.
다양한 실시예에서, 예를 들면 도 1-8과 관련하여 본 명세서에서 설명된 동작은 하드웨어(예를 들면, 로직 회로), 소프트웨어, 펌웨어, 또는 예를 들면 본 명세서에서 설명되는 프로세스를 수행하도록 컴퓨터를 프로그래밍하는 데 사용되는 명령어(또는 소프트웨어 절차)를 저장하는 유형적인(예를 들면, 비일시적인) 머신 판독 가능 또는 컴퓨터 판독 가능 매체를 포함하는 컴퓨터 프로그램 제품으로서 제공될 수 있는 그들의 조합으로서 구현될 수 있다. 머신 판독 가능 매체는 도 1-8과 관련하여 설명된 것과 같은 저장 디바이스를 포함할 수 있다.
게다가, 그러한 컴퓨터 판독 가능 매체는 컴퓨터 프로그램 제품으로서 다운로드될 수 있으며, 프로그램은 통신 링크(예를 들면, 버스, 모뎀 또는 네트워크 접속)를 통해 반송파 또는 다른 전파 매체 내에서 제공되는 데이터 신호를 통해 원격 컴퓨터(예를 들면, 서버)로부터 요청 컴퓨터(예를 들면, 클라이언트)로 전송될 수 있다.
본 명세서에서 "하나의 실시예" 또는 "일 실시예"라는 표현은 실시예와 관련하여 설명된 특정한 특징, 구조, 및/또는 특성이 적어도 하나의 구현에 포함될 수 있는 것을 의미한다. 본 명세서의 여러 곳에서 나오는 "일 실시예에서"라는 표현들이 모두가 동일한 실시예를 말하는 것이거나 그렇지 않을 수 있다.
또한, 명세서 및 청구범위에서는 용어 "결합" 및 "접속"이 이들의 파생어와 함께 사용될 수 있다. 일부 실시예에서, "접속"은 2개 이상의 요소가 서로 물리적으로 또는 전기적으로 직접 접촉한다는 것을 지시하는 데 사용될 수 있다. "결합"은 2개 이상의 요소가 직접적인 물리적 또는 전기적 접촉을 하고 있는 것을 의미할 수 있다. 그러나, "결합"은 또한 2개 이상의 요소가 서로 직접 접촉하고 있지 않을 수 있지만 여전히 서로 협력하거나 상호작용할 수 있는 것도 의미할 수 있다.
따라서, 실시예는 구조적 특징 및/또는 방법론적 동작에 대한 특정 언어로 설명되었지만, 청구 대상은 설명된 특정 특징들 또는 동작들에 제한되지는 않을 수 있다는 것이 이해되어야 한다. 오히려, 특정의 특징 및 동작은 청구된 발명 대상을 구현하는 샘플 형태로서 개시된다.

Claims (25)

  1. 장치로서,
    로직을 포함하되,
    상기 로직은 적어도 부분적으로 하드웨어 로직을 포함하고, 상기 로직은 프로세서 상에서 실행되는 하나 이상의 쓰레드가 상기 하나 이상의 쓰레드를 선점(pre-empt)하기 위한 요청에 응답하여 명령어 레벨 단위로(at instruction level granularity) 중단되게 하며,
    상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 명령어 레벨 단위의 상기 하나 이상의 쓰레드의 임의의 미결의 계류중인 싸이클의 완료에 응답하여 메모리로 복사되고, 상기 하나 이상의 쓰레드를 선점하기 위한 상기 요청에 응답하여 스폰되는(spawned) 새로운 쓰레드는 없으며, 상기 하나 이상의 쓰레드는 상기 명령어 레벨 단위의 상기 하나 이상의 쓰레드의 상기 미결의 계류중인 싸이클의 완료 이후에 중단되고, 상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 하나 이상의 쓰레드가 중단된 이후에 상기 메모리로 복사되며, 상기 컨텍스트 데이터는 쓰레드 스포너 로직(thread spawner logic), 실행 유닛 콤플렉스, 또는 공유 로컬 메모리(SLM)를 포함하는 3개의 소스 중 하나로부터 기원하는,
    장치.
  2. 제1항에 있어서,
    상기 SLM은 상기 컨텍스트 데이터를 상기 메모리로 복사하기 전에 상기 컨텍스트 데이터를 저장하기 위한 것인,
    장치.
  3. 제2항에 있어서,
    상기 컨텍스트 데이터를 상기 SLM으로부터 상기 메모리로 복사하는 로직을 더 포함하는,
    장치.
  4. 제3항에 있어서,
    상기 컨텍스트 데이터를 복사하기 위한 상기 로직은 DMA(Direct Memory Access) 로직을 포함하는,
    장치.
  5. 제1항에 있어서,
    상기 하나 이상의 쓰레드의 상기 컨텍스트 데이터는 하나 이상의 소프트웨어 명령어에 응답하여 상기 메모리에 복사되는,
    장치.
  6. 제1항에 있어서,
    상기 로직은 상기 요청에 응답하여 상기 프로세서 상에서 실행되는 모든 쓰레드가 상기 명령어 레벨 단위로 중단되게 하는,
    장치.
  7. 제1항에 있어서,
    상기 프로세서는 그래픽 처리 유닛(GPU)에 포함되고, 상기 하나 이상의 쓰레드 또는 선점 요청에 대응하는 쓰레드는 상기 GPU 상에서 GPGPU(General-Purpose Computation on Graphics Processing Unit)로서 실행되는,
    장치.
  8. 제1항에 있어서,
    상기 하나 이상의 쓰레드를 스폰(spawn)하기 위한 쓰레드 스포너 로직(thread spawner logic)을 더 포함하는
    장치.
  9. 제1항에 있어서,
    상기 로직은 상기 프로세서에 포함되는,
    장치.
  10. 제1항에 있어서,
    하나 이상의 프로세서 코어를 갖는 상기 프로세서, 상기 로직 및 상기 메모리 중 하나 이상은 단일 집적 회로 다이 상에 있는,
    장치.
  11. 하나 이상의 명령어가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서,
    상기 하나 이상의 명령어는 프로세서에서 실행되는 경우 상기 프로세서로 하여금, 상기 프로세서 상에서 실행되는 하나 이상의 쓰레드를 상기 하나 이상의 쓰레드를 선점하기 위한 요청에 응답하여 명령어 레벨 단위로 중단시키는 하나 이상의 동작을 수행하게 하도록 상기 프로세서를 구성하고,
    상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 명령어 레벨 단위의 상기 하나 이상의 쓰레드의 임의의 미결의 계류중인 싸이클의 완료에 응답하여 메모리로 복사되고, 상기 하나 이상의 쓰레드를 선점하기 위한 상기 요청에 응답하여 스폰되는(spawned) 새로운 쓰레드는 없으며, 상기 하나 이상의 쓰레드는 상기 명령어 레벨 단위의 상기 하나 이상의 쓰레드의 상기 미결의 계류중인 싸이클의 완료 이후에 중단되고, 상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 하나 이상의 쓰레드가 중단된 이후에 상기 메모리로 복사되며, 상기 컨텍스트 데이터는 쓰레드 스포너 로직(thread spawner logic), 실행 유닛 콤플렉스, 또는 공유 로컬 메모리(SLM)를 포함하는 3개의 소스 중 하나로부터 기원하는,
    컴퓨터 판독가능 저장 매체.
  12. 제11항에 있어서,
    상기 프로세서에서 실행되는 경우 상기 프로세서로 하여금
    하나 이상의 소프트웨어 명령어에 응답하여 상기 하나 이상의 쓰레드의 상기 컨텍스트 데이터를 상기 메모리에 복사하는 하나 이상의 동작을 수행하게 하도록 상기 프로세서를 구성하는 하나 이상의 명령어를 더 포함하는,
    컴퓨터 판독가능 저장 매체.
  13. 제11항에 있어서,
    상기 프로세서에서 실행되는 경우 상기 프로세서로 하여금
    상기 요청에 응답하여 상기 프로세서 상에서 실행되는 모든 쓰레드를 상기 명령어 레벨 단위로 중단시키는 하나 이상의 동작을 수행하게 하도록 상기 프로세서를 구성하는 하나 이상의 명령어를 더 포함하는,
    컴퓨터 판독가능 저장 매체.
  14. 제11항에 있어서,
    상기 프로세서는 그래픽 처리 유닛(GPU)에 포함되고, 상기 하나 이상의 쓰레드 또는 선점 요청에 대응하는 쓰레드는 상기 GPU 상에서 GPGPU(General-Purpose Computation on Graphics Processing Unit)로서 실행되는,
    컴퓨터 판독가능 저장 매체.
  15. 제11항에 있어서,
    상기 프로세서에서 실행되는 경우 상기 프로세서로 하여금
    상기 하나 이상의 쓰레드를 스폰(spawn)시키는 하나 이상의 동작을 수행하게 하도록 상기 프로세서를 구성하는 하나 이상의 명령어를 더 포함하는
    컴퓨터 판독가능 저장 매체.
  16. 컴퓨터에 의해 수행되는 방법으로서,
    프로세서 상에서 실행되는 하나 이상의 쓰레드가 상기 하나 이상의 쓰레드를 선점하기 위한 요청에 응답하여 명령어 레벨 단위로 중단되게 하는 단계를 포함하고,
    상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 명령어 레벨 단위의 상기 하나 이상의 쓰레드의 임의의 미결의 계류중인 싸이클의 완료에 응답하여 메모리로 복사되고, 상기 하나 이상의 쓰레드를 선점하기 위한 상기 요청에 응답하여 스폰되는(spawned) 새로운 쓰레드는 없으며, 상기 하나 이상의 쓰레드는 상기 명령어 레벨 단위의 상기 하나 이상의 쓰레드의 상기 미결의 계류중인 싸이클의 완료 이후에 중단되고, 상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 하나 이상의 쓰레드가 중단된 이후에 상기 메모리로 복사되며, 상기 컨텍스트 데이터는 쓰레드 스포너 로직(thread spawner logic), 실행 유닛 콤플렉스, 또는 공유 로컬 메모리(SLM)를 포함하는 3개의 소스 중 하나로부터 기원하는,
    컴퓨터에 의해 수행되는 방법.
  17. 제16항에 있어서,
    하나 이상의 소프트웨어 명령어에 응답하여 상기 하나 이상의 쓰레드의 상기 컨텍스트 데이터가 상기 메모리에 복사되게 하는 단계를 더 포함하는,
    컴퓨터에 의해 수행되는 방법.
  18. 제16항에 있어서,
    상기 요청에 응답하여 상기 프로세서 상에서 실행되는 모든 쓰레드가 상기 명령어 레벨 단위로 중단되게 하는 단계를 더 포함하는,
    컴퓨터에 의해 수행되는 방법.
  19. 제16항에 있어서,
    상기 프로세서는 그래픽 처리 유닛(GPU)에 포함되고, 상기 하나 이상의 쓰레드 또는 상기 선점하기 위한 요청에 대응하는 쓰레드가 상기 GPU 상에서 GPGPU(General-Purpose Computation on Graphics Processing Unit)로서 실행되게 하는 단계를 더 포함하는,
    컴퓨터에 의해 수행되는 방법.
  20. 제16항에 있어서,
    상기 하나 이상의 쓰레드가 스폰(spawn)되게 하는 단계를 더 포함하는,
    컴퓨터에 의해 수행되는 방법.
  21. 시스템으로서,
    하나 이상의 프로세서 코어를 구비한 프로세서와,
    상기 하나 이상의 프로세서 코어 중 적어도 하나에 의해 액세스될, 장면의 적어도 한 프레임에 대응하는 데이터를 저장하기 위한 메모리와,
    상기 장면의 상기 적어도 하나의 프레임을 제시하기 위한 디스플레이 디바이스와,
    로직 - 상기 로직은 적어도 부분적으로 하드웨어 로직을 포함하고, 프로세서 상에서 실행되는 하나 이상의 쓰레드가 상기 하나 이상의 쓰레드를 선점(pre-empt)하기 위한 요청에 응답하여 명령어 레벨 단위(granularity)로 중단되게 함 - 을 포함하고,
    상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 명령어 레벨 단위의 상기 하나 이상의 쓰레드의 임의의 미결의 계류중인 싸이클의 완료에 응답하여 메모리로 복사되고, 상기 하나 이상의 쓰레드를 선점하기 위한 상기 요청에 응답하여 스폰되는(spawned) 새로운 쓰레드는 없으며, 상기 하나 이상의 쓰레드는 상기 명령어 레벨 단위의 상기 하나 이상의 쓰레드의 상기 미결의 계류중인 싸이클의 완료 이후에 중단되고, 상기 하나 이상의 쓰레드의 컨텍스트 데이터는 상기 하나 이상의 쓰레드가 중단된 이후에 상기 메모리로 복사되며, 상기 컨텍스트 데이터는 쓰레드 스포너 로직(thread spawner logic), 실행 유닛 콤플렉스, 또는 공유 로컬 메모리(SLM)를 포함하는 3개의 소스 중 하나로부터 기원하는,
    시스템.
  22. 제21항에 있어서,
    상기 SLM은 상기 컨텍스트 데이터를 상기 메모리로 복사하기 전에 상기 컨텍스트 데이터를 저장하기 위한 것인,
    시스템.
  23. 제21항에 있어서,
    상기 하나 이상의 쓰레드의 상기 컨텍스트 데이터는 하나 이상의 소프트웨어 명령어에 응답하여 상기 메모리에 복사되는,
    시스템.
  24. 제21항에 있어서,
    상기 로직은 상기 요청에 응답하여 상기 프로세서 상에서 실행되는 모든 쓰레드가 상기 명령어 레벨 단위로 중단되게 하는,
    시스템.
  25. 제21항에 있어서,
    상기 프로세서는 그래픽 처리 유닛(GPU)에 포함되고, 상기 하나 이상의 쓰레드 또는 상기 선점하기 위한 요청에 대응하는 쓰레드는 상기 GPU 상에서 GPGPU(General-Purpose Computation on Graphics Processing Unit)로서 실행되는,
    시스템.
KR1020167036114A 2014-07-23 2015-06-19 소프트웨어 지원 콘텍스트 스위치를 갖는 미드-쓰레드 선점 KR102219545B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/338,729 2014-07-23
US14/338,729 US9996386B2 (en) 2014-07-23 2014-07-23 Mid-thread pre-emption with software assisted context switch
PCT/US2015/036538 WO2016014182A1 (en) 2014-07-23 2015-06-19 Mid-thread pre-emption with software assisted context switch

Publications (2)

Publication Number Publication Date
KR20170010833A KR20170010833A (ko) 2017-02-01
KR102219545B1 true KR102219545B1 (ko) 2021-02-23

Family

ID=55163509

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167036114A KR102219545B1 (ko) 2014-07-23 2015-06-19 소프트웨어 지원 콘텍스트 스위치를 갖는 미드-쓰레드 선점

Country Status (7)

Country Link
US (1) US9996386B2 (ko)
EP (1) EP3172660A4 (ko)
JP (1) JP6387571B2 (ko)
KR (1) KR102219545B1 (ko)
CN (1) CN106662995B (ko)
SG (1) SG11201610647PA (ko)
WO (1) WO2016014182A1 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9996386B2 (en) 2014-07-23 2018-06-12 Intel Corporation Mid-thread pre-emption with software assisted context switch
US10453427B2 (en) 2017-04-01 2019-10-22 Intel Corporation Register spill/fill using shared local memory space
US10459751B2 (en) * 2017-06-30 2019-10-29 ATI Technologies ULC. Varying firmware for virtualized device
US10565126B2 (en) 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
US10353826B2 (en) * 2017-07-14 2019-07-16 Arm Limited Method and apparatus for fast context cloning in a data processing system
US10592424B2 (en) 2017-07-14 2020-03-17 Arm Limited Range-based memory system
US10467159B2 (en) 2017-07-14 2019-11-05 Arm Limited Memory node controller
US10489304B2 (en) 2017-07-14 2019-11-26 Arm Limited Memory address translation
US10613989B2 (en) 2017-07-14 2020-04-07 Arm Limited Fast address translation for virtual machines
US10534719B2 (en) 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10884850B2 (en) 2018-07-24 2021-01-05 Arm Limited Fault tolerant memory system
US11556374B2 (en) 2019-02-15 2023-01-17 International Business Machines Corporation Compiler-optimized context switching with compiler-inserted data table for in-use register identification at a preferred preemption point
US10909652B2 (en) * 2019-03-15 2021-02-02 Intel Corporation Enabling product SKUs based on chiplet configurations
US11204767B2 (en) 2020-01-06 2021-12-21 International Business Machines Corporation Context switching locations for compiler-assisted context switching
US11874742B2 (en) * 2021-04-22 2024-01-16 Nvidia Corporation Techniques for recovering from errors when executing software applications on parallel processors
US20220413899A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Barrier state save and restore for preemption in a graphics environment

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090049451A1 (en) 2007-08-15 2009-02-19 Sony Computer Entertainment Inc. Multi-threaded processing with reduced context switching
US20090327662A1 (en) * 2008-06-30 2009-12-31 Hong Jiang Managing active thread dependencies in graphics processing
US20130124838A1 (en) * 2011-11-10 2013-05-16 Lacky V. Shah Instruction level execution preemption
US20130238938A1 (en) * 2012-03-09 2013-09-12 Avinash Bantval BALIGA Methods and apparatus for interactive debugging on a non-pre-emptible graphics processing unit
US20140109102A1 (en) 2012-10-12 2014-04-17 Nvidia Corporation Technique for improving performance in multi-threaded processing units

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2523101B1 (en) * 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US20130162661A1 (en) 2011-12-21 2013-06-27 Nvidia Corporation System and method for long running compute using buffers as timeslices
US8963933B2 (en) 2012-07-23 2015-02-24 Advanced Micro Devices, Inc. Method for urgency-based preemption of a process
US9710874B2 (en) 2012-12-27 2017-07-18 Nvidia Corporation Mid-primitive graphics execution preemption
US9384036B1 (en) * 2013-10-21 2016-07-05 Google Inc. Low latency thread context caching
US9477480B2 (en) * 2014-01-30 2016-10-25 Nvidia Corporation System and processor for implementing interruptible batches of instructions
US9996386B2 (en) 2014-07-23 2018-06-12 Intel Corporation Mid-thread pre-emption with software assisted context switch
CN105801338B (zh) 2015-03-06 2018-08-14 胡淑婷 一种应用乙酰丙酮钯合成医药中间体菲类化合物的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090049451A1 (en) 2007-08-15 2009-02-19 Sony Computer Entertainment Inc. Multi-threaded processing with reduced context switching
US20090327662A1 (en) * 2008-06-30 2009-12-31 Hong Jiang Managing active thread dependencies in graphics processing
US20130124838A1 (en) * 2011-11-10 2013-05-16 Lacky V. Shah Instruction level execution preemption
US20130238938A1 (en) * 2012-03-09 2013-09-12 Avinash Bantval BALIGA Methods and apparatus for interactive debugging on a non-pre-emptible graphics processing unit
US20140109102A1 (en) 2012-10-12 2014-04-17 Nvidia Corporation Technique for improving performance in multi-threaded processing units

Also Published As

Publication number Publication date
WO2016014182A1 (en) 2016-01-28
SG11201610647PA (en) 2017-01-27
JP2017518575A (ja) 2017-07-06
KR20170010833A (ko) 2017-02-01
JP6387571B2 (ja) 2018-09-12
EP3172660A4 (en) 2018-03-21
US9996386B2 (en) 2018-06-12
CN106662995B (zh) 2019-12-03
EP3172660A1 (en) 2017-05-31
CN106662995A (zh) 2017-05-10
US20160026494A1 (en) 2016-01-28

Similar Documents

Publication Publication Date Title
KR102219545B1 (ko) 소프트웨어 지원 콘텍스트 스위치를 갖는 미드-쓰레드 선점
US10552202B2 (en) Software-assisted instruction level execution preemption
JP6390021B2 (ja) グラフィック処理ユニットのためのワークロードバッチサブミットメカニズム
US10242420B2 (en) Preemptive context switching of processes on an accelerated processing device (APD) based on time quanta
US11243795B2 (en) CPU overcommit with guest idle polling
US9715403B2 (en) Optimized extended context management for virtual machines
US11036666B2 (en) Asynchronous mapping of hot-plugged device associated with virtual machine
US10289418B2 (en) Cooperative thread array granularity context switch during trap handling
US9639388B2 (en) Deferred assignment of devices in virtual machine migration
TWI754310B (zh) 純函數語言神經網路加速器系統及電路
US20120151145A1 (en) Data Driven Micro-Scheduling of the Individual Processing Elements of a Wide Vector SIMD Processing Unit
US20130135327A1 (en) Saving and Restoring Non-Shader State Using a Command Processor
US10810032B2 (en) System and method for dynamic guest-controlled halt polling using a CPU governor
US20130160019A1 (en) Method for Resuming an APD Wavefront in Which a Subset of Elements Have Faulted
JP2021096829A (ja) 分散環境における深層学習トレーニングの最適化のためのランタイムにおけるサービスクラス属性の初期化及び管理
US10671425B2 (en) Lazy timer programming for virtual machines
US11281482B2 (en) I/O emulation with abortion in virtualized environments including transfer of portions of non-real time I/O emulation to work threads prior to switching contexts
US20120194528A1 (en) Method and System for Context Switching
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