KR102466984B1 - 중앙 프로세싱 유닛(cpu)과 보조 프로세서 사이의 개선된 함수 콜백 메커니즘 - Google Patents

중앙 프로세싱 유닛(cpu)과 보조 프로세서 사이의 개선된 함수 콜백 메커니즘 Download PDF

Info

Publication number
KR102466984B1
KR102466984B1 KR1020177013171A KR20177013171A KR102466984B1 KR 102466984 B1 KR102466984 B1 KR 102466984B1 KR 1020177013171 A KR1020177013171 A KR 1020177013171A KR 20177013171 A KR20177013171 A KR 20177013171A KR 102466984 B1 KR102466984 B1 KR 102466984B1
Authority
KR
South Korea
Prior art keywords
processor
dequeue
function
callback
svm
Prior art date
Application number
KR1020177013171A
Other languages
English (en)
Other versions
KR20170096103A (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 KR20170096103A publication Critical patent/KR20170096103A/ko
Application granted granted Critical
Publication of KR102466984B1 publication Critical patent/KR102466984B1/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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • 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
    • 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/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

일반적으로, 이 개시 내용은 제1 프로세서(예컨대, GPU)와 제2 프로세서(예컨대, CPU) 사이의 함수 콜백 요청들을 구현하기 위한 시스템들, 디바이스들, 방법들, 및 컴퓨터 판독가능 매체들을 제공한다. 시스템은 제1 및 제2 프로세서들에 결합된 공유된 가상 메모리(SVM)를 포함할 수도 있고, SVM은 적어도 하나의 이중-엔드형 큐(디큐)를 저장하도록 구성된다. 제1 프로세서의 실행 유닛(EU)은 디큐들 중의 제1 디큐와 연관될 수도 있고, 콜백 요청들을 그 제1 디큐로 푸싱하도록 구성될 수도 있다. 제2 프로세서 상에서 실행되는 요청 핸들러 스레드는, 제1 디큐로부터 콜백 요청들 중의 하나를 팝핑하고; 팝핑된 콜백 요청에 의해 특정된 함수를 실행하고; 함수의 완료에 응답하여 EU로의 완료 신호를 생성하도록 구성될 수도 있다.

Description

중앙 프로세싱 유닛(CPU)과 보조 프로세서 사이의 개선된 함수 콜백 메커니즘{IMPROVED FUNCTION CALLBACK MECHANISM BETWEEN A CENTRAL PROCESSING UNIT (CPU) AND AN AUXILIARY PROCESSOR}
본 개시 내용은 보조 프로세서, 예를 들어, 그래픽 프로세싱 유닛(Graphics Processing Unit)(GPU)으로부터 중앙 프로세싱 유닛(Central Processing Unit)(CPU)으로의 함수 콜백(function callback) 요청들에 관한 것으로, 더욱 상세하게는, 이러한 콜백 요청들에 대한 효율 개선들에 관한 것이다.
이종 프로세싱 시스템들, 예를 들어, 칩 상에서 CPU 및 GPU(또는 보조 프로세서 또는 가속기)를 조합하는 프로세서들은 점점 더 보편적인 것으로 되고 있다. 그래픽 프로세싱을 수행하는 것에 추가하여, GPU는 CPU로부터, 상대적으로 병렬 집약적인 연산 태스크들을 오프로딩하기 위하여 이용될 수도 있다. GPU 아키텍처들은 전형적으로 병렬 연산들을 지향하므로, GPU는 CPU에 비해, 이 타입들의 태스크들에 대하여 더 높은 성능 및 더 낮은 에너지 소비를 제공할 수 있을 수도 있다. CPU로부터 GPU로의 함수 호출(call)들에 대한 지원은 하드웨어 및 소프트웨어의 양자에 있어서, 더욱 이용가능하게 되고 있다.
이 이종 프로세서들 및 프로그래밍 프레임워크들은 CPU가 작업을 GPU로 오프로딩하는 것을 허용할 수도 있지만, 전형적으로는, GPU가 작업을 CPU 상으로 다시 오프로딩하기 위한 대응하는 메커니즘이 없다. 이러한 능력은 예를 들어, (1) GPU 상에서 실행되지 않을 수도 있는 오퍼레이팅 시스템 함수를 인보크(invoke)하는 것, (2) GPU로 아직 포트(port)되지 않은 코드를 호출하는 것, 및 (3) 상대적으로 순차적이거나, 병렬 실행을 위하여 덜 적당한 불규칙적인 제어 경로를 뒤따르는 코드를 실행하는 것을 포함하는 많은 상황들에서 유용할 수도 있다.
청구된 발명 요지의 실시예들의 특징들 및 장점들은 다음의 상세한 설명이 진행됨에 따라, 그리고 유사한 번호들이 유사한 부분들을 도시하는 도면들을 참조할 시에 분명해질 것이며:
도 1은 본 개시 내용과 부합하는 예시적인 실시예의 상위 레벨 시스템 도면을 예시하고;
도 2는 본 개시 내용과 부합하는 일 예시적인 실시예의 블록도를 예시하고;
도 3은 본 개시 내용과 부합하는 일 예시적인 실시예의 동작들의 플로우차트를 예시하고;
도 4는 본 개시 내용과 부합하는 또 다른 예시적인 실시예의 동작들의 플로우차트를 예시하고;
도 5는 본 개시 내용과 부합하는 또 다른 예시적인 실시예의 동작들의 플로우차트를 예시하고;
도 6은 본 개시 내용과 부합하는 또 다른 예시적인 실시예의 동작들의 플로우차트를 예시하고;
도 7은 본 개시 내용과 부합하는 또 다른 예시적인 실시예의 플랫폼의 시스템 도면을 예시한다.
다음의 상세한 설명은 예시적인 실시예들에 대해 참조를 행하면서 진행될 것이지만, 그 많은 대안들, 수정들, 및 변형들은 본 기술분야의 통상의 기술자들에게 명백할 것이다.
일반적으로, 이 개시 내용은 보조 프로세서(예컨대, GPU 또는 다른 타입의 가속기)와 중앙 프로세싱 유닛(CPU) 사이의 함수 호출들 및 콜백들을 위한 시스템들, 디바이스들, 방법들, 및 컴퓨터 판독가능 매체들에, 감소된 레이턴시(latency)를 포함하는 개선된 효율을 제공한다. 이종 프로세서는 공유된 가상 메모리(shared virtual memory)(SVM)를 액세스하도록 구성되는 하나 이상의 GPU들 및 CPU들을 포함할 수도 있다. CPU들은 작업을 GPU들 상으로 오프로딩하기 위한 GPU들로의 함수 호출 요청들을 생성할 수도 있다. GPU들은 궁극적으로, 그 작업부하(workload)의 선택된 부분들을 실행하기 위한 CPU들로의 함수 콜백 요청들을 생성할 수도 있다. 콜백 요청들은 이하에서 더욱 상세하게 설명되는 바와 같이, SVM에서 저장된 이중-엔드형 큐(double-ended queue)들을 통해 통신될 수도 있다. 콜백 요청들은 CPU 상에서 실행되어야 할 콜백 함수에 대한 포인터(예컨대, 메모리 어드레스); 콜백 함수에 제공되어야 하고 및/또는 콜백 함수에 의해 반환되어야 할 데이터에 대한 포인터; 및 시그널링 플래그(signaling flag)들 및 연속 커널(continuation kernel)들을 포함하는 하나 이상의 콜백 완료 메커니즘들에 관련된 추가적인 정보를 포함할 수도 있다.
도 1은 본 개시 내용과 부합하는 일 예시적인 실시예의 상위 레벨 시스템 도면(100)을 예시한다. 하나 이상의 GPU들(또는 GPU 코어들)(102)은 하나 이상의 CPU들(104)과 가상 메모리(SVM)(106)를 공유하도록 구성된다. GPU들(102) 및 CPU들(104)은, 작업이 프로세서들 사이에서 공유될 수도 있는 이종 프로세서 또는 시스템 온 칩(system on a chip)(SoC)의 일부일 수도 있다. 예를 들어, 더욱 범용 프로세서인 CPU는 상대적으로 순차적인(또는 불규칙적인) 흐름으로 실행되는 태스크들을 핸들링하기 위하여 더욱 적합할 수도 있는 반면, 더욱 병렬 아키텍처로 설계되는 GPU는 병렬 연산 태스크들을 핸들링하기 위하여 더욱 적합할 수도 있다. CPU들(104)은 GPU 아키텍처에 적합한 작업을 GPU들 상으로 오프로딩하기 위한 GPU들(102)로의 함수 호출 요청들을 생성하도록 구성될 수도 있다. GPU들(102)은 CPU 아키텍처에 더욱 양호하게 적합한 그 작업부하의 선택된 부분들을 실행하기 위한 CPU들(104)로의 함수 콜백 요청들을 생성하도록 구성될 수도 있다. 콜백 요청들의 완료 시에, CPU(104)는 요청을 개시하였던 GPU(102)로의 완료 신호를 생성할 수도 있다.
SVM(106)은 CPU들(104) 및 GPU들(102)이 데이터 구조들을 포함하는 포인터들을 투명하게 공유하는 것과, GPU가 CPU에 의해 행해진 업데이트들을 볼 수 있고 그 반대도 성립할 수 있도록 메모리 일관성을 제공하는 것을 가능하게 하도록 구성될 수도 있다. SVM(106)은 공유된 메모리에 대한 액세스를 조정하고 CPU들(104)과 GPU들(102) 사이의 충돌들을 방지하기 위하여 원자적 동작(atomic operation)들 및 펜스 동작(fence operation)들을 제공하도록 또한 구성될 수도 있다.
콜백 요청들 및 완료 신호들은 SVM(106)에서 저장된 이중-엔드형 큐들(디큐(Deque)들)(108)을 통해 통신될 수도 있다. 큐(queue)는 다수의 데이터 엘리먼트(element)들을 유지하도록 구성된 데이터 구조의 타입이다. 이중-엔드형 큐(또는 디큐)는 데이터 엘리먼트들이 큐의 헤드(head) 또는 테일(tail) 엔드(end)들의 어느 하나에 추가될 수도 있거나 그로부터 제거될 수도 있도록 구성되는 큐이다. 디큐의 헤드 엔드는 "전방" 또는 "상부" 엔드로서 또한 지칭될 수도 있는 반면, 테일 엔드는 "후방" 또는 "하부" 엔드로서 지칭될 수도 있다. 헤드 및 테일 호칭들은 디큐의 동작의 설명에서 편리한 기준 포인트들로서 단지 이용되고, 고정된 물리적 로케이션들을 지칭하지는 않는다. 다시 말해서, 용어들 헤드 및 테일은 개시 내용의 임의의 실시예들의 의미 또는 동작을 변경하지 않으면서, 다음의 설명의 전반에 걸쳐 교환될 수도 있다. 일부 실시예들에서, 디큐는 요구될 경우에 더욱 효율적인 크기 조절들을 허용하기 위하여 원형 또는 링 버퍼로서 구현될 수도 있다.
데이터를 디큐에 추가(또는 기입)하는 동작은 데이터를 디큐의 일 엔드 상으로 "푸싱(pushing)"하는 것으로서 지칭될 수도 있다. 디큐로부터 데이터를 제거(또는 판독)하는 동작은 디큐의 다른 엔드로부터 데이터를 "팝핑(popping)"하는 것으로서 지칭될 수도 있다. 이하에서 더욱 상세하게 설명되는 바와 같이, GPU들(102)은 콜백 요청들을 디큐들(108) 상으로 푸싱할 수도 있고, CPU들은 실행을 위하여 그것들을 팝핑할 수도 있다.
도 2는 본 개시 내용과 부합하는 일 예시적인 실시예의 블록도(200)를 예시하고, 여기서, 도 1의 시스템은 더욱 상세하게 도시되어 있다. GPU(102)는 예를 들어, 태스크들을 병렬로 수행하도록 구성될 수도 있는 임의의 수의 코어들 또는 실행 유닛(execution unit)(EU)들(102a, 102b)을 포함하도록 도시되어 있다. 이 태스크들은 작업을 CPU로부터 GPU들로 오프로딩하도록 의도되는 CPU(104)로부터의 함수 호출들과 연관될 수도 있다. GPU 코어들 또는 EU들(102) 상에서 실행되는 태스크들은 궁극적으로, CPU(104)로의 함수 콜백들을 요청할 수도 있다.
CPU(104)는 CPU 프로세서 상에서 실행되는 임의의 수의 콜백 요청 핸들러 스레드(callback request handler thread)들(또한, 콜백 작업자 스레드(callback worker thread)들로서 지칭됨)(202a, 202b)을 포함하도록 도시되어 있다. 공유된 가상 메모리(SVM)(106)는 임의의 수의 디큐들(108a, 108b)을 저장하도록 구성될 수도 있지만, 전형적으로, 경합을 회피하고 레이턴시를 감소시키기 위하여 각각의 GPU 코어에 대한 하나의 디큐 및 각각의 디큐에 대한 하나의 요청 핸들러 스레드가 있을 것이다. 일부 실시예들에서, SVM(106)은 완료 플래그들(206a, 206b)을 저장하도록 또한 구성될 수도 있다. 특정한 코어(예컨대, 102a) 상에서 실행되는 GPU 태스크들은 콜백 요청을 그 코어(108a)와 연관된 디큐 상으로 푸싱함으로써, CPU(104)로의 함수 콜백을 요청할 수도 있다. 콜백 요청들은 CPU 상에서 실행되어야 할 콜백 함수에 대한 포인터와, 함수를 위한 인수(argument)들에 대한 포인터를 포함할 수도 있다. 인수 포인터는 전형적으로, CPU가 반환 결과들을 기입할 수도 있는 하나 이상의 메모리 로케이션들을 포함하는, 다수의 데이터 항목들 및 파라미터들을 포함하는 데이터 구조에 대한 포인터일 수도 있다.
CPU 상에서의 요청 핸들러 스레드(202a)는 디큐로부터 콜백 요청을 순차적으로 팝핑할 수도 있고, 그 콜백 요청과 연관된 함수를 실행할 수도 있다. 그 콜백 요청 함수의 완료 시에, 요청 핸들러 스레드는 완료 신호를 생성할 수도 있다. 일부 실시예들에서, 완료 신호는 SVM(106)에서 완료 플래그(206a)(불리언 변수(Boolean variable))를 설정하기 위하여 원자적 동작을 수행함으로써 달성될 수도 있다. 완료 플래그(206)는 콜백 요청에서의 포인터에 의해 특정될 수도 있다. GPU 태스크는 콜백 요청이 언제 완료되었는지를 결정하기 위하여, 예를 들어, 다른 태스크들을 수행하면서, (원자적 동작을 이용하여) 완료 플래그(206a)를 주기적으로 모니터링할 수도 있다. 이에 따라, GPU는 CPU에 의한 콜백의 실행 동안에 정지되지 않는다.
일부 실시예들에서, 요청 핸들러 스레드들(202)은 그것들이 아이들(idle)로 될 때, 예를 들어, 그 자신의 디큐가 비어질 때에 서로로부터 작업을 스틸(steal)할 수도 있다(204). 이것은 하나 이상의 콜백 요청들을 그것으로부터 팝핑하기 위한 대안적인 디큐를 무작위적으로 선택함으로써 달성될 수도 있다. 이러한 방식으로 작업 스틸하는 것은 다수의 요청 핸들러 스레드들 사이에서 작업을 더욱 효율적으로 확산시킬 수도 있다.
일부 실시예들에서는, CPU들 또는 GPU들의 어느 하나에 의한 페이지 오류들을 회피하기 위하여 SVM(106)에서의 디큐들(108)을 피닝(pinning) 또는 록 다운(lock down) 함으로써, 효율이 추가로 증가될 수도 있다. 디큐들이 크기에 있어서 늘어날 경우, 추가적인 저장장치가 또한 피닝된다. 게다가, 작업 큐잉(work queuing)은 오퍼레이팅 시스템(operating system)(OS) 또는 GPU 드라이버로의 링 전환들과 연관된 오버헤드(overhead)를 회피하기 위하여 (예컨대, SVM 상에서의 원자적 동작들을 통해) 사용자 레벨에서 수행될 수도 있다.
하나의 디큐는 그 EU 상에서 실행되는 태스크들에 의해 공유되도록 하기 위하여, 각각의 GPU 코어(또는 EU)에 대하여 할당될 수도 있다. 디큐의 하부 엔드는 그 EU에 의해 오직 액세스되므로, 데이터 집약성(data locality)이 개선되고, 상이한 EU들(또는 GPU 서브-슬라이스(sub-slice)들)은 그 디큐와 연관된 캐시 라인들을 위하여 경합하는 것이 방지되므로 경합이 감소된다.
디큐 당 하나의 전용 요청 핸들러 스레드로 CPU를 구성하는 것은 긴-실행 CPU 코드에 의해 야기된 디큐 백업(backup)들을 회피하는 것을 도울 수도 있다. 디큐가 나머지 콜백 요청들을 포함하는 동안, 이 CPU 스레드는 그 실행을 계속할 것이다. 그러나, 디큐가 비워질 경우, CPU 스레드는 다른 무작위적으로 선택된 디큐들로부터 항목들을 스틸하는 것을 시도할 것이다. CPU 스레드가 허용된 수의 스틸 시도들 후에 콜백 요청을 성공적으로 스틸할 수 없을 경우, 그것은 추가의 성공적이지 않은 시도들과 연관된 비용(cost)을 회피하기 위하여 어떤 시간 주기 동안에 일시정지할 것이다. Monitor/Mwait 명령들이 사용자 레벨(링 3)에서 이용가능할 경우, CPU 스레드는 새로운 항목들이 디큐에 추가될 때까지 대기하기 위하여 그것들을 이용할 수도 있다. 그렇지 않을 경우, CPU 스레드는 시간 주기 동안에 슬립(sleep)할 수도 있고, 그 다음으로, 그 정상적인 동작: 그 자신의 콜백 요청들을 실행하거나 다른 디큐들로부터 스틸하는 것을 재시작할 수도 있다.
도 3은 본 개시 내용과 부합하는 일 예시적인 실시예의 동작들(300)의 플로우차트를 예시한다. GPU 코어 또는 실행 유닛(EU)(102a, 102b)의 동작들이 예시되어 있다. 동작(302)에서, GPU 코어는 CPU 콜백을 개시한다. 콜백 요청은 동작(304)에서, GPU 코어와 연관된 디큐에 추가된다. 그 다음으로, GPU 코어는 임의적으로 동작(306)에서, 콜백의 완료를 대기하면서 다른 태스크들을 수행할 수도 있다. 동작(308)에서, 요청과 연관된 완료 플래그(206)가 테스트되고, 그것이 설정되지 않을 경우, GPU는 다른 태스크들을 수행하는 것을 계속할 수도 있거나(306), 추가적인 콜백 요청들을 추가할 수도 있거나(304), 또는 완료 플래그를 다시 테스트하기 이전에 시간의 주기 동안에 간단하게 대기/슬립할 수도 있다. 완료 플래그가 설정될 경우/설정될 때, 그 다음으로, 동작(310)에서, GPU 코어는 CPU 콜백으로부터 제공된 결과들을 판독한다. 이 결과들은 콜백 요청에서의 포인터에 의해 특정되었던, 예를 들어, SVM에서의 메모리 로케이션에서 획득될 수도 있다. CPU 콜백은 동작(312)에서 완료된다.
도 4는 본 개시 내용과 부합하는 또 다른 예시적인 실시예의 동작들(400)의 플로우차트를 예시한다. CPU 콜백 작업자 스레드(202a, 202b)의 동작들은 동작(402)에서 시작하도록 도시되어 있다. 동작(404)에서, 콜백 요청은 그 작업자 스레드와 연관된 디큐로부터 팝핑된다. 콜백 요청이 성공적으로 팝핑되었을 경우, 그 다음으로, 동작(416)에서, 콜백 요청에 의해 특정된 함수 또는 절차는 콜백 요청에 의해 공급되었던 임의의 인수들로 호출/실행된다. 콜백 함수가 완료된 후, 동작(418)에서, 그 콜백 요청과 연관된 완료 플래그는 설정되고, 작업자 스레드는 다음 콜백 요청을 핸들링하기 위하여 동작(404)으로 다시 루핑(loop)한다.
그러나, 팝(pop)이 실패할 경우, 예를 들어, 그 작업자 스레드와 연관된 디큐에서 더 이상의 콜백 요청들이 없을 경우, 그 다음으로, 동작(406)에서, 스틸 시도들의 수가 증분된다. 동작(408)에서, 스틸 시도들의 수가 최대 문턱을 초과할 경우, 그 다음으로, 작업자 스레드는 동작(410)에서, 또 다른 팝을 시도하기 전에 일부 특정된 시간 주기 동안에 대기할 수도 있다. 일부 실시예들에서, 대기는 Sleep 명령 또는 Monitor/Mwait 명령을 실행함으로써 달성될 수도 있다. 그렇지 않고, 스틸 시도들의 수가 최대 문턱보다 더 작을 경우, 동작(412)에서, 대안적인 디큐는 다른 작업자 스레드들과 연관되는 다른 디큐들 중으로부터 무작위적으로 선택(예컨대, 스틸)된다. 그 다음으로, 동작(414)에서, 콜백 요청은 대안적인(스틸된) 디큐로부터 팝핑되고, 절차는 위에서 설명된 바와 같이 동작(416)에서 계속된다.
도 5는 본 개시 내용과 부합하는 또 다른 예시적인 실시예의 동작들(500)의 플로우차트를 예시한다. 이 실시예에서, 대안적인 메커니즘은 콜백 요청 완료들에 대하여 반복적으로 검사할 것을 GPU에 요구하는 것을 회피하기 위하여 제공된다. 이것은 GPU 효율 및 에너지 소비를 개선시킬 수도 있다. 메커니즘은 프로그램에 있어서의 주어진 포인트에서의 연산의 상태를 나타내는 "연속"의 이용을 채용한다. 콜백 요청은 CPU가 콜백 요청을 완료한 후에 인보크할 "연속 커널"로 칭해진 GPU 커널에 대한 포인터 또는 핸들(handle)을 포함하도록 구성될 수도 있다. 그 다음으로, GPU 연속 커널은 콜백 요청이 행해진 바로 후의 포인트에서 원래의 GPU 태스크(또는 호출 커널)의 실행을 논리적으로 재개할 것이다. 이에 따라, GPU 호출 커널은 차단되지 않고, CPU 콜백이 완료되었는지 여부를 반복적으로 검사할 필요가 없다. 콜백 요청은 연속 커널로 다시 전달되어야 할 데이터 포인터(예컨대, 연속 인수 포인터)를 포함하도록 또한 구성될 수도 있다. 일반적으로, 콜백 요청을 행하는 GPU 호출 커널은 핵심 변수들의 값들이 연속 커널에 의해 더 이후에 이용될 수 있도록, 연속 인수 포인터에 의해 참조된 데이터 구조에서의 메모리 로케이션들에서 핵심 변수들의 값들을 저장할 것이다. 추가적으로, CPU 콜백 함수가 결과를 반환해야 할 경우, 그것은 그 데이터 구조에서의 메모리 로케이션들에 기입함으로써 그렇게 행할 수도 있다.
GPU 코어 상에서의 호출 커널의 동작(502)을 설명하는 도 5의 5(a)를 지금부터 참조하면, 동작(504)에서, 호출 커널은 CPU 콜백을 개시한다. 동작(506)에서, 스택 변수(stack variable)들은 콜백 요청의 연속 인수 포인터에 의해 참조된 데이터 구조 내로 저장된다. 이 스택 변수들은 그것이 중단될 포인트로부터 호출 커널을 재개하기 위하여 연속 커널에 의해 더 이후에 이용될 것이다. 동작(508)에서, 콜백 요청은 GPU 코어 또는 실행 유닛과 연관된 디큐에 추가(그 상으로 푸싱)된다. 동작(510)에서, GPU 코어 상에서의 호출 커널은 그 다음에 탈출할 수도 있어서, 이에 따라, 예를 들어, GPU 코어가 다른 작업을 수행하는 것을 허용할 수도 있다. 호출 커널이 지금 종결되었지만, 연속 커널은 콜백 요청을 행한 후에 발생하도록 의도되었던 연산들 또는 태스크들을 더 이후에 재개할 수 있고, GPU가 반복된 테스팅을 대기하거나 수행하기 위한 임의의 필요성 없이 직접적으로 그렇게 행할 수 있다.
도 5의 5(b)를 지금부터 참조하면, CPU 콜백 작업자 스레드의 동작(520)이 설명된다. 동작(522)에서, 작업은 상기 도 4와 관련하여 설명되었던 것과 유사한 방식으로 선택되고 수행된다. 즉, 콜백 요청은 작업자 스레드와 연관된 디큐로부터 팝핑되고, 특정된 콜백 함수가 실행된다. 완료 시에, 동작(524)에서, CPU 콜백 작업자 스레드는 그 콜백 요청과 연관되는 GPU 연속 커널을 인보크한다.
도 5의 5(c)를 지금부터 참조하면, GPU 코어 연속 커널의 동작(530)이 설명된다. 인보크된 연속 커널은 동작(532)에서, 호출 커널에 의해 이전에 저장되었던 스택 변수들을 로딩하고, 동작(534)에서, CPU 콜백으로부터 만약 존재한다면, 결과들을 판독한다. 동작(536)에서, GPU 코어 호출 커널은 복원된 스택 변수들을 이용하여 재개된다.
일부 실시예들에서, 프로그래머는 스택 변수들의 값들을 저장하기 위해 필요한 호출 커널의 코드뿐만 아니라, 그 스택 변수 값들을 재로딩하기 위한 연속 커널의 코드를 기입함으로써 CPU 콜백 요청을 구현할 수도 있다. 그러나, 다른 실시예들에서, 컴파일러(compiler) 또는 번환기(translator)는 이 코드를 방출하도록 구성될 수도 있고, 이에 따라, CPU 콜백들을 이용하기 위해 필요한 프로그래밍 노력을 단순화할 수도 있다. 컴파일러는 함수 콜백들의 이용을 추가로 단순화하기 위하여, CPU 콜백들을 포함하는 단일 GPU 커널을 호출 및 연속 커널들의 적절한 시퀀스뿐만 아니라, 연관된 스택 변수 저장 및 복원 코드로 변환하도록 추가적으로 구성될 수도 있다.
도 6은 본 개시 내용과 부합하는 또 다른 예시적인 실시예의 동작들(600)의 플로우차트를 예시한다. 동작들은 제1 프로세서와 제2 프로세서 사이의 함수 콜백들을 요청하기 위한 방법을 제공한다. 동작(610)에서, 콜백 요청들은 제1 프로세서의 실행 유닛(EU)에 의해, 제1 이중-엔드형 큐(디큐)로 푸싱된다. 디큐는 제1 및 제2 프로세서들에 결합된 공유된 가상 메모리(SVM) 내에 저장된다. 동작(620)에서, 콜백 요청들 중의 하나는 제2 프로세서 상에서 실행되는 요청 핸들러 스레드에 의해 제1 디큐로부터 팝핑된다. 동작(630)에서, 요청 핸들러 스레드는 팝핑된 콜백 요청에 의해 특정된 함수를 실행한다. 동작(640)에서, 요청 핸들러 스레드는 함수의 완료에 응답하여 EU로의 완료 신호를 생성한다.
도 7은 본 개시 내용과 부합하는 일 예시적인 실시예의 시스템 도면(700)을 예시한다. 시스템(700)은 예를 들어, 스마트폰, 스마트 태블릿, 개인 정보 단말(personal digital assistant)(PDA), 이동 인터넷 디바이스(mobile Internet device)(MID), 전환가능 태블릿, 노트북 또는 랩톱 컴퓨터, 또는 임의의 다른 적당한 디바이스와 같은 이동 플랫폼(710) 또는 컴퓨팅 디바이스일 수도 있다. 그러나, 본원에서 설명된 시스템의 실시예들은 이동 플랫폼들로 제한되지는 않고, 일부 실시예들에서, 시스템(700)이 워크스테이션(workstation) 또는 데스크톱 컴퓨터일 수도 있다는 것이 인식될 것이다. 디바이스는 예를 들어, 터치 스크린, 액정 디스플레이(liquid crystal display)(LCD), 또는 임의의 다른 적당한 디스플레이 타입과 같은 디스플레이 엘리먼트(760)를 통해 다양한 인터페이스들을 사용자에게 일반적으로 제시할 수도 있다.
시스템(700)은 예를 들어, 범용 프로세서로서 구성될 수도 있는 제1 프로세서 또는 CPU(104)와, 더욱 큰 효율로 병렬 동작들을 실행하도록 구성될 수도 있는 제2 프로세서 또는 GPU(102)를 포함하도록 도시되어 있다. 일부 실시예들에서, 프로세서들(102 및 104)은 임의의 수의 프로세서 코어들로서 구현될 수도 있다. 일반적으로, 프로세서(또는 프로세서 코어들)는 예를 들어, 마이크로-프로세서, 내장된 프로세서, 디지털 신호 프로세서(digital signal processor)(DSP), 그래픽 프로세서(graphics processor)(GPU), 네트워크 프로세서, 필드 프로그래밍가능 게이트 어레이, 또는 코드를 실행하도록 구성된 다른 디바이스와 같은 임의의 타입의 프로세서일 수도 있다. 프로세서들은 그것들이 코어 당 하나를 초과하는 하드웨어 스레드 컨텍스트(hardware thread context)(또는 "논리적 프로세서")를 포함할 수도 있다는 점에서 멀티스레디드 코어(multithreaded core)들일 수도 있다. 시스템(700)은 이전에 설명된 바와 같이 프로세서들 사이에서 개선된 함수 콜백 요청들을 구현하도록 구성된 임의의 수의 디큐들(108)을 포함하는 SVM(106)을 포함하도록 또한 도시되어 있다.
시스템(700)은 메모리(730)를 또한 포함하도록 도시되어 있다. 메모리 (730) 는 프로세서들에 결합될 수도 있다. 메모리(730)는 본 기술분야의 통상의 기술자들에게 알려져 있거나, 또는 그렇지 않을 경우에 이용가능할 수도 있는 바와 같은 (메모리 계층구조 및/또는 메모리 캐시들의 다양한 계층들을 포함하는) 폭넓은 다양한 메모리들 중의 임의의 것일 수도 있다. 프로세서들 및 메모리는 하나 이상의 사용자 애플리케이션들 또는 다른 소프트웨어 모듈들을 저장하고, 호스팅하고, 및/또는 실행하도록 구성될 수도 있다는 것이 인식될 것이다. 이 애플리케이션들은 임의의 타입의 연산, 통신, 데이터 관리, 데이터 저장, 및/또는 사용자 인터페이스 태스크를 포함할 수도 있지만, 그것으로 제한되지는 않을 수도 있다. 일부 실시예들에서, 이 애플리케이션들은 이동 플랫폼(710)의 임의의 다른 컴포넌트들을 채용할 수도 있거나, 이동 플랫폼(710)의 임의의 다른 컴포넌트들과 상호작용할 수도 있다.
시스템(700)은 프로세서(102, 104)와, 디스플레이 엘리먼트(760)를 포함하는 시스템(700)의 다른 엘리먼트들 및/또는 시스템(700)에 외부적인 다른 엘리먼트들(도시되지 않음)과의 사이의 데이터 통신을 가능하게 하거나 관리하도록 구성될 수도 있는 입력/출력(IO) 시스템 또는 제어기(750)를 포함하도록 또한 도시되어 있다.
시스템(700)은, 프로세서들에 결합되고 프로그램들, 애플리케이션, 및/또는 데이터를 저장하도록 구성된 저장 시스템(740), 예를 들어, 하드 디스크 드라이브(Hard Disk Drive)(HDD) 또는 솔리드 스테이트 드라이브(Solid State Drive)(SSD)를 포함하도록 또한 도시되어 있다.
시스템(700)은 예를 들어, 셀룰러 통신들, 무선 충실도(Wireless Fidelity)(WiFi), Bluetooth®, 및/또는 근접장 통신(Near Field Communication)(NFC)과 같은 무선 통신 능력들을 포함할 수도 있는 네트워크 인터페이스 모듈(770)을 포함하도록 또한 도시되어 있다. 무선 통신들은 Bluetooth®, Wi-Fi, 및 이동 전화 통신 표준들의 과거, 현재, 및 미래의 버전을 포함하는 임의의 기존의, 또는 아직 개발되어야 할 통신 표준들을 준수할 수도 있거나, 또는 그렇지 않을 경우에 이 통신 표준들과 호환가능할 수도 있다.
일부 실시예들에서, 시스템(700)의 다양한 컴포넌트들은 시스템-온-어-칩(system-on-a-chip)(SoC) 아키텍처로 조합될 수도 있다는 것이 인식될 것이다. 일부 실시예들에서, 컴포넌트들은 하드웨어 컴포넌트들, 펌웨어 컴포넌트들, 소프트웨어 컴포넌트들, 또는 하드웨어, 펌웨어, 또는 소프트웨어의 임의의 적당한 조합일 수도 있다.
본원에서 설명된 방법들의 실시예들은, 하나 이상의 프로세서들에 의해 실행될 때, 방법들을 수행하는 명령들을 개별적으로 또는 조합하여 저장한 하나 이상의 저장 매체들을 포함하는 시스템에서 구현될 수도 있다. 여기서, 프로세서는 예를 들어, 시스템 CPU(예컨대, 코어 프로세서) 및/또는 프로그래밍가능 회로부를 포함할 수도 있다. 이에 따라, 본원에서 설명된 방법들에 따른 동작들은 예를 들어, 몇몇 상이한 물리적 로케이션들에서의 프로세싱 구조들과 같은 복수의 물리적 디바이스들에 걸쳐 분산될 수도 있는 것으로 의도된다. 또한, 본 기술분야의 통상의 기술자에 의해 이해되는 바와 같이, 방법의 동작들은 개별적으로 또는 하위조합(subcombination)으로 수행될 수도 있는 것으로 의도된다. 이에 따라, 플로우차트들의 각각의 플로우차트의 동작들의 전부가 수행될 필요는 없고, 본 개시 내용은 본 기술분야의 통상의 기술자에 의해 이해되는 바와 같이, 이러한 동작들의 모든 하위조합들이 가능하게 되는 것으로 의도한 것이다.
저장 매체는 임의의 타입의 실재적인 매체(tangible medium), 예를 들어, 플로피 디스크들, 광학 디스크들, 컴팩트 디스크 판독-전용 메모리(compact disk read-only memorie)(CD-ROM)들, 컴팩트 디스크 재기록가능(compact disk rewritable)(CD-RW)들, 디지털 다기능 디스크(digital versatile disk)(DVD)들 및 자기-광학 디스크들을 포함하는 임의의 타입의 디스크, 반도체 디바이스들, 예컨대, 판독 전용 메모리(read-only memories)(ROM)들, 랜덤 액세스 메모리(random access memories)(RAM)들, 예컨대, 동적 및 정적 RAM들, 소거가능 프로그래밍가능 판독-전용 메모리(erasable programmable read-only memory)(EPROM)들, 전기적 소거가능 프로그래밍가능 판독-전용 메모리(electrically erasable programmable read-only memory)(EEPROM)들, 플래시 메모리들, 자기 또는 광학 카드들, 또는 전자 명령들을 저장하기에 적합한 임의의 타입의 매체들을 포함할 수도 있다.
본원에서의 임의의 실시예에서 이용된 바와 같은 "회로부"는 예를 들어, 단독으로 또는 임의의 조합으로, 하드와이어드 회로부(hardwired circuitry), 프로그래밍가능 회로부, 상태 머신 회로부, 및/또는 프로그래밍가능 회로부에 의해 실행된 명령들을 저장하는 펌웨어를 포함할 수도 있다. 앱(app)은 호스트 프로세서 또는 다른 프로그래밍가능 회로부와 같은 프로그래밍가능 회로부 상에서 실행될 수도 있는 코드 또는 명령들로서 구체화될 수도 있다. 본원에서의 임의의 실시예에서 이용된 바와 같은 모듈은 회로부로서 구체화될 수도 있다. 회로부는 집적 회로 칩과 같은 집적 회로로서 구체화될 수도 있다.
이에 따라, 본 개시 내용은 제1 프로세서와 제2 프로세서 사이의 함수 콜백 요청들을 구현하기 위한 시스템들, 디바이스들, 방법들, 및 컴퓨터 판독가능 매체들을 제공한다. 다음의 예들은 추가의 실시예들에 속한다.
예 1에 따르면, 제1 프로세서와 제2 프로세서 사이의 함수 콜백 요청들을 구현하기 위한 시스템이 제공된다. 시스템은 제1 및 제2 프로세서들에 결합된 공유된 가상 메모리(SVM)를 포함할 수도 있고, SVM은 적어도 하나의 이중-엔드형 큐(디큐)를 저장하도록 구성된다. 이 예의 시스템은 콜백 요청들을 제1 디큐로 푸싱하도록 구성된 제1 프로세서의 실행 유닛(EU) - EU는 디큐들 중의 제1 디큐와 연관됨 - 을 또한 포함할 수도 있다. 이 예의 시스템은, 제1 디큐로부터 콜백 요청들 중의 하나를 팝핑하고; 팝핑된 콜백 요청에 의해 특정된 함수를 실행하고; 그리고 함수의 완료에 응답하여 EU로의 완료 신호를 생성하도록 구성된, 제2 프로세서 상에서 실행되는 요청 핸들러 스레드를 더 포함할 수도 있다.
예 2는 예 1의 발명 요지를 포함할 수도 있고, 콜백 요청은 제2 프로세서에 의해 실행되어야 할 함수를 특정하기 위한 함수 포인터; 및 실행된 함수에 제공되어야 할 데이터에 대하여, 그리고 EU에 제공되어야 할, 실행된 함수에 의해 생성된 결과들에 대하여, SVM에서의 로케이션을 특정하기 위한 인수 포인터를 포함한다.
예 3은 예들 1 및 2의 발명 요지를 포함할 수도 있고, 요청 핸들러 스레드는 추가로, 제1 디큐가 비어 있다는 것을 검출하는 것에 응답하여, 제2 디큐 - 제2 디큐는 제2 EU와 연관됨 - 로부터 콜백 요청들 중의 하나를 팝핑하기 위한 것이다.
예 4는 예들 1 내지 3의 발명 요지를 포함할 수도 있고, 디큐들은 EU들 및 요청 핸들러들에 의한 액세스 시도들에 응답하여 페이지 오류들을 방지하기 위하여 SVM에서 피닝(pinning)된다.
예 5는 예들 1 내지 4의 발명 요지를 포함할 수도 있고, 완료 신호는 SVM에서의 완료 플래그를 설정하기 위한 것이고, EU는 추가로, 완료 플래그를 폴링(polling)하기 위한 것이다.
예 6은 예들 1 내지 5의 발명 요지를 포함할 수도 있고, 완료 신호는 EU 상에서 연속 커널 - 연속 커널은 이전에 저장된 스택 변수들을 복원하기 위한 것임 - 을 트리거링하기 위한 것이다.
예 7은 예들 1 내지 6의 발명 요지를 포함할 수도 있고, 요청 핸들러 스레드는 추가로, 디큐들 중의 임의의 것으로부터 콜백 요청들 중의 하나를 팝핑하는 것의 실패에 응답하여 슬립(sleep)하기 위한 것이다.
예 8은 예들 1 내지 7의 발명 요지를 포함할 수도 있고, 슬립은 Monitor/Mwait 명령의 실행을 포함한다.
예 9는 예들 1 내지 8의 발명 요지를 포함할 수도 있고, 제1 프로세서는 그래픽 프로세서 유닛(GPU)이고, 제2 프로세서는 범용 중앙 프로세서 유닛(CPU)이다.
예 10에 따르면, 제1 프로세서와 제2 프로세서 사이의 함수 콜백 요청들을 위한 방법이 제공된다. 방법은 제1 프로세서의 실행 유닛(EU)에 의해, 콜백 요청들을 제1 이중-엔드형 큐(디큐) - 디큐는 제1 및 제2 프로세서들에 결합된 공유된 가상 메모리(SVM) 내에 저장됨 - 로 푸싱하는 단계; 제2 프로세서 상에서 실행되는 요청 핸들러 스레드에 의해, 제1 디큐로부터 콜백 요청들 중의 하나를 팝핑하는 단계; 요청 핸들러 스레드에 의해, 팝핑된 콜백 요청에 의해 특정된 함수를 실행하는 단계; 및 요청 핸들러 스레드에 의해, 함수의 완료에 응답하여 EU로의 완료 신호를 생성하는 단계를 포함할 수도 있다.
예 11은 예 10의 발명 요지를 포함할 수도 있고, 콜백 요청은 제2 프로세서에 의해 실행되어야 할 함수를 특정하기 위한 함수 포인터; 및 실행된 함수에 제공되어야 할 데이터에 대하여, 그리고 EU에 제공되어야 할, 실행된 함수에 의해 생성된 결과들에 대하여, SVM에서의 로케이션을 특정하기 위한 인수 포인터를 포함한다.
예 12는 예 10 및 11의 발명 요지를 포함할 수도 있고, 요청 핸들러 스레드에 의해, 제1 디큐가 비어 있다는 것을 검출하는 것에 응답하여, 제2 디큐 - 제2 디큐는 제2 EU와 연관됨 - 로부터 콜백 요청들 중의 하나를 팝핑하는 단계를 더 포함할 수도 있다.
예 13은 예들 10 내지 12의 발명 요지를 포함할 수도 있고, EU들 및 요청 핸들러들에 의한 액세스 시도들에 응답하여 페이지 오류들을 방지하기 위하여 SVM에서 디큐들을 피닝(pinning)하는 단계를 더 포함할 수도 있다.
예 14는 예들 10 내지 13의 발명 요지를 포함할 수도 있고, 완료 신호를 생성하는 단계는, EU에 의해 폴링하기 위하여 SVM에서 완료 플래그를 설정하는 단계를 더 포함한다.
예 15는 예들 10 내지 14의 발명 요지를 포함할 수도 있고, 완료 신호를 생성하는 단계는, EU 상에서 연속 커널 - 연속 커널은 이전에 저장된 스택 변수들을 복원하기 위한 것임 - 을 트리거링하는 단계를 더 포함한다.
예 16은 예들 10 내지 15의 발명 요지를 포함할 수도 있고, 요청 핸들러 스레드에 의해, 디큐들 중의 임의의 것으로부터 콜백 요청들 중의 하나를 팝핑하는 것의 실패에 응답하여 슬립하는 단계를 더 포함할 수도 있다.
예 17은 예들 10 내지 16의 발명 요지를 포함할 수도 있고, 슬립하는 단계는 Monitor/Mwait 명령의 실행을 더 포함한다.
예 18에 따르면, 프로세서에 의해 실행될 때, 제1 프로세서와 제2 프로세서 사이의 함수 콜백 요청들을 위한 다음의 동작들을 발생시키는 명령들을 저장한 적어도 하나의 컴퓨터-판독가능 저장 매체가 제공된다. 동작들은 제1 프로세서의 실행 유닛(EU)에 의해, 콜백 요청들을 제1 이중-엔드형 큐(디큐) - 디큐는 제1 및 제2 프로세서들에 결합된 공유된 가상 메모리(SVM) 내에 저장됨 - 로 푸싱하는 것; 제2 프로세서 상에서 실행되는 요청 핸들러 스레드에 의해, 제1 디큐로부터 콜백 요청들 중의 하나를 팝핑하는 것; 요청 핸들러 스레드에 의해, 팝핑된 콜백 요청에 의해 특정된 함수를 실행하는 것; 및 요청 핸들러 스레드에 의해, 함수의 완료에 응답하여 EU로의 완료 신호를 생성하는 것을 포함할 수도 있다.
예 19는 예 18의 발명 요지를 포함할 수도 있고, 콜백 요청은 제2 프로세서에 의해 실행되어야 할 함수를 특정하기 위한 함수 포인터; 및 실행된 함수에 제공되어야 할 데이터에 대하여, 그리고 EU에 제공되어야 할, 실행된 함수에 의해 생성된 결과들에 대하여, SVM에서의 로케이션을 특정하기 위한 인수 포인터를 포함한다.
예 20은 예 18 및 19의 발명 요지를 포함할 수도 있고, 요청 핸들러 스레드에 의해, 제1 디큐가 비어 있다는 것을 검출하는 것에 응답하여, 제2 디큐 - 제2 디큐는 제2 EU와 연관됨 - 로부터 콜백 요청들 중의 하나를 팝핑하는 것을 더 포함할 수도 있다.
예 21은 예들 18 내지 20의 발명 요지를 포함할 수도 있고, EU들 및 요청 핸들러들에 의한 액세스 시도들에 응답하여 페이지 오류들을 방지하기 위하여 SVM에서 디큐들을 피닝하는 것을 더 포함할 수도 있다.
예 22는 예들 18 내지 21의 발명 요지를 포함할 수도 있고, 완료 신호를 생성하는 것은, EU에 의해 폴링하기 위하여 SVM에서 완료 플래그를 설정하는 것을 더 포함한다.
예 23은 예들 18 내지 22의 발명 요지를 포함할 수도 있고, 완료 신호를 생성하는 것은, EU 상에서 연속 커널 - 연속 커널은 이전에 저장된 스택 변수들을 복원하기 위한 것임 - 을 트리거링하는 것을 더 포함한다.
예 24는 예들 18 내지 23의 발명 요지를 포함할 수도 있고, 요청 핸들러 스레드에 의해, 디큐들 중의 임의의 것으로부터 콜백 요청들 중의 하나를 팝핑하는 것의 실패에 응답하여 슬립하는 것을 더 포함할 수도 있다.
예 25는 예들 18 내지 24의 발명 요지를 포함할 수도 있고, 슬립하는 것은 Monitor/Mwait 명령의 실행을 더 포함한다.
예 26에 따르면, 제1 프로세서와 제2 프로세서 사이의 함수 콜백 요청들을 위한 시스템이 제공된다. 시스템은 제1 프로세서의 실행 유닛(EU)에 의해, 콜백 요청들을 제1 이중-엔드형 큐(디큐) - 디큐는 제1 및 제2 프로세서들에 결합된 공유된 가상 메모리(SVM) 내에 저장됨 - 로 푸싱하기 위한 수단; 제2 프로세서 상에서 실행되는 요청 핸들러 스레드에 의해, 제1 디큐로부터 콜백 요청들 중의 하나를 팝핑하기 위한 수단; 요청 핸들러 스레드에 의해, 팝핑된 콜백 요청에 의해 특정된 함수를 실행하기 위한 수단; 및 요청 핸들러 스레드에 의해, 함수의 완료에 응답하여 EU로의 완료 신호를 생성하기 위한 수단을 포함할 수도 있다.
예 27은 예 26의 발명 요지를 포함할 수도 있고, 콜백 요청은 제2 프로세서에 의해 실행되어야 할 함수를 특정하기 위한 함수 포인터; 및 실행된 함수에 제공되어야 할 데이터에 대하여, 그리고 EU에 제공되어야 할, 실행된 함수에 의해 생성된 결과들에 대하여, SVM에서의 로케이션을 특정하기 위한 인수 포인터를 포함한다.
예 28은 예 26 및 27의 발명 요지를 포함할 수도 있고, 요청 핸들러 스레드에 의해, 제1 디큐가 비어 있다는 것을 검출하는 것에 응답하여, 제2 디큐 - 제2 디큐는 제2 EU와 연관됨 - 로부터 콜백 요청들 중의 하나를 팝핑하기 위한 수단을 더 포함할 수도 있다.
예 29는 예들 26 내지 28의 발명 요지를 포함할 수도 있고, EU들 및 요청 핸들러들에 의한 액세스 시도들에 응답하여 페이지 오류들을 방지하기 위하여 SVM에서 디큐들을 피닝하기 위한 수단을 더 포함할 수도 있다.
예 30은 예들 26 내지 29의 발명 요지를 포함할 수도 있고, 완료 신호를 생성하기 위한 수단은, EU에 의해 폴링하기 위하여 SVM에서 완료 플래그를 설정하기 위한 수단을 더 포함한다.
예 31은 예들 26 내지 30의 발명 요지를 포함할 수도 있고, 완료 신호를 생성하기 위한 수단은, EU 상에서 연속 커널 - 연속 커널은 이전에 저장된 스택 변수들을 복원하기 위한 것임 - 을 트리거링하기 위한 수단을 더 포함한다.
예 32는 예들 26 내지 31의 발명 요지를 포함할 수도 있고, 요청 핸들러 스레드에 의해, 디큐들 중의 임의의 것으로부터 콜백 요청들 중의 하나를 팝핑하는 것의 실패에 응답하여 슬립하기 위한 수단을 더 포함할 수도 있다.
예 33은 예들 26 내지 32의 발명 요지를 포함할 수도 있고, 슬립하기 위한 수단은 Monitor/Mwait 명령의 실행하기 위한 수단을 더 포함한다.
본원에서 채용되었던 용어들 및 표현들은 제한이 아니라, 설명의 용어들로서 이용되고, 이러한 용어들 및 표현들의 이용에 있어서, 도시되고 설명된 특징들의 임의의 등가물들(또는 그 부분들)을 제외하는 의도가 없고, 다양한 수정들은 청구항들의 범위 내에서 가능하다는 것이 인식된다. 따라서, 청구항들은 모든 이러한 등가물들을 커버하도록 의도된다. 다양한 특징들, 양태들, 및 실시예들은 본원에서 설명되었다. 본 기술분야의 통상의 기술자들에 의해 이해되는 바와 같이, 특징들, 양태들, 및 실시예들은 서로와의 조합뿐만 아니라, 변형 및 수정도 허용한다. 그러므로, 본 개시 내용은 이러한 조합들, 변동들, 및 수정들을 포괄하는 것으로 고려된다.

Claims (25)

  1. 제1 프로세서와 제2 프로세서 사이의 함수 콜백 요청(function callback request)들을 구현하기 위한 시스템으로서,
    상기 제1 및 제2 프로세서들에 결합된 공유된 가상 메모리(shared virtual memory)(SVM) - 상기 SVM은 적어도 하나의 이중-엔드형 큐(double-ended queue)(디큐)를 저장하기 위한 것임 -;
    상기 콜백 요청들을 제1 디큐로 푸싱하기 위한 상기 제1 프로세서의 실행 유닛(execution unit)(EU) - 상기 EU는 상기 디큐들 중의 제1 디큐와 연관됨 -; 및
    상기 제1 디큐로부터 상기 콜백 요청들 중의 하나를 팝핑(popping)하고;
    상기 팝핑된 콜백 요청에 의해 특정된 함수를 실행하고;
    상기 함수의 완료에 응답하여, 상기 EU로의 완료 신호를 생성하기 위한,
    상기 제2 프로세서 상에서 실행되는 요청 핸들러 스레드를 포함하고,
    상기 완료 신호는 상기 EU 상에서 연속 커널 - 상기 연속 커널은 이전에 저장된 스택 변수들을 복원하기 위한 것임 - 을 트리거링하기 위한 것인,
    시스템.
  2. 제1항에 있어서, 상기 콜백 요청들은,
    상기 제2 프로세서에 의해 실행되어야 할 상기 함수를 특정하기 위한 함수 포인터; 및
    상기 실행된 함수에 제공되어야 할 데이터에 대하여, 그리고 상기 EU에 제공되어야 할, 상기 실행된 함수에 의해 생성된 결과들에 대하여, 상기 SVM에서의 로케이션을 특정하기 위한 인수 포인터를 포함하는, 시스템.
  3. 제1항에 있어서, 상기 요청 핸들러 스레드는 추가로, 상기 제1 디큐가 비어 있다는 것을 검출하는 것에 응답하여, 제2 디큐 - 상기 제2 디큐는 제2 EU와 연관됨 - 로부터 상기 콜백 요청들 중의 하나를 팝핑하기 위한 것인, 시스템.
  4. 제1항에 있어서, 상기 디큐들은 상기 EU들 및 상기 요청 핸들러들에 의한 액세스 시도들에 응답하여 페이지 오류들을 방지하기 위하여 상기 SVM에서 피닝되는, 시스템.
  5. 제1항에 있어서, 상기 완료 신호는 상기 SVM에서의 완료 플래그를 설정하기 위한 것이고, 상기 EU는 추가로, 상기 완료 플래그를 폴링(polling)하기 위한 것인, 시스템.
  6. 삭제
  7. 제1항에 있어서, 상기 요청 핸들러 스레드는 추가로, 상기 디큐들 중의 임의의 것으로부터 상기 콜백 요청들 중의 하나를 팝핑하는 것의 실패에 응답하여 슬립(sleep)하기 위한 것인, 시스템.
  8. 제7항에 있어서, 상기 슬립은 Monitor/Mwait 명령의 실행을 포함하는, 시스템.
  9. 제1항에 있어서, 상기 제1 프로세서는 그래픽 프로세서 유닛(Graphics Processor Unit)(GPU)이고, 상기 제2 프로세서는 범용 중앙 프로세서 유닛(Central Processor Unit)(CPU)인, 시스템.
  10. 제1 프로세서와 제2 프로세서 사이의 함수 콜백 요청들을 위한 방법으로서,
    상기 제1 프로세서의 실행 유닛(EU)에 의해, 상기 콜백 요청들을 제1 이중-엔드형 큐(디큐) - 상기 디큐는 상기 제1 및 제2 프로세서들에 결합된 공유된 가상 메모리(SVM) 내에 저장됨 - 로 푸싱하는 단계;
    상기 제2 프로세서 상에서 실행되는 요청 핸들러 스레드에 의해, 상기 제1 디큐로부터 상기 콜백 요청들 중의 하나를 팝핑하는 단계;
    상기 요청 핸들러 스레드에 의해, 상기 팝핑된 콜백 요청에 의해 특정된 함수를 실행하는 단계; 및
    상기 요청 핸들러 스레드에 의해, 상기 함수의 완료에 응답하여 상기 EU로의 완료 신호를 생성하는 단계를 포함하고,
    상기 완료 신호를 생성하는 단계는, 상기 EU 상에서 연속 커널 - 상기 연속 커널은 이전에 저장된 스택 변수들을 복원하기 위한 것임 - 을 트리거링하는 단계를 더 포함하는, 방법.
  11. 제10항에 있어서, 상기 콜백 요청들은,
    상기 제2 프로세서에 의해 실행되어야 할 상기 함수를 특정하기 위한 함수 포인터; 및
    상기 실행된 함수에 제공되어야 할 데이터에 대하여, 그리고 상기 EU에 제공되어야 할, 상기 실행된 함수에 의해 생성된 결과들에 대하여, 상기 SVM에서의 로케이션을 특정하기 위한 인수 포인터를 포함하는, 방법.
  12. 제10항에 있어서, 상기 요청 핸들러 스레드에 의해, 상기 제1 디큐가 비어 있다는 것을 검출하는 것에 응답하여, 제2 디큐 - 상기 제2 디큐는 제2 EU와 연관됨 - 로부터 상기 콜백 요청들 중의 하나를 팝핑하는 단계를 더 포함하는, 방법.
  13. 제10항에 있어서, 상기 EU들 및 상기 요청 핸들러들에 의한 액세스 시도들에 응답하여 페이지 오류들을 방지하기 위하여 상기 SVM에서 상기 디큐들을 피닝하는 단계를 더 포함하는, 방법.
  14. 제10항에 있어서, 상기 완료 신호를 생성하는 단계는, 상기 EU에 의해 폴링하기 위하여 상기 SVM에서의 완료 플래그를 설정하는 단계를 더 포함하는, 방법.
  15. 삭제
  16. 제10항에 있어서, 상기 요청 핸들러 스레드에 의해, 상기 디큐들 중의 임의의 것으로부터 상기 콜백 요청들 중의 하나를 팝핑하는 것의 실패에 응답하여 슬립하는 단계를 더 포함하는, 방법.
  17. 제16항에 있어서, 상기 슬립하는 단계는 Monitor/Mwait 명령의 실행을 포함하는, 방법.
  18. 프로세서에 의해 실행될 때, 제1 프로세서와 제2 프로세서 사이의 함수 콜백 요청들을 위한 다음의 동작들을 발생시키는 명령들을 저장한 적어도 하나의 컴퓨터-판독가능 저장 매체로서, 상기 동작들은,
    상기 제1 프로세서의 실행 유닛(EU)에 의해, 상기 콜백 요청들을 제1 이중-엔드형 큐(디큐) - 상기 디큐는 상기 제1 및 제2 프로세서들에 결합된 공유된 가상 메모리(SVM) 내에 저장됨 - 로 푸싱하는 동작;
    상기 제2 프로세서 상에서 실행되는 요청 핸들러 스레드에 의해, 상기 제1 디큐로부터 상기 콜백 요청들 중의 하나를 팝핑하는 동작;
    상기 요청 핸들러 스레드에 의해, 상기 팝핑된 콜백 요청에 의해 특정된 함수를 실행하는 동작; 및
    상기 요청 핸들러 스레드에 의해, 상기 함수의 완료에 응답하여 상기 EU로의 완료 신호를 생성하는 동작을 포함하고,
    상기 완료 신호를 생성하는 동작은, 상기 EU 상에서 연속 커널 - 상기 연속 커널은 이전에 저장된 스택 변수들을 복원하기 위한 것임 - 을 트리거링하는 동작을 더 포함하는, 컴퓨터-판독가능 저장 매체.
  19. 제18항에 있어서, 상기 콜백 요청들은,
    상기 제2 프로세서에 의해 실행되어야 할 상기 함수를 특정하기 위한 함수 포인터; 및
    상기 실행된 함수에 제공되어야 할 데이터에 대하여, 그리고 상기 EU에 제공되어야 할, 상기 실행된 함수에 의해 생성된 결과들에 대하여, 상기 SVM에서의 로케이션을 특정하기 위한 인수 포인터를 포함하는, 컴퓨터-판독가능 저장 매체.
  20. 제18항에 있어서, 상기 요청 핸들러 스레드에 의해, 상기 제1 디큐가 비어 있다는 것을 검출하는 것에 응답하여, 제2 디큐 - 상기 제2 디큐는 제2 EU와 연관됨 - 로부터 상기 콜백 요청들 중의 하나를 팝핑하는 동작을 더 포함하는, 컴퓨터-판독가능 저장 매체.
  21. 제18항에 있어서, 상기 EU들 및 상기 요청 핸들러들에 의한 액세스 시도들에 응답하여 페이지 오류들을 방지하기 위하여 상기 SVM에서 상기 디큐들을 피닝하는 동작을 더 포함하는, 컴퓨터-판독가능 저장 매체.
  22. 제18항에 있어서, 상기 완료 신호를 생성하는 동작은, 상기 EU에 의해 폴링하기 위하여 상기 SVM에서의 완료 플래그를 설정하는 동작을 더 포함하는, 컴퓨터-판독가능 저장 매체.
  23. 삭제
  24. 제18항에 있어서, 상기 요청 핸들러 스레드에 의해, 상기 디큐들 중의 임의의 것으로부터 상기 콜백 요청들 중의 하나를 팝핑하는 것의 실패에 응답하여 슬립하는 동작을 더 포함하는, 컴퓨터-판독가능 저장 매체.
  25. 제24항에 있어서, 상기 슬립하는 동작은 Monitor/Mwait 명령의 실행을 포함하는, 컴퓨터-판독가능 저장 매체.
KR1020177013171A 2014-12-18 2015-11-24 중앙 프로세싱 유닛(cpu)과 보조 프로세서 사이의 개선된 함수 콜백 메커니즘 KR102466984B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/574,545 2014-12-18
US14/574,545 US9342384B1 (en) 2014-12-18 2014-12-18 Function callback mechanism between a central processing unit (CPU) and an auxiliary processor
PCT/US2015/062302 WO2016099820A1 (en) 2014-12-18 2015-11-24 Improved function callback mechanism between a central processing unit (cpu) and an auxiliary processor

Publications (2)

Publication Number Publication Date
KR20170096103A KR20170096103A (ko) 2017-08-23
KR102466984B1 true KR102466984B1 (ko) 2022-11-15

Family

ID=55920108

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177013171A KR102466984B1 (ko) 2014-12-18 2015-11-24 중앙 프로세싱 유닛(cpu)과 보조 프로세서 사이의 개선된 함수 콜백 메커니즘

Country Status (7)

Country Link
US (3) US9342384B1 (ko)
EP (1) EP3234785A4 (ko)
JP (2) JP6800850B2 (ko)
KR (1) KR102466984B1 (ko)
CN (1) CN107004251A (ko)
SG (1) SG11201704042PA (ko)
WO (1) WO2016099820A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9342384B1 (en) 2014-12-18 2016-05-17 Intel Corporation Function callback mechanism between a central processing unit (CPU) and an auxiliary processor
RU2647627C1 (ru) * 2016-11-08 2018-03-16 Федеральное государственное бюджетное учреждение науки Федеральный исследовательский Центр "Карельский научный центр Российской академии наук" Способ управления памятью компьютерной системы
CN108052380B (zh) * 2017-12-07 2020-10-30 金蝶软件(中国)有限公司 业务功能对接方法、装置、计算机设备及存储介质
US10740163B2 (en) * 2018-06-28 2020-08-11 Advanced Micro Devices, Inc. Network packet templating for GPU-initiated communication
CN110688203B (zh) * 2018-07-05 2022-05-13 武汉斗鱼网络科技有限公司 一种任务执行方法和装置
US10853154B2 (en) * 2019-01-30 2020-12-01 Salesforce.Com, Inc. Orchestration of a sequence of computations by external systems
CN110347450B (zh) * 2019-07-15 2024-02-09 北京一流科技有限公司 多流并行控制系统及其方法
CN111158911A (zh) * 2019-12-27 2020-05-15 迈普通信技术股份有限公司 一种处理器配置方法、装置、处理器及网络设备
US11340942B2 (en) 2020-03-19 2022-05-24 Raytheon Company Cooperative work-stealing scheduler
US11347488B2 (en) * 2020-05-18 2022-05-31 Fortinet, Inc. Compiling domain-specific language code to generate executable code targeting an appropriate type of processor of a network device
CN112513817B (zh) * 2020-08-14 2021-10-01 华为技术有限公司 一种主cpu与npu的数据交互方法及计算设备
US11698816B2 (en) * 2020-08-31 2023-07-11 Hewlett Packard Enterprise Development Lp Lock-free work-stealing thread scheduler
US11960813B2 (en) 2021-08-02 2024-04-16 Advanced Micro Devices, Inc. Automatic redistribution layer via generation

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040078812A1 (en) 2001-01-04 2004-04-22 Calvert Kerry Wayne Method and apparatus for acquiring media services available from content aggregators
US20060161737A1 (en) * 2000-04-18 2006-07-20 Sun Microsystems, Inc. Concurrency technique for shared objects
US20120158817A1 (en) 2010-12-16 2012-06-21 Et International, Inc. Distributed Computing Architecture
US20130328891A1 (en) 2012-06-08 2013-12-12 Advanced Micro Devices, Inc. System and method for providing low latency to applications using heterogeneous processors

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0619785A (ja) * 1992-03-27 1994-01-28 Matsushita Electric Ind Co Ltd 分散共有仮想メモリーとその構成方法
US5826081A (en) * 1996-05-06 1998-10-20 Sun Microsystems, Inc. Real time thread dispatcher for multiprocessor applications
JPH09319580A (ja) * 1996-05-29 1997-12-12 Oki Electric Ind Co Ltd ネットワークマネージメント方法
JPH11175359A (ja) * 1997-12-17 1999-07-02 Nippon Telegr & Teleph Corp <Ntt> 異種プラットフォーム間のイベント監視部統合方法
US6173316B1 (en) * 1998-04-08 2001-01-09 Geoworks Corporation Wireless communication device with markup language based man-machine interface
US7539849B1 (en) * 2000-01-20 2009-05-26 Sun Microsystems, Inc. Maintaining a double-ended queue in a contiguous array with concurrent non-blocking insert and remove operations using a double compare-and-swap primitive
JP2002073332A (ja) * 2000-08-25 2002-03-12 Sanyo Electric Co Ltd 演算実行装置及び方法
US6938253B2 (en) * 2001-05-02 2005-08-30 Portalplayer, Inc. Multiprocessor communication system and method
US7213093B2 (en) * 2003-06-27 2007-05-01 Intel Corporation Queued locks using monitor-memory wait
US7308688B2 (en) * 2003-08-19 2007-12-11 Kabushiki Kaisha Toshiba System and method for shared memory based IPC queue template having event based notification
JP2005284749A (ja) * 2004-03-30 2005-10-13 Kyushu Univ 並列処理コンピュータ
JP4450853B2 (ja) * 2004-09-16 2010-04-14 エヌヴィディア コーポレイション 負荷分散
US7346753B2 (en) * 2005-12-19 2008-03-18 Sun Microsystems, Inc. Dynamic circular work-stealing deque
CN100549942C (zh) * 2006-03-31 2009-10-14 应广科技股份有限公司 自我控制的多重微控制系统及方法
CN101295267B (zh) * 2008-05-30 2013-01-16 中兴通讯股份有限公司 队列管理方法和装置、计算机系统及计算机可读介质
CN101662300B (zh) * 2008-08-29 2013-09-25 深圳富泰宏精密工业有限公司 手机图片转换系统及方法
JP2010079622A (ja) * 2008-09-26 2010-04-08 Hitachi Ltd マルチコアプロセッサシステム、および、そのタスク制御方法
US8397241B2 (en) * 2008-11-13 2013-03-12 Intel Corporation Language level support for shared virtual memory
US8359420B2 (en) * 2009-06-21 2013-01-22 Ablaze Wireless, Inc. External memory based FIFO apparatus
US8959525B2 (en) * 2009-10-28 2015-02-17 International Business Machines Corporation Systems and methods for affinity driven distributed scheduling of parallel computations
US8868848B2 (en) * 2009-12-21 2014-10-21 Intel Corporation Sharing virtual memory-based multi-version data between the heterogenous processors of a computer platform
US9558048B2 (en) * 2011-09-30 2017-01-31 Oracle International Corporation System and method for managing message queues for multinode applications in a transactional middleware machine environment
US8745291B2 (en) * 2011-10-04 2014-06-03 Qualcomm Incorporated Inter-processor communication apparatus and method
US9170820B2 (en) * 2011-12-15 2015-10-27 Advanced Micro Devices, Inc. Syscall mechanism for processor to processor calls
US10255104B2 (en) * 2012-03-29 2019-04-09 Advanced Micro Devices, Inc. System call queue between visible and invisible computing devices
US9317339B2 (en) * 2013-03-13 2016-04-19 Oracle International Corporation Systems and methods for implementing work stealing using a configurable separation of stealable and non-stealable work items
US9298556B2 (en) * 2013-04-24 2016-03-29 Nintendo Co., Ltd. Graphics processing watchdog active reset
US9342384B1 (en) 2014-12-18 2016-05-17 Intel Corporation Function callback mechanism between a central processing unit (CPU) and an auxiliary processor

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060161737A1 (en) * 2000-04-18 2006-07-20 Sun Microsystems, Inc. Concurrency technique for shared objects
US20040078812A1 (en) 2001-01-04 2004-04-22 Calvert Kerry Wayne Method and apparatus for acquiring media services available from content aggregators
US20120158817A1 (en) 2010-12-16 2012-06-21 Et International, Inc. Distributed Computing Architecture
US20130328891A1 (en) 2012-06-08 2013-12-12 Advanced Micro Devices, Inc. System and method for providing low latency to applications using heterogeneous processors

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JEFF A. STUART et al . , "GPU-to-CPU Callbacks, Proceedings of the 2010 Conference on Parallel Processing, 2010.08.31., pp.365-374.

Also Published As

Publication number Publication date
US10706496B2 (en) 2020-07-07
US20190258533A1 (en) 2019-08-22
US20180267844A1 (en) 2018-09-20
JP2020173870A (ja) 2020-10-22
EP3234785A1 (en) 2017-10-25
US10255122B2 (en) 2019-04-09
JP7087029B2 (ja) 2022-06-20
JP2017538212A (ja) 2017-12-21
WO2016099820A1 (en) 2016-06-23
US9342384B1 (en) 2016-05-17
KR20170096103A (ko) 2017-08-23
CN107004251A (zh) 2017-08-01
EP3234785A4 (en) 2018-05-30
SG11201704042PA (en) 2017-07-28
JP6800850B2 (ja) 2020-12-16

Similar Documents

Publication Publication Date Title
US10706496B2 (en) Function callback mechanism between a Central Processing Unit (CPU) and an auxiliary processor
JP5738998B2 (ja) マルチプルプロセッサ計算プラットフォームにおけるプロセッサ間通信技法
JP7092801B2 (ja) Gpuタスクスケジューリングの継続分析タスク
JP6430970B2 (ja) 異なる命令セットアーキテクチャを有するプロセッサ上におけるオペレーティングシステムの実行
US20160026494A1 (en) Mid-thread pre-emption with software assisted context switch
US9633407B2 (en) CPU/GPU synchronization mechanism
CN110597606B (zh) 一种高速缓存友好的用户级线程调度方法
Lubbers et al. Cooperative multithreading in dynamically reconfigurable systems
US9122522B2 (en) Software mechanisms for managing task scheduling on an accelerated processing device (APD)
US9053022B2 (en) Synchronous software interface for an accelerated compute engine
CN111052094A (zh) 使用c状态和睿频加速提高用户空间的自旋锁效率
US10127076B1 (en) Low latency thread context caching
US9268601B2 (en) API for launching work on a processor
US7996848B1 (en) Systems and methods for suspending and resuming threads
US9323575B1 (en) Systems and methods for improving data restore overhead in multi-tasking environments
US20130160019A1 (en) Method for Resuming an APD Wavefront in Which a Subset of Elements Have Faulted
CN110618794B (zh) 一种SSD固件访问NandFlash的方法和系统
US10740150B2 (en) Programmable state machine controller in a parallel processing system
CN113439260A (zh) 针对低时延存储设备的i/o完成轮询
US20130166887A1 (en) Data processing apparatus and data processing method
US20230161616A1 (en) Communications across privilege domains within a central processing unit core
CN116360941A (zh) 一种面向多核dsp的并行计算资源自组织调度方法及系统

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant