KR101788267B1 - 시스템 호출 요청의 통신 최적화 - Google Patents

시스템 호출 요청의 통신 최적화 Download PDF

Info

Publication number
KR101788267B1
KR101788267B1 KR1020137017357A KR20137017357A KR101788267B1 KR 101788267 B1 KR101788267 B1 KR 101788267B1 KR 1020137017357 A KR1020137017357 A KR 1020137017357A KR 20137017357 A KR20137017357 A KR 20137017357A KR 101788267 B1 KR101788267 B1 KR 101788267B1
Authority
KR
South Korea
Prior art keywords
simd
system call
processor
call request
work item
Prior art date
Application number
KR1020137017357A
Other languages
English (en)
Other versions
KR20140027078A (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 KR20140027078A publication Critical patent/KR20140027078A/ko
Application granted granted Critical
Publication of KR101788267B1 publication Critical patent/KR101788267B1/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
    • 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
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • 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/546Message passing systems or structures, e.g. queues
    • 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
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

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

Abstract

본 명세서에 시스템 호출을 위한 통신을 최적화하는 방법이 제공된다. 본 방법은 웨이브프론트에서 각 작업 항목을 위한 시스템 호출을 저장하는 단계와, 상기 저장된 시스템 호출을 실행을 위해 프로세서에 전송하는 단계를 포함한다. 본 방법은 상기 전송에 응답하여 상기 웨이브프론트에서 각 작업 항목에 대한 결과를 수신하는 단계를 더 포함한다.

Description

시스템 호출 요청의 통신 최적화{OPTIMIZING COMMUNICATION OF SYSTEM CALL REQUESTS}
본 발명은 일반적으로 컴퓨팅 시스템(computing system)에 관한 것이다. 보다 상세하게는, 본 발명은 컴퓨팅 시스템 내 연산 성분을 단일화하는 아키텍처에 관한 것이다.
일반적인 연산(computation)에 그래픽 처리 유닛(GPU: graphics processing unit)을 사용하려는 요구가 최근에 단위 전력 및/또는 비용당 GPU의 예시적인 성능으로 인해 훨씬 더 높아지고 있다. GPU의 연산 성능(computational capabilities)은 일반적으로 대응하는 CPU(central processing unit) 플랫폼의 것을 초과하는 율(rate)로 성장하였다. 모바일 컴퓨팅 시장 및 필요한 지원 서버/기업용 시스템의 폭발적 증가와 연결된 이러한 성장은 원하는 유저 경험의 특정된 품질을 제공하는데 사용되고 있다. 그 결과, 데이터와 병렬로 콘텐츠에 작업부하(workload)를 실행하기 위해 CPU와 GPU를 결합하여 사용하는 것은 볼륨 기술(volume technology)이 되고 있다.
그러나, GPU는 전통적으로 그래픽을 가속시키기 위하여만 이용가능한 제약된 프로그래밍 환경에서 동작된다. 이들 제약은 GPU가 CPU만큼 풍부한 프로그래밍 에코시스템을 가지지 않는다는 것에 기인한다. 그리하여, 그 사용은 그래픽 및 비디오 애플리케이션 프로그래밍 인터페이스(API: application programming interface)로 처리하는 것에 이미 익숙해진, 대부분 2차원(2D)과 3차원(3D) 그래픽 및 일부 선도하는 멀티미디어 애플리케이션으로 제한된다.
다수 벤더 지원 OpenCL(등록상표)과 DirectCompute(등록상표), 표준 API 및 지원 툴의 도래로, 전통적인 애플리케이션에서 GPU의 제한은 전통적인 그래픽을 넘어 확장되었다. OpenCL 및 DirectCompute가 유망한 시작이라 하더라도, CPU와 GPU의 조합이 대부분 프로그래밍 작업에 CPU만큼 유동적으로 사용되게 하는 환경 및 에코시스템을 생성하는 것에 많은 장애들이 남아있다.
현존하는 컴퓨팅 시스템은 종종 다수의 처리 디바이스를 포함한다. 예를 들어, 일부 컴퓨팅 시스템은 별개의 칩에 CPU와 GPU를 포함하거나(예를 들어, CPU는 마더보드 상에 위치될 수 있고 GPU는 그래픽 카드 상에 위치될 수 있음) 단일 칩 패키지에 CPU와 GPU를 모두 포함한다. 그러나, 이들 두 배열은 전력 소비를 최소화하면서 (i) 별개의 메모리 시스템, (ii) 효과적인 스케줄링, (iii) 처리 사이에 서비스 품질(QoS: quality of service) 보장 제공, (iv) 모델 프로그래밍, 및 (v) 다수의 타깃 인스트럭션 세트 아키텍처(ISA: instruction set architecture)로 컴파일링하는 것과 연관된 상당한 문제를 여전히 포함한다.
예를 들어, 이산 칩 배열은 각 프로세서가 메모리에 액세스하기 위한 칩 대 칩 인터페이스를 시스템과 소프트웨어 아키텍처가 이용할 수 있게 한다. 이들 외부 인터페이스(예를 들어, 칩 대 칩)는 이종 프로세서와 협력하기 위해 메모리 지체와 전력 소비에 부작용을 나타내지만, 별개의 메모리 시스템(즉, 별개의 어드레스 공간)과 드라이버로 관리되는 공유 메모리는 정밀 입도 오프로드(fine grain offload)에 허용가능하지 않는 오버헤드를 생성한다.
다른 예에서, 일부 명령은 GPU에서 효율적으로 실행되지 않는다. 예를 들어, GPU는 운영 시스템("OS")을 수반하는 명령을 효과적으로 실행되지 않는데, 예를 들어 메모리 또는 프린팅 데이터를 컴퓨터 스크린에 할당하는 명령이 CPU를 사용하여서만 처리될 수 있다. GPU가 이들 작업을 수행하지 못하므로, GPU는 CPU에 이들 작업을 수행할 것을 요청한다. 이들 요청은 시스템 호출(system call)(syscall)이라고 알려져 있다.
시스템 호출은 CPU가 처리하기에는 고가이다. 종종 시스템 호출은 CPU의 즉시 주의(attention)를 요구하는 높은 우선순위의 명령이다. CPU가 시스템 요청을 수신할 때마다, CPU는 현재의 프로세스의 처리를 중지하고 OS를 호출하고 시스템 호출을 처리한 다음, 그 작업을 처리하는 것으로 복귀한다.
GPU는 웨이브프론트(wavefront)를 처리할 때 각 작업 항목은 GPU가 처리할 수 없는(또는 용이하게 처리할 수 없는) 메모리 할당이나 다른 명령을 위한 시스템 호출을 요구할 수 있다. 종래의 시스템에서, GPU는 각 작업 항목에 대해 CPU에 별개의 시스템 호출 요청을 한다. 작업 항목이 병렬로 실행되므로, 각 작업 항목은 CPU에 동일한 시스템 요청을 한다.
시스템 요청이 CPU에 도달할 때마다, CPU는 그 작업의 처리를 중지하고, OS를 호출하며 GPU의 요청을 처리하고 자기 자신의 작업을 처리하는 것으로 복귀한다. 다수의 작업 항목이 동시에 별개의 시스템 호출 요청을 하는 경우, CPU는 자기 자신의 작업을 일시중지하고 OS를 호출하며 GPU로부터 시스템 호출을 처리하는 것을 반복적으로 시도하므로 처리 시간을 낭비한다.
그러므로, 시스템 호출을 수반하는 CPU와 GPU 사이의 통신을 최적화하는(즉, 개선하는) 시스템 및 방법이 요구된다.
GPU, 가속 처리 유닛(APU: accelerated processing unit) 및 일반 목적 사용의 그래픽 처리 유닛(GPGPU: general purpose use of the graphics processing unit)이 이 분야에서 일반적으로 사용되는 용어이지만, "가속 처리 디바이스(APD: accelerated processing device)"라는 표현이 더 넓은 표현인 것으로 고려된다. 예를 들어, APD는 종래의 CPU, 종래의 GPU, 및/또는 이들의 조합과 같은 자원에 비해 가속된 방식으로 가속 그래픽 처리 작업, 데이터 병렬 작업, 또는 내포 데이터 병렬 작업과 연관된 기능(function)과 연산을 수행하는 하드웨어 및/또는 소프트웨어의 임의의 협력하는 집합을 말한다.
본 발명의 실시예는 시스템 호출을 위한 통신을 최적화하는 시스템, 방법, 및 제조 물품을 포함한다. 본 방법은 웨이브프론트에서 각 작업 항목에 대한 시스템 호출을 저장하는 단계와, 상기 저장된 시스템 호출을 실행을 위해 프로세서에 전송하는 단계를 포함한다. 본 방법은 상기 전송에 응답하여 웨이브프론트에서 각 작업 항목에 대한 결과를 수신하는 단계를 더 포함한다.
본 발명의 다른 특징과 이점 및 본 발명의 여러 실시예의 구조와 동작이 첨부 도면을 참조하여 상세히 후술된다. 본 발명은 본 명세서에 설명된 특정 실시예로 제한되는 것은 아니라는 것이 주목된다. 이 실시예는 단지 예시를 위해서만 본 명세서에 제공된 것이다. 추가적인 실시예는 본 명세서에 포함된 개시 내용에 기초하여 관련 기술 분야(들)에서 통상의 지식을 가진 자에게는 명백할 것이다.
본 명세서의 일부를 형성하고 본 명세서에 포함된 첨부 도면은 본 발명을 예시하고, 본 상세한 설명과 함께 본 발명의 원리를 설명하고 관련 기술 분야에 통상의 지식을 가진 자라면 본 발명을 제조하고 사용할 수 있게 하는 역할을 한다. 본 발명의 여러 실시예는 동일한 참조 부호가 도면 전체에 걸쳐 동일한 요소를 나타내는데 사용된 도면을 참조하여 후술된다.
도 1a는 본 발명의 실시예에 따른 처리 시스템의 예시적인 블록도;
도 1b는 도 1a에 도시된 APD의 예시적인 블록도;
도 2는 CPU와 APD 사이에 최적화된 통신 처리의 예시적인 블록도(200);
도 3은 시스템 호출 요청을 CPU에 전달하기 위해 단일 명령의 다수의 데이터(SIMD: single instruction multiple data) 벡터를 사용하여 APD의 예시적인 흐름도(300).
이하 상세한 설명에서 "하나의 실시예", "일 실시예", "예시적인 실시예" 등으로 언급하는 것은 설명된 실시예가 특정 특징, 구조 또는 특성을 포함할 수 있으나 모든 실시예가 이 특정 특징, 구조 또는 특성을 반드시 포함하는 것은 아니라는 것을 나타낸다. 나아가, 이 어구는 반드시 동일한 실시예를 언급하는 것이 아니다. 나아가, 특정 특징, 구조 또는 특성이 일 실시예와 관련하여 설명될 때 이 특징, 구조, 또는 특성이 명시적으로 설명되었건 아니건 간에 다른 실시예에도 영향을 미친다는 것은 이 기술 분야에 통상의 지식을 가진 자의 지식 범위 내인 것으로 제시된다.
"본 발명의 실시예"라는 용어는 본 발명의 모든 실시예가 설명된 특징, 이점 또는 동작 모드를 포함하는 것을 요구하는 것이 아니다. 대안적인 실시예가 본 발명의 범위를 벗어남이 없이 고안될 수 있고, 본 발명의 잘 알려진 요소들은 본 발명의 관련 상세를 흐리게 하지 않기 위하여 상세히 설명되지 않거나 생략될 수 있다. 나아가, 본 명세서에 사용된 용어는 특정 실시예를 단지 설명하기 위한 것일 뿐 본 발명을 제한하려고 의도된 것이 전혀 아니다. 예를 들어, 본 명세서에 사용된 바와 같이, 단수 형태 "하나", "일" 및 "상기"는 문맥이 달리 명확히 지시하지 않는 한, 복수의 형태를 또한 포함하는 것을 의미한다. 또한 "포함한다", "포함하는", "구비한다" 및/또는 "구비하는"이라는 용어가 본 명세서에 사용될 때 이 용어는 언급된 특징, 완전체, 단계, 동작, 요소 및/또는 성분의 존재를 특정하는 것이나, 하나 이상의 다른 특징, 완전체, 단계, 동작, 요소, 성분, 및/또는 이들의 그룹의 존재나 추가를 배제하는 것은 아니다.
도 1a는 CPU(102)와 APD(104)를 구비하는 단일화된 컴퓨팅 시스템(100)의 예시적인 도면이다. CPU(102)는 하나 이상의 단일 또는 다수의 코어(CPU)를 포함할 수 있다. 본 발명의 일 실시예에서, 시스템(100)은 단일 실리콘 다이 또는 패키지 상에 형성되되 CPU(102)와 APD(104)를 결합하여 단일화된 프로그래밍 및 실행 환경을 제공한다. 이 환경은 APD(104)가 일부 프로그래밍 작업에 CPU(102)만큼 유동적으로 사용될 수 있게 한다. 그러나, CPU(102)와 APD(104)는 단일 실리콘 다이 상에 형성되는 것이 본 발명의 절대적 요건은 아니다. 일부 실시예에서 이들은 동일한 기판 상에 또는 상이한 기판 상에 별개로 형성되고 장착되는 것이 가능하다.
일례에서, 시스템(100)은 메모리(106), 운영 시스템(108), 및 통신 인프라(109)를 또한 포함한다. 운영 시스템(108)과 통신 인프라(109)는 아래에서 보다 상세히 설명된다.
시스템(100)은 또한 커널 모드 드라이버(KMD: kernel mode driver)(110), 소프트웨어 스케줄러(SWS: software scheduler)(112), 및 메모리 관리 유닛(memory management unit)(116), 예를 들어, 입력/출력 메모리 관리 유닛(IOMMU: input/output memory management unit)을 포함한다. 시스템(100)의 성분은 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 이 기술 분야에 통상의 지식을 가진 자라면 시스템(100)이 도 1a에 도시된 실시예에 도시된 것에 더하여 또는 이와 다르게 하나 이상의 소프트웨어, 하드웨어, 및 펌웨어를 포함할 수 있다는 것을 인식할 수 있을 것이다.
일례에서, KMD(110)와 같은 드라이버는 일반적으로 하드웨어와 연결된 컴퓨터 버스 또는 통신 서브시스템을 통해 디바이스와 통신한다. 호출 프로그램(calling program)이 드라이버에서 루틴을 호출할 때, 드라이버는 명령을 이 디바이스에 발송한다. 디바이스가 드라이버에 다시 데이터를 송신하면, 드라이버는 원래의 호출 프로그램에서 루틴을 호출할 수 있다. 일례에서, 드라이버는 하드웨어에 종속하고 연산 시스템에 특정된다. 이들 드라이버는 통상 임의의 필요한 비동기 시간 종속 하드웨어 인터페이스에 필요한 인터럽트 핸들링(handling)을 제공한다. 특히 현대 윈도우즈(Windows) 플랫폼에 있는 디바이스 드라이버는 커널 모드(kernel-mode)(링 0)이나 유저 모드(링 3)에서 실행될 수 있다.
유저 모드에서 드라이버를 실행하는 이점은 불량하게 기록된 유저 모드 디바이스 드라이버가 커널 메모리를 덮어쓰기하는(overwrite) 것에 의해 시스템과 충돌할 수 없으므로 안정성이 개선된다는 것이다. 한편, 유저/커널 모드 전이(transition)는 통상적으로 상당한 성능 오버헤드를 부과하여 이에 의해 낮은 지체(latency)와 높은 처리량 요구조건에 유저 모드 드라이버를 금지한다. 커널 공간은 시스템 호출의 사용을 통해서만 유저 모듈들에 의해 액세스될 수 있다. UNIX 쉘(shell) 또는 다른 GUI 기반 애플리케이션과 같은 최종 유저 프로그램은 유저 공간의 일부이다. 이들 애플리케이션은 커널 지원 기능을 통해 하드웨어와 상호작용한다.
CPU(102)는 제어 프로세서(control processor), 전계 프로그래밍가능한 게이트 어레이(FPGA: field programmable gate array), 애플리케이션 특정 집적 회로(ASIC: application specific integrated circuit), 또는 디지털 신호 프로세서(DSP: digital signal processor) 중 하나 이상(미도시)을 포함할 수 있다. CPU(102)는 예를 들어, 컴퓨팅 시스템(100)의 동작을 제어하는 운영 시스템(108), KMD(110), SWS(112), 및 애플리케이션(111)을 포함하는 제어 로직(control logic)을 실행한다. 이 예시적인 실시예에서, CPU(102)는 일 실시예에 따라, 예를 들어 CPU(102)에 걸쳐 이 애플리케이션과 연관된 처리와 APD(104)와 같은 다른 처리 자원을 분배하는 것에 의해 애플리케이션(111)의 실행을 개시하고 제어한다.
특히 APD(104)는 그래픽 동작, 및 예를 들어 특히 병렬 처리에 적합할 수 있는 다른 동작과 같은 선택된 기능을 위한 명령 및 프로그램을 실행한다. 일반적으로, APD(104)는 픽셀 동작, 기하학적 연산과 같은 그래픽 파이프라인 동작을 실행하고 이미지를 디스플레이로 렌더링하는데 종종 사용될 수 있다. 본 발명의 여러 실시예에서, APD(104)는 CPU(102)로부터 수신된 명령(command) 또는 인스트럭션(instruction)에 기초하여 연산(compute) 처리 동작을 더 실행할 수 있다.
예를 들어, 명령(command)은 ISA에서 한정되지 않고 주어진 ISA 또는 고유한 하드웨어 부품으로부터 인스트럭션 세트에 의해 통상 달성되지 않는 특정 인스트럭션(instruction)으로 고려될 수 있다. 명령은 디스패치 프로세서, 명령 프로세서, 또는 네트워크 제어기와 같은 특별 프로세서에 의해 실행될 수 있다. 한편, 인스트럭션은 예를 들어 컴퓨터 아키텍처 내 프로세서의 단일 동작으로 고려될 수 있다. 일례에서, ISA의 2개의 세트를 사용할 때, 일부 인스트럭션은 x86 프로그램을 실행하는데 사용되고 일부 인스트럭션은 APD/GPU 연산 유닛에서 커널을 실행하는데 사용된다.
예시적인 실시예에서, CPU(102)는 APD(104)에 선택된 명령을 전송한다. 이들 선택된 명령은 그래픽 명령과, 병렬 실행을 따르는 다른 명령을 포함할 수 있다. 연산 처리 명령을 더 포함할 수 있는 이 선택된 명령은 CPU(102)와는 실질적으로 독립적으로 실행될 수 있다.
APD(104)는 하나 이상의 단일 명령 다수의 데이터(SIMD) 처리 코어를 포함하나 이로 제한되지 않는 자기 자신의 연산 유닛(미도시)을 포함할 수 있다. 본 명세서에 언급된 바와 같이, SIMD는 수리(math) 파이프라인이거나 프로그래밍 모델이고, 여기서 커널은 자기 자신의 데이터와 공유 프로그램 카운터를 각각 구비하는 다수의 처리 요소에서 동시에 실행된다. 모든 처리 요소는 엄격히 동일한 인스트럭션 세트를 실행한다. 예측을 사용하면 작업 항목이 각 발송된 명령에 관여하거나 관여하지 않게 된다.
일례에서, 각 APD(104) 연산 유닛은 하나 이상의 스칼라 및/또는 벡터 부동 소수점 유닛(floating-point unit) 및/또는 산술 및 로직 유닛(ALU: arithmetic and logic unit)을 포함할 수 있다. APD 연산 유닛은 또한 역 RMS 유닛(inverse-square root unit) 및 사인/코사인 유닛(sine/cosine unit)과 같은 특수 목적 처리 유닛(미도시)을 더 포함할 수 있다. 일례에서, APD 연산 유닛은 본 명세서에서 집합적으로 셰이더 코어(shader core)(122)라고 지칭된다.
하나 이상의 SIMD를 구비하면 일반적으로 그래픽 처리에 공통인 것과 같은 데이터-병렬 작업을 실행하는데 APD(104)가 이상적으로 적합하게 된다.
픽셀 처리와 같은 일부 그래픽 파이프라인 동작, 및 다른 병렬 연산 동작은 동일한 명령 스트림이나 연산 커널이 입력 데이터 요소의 스트림이나 집합에 수행되는 것을 요구할 수 있다. 동일한 연산 커널의 각 인스턴스화(instantiation)는 이 데이터 요소를 병렬 처리하기 위하여 셰이더 코어(122)에 있는 다수의 연산 유닛에 동시에 실행될 수 있다. 본 명세서에 언급된 바와 같이, 예를 들어, 연산 커널은 프로그램에 선언되고 APD/GPU 연산 유닛에서 실행되는 인스트럭션을 포함하는 함수(function)이다. 이 함수는 또한 커널, 셰이더, 셰이더 프로그램 또는 프로그램이라고도 지칭된다.
하나의 예시적인 실시예에서, 각 연산 유닛(예를 들어, SIMD 처리 코어)은 입력 데이터를 처리하도록 특정 작업 항목의 각 인스턴스화를 실행할 수 있다. 작업 항목은 명령에 의해 디바이스에서 호출되는 커널의 병렬 실행의 집합 중 하나이다. 작업 항목은 연산 유닛에서 실행되는 작업 그룹의 일부로서 하나 이상의 처리 요소에 의해 실행될 수 있다.
작업 항목이 전체 ID와 국부 ID에 의해 집합 내에서 다른 실행과 구별된다. 일례에서, 단일 SIMD 엔진에서 동시에 실행되는 작업 그룹에 있는 작업 항목의 서브세트는 웨이브프론트(wavefront)(136)라고 지칭될 수 있다. 웨이브프론트의 폭은 SIMD 엔진의 하드웨어의 특성이다. 본 명세서에 언급된 바와 같이, 작업 그룹은 단일 연산 유닛에서 실행되는 관련된 작업 항목의 집합이다. 이 그룹에 있는 작업 항목은 동일한 커널을 실행하고 국부 메모리와 작업 그룹 배리어(barrier)를 공유한다.
작업 그룹으로부터 모든 웨이브프론트는 동일한 SIMD 엔진에서 실행된다. 웨이브프론트를 통한 인스트럭션은 한번에 하나씩 발송되고, 모든 작업 항목이 동일한 제어 흐름을 따를 때, 각 작업 항목은 동일한 프로그램을 실행한다. 실행 마스크 및 작업 항목 예측은 웨이브프론트 내 제어 흐름을 발산하는데 사용되는데, 여기서 각 개별 작업 항목은 커널을 통해 사실상 유니크한 코드 경로를 취할 수 있다. 부분적으로 식재된 웨이브프론트는 작업 항목의 전체 세트가 웨이브프론트 시작 시간에 이용가능하지 않을 때 처리될 수 있다. 웨이브프론트는 또한 워프(warp), 벡터(vector), 또는 쓰레드(thread)라고도 언급될 수 있다.
명령은 웨이브프론트에 대해 한번에 하나씩 발송될 수 있다. 모든 작업 항목이 동일한 제어 흐름을 따를 때, 각 작업 항목은 동일한 프로그램을 실행할 수 있다. 일례에서, 실행 마스크 및 작업 항목 예측은 각 개별 작업 항목이 커널 드라이버를 통해 유니크한 코드 경로를 사실상 취할 수 있는 발산하는 제어 흐름을 가능하게 하는데 사용된다. 부분적인 웨이브프론트는 전체 작업 항목 세트가 시작 시간에 이용가능하지 않을 때 처리될 수 있다. 예를 들어, 셰이더 코어(122)는 미리 결정된 수의 웨이브프론트(136)를 동시에 실행할 수 있는데, 여기서 각 웨이브프론트(136)는 미리 결정된 수의 작업 항목을 포함한다.
시스템(100)에서 APD(104)는 그래픽 메모리(130)와 같은 자기 자신의 메모리를 포함한다. 그래픽 메모리(130)는 APD(104)에서 연산 동안 사용하기 위해 국부 메모리를 제공한다. 셰이더 코어(122) 내에서 개별 연산 유닛(미도시)은 자기 자신의 국부 데이터 저장소(미도시)를 구비할 수 있다. 일 실시예에서, APD(104)는 메모리(106)에의 액세스뿐만 아니라 국부 그래픽 메모리(130)에의 액세스를 포함한다. 다른 실시예에서, APD(104)는 APD(104)에 직접 부착되고 메모리(106)와는 별도로 부착된 동적 랜덤 액세스 메모리(DRAM: dynamic random access memory) 또는 다른 그러한 메모리(미도시)에의 액세스를 포함할 수 있다.
도시된 예에서, APD(104)는 하나 또는 n개의 명령 프로세서(CP: command processor)(124)를 더 포함한다. CP(124)는 APD(104)에서 처리를 제어한다. CP(124)는 메모리(106)에서 명령 버퍼(125)로부터 실행될 명령을 검색하며 APD(104)에서 이 명령의 실행을 조정한다.
일례에서, CPU(102)는 애플리케이션(111)에 기반한 명령을 적절한 명령 버퍼(125)에 입력한다. 본 명세서에 언급된 바와 같이, 애플리케이션은 CPU와 APD 내 연산 유닛에서 실행되는 프로그램 부분의 조합이다.
복수의 명령 버퍼(125)는 각각의 처리가 APD(104)에서 실행하도록 스케줄링되게 유지될 수 있다.
CP(124)는 하드웨어, 펌웨어, 또는 소프트웨어, 또는 이들의 조합으로 구현될 수 있다. 일 실시예에서, CP(124)는 스케줄링 로직을 포함하는 로직을 구현하는 마이크로코드를 가지는 감소된 인스트럭션 세트 컴퓨터(RISC: reduced instruction set computer) 엔진으로 구현된다.
APD(104)는 하나 또는 (n)개의 디스패치 제어기(DC: dispatch controller)(126)를 더 포함한다. 본 출원에서, 디스패치 라는 용어는 연산 유닛의 세트에서 작업 그룹 세트의 커널의 실행 시작을 개시하는 문맥 상태(context state)를 사용하는 디스패치 제어기에 의해 실행되는 명령을 말한다. DC(126)는 셰이더 코어(122)에서 작업 그룹을 개시하는 로직을 포함한다. 일부 실시예에서, DC(126)는 CP(124)의 일부로서 구현될 수 있다.
시스템(100)은 APD(104)에서 실행하기 위한 실행 리스트(150)로부터 처리를 선택하는 하드웨어 스케줄러(HWS: hardware scheduler)(128)를 더 포함한다. HWS(128)는 라운드 로빈 방법, 우선순위 레벨을 사용하거나 또는 다른 스케줄링 정책에 기초하여 실행 리스트(150)로부터 처리를 선택할 수 있다. 예를 들어, 우선순위 레벨은 동적으로 결정될 수 있다. HWS(128)는 예를 들어 새로운 처리를 추가하고 실행 리스트(150)로부터 현존하는 처리를 삭제하는 것에 의해 실행 리스트(150)를 관리하는 기능(functionality)을 더 포함할 수 있다. HWS(128)의 실행 리스트 관리 로직은 실행 리스트 제어기(RLC: run list controller)라고 종종 지칭된다.
본 발명의 여러 실시예에서, HWS(128)가 RLC(150)로부터 처리의 실행을 개시할 때, CP(124)는 대응하는 명령 버퍼(125)로부터 명령을 검색하고 실행하기 시작한다. 일부 경우에, CP(124)는 CPU(102)로부터 수신된 명령에 대응하는 APD(104)에서 실행될 하나 이상의 명령을 생성할 수 있다. 일 실시예에서, CP(124)는 다른 성분과 함께 APD(104) 및/또는 시스템(100)의 자원의 이용을 개선하거나 최대화하는 방식으로 APD(104)에서 명령의 우선순위 및 스케줄링을 구현한다.
APD(104)는 인터럽트 생성기(146)에 액세스하거나 이를 포함할 수 있다. 인터럽트 생성기(146)는 페이지 폴트(page fault)와 같은 인터럽트 이벤트가 APD(104)에 의해 나타날 때 운영 시스템(108)을 인터럽트하도록 APD(104)에 의해 구성될 수 있다. 예를 들어, APD(104)는 IOMMU(116) 내 인터럽트 생성 로직에 의존하여 전술한 페이지 폴트 인터럽트를 생성할 수 있다.
APD(104)는 셰이더 코어(122) 내에서 동시에 실행되는 처리를 선취하는 선취 및 문맥 스위치 로직(120)을 더 포함할 수 있다. 문맥 스위치 로직(120)은 예를 들어 처리를 중지하고 그 현재 상태(예를 들어, 셰이더 코어(122) 상태 및 CP(124) 상태)를 저장하는 기능을 포함한다.
본 명세서에 언급된 바와 같이, 상태 라는 용어는 초기 상태, 중간 상태 및 최종 상태를 포함할 수 있다. 초기 상태는 기계가 프로그램에 따라 입력 데이터 세트를 처리하여 출력 데이터 세트를 생성하는 시작점이다. 예를 들어 처리가 순방향 진행을 하게 하는 여러 지점에서 저장될 필요가 있는 중간 상태가 있을 수 있다. 이 중간 상태는 일부 다른 처리에 의해 인터럽트될 때 차후에 계속 실행을 허용하기 위해 종종 저장된다. 출력 데이터 세트의 일부로 기록될 수 있는 최종 상태가 또한 있다.
선취 및 문맥 스위치 로직(120)은 다른 처리를 APD(104)로 문맥 스위칭하는 로직을 더 포함할 수 있다. 다른 처리를 APD(104)에서 실행되는 것으로 문맥 스위칭하는 기능은 예를 들어 APD(104)에서 실행되는 CP(124)와 DC(126)를 통해 처리를 인스턴스화하고 이 처리에 대해 이전에 저장된 상태를 복원하며 그 실행을 시작하는 것을 포함할 수 있다.
메모리(106)는 DRAM(미도시)과 같은 비 영구적인 메모리를 포함할 수 있다. 메모리(106)는 예를 들어, 애플리케이션이나 다른 처리 로직의 부분의 실행 동안 처리 로직 인스트럭션, 상수값, 및 변수값을 저장할 수 있다. 예를 들어, 일 실시예에서, CPU(102)에서 하나 이상의 동작을 수행하는 제어 로직의 부분들은 CPU(102)에 의한 동작의 각 부분의 실행 동안 메모리(106) 내에 상주할 수 있다. 본 명세서에 사용된"처리 로직" 또는 "로직"이라는 용어는 제어 흐름 명령, 연산 수행 명령, 및 자원에 연관된 액세스 명령을 나타낸다.
실행 동안, 각 애플리케이션, 운영 시스템 함수, 처리 로직 명령, 및 시스템 소프트웨어는 메모리(106)에 상주할 수 있다. 운영 시스템(108)에 기본적인 제어 로직 명령은 일반적으로 실행 동안 메모리(106)에 상주한다. 예를 들어, KMD(110)와 소프트웨어 스케줄러(112)를 포함하는 다른 소프트웨어 명령이 또한 시스템(100)의 실행 동안 메모리(106)에 상주할 수 있다.
이 예에서, 메모리(106)는 APD(104)에 명령을 송신하도록 CPU(102)에 의해 사용되는 명령 버퍼(125)를 포함한다. 메모리(106)는 처리 리스트와 처리 정보(예를 들어, 활성 리스트(152)와 처리 제어 블록(154))를 더 포함한다. 이들 리스트 및 정보는 CPU(102)에서 실행되는 스케줄링 소프트웨어에 의해 사용되어 스케줄링 정보를 APD(104) 및/또는 관련된 스케줄링 하드웨어에 전달한다. 메모리(106)에 액세스는 메모리(106)에 연결된 메모리 제어기(140)에 의해 관리될 수 있다. 예를 들어, CPU(102)로부터 또는 다른 디바이스로부터 메모리(106)를 판독하거나 이 메모리에 기록하는 요청은 메모리 제어기(140)에 의해 관리된다.
시스템(100)의 다른 측면을 더 참조하면, IOMMU(116)는 다수 문맥의 메모리 관리 유닛이다.
본 명세서에 사용된 바와 같이 문맥(종종 처리라고도 언급됨)은 커널이 실행되는 환경과, 동기화와 메모리 관리가 한정되는 범위로 고려될 수 있다. 문맥은 디바이스 세트, 이들 디바이스에 액세스가능한 메모리, 대응하는 메모리 특성, 및 메모리 객체에 대한 동작이나 커널(들)의 실행을 스케줄링하는데 사용되는 하나 이상의 명령 큐(command-queue)를 포함한다. 한편, 처리는 컴퓨터 상에서 실행되는 처리를 생성하는 애플리케이션을 위한 프로그램의 실행인 것으로 고려될 수 있다. 운영 시스템은 프로그램이 실행하는 데이터 레코드 및 가상 메모리 어드레스 공간을 생성할 수 있다. 메모리 및 프로그램의 실행의 현재 상태는 처리라고도 언급될 수 있다. 운영 시스템은 처리가 초기 상태로부터 최종 상태로 메모리에서 동작하는 작업을 스케줄링할 수 있다.
도 1a에 도시된 예를 더 참조하면, IOMMU(116)는 APD(104)를 포함하는 디바이스에 대한 메모리 페이지 액세스를 위한 가상 어드레스-물리적 어드레스의 변환(virtual to physical address translation)을 수행하는 로직을 포함한다. IOMMU(116)는 예를 들어 APD(104)와 같은 디바이스에 의해 페이지 액세스가 페이지 폴트를 초래할 때 인터럽트를 생성하는 로직을 더 포함할 수 있다. IOMMU(116)는 변환 룩어사이드 버퍼(TLB: translation lookaside buffer)(118)를 더 포함하거나 이에 대한 액세스를 구비할 수 있다. TLB(118)는 일례로서 메모리(106)에 있는 데이터에 대해 APD(104)에 의해 이루어진 요청에 대해 논리적(즉, 가상) 메모리 어드레스를 물리적 메모리 어드레스로 변환을 가속시키기 위해 콘텐츠 어드레스 가능한 메모리(CAM: content addressable memory)에 구현될 수 있다.
도시된 예에서, 통신 인프라(109)는 필요에 따라 시스템(100)의 성분을 상호연결한다. 통신 인프라(109)는 주변 성분 상호연결(PCI: peripheral component interconnect) 버스, 확장된 PCI(extended PCI)(PCI-E) 버스, 개선된 마이크로제어기 버스 아키텍처(advanced microcontroller bus architecture)(AMBA) 버스, 가속 그래픽 포트(accelerated graphics port)(AGP), 또는 이러한 통신 인프라 중 하나 이상(미도시)을 포함할 수 있다. 통신 인프라(109)는 이더넷, 또는 유사한 네트워크, 또는 애플리케이션의 데이터 전달율 요구조건(data transfer rate requirement)을 충족하는 임의의 적절한 물리적 통신 인프라를 더 포함할 수 있다. 통신 인프라(109)는 컴퓨팅 시스템(100)의 성분을 포함하는 성분을 상호연결하는 기능을 포함한다.
이 예에서, 운영 시스템(108)은 시스템(100)의 하드웨어 성분을 관리하고 공통 서비스를 제공하는 기능을 포함한다. 여러 실시예에서, 운영 시스템(108)은 CPU(102)에서 실행되어 공통 서비스를 제공할 수 있다. 이 공통 서비스는 예를 들어, CPU(102)에서 실행하기 위한 애플리케이션의 스케줄링, 폴트 관리, 인터럽트 서비스, 및 다른 애플리케이션의 입력과 출력의 처리를 포함할 수 있다.
일부 실시예에서, 인터럽트 제어기(148)와 같은 인터럽트 제어기에 의해 생성된 인터럽트에 기초하여 운영 시스템(108)은 적절한 인터럽트 핸들링 루틴을 호출한다. 예를 들어, 페이지 폴트 인터럽트를 검출할 때 운영 시스템(108)은 인터럽트 핸들러를 호출하여 메모리(106)에 관련 페이지의 로딩을 개시하고 대응하는 페이지 테이블을 업데이트할 수 있다.
운영 시스템(108)은 운영 시스템으로 관리되는 커널 기능을 통해 하드웨어 성분에의 액세스가 중재되는 것을 보장하는 것에 의해 시스템(100)을 보호하는 기능을 더 포함할 수 있다. 사실상, 운영 시스템(108)은 애플리케이션(111)과 같은 애플리케이션이 유저 공간에서 CPU(102)에서 실행되는 것을 보장한다. 운영 시스템(108)은 애플리케이션(111)이 하드웨어 및/또는 입력/출력 기능에 액세스하기 위해 운영 시스템에 의해 제공되는 커널 기능을 호출하는 것을 더 보장한다.
예를 들어, 애플리케이션(111)은 CPU(102)에서 또한 실행되는 유저 연산을 수행하는 여러 프로그램이나 명령을 포함한다. 단일화 개념(unification concept)은 CPU(102)로 하여금 APD(104)에서 처리하기 위한 선택된 명령을 끊김없이 송신할 수 있게 한다. 이 단일화된 APD/CPU 프레임워크 하에서, 애플리케이션(111)으로부터 입력/출력 요청은 대응하는 운영 시스템의 기능을 통해 처리될 수 있다.
일례에서, KMD(110)는 CPU(102), 또는 CPU(102) 또는 다른 로직에서 실행되는 애플리케이션이 APD(104) 기능을 호출할 수 있게 하는 애플리케이션 프로그램 인터페이스(API: application program interface)를 구현한다. 예를 들어, KMD(110)는 CPU(102)로부터 명령 버퍼(125)로 명령을 인큐잉시키고(enqueue) 이 명령 버퍼로부터 APD(104)는 이 명령을 후속적으로 검색할 수 있다. 추가적으로, KMD(110)는 SWS(112)와 함께 APD(104)에서 실행되는 처리의 스케줄링을 수행할 수 있다. SWS(112)는 예를 들어 APD에서 실행되는 처리의 우선순위 리스트를 유지하는 로직을 포함할 수 있다.
본 발명의 다른 실시예에서, CPU(102)에서 실행되는 애플리케이션은 명령을 인큐잉시킬 때 KMD(110)를 완전히 바이패스(bypass)할 수 있다.
일부 실시예에서, SWS(112)는 APD(104)에서 실행되는 처리의 메모리(106)에 활성 리스트(152)를 유지한다. SWS(112)는 하드웨어에서 HWS(128)에 의해 관리되는 활성 리스트(152)에서 처리의 서브세트를 더 선택한다. APD(104)에서 각 처리를 실행하는데 관련된 정보는 CPU(102)로부터 처리 제어 블록(PCB: process control block)(154)을 통해 APD(104)로 전달된다.
애플리케이션, 운영 시스템, 및 시스템 소프트웨어를 위한 처리 로직은 궁극적으로 본 명세서에 설명된 본 발명의 측면을 구현하는 하드웨어 디바이스를 생성하도록 마스크작업/포토마스크의 생성을 통해 제조 공정을 구성할 수 있도록 C와 같은 프로그래밍 언어로 및/또는 Verilog, RTL, 또는 네트리스트와 같은 하드웨어 설명 언어(hardware description language)로 지정된 명령을 포함할 수 있다.
이 기술 분야에 통상의 지식을 가진 자라면 본 설명을 판독하는 것에 의해 연산 시스템(100)이 도 1a에 도시된 것보다 더 많거나 더 적은 수의 성분을 포함할 수 있다는 것을 이해할 수 있을 것이다. 예를 들어, 연산 시스템(100)은 하나 이상의 입력 인터페이스, 비휘발성 저장매체, 하나 이상의 출력 인터페이스, 네트워크 인터페이스, 및 하나 이상의 디스플레이 또는 디스플레이 인터페이스를 포함할 수 있다.
도 1b는 도 1a에 도시된 APD(104)의 보다 상세한 설명을 보여주는 일 실시예이다. 도 1b에서, CP(124)는 CP 파이프라인(124a, 124b, 124c)을 포함할 수 있다. CP(124)는 도 1a에 도시된 명령 버퍼(125)로부터 입력으로 제공된 명령 리스트를 처리하도록 구성될 수 있다. 도 1b의 예시적인 동작에서, CP 입력 0(124a)은 그래픽 파이프라인(graphics pipeline)(162)으로 명령을 구동하는 일을 담당한다. CP 입력 1 및 2(124b, 124c)는 연산 파이프라인(160)에 명령을 전달한다. 또한, HWS(128)의 동작을 제어하는 제어기 메커니즘(166)이 제공된다.
도 1b에서, 그래픽 파이프라인(162)은 본 명세서에서 정렬된 파이프라인(164)라고 지칭된 블록 세트를 포함할 수 있다. 일례로서, 정렬된 파이프라인(164)은 정점 그룹 변환기(VGT: vertex group translator)(164a), 프리미티브 어셈블러(PA: primitive assembler)(164b), 스캔 변환기(SC: scan converter)(164c), 및 셰이더-엑스포트(shader-export), 렌더-백 유닛(SX/RB: render-back unit)(176)을 포함한다. 정렬된 파이프라인(164) 내 각 블록은 그래픽 파이프라인(162)에서 상이한 그래픽 처리 단계를 나타낼 수 있다. 정렬된 파이프라인(164)은 고정된 함수의 하드웨어 파이프라인일 수 있다. 그러나 본 발명의 사상과 범위 내에 있을 수 있는 다른 구현들이 사용될 수 있다.
소량의 데이터만이 그래픽 파이프라인(162)에 입력으로 제공될 수 있지만 이 데이터는 그래픽 파이프라인(162)으로부터 출력으로 제공되는 시간만큼 증폭된다. 그래픽 파이프라인(162)은 CP 파이프라인(124a)으로부터 수신된 작업 항목 그룹 내 범위를 통해 카운트하는 DC(166)를 더 포함한다. DC(166)를 통해 제출된 연산 작업은 그래픽 파이프라인(162)과 반동기적이다.
연산 파이프라인(160)은 셰이더 DC(168, 170)를 포함한다. DC(168, 170) 각각은 CP 파이프라인(124b, 124c)으로부터 수신된 작업 그룹 내 연산 범위를 통해 카운트하도록 구성된다.
도 1b에 도시된 DC(166, 168, 170)는 입력 범위를 수신하고 이 범위를 작업그룹으로 분할하고 이후 작업그룹을 셰이더 코어(122)로 전달한다.
그래픽 파이프라인(162)은 일반적으로 고정된 함수의 파이프라인이므로, 그 상태를 저장하고 복원하는 것은 어렵고, 그 결과 그래픽 파이프라인(162)은 문맥 스위칭하는 것이 어렵다. 그리하여 대부분의 경우에 본 명세서에 설명된 바와 같이 문맥 스위칭은 그래픽 처리 중에서 문맥 스위칭에 관한 것이 아니다. 그 예외는 문맥 스위칭될 수 있는 셰이더 코어(122)에서 그래픽 작업에 대한 것이다.
셰이더 코어(122)는 그래픽 파이프라인(162)과 연산 파이프라인(160)에 의해 공유될 수 있다. 셰이더 코어(122)는 웨이브프론트를 실행하도록 구성된 일반 프로세서일 수 있다.
일례에서, 연산 파이프라인(160) 내 모든 작업은 셰이더 코어(122) 내에서 처리된다. 셰이더 코어(122)는 프로그래밍가능한 소프트웨어 코어를 실행하고 상태 데이터와 같은 여러 형태의 데이터를 포함한다. 그러나, 연산 파이프라인(160)은 처리를 위해 그래픽 파이프라인(162)으로 작업을 송신하지 않는다. 그래픽 파이프라인(162)에서 작업의 처리가 완료된 후에 완료된 작업은 렌더백 유닛(render back unit)(176)을 통해 처리되는데, 이 렌더백 유닛은 깊이와 컬러 계산을 한 후에 최종 결과를 그래픽 메모리(130)에 기록한다.
후술된 바와 같이 본 발명은 소프트웨어, 하드웨어, 펌웨어, 및/또는 도면에 도시된 개체(entity)의 많은 다른 실시예로 구현될 수 있다는 것은 이 기술 분야에 통상의 지식을 가진 자에게는 명백할 것이다. 본 발명을 구현하는데 하드웨어의 전문화된 제어를 하는 실제 소프트웨어 코드는 본 발명을 제한하지 않는다. 따라서, 본 발명의 동작 거동은 본 발명에 제시된 상세 레벨로 주어진 실시예에 대해 변형과 변경이 가능하다는 이해와 함께 설명된다.
추가적으로, 그리고 이 기술 분야에 통상의 지식을 가진 자에게는 명백한 바와 같이, 본 발명의 여러 실시예를 시뮬레이션하고, 합성하고 및/또는 제조하는 것은 부분적으로 일반적인 프로그래밍 언어(예를 들어, C 또는 C++), Verilog HDL, VHDL, 알터라(Altera) HDL(AHDL) 등을 포함하는 하드웨어 설명 언어(HDL: hardware description language) 또는 다른 이용가능한 프로그래밍 및/또는 체계적 캡처 도구(예를 들어, 회로 캡처 도구)를 포함하는 컴퓨터 판독가능한 코드(전술된)를 사용하여 달성될 수 있다. 이 컴퓨터 판독가능한 코드는 반도체, 자기 디스크, 광 디스크(예를 들어, CD-ROM, DVD-ROM)를 포함하는 임의의 알려진 컴퓨터 사용가능한 매체로 그리고 컴퓨터 사용가능한(예를 들어, 판독가능한) 전송 매체(예를 들어, 반송파 또는 디지털, 광, 또는 아날로그 기반 매체를 포함하는 임의의 다른 매체)로 구현된 컴퓨터 데이터 신호로 배열될 수 있다.
그리하여, 코드는 인터넷과 인트라넷을 포함하는 통신 네트워크를 통해 전송될 수 있다. 전술된 시스템과 기술에 의해 달성된 기능 및/또는 이에 의해 제공된 구조는 프로그램 코드로 구현되어 집적 회로 제품의 일부로서 하드웨어로 변환될 수 있는 코어(예를 들어, APD 코어 및/또는 CPU 코어)로 표현될 수 있는 것으로 이해된다.
본 발명의 실시예는 프로그래머로 하여금 CPU와 APD 사이에 데이터의 처리를 끊김없이 전이하여 각각이 제공하는 최상의 속성(attribute)으로부터 이점을 제공하는 애플리케이션을 쓸 수 있게 한다. 단일화된 단일 프로그래밍 플랫폼은 유사성(parallelism)을 이용하는 언어, 프레임워크, 및 애플리케이션에서 개발하는데 강한 기초를 제공할 수 있다.
본 발명의 실시예는 프로그래머로 하여금 CPU와 APD 사이에 데이터의 처리를 끊김없이 전이하여 각각이 제공하는 최상의 속성으로부터 이점을 제공하는 애플리케이션을 쓸 수 있게 한다. 단일화된 단일 프로그래밍 플랫폼은 유사성을 이용하는 언어, 프레임워크, 및 애플리케이션에서 개발하는데 강한 기초를 제공할 수 있다.
도 2는 시스템 호출 요청을 위해 APD 와 CPU 사이에 최적화된 통신 처리의 예시적인 블록도(200)이다. 블록도(200)는 웨이브프론트(136), SIMD 벡터(208), 및 큐(210)를 포함한다.
웨이브프론트(136)는 본질적으로 셰이더 코어(122)에 의해 처리된다. 각 웨이브프론트는 다수의 작업 항목(204)을 포함한다. 각 작업 항목(204)은 처리할 작업이나 작업의 일부에 할당된다. 셰이더 코어(122)는 병렬로 그리고 동일한 인스트럭션 세트로 웨이브프론트(136)에서 작업 항목(204)을 처리한다. 그 결과, 웨이브프론트(136)에서 각 작업 항목(204)은 동시에 CPU(102)에 시스템 호출을 발송할 수 있다.
APD가 각 작업 항목으로부터 CPU로 시스템 호출 요청을 개별적으로 송신하는 종래 시스템과는 달리, APD(104)는 SIMD 벡터(206)를 사용하여 요청을 송신하여 시스템 호출 요청을 단일 데이터 구조로 그룹화한다. SIMD 벡터(206)는 SIMD 요소(208)를 포함한다. 각 SIMD 요소는 시스템 호출 데이터 구조를 포함한다. 시스템 호출 데이터 구조는 함수 선택기 파라미터(특정 시스템 호출 요청), 변수 리스트, 및 시스템 호출 요청의 결과를 APD(104)에 반환(return)하는 메모리 공간을 포함한다. 일 실시예에서, 예시적인 시스템 호출 데이터 구조가 본 명세서에 설명된다.
작업 항목(204)이 OS를 수반하는 처리를 요구할 때, APD(104)는 대응하는 SIMD 요소(208)에서 각 작업 항목(204)으로부터 시스템 호출 요청을 저장한다. 예를 들어, 도 1에서, 작업 항목(WI1)은 SIMD 요소(208)에 시스템 호출(SC1)을 저장하고, 작업 항목(WI1)은 다른 SIMD 요소(208)에 시스템 호출(SC2)을 저장하며, 이와 같이 계속된다. APD(104)는 각 작업 항목(204)으로부터 시스템 호출 요청의 유형을 함수 선택기 파라미터에 저장한다. APD(104)는 필요한 경우 변수 리스트 구획(section)에 변수 리스트를 더 삽입할 수 있다. APD(104)는 다수의 웨이브프론트(136)로부터 작업 항목으로부터 시스템 호출을 하나의 SIMD 벡터(206)에 더 저장할 수 있다.
큐(210)는 높은 우선순위의 공중 메모리 큐(public memory queue)이다. 큐는 선입선출("FIFO": first-in, first-out) 원리에 따라 동작한다. 공중 큐는 CPU(102) 및 APD(104) 프로세서에 보이는 큐이다. 즉, 큐에 제일 먼저 인큐잉된 작업 부하는 큐에서 제일 먼저 디큐잉되는 작업 부하이다. 추가적으로, 이 기술 분야에 통상의 지식을 가진 자라면 큐 데이터 구조를 사용하는 예는 예를 들어 주어진 것이고 발명을 제한하는 것이 아니며 다른 데이터 구조도 사용될 수 있다는 것을 이해할 수 있을 것이다.
APD(104)는 SIMD 벡터(206)를 큐(210)에 인큐잉한다. APD(104)는 SIMD 벡터(206)를 인큐잉한 후, 일 실시예에서 APD는 스톨하고 CPU(102)가 SIMD 벡터(206)를 처리하기(즉, SIMD 벡터(206)를 수신하고, 내부에 저장된 시스템 호출을 처리하고, 각 시스템 호출의 결과를 APD(104)에 전송하기)를 기다린다. 다른 실시예에서, APD(104)가 큐(210)를 인큐잉한 후에 APD(104)는 메모리(106)에 웨이브프론트의 상태를 저장하며 다른 웨이브프론트를 처리하기 시작한다. APD(104)가 처리가 완료된 신호를 CPU(102)로부터 수신하면, APD(104)는 메모리(106)로부터 원래의 웨이브프론트(136)를 검색하고 처리를 복원한다.
CPU(102)는 다른 처리에 앞서 높은 우선순위 큐로부터 수신된 작업을 처리한다. 따라서, CPU(102)가 큐(210)와 같은 높은 우선순위의 큐로부터 요청을 수신할 때, 이 CPU는 현재 처리를 저장하고 수신된 요청을 처리한다. 본 명세서에 설명된 높은 우선순위의 공중 큐를 사용하는 예는 예를 들어 제공된 것이고 발명을 제한하는 것이 아니며 이 기술 분야에 통상의 지식을 가진 자라면 다른 메모리 저장 구조도 사용될 수 있다는 것을 이해할 수 있을 것이다.
CPU(102)는 큐(210)로부터 SIMD 벡터(206)를 디큐잉하고 SIMD 요소(208)를 처리하기 시작한다. CPU(102)는 OS를 호출하고 각 SIMD 요소(208)에서 함수 선택기 파라미터에서 저장된 시스템 호출 요청을 처리하기 시작한다. CPU(102)는 필요한 경우 SIMD 요소(208)에 저장된 변수 리스트를 더 판독한다. CPU(102)가 각 시스템 호출 요청을 완료한 후에 CPU(102)는 각 SIMD 요소(208)에 할당된 메모리 어드레스에 결과를 기록한다.
CPU(102)가 모든 SIMD 요소(208)의 처리를 완료한 후, 일 실시예에서 CPU는 큐(210)에 SIMD 벡터(206)를 인큐잉하고 SIMD 벡터(206)를 APD(104)에 반환한다. 일반적으로, CPU(102)는 APD(104)에 보이는 메모리 큐(210)에 SIMD 벡터(206)를 인큐잉한다.
다른 실시예에서, CPU(102)가 SIMD 벡터(206)의 처리를 완료한 때 CPU는 신호를 세마포어 메커니즘(semaphore mechanism)을 사용하여 APD(104)에 송신한다. 이 기술 분야에 통상의 지식을 가진 자라면 CPU(102)가 요청된 시스템 호출의 처리를 완료할 것을 기다리는 동안 APD(104)는 다른 웨이브프론트를 처리하지 못하게 하는 것을 세마포어 메커니즘이 보장하는 것을 이해할 수 있을 것이다.
APD(104)가 SIMD 벡터(206)를 디큐잉하거나 시스템 호출이 처리되었다는 신호를 CPU(102)로부터 수신한 후에 APD(104)는 요청된 시스템 호출의 결과를 사용하여 웨이브프론트(136)를 처리하기 시작한다. CPU가 SIMD 벡터(206)를 처리하는 것을 기다리는 동안 APD(104)가 다른 웨이브프론트를 처리할 수 있는 실시예에서, APD(104)는 연속적인 처리 전에 APD 메모리(130)로부터 웨이브(136)를 검색한다.
시스템 호출의 일례는 malloc() 함수와 같은 메모리에 대한 요청일 수 있다. malloc() 요청은 시스템 메모리(106)에서 특정 처리 또는 함수에 메모리를 할당한다. APD(104)는 OS에 액세스하지 않으므로 APD(104)는 malloc() 요청을 처리할 수 없다. 그러므로, APD(104)는 malloc() 요청을 위한 시스템 호출을 CPU(102)에 송신한다.
APD(104)는 웨이브프론트(136)에서 작업 항목(204)이 메모리를 요청할 때 malloc() 요청을 한다. APD가 각 작업 항목으로부터 CPU에 별개의 malloc() 요청을 송신하는 종래의 시스템과 달리, APD(104)는 웨이브프론트(136)에서 각 작업 항목(204)을 위한 malloc() 요청을 포함하는 하나의 SIMD 벡터(206)를 CPU(102)에 송신한다. APD(104)는 각 작업 항목을 위한 malloc() 요청에 필요한 정보를 대응하는 SIMD 요소(208)에 저장한다. 필요한 정보는 malloc() 함수에 대한 메모리 어드레스인 함수 선택기, CPU(102)가 각 작업 항목(204)에 할당할 필요가 있는 메모리 사이즈를 포함하는 변수 리스트, CPU(102)가 할당된 공간의 어드레스를 저장하는 빈 파라미터를 포함한다.
각 작업 항목이 각 시스템 호출을 처리하는데 필요한 malloc() 파라미터를 포함하는 경우, APD(104)는 본 명세서에 설명된 바와 같이 큐(210)에 SIMD 벡터(206)를 인큐잉한다. CPU(102)는 큐(210)로부터 SIMD 벡터(206)를 검색하고 SIMD 요소(208)를 처리하기 시작한다. CPU(102)가 SIMD 벡터(206)에 있는 malloc() 요청을 처리하면, CPU(102)는 OS에 하나의 호출을 한다. CPU(102)는 OS에 대한 호출에서 각 작업 항목(204)에 메모리를 할당하도록 진행한다. 이후, CPU(102)는 SIMD 요소(208)에서 각 작업 항목(204)에 할당된 메모리 공간에 어드레스를 저장한다. CPU(102)가 모든 시스템 호출 요청을 완료한 후에 CPU(102)는 SIMD 벡터(206)를 APD(104)에 반환한다.
SIMD 요소(208)는 시스템 호출을 CPU(102)에 전달하는 다수의 구조를 포함한다. 일 실시예에서, 각 SIMD 요소(208)는 함수 선택기 파라미터, 변수 리스트, 및 시스템 호출의 결과를 저장하는 데이터 구조를 포함할 수 있다. 비 제한적인 예에서, 예시적인 데이터 구조는 다음과 같이 기술된다:
Figure 112013059628985-pct00001
MyTask 구조는 APD(104)에 대한 명령을 처리하는 MyPtr myAPDCodePtr 포인터, CPU(102)에 대한 명령을 처리하는 MyPtr myCPUCodePtr 포인터, 및 데이터 포인터 myPtr_myDataPtr를 포함한다. 작업 항목(204)이 CPU(102)로부터 시스템 호출을 요청하면, myAPDCodePtr 및 myCPUCodePtr 포인터는 특정 시스템 호출 함수의 메모리 어드레스를 지시한다. mtDataPtr 포인터는 변수 리스트에 대한 파라미터와, 각 시스템 호출의 결과를 포함하는 메인 메모리(106)에 있는 메모리 어드레스에 대한 포인터를 포함한다.
추가적으로, MyTask 구조는 MyNotification mechanism을 포함한다. APD(104)는 MyTask가 처리를 요구하는 큐(110)에 존재한다는 것을 CPU(102)에 통지하는 통지 메터니즘을 사용한다. 유사하게, CPU(102)는 CPU(102)가 시스템 호출의 처리를 완료하였다는 것을 APD(104)에 통지하는 MyNotification을 사용한다.
도 3은 SIMD 벡터(206)를 사용하여 시스템 호출 요청을 처리하는 시스템(100)의 예시적인 흐름도(200)이다. 단계(302)에서, APD(104)는 웨이브프론트(136)에서 작업 항목(204)이 CPU(102)를 사용하여 처리를 요구하는 시스템 호출을 요청할 때 SIMD 벡터(206)를 초기화한다. 단계(304)에서, 각 작업 항목(204)은 본 명세서에 설명된 바와 같이 시스템 호출 요청을 처리하는데 필요한 정보를 대응하는 SIMD 요소(208)에 저장한다. 단계(306)에서, APD(104)는 큐(210)에 SIMD 벡터(206)를 인큐잉한다. 단계(308)에서, CPU(102)는 큐(210)로부터 SIMD 벡터(206)를 디큐잉한다. CPU(102)가 SIMD 벡터(206)를 디큐잉한 후에 CPU(102)는 OS를 호출하며 각 SIMD 요소(208)에서 시스템 호출을 처리하기 시작한다.
단계(310)에서, CPU(102)는 각 시스템 호출의 결과를 SIMD 요소(208)에 기록한다. 이 기술 분야에 통상의 지식을 가진 자라면, 단계(310)가 단계(308)와 함께 수행될 수 있다는 것을 이해할 수 있을 것이다. 단계(312)에서, CPU(102)는 시스템 호출이 처리되었다는 것을 APD(104)에 통지한다. 일 실시예에서, CPU(102)는 APD(104)에 보이는 큐(210)를 사용하여 APD(104)에 다시 SIMD 벡터(206)를 송신한다. 다른 실시예에서, CPU(102)는 APD(104)를 세마포어를 사용하여 나타낸다. 단계(314)에서, APD(104)는 큐(210)로부터 SIMD 벡터(206)를 디큐잉하며 웨이브프론트(136)를 계속 처리한다.
본 발명의 여러 측면은 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합으로 구현될 수 있다. 예를 들어, 도 3의 흐름도(300)로 예시된 방법은 도 1의 단일화된 컴퓨팅 시스템(100)으로 구현될 수 있다. 본 발명의 여러 실시예는 이 예시적인 단일화된 컴퓨팅 시스템(100)에 비춰 설명된다. 이 기술 분야에 통상의 지식을 가진 자에게는 다른 컴퓨터 시스템 및/또는 컴퓨터 아키텍처를 사용하여 본 발명을 구현할 수 있다는 것은 명백할 것이다.
본 문서에서, "컴퓨터 프로그램 매체" 및 "컴퓨터 사용가능한 매체"라는 용어는 일반적으로 이동식 저장 유닛 또는 하드 디스크 드라이브와 같은 매체를 말하는 데 사용된다. 컴퓨터 프로그램 매체 및 컴퓨터 사용가능한 매체는 메모리 반도체(예를 들어, DRAM 등)일 수 있을 시스템 메모리(106)와 그래픽 메모리(130)와 같은 메모리를 또한 말할 수 있다. 이들 컴퓨터 프로그램 제품은 단일화된 컴퓨팅 시스템(100)에 소프트웨어를 제공하는 수단이다.
본 발명은 또한 임의의 컴퓨터 사용가능한 매체에 저장된 소프트웨어를 포함하는 컴퓨터 프로그램 제품에 관한 것이다. 이러한 소프트웨어는 하나 이상의 데이터 처리 디바이스에서 실행될 때 데이터 처리 디바이스(들)로 하여금 본 명세서에 설명된 바와 같이 동작하게 하거나 또는 전술된 바와 같이 본 명세서에 설명된 본 발명의 실시예를 구현하도록 컴퓨팅 디바이스(예를 들어, ASIC, 또는 프로세서)를 합성하거나 및/또는 제조할 수 있게 한다. 본 발명의 실시예는 현재 알려지거나 미래에 알려진 임의의 컴퓨터 사용하거나 판독가능한 매체를 사용한다. 컴퓨터 사용가능한 매체의 예로는 1차 저장 디바이스(예를 들어, 임의의 유형의 랜덤 액세스 메모리), 2차 저장 디바이스(예를 들어, 하드 드라이브, 플로피 디스크, CD ROMS, ZIP 디스크, 테이프, 자기 저장 디바이스, 광 저장 디바이스, MEMS, 나노기술 저장 디바이스 등) 및 통신 매체(예를 들어, 유선 및 무선 통신 네트워크, LAN(local area network), WAN(wide area network), 인트라넷 등)를 포함하나 이로 제한되지 않는다.
본 발명의 여러 실시예가 전술되었으나, 본 발명의 이들 실시예는 예를 들어 제한 없이 제공된 것인 것으로 이해된다. 이 기술 분야에 통상의 지식을 가진 자라면 형태와 상세에서 여러 변경이 첨부된 청구범위에 한정된 본 발명의 사상과 범위를 벗어남이 없이 이루어질 수 있다는 것을 이해할 수 있을 것이다. 본 발명은 이들 예로만 제한되지 않는 것으로 이해된다. 본 발명은 본 명세서에 설명된 바와 같이 동작하는 임의의 요소에 적용가능하다. 따라서, 본 발명의 폭과 범위는 전술한 예시적인 실시예들 중 어느 하나로 제한되어서는 안 되며, 이하의 특허청구범위와 그 균등물에 따라서만 한정되어야 한다.

Claims (22)

  1. 적어도 하나의 프로세서를 갖는 컴퓨터 시스템에서 실행되는 방법으로서,
    단일 명령 복수 데이터(Single Instruction Multiple Data, SIMD)를 처리하는 SIMD 프로세서에서 복수의 작업 항목(work item)들의 각각의 작업 항목에 대한 명령을 실행하는 단계와;
    상기 명령은 상기 복수의 작업 항목들의 각각의 작업 항목에 대해 시스템 호출(system call)을 수행하도록 하는 시스템 호출 요청(system call request)을 촉발시키는 명령임을 결정하는 단계와, 여기서
    상기 시스템 호출 요청은 상기 SIMD 프로세서와는 다른 프로세서에 의해 처리될 요청이고,
    상기 SIMD 프로세서와는 다른 상기 프로세서는 운영 시스템(Operating System, OS)을 실행시켜 상기 시스템 호출 요청을 처리하도록 되어 있는 프로세서이며;
    각각의 작업 항목에 대해 시스템 호출을 수행하도록 하는 상기 시스템 호출 요청이 촉발되는 것에 응답하여, 각각의 작업 항목에 대한 상기 시스템 호출 요청을 처리하기 위한 정보(information)를, 대응하는 SIMD 요소(SIMD element) 내에 저장하는 단계와, 여기서
    상기 SIMD 요소들은 SIMD 벡터(SIMD vector)로서 그룹화(grouping)되고; 그리고
    상기 SIMD 요소들 내에 저장된 각각의 시스템 호출 요청을 실행하기 위해, 상기 운영 시스템(OS)을 실행시켜 상기 시스템 호출 요청을 처리하도록 되어 있는 상기 프로세서로 상기 SIMD 벡터를 전송하는 단계를 포함하는 것을 특징으로 하는 방법.
  2. 제1항에 있어서,
    상기 SIMD 벡터는 상기 운영 시스템(OS)을 실행시켜 상기 시스템 호출 요청을 처리하도록 되어 있는 상기 프로세서에서 볼 수 있는 우선순위가 높은 큐(high-priority queue) 내에 인큐잉(enqueueing)되는 것을 특징으로 하는 방법.
  3. 제1항에 있어서,
    각각의 SIMD 요소는, 함수 선택기(function selector), 변수 리스트(argument list), 그리고 상기 시스템 호출 요청의 결과를 위한 메모리 공간(memory space)을 포함하는 것을 특징으로 하는 방법.
  4. 제1항에 있어서,
    상기 SIMD 벡터는 복수의 작업 항목들을 갖는 복수의 웨이브프론트(wavefront)들로부터의 시스템 호출 요청들을 포함하는 것을 특징으로 하는 방법.
  5. 적어도 하나의 프로세서를 갖는 컴퓨터 시스템에서 실행되는 방법으로서,
    운영 시스템(OS)을 실행시켜 시스템 호출 요청을 처리하도록 되어 있는 프로세서에서 단일 명령 복수 데이터(SIMD) 벡터를 수신하는 단계와, 여기서
    상기 SIMD 벡터는 복수의 작업 항목들을 갖는 웨이브프론트 내의 각각의 작업 항목으로부터의 시스템 호출 요청에 대응하는 SIMD 요소들을 포함하고,
    상기 SIMD 벡터는 단일 명령 복수 데이터(SIMD)를 처리하는 SIMD 프로세서에서 실행되는 명령에 응답하여 발생되고,
    상기 명령은 상기 시스템 호출 요청을 촉발시키고,
    상기 SIMD 프로세서는 상기 운영 시스템(OS)을 실행시켜 시스템 호출 요청을 처리하도록 되어 있는 상기 프로세서와는 다른 것이며;
    각각의 SIMD 요소 내의 각각의 시스템 호출 요청을 실행하는 단계와; 그리고
    각각의 시스템 호출 요청의 결과를 상기 웨이브프론트 내의 각각의 작업 항목으로 전송하는 단계를 포함하는 것을 특징으로 하는 방법.
  6. 제5항에 있어서,
    상기 수신하는 단계는 상기 운영 시스템(OS)을 실행시켜 시스템 호출 요청을 처리하도록 되어 있는 상기 프로세서에서 볼 수 있는 우선순위가 높은 큐 내에 상기 SIMD 벡터를 수신하는 것을 포함하는 것을 특징으로 하는 방법.
  7. 메모리 및 중앙 처리 유닛(Central Processing Unit, CPU)을 포함하는 시스템으로서,
    상기 메모리는, 복수의 작업 항목들을 갖는 웨이브프론트 내의 각각의 작업 항목에 대한 시스템 호출 요청을 처리하기 위한 정보를, 대응하는 단일 명령 복수 데이터(SIMD) 요소 내에 저장하도록 되어 있고, 여기서
    상기 SIMD 요소들은 SIMD 벡터로서 그룹화되고,
    상기 SIMD 벡터는 단일 명령 복수 데이터(SIMD)를 처리하는 SIMD 프로세서에서 상기 웨이브프론트 내의 각각의 작업 항목에 대한 명령이 실행되는 것에 응답하여 발생되고,
    상기 명령은 상기 웨이브프론트 내의 각각의 작업 항목에 대한 시스템 호출 요청이 발생되게 하며,
    상기 SIMD 프로세서와는 다른 상기 중앙 처리 유닛(CPU)은,
    상기 SIMD 벡터를 수신하도록 되어 있고, 그리고
    상기 SIMD 요소들 내에 저장된 각각의 시스템 호출 요청을 실행하도록 되어 있는 것을 특징으로 하는 시스템.
  8. 제7항에 있어서,
    상기 메모리는 상기 SIMD 벡터를 인큐잉시키도록 되어 있는 우선순위가 높은 큐이고, 상기 우선순위가 높은 큐는 상기 CPU에서 볼 수 있는 것을 특징으로 하는 시스템.
  9. 제7항에 있어서,
    각각의 SIMD 요소는, 함수 선택기, 변수 리스트, 그리고 상기 시스템 호출 요청의 결과를 위한 메모리 공간을 포함하는 것을 특징으로 하는 시스템.
  10. 제8항에 있어서,
    상기 SIMD 벡터는 복수의 작업 항목들을 갖는 복수의 웨이브프론트들로부터의 시스템 호출 요청들을 포함하는 것을 특징으로 하는 시스템.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 컴퓨터 저장 디바이스로서, 상기 컴퓨터 저장 디바이스에는 명령들이 기록되어 있고, 상기 명령들은 적어도 하나의 프로세서를 갖는 컴퓨팅 디바이스에 의해 실행될 때, 상기 컴퓨팅 디바이스로 하여금 동작들을 수행하도록 하며, 상기 동작들은,
    단일 명령 복수 데이터(SIMD)를 처리하는 SIMD 프로세서에서 복수의 작업 항목들의 각각의 작업 항목에 대한 명령을 실행하는 것과;
    상기 복수의 작업 항목들의 각각의 작업 항목에 대한 명령은 상기 복수의 작업 항목들의 각각의 작업 항목에 대해 시스템 호출을 수행하도록 하는 시스템 호출 요청을 촉발시키는 명령임을 결정하는 것과, 여기서
    상기 시스템 호출 요청은 상기 SIMD 프로세서와는 다른 프로세서에 의해 처리될 요청이고,
    상기 SIMD 프로세서와는 다른 상기 프로세서는 운영 시스템(OS)을 실행시켜 상기 시스템 호출 요청을 처리하도록 되어 있는 프로세서이며;
    각각의 작업 항목에 대해 시스템 호출을 수행하도록 하는 상기 시스템 호출 요청이 촉발되는 것에 응답하여, 각각의 작업 항목에 대한 상기 시스템 호출 요청을 처리하기 위한 정보를, 대응하는 SIMD 요소 내에 저장하는 것과, 여기서
    상기 SIMD 요소들은 SIMD 벡터로서 그룹화되고; 그리고
    상기 SIMD 요소들 내에 저장된 각각의 시스템 호출 요청을 실행하기 위해, 상기 운영 시스템(OS)을 실행시켜 상기 시스템 호출 요청을 처리하도록 되어 있는 상기 프로세서로 상기 SIMD 벡터를 전송하는 것을 포함하는 것을 특징으로 하는 컴퓨터 저장 디바이스.
  18. 제17항에 있어서,
    상기 SIMD 벡터는 상기 운영 시스템(OS)을 실행시켜 상기 시스템 호출 요청을 처리하도록 되어 있는 상기 프로세서에서 볼 수 있는 우선순위가 높은 큐 내에 인큐잉되는 것을 특징으로 하는 컴퓨터 저장 디바이스.
  19. 컴퓨터 저장 디바이스로서, 상기 컴퓨터 저장 디바이스에는 명령들이 기록되어 있고, 상기 명령들은 적어도 하나의 프로세서를 갖는 컴퓨팅 디바이스에 의해 실행될 때, 상기 컴퓨팅 디바이스로 하여금 동작들을 수행하도록 하며, 상기 동작들은,
    운영 시스템(OS)을 실행시켜 시스템 호출 요청을 처리하도록 되어 있는 프로세서에서 단일 명령 복수 데이터(SIMD) 벡터를 수신하는 것과, 여기서
    상기 SIMD 벡터는 복수의 작업 항목들을 갖는 웨이브프론트 내의 각각의 작업 항목으로부터의 시스템 호출 요청에 대응하는 SIMD 요소들을 포함하고,
    상기 SIMD 벡터는 단일 명령 복수 데이터(SIMD)를 처리하는 SIMD 프로세서에서 실행되는 명령에 응답하여 발생되고,
    상기 SIMD 프로세서에서 실행되는 명령은 상기 시스템 호출 요청을 촉발시키고,
    상기 SIMD 프로세서는 상기 운영 시스템(OS)을 실행시켜 시스템 호출 요청을 처리하도록 되어 있는 상기 프로세서와는 다른 것이며;
    상기 SIMD 벡터로부터의 각각의 시스템 호출 요청을 실행하는 것과; 그리고
    각각의 시스템 호출 요청의 결과를 상기 웨이브프론트 내의 각각의 작업 항목으로 전송하는 것을 포함하는 것을 특징으로 하는 컴퓨터 저장 디바이스.
  20. 제19항에 있어서,
    상기 SIMD 벡터는 상기 운영 시스템(OS)을 실행시켜 시스템 호출 요청을 처리하도록 되어 있는 상기 프로세서에서 볼 수 있는 우선순위가 높은 큐로부터 수신되는 것을 특징으로 하는 컴퓨터 저장 디바이스.
  21. 삭제
  22. 삭제
KR1020137017357A 2010-12-14 2011-12-14 시스템 호출 요청의 통신 최적화 KR101788267B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US42295310P 2010-12-14 2010-12-14
US61/422,953 2010-12-14
US13/307,505 2011-11-30
US13/307,505 US8752064B2 (en) 2010-12-14 2011-11-30 Optimizing communication of system call requests
PCT/US2011/064859 WO2012082867A1 (en) 2010-12-14 2011-12-14 Optimizing communication of system call requests

Publications (2)

Publication Number Publication Date
KR20140027078A KR20140027078A (ko) 2014-03-06
KR101788267B1 true KR101788267B1 (ko) 2017-10-19

Family

ID=46245087

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137017357A KR101788267B1 (ko) 2010-12-14 2011-12-14 시스템 호출 요청의 통신 최적화

Country Status (6)

Country Link
US (1) US8752064B2 (ko)
EP (1) EP2652575A4 (ko)
JP (1) JP6228459B2 (ko)
KR (1) KR101788267B1 (ko)
CN (1) CN103262002B (ko)
WO (1) WO2012082867A1 (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9513975B2 (en) * 2012-05-02 2016-12-06 Nvidia Corporation Technique for computational nested parallelism
US9038075B2 (en) * 2012-11-26 2015-05-19 Red Hat, Inc. Batch execution of system calls in an operating system
US10235732B2 (en) 2013-12-27 2019-03-19 Intel Corporation Scheduling and dispatch of GPGPU workloads
US10216632B2 (en) 2013-12-30 2019-02-26 Michael Henry Kass Memory system cache eviction policies
US10002080B2 (en) * 2013-12-30 2018-06-19 Michael Henry Kass Memory system address modification policies
US11126559B2 (en) 2013-12-30 2021-09-21 Michael Henry Kass Translation look-aside buffer and prefetch indicator
US10521390B2 (en) * 2016-11-17 2019-12-31 The United States Of America As Represented By The Secretary Of The Air Force Systems and method for mapping FIFOs to processor address space
WO2019089816A2 (en) 2017-10-31 2019-05-09 Micron Technology, Inc. System having a hybrid threading processor, a hybrid threading fabric having configurable computing elements, and a hybrid interconnection network
US11513838B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread state monitoring in a system having a multi-threaded, self-scheduling processor
US11513840B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor
US11513837B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Thread commencement and completion using work descriptor packets in a system having a self-scheduling processor and a hybrid threading fabric
US11119782B2 (en) 2018-05-07 2021-09-14 Micron Technology, Inc. Thread commencement using a work descriptor packet in a self-scheduling processor
US11119972B2 (en) 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
US11068305B2 (en) 2018-05-07 2021-07-20 Micron Technology, Inc. System call management in a user-mode, multi-threaded, self-scheduling processor
US11132233B2 (en) 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
US11513839B2 (en) 2018-05-07 2022-11-29 Micron Technology, Inc. Memory request size management in a multi-threaded, self-scheduling processor
US11126587B2 (en) 2018-05-07 2021-09-21 Micron Technology, Inc. Event messaging in a system having a self-scheduling processor and a hybrid threading fabric
US11157286B2 (en) 2018-05-07 2021-10-26 Micron Technology, Inc. Non-cached loads and stores in a system having a multi-threaded, self-scheduling processor
US11074078B2 (en) 2018-05-07 2021-07-27 Micron Technology, Inc. Adjustment of load access size by a multi-threaded, self-scheduling processor to manage network congestion
CN112230931B (zh) * 2020-10-22 2021-11-02 上海壁仞智能科技有限公司 适用于图形处理器的二次卸载的编译方法、装置和介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7386710B2 (en) 2000-02-24 2008-06-10 Altera Corporation Methods and apparatus for scalable array processor interrupt detection and response
US20090144742A1 (en) 2007-11-30 2009-06-04 International Business Machines Corporation Method, system and computer program to optimize deterministic event record and replay
US20090300621A1 (en) 2008-05-30 2009-12-03 Advanced Micro Devices, Inc. Local and Global Data Share
US20100293534A1 (en) 2009-05-15 2010-11-18 Henrique Andrade Use of vectorization instruction sets

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1880274A2 (en) 2005-04-22 2008-01-23 Altrix Logic, Inc. Array of data processing elements with variable precision interconnect
US8106914B2 (en) * 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit
US8312254B2 (en) * 2008-03-24 2012-11-13 Nvidia Corporation Indirect function call instructions in a synchronous parallel thread processor
US9195487B2 (en) * 2009-05-19 2015-11-24 Vmware, Inc. Interposition method suitable for hardware-assisted virtual machine
US8661435B2 (en) * 2010-09-21 2014-02-25 Unisys Corporation System and method for affinity dispatching for task management in an emulated multiprocessor environment
US8725989B2 (en) * 2010-12-09 2014-05-13 Intel Corporation Performing function calls using single instruction multiple data (SIMD) registers

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7386710B2 (en) 2000-02-24 2008-06-10 Altera Corporation Methods and apparatus for scalable array processor interrupt detection and response
US20090144742A1 (en) 2007-11-30 2009-06-04 International Business Machines Corporation Method, system and computer program to optimize deterministic event record and replay
US20090300621A1 (en) 2008-05-30 2009-12-03 Advanced Micro Devices, Inc. Local and Global Data Share
US20100293534A1 (en) 2009-05-15 2010-11-18 Henrique Andrade Use of vectorization instruction sets

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
readv(2): Linux man page. 2007.10.02. (https://web-beta.archive.org/web/20071002225431/https://linux.die.net/man/2/readv)
Stuart 외 2명. 'GPU-to-CPU Callbacks'. Network and Parallel Computing, Lecture Notes in Computer Science, 2010.08.31.,pp.365-372.

Also Published As

Publication number Publication date
WO2012082867A1 (en) 2012-06-21
CN103262002B (zh) 2015-08-05
JP2013546105A (ja) 2013-12-26
EP2652575A1 (en) 2013-10-23
JP6228459B2 (ja) 2017-11-08
US8752064B2 (en) 2014-06-10
KR20140027078A (ko) 2014-03-06
EP2652575A4 (en) 2017-05-10
US20120180072A1 (en) 2012-07-12
CN103262002A (zh) 2013-08-21

Similar Documents

Publication Publication Date Title
KR101788267B1 (ko) 시스템 호출 요청의 통신 최적화
JP6381734B2 (ja) グラフィックス計算プロセススケジューリング
KR101961396B1 (ko) 이종 처리 디바이스의 동적 작업 분할
KR101786767B1 (ko) 유저 모드로부터 그래픽 처리 디스패치
US20120229481A1 (en) Accessibility of graphics processing compute resources
US10146575B2 (en) Heterogeneous enqueuing and dequeuing mechanism for task scheduling
US20120194526A1 (en) Task Scheduling
KR101791182B1 (ko) 컴퓨터 시스템 인터럽트 핸들링

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right