KR101962484B1 - 확장 가능한 데이터 병렬 시맨틱스 - Google Patents

확장 가능한 데이터 병렬 시맨틱스 Download PDF

Info

Publication number
KR101962484B1
KR101962484B1 KR1020137016150A KR20137016150A KR101962484B1 KR 101962484 B1 KR101962484 B1 KR 101962484B1 KR 1020137016150 A KR1020137016150 A KR 1020137016150A KR 20137016150 A KR20137016150 A KR 20137016150A KR 101962484 B1 KR101962484 B1 KR 101962484B1
Authority
KR
South Korea
Prior art keywords
data parallel
level
compute
resource
custom
Prior art date
Application number
KR1020137016150A
Other languages
English (en)
Other versions
KR20130137652A (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 KR20130137652A publication Critical patent/KR20130137652A/ko
Application granted granted Critical
Publication of KR101962484B1 publication Critical patent/KR101962484B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/314Parallel programming languages

Abstract

고 레벨 프로그래밍 언어가 확장 가능한 데이터 병렬 시맨틱스를 제공한다. 사용자 코드는 컴퓨트 디바이스 객체 및 리소스 뷰 객체를 사용하여 데이터 병렬 코드를 실행하기 위한 하드웨어 및 소프트웨어 리소스를 명시한다. 사용자 코드는 새로운 및/또는 갱신된 유형의 컴퓨트 노드 및 새로운 및/또는 갱신된 유형의 런타임 라이브러리에 의한 실행이 가능해지도록 객체 및 시맨틱 메타데이터를 사용한다. 확장 가능한 데이터 병렬 시맨틱스는 사용자 코드가 새로운 및/또는 갱신된 유형의 컴퓨트 노드 및 런타임 라이브러리에 의해 실행되게 한다.

Description

확장 가능한 데이터 병렬 시맨틱스{EXTENSIBLE DATA PARALLEL SEMANTICS}
컴퓨터 시스템은 종종 하나 이상의 범용 프로세서(general purpose processor)(예를 들어, 중앙 처리 장치(central processing unit(CPU)), 및 하나 이상의 특화 데이터 병렬 컴퓨트 노드(specialized data parallel compute node)(예를 들어, 그래픽 처리 장치(graphics processing unit(GPU) 또는 CPU 내의 단일 명령어 다중 데이터(single instruction multiple data(SIMD) 실행 유닛)를 포함한다. 범용 프로세서는 일반적으로 컴퓨터 시스템 상에서 범용 처리를 수행하며, 데이터 병렬 컴퓨트 노드는 일반적으로 컴퓨터 시스템 상에서 데이터 병렬 처리(예를 들어, 그래픽 처리)를 수행한다. 범용 프로세서는 흔히 데이터 병렬 알고리즘을 구현하는 성능을 가지나 데이터 병렬 컴퓨트 노드에서 발견되는 최적화된 하드웨어 리소스 없이 그러한 성능을 갖는다. 결과적으로, 범용 프로세서는 데이터 병렬 알고리즘을 실행하는데 있어서 데이터 병렬 컴퓨트 노드보다 훨씬 덜 효율적일 수 있다.
데이터 병렬 컴퓨트 노드는 전통적으로 컴퓨터 시스템 상에서 프로그램을 실행하는데 있어서 범용 프로세서를 지원하는 역할을 담당했다. 데이터 병렬 컴퓨트 노드의 처리 성능이 향상되어 데이터 병렬 알고리즘을 위해 최적화된 하드웨어의 역할이 증가됨에 따라, 데이터 병렬 컴퓨트 노드를 프로그래밍하는 프로그래머의 능력을 향상시키면서 데이터 병렬 컴퓨트 노드를 보다 용이하게 프로그래밍하는 것이 바람직할 것이다. 그러나, 데이터 병렬 알고리즘은 대체로 범용 프로그래밍 언어와 상이한 시맨틱적 제약을 갖는 데이터 병렬 언어를 이용하여 프로그래밍된다.
이러한 발명의 요약은 아래의 상세한 설명에서 더 설명되는 개념의 선택을 단순한 형태로 소개하기 위해 제공된다. 이러한 요약은 청구된 발명 대상의 주요 특징 또는 필수 특징을 식별하도록 의도되지 않으며 청구된 발명 대상의 범위를 제한하기 위해 사용되도록 의도되지도 않는다.
고 레벨 프로그래밍 언어(high level programming language)가 확장 가능한 데이터 병렬 시맨틱스(extensible data parallel semantics)를 제공한다. 사용자 코드(user code)는 컴퓨트 디바이스 객체(compute device object) 및 리소스 뷰 객체(resource view object)를 사용하여 데이터 병렬 코드(data parallel code)를 실행하기 위한 하드웨어 및 소프트웨어 리소스를 명시한다. 사용자 코드는 새로운 및/또는 갱신된 유형의 컴퓨트 노드(compute node) 및 새로운 및/또는 갱신된 유형의 런타임 라이브러리(runtime library)에 의한 실행이 가능해지도록 객체(object) 및 시맨틱 메타데이터(semantic metadata)를 사용한다. 확장 가능한 데이터 병렬 시맨틱스는 사용자 코드가 새로운 및/또는 갱신된 유형의 컴퓨트 노드 및 런타임 라이브러리에 의해 실행되게 한다.
첨부 도면은 실시예의 추가적인 이해를 제공하기 위해 포함되며, 본 명세서의 일부분에 통합되어 본 명세서의 일부분을 구성한다. 도면은 실시예를 예시하며, 상세한 설명과 함께 실시예의 원리를 설명하는 역할을 한다. 다른 실시예 및 실시예의 의도된 장점 중 많은 장점이 이하의 상세한 설명을 참조하여 보다 잘 이해될 것이므로 다른 실시예 및 실시예의 의도된 장점 중 많은 장점이 즉시 인식될 것이다. 도면의 구성 요소들이 반드시 서로에 대해 축척에 따라 도시될 필요는 없다. 유사한 참조 부호는 상응하는 유사한 부분을 지정한다.
도 1은 확장 가능한 데이터 병렬 시맨틱스를 갖는 런타임 환경의 일 실시예를 도시하는 블록 다이어그램이다.
도 2는 확장 가능한 데이터 병렬 시맨틱스를 구현하는 코드의 일 실시예를 예시하는 컴퓨터 코드 다이어그램이다.
도 3(a) 내지 도 3(c)는 확장 가능한 데이터 병렬 시맨틱스를 구현하는 런타임 환경 내에서 런타임 라이브러리의 실시예를 예시하는 블록 다이어그램이다.
도 4(a) 및 도 4(b)는 확장 가능한 데이터 병렬 시맨틱스를 지원하는 데이터 구조의 실시예를 예시하는 블록 다이어그램이다.
도 5는 확장 가능한 데이터 병렬 시맨틱스를 이용하여 데이터 병렬 코드를 컴파일(compile)하고 실행하도록 구성된 컴퓨터 시스템의 일 실시예를 예시하는 블록 다이어그램이다.
이하의 상세한 설명에서, 첨부 도면이 참조되며, 첨부 도면은 본 발명을 실시하기 위한 구체적인 내용의 일부를 형성하고 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시한다. 이와 관련하여, 설명되는 도면의 배향에 관하여 "상부(top)", "하부(bottom)", "전면(front)", "후면(back)", "선두(leading)", "후미(trailing)"와 같은 방향 용어가 사용된다. 실시예의 컴포넌트가 복수의 상이한 배향으로 위치될 수 있으므로, 방향 용어는 예시를 위해 사용되지만 결코 제한적으로 사용되지는 않는다. 다른 실시예가 이용될 수 있으며 본 발명의 범위를 벗어나지 않으면서 구조적인 또는 논리적인 변경이 이루어질 수 있다는 것이 이해되어야 한다. 따라서, 이하의 상세한 설명은 제한적인 의미로 해석되지 않아야 하며, 본 발명의 범위는 첨부된 특허청구범위에 의해 정의된다. 특별히 달리 언급되지 않은 한 본 명세서에 설명된 다양한 예시적인 실시예의 특징들이 서로 조합될 수 있다는 것이 이해되어야 한다.
도 1은 도 5에 도시된 컴퓨터 시스템(100)과 같은 컴퓨터 시스템 내에서 확장 가능한 데이터 병렬 시맨틱스를 갖는 런타임 환경(2)의 일 실시예를 예시하는 블록 다이어그램이다. 런타임 환경(2)은 컴퓨터 시스템이 하나 이상의 컴퓨트 노드(121)(도 5에 또한 도시되어 추가로 상세히 후술됨) 상에서 사용자 코드(10) 및 한 세트의 하나 이상의 런타임 라이브러리(20)로부터의 명령어를 실행하고 있는 컴퓨터 시스템 내의 런타임 동작 모드를 표현한다.
사용자 코드(10)는 하나 이상의 컴퓨트 노드(121)에 의한 실행을 위해 하나 이상의 실행 파일(예를 들어, 도 5에 도시된 DP 실행 파일(138))로 컴파일될 수 있는 고 레벨 범용 또는 데이터 병렬 프로그래밍 언어로부터의 일련의 명령어를 포함한다. 사용자 코드(10)는 런타임 라이브러리(20)가 데이터 병렬 기능을 제공하는 데이터 병렬 애플리케이션 프로그래밍 인터페이스(application programming interface(API))를 포함하는 하나 이상의 런타임 라이브러리(20)와 함께 실행한다.
사용자 코드(10)는 컴퓨트 디바이스 객체(12)가 사용자 코드(10)의 적어도 일부분을 수행하기 위한 컴퓨트 노드(121)를 명시하도록 런타임 라이브러리(20)로부터 생성되게 하며, 리소스 뷰 객체(14)가 사용자 코드(10)를 실행하는 데에 사용되는 런타임 라이브러리(20)를 명시하도록 런타임 라이브러리(20)로부터 생성되게 한다. 컴퓨트 디바이스 객체(12)는 디바이스 레벨(즉, 하나의 유형의 컴퓨트 노드(121))을 명시하는 하드웨어의 추상화(abstraction)를 형성한다. 리소스 뷰 객체(14)는 컴퓨트 디바이스 객체(12)에 의해 명시된 하드웨어를 사용하는 방법을 설명하는 리소스 레벨을 명시한다. 예를 들어, 리소스 뷰 객체(14)는 네이티브 코드 생성(native code generation)과 함께 또는 WARP(DirectX 소프트웨어 에뮬레이터)와 함께 상이한 DirectX 구현(예를 들어, DirectX 11, DirectX 11.1, DirectX 12, 및 DirectX 13) 또는 SSE/AVX 구현을 설명할 수 있다. 리소스 뷰 객체(14)는 메모리 관리 및 커널 실행 서비스도 또한 포함할 수 있다. 연관된 시맨틱 메타데이터와 함께 컴퓨트 디바이스 객체(12) 및 리소스 뷰 객체(14)의 사용은 사용자 코드(10)의 하부의 프로그래밍 언어의 시맨틱적 변화를 취급하기 위한 확장 가능한 데이터 병렬 시맨틱스를 제공한다. 확장 가능한 데이터 병렬 시맨틱스는 사용자 코드(10)가 새로운 및/또는 갱신된 유형의 컴퓨트 노드(121) 및 새로운 및/또는 갱신된 유형의 런타임 라이브러리(20)와 함께 실행되게 한다. 결과적으로, 특정 유형의 컴퓨트 노드(121)와 함께 사용하도록 설계되었던 사용자 코드(10)의 구성체(construct)는 새로운 및/또는 갱신된 유형의 컴퓨트 노드(121)에 의해 실행될 수 있다.
하나의 실시예에서, 사용자 코드(10)는 한 세트의 하나 이상의 모듈 내에 저장된 프로그램을 형성하는 데이터 병렬 확장을 갖는 고 레벨 범용 프로그래밍 언어(high level general purpose programming language)(이하, GP 언어)로부터의 일련의 명령어를 포함한다. GP 언어는 각각의 모듈이 컴퓨터 시스템에 의해 접근 가능한 별개의 파일로 또는 별개의 위치에 저장될 수 있도록 프로그램이 상이한 부분(즉, 모듈)에 작성되게 할 수 있다. GP 언어는 하나 이상의 범용 프로세서 및 하나 이상의 특수 목적의 DP 최적 컴퓨트 노드(DP optimal compute node)를 포함하는 컴퓨팅 환경을 프로그래밍하기 위한 단일 언어를 제공한다. DP 최적 컴퓨트 노드는 대체로 그래픽 처리 장치(graphic processing unit(GPU)) 또는 범용 프로세서의 SIMD 유닛이지만, 범용 프로세서의 스칼라 또는 벡터 실행 유닛(scalar or vector execution unit), 필드 프로그래밍 가능한 게이트 어레이(field programmable gate array(FPGA)), 또는 일부 컴퓨팅 환경 내의 다른 적절한 디바이스도 또한 포함할 수 있다. GP 언어를 사용하여, 프로그래머는 범용 프로세서 및 DP 컴퓨트 노드에 의한 실행을 위해 사용자 코드(10) 내에 범용 프로세서 및 DP 소스 코드를 각각 포함할 수 있으며, 범용 프로세서 및 DP 소스 코드의 실행을 조정할 수 있다. 사용자 코드(10)는 애플리케이션, 라이브러리 기능 또는 운영 체계 서비스와 같은 이러한 실시예에서의 임의의 적절한 유형의 코드를 표현할 수 있다.
GP 언어는 데이터 병렬 특징을 포함하도록 C 또는 C++와 같은 폭넓게 적응된 고 레벨의 범용 프로그래밍 언어를 확장함으로써 형성될 수 있다. DP 특징이 나타날 수 있는 범용 언어의 다른 예는 JavaTM, PHP, 비쥬얼 베이직(Visual Basic), 펄(Perl), PythonTM, C#, 루비(Ruby), 델파이(Delphi), 포트란(Fortran), VB, F#, OCaml, Haskell, Erlang, NESL, Chapel, 및 JavaScriptTM을 포함한다. GP 언어 구현은 프로그램의 상이한 부분이 상이한 모듈 내에 포함되게 하는 풍부한 링킹 능력(linking capability)을 포함할 수 있다. 데이터 병렬 특징은 데이터 병렬 동작이 범용 프로세서(즉, 비-DP 최적 컴퓨트 노드)를 이용하는 것보다 더 신속하거나 더 효율적으로 실행되게 하도록 DP 최적 컴퓨트 노드의 특수 목적의 아키텍처를 이용하는 프로그래밍 도구를 제공한다. GP 언어는 또한 프로그래머가 범용 프로세서 및 DP 최적 컴퓨트 노드에 대해 프로그래밍하게 하는 또 다른 적절한 고 레벨 범용 프로그래밍 언어일 수도 있다.
또 다른 실시예에서, 사용자 코드(10)는 프로그램을 형성하는 고 레벨 데이터 병렬 프로그래밍 언어(이하, DP 언어)로부터의 일련의 명령어를 포함한다. DP 언어는 하나 이상의 DP 최적 컴퓨트 노드를 갖는 컴퓨팅 환경에서 하나의 DP 최적 컴퓨트 노드를 프로그래밍하기 위한 특화 언어(specialized language)를 제공한다. DP 언어를 사용하여, 프로그래머는 DP 최적 컴퓨트 노드 상에서 실행하도록 의도된 사용자 코드(10) 내의 DP 소스 코드를 생성한다. DP 언어는 데이터 병렬 동작이 범용 프로세서를 이용하는 것보다 더 신속하거나 더 효율적으로 실행되게 하도록 DP 최적 컴퓨트 노드의 특수 목적의 아키텍처를 이용하는 프로그래밍 도구를 제공한다. DP 언어는 HLSL, GLSL, Cg, C, C++, NESL, Chapel, CUDA, OpenCL, 액셀레이터(Accelerator), Ct, PGI GPGPU 액셀레이터, CAPS GPGPU 액셀레이터, Brook+, CAL, APL, 포트란 90(및 그 상위 버전), 데이터 패러렐(Data Parallel) C, DAPPLE, 또는 APL과 같은 기존의 DP 프로그래밍 언어일 수 있다. 사용자 코드(10)는 애플리케이션, 라이브러리 기능, 또는 운영 체계 서비스와 같은 본 실시예에서의 임의의 적절한 유형의 DP 소스 코드를 표현할 수 있다.
사용자 코드(10)는 DP 최적 컴퓨트 노드(121) 상에서 실행하도록 지정된 코드 부분(code portion)을 포함한다. DP 최적 컴퓨트 노드(121)는 데이터 병렬 컴퓨팅(즉, DP 프로그램 또는 알고리즘의 실행)을 위해 최적화된 하드웨어 아키텍처를 갖는 하나 이상의 컴퓨터 리소스를 갖는다. 사용자 코드(10)가 GP 언어를 이용하여 작성된 도 2에 도시된 하나의 실시예에서, GP 언어는 프로그래머가 벡터 기능을 정의할 때 주석(29)(예를 들어, rl_annote)을 사용하여 DP 소스 코드를 지정하게 한다. 주석(29)은 DP 최적 컴퓨트 노드 상에서 실행하도록 의도된 벡터 기능의 기능 명칭(27)(예를 들어, vector_func)에 연관된다. 사용자 코드(10)는 호출 사이트(예를 들어, 포올(forall), 리듀스(reduce), 스캔(scan), 또는 소트(sort))에서 벡터 기능의 하나 이상의 작동(invocation, 28)(예를 들어, forall( ..., vector_func, ... ))을 또한 포함할 수 있다. 호출 사이트에 상응하는 벡터 기능은 커널 기능(kernel function)으로 지칭된다. 커널 기능은 사용자 코드(10) 내의 다른 벡터 기능(즉, 다른 DP 소스 코드)을 호출할 수 있으며, 벡터 기능 호출 그래프의 루트(root)로 보여질 수 있다. 커널 기능은 사용자 코드(10)에 의해 정의된 유형(예를 들어, 클래스(class) 또는 스트럭트(struct))도 또한 사용할 수 있다. 유형은 DP 소스 코드로서 주석될 수 있거나 주석되지 않을 수 있다. 다른 실시예에서, 사용자 코드(10)의 일부분을 DP 소스 코드 및/또는 범용 프로세서 코드로서 지정하기 위해 다른 적절한 프로그래밍 언어 구성체가 사용될 수 있다. 또한, 사용자 코드(10)가 DP 언어로 작성된 실시예에서 주석(29)이 생략될 수 있다.
주석(29)은 벡터 기능을 위한 리소스 레벨 시맨틱스를 지정한다. 주석(29)은 벡터 기능의 시맨틱적 상태가 컴퓨트 디바이스 객체(12) 및 리소스 뷰 객체(14) 내에 반영된 바와 같이 표적 컴퓨트 노드(121)의 시맨틱스 및 다른 특성과 양립 가능하다는 것을 컴파일러(compiler)가 보장하게 한다. 시맨틱적 제약(semantic restriction)이 시간이 흐르면서 느슨해지므로, 보다 적은 시맨틱적 제약을 갖는 보다 새로운 컴퓨트 노드(121)가 보다 높은 레벨의 시맨틱적 제약을 표시하는 보다 오래된 주석(29)을 갖는 벡터 기능을 실행할 수 있다.
런타임 라이브러리(20)는 태스크 병렬(task parallel) 및/또는 데이터 병렬(data parallel(DP)) 실행 성능을 제공하는 임의의 적절한 유형의 및/또는 임의의 적절한 개수의 라이브러리를 포함한다. 예를 들어, 런타임 라이브러리(20)는 하나의 실시예에서 패러렐 패턴즈 라이브러리(Parallel Patterns Library(PPL))를 갖는 컨커런시 런타임 라이브러리(Concurrency Runtime library) 및 다이렉트엑스 런타임 라이브러리(DirectX runtime library)를 포함할 수 있다. 런타임 라이브러리(20)는 태스크 병렬 및/또는 데이터 병렬 성능을 갖는 기능을 제공하는 애플리케이션 프로그래밍 인터페이스(application programming interface(API)) 또는 다른 적절한 프로그래밍 구성체를 제공한다.
도 3(a) 내지 도 3(c)는 도 1에 도시된 런타임 환경(2)에서 사용되는 런타임 라이브러리(20)의 실시예(20(1) 내지 20(3))를 각각 예시한다. 도 3(a)의 실시예에서, 런타임 라이브러리(20(1))는 컴퓨트 디바이스 기능(42), 리소스 뷰 기능(43), 데이터 병렬(DP) 기능(44), 및 호출-사이트 추상화 기능(46)을 포함한다.
컴퓨트 디바이스 기능(42)은 사용자 코드(10)에 의해 공급된 매개변수에 따라 컴퓨트 디바이스 객체(12)(도 1에 도시됨)를 생성한다. 특히, 사용자 코드(10)는 컴퓨트 디바이스 객체(12)를 생성하도록 사용자 코드(10)의 적어도 일부분을 실행하기 위한 하나의 유형의 컴퓨트 노드를 명시하는 디바이스 레벨(예를 들어, device_level)을 통과시킨다. 하나의 실시예에서, 컴퓨트 디바이스 기능(42)은 도 4(a)의 데이터 구조 내에 도시된 디바이스 레벨(즉, 해당 없음(none), 커스텀(CUSTOM), GPU, WARP, REF, NATIVE, SSE, AVX, 및 LRB)을 인식한다. 따라서, 이러한 실시예에서 사용자 코드(10)는 이들 디바이스 레벨 중 하나의 디바이스 레벨을 통과시킬 수 있다.
리소스 뷰 기능(43)은 사용자 코드(10)에 의해 공급된 매개변수에 따라 리소스 뷰 객체(14)(도 1에 도시됨)를 생성한다. 특히, 사용자 코드(10)는 컴퓨트 디바이스 객체(12)에 의해 명시된 하드웨어를 사용하는 방법을 설명하는 리소스 레벨(예를 들어, resource_level)을 통과시킨다. 리소스 뷰 기능(43)은 도 4(b)의 데이터 구조 내에 도시된 리소스 레벨(즉, 해당 없음, NATIVE, CUSTOM, DX11, DX11.1, 및 DX12)을 인식한다. 따라서, 이러한 실시예에서 사용자 코드(10)는 이들 리소스 레벨 중 하나의 리소스 레벨을 통과시킬 수 있다.
사용자 코드(10)의 디바이스 레벨 및 리소스 레벨은 사용자 코드(10)가 만족시키도록 요구된 시맨틱적 제약의 레벨을 표시한다. 이들 시맨틱적 제약은 사용자 코드(10)를 실행시키기 위해 새로운 갱신된 컴퓨트 노드(121) 및 런타임 라이브러리(20)가 사용됨에 따라 시간에 걸쳐 감소한다고 가정된다. 따라서, 컴퓨트 노드(121) 및 런타임 라이브러리(20)가 사용자 코드(10)의 디바이스 레벨 및 리소스 레벨과 동일하거나 더 적은 시맨틱적 제약을 가지면 컴퓨트 노드(121) 및 런타임 라이브러리(20)가 사용자 코드(10)를 실행할 수 있다.
하나의 예에서, 사용자 코드(10)는 디바이스 레벨이 GPU인 컴퓨트 디바이스 객체(12) 및 리소스 레벨이 DX11인 리소스 뷰 객체(14)를 생성한다. 사용자 코드(10)는 DX11을 표시하는 주석(29)을 갖는 적어도 하나의 벡터 기능도 또한 포함한다. GPU인 디바이스 레벨은 사용자 코드(10)의 적어도 일부분이 GPU 상에서의 실행을 위해 작성된다는 것을 표시하며, DX11인 리소스 레벨은 사용자 코드(10)의 적어도 일부분이 DirectX 11을 포함하거나 다른 방법으로 지원하는 런타임 라이브러리(20)와의 실행을 위해 작성된다는 것을 표시한다. 따라서, 벡터 기능 또는 벡터 기능들은 DirectX 11의 시맨틱적 제약을 따르며 GPU 상에서 DirectX 11과 함께 실행될 수 있다. 리소스 뷰 객체(14)가 DX11 대신에 DX12인 리소스 레벨을 가지면(즉, 사용자 코드(10)가 DirectX 12를 포함하거나 다른 방법으로 지원하는 런타임 라이브러리(20)와의 실행을 위해 작성되면), 벡터 기능의 주석(29)은 DX11, DX 11.1, 또는 DX12일 수 있는데, 왜냐하면 DirectX 12는 DirectX 11 및 DirectX 11.1보다 적은 시맨틱적 제약을 포함하기 때문이다.
또 다른 예에서, 사용자 코드(10)는 디바이스 레벨이 WARP인 컴퓨트 디바이스 객체(12) 및 DX11 또는 리소스 레벨이 DX12인 리소스 뷰 객체(14)를 생성한다. 사용자 코드(10)는 리소스 레벨이 DX11 또는 DX11, DX11.1인 경우에 DX11을 표시하거나 리소스 레벨이 DX12인 경우에 DX12를 표시하는 주석(29)을 갖는 적어도 하나의 벡터 기능도 또한 포함한다. WARP인 디바이스 레벨은 사용자 코드(10)의 적어도 일부분이 SSE, AVX, 또는 LRBni 이용 가능한 DirectX 시뮬레이터에 의한 실행을 위해 작성된다는 것을 표시하며, DX11 또는 DX12인 리소스 레벨은 사용자 코드(10)의 적어도 일부분이 DirectX 11 또는 DirectX 12를 포함하거나 다른 방법으로 지원하는 런타임 라이브러리(20)와의 실행을 위해 작성된다는 것을 표시한다. 따라서, DirectX 11의 시맨틱적 제약을 따르는 벡터 기능은 WARP 시뮬레이터 상에서 DirectX 11 또는 그 상위 버전과 함께 실행될 수 있으며, DirectX 12의 시맨틱적 제약을 따르는 벡터 기능은 WARP 시뮬레이터 상에서 DirectX 12와 함께 실행될 수 있다.
또 다른 예에서, 사용자 코드(10)는 디바이스 레벨이 REF인 컴퓨트 디바이스 객체(12) 및 리소스 레벨이 DX11 또는 DX12인 리소스 뷰 객체(14)를 생성한다. 사용자 코드(10)는 리소스 레벨이 DX11 또는 DX11, DX11.1인 경우에 DX11을 표시하거나 리소스 레벨이 DX12인 경우에 DX12를 표시하는 주석(29)을 갖는 적어도 하나의 벡터 기능도 또한 포함한다. REF인 디바이스 레벨은 사용자 코드(10)의 적어도 일부분이 단일 스레드형 CPU 기반 DirectX 시뮬레이터(single threaded CPU based DirectX simulator)에 의한 실행을 위해 작성된다는 것을 표시하며, DX11 또는 DX12인 리소스 레벨은 사용자 코드(10)의 적어도 일부분이 DirectX 11 또는 DX 12를 포함하거나 다른 방법으로 지원하는 런타임 라이브러리(20)와의 실행을 위해 작성된다는 것을 표시한다. 따라서, DirectX 11의 시맨틱적 제약을 따르는 벡터 기능은 REF 시뮬레이터 상에서 DirectX 11 또는 그 상위 버전과 함께 실행될 수 있으며, DirectX 12의 시맨틱적 제약을 따르는 벡터 기능은 REF 시뮬레이터 상에서 DirectX 12와 함께 실행될 수 있다.
전술한 예는 DirectX를 지원하는 런타임 라이브러리(20)를 사용한다. 다른 예에서, 하드웨어 유형을 디바이스 레벨로서 표시하고 네이티브(native)를 리소스 레벨로서 표시함으로써 다른 하드웨어 구현이 지원될 수 있다. 예를 들어, 사용자 코드(10)는 인텔(Intel) 및 AMD로부터의 CPU 상에 SSE 벡터를 가능하게 하도록 디바이스 레벨이 SSE이거나, 인텔로부터의 샌디 브릿지 CPU(Sandy Bridge CPU)를 가능하게 하도록 디바이스 레벨이 AVX이거나, 인텔로부터의 나이츠 페리 특화 데이터 병렬 최적화된 CPU(Knights Ferry specialized data parallel optimized CPU)를 가능하게 하도록 디바이스 레벨이 LRB인 컴퓨트 디바이스 객체(12) 생성할 수 있다. 이들 예를 이용하여, 사용자 코드(10)는 사용자 코드(10)의 벡터 기능이 데이터 병렬 시맨틱스에 대해서는 제한되지 않지만 하부의 범용 언어(예를 들어, C++)의 시맨틱스를 따르는 네이티브 레벨(즉, NATIVE)을 갖는 리소스 뷰 객체(14)를 생성할 수 있다.
도 3(a) 내의 런타임 라이브러리(20(1))를 다시 참조하면, DP 기능(44)은 GPU 또는 WARP 또는 REF 소프트웨어 시뮬레이터를 갖는 것과 같은 선택된 유형의 컴퓨트 노드(121)를 위한 포올, 스캔, 리듀스, 및 소트와 같은 호출 사이트를 구현하도록 데이터 병렬 기능을 제공한다. 다른 유형의(예를 들어, 새로운 및/또는 갱신된 유형의) 컴퓨트 노드(121)를 이용하여, 런타임 라이브러리(20(1))는 호출 사이트를 추상화하는 호출-사이트 추상화 기능(46)을 제공한다. 새로운 및/또는 갱신된 유형의 컴퓨트 노드(121)를 위한 호출 사이트 기능을 구현하기 위해 호출-사이트 추상화 기능(46)이 사용될 수 있다.
도 3(b)에 도시된 바와 같이, 사용자는 커스텀 컴퓨트 디바이스 기능(48), 커스텀 리소스 뷰 기능(49), 및/또는 커스텀 DP 기능(50)을 포함하는 하나 이상의 런타임 라이브러리(20(2))도 또한 제공할 수 있다. 커스텀 컴퓨트 디바이스 기능(48)은 추상화(abstract) 기반 클래스로서 구현될 수 있으며, 사용자가 사용자 코드(10)를 실행하기 위한 새로운 및/또는 갱신된 유형의 컴퓨트 노드(121)를 위한 시맨틱 메타데이터를 제공하게 한다. 커스텀 리소스 뷰 기능(49)도 또한 추상화 기반 클래스로서 구현될 수 있으며, 사용자가 사용자 코드(10)를 실행하기 위한 하드웨어를 사용하는 방법을 설명하는 새로운 및/또는 갱신된 리소스 레벨을 제공하게 한다. 커스텀 DP 기능(50)는 사용자가 새로운 및/또는 갱신된 유형의 컴퓨트 노드(121) 상에서 실행될 수 있는 포올, 스캔, 리듀스, 및 소트와 같은 커스텀 호출-사이트 구현을 제공하게 한다.
하나의 예에서 런타임 라이브러리(20(2))를 사용하기 위해, 사용자 코드(10)는 디바이스 레벨이 CUSTOM인 컴퓨트 디바이스 객체(12) 및 리소스 레벨이 NATIVE인 리소스 뷰 객체(14)를 생성한다. 사용자 코드(10)는 새로운 및/또는 갱신된 유형의 컴퓨트 노드(121)를 위한 시맨틱 메타데이터를 제공하도록 커스텀 컴퓨트 디바이스 기능(48)도 또한 작동시킨다. 호출 사이트를 위해, 사용자 코드(10)는 컴퓨트 노드(121)를 위한 적절한 호출 사이트 기능을 구현하도록 런타임 라이브러리(20(1))의 호출-사이트 추상화 기능(46)을 사용할 수 있거나 호출 사이트를 구현하는 커스텀 DP 기능(50)을 제공할 수 있다.
또 다른 예에서 런타임 라이브러리(20(2))를 사용하기 위해, 사용자 코드(10)는 디바이스 레벨이 NATIVE인 컴퓨트 디바이스 객체(12) 및 리소스 레벨이 CUSTOM인 리소스 뷰 객체(14)를 생성한다. 사용자 코드(10)는 사용자 코드(10)를 실행하기 위한 컴퓨트 디바이스 객체(12)에 의해 명시된 컴퓨트 노드(121)를 사용하는 방법을 설명하는 새로운 및/또는 갱신된 리소스 레벨을 제공하도록 커스텀 리소스 뷰 기능(49)도 또한 작동시킨다. 예를 들어, 리소스 레벨은 인텔® 스레드 빌딩 블록(Thread Building Block(TBB))의 커스텀 버전일 수 있다. 호출 사이트를 위해, 사용자 코드(10)는 컴퓨트 노드(121)를 위한 적절한 호출 사이트 기능을 구현하도록 런타임 라이브러리(20(1))의 호출-사이트 추상화 기능(46)을 사용할 수 있거나 호출 사이트를 구현하는 커스텀 DP 기능(50)을 제공할 수 있다.
또 다른 예에서 런타임 라이브러리(20(2))를 사용하기 위해, 사용자 코드(10)는 디바이스 레벨이 CUSTOM인 컴퓨트 디바이스 객체(12) 및 리소스 레벨이 CUSTOM인 리소스 뷰 객체(14)를 생성한다. 사용자 코드(10)는 새로운 및/또는 갱신된 유형의 컴퓨트 노드(121)를 위한 시맨틱 메타데이터를 제공하도록 커스텀 컴퓨트 디바이스 기능(48)도 또한 작동시킨다. 사용자 코드(10)는 사용자 코드(10)를 실행하기 위한 컴퓨트 디바이스 객체(12)에 의해 명시된 컴퓨트 노드(121)를 사용하는 방법을 설명하는 새로운 및/또는 갱신된 리소스 레벨을 제공하도록 커스텀 리소스 뷰 기능(49)도 또한 작동시킨다. 호출 사이트를 위해, 사용자 코드(10)는 컴퓨트 노드(121)를 위한 적절한 호출 사이트 기능을 구현하도록 런타임 라이브러리(20(1))의 호출-사이트 추상화 기능(46)을 사용할 수 있거나 호출 사이트를 구현하는 커스텀 DP 기능(50)을 제공할 수 있다.
호스트(즉, 비-벡터 CPU(non-vector CPU)) 상에서 벡터 기능을 실행하기 위해, 사용자 코드(10)는 디바이스 레벨이 NATIVE인 컴퓨트 디바이스 객체(12) 및 리소스 레벨이 NATIVE인 리소스 뷰 객체(14)를 생성한다. NATIVE인 디바이스 레벨은 사용자 코드(10)의 적어도 일부분이 호스트 상에서 실행될 수 있다는 것을 표시한다. NATIVE인 리소스 레벨은 사용자 코드(10)의 벡터 기능이 데이터 병렬 시맨틱스에 대해서는 제한되지 않게 하지만 하부의 범용 언어(예를 들어, C++)의 시맨틱스를 따르게 한다. 호스트 실행과 함께, 사용자 코드(10)는 컴퓨트 노드(121)를 위한 적절한 호출 사이트 기능을 구현하도록 런타임 라이브러리(20(1))의 호출-사이트 추상화 기능(46)을 사용할 수 있거나 호출 사이트를 구현하는 커스텀 DP 기능(50)을 제공할 수 있다.
데이터 병렬 시맨틱적 제약이 감소되거나 제거된 확장 가능한 데이터 병렬 시맨틱스를 제공함으로써, 태스크 기반 병렬 프로그래밍 런타임 라이브러리(20)와의 통합(또는 이질적 프로그래밍)이 달성될 수 있다. 특히, 도 3(c)에 도시된 태스크 병렬 기능(52)을 갖는 런타임 라이브러리(20(3))가 DP 기능(44)(도 3(a))과 함께 사용될 수 있다. 태스크 병렬 기능(52)이 패러렐 패턴즈 라이브러리(Parallel Patterns Library(PPL))를 갖는 컨커런시 런타임 라이브러리(ConcRT)를 표현하는 하나의 예에서, 가상 프로세서를 사용하는 호스트 상에서의 실행을 위해 태스크 병렬 기능(52)을 사용하는 포올(forall)이 구현될 수 있다. 마찬가지로, PPL 및 C++ 표준 템플릿 라이브러리(Standard Template Library(STL))로부터의 포이치(foreach) 및 트랜스폼(transform)의 구현은 선형 반복자(linear iterator) 대신에 영역 기반 서명(range based signature)을 포함할 수 있다. 하나의 실시예에서, 영역 패턴을 위한 선택사양은 아래와 같다.
열거자(enumerator) (기본적으로 전방, 양방 등을 갖는 전형적인 STL 반복자 및 그 변형체)
재귀적 양분(recursive bisection) (태스크 병렬)
청킹(chunking) (태스크 병렬)
랜덤 접근(random access) (태스크 또는 데이터 병렬)
포이치 및 트랜스폼의 구현은 이들 영역 패턴을 사용하여 영역 특징(range-trait) 또는 카테고리를 활성화시킨다.
포이치의 데이터 병렬 형태에서, '영역(range)'은 포올 내의 컴퓨트 도메인(compute domain)과 유사하다. 단순 구현(naive implementation)은 데이터 병렬 서브 특징(data parallel sub-trait)을 갖는 랜덤 접근 '영역'과 함께 제시될 때 포이치 내측에서 포올을 호출할 수 있다. 람다 클로저(lambda closure)를 이용함으로써 포이치 또는 트랜스폼 내에서 제한된 개수의 커널 인수(kernel argument)가 완화될 수 있다.
포이치가 호출될 때 사용자가 (비록 그것이 포올로서 지칭되지 않더라도) 포올 기능의 ConcRT 구현을 사용하고 싶으면, ConcRT 포이치가 구현되지 않았었다고 가정하여(그렇지 않으면, 그것은 평범하게 베이키드인(baked-in)될 수 있으며, 호출된 포올의 버전은 컴퓨트 디바이스 객체(12) 및 리소스 뷰 객체(14)의 시맨틱적 상태에 따라 달라짐), ConcRT (또는 다른 커스텀) 기반 데이터 병렬 호출 사이트 구현을 위해 생성된 '영역' 유형에 대해 포이치가 특정될 수 있다.
빌트인 '영역' 기반 포이치 및 트랜스폼 구현은 어떤 구현 패턴을 결정하도록 '영역' 특징('range'-trait)을 활성화시킨다. 커스텀 데이터 병렬 호출 사이트 구현을 도입하기 위해, 새로운 '영역' 유형이 중첩될 수 있다. 따라서, 태스크 기반 병렬 프로그래밍 런타임 라이브러리(20)(예를 들어, 태스크 병렬 기능(52)을 갖는 런타임 라이브러리(20(3))와 데이터 병렬(DP) 기능(44)의 통합이 기존의 언어 메카니즘을 이용한 사용자 확장 가능성을 이용하여 달성될 수 있다.
도 5는 확장 가능한 데이터 병렬 시맨틱스를 이용하여 데이터 병렬 코드(10)를 컴파일하고 실행하도록 구성된 컴퓨터 시스템(100)의 일 실시예를 예시하는 블록 다이어그램이다.
컴퓨터 시스템(100)은 하나 이상의 프로세서 패키지(도시되지 않음) 내에 하우징된 하나 이상의 처리 엘리먼트(processing element(PE), 102) 및 메모리(104)를 갖는 호스트(101)를 포함한다. 컴퓨터 시스템(100)은 0개 이상의 입력/출력 디바이스(106), 0개 이상의 디스플레이 디바이스(108), 0개 이상의 주변 디바이스(110), 및 0개 이상의 네트워크 디바이스(112)도 또한 포함한다. 컴퓨터 시스템(100)은 하나 이상의 DP 최적 또는 다른 유형의 컴퓨트 노드(121)를 갖는 컴퓨트 엔진(120)을 더 포함하며, 각각의 DP 최적 컴퓨트 노드(121)는 한 세트의 하나 이상의 처리 엘리먼트(PE, 122) 및 DP 실행 파일(138)을 저장하는 메모리(124)를 포함한다.
호스트(101), 입력/출력 디바이스(106), 디스플레이 디바이스(108), 주변 디바이스(110), 네트워크 디바이스(112), 및 컴퓨트 엔진(120)은 임의의 적절한 유형, 개수, 및 구성의 제어기, 버스(bus), 인터페이스, 및/또는 다른 유선 또는 무선 접속을 포함하는 한 세트의 상호접속(114)을 사용하여 통신한다.
컴퓨터 시스템(100)은 범용 또는 특수 목적을 위해 구성된 임의의 적절한 처리 디바이스를 표현한다. 컴퓨터 시스템(100)의 예는 서버, 퍼스널 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 스마트 폰, 퍼스널 디지털 어시스턴트(PDA), 모바일 전화기, 및 오디오/비디오 디바이스를 포함한다. 컴퓨터 시스템(100)의 컴포넌트(즉, 호스트(101), 입력/출력 디바이스(106), 디스플레이 디바이스(108), 주변 디바이스(110), 네트워크 디바이스(112), 상호접속(114), 및 컴퓨트 엔진(120))는 공통 하우징(도시되지 않음) 내에 또는 임의의 적절한 개수의 별개의 하우징(도시되지 않음) 내에 포함될 수 있다.
처리 엘리먼트(102)는 각각 메모리 시스템(104) 내에 저장된 명령어(즉, 소프트웨어)를 실행하도록 구성된 실행 하드웨어를 형성한다. 각각의 프로세서 패키지 내의 처리 엘리먼트(102)는 동일한 또는 상이한 아키텍처 및/또는 명령어 세트를 가질 수 있다. 예를 들어, 처리 엘리먼트(102)는 순차(in-order) 실행 엘리먼트, 슈퍼스칼라(superscalar) 실행 엘리먼트, 및 데이터 병렬 실행 엘리먼트(예를 들어, GPU 실행 엘리먼트)의 임의의 조합을 포함할 수 있다. 각각의 처리 엘리먼트(102)는 메모리 시스템(104) 내에 저장된 명령어에 접근하고 그 명령어를 실행하도록 구성된다. 명령어는 기본 입출력 시스템(basic input output system(BIOS)) 또는 펌웨어(도시되지 않음), 운영 체계(operating system(OS), 132), 사용자 코드(10), 컴파일러(134), GP 실행 파일(136), 및 DP 실행 파일(138)을 포함할 수 있다. 각각의 처리 엘리먼트(102)는 입력/출력 디바이스(106), 디스플레이 디바이스(108), 주변 디바이스(110), 네트워크 디바이스(112), 및/또는 컴퓨트 엔진(120)으로부터 수신된 정보와 함께 또는 그 정보에 응답하여 명령어를 실행할 수 있다.
호스트(101)는 OS(132)를 부팅하여 실행한다. OS(132)는 컴퓨터 시스템(100)의 컴포넌트를 관리하기 위한 그리고 프로그램이 컴포넌트에 접근하고 그 컴포넌트를 사용하게 하는 한 세트의 기능을 제공하기 위한 처리 엘리먼트에 의해 실행 가능한 명령어를 포함한다. 하나의 실시예에서, OS(132)는 윈도우즈 운영 체계이다. 다른 실시예에서, OS(132)는 컴퓨터 시스템(100)과 함께 사용하기에 적절한 또 다른 운영 체계이다.
컴퓨터 시스템이 컴파일러(134)를 실행하여 사용자 코드(10)를 컴파일할 때, 컴파일러(134)는 하나 이상의 실행 파일을 생성하는데, 예를 들어 하나 이상의 GP 실행 파일(136) 및 하나 이상의 DP 실행 파일(138)을 생성한다. 다른 실시예에서, 컴파일러(134)는 하나 이상의 DP 실행 파일(138)을 각각 포함하도록 하나 이상의 GP 실행 파일(136)를 생성할 수 있거나, GP 실행 파일(136)을 전혀 생성하지 않으면서 하나 이상의 DP 실행 파일(138)을 생성할 수 있다. GP 실행 파일(136) 및/또는 DP 실행 파일(138)은 사용자 코드(10)의 모든 부분 또는 선택된 부분을 컴파일하기 위한 데이터 병렬 확장을 갖는 컴파일러(134)의 작동에 응답하여 생성된다. 작동은 예를 들어 컴퓨터 시스템(100)의 프로그래머 또는 다른 사용자, 컴퓨터 시스템(100) 내의 다른 코드, 또는 또 다른 컴퓨터 시스템(도시되지 않음) 내의 다른 코드에 의해 생성될 수 있다.
GP 실행 파일(136)은 하나 이상의 범용 처리 엘리먼트(102)(예를 들어, 중앙 처리 장치(CPU)) 상에서 실행하도록 의도된 프로그램을 표현한다. GP 실행 파일(136)은 하나 이상의 범용 처리 엘리먼트(102)들의 명령어 세트로부터의 저 레벨 명령어를 포함한다.
DP 실행 파일(138)은 하나 이상의 데이터 병렬(DP) 최적 컴퓨트 노드(121) 상에서 실행하도록 의도되고 최적화된 데이터 병렬 프로그램 또는 알고리즘(예를 들어, 쉐이더(shader))을 표현한다. 하나의 실시예에서, DP 실행 파일(138)은 DP 최적 컴퓨트 노드(121) 상에서 실행되기 전에 디바이스 드라이버(도시되지 않음)를 사용하여 DP 최적 컴퓨트 노드(121)들의 명령어 세트로부터 저 레벨 명령어로 변환된 DP 바이트 코드(DP byte code) 또는 다른 중간 표현(intermediate representation(IL))을 포함한다. 다른 실시예에서, DP 실행 파일(138)은 하나 이상의 DP 최적 컴퓨트 노드(121)들의 명령어 세트로부터의 저 레벨 명령어를 포함하며, 저 레벨 명령어는 컴파일러(134)에 의해 삽입되어 있다. 따라서, GP 실행 파일(136)은 하나 이상의 범용 프로세서(예를 들어, CPU)에 의해 직접 실행 가능하며, DP 실행 파일(138)은 하나 이상의 DP 최적 컴퓨트 노드(121)에 의해 직접 실행 가능하거나 DP 최적 컴퓨트 노드(121)의 저 레벨 명령어로 변환된 다음에 하나 이상의 DP 최적 컴퓨트 노드(121)에 의해 실행 가능하다.
추가로 상세하게 후술되는 바와 같이, 컴퓨터 시스템(100)은 처리 엘리먼트(102)를 사용하여 GP 실행 파일(136)을 실행할 수 있으며, 컴퓨터 시스템(100)은 하나 이상의 PE(122)를 사용하여 DP 실행 파일(138)을 실행할 수 있다.
메모리 시스템(104)은 명령어 및 데이터를 저장하도록 구성된 임의의 적절한 유형, 개수 및 구성의 휘발성 또는 비휘발성 저장 디바이스를 포함한다. 메모리 시스템(104)의 저장 디바이스는 OS(132), 사용자 코드(10), 컴파일러(134), GP 실행 파일(136), 및 DP 실행 파일(138)을 포함하는 컴퓨터 실행 가능 명령어(즉, 소프트웨어)를 저장하는 컴퓨터 판독 가능 저장 매체를 표현한다. 명령어는 본 명세서에서 설명된 바와 같은 OS(132), 사용자 코드(10), 컴파일러(134), GP 실행 파일(136), 및 DP 실행 파일(138)의 기능 및 방법을 수행하는 컴퓨터 시스템(100)에 의해 실행 가능하다. 메모리 시스템(104)은 처리 엘리먼트(102), 입력/출력 디바이스(106), 디스플레이 디바이스(108), 주변 디바이스(110), 네트워크 디바이스(112), 및 컴퓨트 엔진(120)으로부터 수신된 명령어 및 데이터를 저장한다. 메모리 시스템(104)은 저장된 명령어 및 데이터를 처리 엘리먼트(102), 입력/출력 디바이스(106), 디스플레이 디바이스(108), 주변 디바이스(110), 네트워크 디바이스(112), 및 컴퓨트 엔진(120)으로 제공한다. 메모리 시스템(104) 내의 저장 디바이스의 예는 하드 디스크 드라이브, RAM(random access memory), ROM(read only memory), 플래시 메모리 드라이브 및 카드, 및 CD 및 DVD와 같은 자기 및 광 디스크를 포함한다.
입력/출력 디바이스(106)는 사용자로부터 컴퓨터 시스템(100)으로 명령어 또는 데이터를 입력하도록 구성되며 컴퓨터 시스템(100)으로부터 사용자로 명령어 또는 데이터를 출력하도록 구성된 임의의 적절한 유형, 개수, 및 구성의 입력/출력 디바이스를 포함한다. 입력/출력 디바이스(106)의 예는 키보드, 마우스, 터치패드, 터치스크린, 버튼, 다이얼, 노브(knob), 및 스위치를 포함한다.
디스플레이 디바이스(108)는 텍스트 및/또는 그래픽 정보를 컴퓨터 시스템(100)의 사용자에게 출력하도록 구성된 임의의 적절한 유형, 개수, 및 구성의 디스플레이 디바이스를 포함한다. 디스플레이 디바이스(108)의 예는 모니터, 디스플레이 스크린, 및 프로젝터를 포함한다.
주변 디바이스(110)는 일반적인 또는 특정 처리 기능을 수행하는 컴퓨터 시스템(100) 내의 하나 이상의 다른 컴포넌트와 함께 동작하도록 구성된 임의의 적절한 유형, 개수, 및 구성의 주변 디바이스를 포함한다.
네트워크 디바이스(112)는 컴퓨터 시스템(100)이 하나 이상의 네트워크(도시되지 않음)를 가로질러 통신하게 하도록 구성된 임의의 적절한 유형, 개수, 및 구성의 네트워크 디바이스를 포함한다. 네트워크 디바이스(112)는 정보가 컴퓨터 시스템(100)에 의해 네트워크로 송신되게 하거나 네트워크로부터 컴퓨터 시스템(100)에 의해 수신되게 하는 임의의 적절한 네트워킹 프로토콜 및/또는 구성에 따라 동작할 수 있다.
컴퓨트 엔진(120)은 DP 실행 파일(138)을 실행하도록 구성된다. 컴퓨트 엔진(120)은 하나 이상의 컴퓨트 노드(121)를 포함한다. 각각의 컴퓨트 노드(121)는 메모리 계층 구조를 공유하는 한 무리의 컴퓨터 리소스이다. 각각의 컴퓨트 노드(121)는 한 세트의 하나 이상의 PE(122) 및 DP 실행 파일(138)을 저장하는 메모리(124)를 포함한다. PE(122)는 DP 실행 파일(138)을 실행하며 DP 실행 파일(138)에 의해 생성된 결과를 메모리(124) 내에 저장한다.
전술된 바와 같이, 데이터 병렬 컴퓨팅을 위해 최적화된 하드웨어 아키텍처를 갖는 하나 이상의 컴퓨터 리소스를 갖는 컴퓨트 노드(121)(즉, DP 프로그램 또는 알고리즘의 실행)는 DP 최적 컴퓨트 노드(121)로 지칭된다. DP 최적 컴퓨트 노드(121)의 예는 한 세트의 PE(122)가 하나 이상의 GPU를 포함하는 노드(121) 및 한 세트의 PE(122)가 범용 프로세서 패키지 내에 한 세트의 SIMD 유닛을 포함하는 노드(121)를 포함한다. 데이터 병렬 컴퓨팅을 위해 최적화된 하드웨어 아키텍처를 갖는 컴퓨터 리소스를 갖지 않는 컴퓨트 노드(121)(예를 들어, 단지 범용 처리 엘리먼트(102)만을 갖는 프로세서 패키지)는 비-DP 최적 컴퓨트 노드(121)로 지칭된다. 각각의 컴퓨트 노드(121)에서, 메모리(124)는 메모리 시스템(104)으로부터 분리(예를 들어, GPU에 의해 사용된 GPU 메모리)될 수 있거나 메모리 시스템(104)의 일부(예를 들어, 범용 프로세서 패키지 내의 SIMD 유닛에 의해 사용된 메모리)일 수 있다.
호스트(101)는 상호접속(114)을 사용하여 DP 실행 파일(138)을 실행을 위해 컴퓨트 노드(121)로 제공하도록 구성되며 DP 실행 파일(138)에 의해 생성된 결과를 수신하도록 구성된 호스트 컴퓨트 노드를 형성한다. 호스트 컴퓨트 노드는 메모리 계층 구조(즉, 메모리 시스템(104))를 공유하는 한 무리의 범용 컴퓨터 리소스(즉, 범용 처리 엘리먼트(102))를 포함한다. 호스트 컴퓨트 노드는 대칭적인 다중처리 아키텍처(symmetric multiprocessing architecture(SMP))를 이용하여 구성될 수 있고 또한 예를 들어 비-균일 메모리 접근(non-uniform memory access(NUMA)) 아키텍처를 사용하여 메모리 시스템(104)의 메모리 집약성(memory locality)을 최대로 하도록 구성될 수 있다.
호스트 컴퓨트 노드의 OS(132)는 DP 실행 파일(138)이 DP 최적 또는 비-DP 최적 컴퓨트 노드(121)에 의해 실행되게 하도록 DP 호출 사이트를 실행하도록 구성된다. 메모리(124)가 메모리 시스템(104)으로부터 분리되어 있는 실시예에서, 호스트 컴퓨트 노드는 DP 실행 파일(138) 및 하나 이상의 색인 가능한 유형(14)이 메모리 시스템(104)으로부터 메모리(124)로 복사되게 한다. 메모리 시스템(104)이 메모리(124)를 포함하는 실시예에서, 호스트 컴퓨트 노드는 DP 실행 파일(138) 및/또는 하나 이상의 색인 가능한 유형(14)의 복사본을 메모리(124)로서의 메모리 시스템(104) 내에 지정할 수 있고/있거나 DP 실행 파일(138) 및/또는 하나 이상의 색인 가능한 유형(14)을 메모리 시스템(104)의 일부분으로부터 메모리(124)를 형성하는 메모리 시스템(104)의 또 다른 부분으로 복사할 수 있다. 컴퓨트 노드(121)와 호스트 컴퓨트 노드 사이의 복사 프로세스는 비동기로 지정되지 않는 한 동기점(synchronization point)일 수 있다.
호스트 컴퓨트 노드 및 각각의 컴퓨트 노드(121)는 서로 독립적으로 동시에 코드를 실행할 수 있다. 호스트 컴퓨트 노드 및 각각의 컴퓨트 노드(121)는 노드 계산을 조정하도록 동기점에서 상호작용할 수 있다.
하나의 실시예에서, 컴퓨트 엔진(120)은 하나 이상의 그래픽 처리 장치(graphic processing unit(GPU))가 PE(122) 및 메모리 시스템(104)와 별개인 메모리(124)를 포함하는 그래픽 카드를 표현한다. 이러한 실시예에서, 그래픽 카드(도시되지 않음)의 드라이버는 DP 실행 파일(138)의 바이트 코드 또는 다른 중간 표현(IL)을 GPU의 PE(122)에 의한 실행을 위한 GPU들의 명령어 세트로 변환할 수 있다.
또 다른 실시예에서, 컴퓨트 엔진(120)은 하나 이상의 범용 처리 엘리먼트(102) 및 메모리(124)를 포함하는 메모리 시스템(104)의 일부분을 갖는 프로세서 패키지 내에 포함된 하나 이상의 GPU(즉, PE(122))들의 조합으로부터 형성된다. 이러한 실시예에서, DP 실행 파일(138)의 바이트 코드 또는 다른 중간 표현(IL)을 프로세서 패키지 내의 GPU들의 명령어 세트로 변환하기 위한 추가 소프트웨어가 컴퓨터 시스템(100) 상에 제공될 수 있다.
또 다른 실시예에서, 컴퓨트 엔진(120)은 처리 엘리먼트(102) 및 메모리(124)를 포함하는 메모리 시스템(104)의 일부분을 포함하는 프로세서 패키지 중 하나 이상의 프로세서 패키지 내의 하나 이상의 SIMD 유닛들의 조합으로부터 형성된다. 이러한 실시예에서, DP 실행 파일(138)의 바이트 코드 또는 다른 중간 표현(IL)을 프로세서 패키지 내의 SIMD 유닛들의 명령어 세트로 변환하기 위한 추가 소프트웨어가 컴퓨터 시스템(100) 상에 제공될 수 있다.
또 다른 실시예에서, 컴퓨트 엔진(120)은 처리 엘리먼트(102)를 포함하는 프로세서 패키지 및 메모리(124)를 포함하는 메모리 시스템(104)의 일부 중 하나 이상 내의 하나 이상의 스칼라 또는 벡터 처리 파이프라인(scalar or vector processing pipeline)의 조합으로 형성된다. 이러한 실시예에서, DP 실행 파일(138)의 바이트 코드 또는 다른 중간 표현(IL)을 프로세서 패키지 내의 스칼라 처리 파이프라인(scalar processing pipeline)들의 명령어 세트로 변환하기 위해 추가 소프트웨어가 컴퓨터 시스템(100) 상에 제공될 수 있다.
본 명세서에서 특정 실시예가 예시되고 설명되었지만, 다양한 대안적이며/이거나 등가적인 구현이 본 발명의 범위를 벗어나지 않으면서 도시되고 설명된 특정 실시예를 대체될 수 있다는 것이 당업자에게 이해될 것이다. 본 출원은 본 명세서에서 논의된 특정 실시예의 임의의 적응 또는 변경을 포괄하도록 의도된다. 따라서, 본 발명은 특허청구범위 및 그 균등물에 의해서만 제한되도록 의도된다.

Claims (20)

  1. 적어도 하나의 프로세서 및 메모리를 포함하며,
    상기 적어도 하나의 프로세서는,
    사용자 코드의 런타임 실행 시, 상기 사용자 코드 내의 지시에 따라 컴퓨트 디바이스 객체 및 리소스 뷰 객체를 생성하고 - 상기 컴퓨트 디바이스 객체는 상기 사용자 코드 내에 명시된 디바이스 레벨을 이용하여 생성되고, 상기 디바이스 레벨은 컴퓨트 노드의 유형을 표시하며, 상기 리소스 뷰 객체는 상기 사용자 코드 내에 명시된 제 1 리소스 레벨을 이용하여 생성되고, 상기 제 1 리소스 레벨은 상기 사용자 코드의 실행에 이용되는 런타임 라이브러리의 유형을 표시함 -,
    상기 사용자 코드의 코드 부분과 연관된 주석을 획득하고 - 상기 주석은, 상기 코드 부분이 데이터 병렬 기능에 해당됨을 표시하고, 상기 코드 부분의 실행에 이용되는 런타임 라이브러리의 유형을 표시하는 제 2 리소스 레벨을 포함하며, 상기 제 1 리소스 레벨은 상기 제 2 리소스 레벨과 상이함 -,
    상기 제 1 리소스 레벨이 상기 제 2 리소스 레벨에 비해 동일하거나 적은 시맨틱적 제약을 가질 때, 상기 제 1 리소스 레벨과 상기 디바이스 레벨에 대응되는 컴퓨트 노드를 이용하여 상기 데이터 병렬 기능을 실행하도록 구성되는
    장치.
  2. 제 1 항에 있어서,
    상기 리소스 레벨은 네이티브로 명시되고, 상기 제 1 리소스 레벨은 상기 데이터 병렬 기능의 시맨틱적 제약이 상기 사용자 코드의 범용 프로그래밍 언어의 시맨틱스를 따른다는 것을 표시하는
    장치.
  3. 제 1 항에 있어서,
    상기 적어도 하나의 프로세서는,
    상기 컴퓨트 디바이스 객체 내에서 상기 디바이스 레벨이 커스텀인 것을 검출하고,
    상기 디바이스 레벨이 커스텀인 것을 검출하는 것에 응답하여 커스텀 데이터 병렬 기능을 사용하도록 - 상기 커스텀 데이터 병렬 기능은 새로운 또는 갱신된 유형의 컴퓨트 노드 중 적어도 하나의 컴퓨트 노드에서의 실행을 위한 상기 데이터 병렬 기능의 커스텀 구현을 포함함 - 구성되는,
    장치.
  4. 제 1 항에 있어서,
    상기 적어도 하나의 프로세서는,
    호출-사이트 추상화 기능을 사용하여 상기 컴퓨트 노드를 위한 호출-사이트 구현을 생성하도록 구성되는
    장치.
  5. 제 1 항에 있어서,
    상기 사용자 코드는 데이터 병렬 확장을 갖는 프로그래밍 언어로 작성되는
    장치.
  6. 제 1 항에 있어서,
    상기 사용자 코드는 고 레벨 데이터 병렬 프로그래밍 언어로 작성되는
    장치.
  7. 제 1 항에 있어서,
    상기 컴퓨트 노드는 적어도 하나의 그래픽 처리 장치를 포함하는
    장치.
  8. 제 1 항에 있어서,
    상기 적어도 하나의 프로세서는,
    상기 컴퓨트 디바이스 객체 내에서 상기 디바이스 레벨이 커스텀인 것을 검출하고,
    상기 디바이스 레벨이 커스텀인 것을 검출하는 것에 응답하여 커스텀 컴퓨트 디바이스 기능을 사용하도록 - 상기 커스텀 컴퓨트 디바이스 기능은 새로운 또는 갱신된 유형의 컴퓨트 노드 중 적어도 하나의 컴퓨트 노드를 명시하는 시맨틱 메타데이터를 포함함 - 구성되는
    장치.
  9. 컴퓨터 시스템에서 적어도 하나의 프로세서에 의해 수행되는 방법으로서,
    런타임 시에, 애플리케이션 내의 지시에 따라 컴퓨트 디바이스 객체와 리소스 뷰 객체를 관련시키는 단계 - 상기 애플리케이션은 하나 이상의 컴퓨트 노드에서의 실행을 위한 데이터 병렬 기능을 포함하고, 상기 컴퓨트 디바이스 객체는 상기 애플리케이션의 실행에 이용되는 컴퓨트 노드의 유형을 표시하는 디바이스 레벨을 포함하며, 상기 리소스 뷰 객체는 상기 애플리케이션의 실행에 이용되는 런타임 라이브러리의 유형을 표시하는 제 1 리소스 레벨을 포함함 -,
    상기 데이터 병렬 기능에 적용된 주석을 표시하는 단계 - 상기 주석은 상기 데이터 병렬 함수의 실행에 이용되는 런타임 라이브러리의 유형을 표시하는 제 2 리소스 레벨을 포함하고, 상기 제 1 리소스 레벨은 상기 제 2 리소스 레벨과 상이함 -, 및
    상기 제 1 리소스 레벨이 상기 제 2 리소스 레벨에 비해 동일하거나 적은 시맨틱적 제약을 가질 때, 상기 제 1 리소스 레벨 및 상기 디바이스 레벨과 연관된 적어도 하나의 컴퓨트 노드를 이용하여 상기 데이터 병렬 기능을 실행하는 단계를 포함하는
    방법.
  10. 제 9 항에 있어서,
    상기 데이터 병렬 기능이 제한되지 않은 시맨틱적 제약을 가질 때, 리소스 뷰 객체에 상응하는 상기 리소스 레벨은 네이티브인
    방법.
  11. 제 9 항에 있어서,
    상기 방법은, 커스텀인 디바이스 레벨을 검출하는 것에 응답하여 커스텀 컴퓨트 디바이스 기능 또는 커스텀 데이터 병렬 기능 중 하나를 포함하도록 데이터 병렬 실행 가능 코드를 생성하는 단계를 더 포함하고,
    상기 커스텀 컴퓨트 디바이스 기능은 새로운 또는 갱신된 유형의 컴퓨트 노드들 중 적어도 하나의 컴퓨트 노드를 명시하는 시맨틱 메타데이터를 포함하며,
    상기 커스텀 데이터 병렬 기능은 새로운 또는 갱신된 유형의 컴퓨트 노드 중 적어도 하나의 컴퓨트 노드의 실행을 위한 상기 데이터 병렬 기능의 커스텀 구현을 포함하는
    방법.
  12. 제 9 항에 있어서,
    호출-사이트 추상화 기능을 사용하여 상기 하나 이상의 컴퓨트 노드를 위한 호출-사이트 구현을 생성하는 단계를 더 포함하는
    방법.
  13. 제 9 항에 있어서,
    상기 애플리케이션은 데이터 병렬 확장을 갖는 고 레벨 범용 프로그래밍 언어로 작성되는
    방법.
  14. 제 9 항에 있어서,
    상기 애플리케이션은 고 레벨 데이터 병렬 프로그래밍 언어로 작성되는
    방법.
  15. 제 9 항에 있어서,
    상기 하나 이상의 컴퓨트 노드는 적어도 하나의 그래픽 처리 장치를 포함하는
    방법.
  16. 제 9 항에 있어서,
    상기 하나 이상의 컴퓨트 노드는 적어도 하나의 범용 프로세서를 포함하는
    방법.
  17. 적어도 하나의 프로세서 및 메모리를 포함하며,
    상기 메모리는, 프로세서에 의해 실행 가능한 명령어를 갖는 적어도 하나의 모듈을 포함하고, 상기 명령어는 상기 적어도 하나의 프로세서에 의해 실행될 때,
    데이터 병렬 소스 코드에 따라 컴퓨트 디바이스 객체 및 리소스 뷰 객체를 생성하고 - 상기 컴퓨트 디바이스 객체는 디바이스 레벨을 명시하고, 상기 리소스 뷰 객체는 제 1 리소스 레벨을 명시하며, 상기 디바이스 레벨은 상기 데이터 병렬 소스 코드의 실행에 이용되는 컴퓨트 노드의 유형을 표시하고, 상기 제 1 리소스 레벨은 상기 데이터 병렬 소스 코드의 실행에 이용되는 런타임 라이브러리의 유형을 표시함 -,
    상기 데이터 병렬 소스 코드 내의 데이터 병렬 기능과 연관된 주석을 획득하고 - 상기 주석은, 상기 데이터 병렬 기능의 실행에 이용되는 런타임 라이브러리의 유형을 표시하는 제 2 리소스 레벨을 나타내며, 상기 제 1 리소스 레벨은 상기 제 2 리소스 레벨과 상이함 -,
    상기 제 1 리소스 레벨이 상기 데이터 병렬 소스 코드의 프로그래밍 언어에 비해 동일하거나 적은 시맨틱적 제약을 가질 때, 상기 제 1 리소스 레벨 및 상기 디바이스 레벨에 대응되는 컴퓨트 노드를 이용하여 상기 데이터 병렬 기능을 실행하는
    시스템.
  18. 제 17 항에 있어서,
    상기 메모리는 적어도 하나의 사용자 정의(user-defined) 런타임 라이브러리를 포함하며, 상기 사용자 정의 런타임 라이브러리는 새로운 또는 갱신된 유형의 컴퓨트 노드들 중 적어도 하나의 컴퓨트 노드를 명시하는 시맨틱 메타데이터를 포함하는 커스텀 컴퓨트 디바이스 기능을 포함하는
    시스템.
  19. 제 17 항에 있어서,
    상기 메모리는 적어도 하나의 사용자 정의 런타임 라이브러리를 포함하며, 상기 사용자 정의 런타임 라이브러리는 새로운 또는 갱신된 리소스 레벨들 중 적어도 하나의 리소스 레벨을 포함하는 커스텀 리소스 뷰 기능을 포함하는
    시스템.
  20. 제 17 항에 있어서,
    상기 메모리는 적어도 하나의 사용자 정의 런타임 라이브러리를 포함하며, 상기 사용자 정의 런타임 라이브러리는 호출-사이트 기능의 커스텀 구현을 포함하는 커스텀 데이터 병렬 기능을 포함하는
    시스템.
KR1020137016150A 2010-12-23 2011-12-23 확장 가능한 데이터 병렬 시맨틱스 KR101962484B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/977,207 US9841958B2 (en) 2010-12-23 2010-12-23 Extensible data parallel semantics
US12/977,207 2010-12-23
PCT/US2011/067185 WO2012088508A2 (en) 2010-12-23 2011-12-23 Extensible data parallel semantics

Publications (2)

Publication Number Publication Date
KR20130137652A KR20130137652A (ko) 2013-12-17
KR101962484B1 true KR101962484B1 (ko) 2019-03-26

Family

ID=46314971

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137016150A KR101962484B1 (ko) 2010-12-23 2011-12-23 확장 가능한 데이터 병렬 시맨틱스

Country Status (8)

Country Link
US (1) US9841958B2 (ko)
EP (1) EP2656203A4 (ko)
JP (1) JP5957006B2 (ko)
KR (1) KR101962484B1 (ko)
CN (1) CN102566980B (ko)
CA (1) CA2822100A1 (ko)
HK (1) HK1172968A1 (ko)
WO (1) WO2012088508A2 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9841958B2 (en) * 2010-12-23 2017-12-12 Microsoft Technology Licensing, Llc. Extensible data parallel semantics
US9632771B2 (en) * 2012-12-13 2017-04-25 Microsoft Technology Licensing, Llc Association of metadata with source code and applications and services premised thereon
US10101982B2 (en) * 2013-01-31 2018-10-16 Htc Corporation Methods for application management in an electronic device supporting hardware acceleration
KR101632027B1 (ko) * 2014-11-11 2016-06-20 포트리스이노베이션 주식회사 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체
US20170046168A1 (en) * 2015-08-14 2017-02-16 Qualcomm Incorporated Scalable single-instruction-multiple-data instructions
US10409560B1 (en) * 2015-11-18 2019-09-10 Amazon Technologies, Inc. Acceleration techniques for graph analysis programs
JP6563363B2 (ja) * 2016-05-13 2019-08-21 日本電信電話株式会社 設定サーバ、設定方法および設定プログラム
WO2018094087A1 (en) * 2016-11-17 2018-05-24 The Mathworks, Inc. Systems and methods for generating code for parallel processing units
US11372633B2 (en) * 2018-01-04 2022-06-28 Shenzhen Tinysoft Co., Ltd. Method, device and terminal apparatus for code execution and computer readable storage medium
CN109918133A (zh) * 2019-01-24 2019-06-21 董栋挺 一种电力传输系统用多核心任务处理方法
KR20200093105A (ko) 2019-01-25 2020-08-05 삼성전자주식회사 이기종 프로세서들을 위해 전자 장치의 프로세서에 의해 구현되는 방법 및 전자 장치를 동작시키기 위한 프로세서
CN111832736B (zh) * 2019-04-19 2024-04-12 伊姆西Ip控股有限责任公司 用于处理机器学习模型的方法、设备和计算机可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080276220A1 (en) * 2007-04-11 2008-11-06 Aaftab Munshi Application interface on multiple processors
US20100205580A1 (en) * 2009-02-10 2010-08-12 International Business Machines Corporation Generating parallel simd code for an arbitrary target architecture

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11316688A (ja) 1998-05-06 1999-11-16 Mitsubishi Electric Corp プログラミング言語処理装置、プログラミング言語処理方法および記録媒体
US6675189B2 (en) 1998-05-28 2004-01-06 Hewlett-Packard Development Company, L.P. System for learning and applying integrated task and data parallel strategies in dynamic applications
US6828975B2 (en) 2001-03-01 2004-12-07 Microsoft Corporation Method and system for managing graphics objects in a graphics display system
US7733347B2 (en) * 2004-11-05 2010-06-08 Microsoft Corporation Automated construction of shader programs
US8136104B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for determining compute kernels for an application in a parallel-processing computer system
US7822594B2 (en) * 2006-08-07 2010-10-26 Voltaire Ltd. Service-oriented infrastructure management
US20080109795A1 (en) 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
EP2135163B1 (en) 2007-04-11 2018-08-08 Apple Inc. Data parallel computing on multiple processors
US8069190B2 (en) 2007-12-27 2011-11-29 Cloudscale, Inc. System and methodology for parallel stream processing
FR2931269A1 (fr) * 2008-05-16 2009-11-20 Ateji Soc Par Actions Simplifi Procede et systeme de developpement de programmes paralleles
US8566830B2 (en) 2008-05-16 2013-10-22 Microsoft Corporation Local collections of tasks in a scheduler
US8214814B2 (en) * 2008-06-24 2012-07-03 International Business Machines Corporation Sharing compiler optimizations in a multi-node system
US8645933B2 (en) * 2008-08-01 2014-02-04 Leon Schwartz Method and apparatus for detection and optimization of presumably parallel program regions
US8495603B2 (en) * 2008-08-11 2013-07-23 International Business Machines Corporation Generating an executable version of an application using a distributed compiler operating on a plurality of compute nodes
US8549496B2 (en) * 2009-02-27 2013-10-01 Texas Tech University System Method, apparatus and computer program product for automatically generating a computer program using consume, simplify and produce semantics with normalize, transpose and distribute operations
US8239847B2 (en) * 2009-03-18 2012-08-07 Microsoft Corporation General distributed reduction for data parallel computing
US8209664B2 (en) * 2009-03-18 2012-06-26 Microsoft Corporation High level programming extensions for distributed data parallel processing
US9349154B2 (en) * 2010-04-05 2016-05-24 Nvidia Corporation Bindless texture and image API
US9424087B2 (en) * 2010-04-29 2016-08-23 International Business Machines Corporation Optimizing collective operations
US20110314256A1 (en) * 2010-06-18 2011-12-22 Microsoft Corporation Data Parallel Programming Model
US8589867B2 (en) * 2010-06-18 2013-11-19 Microsoft Corporation Compiler-generated invocation stubs for data parallel programming model
US8756590B2 (en) * 2010-06-22 2014-06-17 Microsoft Corporation Binding data parallel device source code
US9395957B2 (en) * 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US9841958B2 (en) * 2010-12-23 2017-12-12 Microsoft Technology Licensing, Llc. Extensible data parallel semantics

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080276220A1 (en) * 2007-04-11 2008-11-06 Aaftab Munshi Application interface on multiple processors
US20100205580A1 (en) * 2009-02-10 2010-08-12 International Business Machines Corporation Generating parallel simd code for an arbitrary target architecture

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
NVIDIA Corporation, NVIDIA CUDA C Programming Guide, Version 3.2(2010.11.)*

Also Published As

Publication number Publication date
WO2012088508A2 (en) 2012-06-28
CN102566980B (zh) 2015-03-18
EP2656203A2 (en) 2013-10-30
JP2014501412A (ja) 2014-01-20
EP2656203A4 (en) 2016-03-30
JP5957006B2 (ja) 2016-07-27
WO2012088508A3 (en) 2012-11-29
KR20130137652A (ko) 2013-12-17
CN102566980A (zh) 2012-07-11
CA2822100A1 (en) 2012-06-28
HK1172968A1 (en) 2013-05-03
US20120166772A1 (en) 2012-06-28
US9841958B2 (en) 2017-12-12

Similar Documents

Publication Publication Date Title
KR101962484B1 (ko) 확장 가능한 데이터 병렬 시맨틱스
Cavé et al. Habanero-Java: the new adventures of old X10
US9489183B2 (en) Tile communication operator
KR101842307B1 (ko) 데이터 병렬 코드에서의 맵 변환
US10282179B2 (en) Nested communication operator
Jacob et al. CUDACL: A tool for CUDA and OpenCL programmers
US10620916B2 (en) Read-only communication operator
US8713039B2 (en) Co-map communication operator
KR101632027B1 (ko) 주석기반의 의사코드를 이용한 프로그램 변환 방법 및 그 방법을 구현하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체
Harvey et al. Parallel programming in actor-based applications via OpenCL
Szűgyi et al. Generative version of the FastFlow multicore library
Afonso et al. Automatic Generation of OpenCL Code for ARM Architectures
Harvey et al. Actors: The Ideal Abstraction for Programming Kernel-Based Concurrency
Linderman A programming model and processor architecture for heterogeneous multicore computers
Ramesh Density based visualization of big data with Graphical Processing Units
Swaine Electrical Engineering and Computer Science Department

Legal Events

Date Code Title Description
N231 Notification of change of applicant
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant