"コンピュータシステムによって実行された時に、前記コンピュータシステムに、1つまたは複数のデータ並列計算ノード上での実行のために構成されたデータ並列ソースコード内のアジャイル通信演算子に応答して、入力インデックス可能型およびリソースマップからアジャイルインデックス可能型を生成することと、前記アジャイルインデックス可能型を使用してデータ並列アルゴリズムを実行することとを含む方法を実行させるコンピュータ実行可能命令を格納することを特徴とするコンピュータ可読記憶媒体。アジャイル出力インデックス可能型は、前記リソースマップによって定義される複数のセグメントを有することを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記1つまたは複数のデータ並列計算ノードのうちの第1の1つのデータ並列計算ノード上で前記アジャイルインデックス可能型の第1のセグメントを、前記1つまたは複数のデータ並列計算ノードのうちの第2の1つのデータ並列計算ノード上で前記アジャイルインデックス可能型の第2のセグメントを使用して、前記データ並列アルゴリズムを実行することをさらに含むことを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記データ並列アルゴリズムは、前記アジャイルインデックス可能型のフルグローバルビュー表現を用いてコーディングされることを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記データ並列アルゴリズムは、前記アジャイルインデックス可能型のローカルグローバルビュー表現を用いてコーディングされることを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記データ並列ソースコードは、データ並列拡張を有するプログラミング言語で記述されることを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記データ並列ソースコードは、高水準データ並列プログラミング言語で記述されることを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記1つまたは複数のデータ並列計算ノードは、少なくとも1つのグラフィックス処理ユニットを含むことを特徴とする請求項1に記載のコンピュータ可読記憶媒体。前記1つまたは複数のデータ並列計算ノードは、少なくとも1つの汎用プロセッサを含むことを特徴とする請求項1に記載のコンピュータ可読記憶媒体。コンピュータシステム内でコンパイラによって実行される方法であって、1つまたは複数のデータ並列計算ノード上での実行のために構成されたデータ並列ソースコード内のアジャイル通信演算子を識別することと、入力インデックス可能型およびリソースマップからアジャイルインデックス可能型を生成することによって、データ並列実行可能コードが前記アジャイル通信演算子を実装するように、前記データ並列ソースコードから前記データ並列実行可能コードを生成することとを含むことを特徴とする方法。アジャイル出力インデックス可能型は、前記リソースマップによって定義される複数のセグメントを有することを特徴とする請求項10に記載の方法。前記1つまたは複数のデータ並列計算ノードのうちの第1の1つのデータ並列計算ノード上で前記アジャイルインデックス可能型の第1のセグメントを、前記1つまたは複数のデータ並列計算ノードのうちの第2の1つのデータ並列計算ノード上で前記アジャイルインデックス可能型の第2のセグメントを使用することによって、前記データ並列実行可能コードが前記アジャイル通信演算子を実装するように、前記データ並列ソースコードから前記データ並列実行可能コードを生成することをさらに含むことを特徴とする請求項10に記載の方法。前記データ並列ソースコードは、前記アジャイルインデックス可能型のフルグローバルビュー表現を用いてコーディングされることを特徴とする請求項10に記載の方法。前記データ並列ソースコードは、前記アジャイルインデックス可能型のローカルグローバルビュー表現を用いてコーディングされることを特徴とする請求項10に記載の方法。前記データ並列ソースコードは、データ並列拡張を有する高水準汎用プログラミング言語および高水準データ並列プログラミング言語のうちの1つで記述されることを特徴とする請求項10に記載の方法。次の詳細な説明では、添付図面を参照し、添付図面は、本明細書の一部を形成し、添付図面には、本発明を実践できる特定の実施形態が例として示されている。これに関して、最上部、最下部、前、後、前端、後端、その他などの方向用語が、説明される図面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、VisualBasic、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、PGIGPGPUAccelerator、CAPSGPGPUAccelerator、Brook、CAL、APL、Fortran90および上位、DataParallelC、DAPPLE、またはAPLなどの既存のDPプログラミング言語とすることができる。コード10は、この実施形態では、アプリケーション、ライブラリ関数、またはオペレーティングシステムサービスなど、任意の適切なタイプのDPソースコードを表すことができる。コード10は、DP最適計算ノードでの実行のために指定されたコード部分を含む。コード10がGP言語を用いて記述される図1の実施形態では、GP言語は、プログラマが、ベクトル関数を定義する時に注釈26たとえば、__declspecvector...を使用して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つまたは複数を定義する。他の実施形態では、演算子を、関数、ファンクタ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は、アジャイルインデックス可能型181を生成し、使用する例を示すブロック図である。図3A~3Cの例では、アジャイル通信演算子12は、対応するリソースマップ16図2に図示によって指定されるように、0から35までの番号を付けられた要素を有する6x6行列すなわち、入力インデックス可能型141を、図3Bに示されたアジャイルインデックス可能型181内の9つのセグメント20に区分する。各セグメント20は、図3Bでは異なる陰付けによって表される。たとえば、第1のセグメント201は、要素0、1、6、および7を含み、第2のセグメント202は、要素2、3、8、および9を含むなどである。また、アジャイル通信演算子12は、リソースマップ16内のプロトコルによって指定され、図3Cの矢印によって示されるように、セグメント201~209を、1つまたは複数の計算ノード1211~121Qの集合に割り当てさせ、ここで、Qは、1以上の整数である。リソースマップ18は、ブロック分解、巡回分解cyclicdecomposition、ブロックブロック分解、またはブロック巡回分解など、任意の適切な割当プロトコルを組み込むことができる。次のプロトコル例は、3つの計算ノード1211~1213すなわち、Q=3または4つの計算ノード1211~1214すなわち、Q=4があり、セグメント20が、第1のすなわち、最上部の行から始めて行を横切って左から右へ201~209の番号を付けられると仮定する。行ブロック分解およびQ=3について、入力インデックス可能型141の36個の要素は、3つに分割され、各計算ノード121が12個の要素を割り当てられるようになる。したがって、リソースマップ18は、要素0から11まですなわち、セグメント201~203を計算ノード1211に割り当てさせ、要素12から23まですなわち、セグメント204~206を計算ノード1212に割り当てさせ、要素24から35まですなわち、セグメント207~209を計算ノード1213に割り当てさせる。行ブロック分解およびQ=4について、入力インデックス可能型141の36個の要素は、4つに分割され、各計算ノード121が9つの要素を割り当てられるようになる。したがって、リソースマップ18は、要素0から8までを計算ノード1211に割り当てさせ、要素9から17までを計算ノード1212に割り当てさせ、要素18から26までを計算ノード1213に割り当てさせ、要素27から36までを計算ノード1214に割り当てさせる。列ブロック分解およびQ=3について、リソースマップ18は、セグメント20の第1の列および第2の列すなわち、セグメント201、204、および207を計算ノード1211に割り当てさせ、セグメント20の第3の列および第4の列すなわち、セグメント202、205、および208を計算ノード1212に割り当てさせ、セグメント20の第5の列および第6の列すなわち、セグメント203、206、および209を計算ノード1213に割り当てさせる。行巡回分解およびQ=3について、リソースマップ18は、要素3kただし、k=0から11までを計算ノード1211に割り当てさせ、要素3k1を計算ノード1212に割り当てさせ、要素3k2を計算ノード1213に割り当てさせる。行巡回分解およびQ=4について、リソースマップ18は、要素4kただし、k=0から8までを計算ノード1211に割り当てさせ、要素4k1を計算ノード1212に割り当てさせ、要素4k2を計算ノード1213に割り当てさせ、要素4k3を計算ノード1214に割り当てさせる。行ブロック巡回分解およびQ=3について、分解は、図3Bに示されたセグメント201~209に対する巡回分解である。したがって、リソースマップ18は、セグメント201、204、および207を計算ノード1211に割り当てさせ、セグメント202、205、および208を計算ノード1212に割り当てさせ、セグメント203、206、および209を計算ノード1213に割り当てさせる。行ブロック巡回分解およびQ=4について、リソースマップ18は、セグメント201、205、および209を計算ノード1211に割り当てさせ、セグメント202および206を計算ノード1212に割り当てさせ、セグメント203および207を計算ノード1213に割り当てさせ、セグメント204および208を計算ノード1214に割り当てさせる。行ブロックブロック分解およびQ=3について、リソースマップ18は、セグメント201~203を計算ノード1211に割り当てさせ、セグメント204~206を計算ノード1212に割り当てさせ、セグメント207~209を計算ノード1213に割り当てさせる。リソースマップ16の行分解または列分解の判断を、メモリレイアウトに依存するものとすることができる。たとえば、列優先メモリレイアウトは、適切なプロトコルを使用する列分解を暗示することができる。一実施形態では、リソースマップ16は、リソースセグメントの集合を含み、各リソースセグメントは、セグメント20をリソースビューすなわち、計算ノードの抽象化図示せずに関連付ける。たとえば、によって定義されるインデックス可能型14について、grid<rank>は、2つのデータメンバを含む。たとえば、図3Bの第2のセグメント202、形状またはグリッドは、_M_extent={2,2}および_M_offset={0,1}を有し、第6セグメント206は、_M_extent={2,2}および_M_offset={1,2}を有する。したがって、parent_gridを、を使用して分解することができ、ここで、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と呼ばれるクラスを生成することができる。アジャイル通信演算子12を使用して、アジャイルインデックス可能型18のデータに、そのデータが現在常駐している計算ノードの知識をユーザが有することなくシームレスにアクセスすることができる。形状parent_gridを有する例のインデックス可能型14Aについて、Aのストレージは、resource_segmentのインスタンスによって判定される。にあるAの要素にアクセスするために、_Indexを含む子グリッドが、まず見つけられ、次に、オフセットが、になるように決定される。resource_segment表記を用いると、この関係は、である。ルックアップの速度を高めるために、次のチェックを実行して、_Index_Indexが変化するのでがまだ_Resource_segment._M_childに属するかどうかを判定する。所与の_Indexが属する子グリッドまたは_Resource_segmentの判定は、分解パターンに依存する。ワーストケースで、すべての次元での二分検索を使用することができるが、回避することはできない。しかし、たとえば、すべてのタイルが等しい広がりを有する2048x2048タイル分解を用いて、_M_child._M_offsetがと等しい_Resource_segmentを見つけられたい。その_Resource_segmentすなわち、現在のresource_segmentは、に違反するまで使用することができ、これに違反した場合には、新しい_Indexを_Tileによってもう一度分割し、繰り返されたい。この機構は、新しい含むresource_segmentsが低い頻度で見つけられることだけを必要とする、局所性を有するアルゴリズムについて、最適である可能性がある。以下に説明されるローカルグローバルビュー表現では、ユーザインデックス演算子は、ユーザがすべてのアクセスの際に境界内にあると信頼されるので、ifチェック本明細書では境界チェックと称するを省略することができる。所与のresource_segmentが使い果たされ、別のresource_segmentが使用される場合には、ユーザは、現在のresource_segmentをリセットする関数を呼び出すと信頼される。ローカルグローバルビューの最も単純な形では、3つの分解のすべてが、同一のサイズのブロックまたはタイルを有して規則的である。インデックス可能型をタイルに区分するタイル通信演算子を、最初の分解に適応して、を得ることができる。含まれる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であり、計算ノード1211、1212、1213、および1214が、ブロック巡回分解に従って2048x2048ブロックすなわち、セグメント201~209に割り当てられると仮定する。その後、セグメント201、205、209は、計算ノード1211に割り当てられ、セグメント202、206は、計算ノード1212に割り当てられ、セグメント203および207は、計算ノード1213に割り当てられ、セグメント204および208は、計算ノード1214に割り当てられる。メモリを、この例では1044x1024ブロックで移動することができる。したがって、計算が、1024x1024ブロックから単一のデータ要素を移動しようとする場合には、1024x1024ブロック全体が移動される。アジャイル通信演算子12は、データ並列DPアルゴリズムを、アジャイルインデックス可能型18のセグメント20のフルグローバルビュー表現またはローカルグローバルビュー表現を用いてコーディングして、計算ノードの間でのセグメント20の移動を管理することを可能にする。フルグローバルビュー表現は、水面下で自動的に発生する所有者コピーによるメモリ移動ownercopymemorymovementとともに、DPアルゴリズムが単一の計算ノード上で実行されようとしているかのようにDPアルゴリズムをコーディングすることを可能にする。行列加算を用いる例として、A、B、およびCが、図3Aに示された6144x6144行列であり、各番号付きのブロックが、1024x1024個のデータ要素を表すと仮定する。AおよびBは、有効なデータを担持するが、Cは、割り当てられるが必ずしもデータを担持しない。さらに、A、B、およびCが、それぞれ計算ノード1211~121Q上で割り当てられ、Qは、この場合には4と等しく、A、B、およびCのそれぞれのセグメント201~209が、それぞれ計算ノード1211~121Q上で格納されると仮定する。次の計算を用いると、各i,jは、1024x1024個の要素を表す。所有者コピーは、回答すなわちCが計算されつつある場合に、必要であればデータが計算ノード121に移動されることを意味する。この例では、AおよびBのブロックは、計算が規定するように、計算ノード121の、Cの対応するブロックが格納されるところに移動される。しかし、単純な行列加算について、AおよびBのブロックが、Cの対応するブロックと同一の計算ノード121上に格納されるので、移動は必要ではない。計算は、A、B、およびCのそれぞれについて図3Bのブロック8を使用する。ブロック8は、A、B、およびCのそれぞれについて計算ノード1212上に格納されるセグメント202の部分であり、したがって、データ移動は発生しない。同様に、次の計算は、対応するセグメント20および計算ノード121上で発生する。ここで、セグメントは、分解の1要素を指す。実際には、であり、ここで、algorithmic_blocksは、広がり1024x1024を有し、memory_blocksは、広がり2048x1024を有し、compute_nodesは、広がり2048x2048を有する。したがって、行列加算は、かなり基本的な例である。上の仮定を用いるもう1つの例では、Bの転置行列がAに加算されて、次のようにCを生成する。ここで、各i,jは、1024x1024個の要素を表し、Bj,iTは、基礎になる1024x1024ブロックの転置行列である。この場合に、Bj,iは、計算ノード121に移動され、ここで、Ci,jおよびAi,jは、セグメント201、205、および209内のブロックを除くすべてのブロックについて格納される。たとえば、セグメント201のブロックは、Cのセグメント201のブロックに関する計算が、なので、移動される必要がない。しかし、Cのセグメント204のブロックについて、であり、Bブロックは、計算ノード1212上に格納されたセグメント202のブロックからであり、Cブロックは、計算ノード1214上に格納されたセグメント204のブロックからである。したがって、Bのブロック2の1024x1024個の要素すなわち、B0,2Tは、計算ノード1214に移動され、A2,0に加算され、C2,0に割り当てられ、Bのブロック8の1024x1024個の要素すなわち、B1,2Tは、計算ノード1214に移動され、A2,1に加算され、C2,1に割り当てられ、Bのブロック3の1024x1024個の要素すなわち、B0,3Tは、計算ノード1214に移動され、A3,0に加算され、C3,0に割り当てられ、Bのブロック9の1024x1024個の要素すなわち、B1,3Tは、計算ノード1214に移動され、A3,1に加算され、C3,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つの等しい重みを与えられた計算ノード1211~1214およびブロック巡回分解プロトコルとに関して、次の4つのワークスティールキューを、次のように格納することができる。したがって、上の状況、C=ABT、メモリ移動粒度=1024x1024、等しい重みを与えられた4つのマシンw0=w1=w2=w3=1、およびブロック巡回分解について、キュー0は12個のタスクすなわち、セグメント201、205、および209のそれぞれの4つの1024x1024ブロックからなり、キュー1は8個のタスクすなわち、セグメント202および206のそれぞれの4つの1024x1024ブロックからなり、キュー2は8個のタスクすなわち、セグメント203および207のそれぞれの4つの1024x1024ブロックからなり、キュー3は8個のタスクすなわち、セグメント204および208のそれぞれの4つの1024x1024ブロックからなる。たとえば、キュー2は、タスクを含む。各計算ノード121は、その対応するワークスティールキューからのすべてのタスクが完了するまで、そのワークスティールキューの最上部からタスクをとる。計算ノード121のワークスティールキューが空である時には、計算ノード121は、別の計算ノード121に対応するワークスティールキューの最下部からタスクを盗む。ローカルグローバルビューは、通常、粒度のalgorithmic_blocksレベルでタイル通信演算子を介して使用可能にされる。規則的なタイル分解を仮定すると、タイル通信演算子は、第1のタイルに適用されて、を作る。個々のタイルは、である。所有者コピーが、に対して開始される時には、含むmemory_blocks[k1]およびcompute_nodes[k2]が決定される。次に、所有者compute_nodes[k3]が決定され、その後、memory_blocks[k1]が、compute_nodes[k2]からcompute_nodes[k3]に移動される。このすべてが、algorithmic_tiles_tile_indexにアクセスするレベルで行われる。アルゴリズムを実施する時に、要素または、再帰的に、より微細なブロックは、としてアクセスされる。フルグローバルビュー表現とは対照的に、ローカルグローバルビュー表現は、メモリ移動をユーザによって明示的に指定することを可能にする。上のフルグローバルビュー表現の例では、メモリ移動粒度は、1024x1024ブロックであり、計算ノード121がブロック内の単一の要素にアクセスする場合に、1024x1024ブロック全体が計算ノード121に移動された。いくつかの計算では、計算の粒度は、メモリ移動粒度より微細であり、ローカルグローバルビュー表現は、すべてのメモリブロックが移動されなければならない場合をユーザが明示的に指示することを超える利点を提供する。たとえば、メモリ移動粒度が、フルグローバルビュー表現の例で2048x1024である、すなわち、ある要素が2つのブロックのいずれかから移動される時はいつでも、2つのブロックが移動されると仮定する。したがって、C=ABTについて、Cのセグメント204のブロックの計算は、である。各場合で、Bブロックは、計算ノード1212上に格納され、CブロックおよびAブロックCが所有者であるは、計算ノード1214上に格納される。したがって、上のステートメントの最初の2つは、Bのブロック2の任意の要素すなわち、B0,2Tを計算ノード1214に移動しなければならないことを明示的に指示することによって実行される。2048x1024メモリ粒度のゆえに、最初の2つのステートメントの加算を計算ノード1214によって実行することを可能とするために、Bのブロック2とブロック8との両方すなわち、B0,2TおよびB1,2Tが、計算ノード1214に移動される。同様に、上のステートメントの最後の2つは、Bのブロック3の任意の要素すなわち、B0,3Tを計算ノード1214に移動しなければならないことを明示的に指示することによって実行される。2048x1024メモリ粒度のゆえに、、最後の2つのステートメントの加算を計算ノード1214によって実行することを可能とするために、Bのブロック3とブロック9との両方すなわち、B0,3TおよびB1,3Tが、計算ノード1214に移動される。これらの例が示すように、計算の粒度を、メモリ移動粒度より微細にすることができ、メモリ移動粒度を、計算ノード粒度より微細にすることができ、その結果、1つまたは複数のアルゴリズムを用いて所与のメモリ移動ブロック上で実行される多数のタスクがあるものとすることができるようになる。ブロックの要素を移動する単一のディレクティブは、ブロック上で動作しつつあるタスクをより効率的に実行することを可能にする。ユーザと実施態様との両方が、指示するアルゴリズムが別のメモリ移動ブロックを操作し始めるまで、メモリブロックを移動する必要があるかどうかを調べるチェックを省略することができ、上からわかるように、algorithmic_blocks分解に対応するタイル通信演算子は、実際に、必要な時にメモリ移動を指示する。1024x1024タイルたとえば、ブロック3を移動しなければならない場合には、含まれる2048x1024メモリ移動ブロックたとえば、メモリ移動ブロック3が、含まれる2048x2048計算ノードブロックたとえば、セグメント202から所有者コピーによって判定された2048x2048ブロックたとえば、セグメント204に移動される。ブロック9が、今移動されなければならない場合には、対応するタイルへのアクセスは、それを含むメモリ移動ブロックをルックアップし、それが既にセグメント204に移動されており、したがって移動は必要ないと判定する。上で示した境界チェックは、正しいメモリ移動がタイル内の実際のデータ要素アクセスの前にタイルレベルで行われているので、省略することができる。すなわち、は、すべての必要なメモリ移動を生成し、その後、に、各_local_indexを境界チェックせずにアクセスすることができる。たとえば、上の計算では、メモリ移動ブロックごとに2つのアルゴリズムタスクがある。実際には、所有者メモリたとえば、C上の所与のメモリブロックに対して実行されるすべての計算を、大きいタスクにグループ化することができ、タスク内の最初のステートメントを、単一のメモリ移動ディレクティブとすることができる。このディレクティブは、一実施形態では、次のようにタスクに対する標準C注釈の形とすることができる。この注釈を使用して、コンパイラは、メモリ移動および計算を最適化し、インターリーブすることができる。次のコードは、一実施形態のアジャイル通信演算子12の実施態様の概要を提供する。図4は、アジャイル通信演算子12を含むデータ並列コード10をコンパイルし、実行するように構成されたコンピュータシステム100の実施形態を示すブロック図である。コンピュータシステム100は、1つまたは複数のプロセッサパッケージ図示せず内に収容された1つまたは複数の処理要素PE102およびメモリシステム104を有するホスト101を含む。コンピュータシステム100は、0個以上の入出力デバイス106、0個以上の表示デバイス108、0個以上の周辺デバイス110、および0個以上のネットワークデバイス112をも含む。コンピュータシステム100は、さらに、1つまたは複数のDP最適計算ノード121を有する計算エンジン120を含み、各DP最適計算ノード121は、1つまたは複数の処理要素PE122のセットと、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は、OS132をブートし、実行する。OS132は、コンピュータシステム100のコンポーネントを管理し、プログラムがコンポーネントにアクセスし、これを使用することを可能にする機能のセットを提供するために、処理要素によって実行可能な命令を含む。一実施形態では、OS132は、Windows登録商標オペレーティングシステムである。他の実施形態では、OS132は、コンピュータシステム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つまたは複数のPE122を使用してDP実行可能ファイル138を実行することができる。メモリシステム104は、命令およびデータを格納するように構成された、任意の適切なタイプ、個数、および構成の、揮発性のストレージデバイスまたは不揮発性のストレージデバイスを含む。メモリシステム104のストレージデバイスは、OS132、コード10、コンパイラ134、GP実行可能ファイル136、およびDP実行可能ファイル138を含むコンピュータ実行可能命令すなわち、ソフトウェアを格納するコンピュータ可読記憶媒体を表す。命令は、本明細書で説明するように、OS132、コード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つまたは複数のPE122のセットと、DP実行可能ファイル138を格納するメモリ124とを含む。PE122は、DP実行可能ファイル138を実行し、DP実行可能ファイル138によって生成された結果をメモリ124に格納する。具体的には、PE122は、図4に示され、上でさらに詳細に説明されるように、出力インデックス可能型18を生成するために入力インデックス可能型14にアジャイル通信演算子12を適用するためにDP実行可能ファイル138を実行する。データ並列計算すなわち、DPプログラムまたはDPアルゴリズムの実行に最適化されたハードウェアアーキテクチャを有する1つまたは複数の計算リソースを有する計算ノード121を、DP最適計算ノード121と称する。DP最適計算ノード121の例は、PE122のセットが1つまたは複数のGPUを含むノード121と、PE122のセットが汎用プロセッサパッケージ内のSIMDユニットのセットを含むノード121とを含む。データ並列計算に最適化されたハードウェアアーキテクチャを有する計算リソースを全く有しない計算ノード121たとえば、汎用処理要素102だけを有するプロセッサパッケージを、非DP最適計算ノード121と称する。各計算ノード121内では、メモリ124を、メモリシステム104とは別々たとえば、GPUによって使用されるGPUメモリまたはメモリシステム104の一部たとえば、汎用プロセッサパッケージ内のSIMDユニットによって使用されるメモリとすることができる。ホスト101は、実行のために計算ノード121にDP実行可能ファイル138を供給し、相互接続114を使用してDP実行可能ファイル138によって生成された結果を受け取るように構成されたホスト計算ノードを形成する。ホスト計算ノードは、メモリ階層すなわち、メモリシステム104を共有する汎用計算リソースすなわち、汎用処理要素102のコレクションを含む。ホスト計算ノードを、たとえば、SMP対称型マルチプロセッシングアーキテクチャを用いて構成することができ、NUMAnon-uniformmemoryaccessアーキテクチャを使用してメモリシステム104のメモリ局所性を最大化するように構成することもできる。ホスト計算ノードのOS132は、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グラフィックス処理ユニットがPE122およびメモリシステム104とは別々のメモリ124を含む、グラフィックスカードを表す。この実施形態では、グラフィックスカードのドライバ図示せずは、DP実行可能ファイル138のバイトコードまたはある他の中間表現ILを、GPUのPE122による実行のためにGPUの命令セットに変換することができる。もう1つの実施形態では、計算エンジン120は、1つまたは複数の汎用処理要素102およびメモリシステム104のうちでメモリ124を含む部分との、プロセッサパッケージ内に含まれる1つまたは複数のGPUすなわち、PE122の組合せから形成される。この実施形態では、追加ソフトウェアをコンピュータシステム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を、プロセッサパッケージ内のスカラ処理パイプラインの命令セットに変換することができる。特定の実施形態を図示し、本明細書で説明したが、当業者は、さまざまな代替のおよび/または同等の実施態様を、本発明の範囲から逸脱せずに、図示され説明された特定の実施形態と置換できることを了解するであろう。本出願は、本明細書で述べられた特定の実施形態のすべての適合または変形形態を包含することが意図されている。したがって、本発明が、特許請求の範囲およびその同等物のみによって限定されることが意図されている。"