JP6027021B2 - アジャイル通信演算子 - Google Patents

アジャイル通信演算子 Download PDF

Info

Publication number
JP6027021B2
JP6027021B2 JP2013546346A JP2013546346A JP6027021B2 JP 6027021 B2 JP6027021 B2 JP 6027021B2 JP 2013546346 A JP2013546346 A JP 2013546346A JP 2013546346 A JP2013546346 A JP 2013546346A JP 6027021 B2 JP6027021 B2 JP 6027021B2
Authority
JP
Japan
Prior art keywords
data parallel
agile
data
computer
source code
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
JP2013546346A
Other languages
English (en)
Other versions
JP2014504750A5 (ja
JP2014504750A (ja
Inventor
エフ.リンセス ポール
エフ.リンセス ポール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2014504750A publication Critical patent/JP2014504750A/ja
Publication of JP2014504750A5 publication Critical patent/JP2014504750A5/ja
Application granted granted Critical
Publication of JP6027021B2 publication Critical patent/JP6027021B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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
    • 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)
  • Stored Programmes (AREA)
  • Machine Translation (AREA)

Description

本願は、アジャイル通信演算子に関する。
コンピュータシステムは、しばしば、1つまたは複数の汎用プロセッサ(たとえば、CPU(中央処理装置))および1つまたは複数の特殊化されたデータ並列計算ノード(たとえば、CPU内のGPU(グラフィックス処理ユニット)またはSIMD(単一命令複数データ)実行ユニット)を含む。汎用プロセッサは、一般に、コンピュータシステム上で汎用処理を実行し、データ並列計算ノードは、一般に、コンピュータシステム上でデータ並列処理(たとえば、グラフィックス処理)を実行する。汎用プロセッサは、しばしば、データ並列アルゴリズムを実施する能力を有するが、データ並列計算ノード内に見られる最適化されたハードウェアリソースを用いずに(データ並列アルゴリズムを)実施する。その結果、汎用プロセッサは、データ並列アルゴリズムの実行において、データ並列計算ノードよりはるかに非効率的である可能性がある。
データ並列計算ノードは、従来、コンピュータシステム上でプログラムを実行する際に、汎用プロセッサに対してサポートする役割を演じてきた。データ並列アルゴリズムに最適化されたハードウェアの役割が、データ並列計算ノード処理能力の機能強化に起因して増えるにつれて、データ並列計算ノードをプログラムするプログラマの能力を高め、データ並列計算ノードのプログラミングをより簡単にすることが望ましくなるであろう。
データ並列アルゴリズムは、しばしば、複数のコンピューティングプラットフォームにまたがって分散される可能性があるデータの大きいセットに作用する。データの大きいセットは、データを記述するデータ構造の表現および追跡ならびに複数のプラットフォームにまたがるデータの移動における難題を提供する。その結果、複数のコンピューティングプラットフォームにまたがってデータの大きいセットを管理するプロセスは、しばしば、複雑で実施がむずかしい。
この要約は、下の詳細な説明でさらに説明する選択された概念を簡潔な形式で紹介するために提供される。この要約は、請求項に係る主題の主要な特徴または本質的特徴を識別することを意図されたものではなく、請求項に係る主題の範囲を限定するのに使用されることも意図されていない。
高水準プログラミング言語は、計算ノードにまたがって計算空間を分散させるためにリソースマップに基づいてセグメント化された計算空間を生成するアジャイル通信演算子を提供する。アジャイル通信演算子は、計算空間をセグメントに分解し、セグメントを計算ノードに割り当てさせ、ユーザが計算ノードの間でのセグメントの移動を中央で管理し、自動化することを可能にする。セグメント移動を、セグメントのフルグローバルビュー表現またはローカルグローバルビュー表現のいずれかを使用して管理することができる。
添付図面は、実施形態のさらなる理解を提供するために含まれ、本明細書に組み込まれ、その一部を構成する。図面は、実施形態を図示し、この説明と一緒に、実施形態の原理を説明する役に立つ。他の実施形態および実施形態の所期の利点の多くは、次の詳細な説明を参照することによってよりよく理解されるので、たやすく了解されるであろう。図面の要素は、必ずしもお互いに関して原寸通りではない。同様の符号は、対応する類似する部分を表す。
アジャイル通信演算子を用いるコードの実施形態を示すコンピュータコード図である。 入力インデックス可能型にアジャイル通信演算子を適用する実施形態を示すブロック図である。 アジャイルインデックス可能型を生成し、使用する例を示すブロック図である。 アジャイルインデックス可能型を生成し、使用する例を示すブロック図である。 アジャイルインデックス可能型を生成し、使用する例を示すブロック図である。 アジャイル通信演算子を含むデータ並列コードをコンパイルし、実行するように構成されたコンピュータシステムの実施形態を示すブロック図である。
次の詳細な説明では、添付図面を参照し、添付図面は、本明細書の一部を形成し、添付図面には、本発明を実践できる特定の実施形態が例として示されている。これに関して、「最上部」、「最下部」、「前」、「後」、「前端」、「後端」、その他などの方向用語が、説明される図面(1つまたは複数)の方位に関して使用される。実施形態の構成要素を、複数の異なる方位で配置することができるので、方向用語は、例示のために使用され、決して限定的ではない。他の実施形態を利用することができ、構造的変更または論理的変更を本発明の範囲から逸脱せずに行えることを理解されたい。したがって、次の詳細な説明は、限定的な意味で解釈してはならず、本発明の範囲は、添付の特許請求の範囲によって定義される。本明細書で説明されるさまざまな例示的実施形態の特徴は、特に注記されない限り、互いに組み合わせ可能であることを理解されたい。
図1は、アジャイル通信演算子12を用いるコード10の実施形態を示すコンピュータコード図である。コンパイルされ実行される時に、アジャイル通信演算子12は、計算ノード(たとえば、図4に示され、下でさらに詳細に説明される計算ノード121)にまたがって計算空間を分散させるためにリソースマップに基づいてセグメント化された計算空間を生成する。アジャイル通信演算子は、計算空間(図1の実施形態では入力インデックス可能型14によって表される)を、アジャイルインデックス可能型18(図3Bの例にも図示)のセグメント20に分解し、セグメント20を計算ノードに割り当てさせ、ユーザが計算ノードの間でのセグメント20の移動を中央で管理し、自動化することを可能にする。セグメント移動を、以下にさらに詳細に説明するように、セグメントのフルグローバルビュー表現またはローカルグローバルビュー表現のいずれかを使用して管理することができる。
コード10は、1つまたは複数のDP最適計算ノード(たとえば、図4に示されたDP最適計算ノード121)による実行のために1つまたは複数の実行可能ファイル(たとえば、図4に示されたDP実行可能ファイル138)にコンパイルされ得る、高水準汎用プログラミング言語または高水準データ並列プログラミング言語からの命令のシーケンスを含む。
一実施形態では、コード10は、1つまたは複数のモジュールのセットに格納されたプログラムを形成するデータ並列拡張を伴う高水準汎用プログラミング言語(以下ではGP言語)からの命令のシーケンスを含む。GP言語は、プログラムを異なる部分(すなわち、モジュール)で記述することを可能にすることができ、各モジュールを、コンピュータシステムによってアクセス可能な別々のファイルまたは位置に格納することができる。GP言語は、1つまたは複数の汎用プロセッサおよび1つまたは複数の特殊目的DP最適計算ノードを含むコンピューティング環境をプログラムする単一の言語を提供する。DP最適計算ノードは、通常、汎用プロセッサのGPU(グラフィック処理ユニット)またはSIMDユニットであるが、汎用プロセッサのスカラ実行ユニットもしくはベクトル実行ユニット、FPGA(フィールドプログラマブルゲートアレイ)、またはいくつかのコンピューティング環境内の他の適切なデバイスを含むこともできる。GP言語を使用して、プログラマは、汎用プロセッサとDPとの両方のソースコードを、それぞれ汎用プロセッサおよびDP計算ノードによる実行のためにコード10に含めることができ、汎用プロセッサソースコードおよびDPソースコードの実行を調整することができる。コード10は、この実施形態では、アプリケーション、ライブラリ関数、またはオペレーティングシステムサービスなど、任意の適切なタイプのコードを表すことができる。
GP言語を、データ並列特徴を含めるために、CまたはC++などの広く採用されている高水準の汎用プログラミング言語を拡張することによって形成することができる。DP特徴が現れることのできる汎用言語の他の例は、Java(登録商標)、PHP、Visual Basic、Perl、Python(商標)、C#、Ruby、Delphi、Fortran、VB、F#、OCaml、Haskell、Erlang、NESL、Chapel、およびJavaScript(登録商標)を含む。GP言語実施態様は、プログラムの異なる部分を異なるモジュールに含めることを可能にする、豊富なリンク能力を含むことができる。データ並列特徴は、データ並列動作を汎用プロセッサ(すなわち、非DP最適計算ノード)より高速にまたはより効率的に実行することを可能にするために、DP最適計算ノードの特殊目的アーキテクチャを利用するプログラミングツールを提供する。GP言語は、プログラマが汎用プロセッサとDP最適計算ノードとの両方についてプログラムすることを可能にする別の適切な高水準汎用プログラミング言語とすることもできる。
もう1つの実施形態では、コード10は、プログラムを形成する高水準データ並列プログラミング言語(以下、「DP言語」という。)からの命令のシーケンスを含む。DP言語は、1つまたは複数のDP最適計算ノードを有するコンピューティング環境内でDP最適計算ノードをプログラミングするための特殊化された言語を提供する。DP言語を使用して、プログラマは、DP最適計算ノードでの実行を意図された、コード10内のDPソースコードを生成する。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)でのベクトル関数の1つまたは複数の呼出し28(たとえば、forall…,vector_func,…)を含むこともできる。呼出し場所に対応するベクトル関数を、カーネル関数と称する。カーネル関数は、コード10内で他のベクトル関数(すなわち、他のDPソースコード)を呼び出すことができ、ベクトル関数呼出しグラフのルートと考えることができる。カーネル関数は、コード10によって定義される型(たとえば、クラスまたは構造体)を使用することもできる。型に、DPソースコードとして注釈を付けても付けなくてもよい。他の実施形態では、他の適切なプログラミング言語構造体を使用して、DPソースコードおよび/または汎用プロセッサコードとしてコード10の諸部分を指定することができる。さらに、注釈26を、コード10がDP言語で記述される実施形態では省略することができる。
図2は、アジャイルインデックス可能型18を作るために入力インデックス可能型14にアジャイル通信演算子12を適用する実施形態を示すブロック図である。本明細書用いられるように、インデックス可能型は、1つまたは複数の添字演算子として、非負の整数であるランクおよびelement_typeと表される型が指定されているものであればどのようなデータ型でもよい。index<N>が、整数(すなわち、任意のタイプの整数データ型)のN−タプルを表す型である場合には、index<N>のインスタンスは、N個の整数の集合{i0,i1,…,im}であり、ここで、mは、N−1と等しい(すなわち、N−タプル)。ランクNのインデックス演算子は、index<N>のN−タプルインスタンスをとり、そのインスタンスに要素型と呼ばれる型のもう1つのインスタンスを関連付け、要素型は、インデックス可能型内の各要素を定義する。一実施形態では、インデックス可能型は、次の演算子のうちの1つまたは複数を定義する。
Figure 0006027021
他の実施形態では、演算子を、関数、ファンクタ(Functor)、またはより一般的な表現とすることができる。インデックス可能型の形は、それに関して上の添字演算子のうちの1つが定義されるindex<rank>の集合である。インデックス可能型は、通常、ポリトープである形状を有する、すなわち、インデックス可能型を、座標軸の線形関数によって形成される有限個数の半空間の共通部分として代数的に表すことができる。
図1および2を参照すると、コード10の高水準言語は、一実施形態で、データ並列コンピューティング環境で入力インデックス可能型14を使用するためにアジャイル通信演算子12を提供する。入力インデックス可能型14は、ランク(たとえば、図1の実施形態ではランクN)および要素型(たとえば、図1の実施形態では要素型T)を有し、アジャイル通信演算子12によって作用される計算空間を定義する。アジャイル通信演算子12は、入力インデックス可能型14およびリソースマップ16(たとえば、図1の例のresource_map)を受け取る。入力インデックス可能型14およびリソースマップ16から、アジャイル通信演算子12は、リソースマップ16によって指定される、サブグリッドとも称するセグメント20を有するアジャイルインデックス可能型18を生成する(図3Bの例にも図示)。コード10に示されているように、アジャイル通信演算子12を使用して、アジャイルインデックス可能型18をDP呼出し場所(たとえば、図1の例のforall)に渡すことができる。それを行うことによって、アジャイル通信演算子12は、呼出し場所によって指定されるベクトル関数を、すべての計算ノード(たとえば、図4に示された計算ノード121)上で複製させ、各計算ノードは、その計算ノードに割り当てられたセグメント20を受け取る。
アジャイル通信演算子12は、入力インデックス可能型14をセグメント20に分解させ、リソースマップ16によって指定されるとおりに計算ノードに各セグメント20を割り当てる。リソースマップ16は、メモリすなわち入力インデックス可能型14が少なくとも1つの計算ノードにまたがってどこに格納されるのかの指定を提供する。リソースマップ16は、セグメント20の集合がオーバーラップなしでアジャイルインデックス可能型18をカバーするように、セグメント20を指定する。リソースマップ16は、セグメント20が、同一のもしくは異なるブロックサイズおよび/または規則的なもしくは不規則なブロック組合せを伴って指定されることを可能にする。
図3A〜3Cは、アジャイルインデックス可能型18(1)を生成し、使用する例を示すブロック図である。図3A〜3Cの例では、アジャイル通信演算子12は、対応するリソースマップ16(図2に図示)によって指定されるように、0から35までの番号を付けられた要素を有する6x6行列(すなわち、入力インデックス可能型14(1))を、図3Bに示されたアジャイルインデックス可能型18(1)内の9つのセグメント20に区分する。各セグメント20は、図3Bでは異なる陰付けによって表される。たとえば、第1のセグメント20(1)は、要素0、1、6、および7を含み、第2のセグメント20(2)は、要素2、3、8、および9を含むなどである。また、アジャイル通信演算子12は、リソースマップ16内のプロトコルによって指定され、図3Cの矢印によって示されるように、セグメント20(1)〜20(9)を、1つまたは複数の計算ノード121(1)〜121(Q)の集合に割り当てさせ、ここで、Qは、1以上の整数である。
リソースマップ18は、ブロック分解、巡回分解(cyclic decomposition)、ブロックブロック分解、またはブロック巡回分解など、任意の適切な割当プロトコルを組み込むことができる。次のプロトコル例は、3つの計算ノード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は、セグメント20の第1の列および第2の列(すなわち、セグメント20(1)、20(4)、および20(7))を計算ノード121(1)に割り当てさせ、セグメント20の第3の列および第4の列(すなわち、セグメント20(2)、20(5)、および20(8))を計算ノード121(2)に割り当てさせ、セグメント20の第5の列および第6の列(すなわち、セグメント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の行分解または列分解の判断を、メモリレイアウトに依存するものとすることができる。たとえば、列優先メモリレイアウトは、適切なプロトコルを使用する列分解を暗示することができる。
一実施形態では、リソースマップ16は、リソースセグメントの集合を含み、各リソースセグメントは、セグメント20をリソースビュー(すなわち、計算ノードの抽象化)(図示せず)に関連付ける。たとえば、
Figure 0006027021
によって定義されるインデックス可能型14について、grid<rank>は、2つのデータメンバ
Figure 0006027021
を含む。たとえば、図3Bの第2のセグメント20(2)、形状またはグリッドは、_M_extent={2,2}および_M_offset={0,1}を有し、第6セグメント20(6)は、_M_extent={2,2}および_M_offset={1,2}を有する。したがって、parent_gridを、
Figure 0006027021
を使用して分解することができ、ここで、M1,M2,M3>0かつM1>=M2>=M3である。典型的には、M3はM2を割り切り、M2はM1を割り切る。algorithmic_blocks、memory_blocks、およびcompute_nodesの3つすべてが、オーバーラップなしでparent_gridをカバーする。algorithmic_blocksは、実施されるアルゴリズム内で使用される分解を表す。memory_blocksは、必要な時にメモリブロックがノードの間で移動される粒度を表す。compute_nodesは、計算ノードが対応するデータを格納するために割り当てられる粒度を表す。
関連付けがあり、その結果、すべてのalgorithmic_blockまたはmemory_blockが、それがcompute_node上のどこに格納されるのかをルックアップすることができるようになり、その結果、各algorithmic_blockが、それがmemory_block上のどこに格納されるのかをルックアップすることができるようになると仮定する。子グリッドとresource_viewとの間の関連付けを形成するresource_segmentsを用いて、resource_mapと呼ばれるクラスを生成することができる。
Figure 0006027021
アジャイル通信演算子12を使用して、アジャイルインデックス可能型18のデータに、そのデータが現在常駐している計算ノードの知識をユーザが有することなくシームレスにアクセスすることができる。形状parent_gridを有する例のインデックス可能型14 Aについて、Aのストレージは、resource_segmentのインスタンスによって判定される。
Figure 0006027021
にあるAの要素にアクセスするために、_Indexを含む子グリッドが、まず見つけられ、次に、オフセット
Figure 0006027021
が、
Figure 0006027021
になるように決定される。resource_segment表記を用いると、この関係は、
Figure 0006027021
である。
ルックアップの速度を高めるために、次のチェックを実行して、_Index(_Indexが変化するので)がまだ_Resource_segment._M_childに属するかどうかを判定する。
Figure 0006027021
所与の_Indexが属する子グリッドまたは_Resource_segmentの判定は、分解パターンに依存する。ワーストケースで、すべての次元での二分検索を使用することができるが、回避することはできない。しかし、たとえば、すべてのタイルが等しい広がりを有する2048x2048タイル分解を用いて、_M_child._M_offsetが
Figure 0006027021
と等しい_Resource_segmentを見つけられたい。その_Resource_segment(すなわち、現在のresource_segment)は、
Figure 0006027021
に違反するまで使用することができ、これに違反した場合には、新しい_Indexを_Tileによってもう一度分割し、繰り返されたい。この機構は、新しい含むresource_segmentsが低い頻度で見つけられることだけを必要とする、局所性を有するアルゴリズムについて、最適である可能性がある。
以下に説明されるローカルグローバルビュー表現では、ユーザインデックス演算子は、ユーザがすべてのアクセスの際に境界内にあると信頼されるので、ifチェック(本明細書では境界チェックと称する)を省略することができる。
Figure 0006027021
所与のresource_segmentが使い果たされ、別のresource_segmentが使用される場合には、ユーザは、現在のresource_segmentをリセットする関数を呼び出すと信頼される。ローカルグローバルビューの最も単純な形では、3つの分解のすべて
Figure 0006027021
が、同一のサイズのブロックまたはタイルを有して規則的である。インデックス可能型をタイルに区分するタイル通信演算子を、最初の分解に適応して、
Figure 0006027021
を得ることができる。含まれるmemory_blocks[k1]およびcompute_nodes[k2]が判定される。所有者compute_nodes[k3]が、次に判定され、その後、memory_blocks[k1]が、compute_nodes[k2]からcompute_nodes[k3]に移動される。
自動メモリ移動粒度は、しばしば、セグメント20のサブグリッド分解より微細な粒度である。たとえば、図3の行列Aが、6144x6144要素行列を表す、すなわち、各番号付きのアルゴリズムブロックが、1024x1024個のデータ要素を表すと仮定する。6144x6144行列が、図3Bのように、2048x2048個のcompute_nodesブロックに分解されると仮定する。さらに、Q=4であり、計算ノード121(1)、121(2)、121(3)、および121(4)が、ブロック巡回分解に従って2048x2048ブロック(すなわち、セグメント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)に割り当てられる。メモリを、この例では1044x1024ブロックで移動することができる。したがって、計算が、1024x1024ブロックから単一のデータ要素を移動しようとする場合には、1024x1024ブロック全体が移動される。
アジャイル通信演算子12は、データ並列(DP)アルゴリズムを、アジャイルインデックス可能型18のセグメント20のフルグローバルビュー表現またはローカルグローバルビュー表現を用いてコーディングして、計算ノードの間でのセグメント20の移動を管理することを可能にする。
フルグローバルビュー表現は、水面下で自動的に発生する所有者コピーによるメモリ移動(owner-copy memory movement)とともに、DPアルゴリズムが単一の計算ノード上で実行されようとしているかのようにDPアルゴリズムをコーディングすることを可能にする。行列加算を用いる例として、A、B、およびCが、図3Aに示された6144x6144行列であり、各番号付きのブロックが、1024x1024個のデータ要素を表すと仮定する。AおよびBは、有効なデータを担持するが、Cは、割り当てられるが必ずしもデータを担持しない。さらに、A、B、およびCが、それぞれ計算ノード121(1)〜121(Q)上で割り当てられ、Qは、この場合には4と等しく、A、B、およびCのそれぞれのセグメント20(1)〜20(9)が、それぞれ計算ノード121(1)〜121(Q)上で格納されると仮定する。次の計算
Figure 0006027021
を用いると、各(i,j)は、1024x1024個の要素を表す。
所有者コピーは、回答すなわちCが計算されつつある場合に、必要であればデータが計算ノード121に移動されることを意味する。この例では、AおよびBのブロックは、計算が規定するように、計算ノード121の、Cの対応するブロックが格納されるところに移動される。しかし、単純な行列加算について、AおよびBのブロックが、Cの対応するブロックと同一の計算ノード121上に格納されるので、移動は必要ではない。計算
Figure 0006027021
は、A、B、およびCのそれぞれについて図3Bのブロック8を使用する。ブロック8は、A、B、およびCのそれぞれについて計算ノード121(2)上に格納されるセグメント20(2)の部分であり、したがって、データ移動は発生しない。同様に、次の計算は、対応するセグメント20および計算ノード121上で発生する。
Figure 0006027021
ここで、セグメントは、分解の1要素を指す。
Figure 0006027021
実際には、
Figure 0006027021
であり、ここで、algorithmic_blocksは、広がり1024x1024を有し、memory_blocksは、広がり2048x1024を有し、compute_nodesは、広がり2048x2048を有する。したがって、行列加算は、かなり基本的な例である。
上の仮定を用いるもう1つの例では、Bの転置行列がAに加算されて、次のようにCを生成する。
Figure 0006027021
ここで、各(i,j)は、1024x1024個の要素を表し、B(j,i)は、基礎になる1024x1024ブロックの転置行列である。
この場合に、B(j,i)は、計算ノード121に移動され、ここで、C(i,j)(およびA(i,j))は、セグメント20(1)、20(5)、および20(9)内のブロックを除くすべてのブロックについて格納される。たとえば、セグメント20(1)のブロックは、Cのセグメント20(1)のブロックに関する計算が、
Figure 0006027021
なので、移動される必要がない。しかし、Cのセグメント20(4)のブロックについて、
Figure 0006027021
であり、Bブロックは、計算ノード121(2)上に格納されたセグメント20(2)のブロックからであり、Cブロックは、計算ノード121(4)上に格納されたセグメント20(4)のブロックからである。したがって、Bのブロック2の1024x1024個の要素(すなわち、B(0,2)T)は、計算ノード121(4)に移動され、A(2,0)に加算され、C(2,0)に割り当てられ、Bのブロック8の1024x1024個の要素(すなわち、B(1,2)T)は、計算ノード121(4)に移動され、A(2,1)に加算され、C(2,1)に割り当てられ、Bのブロック3の1024x1024個の要素(すなわち、B(0,3)T)は、計算ノード121(4)に移動され、A(3,0)に加算され、C(3,0)に割り当てられ、Bのブロック9の1024x1024個の要素(すなわち、B(1,3)T)は、計算ノード121(4)に移動され、A(3,1)に加算され、C(3,1)に割り当てられる。
フルグローバルビュー表現を用いると、各ブロックが、どの計算ノード121がそのブロックを格納するのかの情報を担持するので、メモリ移動は、自動的に行われる。計算を、計算ノード121のいずれかまたは、図4に示され下でさらに詳細に説明されるホスト101などのホストから指示することができる。
上の例の他の変形形態では、計算ノード121の個数が、セグメント20の個数未満である場合に、複数のセグメント20を、同一の計算ノード121に割り当てることができる。さらに、計算ノード121の処理能力に重みを付けることができ、より高速の計算ノード121に、より低速の計算ノード121より多数のセグメント20を割り当てることができる。割当を、1つまたは複数の上記で説明したプロトコルに従って実行することができる。
ワークスティール(work−stealing)を使用する自動負荷平衡化を、上記の変形形態で実施することもできる。ある計算ノード121がその計算を完了する時に、その計算ノード121は、他のノード121に割り当てられた計算を盗むことを試みる。計算を指示する計算ノード121またはおそらくはホストは、作業項目のワークスティールキューを格納することができ、ここで、このキューは、所有者行列(たとえば、C)上のメモリ移動粒度(たとえば、1024x1024)の計算を表すタスクを含む。
B転置を伴う上の行列加算の例からのA、B、およびCと、4つの等しい重みを与えられた計算ノード121(1)〜121(4)およびブロック巡回分解プロトコルとに関して、次の4つのワークスティールキューを、次のように格納することができる。
したがって、上の状況、C=A+B、メモリ移動粒度=1024x1024、等しい重みを与えられた4つのマシン(w0=w1=w2=w3=1)、およびブロック巡回分解について、
キュー0は12個のタスクすなわち、セグメント20(1)、20(5)、および20(9)のそれぞれの4つの1024x1024ブロックからなり、
キュー1は8個のタスクすなわち、セグメント20(2)および20(6)のそれぞれの4つの1024x1024ブロックからなり、
キュー2は8個のタスクすなわち、セグメント20(3)および20(7)のそれぞれの4つの1024x1024ブロックからなり、
キュー3は8個のタスクすなわち、セグメント20(4)および20(8)のそれぞれの4つの1024x1024ブロックからなる。
たとえば、キュー2は、タスク
Figure 0006027021
を含む。各計算ノード121は、その対応するワークスティールキューからのすべてのタスクが完了するまで、そのワークスティールキューの最上部からタスクをとる。計算ノード121のワークスティールキューが空である時には、計算ノード121は、別の計算ノード121に対応するワークスティールキューの最下部からタスクを盗む。ローカルグローバルビューは、通常、粒度のalgorithmic_blocksレベルでタイル通信演算子を介して使用可能にされる。規則的なタイル分解を仮定すると、タイル通信演算子は、第1のタイルに適用されて、
Figure 0006027021
を作る。個々のタイルは、
Figure 0006027021
である。所有者コピーが、
Figure 0006027021
に対して開始される時には、含むmemory_blocks[k1]およびcompute_nodes[k2]が決定される。次に、所有者compute_nodes[k3]が決定され、その後、memory_blocks[k1]が、compute_nodes[k2]からcompute_nodes[k3]に移動される。このすべてが、algorithmic_tiles(_tile_index)にアクセスするレベルで行われる。アルゴリズムを実施する時に、要素(または、再帰的に、より微細なブロック)は、
Figure 0006027021
としてアクセスされる。
フルグローバルビュー表現とは対照的に、ローカルグローバルビュー表現は、メモリ移動をユーザによって明示的に指定することを可能にする。上のフルグローバルビュー表現の例では、メモリ移動粒度は、1024x1024ブロックであり、計算ノード121がブロック内の単一の要素にアクセスする場合に、1024x1024ブロック全体が計算ノード121に移動された。
いくつかの計算では、計算の粒度は、メモリ移動粒度より微細であり、ローカルグローバルビュー表現は、すべてのメモリブロックが移動されなければならない場合をユーザが明示的に指示することを超える利点を提供する。たとえば、メモリ移動粒度が、フルグローバルビュー表現の例で2048x1024である、すなわち、ある要素が2つのブロックのいずれかから移動される時はいつでも、2つのブロックが移動されると仮定する。したがって、C=A+Bについて、Cのセグメント20(4)のブロックの計算は、
Figure 0006027021
である。各場合で、Bブロックは、計算ノード121(2)上に格納され、CブロックおよびAブロック(Cが所有者である)は、計算ノード121(4)上に格納される。したがって、上のステートメントの最初の2つは、Bのブロック2の任意の要素(すなわち、B(0,2)T)を計算ノード121(4)に移動しなければならないことを明示的に指示することによって実行される。2048x1024メモリ粒度のゆえに、最初の2つのステートメントの加算を計算ノード121(4)によって実行することを可能とするために、Bのブロック2とブロック8との両方(すなわち、B(0,2)およびB(1,2)T)が、計算ノード121(4)に移動される。同様に、上のステートメントの最後の2つは、Bのブロック3の任意の要素(すなわち、B(0,3)T)を計算ノード121(4)に移動しなければならないことを明示的に指示することによって実行される。2048x1024メモリ粒度のゆえに、、最後の2つのステートメントの加算を計算ノード121(4)によって実行することを可能とするために、Bのブロック3とブロック9との両方(すなわち、B(0,3)およびB(1,3)T)が、計算ノード121(4)に移動される。
これらの例が示すように、計算の粒度を、メモリ移動粒度より微細にすることができ、メモリ移動粒度を、計算ノード粒度より微細にすることができ、その結果、1つまたは複数のアルゴリズムを用いて所与のメモリ移動ブロック上で実行される多数のタスクがあるものとすることができるようになる。ブロックの要素を移動する単一のディレクティブは、ブロック上で動作しつつあるタスクをより効率的に実行することを可能にする。ユーザと実施態様との両方が、指示するアルゴリズムが別のメモリ移動ブロックを操作し始めるまで、メモリブロックを移動する必要があるかどうかを調べるチェックを省略することができ、上からわかるように、algorithmic_blocks分解に対応するタイル通信演算子は、実際に、必要な時にメモリ移動を指示する。1024x1024タイル(たとえば、ブロック3)を移動しなければならない場合には、含まれる2048x1024メモリ移動ブロック(たとえば、メモリ移動ブロック3)が、含まれる2048x2048計算ノードブロック(たとえば、セグメント20(2))から所有者コピーによって判定された2048x2048ブロック(たとえば、セグメント20(4))に移動される。ブロック9が、今移動されなければならない場合には、対応するタイルへのアクセスは、それを含むメモリ移動ブロックをルックアップし、それが既にセグメント20(4)に移動されており、したがって移動は必要ないと判定する。上で示した境界チェックは、正しいメモリ移動がタイル内の実際のデータ要素アクセスの前にタイルレベルで行われているので、省略することができる。すなわち、
Figure 0006027021
は、すべての必要なメモリ移動を生成し、その後、
Figure 0006027021
に、各_local_indexを境界チェックせずにアクセスすることができる。たとえば、上の計算では、メモリ移動ブロックごとに2つのアルゴリズムタスクがある。
実際には、所有者メモリ(たとえば、C)上の所与のメモリブロックに対して実行されるすべての計算を、大きいタスクにグループ化することができ、タスク内の最初のステートメントを、単一のメモリ移動ディレクティブとすることができる。このディレクティブは、一実施形態では、次のようにタスクに対する標準C++注釈の形とすることができる。
Figure 0006027021
この注釈を使用して、コンパイラは、メモリ移動および計算を最適化し、インターリーブすることができる。
次のコードは、一実施形態のアジャイル通信演算子12の実施態様の概要を提供する。
Figure 0006027021
Figure 0006027021
Figure 0006027021
Figure 0006027021
Figure 0006027021
図4は、アジャイル通信演算子12を含むデータ並列コード10をコンパイルし、実行するように構成されたコンピュータシステム100の実施形態を示すブロック図である。
コンピュータシステム100は、1つまたは複数のプロセッサパッケージ(図示せず)内に収容された1つまたは複数の処理要素(PE)102およびメモリシステム104を有するホスト101を含む。コンピュータシステム100は、0個以上の入出力デバイス106、0個以上の表示デバイス108、0個以上の周辺デバイス110、および0個以上のネットワークデバイス112をも含む。コンピュータシステム100は、さらに、1つまたは複数のDP最適計算ノード121を有する計算エンジン120を含み、各DP最適計算ノード121は、1つまたは複数の処理要素(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は、Windows(登録商標)オペレーティングシステムである。他の実施形態では、OS 132は、コンピュータシステム100と共に使用するのに適する別のオペレーティングシステムである。
コンピュータシステムが、コード10をコンパイルするためにコンパイラ134を実行する時に、コンパイラ134は、1つまたは複数の実行可能ファイル、たとえば、1つまたは複数のGP実行可能ファイル136および1つまたは複数のDP実行可能ファイル138を生成する。他の実施形態では、コンパイラ134は、それぞれが1つまたは複数のDP実行可能ファイル138を含む1つまたは複数のGP実行可能ファイル136を生成することができ、または、GP実行可能ファイル136を全く生成せずに1つまたは複数のDP実行可能ファイル138を生成することができる。GP実行可能ファイル136および/またはDP実行可能ファイル138は、コード10のすべてまたは選択された部分をコンパイルするための、データ並列拡張を有するコンパイラ134の呼出しに応答して生成される。この呼出しを、たとえば、プログラマもしくはコンピュータシステム100の他のユーザ、コンピュータシステム100内の他のコード、または別のコンピュータシステム(図示せず)内の他のコードによって生成することができる。
GP実行可能ファイル136は、1つまたは複数の汎用処理要素102(たとえば、CPU(中央処理装置))上での実行を目的としたプログラムを表す。GP実行可能ファイル136は、1つまたは複数の汎用処理要素102の命令セットからの低水準命令を含む。
DP実行可能ファイル138は、1つまたは複数のデータ並列(DP)最適計算ノード121上での実行を目的とされ、そのために最適化されたデータ並列プログラムまたはデータ並列アルゴリズム(たとえば、シェーダ)を表す。一実施形態では、DP実行可能ファイル138は、DP最適計算ノード121上で実行される前にデバイスドライバ(図示せず)を使用してDP最適計算ノード121の命令セットからの低水準命令に変換されるDPバイトコードまたはある他の中間表現(IL)を含む。他の実施形態では、DP実行可能ファイル138は、1つまたは複数のDP最適計算ノード121の命令セットからの低水準命令を含み、この低水準命令は、コンパイラ134によって挿入されたものである。したがって、GP実行可能ファイル136は、1つまたは複数の汎用プロセッサ(たとえば、CPU)によって直接に実行可能であり、DP実行可能ファイル138は、1つまたは複数のDP最適計算ノード121によって直接に実行可能であるか、DP最適計算ノード121の低水準命令に変換された後に1つまたは複数のDP最適計算ノード121によって実行可能であるかのいずれかである。
コンピュータシステム100は、1つまたは複数の処理要素102を使用してGP実行可能ファイル136を実行することができ、コンピュータシステム100は、以下にさらに詳細に説明するように、1つまたは複数のPE 122を使用してDP実行可能ファイル138を実行することができる。
メモリシステム104は、命令およびデータを格納するように構成された、任意の適切なタイプ、個数、および構成の、揮発性のストレージデバイスまたは不揮発性のストレージデバイスを含む。メモリシステム104のストレージデバイスは、OS 132、コード10、コンパイラ134、GP実行可能ファイル136、およびDP実行可能ファイル138を含むコンピュータ実行可能命令(すなわち、ソフトウェア)を格納するコンピュータ可読記憶媒体を表す。命令は、本明細書で説明するように、OS 132、コード10、コンパイラ134、GP実行可能ファイル136、およびDP実行可能ファイル138の関数およびメソッドを実行するために、コンピュータシステム100によって実行可能である。メモリシステム104は、処理要素102、入出力デバイス106、表示デバイス108、周辺デバイス110、ネットワークデバイス112、および計算エンジン120から受け取られる命令およびデータを格納する。メモリシステム104は、格納された命令およびデータを処理要素102、入出力デバイス106、表示デバイス108、周辺デバイス110、ネットワークデバイス112、および計算エンジン120に供給する。メモリシステム104内のストレージデバイスの例は、ハードディスクドライブ、RAM(ランダムアクセスメモリ)、ROM(読取専用メモリ)、フラッシュメモリドライブおよびフラッシュメモリカード、ならびにCDおよびDVDなどの磁気ディスクおよび光ディスクを含む。
入出力デバイス106は、ユーザからコンピュータシステム100に命令またはデータを入力し、コンピュータシステム100からユーザに命令またはデータを出力するように構成された、任意の適切なタイプ、個数、および構成の入出力デバイスを含む。入出力デバイス106の例は、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイヤル、ノブ、およびスイッチを含む。
表示デバイス108は、コンピュータシステム100のユーザにテキスト情報および/またはグラフィカル情報を出力するように構成された、任意の適切なタイプ、個数、および構成の表示デバイスを含む。表示デバイス108の例は、モニタ、ディスプレイスクリーン、およびプロジェクタを含む。
周辺デバイス110は、一般的な処理機能または特定の処理機能を実行するためにコンピュータシステム100内の1つまたは複数の他のコンポーネントと共に動作するように構成された、任意の適切なタイプ、個数、および構成の周辺デバイスを含む。
ネットワークデバイス112は、コンピュータシステム100が1つまたは複数のネットワーク(図示せず)にまたがって通信することを可能にするように構成された、任意の適切なタイプ、個数、および構成のネットワークデバイスを含む。ネットワークデバイス112は、情報をコンピュータシステム100によってネットワークに送信しまたはコンピュータシステム100によってネットワークから受信することを可能にするために、任意の適切なネットワーキングプロトコルおよび/または構成に従って動作することができる。
計算エンジン120は、DP実行可能ファイル138を実行するように構成される。計算エンジン120は、1つまたは複数の計算ノード121を含む。各計算ノード121は、メモリ階層を共有する計算リソースのコレクションである。各計算ノード121は、1つまたは複数のPE 122のセットと、DP実行可能ファイル138を格納するメモリ124とを含む。PE 122は、DP実行可能ファイル138を実行し、DP実行可能ファイル138によって生成された結果をメモリ124に格納する。具体的には、PE 122は、図4に示され、上でさらに詳細に説明されるように、出力インデックス可能型18を生成するために入力インデックス可能型14にアジャイル通信演算子12を適用するためにDP実行可能ファイル138を実行する。
データ並列計算(すなわち、DPプログラムまたはDPアルゴリズムの実行)に最適化されたハードウェアアーキテクチャを有する1つまたは複数の計算リソースを有する計算ノード121を、DP最適計算ノード121と称する。DP最適計算ノード121の例は、PE 122のセットが1つまたは複数のGPUを含むノード121と、PE 122のセットが汎用プロセッサパッケージ内のSIMDユニットのセットを含むノード121とを含む。データ並列計算に最適化されたハードウェアアーキテクチャを有する計算リソースを全く有しない計算ノード121(たとえば、汎用処理要素102だけを有するプロセッサパッケージ)を、非DP最適計算ノード121と称する。各計算ノード121内では、メモリ124を、メモリシステム104とは別々(たとえば、GPUによって使用されるGPUメモリ)またはメモリシステム104の一部(たとえば、汎用プロセッサパッケージ内のSIMDユニットによって使用されるメモリ)とすることができる。
ホスト101は、実行のために計算ノード121にDP実行可能ファイル138を供給し、相互接続114を使用してDP実行可能ファイル138によって生成された結果を受け取るように構成されたホスト計算ノードを形成する。ホスト計算ノードは、メモリ階層(すなわち、メモリシステム104)を共有する汎用計算リソース(すなわち、汎用処理要素102)のコレクションを含む。ホスト計算ノードを、たとえば、SMP(対称型マルチプロセッシングアーキテクチャ)を用いて構成することができ、NUMA(non−uniform memory access)アーキテクチャを使用してメモリシステム104のメモリ局所性を最大化するように構成することもできる。
ホスト計算ノードのOS 132は、DP最適または非DP最適の計算ノード121によってDP実行可能ファイル138を実行させるために、DP呼出し場所を実行するように構成される。メモリ124がメモリシステム104とは別々の実施形態では、ホスト計算ノードは、DP実行可能ファイル138および1つまたは複数のインデックス可能型14をメモリシステム104からメモリ124にコピーさせる。メモリシステム104がメモリ124を含む実施形態では、ホスト計算ノードは、メモリシステム104内のDP実行可能ファイル138および/または1つもしくは複数の入力インデックス可能型14のコピーをメモリ124として指定することができ、かつ/またはDP実行可能ファイル138および/または1つもしくは複数の入力インデックス可能型14をメモリシステム104のある部分からメモリシステム104のうちでメモリ124を形成する別の部分にコピーすることができる。計算ノード121とホスト計算ノードとの間のコピープロセスは、非同期として指定されない限り、同期ポイントとすることができる。
ホスト計算ノードおよび各計算ノード121は、互いに独立してコードを同時に実行することができる。ホスト計算ノードおよび各計算ノード121は、同期ポイントで相互作用して、ノード計算を連携させることができる。
一実施形態では、計算エンジン120は、1つまたは複数のGPU(グラフィックス処理ユニット)がPE 122およびメモリシステム104とは別々のメモリ124を含む、グラフィックスカードを表す。この実施形態では、グラフィックスカードのドライバ(図示せず)は、DP実行可能ファイル138のバイトコードまたはある他の中間表現(IL)を、GPUのPE 122による実行のためにGPUの命令セットに変換することができる。
もう1つの実施形態では、計算エンジン120は、1つまたは複数の汎用処理要素102およびメモリシステム104のうちでメモリ124を含む部分との、プロセッサパッケージ内に含まれる1つまたは複数のGPU(すなわち、PE 122)の組合せから形成される。この実施形態では、追加ソフトウェアをコンピュータシステム100上で提供して、DP実行可能ファイル138のバイトコードまたはある他の中間表現(IL)を、プロセッサパッケージ内のGPUの命令セットに変換することができる。
さらなる実施形態では、計算エンジン120は、処理要素102とメモリシステム104のうちでメモリ124を含む部分とを含むプロセッサパッケージのうちの1つまたは複数内の1つまたは複数のSIMDユニットの組合せから形成される。この実施形態では、追加ソフトウェアをコンピュータシステム100上で提供して、DP実行可能ファイル138のバイトコードまたはある他の中間表現(IL)を、プロセッサパッケージ内のSIMDユニットの命令セットに変換することができる。
もう1つの実施形態では、計算エンジン120は、処理要素102とメモリシステム104のうちでメモリ124を含む部分とを含むプロセッサパッケージのうちの1つまたは複数内の1つまたは複数のスカラ処理パイプラインまたはベクトル処理パイプラインの組合せから形成される。この実施形態では、追加ソフトウェアをコンピュータシステム100上で提供して、DP実行可能ファイル138のバイトコードまたはある他の中間表現(IL)を、プロセッサパッケージ内のスカラ処理パイプラインの命令セットに変換することができる。
特定の実施形態を図示し、本明細書で説明したが、当業者は、さまざまな代替のおよび/または同等の実施態様を、本発明の範囲から逸脱せずに、図示され説明された特定の実施形態と置換できることを了解するであろう。本出願は、本明細書で述べられた特定の実施形態のすべての適合または変形形態を包含することが意図されている。したがって、本発明が、特許請求の範囲およびその同等物のみによって限定されることが意図されている。

Claims (20)

  1. コンピュータシステムによって実行される時に、該コンピュータシステムに、
    特殊目的アーキテクチャを有する1または複数のデータ並列最適化計算ノード上での実行のために構成されたデータ並列ソースコード内のアジャイル通信演算子に応答して、入力インデックス可能型およびリソースマップからアジャイルインデックス可能型を生成するステップであって、前記データ並列ソースコードがデータ並列特徴を含み、該データ並列特徴は前記データ並列最適化計算ノードが有する前記特殊目的アーキテクチャを利用して、データ並列演算を実施可能とし、前記アジャイル通信演算子が、前記データ並列最適化計算ノードにまたがって計算空間を分散させるために、前記リソースマップに基づいてセグメント化した前記計算空間を生成する、ステップと、
    前記アジャイルインデックス可能型を使用してデータ並列アルゴリズムを実行するステップと
    を含む方法を実行させるコンピュータ実行可能命令を格納する、コンピュータ可読記憶媒体。
  2. 前記アジャイルインデックス可能型が、前記リソースマップによって定義される複数のセグメントを有する、請求項1記載のコンピュータ可読記憶媒体。
  3. 請求項1記載のコンピュータ可読記憶媒体であって、前記方法が更に、
    前記1または複数のデータ並列最適化計算ノードのうちの第1の1つ上で前記アジャイルインデックス可能型の第1のセグメントを使用し、また、前記1または複数のデータ並列最適化計算ノードのうちの第2の1つ上で前記アジャイルインデックス可能型の第2のセグメントを使用して、前記データ並列アルゴリズムを実行するステップを含む、コンピュータ可読記憶媒体。
  4. 前記データ並列アルゴリズムが、前記アジャイルインデックス可能型のフルグローバルビュー表現を用いてコーディングされる、請求項1記載のコンピュータ可読記憶媒体。
  5. 前記データ並列アルゴリズムが、前記アジャイルインデックス可能型のローカルグローバルビュー表現を用いてコーディングされる、請求項1記載のコンピュータ可読記憶媒体。
  6. 前記データ並列ソースコードが、データ並列拡張を有するプログラミング言語で記述される、請求項1記載のコンピュータ可読記憶媒体。
  7. 前記データ並列ソースコードが、高水準データ並列プログラミング言語で記述される、請求項1記載のコンピュータ可読記憶媒体。
  8. 前記1または複数のデータ並列最適化計算ノードが、少なくとも1つのグラフィックス処理ユニットを含む、請求項1記載のコンピュータ可読記憶媒体。
  9. 前記1または複数のデータ並列最適化計算ノードが、少なくとも1つの汎用プロセッサを含む、請求項1記載のコンピュータ可読記憶媒体。
  10. コンピュータシステム内でコンパイラによって実行される方法であって、
    特殊目的アーキテクチャを有する1または複数のデータ並列最適化計算ノード上での実行のために構成されたデータ並列ソースコード内のアジャイル通信演算子を識別するステップであって、前記データ並列ソースコードがデータ並列特徴を含み、該データ並列特徴は前記データ並列最適化計算ノードが有する前記特殊目的アーキテクチャを利用して、データ並列演算を実施可能とする、ステップと、
    入力インデックス可能型およびリソースマップからアジャイルインデックス可能型を生成することによって、データ並列実行可能コードが前記アジャイル通信演算子を実装するように、前記データ並列ソースコードから前記データ並列実行可能コードを生成するステップであって、前記アジャイル通信演算子が、前記データ並列最適化計算ノードにまたがって計算空間を分散させるために、前記リソースマップに基づいてセグメント化した前記計算空間を生成する、ステップ
    を含む、方法。
  11. 前記アジャイルインデックス可能型が、前記リソースマップによって定義される複数のセグメントを有する、請求項10記載の方法。
  12. 請求項10記載の方法であって、更に、
    前記1または複数のデータ並列最適化計算ノードのうちの第1の1つ上で前記アジャイルインデックス可能型の第1のセグメントを使用し、また、前記1または複数のデータ並列最適化計算ノードのうちの第2の1つ上で前記アジャイルインデックス可能型の第2のセグメントを使用することによって、前記データ並列実行可能コードが前記アジャイル通信演算子を実装するように、前記データ並列ソースコードから前記データ並列実行可能コードを生成するステップを含む、方法。
  13. 前記データ並列ソースコードが、前記アジャイルインデックス可能型のフルグローバルビュー表現を用いてコーディングされる、請求項10記載の方法。
  14. 前記データ並列ソースコードが、前記アジャイルインデックス可能型のローカルグローバルビュー表現を用いてコーディングされる、請求項10記載の方法。
  15. 前記データ並列ソースコードが、データ並列拡張を有する高水準汎用プログラミング言語で記述される、請求項10記載の方法。
  16. 前記データ並列ソースコードが、高水準データ並列プログラミング言語で記述される、請求項10記載の方法。
  17. 前記1または複数のデータ並列最適化計算ノードが、少なくとも1つのグラフィックス処理ユニットを含む、請求項10記載の方法。
  18. 前記1または複数のデータ並列最適化計算ノードが、少なくとも1つの汎用プロセッサを含む、請求項10記載の方法。
  19. コンピュータシステムによって実行される時に、
    複数のセグメントを有するアジャイルインデックス可能型を生成するリソースマップにしたがって、アジャイル通信演算子を、第1のランクおよび第1の要素型を有する入力インデックス可能型に適用するステップと、
    前記アジャイルインデックス可能型を使用してデータ並列アルゴリズムを実行するステップと
    を含む方法を実行させるコンピュータ実行可能命令を格納し、
    前記アジャイル通信演算子が、データ並列拡張を有する高水準汎用プログラミング言語で記述されるデータ並列ソースコードに含まれ、前記データ並列拡張が、1または複数のデータ並列最適化計算ノードが有する特殊目的アーキテクチャを利用して、データ並列演算を実施可能とし、
    前記アジャイル通信演算子が、前記データ並列最適化計算ノードにまたがって計算空間を分散させるために、前記リソースマップに基づいてセグメント化した前記計算空間を生成する、コンピュータ可読記憶媒体。
  20. 前記データ並列ソースコードが、少なくとも1つのグラフィックス処理ユニットを含む前記1または複数のデータ並列最適化計算ノード上で実行されるように構成される、請求項19記載のコンピュータ可読記憶媒体。
JP2013546346A 2010-12-22 2011-12-20 アジャイル通信演算子 Active JP6027021B2 (ja)

Applications Claiming Priority (3)

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

Publications (3)

Publication Number Publication Date
JP2014504750A JP2014504750A (ja) 2014-02-24
JP2014504750A5 JP2014504750A5 (ja) 2015-02-19
JP6027021B2 true JP6027021B2 (ja) 2016-11-16

Family

ID=46314858

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013546346A Active JP6027021B2 (ja) 2010-12-22 2011-12-20 アジャイル通信演算子

Country Status (8)

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

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7276986B2 (ja) 2019-12-23 2023-05-18 ロジスティード株式会社 折畳み式コンテナ

Families Citing this family (16)

* 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 国际商业机器公司 用于数据查询的方法和系统
US9842152B2 (en) 2014-02-19 2017-12-12 Snowflake Computing, Inc. Transparent discovery of semi-structured data schema
US10545917B2 (en) 2014-02-19 2020-01-28 Snowflake Inc. Multi-range and runtime pruning
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 斑马智行网络(香港)有限公司 一种线程管理方法及装置

Family Cites Families (134)

* 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
WO2001073548A1 (en) 2000-03-28 2001-10-04 Metanology Corporation 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
JP5271494B2 (ja) 2003-06-25 2013-08-21 アビニシオ テクノロジー エルエルシー コンピュータ支援による計算グラフの並列化
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
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 国立大学法人東京工業大学 プログラム処理装置、並列処理プログラム、プログラム処理方法、並列処理コンパイラ、並列処理コンパイラを格納した記録媒体およびマルチプロセッサシステム
US8261270B2 (en) 2006-06-20 2012-09-04 Google Inc. Systems and methods for generating reference results using a parallel-processing computer system
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
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++
JPWO2008072334A1 (ja) * 2006-12-14 2010-03-25 富士通株式会社 コンパイル方法及びコンパイラ
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
EP3413198A1 (en) 2007-04-11 2018-12-12 Apple Inc. Data parallel computing on multiple processors
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
GB0808576D0 (en) * 2008-05-12 2008-06-18 Xmos Ltd Compiling and linking
GB0808575D0 (en) * 2008-05-12 2008-06-18 Xmos Ltd Compilign and linking
US8806426B2 (en) 2008-06-04 2014-08-12 Microsoft Corporation Configurable partitioning of parallel data for parallel processing
US8453134B2 (en) 2008-06-04 2013-05-28 Intel Corporation Improving data locality and parallelism by code replication
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
CA2730149A1 (en) 2008-09-30 2010-04-08 Exxonmobil Upstream Research Company Method for solving reservoir simulation matrix equation using parallel multi-level incomplete factorizations
JP4635082B2 (ja) * 2008-09-30 2011-02-16 株式会社東芝 マルチプロセッサシステム及びグルーピング方法
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
WO2011005881A1 (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
JP5888336B2 (ja) * 2011-10-06 2016-03-22 富士通株式会社 データ処理方法、分散処理システムおよびプログラム
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

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7276986B2 (ja) 2019-12-23 2023-05-18 ロジスティード株式会社 折畳み式コンテナ

Also Published As

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

Similar Documents

Publication Publication Date Title
JP6027021B2 (ja) アジャイル通信演算子
KR101740093B1 (ko) 타일 통신 연산자
CN102541612B (zh) 数据平行代码中的映射变换
JP5957006B2 (ja) 拡張可能なデータ並列セマンティクス
US10282179B2 (en) Nested communication operator
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
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141219

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141219

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150519

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160120

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160420

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160914

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161013

R150 Certificate of patent or registration of utility model

Ref document number: 6027021

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250