KR101558831B1 - 서브버퍼 오브젝트 - Google Patents

서브버퍼 오브젝트 Download PDF

Info

Publication number
KR101558831B1
KR101558831B1 KR1020147025300A KR20147025300A KR101558831B1 KR 101558831 B1 KR101558831 B1 KR 101558831B1 KR 1020147025300 A KR1020147025300 A KR 1020147025300A KR 20147025300 A KR20147025300 A KR 20147025300A KR 101558831 B1 KR101558831 B1 KR 101558831B1
Authority
KR
South Korea
Prior art keywords
buffer
sub
data
parent
disparate
Prior art date
Application number
KR1020147025300A
Other languages
English (en)
Other versions
KR20140117689A (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 KR20140117689A publication Critical patent/KR20140117689A/ko
Application granted granted Critical
Publication of KR101558831B1 publication Critical patent/KR101558831B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/001Arbitration of resources in a display system, e.g. control of access to frame buffer by video controller and/or main processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/127Updating a frame memory using a transfer of data from a source area to a destination area

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Computing Systems (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Multi Processors (AREA)
  • Memory System (AREA)
  • Electron Beam Exposure (AREA)
  • Advance Control (AREA)

Abstract

서브버퍼를 이용하여 이종 계산 유닛 중에서 병렬로 데이터 프로세싱 태스크를 수행하는 병렬 컴퓨팅 프로그램 방법 및 장치가 기재된다. 계산 유닛은 중앙 프로세싱 유닛(CPU) 및 그래픽 프로세싱 유닛(GPU)의 이종 혼합을 포함할 수 있다. 시스템은 복수의 이종 계산 유닛의 각각에 대한 페어런트 버퍼로부터 서브버퍼를 생성한다. 서브버퍼가 페어런트 버퍼와 동일한 계산 유닛과 연관되지 않으면, 시스템은 데이터를 서브버퍼로부터 그 계산 유닛의 메모리로 카피한다. 시스템은 또한 데이터로의 업데이트를 트랙킹하고 이 업데이트를 서브버퍼로 전송한다.

Description

서브버퍼 오브젝트{SUBBUFFER OBJECTS}
출원인은 2010년 5월 20일에 제출된 미국 가출원 제61/346,866호의 우선권을 주장하며, 그 전체는 참고로 여기에 포함된다.
본 발명은 일반적으로 데이터 병렬 컴퓨팅에 관한 것이다. 특히 본 발명은 이종 멀티-계산 유닛 환경에서 버퍼와 연관된 서브버퍼 오브젝트를 관리하는 것에 관한 것이다.
GPU가 고성능 병렬 컴퓨팅 장치로 계속 진화함에 따라, 범용 컴퓨팅 장치와 유사한 GPU에서 더 많은 애플리케이션이 기입되어 데이터 병렬 계산을 수행한다. 오늘날 이들 애플리케이션은 판매자 특정 인터페이스를 이용하여 특정 GPU 상에서 실행되도록 설계된다. 따라서, 이들 애플리케이션은 GPU 및 CPU 모두가 데이터 프로세싱 시스템에서 이용가능할 때에도 CPU의 프로세싱 자원을 레버리지(leverage)할 수 없다. 프로세싱 자원은 이러한 애플리케이션이 실행되는 상이한 판매자로부터의 GPU에 걸쳐 레버리지될 수도 없다.
그러나, 더 많은 CPU가 다수의 코어를 포함하여 데이터 병렬 계산을 수행함에 따라, 어느 것이 이용가능하든지 CPU 및/또는 GPU에 의해 더 많은 프로세싱 태스크가 지원될 수 있다. 전통적으로, GPU 및 CPU는 서로 호환가능하지 않은 개별 프로그래밍 환경을 통해 구성된다. 대부분의 GPU는 판매자 특정 전용 프로그램을 필요로 한다. 결과적으로 애플리케이션은, 예를 들어, 멀티코어 CPU와 함께 데이터 병렬 컴퓨팅 능력을 갖는 GPU의 프로세싱 자원에 영향을 주면서, CPU 및 GPU의 프로세싱 자원을 레버리지하기 매우 어렵다.
또한, CPU 및 GPU는 개별 메모리 어드레스 공간을 이용한다. 메모리 버퍼는 GPU에 대한 GPU 메모리에 할당 및 카피되어 데이터를 프로세싱할 필요가 있다. 애플리케이션이 CPU 및 하나 이상의 GPU가 데이터 버퍼의 영역 상에서 동작하기를 원하는 경우, 애플리케이션은 CPU 및 GPU 사이 또는 GPU들에 걸쳐 공유되는 버퍼의 적절한 영역들로부터의 데이터의 할당 및 카피를 관리할 필요가 있다. 그러므로, 현대의 데이터 프로세싱 시스템에서 버퍼를 공유하는 CPU 및 GPU의 이종 혼합이 필요하다.
현대의 데이터 프로세싱 시스템에서 버퍼를 공유하는 CPU 및 GPU의 이종 혼합이 필요하다.
발명의 개요
서브버퍼를 이용하여 이종 계산 유닛 중에서 병렬로 데이터 프로세싱 태스크를 수행하는 병렬 컴퓨팅 프로그램 방법 및 장치가 기재된다. 계산 유닛은 중앙 프로세싱 유닛(CPU) 및 그래픽 프로세싱 유닛(GPU)의 이종 혼합을 포함할 수 있다. 시스템은 복수의 이종 계산 유닛의 각각에 대한 페어런트 버퍼로부터 서브버퍼를 생성한다. 서브버퍼가 페어런트 버퍼와 동일한 계산 유닛과 연관되지 않으면, 시스템은 데이터를 서브버퍼로부터 그 계산 유닛의 메모리로 카피한다. 시스템은 또한 데이터로의 업데이트를 트랙킹하고 이 업데이트를 서브버퍼로 전송한다.
본 발명의 다른 특징은 이하의 상세한 설명 및 첨부된 도면으로부터 명백해질 것이다.
본 발명은 서브버퍼를 이용하여 이종 계산 유닛 중에서 병렬로 데이터 프로세싱 태스크를 수행하는 병렬 컴퓨팅 프로그램 방법 및 장치를 제공한다.
본 발명은 첨부된 도면을 이용하여 설명하지만 이에 제한되지 않으며, 동일한 참조 번호는 유사한 요소를 나타낸다.
도 1은 CPU 및/또는 GPU를 포함하는 컴퓨팅 장치를 애플리케이션에 대하여 데이터 병렬 컴퓨팅을 수행하도록 구성하는 시스템의 일 실시예를 나타내는 블록도.
도 2는 동시에 다수의 스레드(threads)를 실행하는 것과 병렬로 동작하는 다수의 계산 프로세서를 갖는 컴퓨팅 장치의 예를 나타내는 블록도.
도 3은 컴퓨팅 장치 식별자를 이용하는 논리적 컴퓨팅 장치로서 구성되는 복수의 물리적 컴퓨팅 장치의 일 실시예를 나타내는 블록도.
도 4는 다수의 서브버퍼로 세분된 버퍼의 일 실시예를 나타내는 블록도.
도 5는 1차원 버퍼 내의 다수의 서브버퍼의 일 실시예를 나타내는 블록도.
도 6은 다수의 서브버퍼로 세분된 2차원 이미지의 일 실시예를 나타내는 블록도.
도 7은 다수의 서브버퍼로 세분된 3차원 이미지의 일실시예를 나타내는 블록도.
도 8은 애플리케이션으로부터 수신된 능력 요구사항을 매칭함으로써 컴퓨팅 장치 식별자를 갖는 복수의 물리적 컴퓨팅 장치를 구성하는 프로세스의 실시예를 나타내는 흐름도.
도 9는 논리적 컴퓨팅 장치에서 계산 실행가능 파일(executable)을 실행하는 프로세스의 실시예를 나타내는 흐름도.
도 10은 다수의 계산 유닛을 갖는 서브버퍼를 생성 및 이용하는 실행시간 프로세스의 실시예를 나타내는 흐름도.
도 11은 내부 및 외부 의존성을 갖는 이벤트와 연관된 콜백(callback)을 실행하는 프로세스의 일 실시예를 나타내는 흐름도.
도 12는 내부 및 외부 의존성을 갖는 이벤트의 체인의 일 실시예를 나타내는 블록도.
도 13은 복수의 물리적 컴퓨팅 장치에서 실행될 계산 커널 실행가능 파일에 대한 계산 커널 소스의 예를 나타내는 샘플 소스 코드.
도 14a 내지 14c는 API를 호출함으로써 복수의 물리적 컴퓨팅 장치에서 복수의 실행가능 파일 중의 하나를 실행하는 논리적 컴퓨팅 장치를 구성하는 예를 나타내는 샘플 소스 코드.
도 15는 여기에 기재된 실시예와 결합하여 사용될 수 있는 복수의 CPU 및 GPU(graphical processing unit)를 갖는 일반적인 컴퓨터 시스템의 일 예를 나타내는 도면.
페어런트(parent) 버퍼로부터 생성된 서브버퍼를 이용한 다수의 프로세서 상에서의 데이터 병렬 컴퓨팅 방법 및 장치가 기재된다. 다음의 설명에서, 수많은 특정 세부사항은 본 발명의 실시예의 완전한 설명을 제공하기 위한 것이다. 그러나, 본 발명의 실시예가 이 특정한 세부사항없이 실행될 수 있음은 당업자에게 자명하다. 다른 예에서, 본 설명의 이해를 모호하게 하지 않도록, 공지된 구성요소, 구조물 및 기술이 상세히 도시되지 않는다.
본 명세서의 "일 실시예" 또는 "실시예"는 실시예와 연결하여 기재된 특정한 특징, 구조물 또는 특징이 본 발명의 적어도 하나의 실시예에 포함될 수 있다는 것을 의미한다. 본 명세서 내의 다양한 곳의 구 "일 실시예"가 모두 동일한 실시예를 반드시 지칭하는 것이 아니다.
다음의 도면에 도시된 프로세스는 하드웨어(예를 들어, 회로, 전용 로직, 등), 소프트웨어(범용 컴퓨터 시스템 또는 전용 머신 상에서 실행) 또는 그 조합을 포함하는 프로세싱 로직에 의해 수행된다. 프로세스는 임의의 순차 동작으로 이하에서 설명하지만, 기재된 동작의 일부는 상이한 순서로 수행될 수 있음을 인식할 것이다. 또한, 일부의 동작은 순차적이기보다는 병렬로 수행될 수 있다.
GPU는 2D, 3D 그래픽 동작 및/또는 디지털 비디오 관련 기능 등의 매우 효율적인 그래픽 동작을 구현하는 전용 그래픽 프로세서일 수 있다. GPU는 그래픽 동작, 예를 들어, 블리터(blitter) 동작, 텍스쳐 맵핑, 폴리곤 렌더링, 픽셀 쉐이딩 및 버텍스 쉐이딩을 수행하는 특수 (프로그래머블) 하드웨어를 포함할 수 있다. GPU는, 프레임 버퍼로부터 데이터를 페치하여 픽셀을 함께 혼합하여 디스플레이하기 위하여 다시 프레임 버퍼로 이미지를 렌더링하는 것으로 알려져 있다. GPU는 또한 프레임 버퍼를 제어하고 프레임 버퍼가 디스플레이, 예를 들어, CRT 또는 LCD 디스플레이를 리프레쉬하는데 사용되도록 할 수 있다. 또는, CRT 또는 LCD 디스플레이는 적어도 20Hz의 레이트로 리프레쉬를 필요로 하는 지속성이 짧은 디스플레이이다(예를 들어 매 1/30초마다, 디스플레이는 프레임 버퍼로부터의 데이터로 리프레쉬된다). 통상, GPU는 GPU와 결합된 CPU로부터 그래픽 프로세싱 태스크를 취하여 래스터 그래픽 이미지(raster graphics image)를 디스플레이 컨트롤러를 통해 디스플레이 장치에 출력한다. 본 명세서 내의 "GPU"는 발명의 명칭이 "프로그래머블 그래픽 프로세서에서의 데이터의 멀티스레드 프로세싱 방법 및 장치"인 린홀름(Lindholdm) 등의 미국 특허 7015913 및 발명의 명칭이 "그래픽 프로세서에 의해 인터레이스 비디오를 디인터레이싱하는 방법"인 스완(Swan) 등의 미국 특허 6970206 - 이들은 참고로 여기에 포함됨 - 에 기재된 그래픽 프로세서 또는 프로그래머블 그래픽 프로세서일 수 있다.
일 실시예에서, CPU 또는 GPU 등의 복수의 상이한 타입의 프로세서는 동시에 하나 이상의 애플리케이션에 대한 데이터 병렬 프로세싱 태스크를 수행하여 데이터 프로세싱 시스템에서 이용가능한 프로세싱 자원의 이용 효율을 증가시킬 수 있다. 데이터 프로세싱 시스템의 프로세싱 자원은 CPU 또는 GPU 등의 복수의 물리적 컴퓨팅 장치에 기초할 수 있다. 물리적 컴퓨팅 장치는 하나 이상의 계산 유닛을 포함할 수 있다. 일 실시예에서, 데이터 병렬 프로세싱 태스크(또는 데이터 병렬 태스크)는 복수의 타입의 프로세서, 예를 들어, 태스크를 수행할 수 있는 CPU 또는 GPU에 위임될 수 있다. 데이터 병렬 태스크는 프로세서에 어떤 특정한 프로세싱 능력을 요구할 수 있다. 프로세싱 능력은 예를 들어 전용 텍스쳐 하드웨어 지원, 배정밀도 부동 소수점 연산(double precision floating point arithmetic), 전용 로컬 메모리, 스트림 데이터 캐시, 또는 동기화 명령(synchronization primitives)일 수 있다. 개별 타입의 프로세서는 프로세싱 능력의 상이한 중첩 그룹을 제공할 수 있다. 예를 들어, CPU 및 GPU는 배정밀도 부동 소수점 계산을 수행할 수 있다. 일 실시예에서, 애플리케이션은 데이터 병렬 프로세싱 태스크를 수행하기 위하여 어느 것이 이용가능하든지 CPU 또는 GPU를 레버리지(leverage)할 수 있다.
다른 실시예에서, 시스템은 페어런트 버퍼를 할당할 수 있고, 이 페어런트 버퍼를 다수의 서브버퍼로 더 세분할 수 있다. 서브버퍼에 대한 계산 유닛이 페어런트 버퍼와 연관된 것과 동일한 계산 유닛이면, 그 계산 유닛은 포인터를 이용하여 서브버퍼 데이터를 액세스한다. 서브버퍼에 대한 계산 유닛이 페어런트 버퍼에 대한 계산 유닛과 다르면, 시스템은 데이터를 서브버퍼로부터 서브버퍼에 대한 계산 유닛에 로컬인 메모리로 카피한다. 또한, 시스템은 카피된 데이터로의 업데이트를 트랙킹하고 그 업데이트된 데이터를 서브버퍼로 전송한다.
도 1은 CPU 및/또는 GPU를 포함하는 컴퓨팅 장치를 애플리케이션에 대하여 데이터 병렬 컴퓨팅을 수행하도록 구성하는 시스템(100)의 일 실시예를 나타내는 블록도이다. 시스템(100)은 병렬 컴퓨팅 아키텍쳐를 구현할 수 있다. 일 실시예에서, 시스템(100)은 데이터 버스(113)를 통해 하나 이상의 중앙 프로세서(117) 및 미디어 프로세서(115) 등의 하나 이상의 다른 프로세서와 결합된 하나 이상의 호스트 프로세서를 포함하는 그래픽 시스템일 수 있다. 복수의 호스트 프로세서는 호스팅 시스템(101) 내에서 함께 네트워킹될 수 있다. 복수의 중앙 프로세서(117)는 상이한 판매자로부터의 멀티코어 CPU를 포함할 수 있다. CPU 또는 GPU 등의 계산 프로세서 또는 계산 유닛은 능력 그룹과 연관될 수 있다. 예를 들어, 미디어 프로세서는 전용 텍스쳐 렌더링 하드웨어를 갖는 GPU일 수 있다. 또 다른 미디어 프로세서는 전용 텍스쳐 렌더링 하드웨어 및 배정밀도 부동 소수점 연산을 지원하는 GPU일 수 있다. 다수의 GPU는 SLI(scalable link interface) 또는 크로스파이어(CrossFire) 구성을 위해 함께 접속될 수 있다.
일 실시예에서, 호스팅 시스템(101)은 소프트웨어 스택을 지원할 수 있다. 소프트웨어 스택은 애플리케이션(103), 계산 플랫폼층(141), 예를 들어, OpenCL(Open Computing Language) 플랫폼, 계산 실행시간층(109), 계산 컴파일러(107) 및 계산 애플리케이션 라이브러리(105) 등의 소프트웨어 스택 컴포넌트를 포함할 수 있다. 애플리케이션(103)은 API 호출을 통해 다른 스택 컴포넌트와 인터페이싱할 수 있다. 하나 이상의 스레드는 호스팅 시스템(101) 내에서 애플리케이션(103)을 위하여 동시에 실행될 수 있다. 계산 플랫폼층(141)은 각각의 부착된 물리적 컴퓨팅 장치에 대한 프로세싱 능력을 저장하면서 데이터 구조 또는 컴퓨팅 장치 데이터 구조를 유지할 수 있다. 일 실시예에서, 애플리케이션은 계산 플랫폼층(141)을 통해 호스팅 시스템(101)의 이용가능한 프로세싱 자원에 대한 정보를 검색할 수 있다. 애플리케이션은 계산 플랫폼층(141)을 통해 프로세싱 태스크를 수행하는 능력 요구사항을 선택하고 특정할 수 있다. 따라서, 계산 플랫폼층(141)은 물리적 컴퓨팅 장치에 대한 구성을 결정하여 프로세싱 태스크에 대하여 부착된 CPU(117) 및/또는 GPU(115)로부터의 프로세싱 자원을 할당 및 개시할 수 있다. 일 실시예에서, 계산 플랫폼층(141)은 구성되는 하나 이상의 실제 물리적 컴퓨팅 장치에 대응하는 애플리케이션에 대한 하나 이상의 논리적 컴퓨팅 장치를 생성할 수 있다.
계산 실행시간층(109)은 애플리케이션(103)에 대한 구성된 프로세싱 자원에 따라, 예를 들어, 하나 이상의 논리적 컴퓨팅 장치에 기초하여 프로세싱 태스크의 실행을 관리할 수 있다. 일 실시예에서, 프로세싱 태스크를 실행하는 것은 프로세싱 태스크를 나타내는 계산 프로그램 오브젝트를 생성하는 것과, 예를 들어, 실행가능 파일, 입출력 데이터 등을 유지하는 메모리 자원을 할당하는 것을 포함할 수 있다. 계산 프로그램 오브젝트에 대하여 로딩된 실행가능 파일은 계산 프로그램 실행가능 파일일 수 있다. 계산 프로그램 실행가능 파일은 CPU 또는 GPU 등의 계산 프로세서 또는 계산 유닛 내에서 실행될 계산 프로그램 오브젝트 내에 포함될 수 있다. 계산 실행시간층(109)은 할당된 물리적 장치와 상호작용하여 프로세싱 태스크의 실제 실행을 수행할 수 있다. 일 실시예에서, 계산 실행시간층(109)은 프로세싱 태스크를 위해 구성되는 CPU 또는 GPU 등의 각 프로세서의 실행 시간 상태에 따라 상이한 애플리케이션으로부터의 다수의 프로세싱 태스크의 실행을 조정할 수 있다. 계산 실행시간층(109)은 실행 시간 상태에 기초하여 프로세싱 태스크를 수행하기 위하여 구성되는 물리적 컴퓨팅 장치로부터 하나 이상의 프로세서를 선택할 수 있다. 프로세싱 태스크를 수행하는 것은 복수의 물리적 컴퓨팅 장치 내에서 하나 이상의 실행가능한 파일의 다수의 스레드를 동시에 실행하는 것을 포함할 수 있다. 일 실시예에서, 계산 실행시간층(109)은 각각의 프로세서의 실행 시간 실행 상태를 모니터링함으로써 각각의 실행된 프로세싱 태스크의 상태를 트랙킹할 수 있다.
실행시간층은 애플리케이션(103)으로부터의 프로세싱 태스크에 대응하는 계산 프로그램 실행가능 파일로서 하나 이상의 실행가능 파일을 로딩할 수 있다. 일 실시예에서, 계산 실행시간층(109)은 계산 애플리케이션 라이브러리(105)로부터의 프로세싱 태스크를 수행하도록 요구되는 추가의 실행가능 파일을 자동으로 로딩한다. 계산 실행시간층(109)은 실행가능 파일 및 계산 애플리케이션 라이브러리(105) 또는 애플리케이션(103)으로부터의 계산 프로그램 오브젝트에 대한 그 대응 소스 프로그램을 로딩할 수 있다. 계산 프로그램 오브젝트에 대한 소스 프로그램은 계산 프로그램 소스일 수 있다. 단일 계산 프로그램 소스에 기초한 복수의 실행가능 파일은 다수의 타입 및/또는 상이한 버전의 물리적 컴퓨팅 장치를 포함하도록 구성되는 논리적 컴퓨팅 장치에 따라 로딩될 수 있다. 일 실시예에서, 계산 실행타임층(109)은 계산 컴파일러(107)를 활성화하여 로딩된 소스 프로그램을 실행가능 파일을 실행하도록 구성되는 타겟 프로세서, 예를 들어, CPU 또는 GPU에 대하여 최적화된 실행가능 파일로 온라인 컴파일링할 수 있다.
온라인 컴파일링된 실행가능 파일은 해당 소스 프로그램에 따라 기존의 실행가능 파일에 더하여 미래의 호출(invocation)을 위해 저장될 수 있다. 또한, 실행가능 파일은 오프라인 컴파일링되고 API 호출을 이용하여 계산 실행시간(109)로 로딩될 수 있다. 계산 애플리케이션 라이브러리(105) 및/또는 애플리케이션(103)은 애플리케이션으로부터의 라이브러리 API 요청에 응답하여 관련된 실행가능 파일을 로딩할 수 있다. 새롭게 컴파일링된 실행가능 파일은 계산 애플리케이션 라이브러리(105) 또는 애플리케이션(103)에 대하여 동적으로 업데이트될 수 있다. 일 실시예에서, 계산 실행시간(109)은 애플리케이션 내의 기존의 계산 프로그램 실행가능 파일을 새롭게 업그레이드된 버전의 컴퓨팅 장치에 대한 계산 컴파일러(107)를 통해 온라인 컴파일링된 새로운 실행가능 파일로 대체할 수 있다. 계산 실행시간(109)은 계산 애플리케이션 라이브러리(105)를 업데이트하기 위하여 온라인 커파일링되는 새로운 실행가능 파일을 삽입할 수 있다. 일 실시예에서, 계산 실행시간(109)은 프로세싱 테스크에 대한 실행가능 파일을 로딩할 때 계산 컴파일러(107)를 인보크(invoke)할 수 있다. 다른 실시예에서, 계산 컴파일러(107)는 계산 애플리케이션 라이브러리(105)에 대한 실행가능 파일을 생성하기 위하여 오프라인 인보크될 수 있다. 계산 컴파일러(107)는 계산 커널 프로그램을 컴파일링하고 링크하여 계산 프로그램 실행가능 파일을 생성할 수 있다. 일 실시예에서, 계산 애플리케이션 라이브러리(105)는 예를 들어, 개발 공구키트 및/또는 이미지 프로세싱을 지원하는 복수의 기능을 포함할 수 있다. 각각의 라이브러리 기능은 복수의 물리적 컴퓨팅 장치에 대한 계산 애플리케이션 라이브러리(105)에 저장된 하나 이상의 계산 프로그램 실행가능 파일 및 계산 프로그램 소스에 대응할 수 있다.
도 2는 동시에 다수의 스레드(threads)를 실행하는 것과 병렬로 동작하는 다수의 계산 프로세서(예를 들어, 계산 유닛)를 갖는 컴퓨팅 장치의 예를 나타내는 블록도이다. 각각의 계산 프로세서는 복수의 스레드를 병렬로(동시에) 실행할 수 있다. 계산 프로세서 또는 계산 유닛에서 병렬로 실행될 수 있는 스레드는 스레드 그룹이라 할 수 있다. 컴퓨팅 장치는 병렬로 실행될 수 있는 다수의 스레드 그룹을 가질 수 있다. 예를 들어, 컴퓨팅 장치(205)에서 M개의 스레드가 스레드 그룹으로서 실행되는 것이 도시된다. 다수의 스레드 그룹, 예를 들어, 계산 프로세서_1(205)의 스레드(1) 및 계산 프로세서_L(203)의 스레드(N)가 하나의 컴퓨팅 장치 상의 개별 계산 프로세서들에 걸쳐 또는 다수의 컴퓨팅 장치에 걸쳐 병렬로 실행될 수 있다. 다수의 계산 프로세서에 걸친 복수의 스레드 그룹은 계산 프로그램 실행가능 파일을 병렬로 실행할 수 있다. 1보다 많은 계산 프로세서는 ASIC(Application Specific Integrated Circuit) 장치 등의 단일 칩에 기초할 수 있다. 일 실시예에서, 애플리케이션으로부터의 다수의 스레드는 다수의 칩에 걸쳐 1보다 많은 계산 프로세서에서 동시에 실행될 수 있다.
컴퓨팅 장치는 프로세서_1(205) 및 프로세서_L(203) 등의 하나 이상의 계산 프로세서 또는 계산 유닛을 포함할 수 있다. 로컬 메모리는 계산 프로세서와 결합될 수 있다. 계산 프로세서에서 실행되는 단일 스레드 그룹 내의 스레드 사이에서 공유되는 로컬 메모리는 계산 프로세서와 결합되는 로컬 메모리에 의해 지원될 수 있다. 스레드 1(213) 및 스레드 N(209) 등의 상이한 스레드 그룹에 걸친 다수의 스레드는 컴퓨팅 장치(201)에 결합된 컴퓨팅 장치 메모리(217)에 저장된 스트림 등의 계산 메모리 오브젝트를 공유할 수 있다. 컴퓨팅 장치 메모리(217)는 글로벌 메모리 및 컨스턴트 메모리(constant memory)를 포함할 수 있다. 글로벌 메모리는 스트림 등의 계산 메모리 오브젝트를 할당하는데 사용될 수 있다. 계산 메모리 오브젝트는 계산 프로그램 실행가능 파일에 의해 동작될 수 있는 데이터 엘리먼트의 모음을 포함할 수 있다. 계산 메모리 오브젝트는 이미지, 텍스쳐, 프레임 버퍼, 스칼라 데이터 타입의 어레이, 사용자 정의 구조의 어레이, 버퍼, 서브버퍼 또는 변수 등을 나타낼 수 있다. 컨스턴트 메모리는 계산 프로그램 실행가능 파일에 의해 빈번히 사용되는 컨스턴트 변수를 저장하는 판독 전용 메모리일 수 있다.
일 실시예에서, 계산 프로세서 또는 계산 유닛에 대한 로컬 메모리는 스레드 그룹 내의 모든 스레드 또는 스레드 그룹에 의해 공유되는 변수를 할당하는데 사용될 수 있다. 로컬 메모리는 프로세서_1에 대한 로컬 공유 메모리(219) 및 프로세서_L에 대한 로컬 공유 메모리(211) 등의 전용 로컬 저장 장치로서 구현될 수 있다. 다른 실시예에서, 계산 프로세서에 대한 로컬 메모리는 컴퓨팅 장치(201) 내의 계산 프로세서(205, 203)에 대한 데이터 캐시(215) 등의 컴퓨팅 장치의 하나 이상의 계산 프로세서에 대한 컴퓨팅 장치 메모리에 대한 판독-기입 캐시로서 구현될 수 있다. 전용 로컬 저장 장치는 상이한 스레드 그룹에 걸친 스레드에 의해 공유되지 않을 수 있다. 프로세서_1(205) 등의 계산 프로세서의 로컬 메모리가 판독-기입 캐시, 예를 들어, 데이터 캐시(215)로서 구현되면, 로컬 메모리에 있는 것으로 선언된 변수는 컴퓨팅 장치 메모리(217)로부터 할당되어 판독-기입 캐시, 예를 들어, 로컬 메모리를 구현하는 데이터 캐시(215)에 캐싱될 수 있다. 스레드 그룹 내의 스레드는, 예를 들어, 판독-기입 캐시 또는 전용 로컬 저장 장치가 해당 컴퓨팅 장치에 이용가능하지 않으면, 컴퓨팅 장치 메모리(217)에 할당된 로컬 변수를 공유할 수 있다. 일 실시예에서, 각각의 스레드는 스레드 내의 호출된 기능에 의해 사용되는 스레드 개인 변수를 저장하는 개인 메모리와 연관된다. 예를 들어, 개인 메모리 1(211)는 스레드 1(213)이외의 스레드가 볼 수 없다.
또한, 일 실시예에서, 계산 장치 메모리(217)는 프로세서_1(205) 내지 프로세서_L(203)에 의해 사용되는 데이터를 저장하는데 사용되는 버퍼(223)를 포함한다. 버퍼(223)는 본 기술에 공지된 바와 같이 일차원 버퍼, 2차원 이미지, 3차원 이미지 또는 다른 타입의 버퍼일 수 있다. 일 실시예에서, 계산 장치(201)는 버퍼(223)에 프로세서(예를 들어, 프로세서_1(205) 내지 프로세서_L(203))에 의해 동작될 데이터를 저장한다. 예를 들어, 일 실시예에서, 버퍼는 본 기술에 공지된 바와 같이 데이터 어레이, 2차원 이미지, 3차원 이미지 들 및/또는 다른 데이터를 저장할 수 있다. 일 실시예에서, 버퍼(223) 및 시스템(201) 내의 다른 메모리(개인 메모리(211, 207), 로컬 공유 메모리(219, 221), 데이터 캐시(215) 등) 사이의 데이터는 메모리간 데이터 전송을 위해 본 기술에 공지된 임의의 방법(직접 PCIe 전송, 비동기 직접 메모리 액세스, 등)을 이용하여 전달될 수 있다.
도 3은 컴퓨팅 장치 식별자를 이용하는 논리적 컴퓨팅 장치로서 구성되는 복수의 물리적 컴퓨팅 장치의 일 실시예를 나타내는 블록도이다. 일 실시예에서, 애플리케이션(303) 및 플랫폼층(305)은 호스트 CPU(301) 내에서 실행될 수 있다. 애플리케이션(303)은 도 1의 애플리케이션(103) 중의 하나일 수 있다. 호스팅 시스템(101)은 호스트 CPU(301)를 포함할 수 있다. 물리적 컴퓨팅 장치 Physical_Compute_Device-1(305) 내지 Physical_Compute_Device-N(311)의 각각은 도 1의 CPU(117) 또는 GPU(115) 중의 하나일 수 있다. 일 실시예에서, 계산 플랫폼층(141)은 API 요청 내에 포함되는 능력 요구사항의 리스트에 따라 데이터 병렬 프로세싱 자원을 구성하는 애플리케이션(303)으로부터의 API 요청에 응답하여 컴퓨팅 장치 식별자(307)를 생성할 수 있다. 컴퓨팅 장치 식별자(307)는 계산 플랫폼층(141)에 의한 구성에 따라 실제 물리적 컴퓨팅 장치 Physical_Compute_Device-1(305) 내지 Physical_Compute_Device-N(311)의 선택을 지칭할 수 있다. 일 실시예에서, 논리적 컴퓨팅 장치(309)는 호스트 CPU(301)에서 떨어진 선택된 실제 물리적 컴퓨팅 장치의 그룹을 나타낼 수 있다.
도 4는 다수의 서브버퍼로 세분된 버퍼의 일 실시예를 나타내는 블록도이다. 일 실시예에서, 버퍼(400)는 상기의 도 2에 도시된 바와 같이 버퍼(223)이다. 도 4에서, 버퍼(408)에는 계산 유닛(402A-D)에 의해 사용되는 데이터를 저장하는데 사용되는 메모리가 할당된다. 버퍼(408)는 본 기술에 공지된 바와 같이 일차원 어레이, 2차원 이미지, 3차원 이미지 또는 다른 타입의 버퍼일 수 있다. 버퍼(408)는 다수의 서브버퍼(410A-D)로 더 세분된다. 일 실시예에서, 각각의 서브버퍼(410A-D)는 버퍼로의 포인터(412A-D)에 의해 참조된다. 예를 들어, 일 실시예에서, 서브버퍼(410A)는 포인터(412A)에 의해 참조되고, 서브버퍼(410B)는 포인터(412B)에 의해 참조되고, 서브버퍼(410C)는 포인터(412C)에 의해 참조되고, 서브버퍼(410D)는 포인터(412D)에 의해 참조된다. 일 실시예에서, 이들 포인터(412A-D)는 각 버퍼의 시작을 나타낸다. 이 실시예에서, 서브버퍼(410A-D) 내의 데이터를 액세스하기 위하여, 계산 유닛(402A-D)은 해당 포인터(412A-D) 및 오프셋을 서브버퍼(410A-D)의 소망의 영역에 제공한다.
일 실시예에서, 각각의 계산 유닛(402A-D)은 버퍼(408)의 서브버퍼(410A-D) 중의 하나와 연관된다. 일 실시예에서, 이들 계산 유닛(402A-D)의 각각은 각 계산 유닛에 할당된 계산 태스크에 대한 데이터를 사용한다. 계산 유닛의 각각은 해당 서브버퍼(410A-D)에 데이터를 판독 및/또는 기입할 수 있다. 예를 들어, 일 실시예에서, 계산 유닛(402A)은 서브버퍼(410A)에 대해 사용하고, 계산 유닛(402B)은 서브버퍼(410B)에 대해 사용하고, 계산 유닛(402C)은 서브버퍼(410C)에 대해 사용하고, 계산 유닛(402D)은 서브버퍼(410D)에 대해 사용한다. 이 실시예에서, 서브버퍼(410A-D) 내의 데이터를 액세스하기 위하여, 계산 유닛(402A-D)은 해당 포인터(412A-D) 및 오프셋을 서브버퍼(410A-D)의 소망의 영역에 제공한다. 오프셋은 어레이 인덱스, 2차원 기준, 3차원 기준 등일 수 있다. 버퍼(408) 구조는 이하의 도 5 내지 7에 더 기재된다.
일 실시예에서, 각각의 서브버퍼는 함수 호출 및 버퍼 포인터 및 서브버퍼 사이즈 값의 제공에 의해 생성된다. 서브버퍼의 생성은 이하의 도 10에서 더 설명한다.
일 실시예에서, 계산 유닛(402A-D)은 데이터를 해당 서브버퍼(402A-D)로부터 그 계산 유닛(402A-D)의 개인 메모리(404A-D)에 전달한다. 일 실시예에서, 개인 메모리(404A-D)는 계산 유닛에 로컬인 메모리(예를 들어, 도 2에 도시된 바와 같이 개인 메모리 1-M(211), 개인 메모리 1-N(207), 로컬 공유 메모리(219, 221) 및/또는 데이터 캐시(215))이다. 일 실시예에서, 계산 유닛(402A-D)은 계산 유닛(402A-D) 및 버퍼(408)를 포함하는 메모리를 결합하는 버스를 통해 데이터를 전달한다. 예를 들어, 일 실시예에서, 결합 버스는 주변 컴포넌트 인터페이스 타입 버스(PCI, PCIe(PCI-express) 등)이고, 전달 메카니즘은 PCI 직접 메모리 전달이다.
도 5는 1차원 버퍼(500) 내의 다수의 서브버퍼(502A-D)의 일 실시예를 나타내는 블록도이다. 도 5에서, 버퍼(500)는 4개의 서브버퍼(502A-D)를 갖는 것으로 도시되지만, 다른 실시예에서, 버퍼(500)는 더 많거나 적은 서브버퍼 및/또는 가변 사이즈의 서브버퍼를 가질 수 있다. 일 실시예에서, 버퍼(500)는 데이터 타입(정수(ints), 플로트(float), 스트링, 사용자 정의 구조, 사용자 정의 오브젝트 등)의 1차원 어레이이다. 서브버퍼(502A-D) 중의 하나의 데이터를 참조하기 위하여, 서브버퍼(502A-D)의 시작 포인터(504A-D)로부터의 오프셋이 사용될 수 있다. 예를 들어, 일 실시예에서, 버퍼(500)는 각 10억 플로트(float)의 2 어레이이다. 이 예에서, 계산 유닛은 어레이의 콘텐츠를 함께 더하고 각각의 서브버퍼(502A-D)는 2개의 어레이의 일부를 포함한다(예를 들어, 각각의 서브버퍼(502A-D)는 2개의 어레이의 각각에 대해 5억 플로트, 총 10억 플로트를 갖는다). 이 예의 계산 유닛은 계산 유닛에 대응하는 서브버퍼로부터 데이터를 전달하고, 플로트를 더하고, 결과적인 값을 서브버퍼에 저장한다.
도 6은 다수의 서브버퍼(602A-D)로 세분된 2차원 이미지 버퍼(600)의 일 실시예를 나타내는 블록도이다. 도 6에서, 버퍼(600)는 4개의 서브버퍼(602A-D)를 갖는 것으로 도시되지만, 다른 실시예에서, 버퍼(600)는 더 많거나 적은 서브버퍼 및/또는 가변 사이즈의 서브버퍼를 가질 수 있다. 도 6에서, 2차원 이미지 버퍼(600)는 x 오프셋 및 y 오프셋에 의해 참조되는 데이터를 포함하는 2차원 버퍼이다. 이 버퍼는 다양한 타입의 데이터(정수(ints), 플로트(float), 스트링, 사용자 정의 구조, 사용자 정의 오브젝트 등)를 저장할 수 있다. 예를 들어, 일 실시예에서, 버퍼(600)는 x 및 y 방향의 픽셀의 2차원 이미지를 저장할 수 있다. 예를 들어, 일 실시예에서, 버퍼(600)는 저장된 이미지의 칼라 히스토그램을 계산하기 위하여 2차원 이미지를 저장한다. 이 예에서, 이미지는 4개의 서브버퍼(602A-D)로 세분되고 각각의 서브버퍼(602A-D)는 계산 유닛에 의해 사용되어 계산 유닛이 프로세싱되는 이미지의 일부를 유지한다. 또한, 각각의 계산 유닛(602A-D)은 해당 서브버퍼로부터의 이미지의 관련 부분을 계산 유닛의 개인 메모리로 카피한다. 계산 유닛은 그 이미지 데이터를 이용하여 히스토그램 정보를 계산하고 히스토그램 정보를 반환한다.
도 7은 다수의 서브버퍼(702A-D)로 세분된 3차원 이미지 버퍼(700)의 일실시예를 나타내는 블록도이다. 도 7에서, 버퍼(700)는 4개의 서브버퍼(702A-D)를 갖는 것으로 도시되지만, 다른 실시예에서, 버퍼(700)는 더 많거나 적은 서브버퍼 및/또는 가변 사이즈의 서브버퍼를 가질 수 있다. 도 7에서, 3차원 이미지 버퍼(700)는 x, y, z 오프셋에 의해 참조되는 데이터를 포함하는 3차원 버퍼이거나 3차원 공간 내의 위치를 참조하는 다른 적절한 시스템이다. 버퍼(500 및 600)와 마찬가지로, 이 버퍼(700)는 다양한 타입의 데이터(정수(ints), 플로트(float), 스트링, 사용자 정의 구조, 사용자 정의 오브젝트 등)를 저장할 수 있다. 예를 들어, 일 실시예에서, 버퍼(700)는 x, y 및 z 방향의 픽셀의 3차원 이미지를 저장할 수 있다.
도 8은 애플리케이션으로부터 수신된 능력 요구사항을 매칭함으로써 계산 장치 식별자를 갖는 복수의 물리적 컴퓨팅 장치를 구성하는 프로세스(800)의 실시예를 나타내는 흐름도이다. 예시적인 프로세스(800)는 하드웨어(회로, 전용 로직, 등), 소프트웨어(전용 머신 상에서 실행되는) 또는 그 조합을 포함할 수 있는 프로세싱 로직에 의해 수행될 수 있다. 예를 들어, 프로세스(800)는 호스팅 시스템(101)에 의해 호스팅된 데이터 프로세싱 시스템에서 도 1의 시스템(100)에 따라 수행될 수 있다. 데이퍼 프로세싱 시스템은 도 1의 계산 플랫폼층(141) 등의 플랫폼층을 호스팅하는 호스트 프로세서 및 도 1의 CPU(117) 및 GPU(115) 등의 호스트 프로세서에 부착되는 다수의 물리적 컴퓨팅 장치를 포함할 수 있다.
블록(801)에서, 일 실시예에서, 프로세스(800)의 프로세싱 로직은 하나 이상의 해당 능력과 연관된 다수의 물리적 컴퓨팅 장치를 나타내는 데이터 구조(또는 컴퓨팅 장치 데이터 구조)를 생성할 수 있다. 각각의 물리적 컴퓨팅 장치는 프로세스(800)의 프로세싱 로직을 수행하는 프로세싱 시스템에 부착될 수 있다. CPU 또는 GPU 등의 물리적 컴퓨팅 장치의 능력 또는 계산 능력은 물리적 컴퓨팅 장치가 프로세싱 특징, 메모리 액세싱 메카니즘, 명명된 확장(named extension) 또는 관련된 제한(associated limitations)을 지원하는지를 포함할 수 있다. 프로세싱 특징은 전용 텍스쳐 하드웨어 지원, 배정밀도 부동소수점 연산 또는 동기화 지원(예를 들어, 뮤텍스(mutex))와 관련될 수 있다.
컴퓨팅 장치의 능력은 컴퓨팅 장치와 연관된 프로세싱 특성 또는 제한을 나타내는 타입을 포함할 수 있다. 애플리케이션은 API를 이용하여 요구되는 컴퓨팅 장치의 타입을 특정하거나 특정한 컴퓨팅 장치의 타입을 쿼리할 수 있다. 컴퓨팅 장치의 상이한 타입의 예는 다음의 표에 도시된다.
Figure 112014085590310-pat00001
추가적으로, 컴퓨팅 장치의 능력은 예를 들어 다음의 표에 도시된 바와 같이 구성 값을 포함할 수 있다.
Figure 112014085590310-pat00002
Figure 112014085590310-pat00003
Figure 112014085590310-pat00004
Figure 112014085590310-pat00005
Figure 112014085590310-pat00006
Figure 112014085590310-pat00007
플랫폼 프로파일은 OpenCL 프레임워크에 의해 구현되는 프로파일을 반환한다. 반환된 플랫폼 프로파일이 FULL_PROFILE이면, OpenCL 프레임워크는 FULL_PROFILE인 장치를 지원하고 EMBEDDED_PROFILE인 장치 또한 지원할 수 있다. 컴파일러는 모든 장치에 대하여 이용가능해야 한다, 즉, CL_DEVICE_COMPILER_AVAILABLE은 CL_TRUE이다. 반환된 플랫폼 프로파일이 EMBEDDED_PROFILE이면, EMBEDDED_PROFILE인 장치만이 지원된다.
물리적 프로세싱 장치에 대한 메모리 액세싱 메카니즘은 가변 캐시(예를 들어, 지원하지 않음, 판독 전용 또는 판독-기입)의 타입, 계산 메모리 오브젝트 캐시의 타입, 캐시 지원의 크기, 전용 로컬 메모리 지원 또는 관련 제한에 관련될 수 있다. 메모리 액세싱 제한은 계산 프로그램 실행가능 파일에 의해 동시에 판독 또는 기입될 수 있는 계산 메모리 오브젝트의 최대수, 할당될 수 있는 계산 메모리 오브젝트의 최대수, 또는 다차원 계산 메모리 오브젝트의 차원에 따른 최대 크기, 예를 들어, 2D(2차원) 이미지에 대한 계산 메모리 오브젝트의 최대 폭을 포함할 수 있다. 데이터 프로세싱 시스템의 시스템 애플리케이션은 데이터 프로세싱 시스템으로의 새로운 물리적 컴퓨팅 장치의 부착에 응답하여 데이터 구조를 업데이트할 수 있다. 일 실시예에서, 물리적 컴퓨팅 장치의 능력이 미리 결정될 수 있다. 다른 실시예에서, 데이터 프로세싱 시스템의 시스템 애플리케이션은 실행 시간 동안 새롭게 부착된 물리적 프로세싱 장치를 찾을 수 있다. 시스템 애플리케이션은 새롭게 찾은 물리적 컴퓨팅 장치의 능력을 검색하여 부착된 물리적 컴퓨팅 장치 및 그 대응 능력을 나타내는 데이터 구조를 업데이트할 수 있다.
일 실시예에 따르면, 프로세스(800)의 프로세싱 로직은 블록(803)에서 애플리케이션으로부터 계산 능력 요구사항을 수신할 수 있다. 애플리케이션은 API를 호출함으로써 계산 능력 요구사항을 시스템 애플리케이션에 전송할 수 있다. 시스템 애플리케이션은 애플리케이션에 대한 호스팅 시스템 내의 소프트웨어 스택의 플랫폼층에 대응할 수 있다. 일 실시예에서, 계산 능력 요구사항은 애플리케이션에 대한 태스크를 수행하는 프로세싱 자원을 요청하는 요구된 능력의 리스트를 식별할 수 있다. 일 실시예에서, 애플리케이션은 요청된 프로세싱 자원을 요구하여 동시에 다수의 스레드에서 태스크를 수행할 수 있다. 응답으로, 블록(805)에서 프로세스(800)의 프로세싱 로직은 부착된 물리적 컴퓨팅 장치로부터 물리적 컴퓨팅 장치의 그룹을 선택할 수 있다. 선택은 능력 데이터 구조에 저장된 계산 능력에 대하여 계산 능력 요구사항 간의 매칭에 기초하여 결정될 수 있다. 일 실시예에서, 프로세스(800)의 프로세싱 로직은 능력 요구사항에 의해 제공되는 힌트에 따라 매칭을 수행할 수 있다.
프로세스(800)의 프로세싱 로직은 물리적 컴퓨팅 장치 및 계산 능력 요구사항 사이에 매칭되는 계산 능력의 수에 따라 매칭 점수를 결정할 수 있다. 일 실시예에서, 프로세스(800)의 프로세싱 로직은 가장 높은 매칭 점수를 갖는 다수의 물리적 컴퓨팅 장치를 선택할 수 있다. 다른 실시예에서, 프로세스(800)의 프로세싱 로직은 능력 요구사항 내의 각 능력이 매칭되면 물리적 컴퓨팅 장치를 선택할 수 있다. 블록(805)에서 프로세스(800)의 프로세싱 로직은 매칭하는 물리적 컴퓨팅 장치의 다수의 그룹을 결정할 수 있다. 일 실시예에서, 매칭하는 물리적 컴퓨팅 장치의 각 그룹은 각 장치의 로드 밸런싱 능력에 따라 선택된다. 블록(807)에서, 일 실시예에서, 프로세스(800)의 프로세싱 로직은 블록(805)에서 선택된 물리적 컴퓨팅 장치의 각 그룹에 대한 컴퓨팅 장치 식별자를 생성할 수 있다. 프로세스(800)의 프로세싱 로직은 호출 API를 통해 애플리케이션으로 생성된 컴퓨팅 장치 식별자 중의 하나 이상을 반환할 수 있다. 애플리케이션은 컴퓨팅 장치 식별자에 따라 태스크를 수행하기 위하여 어떤 프로세싱 자원이 채용되는지를 선택할 수 있다. 일 실시예에서, 프로세스(800)의 프로세싱 로직은 수신된 각 능력 요구사항에 대하여 블록(807)에서 기껏해야 하나의 컴퓨팅 장치 식별자를 생성할 수 있다.
블록(809)에서, 일 실시예에서, 프로세스(800)의 프로세싱 로직은 해당 컴퓨팅 장치 식별자에 따라 블록(805)에서 선택된 물리적 컴퓨팅 장치의 그룹에 대한 논리적 컴퓨팅 장치를 초기화하기 위하여 자원을 할당할 수 있다. 논리적 컴퓨팅 장치는 하나 이상의 물리적 컴퓨팅 장치를 포함하는 컴퓨팅 장치 그룹일 수 있다. 프로세스(800)의 프로세싱 로직은 블록(805)에서의 선택에 따라 하나 이상의 컴퓨팅 장치 식별자를 수신한 애플리케이션으로부터의 API 요청에 응답하여 논리적 컴퓨팅 장치를 초기화할 수 있다.
프로세스(800)의 프로세싱 로직은 블록(811)에서 애플리케이션에 대한 논리적 컴퓨팅 장치 상에 컨텍스트 오브젝트를 생성할 수 있다. 컨텍스트 오브젝트에 대하여 계산 메모리 오브젝트, 계산 프로그램 오브젝트 및/또는 계산 프로그램 실행가능 파일 상에서 동작하는 명령은 컨텍스트 오브젝트를 생성할 때 API 요청에 특정된 파라미터에 따라 순번으로(예를 들어, 동기하여) 또는 순서없이(예를 들어, 비동기적으로) 실행될 수 있다. 계산 메모리 오브젝트, 계산 프로그램 또는 계산 커널 상에서 동작하는 프로파일링 명령은 API 요청을 이용하여 컨텍스트 오브젝트에 대하여 인에이블링될 수 있다. 일 실시예에서, 컨텍스트 오브젝트는 애플리케이션을 실행하는 호스팅 시스템 내의 하나의 애플리케이션 스레드와 연관된다. 하나의 논리적 컴퓨팅 장치에서 또는 상이한 논리적 컴퓨팅 장치들에 걸쳐 동시에 프로세싱 태스크를 수행하는 다수의 스레드는 개별 컨텍스트 오브젝트에 기초할 수 있다.
일 실시예에서, 프로세스(800)의 프로세싱 로직은 clCreateContext, clRetainContext 및 clReleaseContext를 포함하는 다수의 API에 기초할 수 있다. API clCreateContext는 계산 컨텍스트를 생성한다. 계산 컨텍스트는 계산 컨텍스트 오브젝트에 대응할 수 있다. API clRetainContext는 clRetainContext로의 입력 인수로서 컨텍스트에 의해 식별되는 특정 계산 컨택스트를 이용하여 인스턴스의 수를 증가시킨다. API clCreateContext는 암시 보존한다. 이것은 일반적으로 애플리케이션에 의해 전달되는 컨텍스트를 획득하는 제3자 라이브러리에 유용하다. 그러나, 애플리케이션은 라이브러리에 알리지 않고 컨텍스트를 삭제할 수 있다. 다수의 인스턴스가 컨텍스트에 부착되고 컨텍스트로부터 릴리즈되도록 하는 것은 더이상 유효하지 않은 라이브러리에 의해 사용되는 계산 컨텍스트의 문제를 해결한다. clRetainContext로의 입력 인수가 유효 계산 컨텍스트 객체에 대응하지 않으면, clRetainContext는 CU_INVALID_CONTEXT를 반환한다. API clReleaseContext는 유효한 계산 컨텍스트로부터 인스턴스를 릴리즈한다. clReleaseContext로의 입력 인수가 유효 계산 컨텍스트 오브젝트에 대응하지 않으면, clReleaseContext는 CU_INVALID_CONTEXT를 반환한다.
도 9는 논리적 컴퓨팅 장치에서 계산 실행가능 파일을 실행하는 예시적인 프로세스(900)의 실시예를 나타내는 흐름도이다. 일 실시예에서, 프로세스(900)는 도 1의 계산 실행시간층(109) 등의 데이터 프로세싱 시스템 내의 실행시간층에 의해 수행될 수 있다. 블록(901)에서, 프로세스(900)의 프로세싱 로직은 논리적 컴퓨팅 장치 내의 하나 이상의 계산 메모리 오브젝트(예를 들어, 스트림)을 할당하여 계산 실행가능 파일을 실행한다. 계산 메모리 오브젝트는 하나 이상의 데이터 엘리먼트를 포함하여 예를 들어 이미지 메모리 오브젝트 또는 어레이 메모리 오브젝트를 나타낼 수 있다. 어레이 메모리 오브젝트는 데이터 엘리먼트의 일차원 모음일 수 있다. 이미지 메모리 오브젝트는 텍스쳐, 프레임 버퍼 또는 이미지 등의 2차원, 3차원 또는 다른 다수차원 데이터를 저장하는 모음일 수 있다. 프로세싱 태스크는 입력 계산 메모리 오브젝트로부터 판독하는 것과 출력 계산 메모리 오브젝트로 기입하는 것을 포함하는 계산 메모리 API를 이용하여 계산 메모리 오브젝트 또는 스트림 상에서 동작하는 계산 프로그램 실행가능 파일에 의해 수행될 수 있다. 일 실시예에서, 계산 메모리 오브젝트는 계산 메모리 API를 이용하여 데이터 오브젝트를 업데이트하기 위하여 버퍼 오브젝트, 텍스쳐 오브젝트 또는 렌더 버퍼 오브젝트 등의 데이터 오브젝트에 부착될 수 있다. 데이터 오브젝트는 데이터 오브젝트 상의 텍스트 렌더링 등의 그래픽 데이터 프로세싱 동작을 활성화하는 API와 연관될 수 있다. 일 실시예에서, 메모리 오브젝트는 위에서 도 2에서 설명한 바와 같이 다수의 서브버퍼를 갖는 버퍼이다.
계산 메모리 오브젝트를 할당할 때, 프로세스(900)의 프로세싱 로직은 API 내의 규격에 따라 할당이 상주해야 하는 곳을 결정할 수 있다. 예를 들어, 계산 메모리 오브젝트는 도 1의 호스팅 시스템(101)에 대한 호스트 메모리와 같은 호스트 메모리 및/또는 도 2의 글로벌 메모리 또는 컨스턴트 메모리(217) 등의 컴퓨팅 장치 메모리 중에서 할당될 수 있다. 호스트 메모리 내에서 할당된 계산 메모리 오브젝트는 컴퓨팅 장치 메모리에 캐싱될 필요가 있을 수 있다. 프로세스(900)의 프로세싱 로직은 넌 블록킹 API 인터페이스를 이용하여, 예를 들어, 계산 메모리 오브젝트로 데이터가 로딩되었는지를 나타내는 동기화 데이터를 포함하는 생성된 이벤트 오브젝트에 기초하여, 할당된 계산 메모리 오브젝트로 데이터를 비동기적으로 로딩할 수 있다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 할당된 계산 메모리 오브젝트로부터 판독 또는 그에 기입할 때 메모리 액세스 동작을 스케줄링할 수 있다. 프로세스(900)의 프로세싱 로직은 할당된 스트림 메모리를 맵핑하여 애플리케이션의 논리적 어드레스를 형성할 수 있다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 도 1의 애플리케이션(103) 등의 호스트 프로세서에서 실행되는 애플리케이션으로부터의 API 요청에 기초하여 블록(901)에서 동작을 수행할 수 있다.
블록(903)에서, 일 실시예에 따르면, 프로세스(900)의 프로세싱 로직은 논리적 컴퓨팅 장치(예를 들어, 컴퓨팅 장치 그룹)에 대한 계산 프로그램 오브젝트를 생성할 수 있다. 계산 프로그램 오브젝트는 데이터 병렬 프로그램의 엔트리 포인트 또는 익스포트(exported) 함수를 나타내는 계산 커널의 그룹을 포함할 수 있다. 계산 커널은 데이터 병렬 태스크(예를 들어, 함수)를 수행하기 위하여 계산 유닛 상에서 실행될 수 있는 계산 프로그램 실행가능 파일에 대한 포인터를 포함할 수 있다. 각각의 계산 커널은 블록(901)에서 할당된 스트림 등의 함수 입력 또는 출력에 대하여 할당된 계산 메모리 오브젝트 또는 스트림을 포함하는 함수 인수의 그룹과 연관될 수 있다.
프로세스(900)의 프로세싱 로직은 블록(909)에서 계산 프로그램 바이너리 및/또는 계산 프로그램 소스를 계산 프로그램 오브젝트로 로딩할 수 있다. 계산 프로그램 바이너리는 컴퓨팅 장치 상에서 실행될 계산 프로그램 실행가능 파일을 기재하는 비트를 포함할 수 있다. 계산 프로그램 바이너리는 계산 프로그램 실행가능 파일 및/또는 계산 프로그램 실행가능 파일로 변환될 계산 프로그램 소스의 중간 표현일 수 있다. 일 실시예에서, 계산 프로그램 실행가능 파일은 예를 들어 타겟 물리적 컴퓨팅 장치(예를 들어, GPU 또는 CPU)의 타입, 버전 및/또는 스레드 그룹 크기 및/또는 스레드 그룹 차원 등의 모음(compliation) 옵션 또는 플래그와 연관된 기술(description) 데이터를 포함할 수 있다. 계산 프로그램 소스는 계산 프로그램 실행가능 파일이 컴파일링되는 소스 코드일 수 있다. 프로세스(900)의 프로세싱 로직은 블록(909)에서 계산 프로그램 소스에 대응하는 다수의 계산 프로그램 실행가능 파일을 로딩할 수 있다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 도 1의 계산 애플리케이션 라이브러리(105) 등의 계산 라이브러리를 통해 또는 애플리케이션으로부터 계산 프로그램 실행가능 파일을 로딩할 수 있다. 계산 프로그램 실행가능 파일은 해당 계산 프로그램 소스와 함께 로딩될 수 있다. 프로세스(900)의 프로세싱 로직은 블록(905)에서 계산 프로그램 오브젝트에 대한 함수 인수를 설정할 수 있다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 애플리케이션의 API 요청에 따라 블록(903, 905, 909)에서 동작을 수행할 수 있다.
블록(911)에서, 프로세스(900)의 프로세싱 로직은 실행 큐를 업데이트하여 논리적 컴퓨팅 장치로 계산 커널 오브젝트를 실행할 수 있다. 프로세스(900)의 프로세싱 로직은 도 1의 애플리케이션(103) 또는 계산 애플리케이션 라이브러리(105) 등의 애플리케이션 또는 계산 애플리케이션 라이브러리로부터 계산 실행시간, 예를 들어, 도 1의 계산 실행시간(109)로의 적절한 인수로 API 호출에 응답하여 계산 커널을 실행할 수 있다. 계산 커널을 실행하는 것은 계산 커널과 연관된 계산 프로그램 실행가능 파일을 실행하는 것을 포함한다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 계산 커널 실행 인스턴스를 생성하여 계산 커널을 실행할 수 있다. 계산 커널을 실행하는 도 1의 계산 실행시간(109) 등의 계산 실행시간에 대한 API 호출은 특성상 비동기일 수 있다. 실행 인스턴스는 도 1의 계산 실행시간(109) 등의 계산 실행시간에 의해 반환될 수 있는 계산 이벤트 오브젝트에 의해 식별될 수 있다. 계산 커널 실행 인스턴스는 실행 큐에 추가되어 계산 커널 인스턴스를 실행할 수 있다.
일 실시예에서, 계산 커널을 실행하는 계산 실행시간에 대한 API 호출은 스레드 그룹으로서 계산 프로세서 상에서 병렬로 동시에 실행하는 스레드의 수를 포함할 수 있다. API 호출은 사용될 계산 프로세서의 수를 포함할 수 있다. 계산 커널 실행 인스턴스는 해당 계산 프로그램 실행가능 파일을 실행하는 소망의 우선순위를 나타내는 우선순위 값을 포함할 수 있다. 계산 커널 실행 인스턴스는 또한 이전의 실행 인스턴스 및/또는 실행을 수행하는 스레드 그룹의 수 및 스레드의 예상 총수를 식별하는 이벤트 오브젝트를 포함할 수 있다. 스레드 그룹의 수 및 스레드의 총수는 API 호출에서 특정될 수 있다. 일 실시예에서, 이벤트 오브젝트는 이벤트 오브젝트를 포함하는 실행 인스턴스 및 이벤트 오브젝트에 의해 식별되는 다른 실행 인스턴스 사이의 실행 순서 관계를 지시할 수 있다. 이벤트 오브젝트를 포함하는 실행 인스턴스는 이벤트 오브젝트에 의해 식별된 또 다른 실행 인스턴스가 실행을 종료한 후에 실행될 것이 요구될 수 있다. 이벤트 오브젝트는 queue_after_event_object라 할 수 있다. 이벤트 및 이벤트 종속성은 이하의 도 11 및 12에서 더 설명한다. 일 실시예에서, 실행 큐는 해당 계산 프로그램 실행가능 파일을 실행하는 다수의 계산 커널 실행 인스턴스를 포함할 수 있다. 계산 프로그램 실행가능 파일에 대한 하나 이상의 계산 커널 실행 인스턴스는 실행 큐에서 실행을 위해 스케줄링될 수 있다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 애플리케이션으로부터의 API 요청에 응답하여 실행 큐를 업데이트할 수 있다. 실행 큐는 애플리케이션이 실행되는 호스팅 데이터 시스템에 의해 호스팅될 수 있다.
블록(913)에서, 프로세스(900)의 프로세싱 로직은 실행을 위한 실행 큐로부터 계산 커널 실행 인스턴스를 선택할 수 있다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 해당 논리적 컴퓨팅 장치에 따라 동시에 실행될 1보다 많은 계산 커널 실행 인스턴스를 선택할 수 있다. 프로세스(900)의 프로세싱 로직은 실행 큐 내의 다른 실행 인스턴스와의 연관된 우선순위 및 종속성 관계에 기초하여 실행 큐로부터 계산 커널 실행 인스턴스가 선택되는지를 결정할 수 있다. 계산 커널 실행 인스턴스는 계산 커널 오브젝트로 로딩된 실행가능 파일에 따라 해당 계산 커널 오브젝트를 실행함으로써 실행될 수 있다.
블록(917)에서, 일 실시예에서, 프로세스(900)의 프로세싱 로직은 계산 커널 오브젝트에 대한 논리적 컴퓨팅 장치와 연관된 물리적 컴퓨팅 장치에서 실행되는 선택된 계산 커널 인스턴스에 대응하는 계산 커널 오브젝트에 로딩된 복수의 실행가능 파일 중 하나를 선택할 수 있다. 프로세스(900)의 프로세싱 로직은 하나의 계산 커널 실행 인스턴스에 대하여 병렬로 1보다 많은 물리적 컴퓨팅 장치에서 실행되는 1보다 많은 실행가능 파일을 선택할 수 있다. 선택은 선택된 계산 커널 실행 인스턴스와 연관된 논리적 컴퓨팅 장치에 대응하는 물리적 컴퓨팅 장치의 현재 실행 상태에 기초할 수 있다. 물리적 컴퓨팅 장치의 실행 상태는 실행되는 스레드의 수, 로컬 메모리 사용 레벨 및 프로세서 사용 레벨(예를 들어, 단위 시간당 동작의 최대수 등)을 포함할 수 있다. 일 실시예서, 선택은 소정의 사용 레벨에 기초할 수 있다. 다른 실시예에서, 선택은 계산 커널 실행 인스턴스와 연관된 스레드 그룹의 수 및 스레드의 수에 기초할 수 있다. 프로세스(900)의 프로세싱 로직은 물리적 컴퓨팅 장치로부터 실행 상태를 검색할 수 있다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 호스팅 시스템에서 실행되는 애플리케이션에 비동기적으로 블록(913 내지 917)에서 실행될 실행 큐로부터 계산 커널 실행 인스턴스를 선택하는 동작을 수행할 수 있다.
블록(919)에서, 프로세스(900)의 프로세싱 로직은 실행 큐에서 실행되도록 스케줄링된 계산 커널 실행 인스턴스의 실행 상태를 체크할 수 있다. 각각의 실행 인스턴스는 고유한 계산 이벤트 오브젝트에 의해 식별될 수 있다. 이벤트 오브젝트는 도 9의 애플리케이션(103) 또는 계산 애플리케이션 라이브러리(105) 등의 애플리케이션 또는 계산 애플리케이션 라이브러리로 반환될 수 있고, 애플리케이션 또는 계산 애플리케이션 라이브러리는 API를 호출하여 도 1의 실행시간(109) 등의 계산 실행시간에 따라 해당 계산 커널 실행 인스턴스가 큐될 때 실행 인스턴스를 실행한다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 애플리케이션으로부터의 API 요청에 응답하여 실행 상태 체크를 수행할 수 있다. 프로세스(900)의 프로세싱 로직은 계산 커널 실행 인스턴스를 식별하는 계산 이벤트 오브젝트의 상태를 쿼리함으로써 계산 커널 실행 인스턴스의 실행의 완료를 결정할 수 있다. 프로세스(900)의 프로세싱 로직은 계산 커널 실행 인스턴스의 실행이 완료되어 애플리케이션으로부터의 API 호출로 반환할 때까지 기다릴 수 있다. 프로세스(900)의 프로세싱 로직은 계산 이벤트 오브젝트에 기초하여 다양한 스트림을 판독 및/또는 기입하는 프로세싱 실행 인스턴스를 제어할 수 있다.
블록(921)에서, 일 실시예에 따라, 프로세스(900)의 프로세싱 로직은 계산 커널 실행 인스턴스를 실행하는 결과를 검색할 수 있다. 후속으로, 프로세스(900)의 프로세싱 로직은 계산 커널 실행 인스턴스를 실행하기 위하여 할당된 프로세싱 자원을 제거할 수 있다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 계산 커널 실행가능 파일을 실행하는 스트림 메모리 유지 결과를 로컬 메모리로 카피할 수 있다. 프로세스(900)의 프로세싱 로직은 블록(901)에서 할당된 가변 스트림 또는 이미지 스트림을 삭제할 수 있다. 프로세스(900)의 프로세싱 로직은 계산 커널 실행이 완료될 때 검출된 커널 이벤트 오브젝트를 삭제할 수 있다. 특정한 계산 커널 오브젝트와 연관된 각각의 계산 커널 실행 인스턴스가 완전히 실행되면, 프로세스(900)의 프로세싱 로직은 특정 계산 커널 오브젝트를 삭제할 수 있다. 일 실시예에서, 프로세스(900)의 프로세싱 로직은 애플리케이션에 의해 개시된 API 요청에 기초하여 블록(921)에서 동작을 수행할 수 있다.
도 10은 다수의 계산 유닛을 갖는 서브버퍼를 생성 및 이용하는 실행시간 프로세스(1000)의 실시예를 나타내는 흐름도이다. 예시적인 프로세스(1000)는 하드웨어(회로, 전용 로직, 등), 소프트웨어(전용 머신에서 실행됨), 또는 그 조합을 포함할 수 있는 프로세싱 로직에 의해 수행될 수 있다. 예를 들어, 프로세스(1000)는 호스팅 시스템(101)에 의해 호스팅된 데이터 프로세싱 시스템에서 도 1의 시스템(100)에 따라 수행될 수 있다. 데이터 프로세싱 시스템은 도 1의 계산 플롯폼층(141) 등의 플롯폼층을 호스팅하는 호스트 프로세서 및 도 1의 CPU(117) 및 GPU(115) 등의 호스트 프로세서에 부착된 다수의 물리적 컴퓨팅 장치를 포함할 수 있다.
도 10에서, 프로세스(1000)는 계산 유닛에 대한 서브버퍼를 생성하고, 여기서, 서브버퍼는 버퍼와 연관된다. 일 실시예에서, 프로세스(1000)는 현재 할당된 버퍼로부터 서브버퍼를 생성한다. 예를 들어, 일 실시예에서, 프로세스(1000)는 함수 호출을 이용하여 할당된 버퍼로부터 서브버퍼를 생성한다.
Figure 112014085590310-pat00008
여기서, buffer는 기존 버퍼이고, flags는 생성되는 이미지 메모리 오브젝트에 대한 할당 및 사용 정보를 특정하는데 사용되는 비트 필드이고, 표 3에 기재되며, size는 할당될 서브버퍼 메모리 오브젝트의 바이트 단위의 사이즈이다.
Figure 112014085590310-pat00009
는 생성될 버퍼 오브젝트의 타입을 기재한다.
Figure 112014085590310-pat00010
Figure 112014085590310-pat00011
가 가리키는 해당 기술자(descriptor)에 대하여 지원되는 값의 리스트는 표 4에 기재된다.
Figure 112014085590310-pat00012
Figure 112014085590310-pat00013
블록(1004)에서, 프로세스(1000)는 서브버퍼에 대한 계산 유닛이 페어런트 버퍼와 동일한 계산 유닛인지를 결정한다. 예를 들어, 일 실시예에서, 프로세스(1000)는 서브버퍼가 CPU에 대하여 생성된 것으로 결정한다. 계산 유닛이 다르면, 프로세스(1000)는 데이터를 서브버퍼와 연관된 계산 유닛의 개인 메모리로 카피한다. 예를 들어, 일 실시예에서, 계산 유닛이 GPU이고 버퍼와 연관된 계산 유닛이 CPU이면, 프로세스(1000)는 서브버퍼와 연관된 데이터를 GPU의 메모리에 카피한다. 도 4를 다시 참조하면, 프로세스(1000)는 서브버퍼(예를 들어, 서브버퍼(410A)) 중의 하나로부터 데이터를 GPU의 메모리(예를 들어, 계산 유닛(402A)의 개인 메모리(404A))에 카피한다. 계산 유닛이 서브버퍼 및 버퍼에 대하여 동일하면, 블록(1006)에서 프로세스(1000)는 포인터를 이용하여 서브버퍼 내의 데이터를 액세스한다. 예를 들어, 일 실시예에서, 프로세스(1000)는 포인터(412A)를 이용하여 위에서 도 4에서 설명한 바와 같이 서브버퍼(410A) 내의 데이터를 액세스한다. 프로세스(1000)가 포인터를 이용하여 데이터를 액세스하고 변경된 데이터를 업데이트할 필요 없기 때문에, 프로세스(1000)는 1006에서 종료한다.
반면, 프로세스(1000)가 데이터를 서브버퍼와 연관된 계산 유닛의 개인 메모리에 카피하면, 예를 들어, 일 실시예에서, 블록(1010)에서, 프로세스(1000)는 그 계산 유닛의 개인 메모리 내의 데이터에 대한 업데이트를 트랙킹한다. 트랙킹된 업데이트에 기초하여, 블록(1012)에서 프로세스(1000)는 업데이트를 페어런트 버퍼로 전송한다. 일 실시예에서, 프로세스(1000)는 즉시 업데이트를 전송하지만, 다른 실시예에서, 프로세스(1000)는 상이한 방식으로 업데이트를 전송한다 (예를 들어, 주기적으로 업데이트를 전송하거나 자동으로 업데이트를 전송한다).
계산 유닛에 대한 서브버퍼의 생성, 사용 및/또는 관리에 더하여, 시스템(100)은 이벤트를 이용하여 도 8 및 9를 참조하여 상술한 바와 같이 컨텍스트의 동작을 동기화할 수 있다. 일 실시예에서, 이벤트 오브젝트는 명령 등의 동작의 상태를 캡슐화한다. 이 실시예에서, 이들 오브젝트는 컨텍스트 내의 동작을 동기화하는데 사용될 수 있다. 또한, 시스템(100)은 이벤트 대기 리스트를 이용하여 특정한 명령이 실행을 시작할 때를 제어할 수 있다. 이벤트 대기 리스트는 이벤트 오브젝트의 리스트이다. 도 11은 내부 및 외부 의존성을 갖는 이벤트와 연관된 콜백을 실행하는 프로세스(1100)의 일 실시예를 나타내는 흐름도이다. 일 실시예에서, 콜백은 컨텍스트 내에서 발생하는 이벤트(예를 들어, 이벤트 등)를 보고하는데 사용된다. 도 8을 참조하여 상술한 바와 같이, 컨텍스트는 하나 이상의 계산 유닛과 함께 생성되어 명령 큐, 메모리, 프로그램, 커널 오브젝트 등의 오브젝트를 관리하고 컨텍스트 내에서 특정된 하나 이상의 계산 유닛 상에서 커널을 실행하는데 사용된다.
예시적인 프로세스(1100)는 하드웨어(회로, 전용 로직, 등), 소프트웨어(전용 머신에서 실행됨), 또는 그 조합을 포함하는 프로세싱 로직에 의해 수행될 수 있다. 예를 들어, 프로세스(1100)는 호스팅 시스템(101)에 의해 호스팅된 데이터 프로세싱 시스템 내에서 도 1의 시스템(100)에 따라 수행될 수 있다. 데이터 프로세싱 시스템은 도 1의 계산 플롯폼층(141) 등의 플랫폼층을 호스팅하는 호스트 프로세서 및 도 1의 CPU(117) 및 GPU(115) 등의 호스트 프로세서에 부착된 다수의 물리적 컴퓨팅 장치를 포함할 수 있다.
프로세스(1100)는 이벤트를 등록하여 컨텍스트로 콜백을 실행하고, 여기서, 이벤트는 블록(1102)에서 외부 의존성을 갖는다. 일 실시예에서, 이벤트는 내부, 외부 의존성 및/또는 의존성이 없을 수 있다. 내부 의존성을 갖는 이벤트는 이벤트와 연관된 콜백이 실행되기 전에 내부 의존성이 해결되는 것을 의미한다. 일 실시예에서, 내부 의존성은 커널 실행 명령 또는 관리 명령(예를 들어, 메모리 오베젝트에 대한 명령을 판독, 기입, 맵핑, 카피) 등의 시스템 인식 이벤트이다. 외부 의존성은 사용자 정의 이벤트이고 이 외부 의존성은 콜백이 실행되기 전에 해결되어야 한다. 예를 들어, 일 실시예에서, 사용자 정의 이벤트는 인큐된(enqueued) 명령이 해당 계산 유닛에 의해 실행되기 전에 종료할 사용자 이벤트를 기다리는 명령을 애플리케이션이 인큐하도록 할 수 있다. 다른 실시예에서, 사용자 이벤트 오브젝트는 애플리케이션 특정 에러 조건을 보고하는데 사용될 수 있다. 일 실시예에서, 이벤트 의존성은 이벤트 대기 리스트에 저장될 수 있다.
블록(1104)에서, 프로세스(1100)는 등록된 이벤트가 발생했다는 통지를 수신한다. 일 실시예에서, 프로세스(1100)는 에벤트를 기다리는 기능을 인보크함으로써 이벤트의 통지를 수신한다. 블록(1106)에서, 프로세스(1100)는 등록된 이벤트가 임의의 해결되지 않은 내부 이벤트를 갖는지를 결정한다. 예를 들어, 일 실시예에서, 프로세스(1100)는 등록된 이벤트와 연관된 이벤트 대기 리스트가 임의의 내부 의존성을 갖는지를 결정한다. 임의의 내부 의존성이 있으면, 프로세스(1100)는 블록(1112)에서 콜백의 실행을 지연한다. 일 실시예에서, 프로세스(1100)는 내부 의존성이 해결될 때까지 실행을 지연한다. 예를 들어, 일 실시예에서, 의존성을 해결하는 것은 완료될 의존 이벤트와 연관된 명령을 기다리는 것을 포함할 수 있다.
등록된 이벤트에 대한 내부 의존성이 없으면, 프로세스(1100)는 블록(1108)에서 등록된 이벤트가 임의의 외부 의존성을 갖는지를 결정한다. 예를 들어, 일 실시예에서, 프로세스(1100)는 등록된 이벤트와 연관된 이벤트 대기 리스트가 임의의 외부 의존성을 갖는지를 결정한다. 임의의 외부 의존성이 있으면, 블록(1112)에서 프로세스(1100)는 콜백의 실행을 지연한다. 일 실시예에서, 프로세스(1100)는 외부 의존성이 해결될 때까지 실행을 지연한다. 예를 들어, 일 실시예에서, 의존성을 해결하는 것은 완료할 의존 이벤트와 연관된 명령을 기다리는 것을 포함할 수 있다.
도 12는 내부 및 외부 의존성을 갖는 이벤트(1202A-D)의 체인의 일 실시예를 나타내는 블록도이다. 도 12에서, 이벤트(1202A)는 3개의 내부 이벤트(1202B-D) 및 외부 이벤트, 사용자 이벤트(1204)를 포함하는 의존성 체인을 갖는다. 예를 들어, 일 실시예에서, 이벤트(1202A)는 이벤트(1202B)에 의존하고, 이벤트(1202B)는 이벤트(1202C)에 의존하고, 이벤트(1202C)는 이벤트(1202D)에 의존하고, 이벤트(1202D)는 사용자 이벤트(1204)에 의존한다. 이 실시예에서, 이벤트(1202D)는 사용자 이벤트(1204)가 해결되기를 기다리고, 이벤트(1202C)는 이벤트(1202D 및 1204)가 해결되기를 기다리고, 이벤트(1202B)는 이벤트(1202C-D 및 1204)가 해결되기를 기다리고, 이벤트(1202B)는 이벤트(1202B-D 및 1204)가 해결되기를 기다린다.
도 13은 복수의 물리적 컴퓨팅 장치에서 실행될 계산 프로그램 실행가능 파일에 대한 계산 프로그램 소스 코드의 예를 나타내는 샘플 소스 코드이다. 예(1300)는 변수(1301) 및 스트림(또는 계산 메모리 오브젝트)(1303)을 포함하는 인수를 갖는 API 기능을 나타낼 수 있다. 예(1300)는 도 1의 시스템(131) 등의 병렬 컴퓨팅 환경에 대한 프로그래밍 언어에 기초할 수 있다. 일 실시예에서, 병렬 프로그래밍 언어는 여기에 기재된 실시예 중의 하나 이상을 구현하도록 설계된 추가의 확장자 및 제한을 갖는 ANSI(American National Standards Institute) C 표준에 따라 특정될 수 있다. 확장자는 퀄리파이어(1305) 등의 함수 퀄리파이어를 포함하여 컴퓨팅 장치에서 실행될 계산 커널 함수를 특정할 수 있다. 계산 커널 함수는 다른 계산 커널 함수에 의해 호출될 수 없다. 일 실시예에서, 계산 커널 함수는 병렬 프로그램 언어에서 호스트 함수에 의해 호출될 수 있다. 호스트 함수는 규칙적인 ANSI C 함수일 수 있다. 호스트 함수는 계산 커널 함수를 실행하는 컴퓨팅 장치와는 별개인 호스트 프로세서에서 실행될 수 있다. 일 실시예에서, 확장자는 로컬 퀄리파이어를 포함하여 스레드 그룹의 모든 스레드에 의해 공유될 컴퓨팅 장치와 연관된 로컬 메모리에 할당될 필요가 있는 변수를 기재할 수 있다. 로컬 퀄리파이어는 계산 커널 함수 내에서 선언될 수 있다. 병렬 프로그래밍 언어의 제한은 컴파일러 시간 또는 실행 시간 동안 실행되어 제한이 위반될 때 에러 메시지 출력 또는 실행 종료 등의 에러 상태를 생성할 수 있다.
도 14a 내지 14c는 API를 호출함으로써 복수의 물리적 컴퓨팅 장치에서 복수의 실행가능 파일 중의 하나를 실행하는 논리적 컴퓨팅 장치를 구성하는 예를 나타내는 샘플 소스 코드를 포함한다. 예(1400A-1400C)는 도 1의 호스팅 시스템(101) 등의 다수의 물리적 컴퓨팅 장치가 부착된 호스트 시스템에서 실행되는 애플리케이션에 의해 실행될 수 있다. 예(1400A-1400C)는 병렬 프로그래밍 언어의 호스트 함수를 특정할 수 있다. 예(1400A-1400C)에서의 프로세싱 동작은 도 8의 프로세스(800) 및/또는 도 9의 프로세스(900) 등의 프로세스에 의해 API 호출로서 수행될 수 있다. 컴퓨팅 장치, 컴퓨팅 장치 그룹 또는 논리적 컴퓨팅 장치(1401)로부터 컨텍스트 오브젝트를 생성하는 프로세싱 동작은 도 8의 블록(811)에서 프로세스(800)의 프로세싱 로직에 의해 수행될 수 있다. 입출력 이미지 메모리 오브젝트(예를 들어, 계산 메모리 오브젝트)를 할당하는 프로세싱 동작은 도 9의 블록(901)에서 프로세스(900)의 프로세싱 로직에 의해 수행될 수 있다.
도 14b를 참조하면, 어레이 메모리 오브젝트(1403b)를 할당하고 로딩하는 프로세싱 동작은 도 9의 블록(901)에서 프로세스(900)의 프로세싱 로직에 의해 수행될 수 있다. 계산 프로그램 오브젝트(1405)를 생성하는 프로세싱 동작은 도 9의 블록(903)에서 프로세스(900)의 프로세싱 로직에 의해 수행될 수 있다. 프로세싱 동작(1407)은 도 9의 예(900) 등의 계산 프로그램 소스를 생성된 계산 프로그램 오브젝트로 로딩할 수 있다. 프로세싱 동작(1409)은 로딩된 계산 프로그램 소스로부터 계산 프로그램 실행가능 파일을 명시적으로 생성할 수 있다. 일 실시예에서, 프로세싱 동작(1409)은 이미 생성된 계산 프로그램 실행가능 파일을 생성된 계산 프로그램 오브젝트로 로딩할 수 있다. 후속으로, 프로세싱 동작(1411)은 컴퓨팅 장치 상의 실행을 스케줄링하기 위하여 생성된 계산 프로그램 실행가능 파일을 지시하는 계산 커널 오브젝트를 생성할 수 있다.
도 14c를 참조하면, 일 실시예에서, 프로세싱 동작(1413)은 변수를 부착하고 생성된 계산 커널 오브젝트에 대한 함수 인수로서 메모리 오브젝트를 계산할 수 있다. 프로세싱 동작(1413)은 도 9의 블록(905)에서 프로세스(900)의 프로세싱 로직에 의해 수행될 수 있다. 프로세싱 동작(1415)은 생성된 계산 커널 오브젝트를 실행할 수 있다. 일 실시예에서, 프로세싱 동작(1415)은 도 9의 블록(911)에서 프로세스(900)의 프로세싱 로직에 의해 수행될 수 있다. 프로세싱 동작(1415)은 실행 큐가 생성된 계산 커널 오브젝트에 대응하는 계산 커널 실행 인스턴스로 업데이트되도록 한다. 프로세싱 동작(1417)은 생성된 계산 커널 오브젝트의 실행 완료를 동기하여 기다릴 수 있다. 일 실시예에서, 프로세싱 동작(1419)은 계산 커널 오브젝트의 실행으로부터 결과를 검색할 수 있다. 후속으로, 프로세싱 동작(1191)은 이벤트 오브젝트, 생성된 계산 커널 오브젝트 및 할당된 메모리 등의 계산 커널 오브젝트를 실행하는 할당된 자원을 제거(clean up)할 수 있다. 일 실시예에서, 프로세싱 동작(1417)은 커널 이벤트 오브젝트가 설정되는지에 기초하여 비동기적으로 수행될 수 있다. 프로세싱 동작(1417)은 도 9의 블록(919)에서 프로세스(900)에 의해 수행될 수 있다.
도 15는 여기에 기재된 실시예와 결합하여 사용될 수 있는 컴퓨터 시스템(1500)의 일 예를 나타내는 도면이다. 예를 들어, 시스템(1500)은 도 1에 도시된 시스템을 일부로서 구현될 수 있다. 도 15는 컴퓨터 시스템의 다양한 구성요소를 나타내지만, 이들 세부사항은 본 발명에 밀접하게 관련되지 않으므로, 이러한 세부사항으로서의 구성요소를 상호 접속하는 방식 또는 임의의 특정한 아키텍쳐를 나타내는 것으로 의도되지 않는다. 더 적은 구성요소 또는 더 많은 구성요소를 갖는 네트워크 컴퓨터 및 다른 데이터 프로세싱 시스템(예를 들어, 핸드헬드 컴퓨터, 개인 휴대 단말기(PDA), 셀룰러 전화, 엔터테인먼트 시스템, 고객 전자 장치 등)이 사용되어 본 발명의 하나 이상의 실시예를 구현할 수 있음을 알 것이다.
도 15에 도시된 바와 같이, 데이터 프로세싱 시스템의 형태인 컴퓨터 시스템(1500)은 CPU 및 GPU 등의 마이크로프로세서(들)(1505), ROM(1507), 휘발성 RAM(1509) 및 비휘발성 메모리(1911)에 결합된 버스(1503)를 포함한다. 마이크로프로세서(1505)는 메모리(1507, 1509, 1911)로부터 명령을 검색하고 캐시(1521)를 이용하여 명령을 실행하여 상술한 동작을 수행한다. 버스(1503)는 다양한 구성요소들을 함께 상호접속시키고, 또한 이들 구성요소(1505, 1507, 1509, 1911)를 디스플레이 컨트롤러 및 디스플레이 장치(1913)에, 그리고 마우스, 키보드, 모뎀, 네트워크 인터페이스, 프린터 및 본 기술분야에 공지된 다른 장치일 수 있는 입출력(I/O) 장치 등의 주변 장치에 상호접속시킨다. 일반적으로, 입출력 장치(915)는 입출력 컨트롤러(1917)를 통해 시스템에 결합된다. 휘발성 RAM(1509)은 일반적으로 메모리 내의 데이터를 리프레쉬하거나 유지하기 위하여 연속적으로 전력을 필요로 하는 동적 RAM(DRAM)으로서 구현된다. 디스플레이 장치(1913)와 결합된 디스플레이 컨트롤러는 선택적으로 디스플레이 데이터를 프로세싱하는 하나 이상의 GPU를 포함할 수 있다. 선택적으로, GPU 메모리(1919)는 디스플레이 장치(1913) 내에 포함된 GPU를 지원하도록 제공될 수 있다.
대용량 저장장치(1911)는 자기 하드 드라이브 또는 자기 광 드라이브 또는 광 드라이브 또는 DVD RAM 또는 플래시 메모리 또는 전력이 시스템으로부터 제거된 후에도 데이터(예를 들어, 많은 양의 데이터)를 유지하는 다른 타입의 메모리 시스템이다. 일반적으로, 대용량 저장장치(1911)는 또한 요구되는 것은 아니지만 랜덤 액세스 메모리일 수 있다. 도 15는 대용량 저장장치(1911)가 데이터 프로세싱 시스템 내의 구성요소의 나머지에 직접 결합된 로컬 장치인 것을 나타내지만, 본 발명은 모뎀 또는 이더넷 인터페이스 또는 무선 네트워킹 인터페이스 등의 네트워크 인터페이스를 통해 데이터 프로세싱 시스템에 결합된 네트워크 저장 장치 등의 시스템으로부터 원격인 비휘발성 메모리를 이용할 수 있음을 알 것이다. 버스(1503)는 본 기술에 공지된 바와 같이 다양한 브리지, 컨트롤러 및/또는 어댑터를 통해 서로 접속된 하나 이상의 버스를 포함할 수 있다.
상술한 것의 일부는 전용 로직 회로 등의 로직 회로 또는 마이크로컨트롤러 또는 프로그램 코드 명령을 실행하는 다른 형태의 프로세싱 코어로 구현될 수 있다. 따라서, 본 설명에 의한 프로세스는 명령을 실행하는 머신이 소정의 기능을 수행하도록 하는 머신 실행가능 명령 등의 프로그램 코드로 수행될 수 있다. 이 컨텍스트에서, "머신"은 중간 형태(또는 "앱스트랙트(abstract)") 명령을 프로세서 특정 명령(예를 들어 "가상 머신"(예를 들어, 자바 가상 머신), 인터프리터(interpreter), 공통 언어 실행시간, 하이레벨 언어 가상 머신 등) 및/또는 범용 프로세서 및/또는 특수 목적 프로세서 등의 명령을 실행하도록 설계된 반도체 칩(예를 들어, 트랜지스터로 구현되는 "로직 회로") 상에 배치되는 전자 회로로 변환하는 머신일 수 있다. 상술한 설명에 의한 프로세스는 프로그램 코드의 실행 없이 프로세스(또는 그 일부)를 수행하도록 설계된 전자 회로에 의해 (머신의 대안으로 또는 머신과 결합하여) 수행될 수 있다.
제조 물품은 예를 들어 다수의 토큰(token)을 포함하는 프로그램 코드를 저장하는데 사용될 수 있다. 프로그램 코드를 저장하는 제조 물품은, 제한되지 않지만, 하나 이상의 메모리(예를 들어, 하나 이상의 플래시 메모리, 랜덤 액세스 메모리(정적, 동적 또는 다른), 광 디스크, CD-ROM, DVD ROM, EPROM, EEPROM, 자기 또는 광 카드 또는 전자 명령을 저장하기에 적합한 다른 형태의 머신 판독가능 매체로서 구현될 수 있다. 프로그램 코드는 또한 (예를 들어, 통신 링크(예를 들어, 네트워크 접속)를 이용하여) 전파 매체에서 구현되는 데이터 신호에 의해 원격 컴퓨터(예를 들어, 서버)로부터 요청 컴퓨터(예를 들어, 클라이언트)로 다운로드될 수 있다.
선행하는 상세한 설명은 컴퓨터 메모리 내의 데이터 비트에 대한 동작의 알고리즘 및 심볼 표현으로 제시된다. 이들 알고리즘 설명 및 표현은 데이터 프로세싱 기술에 숙련된 자에 의해 사용되어 본 기술에 숙련된 다른자에게 자신의 작업의 실체(substance)를 가장 효율적으로 전달하는 툴이다. 알고리즘은 소망의 결과를 초래하는 자기 모순이 없는 동작의 시퀀스로 예상된다. 동작은 물리적 양의 물리적 조작을 필요로 하는 것이다. 통상, 반드시는 아니지만, 이들 양은 저장, 전달, 결합, 비교 및 조작될 수 있는 전기 또는 자기 신호의 형태를 취할 수 있다. 때때로, 원칙적으로, 공통 사용의 이유로, 비트, 값, 엘리먼트, 심볼, 캐릭터, 텀(term), 수 등의 신호를 참조하는 것이 편리하다.
그러나, 이들 및 유사한 용어 전부는 적절한 물리적 양과 연관되고 단지 이들 양에 적용되는 편리한 라벨일 뿐임을 명심해야 한다. 상기 설명에서 명백한 바와 같이 특별히 다르게 표현되지 않으면, 명세서 전반에 걸쳐, "프로세싱" 또는 "컴퓨팅" 또는 "산출" 또는 "결정" 또는 "디스플레이" 또는 카피" 또는 트랙킹" 또는 "전송" 등의 용어를 이용하는 설명은 컴퓨터 시스템의 레지스터 및 메모리 내의 물리적(전자적) 양으로서 나타내는 데이터를 컴퓨터 시스템 메모리 또는 레지스터 또는 이러한 다른 정보 저장, 전송 또는 디스플레이 장치 내의 물리적 양으로서 유사하게 표시되는 다른 데이터로 조작 및 변환하는 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 장치의 동작 및 프로세스를 지칭한다.
본 발명은 또한 여기에 기재된 동작을 수행하는 장치에 관한 것이다. 이 장치는 특히 필요한 목적을 위해 구성되거나 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 재구성되는 범용 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은, 제한되지 않지만, 각각 컴퓨터 시스템 버스에 결합된 플로피 디스크, 광 디스크, CD-ROM 및 광자기 디스크를 포함하는 임의의 타입의 디스크, ROM, RAM, EPROM, EEPROM, 자기 또는 광 카드 또는 전자 명령을 저장하기에 적합한 임의의 타입의 매체 등의 컴퓨터 판독가능 저장 매체에 저장될 수 있다.
여기에 제시된 프로세스 및 디스플레이는 임의의 특정한 컴퓨터 또는 다른 장치와 본질적으로 관련되지 않는다. 다양한 범용 시스템은 본 사상에 따라 프로그램과 함께 사용되거나 기재된 동작을 수행하도록 좀 더 특수화된 장치를 구성하는 것이 편리할 수 있다. 다양한 이들 시스템에 대해 필요한 구조는 이하의 설명으로부터 명백하다. 또한, 본 발명은 임의의 특정한 프로그래밍 언어를 참조하여 설명되지 않는다. 다양한 프로그래밍 언어가 여기에 기재된 바와 같이 본 발명의 사상을 구현하는데 사용될 수 있음이 명백하다.
상술한 설명은 단지 본 발명의 예시적인 실시예를 설명하는 것이다. 본 기술에 숙련된 자는 이러한 설명, 첨부된 도면 및 청구범위로부터 다양한 변형이 본 발명의 취지 및 범위를 벗어나지 않고 가능함을 쉽게 인식할 것이다.

Claims (21)

  1. 이종 계산 환경을 포함하는 데이터 프로세싱 시스템에 의해 실행되는, 페어런트 버퍼와 연관된 복수의 서브버퍼를 관리하는 컴퓨터화된 방법으로서,
    프로세스를 위하여 상기 페어런트 버퍼를 할당하는 단계 - 상기 프로세스는 복수의 이종 계산 유닛을 이용하고, 상기 복수의 이종 계산 유닛은 중앙 프로세싱 유닛 및 그래픽 프로세싱 유닛을 포함하며, 상기 복수의 이종 계산 유닛은 단일 장치상에 상주함 -;
    상기 복수의 서브버퍼 내의 각각의 서브버퍼에 대하여,
    상기 페어런트 버퍼로부터, 복수의 이종 계산 유닛 중의 하나에 대한 해당 서브버퍼를 생성하는 단계 - 상기 복수의 이종 계산 유닛 각각에 대하여 상이한 서브버퍼가 존재함 -, 및
    해당 서브버퍼 내에 서브버퍼 데이터를 저장하는 단계;
    상기 페어런트 버퍼와 연관되지 않은 상기 복수의 이종 계산 유닛 중 하나에 대응하는 서브버퍼 각각에 대하여,
    상기 서브버퍼 데이터에 대한 업데이트를 대응하는 계산 유닛의 개인 메모리 내에서 관리하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 서브버퍼 데이터에 대한 상기 업데이트를 상기 개인 메모리 내에서 관리하는 단계는,
    해당 서브버퍼 내의 데이터를 해당 서브버퍼에 대응하는 계산 유닛에 대한 개인 메모리에 카피하는 단계;
    상기 대응하는 계산 유닛에 대한 상기 개인 메모리 내의 서브버퍼 데이터에 대한 업데이트를 트랙킹하는 단계; 및
    해당 서브버퍼에 상기 업데이트를 전송하는 단계
    를 포함하는 방법.
  3. 제1항에 있어서, 해당 서브버퍼와 연관된 계산 유닛이 상기 페어런트 버퍼와 연관된 동일한 계산 유닛이면, 상기 서브버퍼 데이터를 저장하는 단계 이후에, 포인터를 이용하여 상기 서브버퍼 데이터를 액세스하기 위하여 상기 페어런트 버퍼 내의 해당 서브버퍼에 대한 상기 포인터를 생성하는 단계를 더 포함하는 방법.
  4. 제3항에 있어서, 상기 포인터는 상기 페어런트 버퍼로의 오프셋인 방법.
  5. 제1항에 있어서, 상기 페어런트 버퍼는 일차원 버퍼, 2차원 버퍼 및 3차원 버퍼로 구성된 그룹으로부터 선택되는 방법.
  6. 제1항에 있어서, 상기 페어런트 버퍼는 시스템 메모리로부터 구성되는 방법.
  7. 제1항에 있어서, 상기 페어런트 버퍼는 OpenCL(Open Computing Language) 버퍼인 방법.
  8. 제1항에 있어서, 상기 페어런트 버퍼와 연관된 계산 유닛은 중앙 프로세싱 유닛이고, 상기 페어런트 버퍼와 연관되지 않은 계산 유닛은 그래픽 프로세싱 유닛인 방법.
  9. 제1항에 있어서, 이종 계산 유닛과 연관된 서브버퍼는 이종 계산 유닛과 연관되지 않은 서브버퍼와는 상이한 메모리 영역을 차지하는 방법.
  10. 이종 계산 환경에서 페어런트 버퍼와 연관된 복수의 서브버퍼를 관리하는 방법을 하나 이상의 프로세싱 유닛이 수행하도록 하는 실행가능한 명령어들을 갖는 비일시적(non-transitory) 머신 판독가능 매체로서, 상기 방법은,
    프로세스를 위하여 상기 페어런트 버퍼를 할당하는 단계 - 상기 프로세스는 복수의 이종 계산 유닛을 이용하고, 상기 복수의 이종 계산 유닛은 중앙 프로세싱 유닛 및 그래픽 프로세싱 유닛을 포함하며, 상기 복수의 이종 계산 유닛은 단일 장치상에 상주함 -;
    상기 복수의 서브버퍼 내의 각 서브버퍼에 대하여,
    상기 페어런트 버퍼로부터, 복수의 이종 계산 유닛 중의 하나에 대한 해당 서브버퍼를 생성하는 단계 - 상기 복수의 이종 계산 유닛 각각에 대하여 상이한 서브버퍼가 존재함 -, 및
    해당 서브버퍼 내에 서브버퍼 데이터를 저장하는 단계; 및
    상기 페어런트 버퍼와 연관되지 않은 상기 복수의 이종 계산 유닛 중 하나에 대응하는 서브버퍼 각각에 대하여,
    상기 서브버퍼 데이터에 대한 업데이트를 대응하는 계산 유닛의 개인 메모리 내에서 관리하는 단계
    를 포함하는 비일시적 머신 판독가능 매체.
  11. 제10항에 있어서,
    상기 서브버퍼 데이터에 대한 업데이트를 상기 개인 메모리 내에서 관리하는 단계는,
    해당 서브버퍼 내의 데이터를 해당 서브버퍼에 대응하는 계산 유닛에 대한 개인 메모리에 카피하는 단계;
    상기 대응하는 계산 유닛에 대한 상기 개인 메모리 내의 서브버퍼 데이터에 대한 업데이트를 트랙킹하는 단계; 및
    해당 서브버퍼에 상기 업데이트를 전송하는 단계
    를 포함하는 비일시적 머신 판독가능 매체.
  12. 제10항에 있어서, 상기 방법은 해당 서브버퍼와 연관된 계산 유닛이 상기 페어런트 버퍼와 연관된 동일한 계산 유닛이면, 상기 서브버퍼 데이터를 저장하는 단계 이후에, 포인터를 이용하여 상기 서브버퍼 데이터를 액세스하기 위하여 상기 페어런트 버퍼 내의 해당 서브버퍼에 대한 상기 포인터를 생성하는 단계를 더 포함하는 비일시적 머신 판독가능 매체.
  13. 제10항에 있어서, 상기 페어런트 버퍼는 일차원 버퍼, 2차원 버퍼 및 3차원 버퍼로 구성된 그룹으로부터 선택되는 비일시적 머신 판독가능 매체.
  14. 제10항에 있어서, 상기 페어런트 버퍼는 OpenCL 버퍼인 비일시적 머신 판독가능 매체.
  15. 제10항에 있어서, 상기 페어런트 버퍼와 연관된 계산 유닛은 중앙 프로세싱 유닛이고, 상기 페어런트 버퍼와 연관되지 않은 계산 유닛은 그래픽 프로세싱 유닛인 비일시적 머신 판독가능 매체.
  16. 제10항에 있어서, 이종 계산 유닛과 연관된 서브버퍼는 이종 계산 유닛과 연관되지 않은 서브버퍼와는 상이한 메모리 영역을 차지하는 비일시적 머신 판독가능 매체.
  17. 이종 계산 환경에서 페어런트 버퍼와 연관된 복수의 서브버퍼를 관리하는 장치로서,
    프로세스를 위하여 상기 페어런트 버퍼를 할당하기 위한 수단 - 상기 프로세스는 복수의 이종 계산 유닛을 이용하고, 상기 복수의 이종 계산 유닛은 중앙 프로세싱 유닛 및 그래픽 프로세싱 유닛을 포함하며, 상기 복수의 이종 계산 유닛은 단일 장치상에 상주함 -;
    상기 복수의 서브버퍼 내의 각 서브버퍼에 대하여,
    상기 페어런트 버퍼로부터, 복수의 이종 계산 유닛 중의 하나에 대한 해당 서브버퍼를 생성하기 위한 수단 - 상기 복수의 이종 계산 유닛 각각에 대하여 상이한 서브버퍼가 존재함 -, 및
    해당 서브버퍼 내에 서브버퍼 데이터를 저장하기 위한 수단;
    상기 페어런트 버퍼와 연관되지 않은 상기 복수의 이종 계산 유닛 중 하나에 대응하는 서브버퍼 각각에 대하여,
    상기 서브버퍼 데이터에 대한 업데이트를 대응하는 계산 유닛의 개인 메모리 내에서 관리하기 위한 수단
    을 포함하는 장치.
  18. 제17항에 있어서,
    상기 서브버퍼 데이터에 대한 업데이트를 상기 개인 메모리 내에서 관리하기 위한 수단은,
    해당 서브버퍼 내의 데이터를 해당 서브버퍼에 대응하는 계산 유닛에 대한 개인 메모리에 카피하기 위한 수단;
    상기 대응하는 계산 유닛에 대한 상기 개인 메모리 내의 서브버퍼 데이터에 대한 업데이트를 트랙킹하기 위한 수단; 및
    해당 서브버퍼에 상기 업데이트를 전송하는 수단
    을 포함하는 장치.
  19. 제17항에 있어서, 해당 서브버퍼와 연관된 계산 유닛이 상기 페어런트 버퍼와 연관된 동일한 계산 유닛이면, 포인터를 이용하여 상기 서브버퍼 데이터를 액세스하기 위하여 상기 페어런트 버퍼 내의 해당 서브버퍼에 대한 상기 포인터를 생성하기 위한 수단을 더 포함하는 장치.
  20. 제17항에 있어서, 상기 페어런트 버퍼는 OpenCL 버퍼인 장치.
  21. 제17항에 있어서, 상기 페어런트 버퍼와 연관된 계산 유닛은 중앙 프로세싱 유닛이고, 상기 페어런트 버퍼와 연관되지 않은 계산 유닛은 그래픽 프로세싱 유닛인 장치.
KR1020147025300A 2010-05-20 2011-04-20 서브버퍼 오브젝트 KR101558831B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US34686610P 2010-05-20 2010-05-20
US61/346,866 2010-05-20
US12/892,834 2010-09-28
US12/892,834 US8723877B2 (en) 2010-05-20 2010-09-28 Subbuffer objects
PCT/US2011/033282 WO2011146197A1 (en) 2010-05-20 2011-04-20 Subbuffer objects

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020127028488A Division KR101477882B1 (ko) 2010-05-20 2011-04-20 서브버퍼 오브젝트

Publications (2)

Publication Number Publication Date
KR20140117689A KR20140117689A (ko) 2014-10-07
KR101558831B1 true KR101558831B1 (ko) 2015-10-08

Family

ID=44260533

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020127028488A KR101477882B1 (ko) 2010-05-20 2011-04-20 서브버퍼 오브젝트
KR1020147025300A KR101558831B1 (ko) 2010-05-20 2011-04-20 서브버퍼 오브젝트

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020127028488A KR101477882B1 (ko) 2010-05-20 2011-04-20 서브버퍼 오브젝트

Country Status (12)

Country Link
US (3) US8723877B2 (ko)
EP (1) EP2572276B1 (ko)
JP (2) JP5583844B2 (ko)
KR (2) KR101477882B1 (ko)
CN (1) CN102870096B (ko)
AU (1) AU2011256745B2 (ko)
BR (1) BR112012027950B1 (ko)
CA (1) CA2795365C (ko)
DE (1) DE112011101725T5 (ko)
GB (1) GB2480536B (ko)
MX (1) MX2012012534A (ko)
WO (1) WO2011146197A1 (ko)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8669990B2 (en) 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
US8723877B2 (en) 2010-05-20 2014-05-13 Apple Inc. Subbuffer objects
WO2011156746A2 (en) * 2010-06-11 2011-12-15 California Institute Of Technology Systems and methods for rapid processing and storage of data
US8752018B2 (en) 2011-06-21 2014-06-10 Nvidia Corporation Emitting coherent output from multiple threads for printf
US20130141443A1 (en) * 2011-12-01 2013-06-06 Michael L. Schmit Software libraries for heterogeneous parallel processing platforms
US9864635B2 (en) * 2012-01-06 2018-01-09 Intel Corporation Reducing the number of read/write operations performed by a CPU to duplicate source data to enable parallel processing on the source data
US9996394B2 (en) * 2012-03-01 2018-06-12 Microsoft Technology Licensing, Llc Scheduling accelerator tasks on accelerators using graphs
US9864638B2 (en) * 2012-06-22 2018-01-09 Intel Corporation Techniques for accessing a graphical processing unit memory by an application
US20140101761A1 (en) * 2012-10-09 2014-04-10 James Harlacher Systems and methods for capturing, replaying, or analyzing time-series data
US9424079B2 (en) 2013-06-27 2016-08-23 Microsoft Technology Licensing, Llc Iteration support in a heterogeneous dataflow engine
US9286328B2 (en) * 2013-07-19 2016-03-15 International Business Machines Corporation Producing an image copy of a database object based on information within database buffer pools
US9703696B1 (en) * 2013-09-11 2017-07-11 Altera Corporation Guided memory buffer allocation
US11789769B2 (en) 2013-09-20 2023-10-17 Qualcomm Incorporated System and method for generation of event driven, tuple-space based programs
US10564949B2 (en) * 2013-09-20 2020-02-18 Reservoir Labs, Inc. System and method for generation of event driven, tuple-space based programs
US20150091912A1 (en) * 2013-09-27 2015-04-02 Nvidia Corporation Independent memory heaps for scalable link interface technology
US9411652B2 (en) * 2014-08-22 2016-08-09 Advanced Micro Devices, Inc. Runtime for automatically load-balancing and synchronizing heterogeneous computer systems with scoped synchronization
CN104714850B (zh) * 2015-03-02 2016-03-30 心医国际数字医疗系统(大连)有限公司 一种基于opencl的异构共同计算均衡方法
US9916634B2 (en) * 2015-06-12 2018-03-13 Intel Corporation Facilitating efficient graphics command generation and execution for improved graphics performance at computing devices
GB2540940B (en) * 2015-07-31 2018-01-03 Advanced Risc Mach Ltd An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank
EP3188013B1 (en) * 2015-12-29 2022-07-13 Dassault Systèmes Management of a plurality of graphic cards
WO2017126924A1 (ko) * 2016-01-19 2017-07-27 서울대학교 산학협력단 이종 시스템에서의 데이터 분배 기법
US10152243B2 (en) * 2016-09-15 2018-12-11 Qualcomm Incorporated Managing data flow in heterogeneous computing
KR20180044635A (ko) 2016-10-24 2018-05-03 삼성전자주식회사 저장 시스템 및 그것의 동작 방법
WO2018119778A1 (en) * 2016-12-28 2018-07-05 Intel Corporation System and method for vector communication
KR102066212B1 (ko) * 2017-01-19 2020-01-14 서울대학교산학협력단 병렬 시스템에서의 데이터 복사 방법 및 이를 수행하기 위한 병렬 시스템
JP6932755B2 (ja) * 2018-10-19 2021-09-08 イーソル株式会社 オペレーティングシステム及びメモリ割り当て方法
JP2024006858A (ja) 2022-07-04 2024-01-17 リベラルロジック株式会社 プログラム、情報処理システム及び情報処理方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040187094A1 (en) 1999-10-22 2004-09-23 Joseph Gil Methods for implementing virtual bases with fixed offsets in object oriented applications
US20080109795A1 (en) 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07500437A (ja) * 1991-10-24 1995-01-12 インテル コーポレイシヨン データ処理システム
US6115761A (en) 1997-05-30 2000-09-05 Lsi Logic Corporation First-In-First-Out (FIFO) memories having dual descriptors and credit passing for efficient access in a multi-processor system environment
WO2001048620A1 (en) 1999-12-29 2001-07-05 The Johns Hopkins University System, method, and computer program product for high speed backplane messaging
US6970206B1 (en) 2000-04-20 2005-11-29 Ati International Srl Method for deinterlacing interlaced video by a graphics processor
US7673304B2 (en) 2003-02-18 2010-03-02 Microsoft Corporation Multithreaded kernel for graphics processing unit
US7015913B1 (en) 2003-06-27 2006-03-21 Nvidia Corporation Method and apparatus for multithreaded processing of data in a programmable graphics processor
US7523157B2 (en) * 2003-09-25 2009-04-21 International Business Machines Corporation Managing a plurality of processors as devices
US20050071578A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation System and method for manipulating data with a plurality of processors
US7634776B2 (en) 2004-05-13 2009-12-15 Ittiam Systems (P) Ltd. Multi-threaded processing design in architecture with multiple co-processors
US7818507B2 (en) * 2005-04-04 2010-10-19 Sony Computer Entertainment Inc. Methods and apparatus for facilitating coherency management in distributed multi-processor system
JP4082706B2 (ja) * 2005-04-12 2008-04-30 学校法人早稲田大学 マルチプロセッサシステム及びマルチグレイン並列化コンパイラ
JP4836491B2 (ja) 2005-05-20 2011-12-14 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、システム、方法およびプロセッサ
JP2007066759A (ja) 2005-08-31 2007-03-15 Toyota Motor Corp 燃料電池
JP2007172456A (ja) * 2005-12-26 2007-07-05 Toshiba Corp 描画装置
US7865898B2 (en) * 2006-01-27 2011-01-04 Oracle America, Inc. Repartitioning parallel SVM computations using dynamic timeout
TW200809764A (en) 2006-04-24 2008-02-16 Sony Corp Image processing device, image processing method and program recording medium
US8468532B2 (en) * 2006-06-21 2013-06-18 International Business Machines Corporation Adjusting CPU time allocated to next thread based on gathered data in heterogeneous processor system having plurality of different instruction set architectures
US8453132B2 (en) 2006-07-28 2013-05-28 Hewlett-Packard Development Company, L.P. System and method for recompiling code based on locality domain and thread affinity in NUMA computer systems
US7701459B1 (en) 2006-11-03 2010-04-20 Nvidia Corporation Primitive oriented assembly for parallel vertex/geometry processing
US8269782B2 (en) 2006-11-10 2012-09-18 Sony Computer Entertainment Inc. Graphics processing apparatus
EP1956484B1 (en) 2007-02-07 2011-10-19 Robert Bosch Gmbh Administration module, producer and consumer processor, arrangement thereof and method for inter-processor communication via a shared memory
US8108845B2 (en) * 2007-02-14 2012-01-31 The Mathworks, Inc. Parallel programming computing system to dynamically allocate program portions
JP5224498B2 (ja) * 2007-02-28 2013-07-03 学校法人早稲田大学 メモリ管理方法、情報処理装置、プログラムの作成方法及びプログラム
US8108633B2 (en) * 2007-04-11 2012-01-31 Apple Inc. Shared stream memory on multiple processors
EP2135163B1 (en) 2007-04-11 2018-08-08 Apple Inc. Data parallel computing on multiple processors
US8095735B2 (en) * 2008-08-05 2012-01-10 Convey Computer Memory interleave for heterogeneous computing
US8806426B2 (en) 2008-06-04 2014-08-12 Microsoft Corporation Configurable partitioning of parallel data for parallel processing
JP5112386B2 (ja) * 2008-06-05 2013-01-09 株式会社東芝 画像処理装置及び画像処理方法
WO2009147741A1 (ja) 2008-06-05 2009-12-10 北陸電気工業株式会社 タッチパネルを備えた表示装置及び圧電アクチュエータ
US8225325B2 (en) * 2008-06-06 2012-07-17 Apple Inc. Multi-dimensional thread grouping for multiple processors
JP2009295032A (ja) * 2008-06-06 2009-12-17 Canon Inc 画像処理装置及びその制御方法
US8531471B2 (en) * 2008-11-13 2013-09-10 Intel Corporation Shared virtual memory
CN101551761A (zh) * 2009-04-30 2009-10-07 浪潮电子信息产业股份有限公司 一种异构多处理器中共享流内存的方法
US9354944B2 (en) * 2009-07-27 2016-05-31 Advanced Micro Devices, Inc. Mapping processing logic having data-parallel threads across processors
US8669990B2 (en) * 2009-12-31 2014-03-11 Intel Corporation Sharing resources between a CPU and GPU
US8723877B2 (en) * 2010-05-20 2014-05-13 Apple Inc. Subbuffer objects

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040187094A1 (en) 1999-10-22 2004-09-23 Joseph Gil Methods for implementing virtual bases with fixed offsets in object oriented applications
US20080109795A1 (en) 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit

Also Published As

Publication number Publication date
WO2011146197A1 (en) 2011-11-24
KR101477882B1 (ko) 2014-12-30
US9691346B2 (en) 2017-06-27
GB2480536B (en) 2013-01-02
CN102870096A (zh) 2013-01-09
BR112012027950B1 (pt) 2020-11-10
EP2572276A1 (en) 2013-03-27
KR20140117689A (ko) 2014-10-07
US20150187322A1 (en) 2015-07-02
US20110285729A1 (en) 2011-11-24
GB201108084D0 (en) 2011-06-29
CN102870096B (zh) 2016-01-13
MX2012012534A (es) 2012-12-17
JP5583844B2 (ja) 2014-09-03
AU2011256745B2 (en) 2014-01-23
EP2572276B1 (en) 2018-07-11
JP5939524B2 (ja) 2016-06-22
GB2480536A (en) 2011-11-23
US8723877B2 (en) 2014-05-13
AU2011256745A1 (en) 2012-11-01
KR20130004351A (ko) 2013-01-09
JP2015007982A (ja) 2015-01-15
US20140313214A1 (en) 2014-10-23
DE112011101725T5 (de) 2013-04-25
CA2795365A1 (en) 2011-11-24
US8957906B2 (en) 2015-02-17
JP2013528861A (ja) 2013-07-11
CA2795365C (en) 2015-12-08

Similar Documents

Publication Publication Date Title
KR101558831B1 (ko) 서브버퍼 오브젝트
US10552226B2 (en) Data parallel computing on multiple processors
US11544075B2 (en) Parallel runtime execution on multiple processors
US9766938B2 (en) Application interface on multiple processors
EP2135163B1 (en) Data parallel computing on multiple processors
US8108633B2 (en) Shared stream memory on multiple processors
AU2018226440B2 (en) Data parallel computing on multiple processors
AU2016203532B2 (en) Parallel runtime execution on multiple processors
AU2014202203B2 (en) Subbuffer objects

Legal Events

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

Payment date: 20180918

Year of fee payment: 4