KR20140001864A - 타일 통신 연산자 - Google Patents

타일 통신 연산자 Download PDF

Info

Publication number
KR20140001864A
KR20140001864A KR1020137009251A KR20137009251A KR20140001864A KR 20140001864 A KR20140001864 A KR 20140001864A KR 1020137009251 A KR1020137009251 A KR 1020137009251A KR 20137009251 A KR20137009251 A KR 20137009251A KR 20140001864 A KR20140001864 A KR 20140001864A
Authority
KR
South Korea
Prior art keywords
type
data parallel
tile
indexable type
input
Prior art date
Application number
KR1020137009251A
Other languages
English (en)
Other versions
KR101740093B1 (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 KR20140001864A publication Critical patent/KR20140001864A/ko
Application granted granted Critical
Publication of KR101740093B1 publication Critical patent/KR101740093B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/453Data distribution
    • 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
    • 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
    • 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

Abstract

고급 프로그래밍 언어가 계산 공간을 데이터 병렬 컴퓨트 노드들의 실행 구조들(예를 들어, 스레드 그룹들)에 맵핑될 수 있는 하위 공간들(즉, 타일들)로 분해하는 타일 통신 연산자를 제공한다. 순위 및 요소 타입을 갖는 인덱싱 가능 타입이 계산 공간을 정의한다. 입력 인덱싱 가능 타입에 대해, 타일 통신 연산자는 입력 인덱싱 가능 타입과 동일한 순위 및 입력 인덱싱 가능 타입의 타일인 요소 타입을 갖는 출력 인덱싱 가능 타입을 생성한다. 출력 인덱싱 가능 타입은 데이터 병렬 컴퓨트 노드에서 글로벌 메모리 액세스들의 병합을 가능하게 하는 계산 공간의 로컬 뷰 구조를 제공한다.

Description

타일 통신 연산자{TILE COMMUNICATION OPERATOR}
컴퓨터 시스템들은 종종 하나 이상의 범용 프로세서들(예를 들어, 중앙 처리 장치(central processing unit(CPU)) 및 하나 이상의 특화된 데이터 병렬 컴퓨트 노드들(예를 들어, 그래픽 처리 유닛(graphics processing unit(GPU)), 또는 CPU 내의 단일 명령어 다중 데이터(single instruciton, multiple data(SIMD)) 실행 유닛)을 포함한다. 범용 프로세서들은 일반적으로 컴퓨터 시스템들에서 범용 처리를 수행하며, 데이터 병렬 컴퓨트 노드들은 일반적으로 컴퓨터 시스템들에서 데이터 병렬 처리(예를 들어, 그래픽 처리)를 수행한다. 범용 프로세서들은 종종 데이터 병렬 알고리즘들을 구현하는 능력을 갖지만, 데이터 병렬 컴퓨트 노드들에서 발견되는 최적화된 하드웨어 자원들 없이 그렇게 한다. 결과적으로, 범용 프로세서들은 데이터 병렬 컴퓨트 노드들보다 데이터 병렬 알고리즘들의 실행에 있어 훨씬 덜 효율적일 수 있다.
데이터 병렬 컴퓨트 노드들은 전통적으로 컴퓨터 시스템들에서 프로그램들을 실행함에 있어 범용 프로세서들을 지원하는 역할을 수행해왔다. 데이터 병렬 컴퓨트 노드 처리 능력의 향상으로 인해 데이터 병렬 알고리즘들을 위해 최적화된 하드웨어의 역할이 증가함에 따라, 데이터 병렬 컴퓨트 노드들을 프로그래밍하는 프로그래머들의 능력을 향상시키며 데이터 병렬 컴퓨트 노드들의 프로그래밍을 더 용이하게 해주는 것이 바람직할 것이다.
계산 선형 대수학에서의 통상의 기법은 계산 공간이 하위 공간들로 분할되며 각각의 타일 또는 블록을 점인 것처럼 처리함으로써 알고리즘이 순환적으로 구현되는 타일 또는 블록 분해 알고리즘이다. 그러나, 이러한 분해는 타일들 및 블록들의 인덱스들 및 상대적인 기하 구조의 정밀한 추적을 포함한다. 결과적으로, 인덱스들 및 기하 구조를 생성하는 프로세스는 에러에 취약하며 구현하기 어렵다.
본 요약은 아래의 상세한 설명에서 더 설명되는 선택된 개념들을 간소화된 형태로 소개하기 위해 제공된다. 본 요약은 청구 발명의 중요한 특징들 또는 본질적인 특징들을 식별하도록 의도되지 않으며, 청구 발명 대상의 범위를 한정하는 데 사용되도록 의도되지도 않는다.
고급 프로그래밍 언어는 계산 공간을 데이터 병렬 컴퓨트 노드들의 실행 구조들(예를 들어, 스레드 그룹들)에 맵핑될 수 있는 하위 공간들(즉, 타일들)로 분해하는 타일 통신 연산자를 제공한다. 순위 및 요소 타입을 갖는 인덱싱 가능 타입이 계산 공간을 정의한다. 입력 인덱싱 가능 타입에 대해, 타일 통신 연산자는 입력 인덱싱 가능 타입과 동일한 순위 및 입력 인덱싱 가능 타입의 타일인 요소 타입을 갖는 출력 인덱싱 가능 타입을 생성한다. 출력 인덱싱 가능 타입은 데이터 병렬 컴퓨트 노드에서 글로벌 메모리 액세스들의 병합을 가능하게 하는 계산 공간의 로컬 뷰 구조(local view structure)를 제공한다.
첨부 도면들은 실시예들의 추가적인 이해를 제공하기 위해 포함되며, 본 명세서에 통합되어 그 일부를 구성한다. 도면들은 실시예들을 나타내며, 명세서와 더불어 실시예들의 원리들을 설명하는 역할을 한다. 다른 실시예들 및 많은 의도된 실시예들의 이점들은 아래의 상세한 설명을 참조하여 더 잘 이해됨에 따라 쉽게 인식될 것이다. 도면들의 요소들은 반드시 서로에 대해 축척에 따라 도시된 것은 아니다. 동일한 참조 번호들은 대응하는 유사한 요소들을 나타낸다.
도 1은 타일 통신 연산자를 갖는 코드의 일 실시예를 나타내는 컴퓨터 코드 도면이다.
도 2는 타일 통신 연산자를 입력 인덱싱 가능 타입에 적용하는 일 실시예를 나타내는 블록도이다.
도 3은 타일 통신 연산자를 이용하여 출력 인덱싱 가능 타입을 생성하는 일 실시예를 나타내는 블록도이다.
도 4는 타일 통신 연산자를 구현하는 코드의 일 실시예를 나타내는 컴퓨터 코드 도면이다.
도 5는 타일 통신 연산자를 포함하는 데이터 병렬 코드를 컴파일 및 실행하도록 구성된 컴퓨터 시스템의 일 실시예를 나타내는 블록도이다.
아래의 상세한 설명에서, 첨부 도면들을 참조하며, 첨부도면은 그의 일부를 형성하며 첨부도면에는 본 발명이 실시될 수 있는 특정 실시예들이 예시로서 도시된다. 이와 관련하여, "상(top)", "하(bottom)", "전(front)", "후(back)", "선두(leading)", "후미(trailing)" 등과 같은 방향 용어가 설명되는 도면(들)의 배향과 관련하여 사용된다. 실시예들의 구성 요소들은 다수의 상이한 배향으로 배치될 수 있으므로, 방향 용어는 설명의 목적으로 사용되며, 어떠한 경우에도 한정되지 않는다. 본 발명의 범위로부터 벗어나는 일 없이 다른 실시예들이 이용될 수 있으며 구조적 또는 논리적 변경들이 이루어질 수 있다는 것을 이해해야 한다. 따라서, 아래의 상세한 설명은 한정으로 간주되지 않아야 하며, 본 발명의 범위는 첨부된 청구항들에 의해 정의된다. 본 명세서에서 설명되는 다양한 실시예들의 특징들은 구체적으로 달리 언급되지 않는 한은 서로 결합될 수 있다는 것을 이해해야 한다.
도 1은 타일 통신 연산자(12)를 갖는 코드(10)의 일 실시예를 나타내는 컴퓨터 코드 도면이다. 컴파일되고 실행될 때 타일 통신 연산자(12)는 (도 1의 실시예에서 indexable_type <N, T>로 표현되는) 계산 공간을 (도 1의 실시예에서 _Extent로 표현되는) 범위에 의해 정의되는 하위 공간들(즉, 타일들)로 분해한다. 타일들은 도 5에 도시되고 아래에 더 상세히 설명되는 데이터 병렬(DP) 최적 컴퓨트 노드들(121)과 같은 DP 최적 컴퓨트 노드들의 실행 구조들(예를 들어, 스레드 그룹들 (Direct X), 스레드 블록들 (CUDA), 작업 그룹들 (OpenCL) 또는 파동들 (AMD/ATI))에 맵핑될 수 있다.
코드(10)는 하나 이상의 DP 최적 컴퓨트 노드들(예를 들어, 도 5에 도시된 DP 최적 컴퓨트 노드(121))에 의해 실행하기 위한 하나 이상의 실행 파일(예를 들어, DP 실행 파일(138))로 컴파일될 수 있는 고급 범용 또는 데이터 병렬 프로그래밍 언어로부터의 명령어들의 시퀀스를 포함한다.
일 실시예에서, 코드(10)는 하나 이상의 모듈들의 세트 내에 저장되는 프로그램을 형성하는 데이터 병렬 확장들을 갖는 고급 범용 프로그래밍 언어(이하, GP 언어)로부터의 명령어들의 시퀀스를 포함한다. GP 언어는 프로그램이 상이한 부분들(즉, 모듈들)로 작성되는 것을 가능하게 할 수 있으며, 따라서 각각의 모듈은 컴퓨터 시스템에 의해 액세스될 수 있는 개별 파일들 또는 장소들에 저장될 수 있다. GP 언어는 하나 이상의 범용 프로세서들 및 하나 이상의 특수 목적 DP 최적 컴퓨트 노드들을 포함하는 컴퓨팅 환경을 프로그래밍하기 위한 단일 언어를 제공한다. DP 최적 컴퓨트 노드들은 통상적으로 그래픽 처리 장치들(GPU) 또는 범용 프로세서들의 SIMD 유닛들이지만, 일부 컴퓨팅 환경들에서는 범용 프로세서들의 스칼라 또는 벡터 실행 유닛들, 필드 프로그래머블 게이트 어레이들(FPGA) 또는 다른 적절한 장치들도 포함할 수 있다. 프로그래머는 GP 언어를 이용하여 범용 프로세서 및 DP 소스 코드 양자를 범용 프로세서들 및 DP 컴퓨트 노드들 각각에 의한 실행을 위해 코드(10) 내에 포함시키며, 범용 프로세서 및 DP 소스 코드의 실행을 조정할 수 있다. 코드(10)는 이 실시예에서 애플리케이션, 라이브러리 함수 또는 운영 체제 서비스와 같은 임의의 적절한 타입의 코드를 나타낼 수 있다.
GP 언어는 C 또는 C++와 같은 광범위하게 적응되는 고급 범용 프로그래밍 언어를 데이터 병렬 특징들을 포함하도록 확장함으로써 형성될 수 있다. DP 특징들이 나타날 수 있는 범용 언어들의 다른 예들은 Java(TM), PHP, Visual Basic, Perl, Python(TM), C#, Ruby, Delphi, Fortran, VB, F#, OCaml, Haskell, Erlang, NESL, Chapel 및 JavaScript(TM)를 포함한다. GP 언어는 프로그램의 상이한 부분들이 상이한 모듈들에 포함되는 것을 가능하게 하는 풍부한 연결 능력을 포함할 수 있다. 데이터 병렬 특징들은 데이터 병렬 연산들이 범용 프로세서들(즉, 논(non)-DP 최적 컴퓨트 노드들)에 의해서보다 더 빠르고 더 효율적으로 실행되는 것을 가능하게 하기 위해 DP 최적 컴퓨트 노드들의 특수 목적 아키텍처를 이용하는 프로그래밍 도구들을 제공한다. GP 언어는 프로그래머가 범용 프로세서들 및 DP 최적 컴퓨트 노드들 양자를 위해 프로그래밍하는 것을 가능하게 하는 다른 적절한 고급 범용 프로그래밍 언어일 수도 있다.
다른 실시예에서, 코드(10)는 프로그램을 형성하는 고급 데이터 병렬 프로그래밍 언어(이하, DP 언어)로부터의 명령어들의 시퀀스를 포함한다. DP 언어는 하나 이상의 DP 최적 컴퓨트 노드들을 갖는 컴퓨팅 환경에서 DP 최적 컴퓨트 노드를 프로그래밍하기 위한 특수화된 언어를 제공한다. 프로그래머는 DP 언어를 이용하여 DP 최적 컴퓨트 노드들에서 실행하도록 의도된 DP 소스 코드를 코드(10) 내에 생성한다. DP 언어는 데이터 병렬 연산들이 범용 프로세서들에 의해서보다 더 빠르고 더 효율적으로 실행되는 것을 가능하게 하기 위해 DP 최적 컴퓨트 노드들의 특수 목적 아키텍처를 이용하는 프로그래밍 도구들을 제공한다. DP 언어는 HLSL, GLSL, Cg, C, C++, NESL, Chapel, CUDA, OpenCL, Accelerator, Ct, PGI GPGPU Accelerator, CAPS GPGPU Accelerator, Brook+, CAL, APL, Fortran 90 (및 그 이상), Data Parallel C, DAPPLE 또는 APL과 같은 기존의 DP 프로그래밍 언어일 수 있다. 코드(10)는 이 실시예에서 애플리케이션, 라이브러리 함수 또는 운영 체제 서비스와 같은 임의의 적절한 타입의 DP 소스 코드를 나타낼 수 있다.
코드(10)는 DP 최적 컴퓨트 노드에서 실행하도록 지정된 코드 부분들을 포함한다. 코드(10)가 GP 언어로 작성되는 도 1의 실시예에서, GP 언어는 프로그래머가 벡터 함수를 정의할 때 주석(26)(예를 들어, _declspec(vector)...)을 이용하여 DP 소스를 지정하는 것을 가능하게 한다. 주석(26)은 DP 최적 컴퓨트 노드에서 실행하도록 의도되는 벡터 함수의 함수 이름(27)(예를 들어, vector_func)과 연관된다. 코드(10)는 또한 호출 사이트(예를 들어, forall, reduce, scan 또는 sort)에 벡터 함수(예를 들어, forall..., vector_func,...)의 하나 이상의 호출들(28)을 포함할 수 있다. 호출 사이트에 대응하는 벡터 함수는 커널 함수로서 참조된다. 커널 함수는 코드(10) 내의 다른 벡터 함수들(즉, 다른 DP 소스 코드)을 호출할 수 있으며, 벡터 함수 호출 그래프의 루트(root)로서 간주될 수 있다. 커널 함수는 또한 코드(10)에 의해 정의되는 타입들(예를 들어, 클래스들 또는 구조체들)을 사용할 수 있다. 타입들은 DP 소스 코드로서 주석이 첨부되거나 첨부되지 않을 수 있다. 다른 실시예들에서는, 다른 적절한 프로그래밍 언어 구문들이 코드(10)의 부분들을 DP 소스 코드 및/또는 범용 프로세서 코드로서 지정하는 데 사용될 수 있다. 게다가, 코드(10)가 DP 언어로 작성되는 실시예들에서는 주석들(26)이 생략될 수 있다.
도 2는 출력 인덱싱 가능 타입(18)을 생성하기 위해 입력 인덱싱 가능 타입(14)에 타일 통신 연산자(12)를 적용하는 실시예를 나타내는 블록도이다. 본 명세서에서 사용될 때, 인덱싱 가능 타입은 음이 아닌 정수인 순위 및 element_type로 표시되는 타입과 더불어 하나 이상의 첨자 연산자들을 구현하는 임의의 데이터 타입이다. index<N>이 정수들의 N-튜플(tuple)을 나타내는 타입(즉, 임의 타입의 정수 데이터 타입)인 경우, index<N>의 인스턴스는 N개의 정수들의 세트 {i0, i1,..., im}(즉, N-튜플)이고, 여기서 m은 N-1이다. 순위 N의 인덱스 연산자가 index<N>의 N 튜플 인스턴스를 취하고, 이 인스턴스를 요소 타입이라고 하는 타입의 다른 인스턴스와 연관시키며, 요소 타입은 인덱싱 가능 타입 내의 각각의 요소를 정의한다. 일 실시예에서, 인덱싱 가능 타입은 아래의 연산자들 중 하나 이상을 정의한다.
Figure pct00001
여기서, index_declarator는 다음 중 적어도 하나의 형태를 갖는다.
Figure pct00002
다른 실시예들에서, 연산자들은 함수들, 함수 객체들(functors) 또는 더 일반적인 표현일 수 있다. 주어진 순위 및 요소 타입을 갖는 인덱싱 가능 타입들의 카테고리는 필드라고 하는 초기 객체를 갖는다. 인덱싱 가능 타입은 폴리포트(polytope)인 형상을 갖는데, 즉 인덱싱 가능 타입은 좌표 축들의 선형 함수들에 의해 형성된 유한 수의 반-평면들의 교선으로서 대수학적으로 표현될 수 있다.
도 1 및 2를 참조하면, 코드(10)의 고급 언어는 데이터 병렬 컴퓨팅 환경에서 입력 인덱싱 가능 타입(14)에서 사용하기 위한 타일 통신 연산자(12)를 제공한다. 입력 인덱싱 가능 타입(14)은 순위(예를 들어, 도 1의 실시예에서의 순위 N) 및 요소 타입(예를 들어, 도 1의 실시예에서의 요소 타입 T)을 가지며, 타일 통신 연산자(12)에 의해 분해되는 계산 공간을 정의한다. 각각의 입력 인덱싱 가능 타입(14)에 대해, 타일 통신 연산자는 입력 인덱싱 가능 타입(14)과 동일한 순위 및 입력 인덱싱 가능 타입(14)의 타일인 요소 타입을 갖는 출력 인덱싱 가능 타입(18)을 생성한다.
도 3은 타일 통신 연산자(12)를 이용하여 출력 인덱싱 가능 타입(18)을 생성하는 일 실시예를 나타내는 블록도이다. 도 3의 예에서, 타일 통신 연산자(12)는 2x2 타일을 이용하여 4x4 입력 인덱싱 가능 타입(14)을 2x2 출력 인덱싱 가능 타입(18)으로 분할한다. 다른 예(도시되지 않음)로서, 1024x1024 행렬인 입력 인덱싱 가능 타입(14) 및 64x64의 타일이 주어지면, 출력 인덱싱 가능 타입(18)은 16x16 타일들을 표현한다(64*16 = 1024).
타일 통신 연산자(12)는 데이터 분해의 범위 패턴을 표현한다. 범위 패턴은 인덱싱 가능 타입들의 모음을 포함한다. Indexable<N>을 순위 N의 임의의 입력 인덱싱 가능 타입(14)이라고 하며, 이는 인덱스 연산자들이 타입 index<N>의 인스턴스들에 작용한다는 것을 의미한다. 첨자 연산자의 반환 타입(즉, 요소 타입)은 Indexable<N>::element_type이다.
타일 통신 연산자(12)의 계산법은 다음과 같은 구조 동일성(isomorphism)을 생성한다. 타일에 대해, tile<grid_tile>: Indexable<N> -> range<N, Indexable<N>> 및 range<N, Indexable<N>>은 Indexalbe<N>/grid_tile에 의해 인덱싱되는 grid_tile로 제한되는 Indexable<N>의 모음이다. 더 구체적으로, 그리드가 Indexable<N>의 형상을 기술하는 경우, rang<N, Indexable<N>>은 grid_range = (grid + grid_tile - 1)/grid_tile에서 오프셋만큼 평행 이동된 grid_tile로 제한되는 Indexalbe<N>의 모음이다. 따라서, grid_range는 tile<grid_tile>(Indexable<N>)에 의해 생성될 때 range<N, Indexable<N>>의 형상이다.
타일 통신 연산자(12)에 의해 구성되는 모든 '범위(range)' 인스턴스들은 일반성의 상실 없이 Indexable<N>.grid로서 참조되는 Indexable<N>의 정의 또는 형상의 오리지널 도메인을 취한다. 정의상, Indexable<N>의 인덱스 연산자들은 Indexable<N>.grid에 의해 기술되는 모든 index<N>에 작용한다. range<N1, Indexable<N2>>의 형성시에, Indexable<N>.grid의 분할이 이루어지고, range<N1, Indexable<N2>>에 의해 정의되는 모음은 N2-차원 분할로 제한되는 오리지널 Indexable<N>이며, 그의 세트는 index<N>의 N1-차원 세트에 의해 파라미터화된다. 컴파일 시에 컴파일러에 의해 추론될 수 있는 최적화는 range<N, Indexable<N>>이 오리지널 Indexable<N>의 분할이라는 것이다.
입력 인덱싱 가능 타입(14)이 "범위(range)"로서 정의되는 일례에서, 아래의 코드 부분 내의 타일 통신 연산자(12) "타일(tile)"은 범위 입력 인덱싱 가능 타입(14)을 출력 인덱싱 가능 타입(18)으로 타일화하는 데 사용될 수 있다.
//
// 타일 통신 연산자
//
Figure pct00003
위의 코드 부분에서, grid<_Rank>(e)는 tile_range의 형상을 타일들의 모음으로서 기술한다. _Tile은 tile_range에 의해 취해지는 곱함수 또는 스텝이며, 즉 '다음 타일'은 _Tile에 의한 증분이다. 마지막 파라미터 Parent_type (grid<_Rank> (_Tile), _Parent)는 _Parent의 _Tile 형상의 하위 객체의 표현이다. 사실상, 인덱싱 가능 타입이 타일화를 허가하기 위하여 - 이는 '타일(...)' 통신 연산자에 유효하다는 것을 의미함 -, 인덱싱 가능 타입은 아래의 시그니처의 구성자를 갖는 것으로 충분하다.
Parent_type(const grid<_Rank>& _Sub_grid, const _Parent_type& _Parent);
입력 인덱싱 가능 타입(14)이 필드 초기 객체(즉, "필드(field)")로서 정의되는 다른 예에서, 아래의 코드 부분 내의 타일 통신 연산자(12) "타일(tile)"은 필드 입력 인덱싱 가능 타입(14)을 출력 인덱싱 가능 타입(18)으로 타일화하는 데 사용될 수 있다.
//
// 타일 통신 연산자
//
Figure pct00004
위의 코드 부분에서, grid<_Rank>(e)는 tile_range의 형상을 타일들의 모음으로서 기술한다. _Tile은 tile_range에 의해 취해지는 곱함수 또는 스텝이며, 즉 '다음 타일'은 _Tile에 의한 증분이다. 마지막 파라미터 field<_Rank, _Element_type> (grid<_Rank> (_Ti le ), _Parent)는 field<_Rank, _Element_type>의 _Tile 형상의 하위 객체의 표현이다.
도 4는 타일 통신 연산자(12) 및 출력 인덱싱 가능 타입(18)을 구현하는 코드의 일 실시예를 나타내는 컴퓨터 코드 도면이다. 도 4에 도시된 코드에서, 데이터 구조 "tile_range"는 타일 통신 연산자(12) "타일"에 대한 출력 인덱싱 가능 타입(18)("의사 필드"라고도 함)을 형성한다. tile_range의 인덱스 연산자는 const index<_Rank>& _Index를 취하고, 필드 또는 의사 필드를 형성하며, 이 필드의 범위는 _Tile이고, 그의 오프셋은 그를 구성하는 _Parent 내의 _Index*m_multiplier이다.
출력 인덱싱 가능 타입(18)은 DP 최적 컴퓨트 노드에서 글로벌 메모리 액세스들의 병합을 가능하게 하는 데이터 병렬 알고리즘의 계산 공간(즉, 입력 인덱싱 가능 타입(14))의 로컬 뷰 구조를 제공한다. 데이터 병렬 알고리즘의 로컬 구조는 DP 최적 컴퓨트 노드의 실행 구조(스레드 그룹들, 스레드 블록들, 작업 그룹들 또는 파동들)에 대응하는 스케줄링 패턴을 형성한다. 스트리밍 SIMD 확장(SSE) 컴퓨트 엔진들을 포함하는 DP 최적 컴퓨트 노드들의 경우, 로컬 구조는 루프 타일화 또는 루프 블록화를 통해 형성되는 스트립 마이닝 범위들(strip mining extents)과 유사하다. 로컬 구조는 글로벌 메모리 저장소들의 더 높은 성능의 알고리즘 액세스를 생성하기 위하여 DP 최적 컴퓨트 노드(예를 들어, 효율적인 스크래치 패드 메모리 또는 캐시)의 고속 로컬 또는 공유 메모리와 상호작용한다. 로컬 구조와 타일화의 관계는 다음과 같은데, 즉 타일이 로컬 구조 상수들의 배수가 되도록 설정될 수 있으며, 따라서 타일에 맞는 로컬 구조들의 수는 실행 구조의 암시적인 루프 차원들의 언롤링 팩터(unrolling factor)를 결정한다. 이러한 관계는 아래의 로컬 뷰 분해에서 볼 수 있다.
_index = _tileIndex * thread_group_dimensions + _localIndex
여기서, _tileIndex는 _index를 포함하는 타일(즉, 입력 인덱싱 가능 타입(14))의 좌표들을 나타내고, _localIndex는 그 타일 내의 오프셋이다. 로컬 구조 상수들 thread_group_dimensions는 _Tile과 동일하게 설정되거나, DP 최적 컴퓨트 노드에서 글로벌 메모리 액세스들의 병합을 가능하게 하기 위해 thread_group_dimensions의 배수(예를 들어, 16)가 _Tile와 동일하도록 설정될 수 있다. 따라서, 타일 통신 연산자(12)는 DP 최적 컴퓨트 노드들에 대한 간단하고, 에러가 없고, 직관적인 타일 분해를 제공한다.
타일 통신 연산자(12)는 순환적으로 적용될 수 있으며, 인덱싱 가능 타입들에 작용하는 다른 통신 연산자들과 결합될 수 있다.
이제, 타일 통신 연산자(12)의 사용은 행렬 곱셈과 관련하여 설명될 것이다.
타일 통신 연산자(12)를 사용하지 않는 경우, 행렬 곱셈은 아래의 코드에 나타난 바와 같이 글로벌 뷰 구조 상에서 수행될 수 있다.
Figure pct00005
16x16 스레드 그룹 차원들에 의해 결정되는 로컬 뷰 구조가 존재하는 것으로 가정한다. 유사하게, 행렬 A, B 및 C를 16x16 타일들로 타일화한다. (이제, N이 16에 의해 균일하게 분할될 수 있으며, 일반적인 예는 경계 조건들을 체크하며, 커널은 타일이 오리지널 데이터에 완전히 포함되지 않을 때 일찍 존재하는 것으로 가정한다.)
아래의 루프를 스트립 마이닝한다.
Figure pct00006
위의 것을 타일화하기 위해, 아래와 같이 분해하고,
Figure pct00007
이어서, tiled_mA와 tiled_mB를 결합하여 다음을 생성한다.
Figure pct00008
위의 분해로부터, 아래 사항을 알 수 있다.
Figure pct00009
아래로부터 통신이 이어지는데,
idx = _tileIdx * _tile + _localIdx,
즉, 행렬 내의 모든 포인트는 타일 내에 포인트 및 오프셋을 포함하는 타일로의 고유한 분해를 갖는다. 이 예를 완료하기 위하여, 공유 메모리를 통한 메모리 병합이 수행될 수 있다. 위의 글로벌 뷰 행렬 곱셈이 16x16의 스레드 그룹 차원들에 관하여 디스패칭(dispatching)되는 커널을 형성하는 것으로 가정하며, 이는 256개의 스레드가 동시에 커널을 논리적으로 실행하고 있다는 것을 의미한다. 하나의 스레드가 그 자신의 스레드 그룹으로부터의 다른 스레드의 결과들을 필요로 할 때마다, 동기화 장벽, 즉 스레드 그룹 내의 모든 스레드들이 장벽에 도달할 때까지 이들 모두를 차단하는 group_barrier()가 삽입된다.
아래와 같은 메모리 부하를 고려한다.
mA (idx (0), k)
mB (k, idx (1)) // 일정한 k
스레드 그룹은 스레드들 (i,j)를 가지며, 0 <= i,j < 16이다. 임의의 i에 대해, 스레드들 (i,0), (i,1),..., (i, 15)는 완전 병합된 액세스를 갖기 위해 글로벌 메모리로부터 연속적인 4 바이트 어드레스들을 판독한다. 구체적으로, 스레드 (i,0)은 첫 번째 4 바이트를 판독하고, 스레드 (i,1)은 두 번째 4 바이트를 판독하고, 스레드 (i,2)는 세 번째 4 바이트를 판독하며 등등이다.
글로벌 메모리로부터 64 또는 128 바이트 청크(chunk) 단위로 메모리가 액세스되며, 액세스되는 모든 메모리를 실제로 사용하는 것이 최선이다. 그러나, mA (idx (0), k)는 스레드들((i,0), (i,1),..., (i,15))의 임의의 행에 대해 4 바이트만을 사용하며, 따라서 글로벌 메모리 인출의 대부분은 사용되지 않는다. 반면, mB(k, idx(1)) = mB(k, _tileIdx(1) * 16 + _localIdx(1))은 64 바이트 청크들에 대해 완전히 병합되는데, 그 이유는 _localIdx가 정확히 (i,0), (i,1),..., (i,15)로서 변하기 때문이다. 유사하게, 스레드 그룹 및 _Tile 그룹 차원들 8x32를 가정하면, mB(k, idx(1)) = mB(k, _tileIdx(1) * 32 + _localIdx(1))은 128 바이트 청크들에 대해 완전히 병합되는데, 그 이유는 _localIdx가 정확히 (i,0), (i,1),..., (i,31)로서 변하기 때문이다.
모든 메모리 액세스를 완전히 병합하기 위하여, 글로벌 메모리는 공유 메모리 내로 병합 방식으로 판독되는데, 그 이유는 병합 순서가 계산을 수행하고 그룹 장벽에서 동기화한 후에 공유 메모리로부터 원하는 순서로 액세스하는 데 사용되는 순서가 아니기 때문이다. 이것은 메모리 액세스들이 완전히 병합되게 하고, 귀중한 최적화를 유발하는데, 그 이유는 DP 최적 컴퓨트 노드 내의 공유 메모리가 본질적으로 단위 액세스 속도를 갖기 때문이다.
Figure pct00010
Figure pct00011
이것을 모두 합하면 다음이 된다.
Figure pct00012
또는
Figure pct00013
Figure pct00014
타일 통신 연산자(12)의 사용은 완전히 병합된 메모리 액세스들에 기초하여 행렬 곱셈을 수행하는 속도를 상당히 증가시킬 수 있다. 게다가, 타일 통신 연산자(12)의 사용은 행렬들 중 하나가 곱셈의 일부로서 전치(transpose)되는 경우에 완전 병합된 메모리 액세스들에 기초하여 행렬 곱셈을 수행하는 속도를 크게 향상시킬 수 있다. A*transpose(B)의 경우, 메모리 액세스들이 완전히 병합 해제되어, 타일화 없이는 약 100배의 성능 저하가 발생한다.
도 5는 타일 통신 연산자(12)를 포함하는 데이터 병렬 코드(10)를 컴파일 및 실행하도록 구성된 컴퓨터 시스템(100)의 일 실시예를 나타내는 블록도이다.
컴퓨터 시스템(100)은 하나 이상의 프로세서 패키지(도시되지 않음) 내에 수용된 하나 이상의 처리 요소(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)은 임의의 적절한 타입, 수 및 구성의 제어기들, 버스들, 인터페이스들 및/또는 기타 유선 또는 무선 접속들을 포함하는 상호접속들(114)의 세트를 이용하여 통신한다.
컴퓨터 시스템(100)은 범용 또는 특수 목적을 위해 구성된 임의의 적절한 처리 장치를 나타낸다. 컴퓨터 시스템(100)의 예는 서버, 개인용 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 스마트폰, 개인용 휴대 단말기(PDA), 이동 전화 및 오디오/비디오 장치를 포함한다. 컴퓨터 시스템(100)의 컴포넌트들(즉, 호스트(101), 입출력 장치들(106), 디스플레이 장치들(108), 주변 장치들(110), 네트워크 장치들(112), 상호접속들(114) 및 컴퓨트 엔진(120))은 공동 하우징(도시되지 않음) 내에 또는 임의의 적절한 수의 개별 하우징(도시되지 않음) 내에 포함될 수 있다.
처리 요소들(102) 각각은 메모리 시스템(104)에 저장된 명령어들(즉, 소프트웨어)을 실행하도록 구성되는 실행 하드웨어를 형성할 수 있다. 각각의 프로세서 패키지 내의 처리 요소들(102)은 동일한 또는 상이한 아키텍처들 및/또는 명령어 세트들을 가질 수 있다. 예를 들어, 처리 요소들(102)은 순차 실행 요소들, 수퍼스칼라 실행 요소들 및 데이터 병렬 실행 요소들(예를 들어, GPU 실행 요소들)의 임의의 조합을 포함할 수 있다. 각각의 처리 요소(102)는 메모리 시스템(104)에 저장된 명령어들에 액세스하여 실행하도록 구성된다. 명령어들은 기본 입출력 시스템(BIOS) 또는 펌웨어(도시되지 않음), 운영 체제(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)에서 사용하기에 적합한 다른 운영 체제이다.
컴퓨터 시스템이 코드(10)를 컴파일하기 위해 컴파일러(134)를 실행할 때, 컴파일러(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)에서 실행하도록 의도되고 최적화된 데이터 병렬 프로그램 또는 알고리즘(예를 들어, 쉐이더)을 나타낸다. 일 실시예에서, DP 실행 파일(138)은 DP 최적 컴퓨트 노드(121)에서 실행되기 전에 장치 드라이버(도시되지 않음)에 의해 DP 최적 컴퓨트 노드(121)의 명령어 세트로부터 저레벨 명령어들로 변환되는 DP 바이트 코드 또는 소정의 다른 중간 표현(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)으로부터 수신된 명령어들 및 데이터를 저장한다. 메모리 시스템은 저장된 명령어들 및 데이터를 처리 요소들(102), 입출력 장치들(106), 디스플레이 장치들(108), 주변 장치들(110), 네트워크 장치들(112) 및 컴퓨트 엔진(120)에 제공한다. 메모리 시스템(104) 내의 저장 장치들의 예는 하드 디스크 드라이브들, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 플래시 메모리 드라이브들 및 카드들, 및 CD 및 DVD와 같은 자기 및 광 디스크들을 포함한다.
입출력 장치들(106)은 사용자로부터의 명령어들 또는 데이터를 컴퓨터 시스템(100)에 입력하고 컴퓨터 시스템(100)으로부터의 명령어들 또는 데이터를 사용자에게로 출력하도록 구성된 임의의 적절한 타입, 수 및 구성의 입출력 장치들을 포함한다. 입출력 장치들(106)의 예는 키보드, 마우스, 터치패드, 터치스크린, 버튼들, 다이얼들, 노브들 및 스위치들을 포함한다.
디스플레이 장치들(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)에 저장한다. 구체적으로, PE들(122)은 도 5에 도시되고 위에서 더 상세히 설명된 바와 같이 DP 실행 파일(138)을 실행하여 타일 통신 연산자(12)를 입력 인덱싱 가능 타입(14)에 적용함으로써 출력 인덱싱 가능 타입(18)을 생성한다.
데이터 병렬 컴퓨팅(즉, DP 프로그램들 또는 알고리즘들의 실행)을 위해 최적화된 하드웨어 아키텍처를 갖는 하나 이상의 계산 자원을 갖는 컴퓨트 노드(121)가 DP 최적 컴퓨트 노드(121)로서 참조된다. DP 최적 컴퓨트 노드(121)의 예는 PE들(122)의 세트가 하나 이상의 GPU를 포함하는 노드(121) 및 PE들(122)의 세트가 범용 프로세서 패키지 내에 SIMD 유닛들의 세트를 포함하는 노드(121)를 포함한다. 데이터 병렬 컴퓨팅을 위해 최적화된 하드웨어 아키텍처를 갖는 하나 이상의 계산 자원을 갖지 않는 컴퓨트 노드(121)(예를 들어, 범용 처리 요소들(102)만을 갖는 프로세서 패키지들)가 논-DP 최적 컴퓨트 노드(121)로서 참조된다. 각각의 컴퓨트 노드(121)에서, 메모리(124)는 메모리 시스템(104)과 별개일 수 있거나(예를 들어, GPU에 의해 사용되는 GPU 메모리), 메모리 시스템(104)의 일부(예를 들어, 범용 프로세서 패키지 내의 SIMD 유닛들에 의해 사용되는 메모리)일 수 있다.
호스트(101)는 DP 실행 파일(138)을 실행을 위해 컴퓨트 노드(121)에 제공하고 DP 실행 파일(138)에 의해 생성된 결과들을 상호접속들(114)을 이용하여 수신하도록 구성되는 호스트 컴퓨트 노드를 형성한다. 호스트 컴퓨트 노드는 메모리 계층 구조(즉, 메모리 시스템(104))를 공유하는 범용 계산 자원들(즉, 범용 처리 요소들(102))의 모음을 포함한다. 호스트 컴퓨트 노드는 대칭 다중 처리 아키텍처(SMP)를 갖도록 구성될 수 있으며, 또한 예를 들어 불균일 메모리 액세스(NUMA) 아키텍처를 이용하여 메모리 시스템(104)의 메모리 국지성을 최적화하도록 구성될 수 있다.
호스트 컴퓨트 노드의 OS(132)는 DP 최적 또는 논-DP 최적 컴퓨트 노드(121)에 의해 DP 실행 파일(138)이 실행되게 하기 위해 DP 호출 사이트를 실행하도록 구성된다. 메모리(124)가 메모리 시스템(104)과 별개인 실시예들에서, 호스트 컴퓨트 노드는 DP 실행 파일(138) 및 하나 이상의 인덱싱 가능 타입(14)이 메모리 시스템(104)으로부터 메모리(124)로 복사되게 한다. 메모리 시스템(104)이 메모리(124)를 포함하는 실시예들에서, 호스트 컴퓨트 노드는 메모리 시스템(104) 내의 DP 실행 파일(138) 및/또는 하나 이상의 인덱싱 가능 타입(14)의 메모리(124)로의 복사를 지정할 수 있고 그리고/또는 DP 실행 파일(138) 및/또는 하나 이상의 인덱싱 가능 타입(14)을 메모리 시스템(104)의 한 부분으로부터 메모리(124)를 형성하는 메모리 시스템(104)의 다른 부분으로 복사할 수 있다. 컴퓨트 노드(121)와 호스트 컴퓨트 노드 간의 복사 프로세스는 비동기로 지정되지 않는 한은 동기화 포인트일 수 있다.
호스트 컴퓨트 노드 및 각각의 컴퓨트 노드(121)는 서로 무관하게 코드를 동시에 실행할 수 있다. 호스트 컴퓨트 노드 및 각각의 컴퓨트 노드(121)는 노드 계산들을 조정하기 위해 동기화 포인트들에서 상호작용할 수 있다.
일 실시예에서, 컴퓨트 엔진(120)은 하나 이상의 그래픽 처리 장치(GPU)가 PE들(122) 및 메모리 시스템(104)과 별개인 메모리를 포함하는 그래픽 카드를 나타낸다. 이러한 실시예에서는, 그래픽 카드(도시되지 않음)의 드라이버가 DP 실행 파일(138)의 바이트 코드 또는 소정의 다른 중간 표현(IL)을 GPU들의 PE들(122)에 의해 실행하기 위한 GPU들의 명령어 세트로 변환할 수 있다.
다른 실시예에서, 컴퓨트 엔진(120)은 하나 이상의 범용 처리 요소(102)를 갖는 프로세서 패키지들에 포함된 하나 이상의 GPU(즉, PE들(122))와 메모리(124)를 포함하는 메모리 시스템(104)의 일부의 조합으로부터 형성된다. 이러한 실시예에서는, DP 실행 파일(138)의 바이트 코드 또는 소정의 다른 중간 표현(IL)을 프로세서 패키지들 내의 GPU들의 명령어 세트로 변환하기 위한 추가적인 소프트웨어가 컴퓨터 시스템(100)에 제공될 수 있다.
추가적인 실시예에서, 컴퓨트 엔진(120)은 처리 요소들(102)을 포함하는 프로세서 패키지들 중 하나 이상 내의 하나 이상의 SIMD 유닛과 메모리(124)를 포함하는 메모리 시스템(104)의 일부의 조합으로부터 형성된다. 이러한 실시예에서는, DP 실행 파일(138)의 바이트 코드 또는 소정의 다른 중간 표현(IL)을 프로세서 패키지들 내의 SIMD 유닛들의 명령어 세트로 변환하기 위한 추가적인 소프트웨어가 컴퓨터 시스템(100)에 제공될 수 있다.
또 다른 실시예에서, 컴퓨트 엔진(120)은 처리 요소들(102)을 포함하는 프로세서 패키지들 중 하나 이상 내의 하나 이상의 스칼라 또는 벡터 처리 파이프라인과 메모리(124)를 포함하는 메모리 시스템(104)의 일부의 조합으로부터 형성된다. 이러한 실시예에서는, DP 실행 파일(138)의 바이트 코드 또는 소정의 다른 중간 표현(IL)을 프로세서 패키지들 내의 스칼라 처리 파이프라인들의 명령어 세트로 변환하기 위한 추가적인 소프트웨어가 컴퓨터 시스템(100)에 제공될 수 있다.
본 명세서에서 특정 실시예들이 예시되고 설명되었지만, 이 분야의 통상의 기술자들은 본 발명의 범위로부터 벗어나지 않고 다양한 대안 및/또는 균등한 구현들이 도시되고 설명된 특정 실시예들을 대체할 수 있다는 것을 이해할 것이다. 본 출원은 본 명세서에서 논의되는 특정 실시예들의 임의의 적응들 또는 변경들을 포괄하도록 의도된다. 따라서, 본 발명은 청구항들 및 이들의 균등물들에 의해서만 한정되도록 의도된다.

Claims (15)

  1. 컴퓨터 실행 가능 명령어를 저장하는 컴퓨터 판독 가능 저장 매체로서,
    상기 컴퓨터 실행 가능 명령어는 컴퓨터 시스템에 의해 실행될 때 상기 컴퓨터 시스템이
    하나 이상의 데이터 병렬 컴퓨트 노드에서 실행하도록 구성되는 데이터 병렬 소스 코드 내의 타일 통신 연산자에 응답하여 입력 인덱싱 가능 타입으로부터 출력 인덱싱 가능 타입을 생성하는 단계, 및
    상기 출력 인덱싱 가능 타입을 이용하여 데이터 병렬 알고리즘을 수행하는 단계를 포함하는 방법을 수행하게 하는
    컴퓨터 판독 가능 저장 매체.
  2. 제1항에 있어서,
    상기 입력 인덱싱 가능 타입은 순위(rank) 및 제1 요소 타입을 가지며, 상기 출력 인덱싱 가능 타입은 상기 순위 및 상기 입력 인덱싱 가능 타입의 타일인 제2 요소 타입을 가지는
    컴퓨터 판독 가능 저장 매체.
  3. 제1항에 있어서,
    상기 입력 인덱싱 가능 타입은 순위 및 제1 형상을 가지며, 상기 출력 인덱싱 가능 타입은 상기 순위 및 상기 입력 인덱싱 가능 타입의 타일인 제2 형상을 가지는
    컴퓨터 판독 가능 저장 매체.
  4. 제1항에 있어서,
    상기 출력 인덱싱 가능 타입은 상기 하나 이상의 데이터 병렬 컴퓨트 노드의 실행 구조에 맵핑되는
    컴퓨터 판독 가능 저장 매체.
  5. 제1항에 있어서,
    상기 출력 인덱싱 가능 타입은 상기 하나 이상의 데이터 병렬 컴퓨트 노드 상에 상기 입력 인덱싱 가능 타입의 로컬 뷰 구조(local view structure)를 제공하는
    컴퓨터 판독 가능 저장 매체.
  6. 제1항에 있어서,
    상기 데이터 병렬 소스 코드는 데이터 병렬 확장을 갖는 프로그래밍 언어로 작성되는
    컴퓨터 판독 가능 저장 매체.
  7. 제1항에 있어서,
    상기 하나 이상의 데이터 병렬 컴퓨트 노드는 적어도 하나의 그래픽 처리 장치를 포함하는
    컴퓨터 판독 가능 저장 매체.
  8. 제1항에 있어서,
    상기 하나 이상의 데이터 병렬 컴퓨트 노드는 적어도 하나의 범용 프로세서를 포함하는
    컴퓨터 판독 가능 저장 매체.
  9. 컴퓨터 시스템에서 컴파일러에 의해 수행되는 방법으로서,
    하나 이상의 데이터 병렬 컴퓨트 노드에서 실행하도록 구성되는 데이터 병렬 소스 코드 내의 타일 통신 연산자를 식별하는 단계, 및
    데이터 병렬 실행 가능 코드가 입력 인덱싱 가능 타입을 출력 인덱싱 가능 타입으로 분해함으로써 타일 통신 연산자를 구현하도록 상기 데이터 병렬 소스 코드로부터 상기 데이터 병렬 실행 가능 코드를 생성하는 단계를 포함하는
    방법.
  10. 제9항에 있어서,
    상기 입력 인덱싱 가능 타입은 순위 및 제1 요소 타입을 가지며, 상기 출력 인덱싱 가능 타입은 상기 순위 및 상기 입력 인덱싱 가능 타입의 타일인 제2 요소 타입을 가지는
    방법.
  11. 제9항에 있어서,
    상기 입력 인덱싱 가능 타입은 순위 및 제1 형상을 가지며, 상기 출력 인덱싱 가능 타입은 상기 순위 및 상기 입력 인덱싱 가능 타입의 타일인 제2 형상을 가지는
    방법.
  12. 제9항에 있어서,
    상기 출력 인덱싱 가능 타입은 상기 하나 이상의 데이터 병렬 컴퓨트 노드의 실행 구조에 맵핑되는
    방법.
  13. 제9항에 있어서,
    상기 출력 인덱싱 가능 타입은 상기 하나 이상의 데이터 병렬 컴퓨트 노드 상에 상기 입력 인덱싱 가능 타입의 로컬 뷰 구조를 제공하는
    방법.
  14. 컴퓨터 시스템에 의해 실행될 때 방법을 수행하는 컴퓨터 실행 가능 명령어를 저장하는 컴퓨터 판독 가능 저장 매체로서, 상기 방법은
    순위 및 제1 요소 타입을 갖는 입력 인덱싱 가능 타입을 상기 순위 및 상기 입력 인덱싱 가능 타입의 타일인 제2 요소 타입을 갖는 출력 인덱싱 가능 타입으로 분해하기 위해 타일 통신 연산자를 적용하는 단계, 및
    상기 출력 인덱싱 가능 타입을 이용하여 상기 입력 인덱싱 가능 타입에 대해 데이터 병렬 알고리즘을 수행하는 단계를 포함하며,
    상기 타일 통신 연산자는 데이터 병렬 확장을 갖는 고급 범용 프로그래밍 언어로 작성된 데이터 병렬 소스 코드 내에 포함되고, 상기 출력 인덱싱 가능 타입은 상기 데이터 병렬 알고리즘을 수행하도록 구성된 하나 이상의 데이터 병렬 컴퓨트 노드의 실행 구조에 맵핑되며, 상기 하나 이상의 데이터 병렬 컴퓨트 노드는 적어도 하나의 그래픽 처리 장치를 포함하는
    컴퓨터 판독 가능 저장 매체.
  15. 제14항에 있어서,
    상기 제1 요소 타입은 제1 형상을 가지며, 상기 제2 요소 타입은 상기 타일인 제2 형상을 가지는
    컴퓨터 판독 가능 저장 매체.
KR1020137009251A 2010-10-12 2011-09-23 타일 통신 연산자 KR101740093B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/902,404 US9489183B2 (en) 2010-10-12 2010-10-12 Tile communication operator
US12/902,404 2010-10-12
PCT/US2011/053017 WO2012050796A2 (en) 2010-10-12 2011-09-23 Tile communication operator

Publications (2)

Publication Number Publication Date
KR20140001864A true KR20140001864A (ko) 2014-01-07
KR101740093B1 KR101740093B1 (ko) 2017-05-25

Family

ID=45926119

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137009251A KR101740093B1 (ko) 2010-10-12 2011-09-23 타일 통신 연산자

Country Status (7)

Country Link
US (1) US9489183B2 (ko)
EP (1) EP2628075A4 (ko)
JP (1) JP6092780B2 (ko)
KR (1) KR101740093B1 (ko)
CN (1) CN102495723B (ko)
CA (1) CA2813879A1 (ko)
WO (1) WO2012050796A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170085455A (ko) * 2016-01-14 2017-07-24 서울대학교산학협력단 병렬 연산을 수행하는 장치 및 방법

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9395957B2 (en) 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
CN102707932B (zh) * 2012-05-16 2013-07-24 清华大学 一种用于地球系统模式的并行耦合方法
US9367293B2 (en) * 2012-06-18 2016-06-14 International Business Machines Corporation System and method for compiler assisted parallelization of a stream processing operator
WO2013190577A2 (en) * 2012-06-21 2013-12-27 Bhatia Neha Polytope and convex body database
CN104881326B (zh) * 2015-05-26 2018-04-13 上海帝联信息科技股份有限公司 日志文件处理方法及装置
DE102017209697A1 (de) * 2016-06-13 2017-12-14 Denso Corporation Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung
US10929143B2 (en) * 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
WO2020185543A1 (en) 2019-03-08 2020-09-17 Mevion Medical Systems, Inc. Collimator and energy degrader for a particle therapy system
CN113553039A (zh) * 2020-04-23 2021-10-26 杭州海康威视数字技术股份有限公司 算子的可执行代码的生成方法及装置
CN112463218B (zh) * 2020-11-27 2022-12-09 成都海光微电子技术有限公司 指令发射控制方法及电路、数据处理方法及电路

Family Cites Families (97)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3601341B2 (ja) 1999-02-09 2004-12-15 株式会社日立製作所 並列プログラム生成方法
US4156910A (en) 1974-02-28 1979-05-29 Burroughs Corporation Nested data structures in a data driven digital data processor
US5179702A (en) 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
CA2078315A1 (en) 1991-09-20 1993-03-21 Christopher L. Reeve Parallel processing apparatus and method for utilizing tiling
US5551039A (en) 1992-02-03 1996-08-27 Thinking Machines Corporation Compiling a source code vector instruction by generating a subgrid loop for iteratively processing array elements by plural processing elements
US5710927A (en) 1995-06-14 1998-01-20 Kuck & Associates, Inc. Method of replacing lvalues by variables in programs containing nested aggregates in an optimizing compiler
US5812852A (en) 1996-11-14 1998-09-22 Kuck & Associates, Inc. Software implemented method for thread-privatizing user-specified global storage objects in parallel computer programs via program transformation
US5999729A (en) 1997-03-06 1999-12-07 Continuum Software, Inc. System and method for developing computer programs for execution on parallel processing systems
US6026234A (en) 1997-03-19 2000-02-15 International Business Machines Corporation Method and apparatus for profiling indirect procedure calls in a computer program
US6260036B1 (en) 1998-05-07 2001-07-10 Ibm Scalable parallel algorithm for self-organizing maps with applications to sparse data mining problems
US6088511A (en) 1998-05-13 2000-07-11 Microsoft Corporation Nested parallel 2D Delaunay triangulation method
US6106575A (en) 1998-05-13 2000-08-22 Microsoft Corporation Nested parallel language preprocessor for converting parallel language programs into sequential code
US6018628A (en) 1998-06-16 2000-01-25 Sun Microsystems, Inc. Method of implementing parameterized types to be compatible with existing unparameterized libraries
GB2339036A (en) 1998-07-03 2000-01-12 Ibm Set of objects for extracting data from a database, and visual builder
US7103640B1 (en) 1999-09-14 2006-09-05 Econnectix, Llc Network distributed tracking wire transfer protocol
US6433802B1 (en) 1998-12-29 2002-08-13 Ncr Corporation Parallel programming development environment
US6560774B1 (en) 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US6550059B1 (en) 1999-10-04 2003-04-15 Advanced Micro Devices, Inc. Method for generating optimized vector instructions from high level programming languages
US7233331B2 (en) 2000-03-16 2007-06-19 Square Enix Co., Ltd. Parallel object task engine and processing method
US20020019971A1 (en) 2000-03-28 2002-02-14 Zygmont David A. System and method for metaprogramming software development environment
US6901588B1 (en) 2000-04-17 2005-05-31 Codemesh, Inc. Sharing components between programming languages by use of polymorphic proxy
US6708331B1 (en) 2000-05-03 2004-03-16 Leon Schwartz Method for automatic parallelization of software
US6832378B1 (en) * 2000-06-20 2004-12-14 International Business Machines Corporation Parallel software processing system
US7418470B2 (en) 2000-06-26 2008-08-26 Massively Parallel Technologies, Inc. Parallel processing systems and method
US6847370B2 (en) 2001-02-20 2005-01-25 3D Labs, Inc., Ltd. Planar byte memory organization with linear access
US20030187853A1 (en) 2002-01-24 2003-10-02 Hensley Roy Austin Distributed data storage system and method
US6934940B2 (en) 2002-01-30 2005-08-23 International Business Machines Corporation Source code transformation-temporary object reduction
GB0215033D0 (en) 2002-06-28 2002-08-07 Critical Blue Ltd Instruction set translation method
US7257809B2 (en) 2002-12-31 2007-08-14 Intel Corporation Estimation of type-cast sets
US7096422B2 (en) 2003-02-28 2006-08-22 Microsoft Corporation Markup language visual mapping
US7210127B1 (en) 2003-04-03 2007-04-24 Sun Microsystems Methods and apparatus for executing instructions in parallel
US7254809B2 (en) 2003-07-30 2007-08-07 International Business Machines Corporation Compilation of unified parallel C-language programs
US7373640B1 (en) 2003-07-31 2008-05-13 Network Appliance, Inc. Technique for dynamically restricting thread concurrency without rewriting thread code
US20050071828A1 (en) 2003-09-25 2005-03-31 International Business Machines Corporation System and method for compiling source code for multi-processor environments
US7171544B2 (en) 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US20050210023A1 (en) 2004-03-18 2005-09-22 Renato Barrera Query optimizer using implied predicates
US7624383B2 (en) 2004-04-30 2009-11-24 Cornell University System for and method of improving discrete event simulation using virtual machines
US7590620B1 (en) 2004-06-18 2009-09-15 Google Inc. System and method for analyzing data records
US7584465B1 (en) 2004-09-20 2009-09-01 The Mathworks, Inc. Memory mapping for single and multi-processing implementations of code generated from a block diagram model
US7464103B2 (en) 2004-10-29 2008-12-09 Microsoft Corporation Multi-level nested open hashed data stores
US7733347B2 (en) 2004-11-05 2010-06-08 Microsoft Corporation Automated construction of shader programs
US7800620B2 (en) 2004-11-05 2010-09-21 Microsoft Corporation Optimizing automated shader program construction
JP4783005B2 (ja) 2004-11-25 2011-09-28 パナソニック株式会社 プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。
US7844691B2 (en) 2004-12-30 2010-11-30 Xstor Systems, Inc. Scalable distributed storage and delivery
US7260495B2 (en) * 2005-06-06 2007-08-21 International Business Machines Corporation System and method for test generation for system level verification using parallel algorithms
US7689980B2 (en) 2005-09-30 2010-03-30 Intel Corporation Splitting the computation space to optimize parallel code
EP1783604A3 (en) 2005-11-07 2007-10-03 Slawomir Adam Janczewski Object-oriented, parallel language, method of programming and multi-processor computer
US7889922B2 (en) 2005-11-14 2011-02-15 Siemens Medical Solutions Usa, Inc. Method and system for histogram calculation using a graphics processing unit
US7926046B2 (en) 2005-12-13 2011-04-12 Soorgoli Ashok Halambi Compiler method for extracting and accelerator template program
US8387033B2 (en) 2005-12-21 2013-02-26 Management Services Group, Inc. System and method for the distribution of a program among cooperating processing elements
JP4923240B2 (ja) 2006-01-17 2012-04-25 国立大学法人東京工業大学 プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム
US8261270B2 (en) 2006-06-20 2012-09-04 Google Inc. Systems and methods for generating reference results using a parallel-processing computer system
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
US7739466B2 (en) 2006-08-11 2010-06-15 Intel Corporation Method and apparatus for supporting immutable memory
US20080127146A1 (en) 2006-09-06 2008-05-29 Shih-Wei Liao System and method for generating object code for map-reduce idioms in multiprocessor systems
US8056047B2 (en) 2006-11-20 2011-11-08 International Business Machines Corporation System and method for managing resources using a compositional programming model
US8046745B2 (en) 2006-11-30 2011-10-25 International Business Machines Corporation Method to examine the execution and performance of parallel threads in parallel programming
US8010945B1 (en) 2006-12-08 2011-08-30 Nvidia Corporation Vector data types with swizzling and write masking for C++
US7756845B2 (en) 2006-12-28 2010-07-13 Yahoo! Inc. System and method for learning a weighted index to categorize objects
US8799871B2 (en) 2007-01-08 2014-08-05 The Mathworks, Inc. Computation of elementwise expression in parallel
US8079023B2 (en) 2007-03-22 2011-12-13 Microsoft Corporation Typed intermediate language support for existing compilers
US7983890B2 (en) 2007-06-18 2011-07-19 Massachusetts Institute Of Technology Method and apparatus performing automatic mapping for a multi-processor system
US8127283B2 (en) 2007-09-05 2012-02-28 Intel Corporation Enabling graphical notation for parallel programming
US8453128B2 (en) 2007-09-28 2013-05-28 Oracle America, Inc. Method and system for implementing a just-in-time compiler
US7970872B2 (en) 2007-10-01 2011-06-28 Accenture Global Services Limited Infrastructure for parallel programming of clusters of machines
JP4339907B2 (ja) 2007-10-24 2009-10-07 株式会社日立製作所 マルチプロセッサ向け最適コード生成方法及びコンパイル装置
US8261249B2 (en) 2008-01-08 2012-09-04 International Business Machines Corporation Distributed schemes for deploying an application in a large parallel system
US8108653B2 (en) 2008-01-09 2012-01-31 Analog Devices, Inc. Processor architectures for enhanced computational capability and low latency
US7953957B2 (en) 2008-02-11 2011-05-31 International Business Machines Corporation Mapping and distributing parallel algorithms to compute nodes in a parallel computer based on temperatures of the compute nodes in a hardware profile and a hardware independent application profile describing thermal characteristics of each parallel algorithm
US8245212B2 (en) 2008-02-22 2012-08-14 Microsoft Corporation Building call tree branches and utilizing break points
US8453134B2 (en) 2008-06-04 2013-05-28 Intel Corporation Improving data locality and parallelism by code replication
US8806426B2 (en) 2008-06-04 2014-08-12 Microsoft Corporation Configurable partitioning of parallel data for parallel processing
US8286198B2 (en) 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
JP4635082B2 (ja) 2008-09-30 2011-02-16 株式会社東芝 マルチプロセッサシステム及びグルーピング方法
EP2350915A4 (en) 2008-09-30 2013-06-05 Exxonmobil Upstream Res Co METHOD FOR SOLVING STORAGE SIMULATION MATRIX COMPENSATION USING PARALLEL INCOMPLETE MULTILEVEL FACTORIZATION
US7979844B2 (en) 2008-10-14 2011-07-12 Edss, Inc. TICC-paradigm to build formally verified parallel software for multi-core chips
US8302076B2 (en) 2008-11-12 2012-10-30 Landmark Graphics Corporation Systems and methods for improved parallel ILU factorization in distributed sparse linear systems
US8195496B2 (en) 2008-11-26 2012-06-05 Sap Aktiengesellschaft Combining multiple objective functions in algorithmic problem solving
US8799629B2 (en) 2008-12-04 2014-08-05 Microsoft Corporation Parallel execution of a loop
US8060857B2 (en) 2009-01-31 2011-11-15 Ted J. Biggerstaff Automated partitioning of a computation for parallel or other high capability architecture
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
JP2010204979A (ja) 2009-03-04 2010-09-16 Renesas Electronics Corp コンパイル方法及びコンパイラ
US8595702B2 (en) 2009-03-13 2013-11-26 Microsoft Corporation Simultaneously displaying multiple call stacks in an interactive debugger
US8209664B2 (en) 2009-03-18 2012-06-26 Microsoft Corporation High level programming extensions for distributed data parallel processing
US20100241893A1 (en) 2009-03-18 2010-09-23 Eric Friedman Interpretation and execution of a customizable database request using an extensible computer process and an available computing environment
US8904366B2 (en) 2009-05-15 2014-12-02 International Business Machines Corporation Use of vectorization instruction sets
US8621446B2 (en) 2010-04-29 2013-12-31 International Business Machines Corporation Compiling software for a hierarchical distributed processing system
US8555265B2 (en) * 2010-05-04 2013-10-08 Google Inc. Parallel processing of data
US8589867B2 (en) 2010-06-18 2013-11-19 Microsoft Corporation Compiler-generated invocation stubs for data parallel programming model
US20110314256A1 (en) 2010-06-18 2011-12-22 Microsoft Corporation Data Parallel Programming Model
US8839214B2 (en) 2010-06-30 2014-09-16 Microsoft Corporation Indexable type transformations
WO2012053017A1 (en) 2010-10-19 2012-04-26 Istituto Di Ricerca Protos Enzyme-catalyzed process for the preparation of sugar 6 -e sters
US8402450B2 (en) 2010-11-17 2013-03-19 Microsoft Corporation Map transformation in data parallel code
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9395957B2 (en) 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US8713039B2 (en) * 2010-12-23 2014-04-29 Microsoft Corporation Co-map communication operator

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170085455A (ko) * 2016-01-14 2017-07-24 서울대학교산학협력단 병렬 연산을 수행하는 장치 및 방법

Also Published As

Publication number Publication date
US9489183B2 (en) 2016-11-08
KR101740093B1 (ko) 2017-05-25
US20120089961A1 (en) 2012-04-12
CN102495723B (zh) 2015-11-25
JP6092780B2 (ja) 2017-03-08
CN102495723A (zh) 2012-06-13
WO2012050796A3 (en) 2012-05-31
JP2013539888A (ja) 2013-10-28
WO2012050796A2 (en) 2012-04-19
EP2628075A2 (en) 2013-08-21
EP2628075A4 (en) 2014-08-13
CA2813879A1 (en) 2012-04-19

Similar Documents

Publication Publication Date Title
KR101740093B1 (ko) 타일 통신 연산자
JP6027021B2 (ja) アジャイル通信演算子
US10282179B2 (en) Nested communication operator
CN102541612B (zh) 数据平行代码中的映射变换
KR101962484B1 (ko) 확장 가능한 데이터 병렬 시맨틱스
US8839214B2 (en) Indexable type transformations
Coarfa et al. Co-array Fortran performance and potential: An NPB experimental study
US10620916B2 (en) Read-only communication operator
US8713039B2 (en) Co-map communication operator

Legal Events

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