KR20140014090A - 기민 통신 오퍼레이터 - Google Patents

기민 통신 오퍼레이터 Download PDF

Info

Publication number
KR20140014090A
KR20140014090A KR1020137016249A KR20137016249A KR20140014090A KR 20140014090 A KR20140014090 A KR 20140014090A KR 1020137016249 A KR1020137016249 A KR 1020137016249A KR 20137016249 A KR20137016249 A KR 20137016249A KR 20140014090 A KR20140014090 A KR 20140014090A
Authority
KR
South Korea
Prior art keywords
data parallel
agility
compute nodes
indexable type
compute
Prior art date
Application number
KR1020137016249A
Other languages
English (en)
Other versions
KR101900796B1 (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 KR20140014090A publication Critical patent/KR20140014090A/ko
Application granted granted Critical
Publication of KR101900796B1 publication Critical patent/KR101900796B1/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 or look ahead
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • 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/456Parallelism detection
    • 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
    • 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/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Multi Processors (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Machine Translation (AREA)
  • Stored Programmes (AREA)

Abstract

고레벨 프로그래밍 언어는 컴퓨트 노드들에 걸쳐 계산 공간을 분배하기 위한 자원 맵에 기초하여 세그먼트화된 계산 공간을 생성하는 기민 통신 오퍼레이터를 제공한다. 기민 통신 오퍼레이터는 통신 공간을 세그먼트들로 분해하고, 세그먼트들이 컴퓨트 노드들에 할당되도록 하며, 이용자가 컴퓨트 노드들 사이에서의 세그먼트들의 이동을 중앙 집중식으로 관리 및 자동화하는 것을 가능하게 한다. 세그먼트 이동은 세그먼트들의 전체 전역-뷰 표현 또는 국지적-전역 뷰 표현을 이용하여 관리될 수 있다.

Description

기민 통신 오퍼레이터{AGILE COMMUNICATION OPERATOR}
컴퓨터 시스템들은 흔히 하나 이상의 범용 프로세서들(예를 들어, 중앙 처리 장치(CPU)들) 및 하나 이상의 특화 데이터 병렬 컴퓨트 노드(compute node)들(예를 들어, 그래픽 프로세싱 장치(GPU)들 또는 CPU들 내의 단일 명령, 다중 데이터(single instruction, multiple data; SIMD) 수행 장치들)을 포함한다. 범용 프로세서들은 일반적으로 컴퓨터 시스템들 상에서 범용 프로세싱을 수행하고, 데이터 병렬 컴퓨트 노드들은 일반적으로 컴퓨터 시스템들 상에서 데이터 병렬 프로세싱(예를 들어, 그래픽 프로세싱)을 수행한다. 범용 프로세서들은 흔히 데이터 병렬 알고리즘들을 구현하는 능력을 가지고 있지만, 데이터 병렬 컴퓨트 노드들에서 발견되는 최적화된 하드웨어 자원들 없이 이를 행한다. 결과적으로, 범용 프로세서들은 데이터 병렬 알고리즘을 수행하는 데 있어서 병렬 컴퓨트 노드들보다 효율이 훨씬 더 적을 수 있다.
데이터 병렬 컴퓨트 노드들은 종래에는 컴퓨터 시스템들 상에서 프로그램들을 수행하는 데 있어서 범용 프로세서들을 지원하는 역할을 해왔다. 데이터 병렬 알고리즘들에 대해 최적화된 하드웨어의 역할이 데이터 병렬 컴퓨트 노드 프로세싱 케이퍼빌리티(capability)들의 강화로 인해 증가함에 따라, 프로그래머들이 데이터 병렬 컴퓨트 노드들을 프로그램하고 데이터 병렬 컴퓨트 노드들의 프로그래밍을 더 쉽게 하는 능력을 향상시키는 것이 바람직할 것이다.
데이터 병렬 알고리즘들은 흔히 다수의 컴퓨팅 플랫폼들에 걸쳐 분포될 수 있는 거대한 데이터의 세트들 상에서 동작한다. 거대한 데이터의 세트들로 인해 데이터를 기술하는 데이터 구조들을 표현하고 추적하는 데 있어서뿐만 아니라 데이터를 다수의 플랫폼들에 걸쳐 이동시키는 데 있어서 어려움들이 있다. 결과적으로, 다수의 컴퓨팅 플랫폼들에 걸친 거대한 데이터의 세트들을 관리하는 프로세스는 흔히 복잡하고 구현하기 어렵다.
이 요약은 상세한 설명에서 더 후술되어 있는 간소화된 형태의 개념들의 선택을 도입하도록 제공된다. 이 요약은 청구되는 특허대상의 핵심 특징들 또는 필수적인 특징들을 식별하도록 의도되거나, 청구되는 특허 대상의 범위를 제한하는 데 이용되도록 의도되지 않는다.
고레벨 프로그래밍 언어는 컴퓨트 노드들에 걸쳐 계산 공간을 분배하기 위한 자원 맵에 기초하여 세그먼트화된 계산 공간을 생성하는 기민 통신 오퍼레이터를 제공한다. 기민 통신 오퍼레이터는 계산 공간을 세그먼트들로 분해하고, 세그먼트들이 컴퓨트 노드들에 할당되도록 하며, 이용자가 컴퓨트 노드들 사이에서의 세그먼트들의 이동을 중앙집중식으로 관리 및 자동화하는 것을 가능하게 한다. 세그먼트 이동은 세그먼트들의 전체 전역-뷰 표현 또는 국부적 전역 뷰 표현을 이용하여 관리될 수 있다.
첨부 도면들은 실시예들의 심도 있는 이해를 제공하기 위해 포함되고 본 명세서의 일부에 통합되고 일부를 구성한다. 도면들은 실시예들을 도시하고 설명과 함께 실시예들의 원리들을 설명하는 역할을 한다. 다른 실시예들 및 실시예들의 의도된 장점들의 대다수는 다음의 상세한 설명을 참조하여 더 양호하게 이해될 때 순조롭게 인식될 수 있다. 도면들의 요소들은 반드시 서로에 대해 비례하는 것은 아니다. 동일한 참조 번호들은 대응하는 유사한 파트들을 지정한다.
도 1은 기민 통신 오퍼레이터를 지니는 코드의 실시예를 도시하는 컴퓨터 코드도;
도 2는 기민 통신 오퍼레이터를 입력 인덱서블 유형(indexable type)에 적용하는 실시예를 도시하는 블록도;
도 3a 내지 도 3c는 기민 인덱서블 유형을 생성하고 이용하는 예들을 도시하는 블록도들;
도 4는 기민 통신 오퍼레이터를 포함하는 데이터 병렬 코드를 컴파일링하고 수행하도록 구성되는 컴퓨터 시스템의 실시예를 도시하는 블록도.
다음의 상세한 설명에서, 본 발명의 일부를 형성하고 본 발명이 실행될 수 있는 설명 지정 실시예들에 의해 도시되는 첨부 도면들이 참조된다. 이 점에 있어서, “상부”, “하부”, “전방”, “후방”, “앞서는”, “뒤처지는” 등과 같은 방향 용어는 기술되는 도면(들)의 방위에 관하여 이용된다. 실시예들의 구성요소들은 다양한 방위들로 포지셔닝할 수 있으므로, 방향 용어는 설명을 위해 이용되며 결코 제한하지 않는다. 본 발명의 범위를 벗어나지 않고 다른 실시예들이 이용되고 구조 또는 논리 변화들이 행해질 수 있음이 이해될 것이다. 그러므로, 다음의 상세한 설명은 제한하는 의미로 취해지지 않아야 하며, 본 발명의 범위는 첨부된 청구항들에 의해서만 규정된다. 본원에서 기술되는 다양한 예시적인 실시예들의 특징들은 달리 구체적으로 지적되지 않는 한, 서로 결합될 수 있음이 이해되어야 한다.
도 1은 기민 통신 오퍼레이터(12)를 지니는 코드(10)의 실시예를 도시하는 컴퓨터 코드도이다. 컴파일링되고 수행될 때, 기민 통신 오퍼레이터(12)는 컴퓨트 노드들(예를 들어, 도 4에 도시되고 추가적으로 더 상세하게 후술되는 컴퓨트 노드들(121)에 걸쳐 계산 공간(computational space)을 분배하기 위해 자원 맵(resource map)에 기초하여 분절화된 계산 공간을 생성한다. 기민 통신 오퍼레이터는 계산 공간(도 1의 실시예에서 입력 인덱서블 유형(14)에 의해 표현된다)을 기민 인덱서블 유형(18)(또한 도 3b의 예에서 도시된다)의 세그먼트들(20)로 분해하고, 세그먼트들(20)이 컴퓨트 노드들로 할당되도록 하고 이용자가 중앙집중식으로 컴퓨트 노드들 사이의 세그먼트들(20)의 이동을 관리하고 자동화하도록 한다. 세그먼트 이동은 추가적으로 상세하게 후술되는 바와 같이 세그먼트들의 전체 전역-뷰(global view) 표현 또는 국부적 전역 뷰 표현을 이용하여 관리될 수 있다.
코드(10)는 하나 이상의 DP 최적 컴퓨트 노드들(예를 들어, 도 4에 도시된 DP 최적 컴퓨트 노드들(121))에 의해 수행되는 하나 이상의 실행 파일(executable)들(예를 들어 도 4에 도시된 DP 실행파일(138))로 컴파일링될 수 있는 고레벨 범용 또는 데이터 병렬 프로그래밍 언어로부터의 명령들의 스퀀스를 포함한다.
하나의 실시예에서, 코드(10)는 하나 이상의 모듈들의 세트에 저장되는 프로그램을 형성하는 데이터 병렬 확장자들을 가지는 고레벨 범용 프로그래밍 언어(이후에는 GP 언어)로부터의 명령들의 시퀀스를 포함한다. GP 언어는 프로그램이 상이한 파트들(즉, 모듈들)에 기록되는 것이 가능하게 함으로써, 각각의 모듈은 컴퓨터 시스템에 의해 액세스될 수 있는 별개의 파일들 또는 위치들에 저장될 수 있게 된다. GP 언어는 하나 이상의 범용 프로세서들 및 하나 이상의 특수 목적, DP 최적 컴퓨트 노드들을 포함하는 컴퓨팅 환경을 프로그래밍하기 위하여 단일 언어를 제공한다. DP 최적 컴퓨트 노드들은 전형적으로 범용 프로세서들의 그래픽 처리 장치(GPU)들 또는 SIMD 장치들이지만 또한 범용 프로세서들, 필드 프로그래머블 게이트 어레이(FPGA)들 또는 어떤 컴퓨터 환경들에 있는 다른 적절한 디바이스들의 스칼라 또는 벡터 실행 장치들을 포함할 수 있다. GP 언어를 이용함으로써 프로그래머는 범용 프로세서들 및 DP 컴퓨트 노드들에 의한 실행을 위해 코드(10)에 범용 프로세서 및 DP 소스 코드 모두를 포함하고 범용 프로세서 및 DP 코드의 실행을 조정할 수 있다. 코드(10)는 애플리케이션, 라이브러리 함수 또는 운영 시스템 서비스와 같이, 본 실시예에서 임의의 적합한 코드 유형을 나타낼 수 있다.
GP 언어는 데이터 병렬 피처(feature)들을 포함하기 위해 폭넓게 적응되는 C 또는 C++와 같은 고레벨 및 범용 프로그래밍 언어를 확장함으로써 형성될 수 있다. DP 피처들이 나타날 수 있는 다른 범용 언어들의 예들은 Java™, PHP, Visual Basic, Perl, Python™, C#, Ruby, Delphi, Fortran, VB, F#, OCaml, Haskell, Erlang, NESL, Chapel, JavaScript™을 포함한다. GP 언어 구현은 프로그램의 상이한 부분들이 상이한 모듈들에 포함되도록 하는 풍부한 링크 케이퍼빌리티(capability)들을 포함할 수 있다. 데이터 병렬 피처들은 데이터 병렬 연산들이 범용 프로세서들(즉, 비-DP 최적 컴퓨트 노드들)에 있어서보다 더 빠르고 더 효율적으로 수행되도록 하는 DP 최적 컴퓨트 노드들의 특수 목적 아키텍처의 장점을 취하는 프로그래밍 툴들을 제공한다. GP 언어는 또한 프로그래머가 범용 프로세서들 및 DP 최적 컴퓨트 노드들 모두에 대해 프로그램하는 것이 가능한 다른 적절한 고레벨 범용 프로그래밍 언어일 수 있다.
다른 실시예에서, 코드(10)는 프로그램을 형성하는 고레벨 데이터 병렬 프로그래밍 언어(이후에는 DP 언어)로부터의 명령들의 시퀀스를 포함한다. DP 언어는 하나 이상의 DP 최적 컴퓨트 노드들을 구비하는 컴퓨팅 환경에서 DP 최적 컴퓨트 노드를 프로그래밍하는 특수 언어를 제공한다. 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, 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)는 또한 콜 사이트(call site)(예를 들어, forall, reduce, scan 또는 sort)에서의 벡터 함수(예를 들어, forall…, vector func,…)의 하나 이상의 호출(invocation)(28)을 포함할 수 있다. 콜 사이트에 대응하는 벡터 함수는 커널 함수로서 칭해진다. 커널 함수는 코드(10) 내의 다른 벡터 함수들(즉, 다른 DP 소스 코드)을 호출할 수 있고, 벡터 함수 콜 그래프(call graph)의 루트로서 간주될 수 있다. 커널 함수는 또한 코드(10)에 의해 규정되는 유형들(예를 들어, class들 또는 struct들)을 이용할 수 있다. 유형들은 DP 소스 코드로서 주석 첨가될 수 있거나 되지 않을 수 있다. 다른 실시예들에서, 코드(10)의 부분들을 DP 소스 코드 및/또는 범용 프로세서 코드로서 지정되도록 다른 적절한 프로그래밍 언어 구성들이 이용될 수 있다. 게다가, 주석들(26)은 코드(10)가 DP 언어로 기록되는 실시예들에서 생략될 수 있다.
도 2는 기민 인덱서블 유형(18)을 제작하기 위해 입력 인덱서블 유형(14)에 기민 통신 오퍼레이터(12)를 적용하는 실시예를 도시하는 블록도이다. 본원에서 이용되는 바와 같이, 인덱서블 유형은 음이 아닌 정수인 랭크 및 element_type으로 표시되는 유형과 함께 하나 이상의 서브스크립 오퍼레이터들을 구현하는 임의의 데이터 유형이다. Index<N>이 정수들의 N-튜플(tuple)들을 나타내는 유형(즉, 정수 데이터 유형 중 임의의 유형)인 경우, index<N>의 인스턴스(instance)는 N 정수들의 세트이고{i0, i1,…,im}, 여기서 m은 N-1과 같다(즉, N-튜플). 랭크 N의 인덱스 오퍼레이터는 index<N>의 N-튜플 인스턴스를 취하고 이 인스턴스를 요소 유형이라 칭해지는 유형의 다른 인스턴스와 연관시키며 여기서 요소 유형은 인덱서블 유형 내의 각각의 요소를 규정한다. 하나의 실시예에서, 인덱서블 유형은 다음의 오퍼레이터들 중 하나 이상을 규정한다:
Figure pct00001
여기서 index_declarator는 다음 중 적어도 하나의 형태를 취한다:
Figure pct00002
다른 실시예들에서, 오퍼레이터들은 함수들, 기능어(functor)들 또는 더 일반적인 표현일 수 있다. 인덱서블 유형의 형상은 상기 서브스크립 오퍼레이터들 중 하나가 규정되는 index<rank>의 세트이다. 인덱서블 유형은 전형적으로 폴리토프(polytope)인 유형을 가진다. 즉, 인덱서블 유형은 좌표축들의 선형 함수들에 의해 형성되는 유한한 수효의 반-공간(half-space)들의 교차점으로서 대수적으로 표현될 수 있다.
도 1 및 도 2를 참조하면, 코드(10)의 고레벨 언어는 하나의 실시예에서 데이터 병렬 컴퓨팅 환경에서 입력 인덱서블 유형(14)에 대해 이용하기 위한 기민 통신 오퍼레이터(12)를 제공한다. 입력 인덱서블 유형(14)은 랭크(예를 들어, 도 1의 실시예에서 랭크(N)) 및 요소 유형(예를 들어, 도 1의 실시예에서 요소 유형(T))을 가지며 기민 통신 오퍼레이터(12)에 의해 현재 동작 중인 계산 공간을 규정한다. 기민 통신 오퍼레이터(12)는 입력 인덱서블 유형(14) 및 자원 맵(16)(예를 들어, 도 1의 예에서의 자원 맵)을 수신한다. 입력 인덱서블 유형(14) 및 자원 맵(16)으로부터, 기민 통신 오퍼레이터(12)는 자원 맵(16)(또한 도 3b의 예에서 도시됨)에 의해 명시되고, 또한 서브-그리드들로 칭해지는 세그먼트들(20)을 가지는 기민 인덱서블 유형(18)을 생성한다. 코드(10)에서 도시되는 바와 같이, 기민 통신 오퍼레이터(12)는 기민 인덱서블 유형(18)을 DP 콜 사이트(즉, 도 1의 예에서는 forall)로 넘겨주는 데 이용될 수 있다. 이렇게 함으로써, 기민 통신 오퍼레이터(12)는 콜 사이트에 의해 명시되는 벡터 함수가 모든 컴퓨트 노드들(예를 들어, 도 4에 도시되는 컴퓨트 노드들(121)) 상에 복제되도록 하고, 여기서 각각의 컴퓨트 노드는 컴퓨트 노드에 할당되는 세그먼트들(20)을 수신한다.
기민 통신 오퍼레이터(12)는 입력 인덱서블 유형(14)이 세그먼트들(20)로 분해되도록 하고 각각의 세그먼트(20)에는 자원 맵(16)에 의해 명시되는 컴퓨트 노드에 할당된다. 자원 맵(16)은 메모리, 즉 인덱서블 유형(14)이 적어도 하나의 컴퓨트 노드에 걸쳐 저장되는 장소에 대한 세부사항을 제공한다. 자원 맵(16)은 세그먼트들(20)을 명시함으로써 세그먼트들(20)의 모임이 중첩되지 않고 기민 인덱서블 유형(18)을 커버하도록 한다. 자원 맵(16)으로 인해 세그먼트들(20)이 동일하거나 상이한 블록 크기들 및/또는 규칙적인 또는 불규칙한 블록 결합들로 명시되는 것이 가능하다.
도 3a 내지 도 3c는 기민 인덱서블 유형(18(1))을 생성하고 이용하는 예들을 도시하는 블록도들이다. 도 3a 내지 도 3c의 예에서, 기민 통신 오퍼레이터(12)는 0에서 23의 번호가 매겨진 요소들을 가지는 6 × 6 매트릭스들(즉, 입력 인덱서블 유형(14(1))을 대응 자원 맵(16)(도 2에 도시됨)에 의해 명시되는 바와 같이 도 3b에 도시되는 기민 인덱서블 유형(18(1))의 9개의 세그먼트들(20))로 분할한다. 각각의 세그먼트(20)는 도 3b에 상이한 음영으로 표현된다. 예를 들어, 제 1 세그먼트(20(1))는 요소들(0, 1, 6 및 7)을 포함하고, 제 2 세그먼트(20(2))는 2, 3, 8 및 9를 포함하고, 기타 등등이다. 기민 통신 오퍼레이터(12)는 또한 세그먼트들(20(1) 내지 20(9))가 하나 이상의 컴퓨트 노드들(121(1) 내지 121(Q))의 세트로 할당되도록 하며, 여기서 Q는 자원 맵(16)에서의 프로토콜에 의해 명시되고 도 3c에서의 화살표(30)에 의해 표시되는 바와 같이, 1보다 더 크거나 1과 같은 정수이다.
자원 맵(18)은 블록 분해, 주기 분해, 블록-블록 분해 또는 블록-주기 분해와 같은 임의의 적절한 할당 프로토콜을 통합할 수 있다. 다음의 프로토콜 예들은 세 개의 컴퓨트 노드들(121(1) 내지 121(3))(즉, Q = 3) 또는 4개의 컴퓨트 노드들(121(1) 내지 121(4))(즉, Q = 4)이 있고 세그먼트들(20)이 제 1(즉, 최상의) 행으로부터 시작해서 좌측으로부터 우측으로 행들에 걸쳐 번호가 부여된다(20(1) 내지 20(9))고 가정한다.
행 블록 분해 및 Q = 3에 있어서, 입력 인덱서블 유형(14(1))의 36개의 요소들이 3으로 나누어짐으로써 각각의 컴퓨트 노드(121)에는 12개의 요소들이 할당된다. 그러므로, 자원 맵(18)은 요소들(0 내지 11)(즉, 세그먼트들(20(1) 내지 20(3))이 컴퓨트 노드(121(1))로 할당되도록 하고, 요소들(12 내지 23)(즉, 세그먼트들(20(4) 내지 20(6))이 컴퓨트 노드(121(2))로 할당되도록 하며, 요소들(24 내지 35)(즉, 요소들(20(7) 내지 20(9))이 컴퓨트 노드(121(3))로 할당되도록 한다.
행 블록 분해 및 Q = 4에 있어서, 입력 인덱서블 유형(14(1))의 36개의 요소들이 4로 나누어짐으로써 각각의 컴퓨트 노드(121)에는 9개의 요소들이 할당된다. 따라서, 자원 맵(18)은 요소들(0 내지 8)이 컴퓨트 노드(121(1))에 할당되도록 하고, 요소들(9 내지 17)이 컴퓨트 노드(121(2))에 할당되도록 하며, 요소들(18 내지 26)이 컴퓨트 노드(121(3))에 할당되도록 하며, 요소들(27 내지 36)이 컴퓨트 노드(121(4))에 할당되도록 한다.
열 블록 분해 및 Q = 3에 있어서, 자원 맵(18)은 제 1 및 제 2 행들의 세그먼트들(20)(즉, 세그먼트들 20(1), 20(4) 및 20(7))이 컴퓨트 노드(121(1))에 할당되도록 하고, 제 3 및 제 4 열들의 세그먼트들(20)(즉, 세그먼트들 20(2), 20(5) 및 20(8))이 컴퓨트 노드(121(2))에 할당되도록 하며, 제 5 및 제 6 열들의 세그먼트들(20)(즉, 세그먼트들 20(3), 20(6) 및 20(9))이 컴퓨트 노드(121(3))에 할당되도록 한다.
행 주기 분해 및 Q = 3에 있어서, 자원 맵(18)은 요소들(3*k)(k=0 내지 11)이 컴퓨트 노드(121(1))에 할당되도록 하고, 요소들(3*k+1)이 컴퓨트 노드(121(2))에 할당되도록 하고, 요소들(3*k+2)이 컴퓨트 노드(121(3))에 할당되도록 한다.
행 주기 분해 및 Q = 4에 있어서, 자원 맵(18)은 요소들(4*k)(k=0 내지 8)이 컴퓨트 노드(121(1))에 할당되도록 하고, 요소들(4*k+1)이 컴퓨트 노드(121(2))에 할당되도록 하고, 요소들(4*k+2)이 컴퓨트 노드(121(3))에 할당되도록 하며, 요소들(4*k+3)이 컴퓨트 노드(121(4))에 할당되도록 한다.
행 블록-주기 분해 및 Q = 3에 있어서, 분해는 도 3b에 도시되는 세그먼트들(20(1) 내지 20(9))에 대한 주기 분해이다. 따라서, 자원 맵(18)은 세그먼트들(20(1), 20(4) 및 20(7))이 컴퓨트 노드(121(1))에 할당되도록 하고, 세그먼트들(20(2), 20(5) 및 20(8))이 컴퓨트 노드(121(2))에 할당되도록 하며, 세그먼트들(20(3), 20(6) 및 20(9))이 컴퓨트 노드(121(3))에 할당되도록 한다.
행 블록-주기 분해 및 Q = 4에 있어서, 자원 맵(18)은 세그먼트들(20(1), 20(5) 및 20(9))이 컴퓨트 노드(121(1))에 할당되도록 하고, 세그먼트들(20(2) 및 20(6))이 컴퓨트 노드(121(2))에 할당되도록 하며, 세그먼트들(20(3) 및 20(7))이 컴퓨트 노드(121(3))에 할당되도록 하며, 세그먼트들(20(4) 및 20(8))이 컴퓨트 노드(121(4))에 할당되도록 한다.
행 블록-블록 분해 및 Q = 3에 있어서, 자원 맵(18)은 세그먼트들(20(1) 내지 20(3))이 컴퓨트 노드(121(1))에 할당되도록 하고, 세그먼트들(20(4) 내지 20(6))이 컴퓨트 노드(121(2))에 할당되도록 하며, 세그먼트들(20(7) 내지 20(9))이 컴퓨트 노드(121(3))에 할당되도록 한다.
자원 맵(16)에 대한 행 및 열 분해 결정은 메모리 레이아웃에 좌우될 수 있다. 예를 들어, 열-우선(column-major) 레이아웃은 적절한 프로토콜을 사용하는 행 분해를 내포한다.
하나의 실시예에서, 자원 맵(16)은 자원 세그먼트들의 집합을 포함하고 여기서 각각의 자원 세그먼트는 세그먼트(20)를 자원 뷰(즉, 컴퓨터 노드의 추상화(abstraction))(도시되지 않음)와 연관시킨다. 예를 들어, 인덱서블 유형(14)의 경우:
grid<rank> parent_grid
에 의해 규정되고,
여기서 grid<rank>는 두 데이터 부재들을 포함한다:
extent<rank> M extent;
index<rank> M offset;
예를 들어, 도 3b에서의 제 2 세그먼트(20(2))에서, 형상 및 그리드는 _M_extent= {2,2} 및 _M_offset= {0,1}이고, 제 6 세그먼트(20(6))는 _M_extent={2,2} 및 _M_offset={l,2}를 가진다. 따라서, parent_grid는 다음을 이용하여 분해될 수 있다:
grid<rank> algorithmic_blocks[M1];
grid<rank> memory_blocks[M2];
grid<rank> compute_nodes[M3];
여기서, Ml, M2, M3 > 0 및 Ml >= M2 >= M3이다. 전형적으로, M3는 M2를 나누고 M2는 M1을 나눈다. algorithmic_blocks, memory_blocks 및 compute_nodes의 셋 모두는 중첩되지 않고 parent_grid를 커버한다. algorithmic_blocks은 구현되고 있는 알고리즘에서 이용되는 분해를 표현하고, memory_blocks는 필요할 때, 노드들 사이에서 메모리가 이동하는 조밀도(granularity)를 표현한다. Compute nodes는 컴퓨터 노드들이 대응하는 데이터를 저장하도록 할당되는 조밀도를 표현한다.
모든 algorithmic_block 또는 memory_block이 컴퓨트 노드 상에 자신이 저장되는 장소를 검색할 수 있도록, 그리고 각각의 algorithmic_block이 메모리 블록 상에 자신이 저장되는 장소를 검색할 수 있도록 연관성들이 있다고 가정된다. resource_map이라 칭해지는 클래스는 자 그리드(child grid) 및 resource_view 사이의 연관성을 형성하는 resource_segment들로 생성될 수 있다:
Figure pct00003
기민 통신 오퍼레이터(12)를 이용하면, 기민 인덱서블 유형(18)의 데이터는 데이터가 현재 상주하고 있는 컴퓨트 노드를 이용자가 인지하고 있지 않아도 중단 없이 액세스될 수 있다. 형상 parent_grid을 가지는 예시 인덱서블 유형(14)(A)의 경우, A의 저장은 resource_segment의 인스턴스들에 의해 결정된다. index<rank> Index:
에서 A의 요소에 액세스하기 위해;
_Index를 포함하는 자-그리드가 먼저 발견되고 나서, 오프셋:
index<rank> Offset;
이 결정됨으로써
_Index = child-grid-offset + Offset이 된다.
자원 세그먼트 표기법에 있어서, 상기 관계는:
_Index = _Resource_segment._M child._M_offset +_Offset이다.
검색들의 속도를 증가시키기 위해, 다음의 체크는 _Index(_Index가 변함에 따라)가 여전히 _Resource_segment._M _child에 속하는지를 결정하도록 수행된다:
Figure pct00004
제공되는 _Index가 속하는 자 그리드 또는 _Resource_segment의 결정은 분해 패턴에 좌우된다. 최악의 경우에 모든 차원에서의 이진 탐색이 이용될 수 있으나 회피되지 않을 수 있다. 모든 타일들이 동일한 범위를 가지는 2048 × 2048 타일 분해에 있어서,
index<2> _Tile(2048,2048);
(_Index + Tile - l) / _Tile
과 동일한 _M_child._M_offset을 가지는 _Resource_segment를 찾는다.
상기 _Resource_segment(즉, 현재의 resource_segment)는:
if (_Local_offset <_Local_bounds ) { ... }
이 위반될 때까지 이용될 수 있고, 이 경우에 새 _Index를 by_Tile로 다시 나누고 반복한다. 이 메커니즘은 새 포함 resource_segment들이 단지 가끔씩 발견될 필요가 있는 장소를 가지는 알고리즘들에 최적일 수 있다.
후술되는 국부적-전역-뷰 표현에서, 이용자 인덱스 오퍼레이터들은 if-check(본원에서 바운드 첵킹(bounds checking)으로 칭해진다):
if (_Local_offset <_Local_bounds ) { ... }
를 생략할 수 있는데, 왜냐하면 이용되는 매 액세스마다 바운드들 내에 있음이 신뢰되기 때문이다. 제공된 자원 세그먼트가 소비되고 다른 자원 세그먼트가 이용될 경우, 이용자는 현재 자원 세그먼트를 리셋하는 기능을 호출하는 데 신뢰될 수 있다. 국지적-전역 뷰의 가장 단순한 형태에서, 모든 세 분해들:
grid<rank> algorithmic_blocks[M1];
grid<rank> memory_blocks[M2];
grid<rank> compute_nodes[M3];
은 동일한 크기의 블록들 또는 타일들로 규칙적이다. 인덱서블 유형을 타일들로 분할하는 타일 통신 오퍼레이터가 제 1 분해에 적용되어:
algorithmic_tiles
를 산출한다.
개별 타일은:
algorithmic_tiles(_tile_index)이다.
소유자 카피가:
algorithmic_tiles(_tile_index)
에서 개시되면,
포함하는 memory_blocks[k1] 및 compute_nodes[k2]가 결정된다. 소유자 compute_nodes[k3]가 다음에 결정되고, 그 후에 memory_blocks[k1]는 compute_nodes[k2]로부터 compute_nodes[k3]로 이동된다.
자동화 메모리 이동 조밀도는 흔히 세그먼트들(20)의 서브-그리드 분해보다 조밀도가 더 세밀하다. 예를 들어, 도 3a의 매트릭스가 6144 × 6144 요소 매트릭스를 나타낸다고, 즉, 각각 숫자가 매겨진 알고리즘 블록은 1024 × 1024 데이터 요소들을 나타낸다고 가정하자. 6144 x 6144 매트릭스가 도 3b에서와 같이, 2048 × 2048 컴퓨트 노드들로 분해되어 있다고 가정하자. 게다가, Q=4 및 컴퓨트 노드들(121(1), 121(2), 121(3) 및 121(4))이 블록-주기 분해에 따라 2048 × 2048 블록들(즉, 세그먼트들(20(1) 내지 20(9))에 할당된다고 가정하자. 세그먼트들(20(1), 20(5) 및 20(9))은 컴퓨트 노드(121(1))에 할당되고, 세그먼트들(20(2) 및 20(6))은 컴퓨트 노드(121(2))에 할당되고, 세그먼트들(20(3) 및 20(7))은 컴퓨트 노드(121(3))에 할당되며, 세그먼트들(20(4) 및 20(8))은 컴퓨트 노드(121(4))에 할당된다. 메모리는 이 예에서 1024 × 1024 블록들로 이동될 수 있다. 따라서, 계산이 1024 × 1024 블록으로부터 단일 데이터 요소를 이동시키려고 하면, 전체 1024 × 1024 블록이 이동된다.
기민 통신 오퍼레이터(12)로 인해 컴퓨트 노드들 사이에서의 세그먼트들(20)의 이동을 관리하기 위해 데이터 병렬(DP) 알고리즘들이 기민 인덱서블 유형(18)의 세그먼트들(20)의 전체 전역-뷰 표현 또는 국지적-전역-뷰 표현으로 코딩되는 것이 가능하다.
전체 전역-뷰 표현으로 인해 DP 알고리즘들은 장면들 뒤에서 자동 소유자-카피 메모리 이동이 발생하는 상태로 단일 컴퓨트 노드 상에서 작동될 것처럼 코딩되는 것이 가능하다. 매트릭스 추가에 대한 예로서, A, B 및 C가 각각 도 3a에 도시된 바와 같이 6144 × 6144 매트릭스들이며, 여기서 각각 숫자가 매겨진 블록은 1024 × 1024 데이터 요소들을 나타낸다고 가정하자. A 및 B는 유효 데이터를 지니지만, C는 할당되지 않지만 반드시 임의의 데이터를 지니는 것은 아니다. 게다가 A, B 및 C는 각각 컴퓨터 노드들(121(1)- 121(Q)) 상에 할당되고, 여기서 Q는 이 경우에 4와 같고 A, B 및 C의 각각의 세그먼트들(20(1) 내지 20(9))은 컴퓨트 노드들(121(1) 내지 121(Q)) 상에 각각 저장된다. 다음의 계산에 있어서:
C = A + B: 여기서 C(i,j) = A(i,j) + B(i,j): 0 <= i,j < 6
각각의 (i,j)는 1024 × 1024 요소들을 나타낸다.
소유자 카피는 데이터가 필요한 경우 응답, 즉 C가 계산되고 있는 컴퓨트 노드(121)로 이동되는 것을 의미한다. 이 예에서, A 및 B의 블록들은 C의 대응하는 블록들이 계산 지시들로서 저장되는 컴퓨트 노드들(121)로 이동된다. 그러나, 간단한 매트릭스 추가의 경우, 어떠한 이동도 필요하지 않는데 왜냐하면 A 및 B의 블록들은 동일한 컴퓨트 노드들(121) 상에 C의 대응하는 블록들로서 저장되기 때문이다. 상기 계산;
C(1,2) = A(1,2) + B(1,2)
은 A, B 및 C의 각각에 대해 도 3b에서의 블록(8)을 이용한다. 블록(8)은 A, B 및 C의 각각에 대해 컴퓨트 노드(121(2))에 저장되는 세그먼트(20(2))의 일부이므로, 데이터 이동이 발생하지 않는다. 유사하게, 다음의 계산들은 대응하는 세그먼트들(20) 및 컴퓨트 노드들(121) 상에 발생한다:
세그먼트(20(1)), 컴퓨트 노드(121(1))에 대해 C(0,0) = A(0,0) + B(0,0)
세그먼트(20(1)), 컴퓨트 노드(121(1))에 대해 C(1,0) = A(1,0) + B(1,0)
세그먼트(20(4)), 컴퓨트 노드(121(4))에 대해 C(2,0) = A(2,0) + B(2,0)
세그먼트(20(4)), 컴퓨트 노드(121(4))에 대해 C(3,0) = A(3,0) + B(3,0)
세그먼트(20(7)), 컴퓨트 노드(121(3))에 대해 C(4,0) = A(4,0) + B(4,0)
세그먼트(20(7)), 컴퓨트 노드(121(3))에 대해 C(5,0) = A(5,0) + B(5,0)
여기서 세그먼트는 분해의 한 요소를 칭한다:
grid<2> compute_nodes[9].
실제로:
grid<2> algorithmic_blocks[36];
grid<2> memory_blocks[18];
grid<2> compute_nodes[9];
여기서 알고리즘 블록들은 규모가 1024 × 1024이고, 메모리 블록들은 규모가 2048 x 1024이며, 컴퓨트 노드들은 규모가 2048 × 2048이다. 그러므로, 매트릭스 추가는 상당히 기초적인 예이다.
상기 가정들에 대한 다른 예에서, B의 전치는 다음과 같이 C를 생성하기 위해 A에 추가된다:
C = A + BT: 여기서 C(i,j) = A(i,j) + B(j,i)T: 0 <= i,j < 6
여기서 각각의 (i,j)는 1024 × 1024 요소들을 나타내고 B(j,i)T는 기저의 1024 × 1024 블록의 전치이다.
이 경우에, B(j, i)는 C(i,j) (및 A(i,j))이 세그먼트들(20(1), 20(5) 및 20(9))에서의 블록들을 제외한 모든 블록들에 대해 저장되는 컴퓨트 노드(121)로 넘어간다. 예를 들어, 세그먼트(20(1))의 블록들은 C의 세그먼트(20(1))의 블록들에 대한 계산이 다음과 같기 때문에 이동될 필요는 없다:
C(0,0) = A(0,0) + B(0,0)T
C(0,1) = A(0,1) + B(1,0)T // B(1,0)T는 B의 세그먼트(20(1)) 내에 있다.
C(1,0) = A(1,0) + B(0,1)T // B(0,1)T는 B의 세그먼트(20(1)) 내에 있다.
C(1,1) = A(1,1) + B(1,1)T
그러나, C의 세그먼트(20(4))의 블록들의 경우:
C(2,0) = A(2,0) + B(0,2)T
C(2,1) = A(2,1) + B(1,2)T
C(3,0) = A(3,0) + B(0,3)T
C(3,1) = A(3,1) + B(1,3)T
B 블록들은 컴퓨트 노드(121(2)) 상에 저장되는 세그먼트(20(2))의 블록들로부터 기인하고 C 블록들은 컴퓨트 노드(121(4))에 저장되는 세그먼트(20(4))의 블록들로부터 기인한다. 따라서, B의 블록(2)(즉, B(0,2)T)의 1024 × 1024 요소들은 컴퓨트 노드(121(4))로 이동되고, A(2,0)에 추가되고, C(2,0)에 할당되고, B의 블록(8)(즉, B(1,2)T)의 1024 × 1024 요소들은 컴퓨트 노드(121(4))로 이동되고, A(2,1)에 추가되고, C(2,1)에 할당되고, B의 블록(3)(즉, B(0,3)T)의 1024 × 1024 요소들은 컴퓨트 노드(121(4))로 이동되고, A(3,0)에 추가되고, C(3,0)에 할당되고, B의 블록(9)(즉, B(1,3)T)의 1024 × 1024 요소들은 컴퓨트 노드(121(4))로 이동되고, A(3,1)에 추가되고, C(3,1)에 할당된다.
전체 전역-뷰 표현에 있어서, 메모리 이동들은 자동으로 행해지는데 왜냐하면 각각의 블록은 컴퓨트 노드(121)가 블록을 저장하는 정보를 지니기 때문이다. 계산들은 도 4에 도시되고 추가하여 상세하게 후술되는 호스트(101)와 같은, 컴퓨트 노드들(121) 또는 호스트 중 어느 것으로부터도 지시를 받을 수 있다.
상기 예의 다른 변형들에서, 다수의 세그먼트들(20)은 동일한 컴퓨트 노드(121)에 할당될 수 있으며, 여기서 컴퓨트 노드들(121)의 수는 세그먼트들(20)의 수보다 더 적다. 게다가, 컴퓨트 노드들(121)의 프로세싱 케이퍼빌리티들은 가중될 수 있어서, 더 빠른 컴퓨트 노드들(121)에는 보다 느린 컴퓨트 노드들(121)보다 더 많은 세그먼트들(20)이 할당될 수 있다. 할당들은 상술한 하나 이상의 프로토콜들에 따라 수행될 수 있다.
워크-스틸링(work-stealing)을 이용한 자동 부하 균형은 또한 상기의 변형들에서 구현될 수 있다. 컴퓨트 노드(121)가 자신의 계산들을 완료하면, 컴퓨트 노드(121)는 다른 노드들(121)에 할당되는 계산들을 스틸(steal)하는 시도를 행한다. 계산들을 지시하는 컴퓨트 노드(121), 또는 가능하다면 호스트는 워크-아이템들의 워크-스틸링 큐(queue)들을 저장하고 여기서 상기 큐들은 소유자 행렬(예를 들어 C) 상의 메모리-이동-조밀도(예를 들어, 1024 × 1024)의 계산을 나타내는 임무들을 담고 있다.
4개의 동일 가중 컴퓨트 노드들(121(1) 내지 121(4)) 및 블록-주기 분해 프로토콜을 가진 B 전치 예를 가지는 상기 매트릭스 추가물로부터의 A, B, 및 C에 의해, 다음의 4개의 워크-스틸링 큐들은 다음과 같이 저장될 수 있다.
그러므로 상기 도면 및 C = A + BT 및 메모리-이동-조밀도=1204 × 1204 및 동일하게 가중된(w0=wl=w2=w3=1) 4 머신들 및 블록-주기 분해에 의해:
queueO는 12개의 임무들로 구성된다 - 각각 세그먼트들(20(1), 20(5), 및 20(9))의 4개의 1024 × 1024 블록들;
queue1은 8개의 임무들로 구성된다 - 각각 세그먼트들(20(2), 및 20(6))의 4개의 1024 × 1024 블록들;
queue2는 8개의 임무들로 구성된다 - 각각 세그먼트들(20(3), 및 20(7))의 4개의 1024 × 1024 블록들;
queue3은 8개의 임무들로 구성된다 - 각각 세그먼트들(20(4), 및 20(8))의 4개의 1024 × 1024 블록들.
예를 들어, queue2는 임무들을 포함한다:
C(0,4) = A(0,4) + B(4,0)T
C(0,5) = A(0,5) + B(5,0)T
C(1,4) = A(1,4) + B(4,1)T
C(1,5) = A(1,5) + B(5,1)T
C(4,0) = A(4,0) + B(0,4)T
C(4,1) = A(4,1) + B(1,4)T
C(5,0) = A(5,0) + B(0,5)T
C(5,1) = A(5,1) + B(1,5)T
각각의 컴퓨트 노드(121)는 워크-스틸링 큐으로부터의 모든 임무들이 완료될 때까지 자신의 대응하는 워크-스틸링 큐의 상부로부터 임무를 취한다. 컴퓨트 노드(121)의 워크-스틸링 큐가 비워지면, 컴퓨트 노드(121)는 다른 컴퓨터 노드(121)에 대응하는 워크-스틸링 큐의 하부로부터 임무를 스틸링한다. 국지적-전역-뷰는 전형적으로 조밀도의 the algorithmic_blocks 레벨에서 타일 통신 오퍼레이터를 통해 가능하다. 정규 타일 분해를 취하면, 타일 통신 오퍼레이터는:
algorithmic_tiles
을 산출하는데 우선적으로 적용된다.
개별 타일은:
algorithmic_tiles(_tile_index)이다.
소유자 카피가:
algorithmic_tiles(_tile_index)에서 개시되면
포함하는 memory_blocks[k1] 및 compute_nodes[k2]가 결정된다. 소유자 compute_nodes[k3]가 다음에 결정되고, 그 후에 memory_blocks[k1]은 compute_nodes[k2]로부터 compute_nodes[k3]로 이동된다. 이것은 모두 algorithmic_tiles(_tile_index)에 액세스하는 레벨에서 행해진다. 알고리즘을 구현할 때, 요소(또는 회귀적으로, 더 세밀한 블록)는:
algorithmic_tiles(_tile_index)(_local_index)으로서 액세스된다.
전체 전역-뷰 표현과는 대조적으로, 국지적-전역-뷰 표현은 메모리 이동이 이용자에 의해 명시적으로 지정되도록 한다. 상기 전체 전역-뷰 표현 예들에서, 메모리 이동 조밀도는 1024 × 1024 블록들이었으므로, 전체 1024 × 1024 블록은 컴퓨트 노드(121)가 상기 블록 내의 단일 요소에 액세스하는 경우 컴퓨트 노드(121)로 이동되었다.
일부 계산들에서, 계산의 조밀도는 메모리 이동 조밀도보다 더 세밀하고 국지적-전역-뷰 표현은 모든 메모리 블록이 이동되어야 하는 장소를 이용자가 명시적으로 지시하는 장점을 제공한다. 예를 들어, 전체 전역-뷰 표현 예들에서 메모리 이동 조밀도가 2048 × 2048, 즉 2 블록들 중 어느 하나로부터 요소가 이동될 때마다 2개의 블록들이 이동된다고 가정하자. 그러므로 C = A + BT이 경우, C의 세그먼트(20(4))의 블록들에 대한 계산은:
C(2,0) = A(2,0) + B(0,2)T
C(2,1) = A(2,1) + B(1,2)T
C(3,0) = A(3,0) + B(0,3)T
C(3,1) = A(3,1) + B(1,3)T
이다.
각각의 경우에, B 블록들은 컴퓨트 노드(121(2)) 상에 저장되고 C 및 A 블록들(C는 소유자이다)은 컴퓨트 노드(121(4)) 상에 저장된다. 그러므로, 상기 진술들 중 처음 2개는 컴퓨트 노드(121(4))로 이동될 B의 블록(2)(즉, B(0,2)T)의 임의의 요소를 명시적으로 지시함으로써 수행된다. 2048 × 1024 메모리 조밀도로 인해, B의 블록들(2 및 8)(즉, B(0,2)T 및 B(1,2)T)은 처음 2개의 진술들의 추가들이 컴퓨트 노드(121(4))에 의해 실행되는 것이 가능하도록 컴퓨트 노드(121(4))로 이동된다. 마찬가지로, 상기 진술들 중 마지막 2개는 컴퓨트 노드(121(4))로 이동될 B의 블록(3)(즉, B(0.3)T)의 임의의 요소를 명시적으로 지시함으로써 수행된다. 2048 × 1024 메모리 조밀도로 인해, B의 블록들(3 및 9)(즉, B(0.3)T 및 B(1.3)T)은 마지막 2개의 진술들의 추가들이 컴퓨트 노드(121(4))에 의해 수행되는 것이 가능하도록 컴퓨트 노드(121(4))로 이동된다.
이 예들이 나타내는 바와 같이, 제공된 메모리 이동 블록 상에서 하나 이상의 알고리즘들에 의해 실행되는 많은 임무들이 존재할 수 있도록, 계산의 조밀도는 컴퓨트 노드 조밀도보다 더 미세할 수 있는 메모리 이동 조밀도보다 더 미세할 수 있다. 블록의 요소를 이동시키는 단일 지시로 인해 블록 상에서 동작하는 임무들이 더 효율적으로 실행되는 것이 가능하다. 이용자 및 구현 이 둘 모두는 상기 지시 알고리즘들이 다른 메모리 이동 블록 상에서 동작하기 시작할 때까지 그리고 상기에서 확인된 바와 같이, 알고리즘 블록 분해에 대응하는 타일 통신 오퍼레이터가 필요할 때 실제로 메모리 이동을 지시할 때까지 메모리가 이동될 필요가 있는지를 확인하기 위한 체크를 생략할 수 있다. 만일 1024 × 1024 타일(예를 들어 블록(3))이 이동되어야 한다면, 2048 × 1024를 포함하는 메모리 이동 블록(예를 들어 메모리 이동 블록(3))은 2048 × 2048을 포함하는 컴퓨트 노드 블록(예를 들어 세그먼트(20(2))으로부터 소유자-카피 결정 2048 × 2048 블록(예를 들어, 세그먼트(20(4))으로 이동된다. 이제 블록(9)이 이동되어야 하는 경우, 대응하는 타일에 액세스하는 것은 자신이 포함하는 메모리-이동 블록을 검색하고 이것이 이미 세그먼트(20(4))로 이동되었으므로 더 이상 이동이 필요하지 않다고 결정할 것이다. 상술한 바와 같은 바운드 체킹은 정확한 메모리 이동이 타일 내에서의 실제 데이터 요소 액세스 이전에 타일 레벨에서 발생했기 때문에 생략될 수 있다. 즉:
algorithmic_tiles(_tile_index).
임의의 필요한 메모리 이동이 생성되면:
algorithmic_tiles(_tile_index)(_local_index)
은 각각의 국지적 인덱스를 체크하는 바운드들 없이 액세스될 수 있다. 예를 들어, 상기 계산에서, 각각의 메모리 이동 블록에 대해 2개의 알고리즘 임무들이 존재한다.
실제로, 소유자 메모리(예를 들어 C) 상의 소정의 메모리 블록 상에서 수행되는 모든 계산은 큰 임무로 그룹화될 수 있고 임무 내의 제 1 진술은 단일 메모리 이동 지시일 수 있다. 지시는 하나의 실시예에서 다음과 같이 임무에 대한 표준 C++ 주석의 형태일 수 있다.
[[move_memory(C, B)]]
void kernel(field<2, double>&C, const field<2, double>& A, const field<2, double>& B);
이 주석을 이용함으로써 컴파일러는 메모리 이동 및 계산을 최적화하고 인터리빙(interleaving)할 수 있다.
다음의 코드는 하나의 실시예에서 기민 통신 오퍼레이터(12)의 하나의 구현의 개요를 제공한다.
Figure pct00005
Figure pct00006
Figure pct00007
Figure pct00008
Figure pct00009
도 4는 기민 통신 오퍼레이터(12)를 포함하는 데이터 병렬 코드(10)를 컴파일링하고 수행하도록 구성되는 컴퓨터 시스템(100)의 실시예를 도시하는 블록도이다.
컴퓨터 시스템(100)은 하나 이상의 프로세서 패키지들(도시되지 않음)에 하우징되는 하나 이상의 프로세싱 요소들(PE들)(102) 및 메모리 시스템(104)을 구비하는 호스트(101)를 포함한다. 컴퓨터 시스템(100)은 또한 영 이상의 입력/출력 디바이스들(106), 영 이상의 디스플레이 디바이스들(108), 영 이상의 주변 장치들(110), 및 영 이상의 네트워크 디바이스들(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)에 저장되는 명령들에 액세스하고 상기 명령들을 실행하도록 구성된다. 명령들은 기본 입출력 시스템(basic input output system; 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) 상에서 실행되도록 의도되고 최적화되는 데이터 병렬 프로그램 또는 알고리즘(예를 들어 쉐이더(shader))를 나타낸다. 하나의 실시예에서, 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)로부터 수신되는 명령들 및 데이터를 저장한다. 메모리 시스템(104)은 프로세싱 요소들(102), 입력/출력 디바이스들(106), 디스플레이 디바이스들(108), 주변 장치들(110), 네트워크 디바이스들(112), 및 컴퓨트 엔진(120)에 저장된 명령들 및 데이터를 제공한다. 메모리 시스템(104) 내의 저장 디바이스들의 예들은 하드 디스크 드라이브들, 임의 액세스 메모리(random access memory; RAM), 판독 전용 메모리(read only memory; ROM), 플래시 메모리 드라이브들 및 카드들, 및 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)에 저장한다. 특히, PE들(122)은 기민 통신 오퍼레이터(12)를 입력 인덱서블 유형(14)에 적용하여 도 4에 도시되고 위에 추가적으로 상세하게 기술되는 바와 같은 출력 인덱서블 유형(18)을 생성하기 위해 DP 실행파일(138)을 실행한다.
데이터 병렬 컴퓨팅(즉, DP 프로그램들 또는 알고리즘들의 실행)에 최적화된 하드웨어 아키텍처를 구비하는 하나 이상의 계산 자원들을 가지는 컴퓨트 노드(121)는 DP 최적 컴퓨트 노드(121)로서 칭해진다. DP 최적화 컴퓨트 노드(121)의 예들은 PE들(122)의 세트가 하나 이상의 GPU들을 포함하는 노드(121) 및 PE들(122)의 세트가 범용 프로세서 패키지 내의 SIMD 장치들의 세트를 포함하는 노드(121)를 포함한다. 데이터 병렬 컴퓨팅에 대해 최적화되는 하드웨어 아키텍처를 구비하는 임의의 계산 자원들(예를 들어 범용 프로세싱 요소들(102)을 구비하는 프로세서 패키지들)을 가지지 않는 컴퓨트 노드(121)는 비-DP 최적 컴퓨트 노드(121)로 칭해진다. 각각의 컴퓨트 노드(121)에서, 메모리(124)는 메모리 시스템(104)(예를 들어 GPU에 의해 이용되는 GPU 메모리) 또는 메모리 시스템(104)의 일부(예를 들어 범용 프로세서 패키지에서 SIMD 장치들에 의해 이용되는 메모리)과 별개일 수 있다.
호스트(101)는 실행을 위해 컴퓨트 노드(121)에 DP 실행파일(138)을 제공하고 상호접속부들(114)을 이용하여 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) 및/또는 메모리 시스템(104) 내의 하나 이상의 인덱서블 유형들(14)의 카피를 메모리(124)로서 지정할 수 있고/있거나 DP 실행파일(138) 및/또는 하나 이상의 인덱서블 유형들(14)을 메모리 시스템(104)의 한 부분으로부터 메모리(124)를 형성하는 메모리 시스템(104)의 다른 부분으로 카피할 수 있다. 컴퓨트 노드(121) 및 호스트 컴퓨트 노드 사이의 카피 프로세스는 비동기로 지정되지 않는 한 동기일 수 있다.
호스트 컴퓨트 노드 및 각각의 컴퓨트 노드(121)는 서로에 관계 없이 동시에 코드를 실행할 수 있다. 호스트 컴퓨트 노드 및 각각의 컴퓨트 노드(121)는 노드 계산들을 조정하기 위해 동기화 지점들에서 상호 작용할 수 있다.
하나의 실시예에서, 컴퓨트 엔진(120)은 하나 이상의 그래픽 처리 장치(GPU)들이 메모리 시스템(104)과 분리되어 있는 메모리(124) 및 PE들(122)을 포함한다. 이 실시예에서, 그래픽 카드(도시되지 않음)의 구동자는 GPU들의 PE들(122)에 의한 수행을 위해 DP 실행파일(138)의 바이트 코드 또는 일부 다른 중간 표현(IL)을 GPU들의 명령 세트로 변환할 수 있다.
다른 실시예에서, 컴퓨트 엔진(120)은 하나 이상의 범용 프로세싱 요소들(102)을 구비하는 프로세서 패키지들 내에 포함되는 하나 이상의 GPU들(즉, PE들(122)) 및 메모리(124)를 포함하는 메모리 시스템(104)의 일부의 결합으로부터 형성된다. 이 실시예에서, 바이트 코드 또는 DP 실행파일(138)의 일부 다른 중간 표현(IL)을 프로세서 패키지들 내의 GPU들의 명령 세트로 변환하기 위해 컴퓨터 시스템(100) 상에 추가 소프트웨어가 제공될 수 있다.
추가 실시예에서, 컴퓨트 엔진(120)은 메모리(124)를 포함하는 메모리 시스템(104)의 일부 및 프로세싱 요소들(102)을 포함하는 하나 이상의 프로세서 패키지들 내의 하나 이상의 SIMD 장치들의 결합으로부터 형성된다. 이 실시예에서, 바이트 코드 또는 DP 실행파일(138)의 일부 다른 중간 표현(IL)을 프로세서 패키지들 내의 SIMD 장치들의 명령 세트로 변환하기 위해 컴퓨터 시스템(100) 상에 추가 소프트웨어가 제공될 수 있다.
또 다른 실시예에서, 컴퓨트 엔진(120)은 메모리(124)를 포함하는 메모리 시스템(104)의 일부 및 프로세싱 요소들(102)을 포함하는 하나 이상의 프로세서 패키지들 내에 하나 이상의 스칼라 또는 벡터 프로세싱 파이프라인들의 결합으로부터 형성된다. 이 실시예에서, 바이트 코드 또는 DP 실행파일(138)의 일부 다른 중간 표현(IL)을 프로세서 패키지들 내의 스칼라 프로세싱 파이프라인들의 명령 세트로 변환하기 위해 컴퓨터 시스템(100) 상에 추가 소프트웨어가 제공될 수 있다.
본원에서 특정 실시예들이 도시되고 기술되었을지라도 다양한 대체 및/또는 등가의 구현예들이 본 발명의 범위를 벗어나지 않으면서도 도시되고 기술된 상기 특정 실시예들을 대체할 수 있음이 당업자에 의해 인정될 것이다. 본 출원은 본원에서 논의되는 특정 실시예들의 적응들 및 수정들을 포괄하도록 의도된다. 그러므로, 본 발명은 청구항들 및 이의 등가물들에 의해서만 제한되도록 의도된다.

Claims (15)

  1. 컴퓨터 실행 가능 명령들을 저장하는 컴퓨터 판독 가능 저장 매체로서,
    상기 컴퓨터 실행 가능 명령들은 컴퓨터 시스템에 의해 실행될 때, 상기 컴퓨터 시스템으로 하여금
    하나 이상의 데이터 병렬 컴퓨트 노드들 상에서의 실행을 위해 구성된 데이터 병렬 소스 코드 내의 기민 통신 오퍼레이터(agile communication operator)에 응답하여 입력 인덱서블 유형 및 자원 맵으로부터 기민 인덱서블 유형(agile indexable type)을 생성하는 단계와
    상기 기민 인덱서블 유형을 이용하여 데이터 병렬 알고리즘을 수행하는 단계를 포함하는 방법을 수행하도록 하는
    컴퓨터 판독 가능 저장 매체.
  2. 제 1 항에 있어서,
    상기 기민 출력 인덱서블 유형은 상기 자원 맵에 의해 규정되는 복수의 세그먼트들을 가지는
    컴퓨터 판독 가능 저장 매체.
  3. 제 1 항에 있어서,
    하나 이상의 데이터 병렬 컴퓨트 노드들 중 제 1 노드 상에 있는 상기 기민 인덱서블 유형의 제 1 세그먼트 및 상기 하나 이상의 데이터 병렬 컴퓨트 노드들 중 제 2 노드 상에 있는 상기 기민 인덱서블 유형의 제 2 세그먼트를 이용하여 상기 데이터 병렬 알고리즘을 수행하는 단계를 더 포함하는
    컴퓨터 판독 가능 저장 매체.
  4. 제 1 항에 있어서,
    상기 데이터 병렬 알고리즘은 상기 기민 인덱서블 유형의 전체 전역-뷰 표현으로 코딩되는
    컴퓨터 판독 가능 저장 매체.
  5. 제 1 항에 있어서,
    상기 데이터 병렬 알고리즘은 상기 기민 인덱서블 유형의 국지적-전역-뷰 표현으로 코딩되는
    컴퓨터 판독 가능 저장 매체.
  6. 제 1 항에 있어서,
    상기 데이터 병렬 소스 코드는 데이터 병렬 확장자들을 지니는 프로그래밍 언어로 기록되는
    컴퓨터 판독 가능 저장 매체.
  7. 제 1 항에 있어서,
    상기 데이터 병렬 소스 코드는 고레벨 데이터 병렬 프로그래밍 언어로 기록되는
    컴퓨터 판독 가능 저장 매체.
  8. 제 1 항에 있어서,
    상기 하나 이상의 데이터 병렬 컴퓨트 노드들은 적어도 하나의 그래픽 처리 장치를 포함하는
    컴퓨터 판독 가능 저장 매체.
  9. 제 1 항에 있어서,
    상기 하나 이상의 데이터 병렬 컴퓨트 노드들은 적어도 하나의 범용 프로세서를 포함하는
    컴퓨터 판독 가능 저장 매체.
  10. 컴퓨터 시스템에서 컴파일러에 의해 수행되는 방법으로서,
    하나 이상의 데이터 병렬 컴퓨트 노드들 상에서의 실행을 위해 구성되는 데이터 병렬 소스 코드 내에서 기민 통신 오퍼레이터를 식별하는 단계와,
    상기 데이터 병렬 소스 코드로부터 데이터 병렬 실행 가능 코드를 생성하여 상기 데이터 병렬 실행 가능 코드가 입력 인덱서블 유형 및 자원 맵으로부터 기민 인덱서블 유형을 생성함으로써 기민 통신 오퍼레이터를 구현하는 단계를 포함하는
    컴파일러에 의해 수행되는 방법.
  11. 제 10 항에 있어서,
    상기 기민 출력 인덱서블 유형은 상기 자원 맵에 의해 규정되는 복수의 세그먼트들을 가지는
    컴파일러에 의해 수행되는 방법.
  12. 제 10 항에 있어서,
    상기 데이터 병렬 소스 코드로부터 상기 데이터 병렬 실행 가능 코드를 생성하여 상기 데이터 병렬 실행 가능 코드가 하나 이상의 데이터 병렬 컴퓨트 노드들 중 제 1 노드 상에 있는 상기 기민 인덱서블 유형의 제 1 세그먼트 및 상기 하나 이상의 데이터 병렬 컴퓨트 노드들 중 제 2 노드 상에 있는 상기 기민 인덱서블 유형의 제 2 세그먼트를 이용함으로써 상기 기민 통신 오퍼레이터를 구현하는 단계를 더 포함하는
    컴파일러에 의해 수행되는 방법.
  13. 제 10 항에 있어서,
    상기 데이터 병렬 소스 코드는 상기 기민 인덱서블 유형의 전체 전역-뷰 표현으로 코딩되는
    컴파일러에 의해 수행되는 방법.
  14. 제 10 항에 있어서,
    상기 데이터 병렬 소스 코드는 상기 기민 인덱서블 유형의 국지적-전역-뷰 표현으로 코딩되는
    컴파일러에 의해 수행되는 방법.
  15. 제 10 항에 있어서,
    상기 데이터 병렬 소스 코드는 데이터 병렬 확장자들을 가지는 고레벨 범용 프로그래밍 언어 및 고레벨 데이터 병렬 프로그래밍 언어 중 하나로 기록되는
    컴파일러에 의해 수행되는 방법.
KR1020137016249A 2010-12-22 2011-12-20 기민 통신 오퍼레이터 KR101900796B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/975,796 US9395957B2 (en) 2010-12-22 2010-12-22 Agile communication operator
US12/975,796 2010-12-22
PCT/US2011/066285 WO2012088174A2 (en) 2010-12-22 2011-12-20 Agile communication operator

Publications (2)

Publication Number Publication Date
KR20140014090A true KR20140014090A (ko) 2014-02-05
KR101900796B1 KR101900796B1 (ko) 2018-09-20

Family

ID=46314858

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137016249A KR101900796B1 (ko) 2010-12-22 2011-12-20 기민 통신 오퍼레이터

Country Status (8)

Country Link
US (2) US9395957B2 (ko)
EP (1) EP2656208B1 (ko)
JP (1) JP6027021B2 (ko)
KR (1) KR101900796B1 (ko)
CN (1) CN102609244B (ko)
CA (1) CA2821745A1 (ko)
HK (1) HK1172405A1 (ko)
WO (1) WO2012088174A2 (ko)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10185594B2 (en) * 2009-10-29 2019-01-22 International Business Machines Corporation System and method for resource identification
US9489183B2 (en) 2010-10-12 2016-11-08 Microsoft Technology Licensing, Llc Tile communication operator
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
US9841958B2 (en) * 2010-12-23 2017-12-12 Microsoft Technology Licensing, Llc. Extensible data parallel semantics
US9613112B2 (en) 2013-03-15 2017-04-04 Miosoft Corporation Structuring data
US9665403B2 (en) * 2013-03-15 2017-05-30 Miosoft Corporation Executing algorithms in parallel
CN104216894B (zh) 2013-05-31 2017-07-14 国际商业机器公司 用于数据查询的方法和系统
US10545917B2 (en) 2014-02-19 2020-01-28 Snowflake Inc. Multi-range and runtime pruning
US9576039B2 (en) 2014-02-19 2017-02-21 Snowflake Computing Inc. Resource provisioning systems and methods
US10216748B1 (en) * 2015-09-30 2019-02-26 EMC IP Holding Company LLC Segment index access management in a de-duplication system
DE102017209697A1 (de) * 2016-06-13 2017-12-14 Denso Corporation Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung
US10437780B2 (en) 2016-07-14 2019-10-08 Snowflake Inc. Data pruning based on metadata
WO2018094087A1 (en) * 2016-11-17 2018-05-24 The Mathworks, Inc. Systems and methods for generating code for parallel processing units
CN108345452B (zh) * 2017-01-23 2021-07-23 斑马智行网络(香港)有限公司 一种线程管理方法及装置
JP7276986B2 (ja) 2019-12-23 2023-05-18 ロジスティード株式会社 折畳み式コンテナ

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050071828A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation System and method for compiling source code for multi-processor environments
US20100199257A1 (en) * 2009-01-31 2010-08-05 Ted James Biggerstaff Automated Partitioning of a Computation for Parallel or Other High Capability Architecture

Family Cites Families (132)

* 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
CA1319757C (en) 1988-07-29 1993-06-29 Digital Equipment Corporation Echelon method for execution of nested loops in multiple processor computers
JPH02205976A (ja) 1989-02-03 1990-08-15 Omron Tateisi Electron Co プログラム生成装置
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
US5175856A (en) 1990-06-11 1992-12-29 Supercomputer Systems Limited Partnership Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution
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
GB9305263D0 (en) * 1993-03-15 1993-05-05 Univ Westminster Parrallel computation
US5475842A (en) * 1993-08-11 1995-12-12 Xerox Corporation Method of compilation optimization using an N-dimensional template for relocated and replicated alignment of arrays in data-parallel programs for reduced data communication during execution
JPH07253955A (ja) * 1994-03-15 1995-10-03 Hitachi Ltd データ分割方法
JP2634144B2 (ja) * 1994-07-06 1997-07-23 インターナショナル・ビジネス・マシーンズ・コーポレイション プログラムの並列化実行方法及び並列化実行コンパイラ
US5706483A (en) * 1994-12-13 1998-01-06 Microsoft Corporation Run-time code compiler for data block transfer
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
US5867649A (en) 1996-01-23 1999-02-02 Multitude Corporation Dance/multitude concurrent computation
US6311265B1 (en) 1996-03-25 2001-10-30 Torrent Systems, Inc. Apparatuses and methods for programming parallel computers
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
US5937194A (en) 1997-03-12 1999-08-10 International Business Machines Corporation Method of, system for, and article of manufacture for providing a generic reduction object for data parallelism
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
US6106575A (en) 1998-05-13 2000-08-22 Microsoft Corporation Nested parallel language preprocessor for converting parallel language programs into sequential code
US6088511A (en) 1998-05-13 2000-07-11 Microsoft Corporation Nested parallel 2D Delaunay triangulation method
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
US6378066B1 (en) * 1999-02-04 2002-04-23 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for developing and executing data flow programs, and optimizing user input specifications
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
US6772415B1 (en) * 2000-01-31 2004-08-03 Interuniversitair Microelektronica Centrum (Imec) Vzw Loop optimization with mapping code on an architecture
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
JP2002116917A (ja) 2000-10-05 2002-04-19 Fujitsu Ltd オブジェクト指向型プログラミング言語によるソース・プログラムをコンパイルするコンパイラ
US6847370B2 (en) 2001-02-20 2005-01-25 3D Labs, Inc., Ltd. Planar byte memory organization with linear access
JP2003016045A (ja) * 2001-06-27 2003-01-17 Hitachi Eng Co Ltd 差分型並列プログラム作成方法
US7069556B2 (en) * 2001-09-27 2006-06-27 Intel Corporation Method and apparatus for implementing a parallel construct comprised of a single task
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
CA2529925C (en) 2003-06-25 2016-08-23 Ab Initio Software Corporation Computer-aided parallelizing of computation graphs
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
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
US7506325B2 (en) * 2004-10-07 2009-03-17 International Business Machines Corporation Partitioning processor resources based on memory usage
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
US20070074195A1 (en) 2005-09-23 2007-03-29 Shih-Wei Liao Data transformations for streaming applications on multiprocessors
US7689980B2 (en) 2005-09-30 2010-03-30 Intel Corporation Splitting the computation space to optimize parallel code
US7757222B2 (en) 2005-09-30 2010-07-13 Intel Corporation Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal
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
US7584342B1 (en) * 2005-12-15 2009-09-01 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and SIMD instruction issue
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 国立大学法人東京工業大学 プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム
US8381202B2 (en) 2006-06-20 2013-02-19 Google Inc. Runtime system for executing an application in 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
US8261270B2 (en) 2006-06-20 2012-09-04 Google Inc. Systems and methods for generating reference results using 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++
KR101085330B1 (ko) * 2006-12-14 2011-11-23 후지쯔 가부시끼가이샤 컴파일 방법 및 컴파일러
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
CN101657795B (zh) 2007-04-11 2013-10-23 苹果公司 多处理器上的数据并行计算
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
US20090125882A1 (en) 2007-10-08 2009-05-14 Matteo Frigo Method of implementing hyperobjects in a parallel processing software programming environment
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
US8930926B2 (en) * 2008-02-08 2015-01-06 Reservoir Labs, Inc. System, methods and apparatus for program optimization for multi-threaded processor architectures
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
GB0808575D0 (en) * 2008-05-12 2008-06-18 Xmos Ltd Compilign and linking
GB0808576D0 (en) * 2008-05-12 2008-06-18 Xmos Ltd Compiling and linking
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
US8813091B2 (en) * 2008-08-04 2014-08-19 Oracle America, Inc. Distribution data structures for locality-guided work stealing
JP4635082B2 (ja) * 2008-09-30 2011-02-16 株式会社東芝 マルチプロセッサシステム及びグルーピング方法
BRPI0919457A2 (pt) 2008-09-30 2015-12-01 Exxonmobil Upstream Res Co método para simular escoamento de fluido em um reservatório de hidrocarboneto
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
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
US20110010690A1 (en) * 2009-07-07 2011-01-13 Howard Robert S System and Method of Automatically Transforming Serial Streaming Programs Into Parallel Streaming Programs
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
US8453237B2 (en) * 2010-06-03 2013-05-28 International Business Machines Corporation Verification of a segmented program on a parallel processing computing system
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
US8839214B2 (en) 2010-06-30 2014-09-16 Microsoft Corporation Indexable type transformations
US9489183B2 (en) 2010-10-12 2016-11-08 Microsoft Technology Licensing, Llc Tile communication operator
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
WO2013051131A1 (ja) * 2011-10-06 2013-04-11 富士通株式会社 データ処理方法、分散処理システムおよびプログラム
US20130113809A1 (en) * 2011-11-07 2013-05-09 Nvidia Corporation Technique for inter-procedural memory address space optimization in gpu computing compiler
US9268623B2 (en) * 2012-12-18 2016-02-23 International Business Machines Corporation Analyzing update conditions for shared variable directory information in a parallel computer
US9063710B2 (en) * 2013-06-21 2015-06-23 Sap Se Parallel programming of in memory database utilizing extensible skeletons
US9747089B2 (en) * 2014-10-21 2017-08-29 International Business Machines Corporation Automatic conversion of sequential array-based programs to parallel map-reduce programs

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050071828A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation System and method for compiling source code for multi-processor environments
US20100199257A1 (en) * 2009-01-31 2010-08-05 Ted James Biggerstaff Automated Partitioning of a Computation for Parallel or Other High Capability Architecture

Also Published As

Publication number Publication date
EP2656208A2 (en) 2013-10-30
US20120166771A1 (en) 2012-06-28
CN102609244A (zh) 2012-07-25
US9395957B2 (en) 2016-07-19
US20160378438A1 (en) 2016-12-29
HK1172405A1 (en) 2013-04-19
WO2012088174A2 (en) 2012-06-28
EP2656208B1 (en) 2021-09-08
CA2821745A1 (en) 2012-06-28
KR101900796B1 (ko) 2018-09-20
US10423391B2 (en) 2019-09-24
JP2014504750A (ja) 2014-02-24
JP6027021B2 (ja) 2016-11-16
CN102609244B (zh) 2015-09-23
EP2656208A4 (en) 2015-05-27
WO2012088174A3 (en) 2012-10-26

Similar Documents

Publication Publication Date Title
KR101900796B1 (ko) 기민 통신 오퍼레이터
US9489183B2 (en) Tile communication operator
US10282179B2 (en) Nested communication operator
JP5957006B2 (ja) 拡張可能なデータ並列セマンティクス
CN102541612B (zh) 数据平行代码中的映射变换
US8839214B2 (en) Indexable type transformations
US10620916B2 (en) Read-only communication operator
US8713039B2 (en) Co-map communication operator
US20160224343A1 (en) Method and apparatus for performing register allocation

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