"コンピューターシステムによって実行されるとき、一つ以上のデータ並列計算ノード上での実行のために構成されたデータ並列処理ソースコード中のタイルコミュニケーションオペレーターに応答して、入力インデックスタイプから出力インデックスタイプを生成し、前記出力インデックスタイプを用いてデータ並列処理アルゴリズムを実施する手順を前記コンピューターシステムに実行させるコンピューター実行可能命令を記録したことを特徴とするコンピューター読み取り可能な記録媒体。前記入力インデックスタイプはランク及び第1のエレメントタイプを有し、前記出力インデックスタイプは、前記ランク及び前記入力インデックスタイプのタイルである第2のエレメントタイプを有することを特徴とする請求項1記載のコンピューター読み取り可能な記録媒体。前記入力インデックスタイプはランク及び第1の形状を有し、前記出力インデックスタイプは、前記ランク及び前記入力インデックスタイプのタイルである第2の形状を有することを特徴とする請求項1記載のコンピューター読み取り可能な記録媒体。前記出力インデックスタイプは、前記一つ以上のデータ並列計算ノードの実行構造体にマッピングされていることを特徴とする請求項1記載のコンピューター読み取り可能な記録媒体。前記出力インデックスタイプは、前記一つ以上のデータ並列計算ノードにおける、前記入力インデックスタイプのローカルビューストラクチャを提供することを特徴とする請求項1記載のコンピューター読み取り可能な記録媒体。データ並列処理ソースコードは、データ並列処理拡張機能を有するプログラミング言語で記述されていることを特徴とする請求項1記載のコンピューター読み取り可能な記録媒体。前記一つ以上のデータ並列計算ノードは、少なくとも一つのグラフィックプロセッシングユニットを含むことを特徴とする請求項1記載のコンピューター読み取り可能な記録媒体。前記一つ以上のデータ並列計算ノードは、少なくとも一つの汎用プロセッサを含むことを特徴とする請求項1記載のコンピューター読み取り可能な記録媒体。コンピューターシステムにおいてコンパイラが実施する方法であって、前記方法は、一つ以上のデータ並列計算ノード上での実行のために構成されたデータ並列処理ソースコードのタイルコミュニケーションオペレーターを特定し、前記データ並列処理ソースコードから、入力インデックスタイプを出力インデックスタイプに分割することによってタイルコミュニケーションオペレーターを実装するデータ並列処理実行コードを生成することを備えることを特徴とする方法。前記入力インデックスタイプはランク及び第1のエレメントタイプを有し、前記出力インデックスタイプは、前記ランク及び前記入力インデックスタイプのタイルである第2のエレメントタイプを有することを特徴とする請求項9記載の方法。前記入力インデックスタイプはランク及び第1の形状を有し、前記出力インデックスタイプは、前記ランク及び前記入力インデックスタイプのタイルである第2の形状を有することを特徴とする請求項9記載の方法。前記出力インデックスタイプは、前記一つ以上のデータ並列計算ノードの実行構造体にマッピングされていることを特徴とする請求項9記載の方法。前記出力インデックスタイプは、前記1つ以上のデータ並列計算ノードにおける、前記入力インデックスタイプのローカルビューストラクチャを提供することを特徴とする請求項9記載の方法。コンピューターシステムによって実行されるとき、タイルコミュニケーションオペレーターを適用して、ランク及び第1のエレメントタイプを有する入力インデックスタイプを、前記ランク及び前記入力インデックスタイプのタイルである第2のエレメントタイプを有する出力インデックスタイプに分解することと、前記入力インデックスタイプに対して、前記出力インデックスタイプを用いてデータ並列処理アルゴリズムを実施することを備える方法を前記コンピューターシステムに実行させるコンピューター実行可能命令を記録したコンピューター読み取り可能な記録媒体であって、前記タイルコミュニケーションオペレーターは、データ並列処理拡張機能を有する高水準汎用プログラミング言語で記述された前記データ並列処理ソースコードに含まれており、前記出力インデックスタイプは、前記データ並列処理アルゴリズムを実行するように構成された1つ以上のデータ並列計算ノードの実行構造体にマッピングされ、1つ以上の前記データ並列計算ノードは少なくとも1つのグラフィックプロセッシングユニットを含むことを特徴とするコンピューター読み取り可能な記録媒体。前記第1のエレメントタイプは第1の形状を有し、前記第2のエレメントタイプは、タイルである第2の形状を有することを特徴とする請求項14記載のコンピューター読み取り可能な記録媒体。計算機型線形代数computationallinearalgebraにおける一般的な技術として、計算上の空間が、サブスペースに分割され、各タイル又はブロックをポイントであるかのように処理することによってアルゴリズムが再帰的に実装される、タイル又はブロック分割アルゴリズムがある。そのような分割においては、しかしながら、インデックス群の詳細なトラッキングが必要であり、また、タイル及びブロックの相対的な位置関係の把握も必要とされる。その結果、インデックスの作成及び位置関係の処理においては、エラーが発生しやすく、実装が難しい。本要約は、簡潔化された形式で選択されたコンセプト群を紹介するものであり、下記の発明を実施するための形態においてより詳細に説明される。本要約は、特許請求の範囲に記載された事項の主要な機能や本質的な機能を明らかにするためのものではなく、請求項に記載された事項の範囲を限定するために用いられるものでもない。高級プログラミング言語によって、計算上の空間を、データ並列計算ノードにおける実行構造体executionstructure例えば、スレッドグループにマッピングされたサブスペースすなわち、タイルに分割するタイルコミュニケーションオペレーターを提供する。ランクrankとエレメントタイプelementtypeを有するインデックスタイプindexabletypeは、計算上の空間を定義する。入力インデックスタイプinputindexabletypeに対し、タイルコミュニケーションオペレーターは、入力インデックスタイプと同じランクと入力インデックスタイプのタイルであるエレメントタイプを有する出力インデックスタイプoutputindexabletypeを生成する。出力インデックスタイプは、データ並列計算ノードにおいて、グローバルメモリアクセスにおけるコアレッシングcoalescingを実現する計算上の空間におけるローカルビューストラクチャを提供する。次の詳細な説明において、本明細書の一部を形成し、本発明が実行されうる例示的な実施形態によって示される添付図面を参照する。本明細書において、上top、下bottom、前front、後ろback、先頭のleading、後続のtrailing等の方向を示すための用語が、開示される図面の向きを示す言葉として用いられている。実施形態におけるコンポーネントは様々な異なる形態で配置可能であるから、方向を示すための用語が図示するために用いられているが、限定されて解釈されうるものではない。本発明の範囲を逸脱せずに、その他の実施形態が採用され得ること、構造的又は論理的な変更がされ得ることを留意されたい。したがって、以下の詳細な説明は、限定して解釈されるものではなく、本発明の範囲は添付された書面における、特許請求の範囲によって定義されるべきである。本明細書において開示される様々な実施例の機能は、特に限定のない限り、それぞれ組み合わされ得ることに留意されたい。図1は、タイルコミュニケーションオペレーター12のコード10の実施形態を表すコンピュータコード図である。コンパイルされ実行される際に、タイルコミュニケーションオペレーター12は、計算上の空間図1の実施形態においてindexable_type<N,T>として表されるを、extentとして定義される図1の実施形態において_Extentとして表されるサブスペースすなわち、タイルに分解する。タイルは、例えば、図5におけるDP最適化コンピューターノード121や以下に詳説されるデータ並列DP最適化コンピューターノードの実行構造体executionstructure例えば、スレッドグループDirectX,スレッドブロックCUDA,ワークグループOpenCL,又はwavesAND/ATI等にマッピングされうる。コード10は、高水準汎用プログラミング言語、又は、データ並列プログラミング言語一つ以上のデータ並列DP最適化コンピューターノード例えば、図5におけるDP最適化コンピューターノード121による実行のために一つ以上の実行可能ファイル例えば、DP実行可能ファイル138にコンパイルされうるで記述された一連の処理命令を含む。ある実施形態においては、コード10は、一つ以上のモジュールのセットに保存されるプログラムを構成する、データ並列処理拡張機能を有する高水準汎用プログラミング言語以下、GP言語という。からの一連の処理命令を含む。GP言語においては、プログラムを異なるパーツ例えば、モジュールに分けて記述することが許容され、それぞれのモジュールは、コンピューターシステムがアクセスし得る、それぞれ異なるファイル又は場所に保存されても良い。GP言語は、一つ以上の汎用プロセッサ及び一つ以上の専用のDP最適化コンピューターノードの両方を含むコンピューター環境をプログラミングするための唯一の言語である。DP最適化コンピューターノードは、一般的にグラフィックプロセッシングユニットGPU又は汎用プロセッサのSIMDユニットであるが、汎用プロセッサのスカラまたはベクタ実行ユニットや、フィールドプログラマブルゲートアレイFPGA、その他特定のコンピューター実行環境において最適なデバイスであっても良い。GP言語を利用して、プログラマは、汎用プロセッサ又はDPコンピューターノードそれぞれによる実行のために、汎用プロセッサ及びDP両方のソースコードをコード10に含めることができ、汎用プロセッサ及びDPソースコードの実行を協働させることができる。本実施形態においては、コード10は、アプリケーション、ライブラリ関数、又はオペレーティングシステムサービス等の適切なコードの種類を表すことができる。GP言語は、データ並列処理機能を含む、C又はCといった、広く採用されている、高水準汎用プログラミング言語を拡張することによって構成されても良い。DP機能を含みうるその他の汎用言語の例としては、Java登録商標,PHP,VisualBasic,Perl,Python商標,C,Ruby,Delphi,Fortran,VB,F,OCaml,Haskell,Erlang,NESL,Chapel,JavaScript登録商標等が挙げられる。GP言語は、それぞれのプログラムの部分が異なるモジュールに含まれることを許容するリッチなリンク設定機能を有していてもよい。データ並列処理機能は、専用アーキテクチャであるDP最適化コンピューターノードを利用して、汎用プロセッサ例えば、DP最適化コンピューターノード非対応のものに比して、データ並列処理をより速く又はより効率的に実行することができるプログラミングツールを提供する。GP言語はまた、プログラマが、汎用プロセッサ及びDP最適化コンピューターノード、両方のためのプログラムを記述することを可能とする、推奨されるべき高水準汎用プログラミング言語となり得る。その他の実施形態として、コード10は、プログラムを形成する高水準データ並列処理プログラミング言語以下、DP言語という。からの一連の処理命令を含む。DP言語は、DP最適化コンピューターノードを有するコンピューター環境において、DP最適化コンピューターノードをプログラミングするための専用言語である。DP言語を利用することによって、プログラマは、DP最適化コンピューターノード上での実行用のコード10中で、DPソースコードを生成する。DP言語は、専用アーキテクチャであるDP最適化コンピューターノードを利用して、汎用プロセッサに比して、データ並列処理をより速く又はより効率的に実行できるようにするプログラミングツールを提供する。DP言語は、既存のDPプログラミング言語であるHLSL,GLSL,Cg,C,C,NESL,Chapel,CUDA,OpenCL,Accelerator,Ct,PGIGPGPUAccelerator,CAPSGPGPUAccelerator,Brook,CAL,APL,Fortran90より上位,DataParallelC,DAPPLE,又はAPL等であってもよい。コード10は本実施形態において、アプリケーション、ライブラリ関数、又は、オペレーティングシステムサービスといった、適切なコードの種類であってもよい。コード10は、DP最適化コンピューターノード上での実行のために指定されるコード部分を含む。コード10がGP言語で記載された図1における実施形態においては、GP言語を使用して、プログラマは、ベクトル関数を定義する際に、アノテーション26例えば、_declspecvector...を使って、DPソースコードを指定することが可能である。アノテーション26は、DP最適化コンピューターノードにおいて実行されるためのベクトル関数のファンクション名27例えば、vector_funcに関連付けられている。コード10はまた、コールサイト例えば、forall,reduce,scan,等のベクトル関数例えば、forall...,vector_func,...の一つ以上の呼び出し関数インボケーション28を含みうる。コールサイトに対応するベクトル関数は、カーネル関数として参照される。カーネル関数は、コード10例えば他のDPソースコードにおいて他のベクトル関数を呼び出し、ベクトル関数のコールグラフのルートと見なされうる。カーネル関数はまた、コード10において定義された型type例えば、クラス又はストラッツstructsを利用しうる。DPソースコードとして型typeをアノテーションしてもしなくても良い。他の実施形態においては、他の適切なプログラム言語のコンストラクタが、DPソースコード、及び/又は汎用プロセッサコードとして、コード10の部分を指定するために用いられても良い。さらに、コード10がDP言語で記述されている実施形態においては、アノテーション26は、省略されても良い。図2は、タイルコミュニケーションオペレーター12を、入力インデックスタイプ14に適用することにより、出力インデックスタイプ18を生成する実施形態を表すブロック図である。ここで用いられているように、インデックスタイプは、一つ以上の添字演算子として、非負の整数であるランクと、element_typeとして表されるタイプが指定されているものであればどのようなデータタイプでもよい。もし、index<N>が整数のN-タプルすなわち、整数のデータタイプであればよいを示すタイプであれば、index<N>のインスタンスは、N個の整数{i0,i1,...,im}mはN-1すなわち、Nタプルに等しいのセットである。インデックス演算子であるランクNは、index<N>におけるNタプルインスタンスをとり、そのインスタンスを、インデックスタイプにおける各要素を定義するエレメントタイプと呼ばれる他の型のインスタンスと関連付ける。ある実施形態においては、インデックスタイプは、一つ以上の以下の演算子operatorsを定義する。その他の実施形態においては、オペレータは、関数、ファンクタFunctor又はより一般的な形態であっても良い。所定のランクとエレメントタイプを有するインデックスタイプのカテゴリは、フィールドと呼ばれるイニシャルオブジェクトを有する。インデックスタイプは、ポリトープpolytopeの形状として、すなわち、座標軸における一次関数で表された有限数からなる半平面の交点として、代数的に表現されてもよい。図1及び図2を参照すると、高水準言語であるコード10は、タイルコミュニケーションオペレーター12を、入力インデックスタイプ14をデータ並列コンピューティング環境において使用するために用いている。入力インデックスタイプ14は、ランク例えば、図1の実施形態におけるランクNやエレメントタイプ例えば、図1の実施形態におけるエレメントタイプTを有し、そして、タイルコミュニケーションオペレーター12によって分解される計算上の空間を定義する。入力インデックスタイプ14それぞれに対し、タイルコミュニケーションオペレーター12は、出力インデックスタイプ18を、入力インデックスタイプ14と同じランク、および入力インデックスタイプ14のタイルであるエレメントタイプとして出力する。図3は、タイルコミュニケーションオペレーター12によって出力インデックスタイプ18を生成する際の実施例を示すブロック図である。図3の例として、タイルコミュニケーションオペレーター12は、2x2のタイルを使用して、4x4の入力インデックスタイプ14を、2x2の出力インデックスタイプ18に分割している。他の例として図示されていない、1024x1024のマトリックスを有する入力インデックスタイプ14と64x64のタイルを考えると、出力インデックスタイプ18を16x16のタイル64x16=1024とする例が挙げられる。タイルコミュニケーションオペレーター12はデータ分割の範囲パターンrangepatternを示す。範囲パターンは、インデックスタイプの集合体を含む。Indexable<N>を、任意のランクNの入力インデックスタイプ14とすることは、インデックスオペレーターが、index<N>タイプのインスタンスを対象とすることを意味する。添字演算子例えば、エレメントタイプの返される型typeは、Indexable<N>::element_typeとなる。タイルコミュニケーションオペレーター12の計算結果は、下記のようになる。tile<grid_tile>:Indexable<N>->range<N,Indexable<N>>およびrange<N,Indexable<N>>は、grid_tileに制限される、Indexable<N>の集合体となり、Indexable<N>/grid_tileでインデックス化される。より詳細には、もしgridが、Indexable<N>の形状shapeを示すのであれば、range<N,Indexable<N>>は、grid_range=gridgrid_tile_-1/grid_tileのオフセットでトランスレートされるgrid_tileに制限される、Indexable<N>の集合体となる。したがって、tile<grid_tile>Indexable<N>で生成された際に、grid_rangeは、range<N,Indexable<N>>の形状となる。タイルコミュニケーションオペレーター12においてコンストラクトされる、すべてのrangeインスタンスは、Indexable<N>の形状shape又はIndexable<N>の元々の定義領域を使用して、一般性を失うことなく、Indexable<N>.gridとして参照される。定義上は、Indexable<N>のインデックスオペレーターは、Indexable<N>.gridとして表されるすべてのIndex<N>に作用する。range<N1,Indexable<N2>>を形成する際に、Indexable<N>.gridの分割が形成され、そして、range<N1,Indexable<N2>>で定義される集合体が、N2次元N2-dimentionalの分割に制限された、オリジナルなIndexable<N>となる--それらは、N1次元N1-dimentionalのIndex<N1>のセットでパラメーター化されている。コンパイルする際にコンパイラによって推論できる最適化は、range<N,Indexable<N>>が元々のIndexable<N>のパーティショニングであることである。入力インデックスタイプ14がrangeとして定義されている例において、タイルコミュニケーションオペレーター12の以下のコード部分におけるtileを使用することによって、入力インデックスタイプ14のrangeを出力インデックスタイプ18にタイリングすることが可能である。上記のコード部分においては、grid<_Rank>eは、タイルの集合体として、tile_rangeの形状shapeを現している。_Tileは乗数multiplier又はtile_rangeによって行われるステップ、すなわち、次のタイル’thenexttile’は、_Tileによってインクリメントされる。最後のパラメーターである、は、_Parentのサブオブジェクトである_Tile-shapedを示すものである。実際に、インデックスタイプをタイリングするために、つまり、’tile...’演算子を有効とするために、以下のシグネチャのコンストラクタを有することが必要とされる。入力インデックスタイプ14がフィールドのイニシャルオブジェクトすなわち、fieldとして定義されている他の例において、タイルコミュニケーションオペレーター12は以下のコード部分を利用して、入力インデックスタイプ14のフィールドを出力インデックスタイプ18にタイリングする。上記のコード部分においては、grid<_Rank>eは、タイルの集合体としてのtile_rangeの形状shapeを示す。_Tileは乗数multiplier又はtile_rangeによって行われるステップ、すなわち、次のタイル’thenexttile’は、_Tileによってインクリメントされる。最後のパラメーターである、は、field<_Rank,_Element_type>のサブオブジェクトである_Tile-shapedを示すものである。図4は、タイルコミュニケーションオペレーター12と出力インデックスタイプ18を実装するコードの一実施形態を示すコンピュータコード図である。図4において示されるコードにおいて、データストラクチャであるtile_rangeが、タイルコミュニケーションオペレーター12のtileにより、出力インデックスタイプ18同様に、pseudo-fieldと呼ばれるを形成する。tile_rangeのインデックス演算子は、以下をとり、そして、フィールド、又は、エクステントが_Tileであり、そのオフセットが_Parent内のであるpseudo-fieldを形成する。出力インデックスタイプ18は、DP最適化コンピューターノードにおいてグローバルメモリへのコアレスcoalesceアクセスを可能とするデータ並列処理アルゴリズムの計算上の空間例えば、入力インデックスタイプ14等のローカルビュー構造を提供する。データ並列処理アルゴリズムのローカル構造ストラクチャは、DP最適化コンピューターノードの実行構造体executionstructure例えば、スレッドグループ、スレッドブロック、ワークグループ又はwave等に対応したスケジューリングパターンを形成する。ストリーミングSIMDエクステンションSSE計算エンジンを含むDP最適化コンピューターノードに対して、ローカルストラクチャは、ループタイリング又はループブロッキングを通じて形成されるストリップマイニング拡張機能に相似するものである。ローカルストラクチャは、グローバルメモリストアへのアクセスにおいて、アルゴリズム的により高いアクセスパフォーマンスを実現するために、DP最適化コンピューターノードの高速なローカルメモリ又は共有メモリ例えば、有効なスクラッチパッドメモリ又はキャッシュと情報をやりとりする。タイリングに対するローカルストラクチャの関係性は次のものである。タイルは複数のローカルストラクチャの定数の倍数として設定されることにより、タイルに割り当てられるローカルストラクチャの数によって、実行構造のループディメンションをループ展開アンローリングする程度が決定される。この関係性は、以下のローカルビューの分解において示される:_tileIndexは、_indexすなわち、入力インデックスタイプ14に含まれるタイルの座標を示し、そして、_localIndexは、そのタイルにおけるオフセットを示す。ローカルストラクチャの定数である、thread_group_dimentionsは、_Tileと同じ値にセットされるか、又は、thread_group_dimentionsの倍数例えば16が_Tileと同じ値にセットされることにより、DP最適化コンピューターノードにおいて、グローバルメモリへのコアレスcoalesceアクセスを可能とする。従って、タイルコミュニケーションオペレーター12によれは、DP最適化ノードにおいて、単純で且つエラーフリーで直感的なタイル分割を可能とする。タイルコミュニケーションオペレーター12は、繰り返し適用され、インデックスタイプを操作するその他のコミュニケーションオペレーターと結び付けられてもよい。行列積に関するタイルコミュニケーションオペレーター12の使用について、ここで示される。タイルコミュニケーションオペレーター12を使用しなければ、行列積はグローバルビューストラクチャにおいて、以下のコードで示されるように実施されるであろう。16x16のスレッドグループディメンションとされたローカルビューストラクチャがあると仮定する。アルゴリズム的には、マトリックスA,B及びCを16x16のタイルにタイリングするここでは、Nは、16で割り切れる数とする-一般的な境界チェックchecksforboundaryconditionsとカーネルは、タイル元のデータに完全に含まれていないときは、早い時期に終了してしまう。。以下のループ処理が繰り返し実行され、そして以下の結果がもたらされる上記をタイリングするために、解体するそして、タイリングされた_mA及びタイリングされた_mBから以下をもたらす。上記の解体から、以下のことがわかる。から応答が始まり、つまり、マトリックス中のすべてのポイントは、タイル中にポイント及びオフセットを含むタイルに固有に分解したものを有している。ここで挙げた例を完了するために、共有メモリを利用したコアレスアクセスが実施されうる。上記のグローバルビューマトリックス乗算により、16x16のスレッドグループディメンションに対してディスパッチされるカーネルが形成されると仮定すると、論理的には256スレッドが同時にカーネルを実行することになる。あるスレッドは、同じスレッドグループの他のスレッドからの結果を必要とするときは常に、下記の同期バリア処理命令が挿入され、スレッドグループ内の他の全てのスレッドプロセスがバリアに到達するまで進行しないようにする。以下のメモリ読み込みが行われることを想定する。スレッドグループは、threadsi,j0<=i,j<16となる。任意のiに対して、スレッドは、完全にコアレスなメモリアクセスを実現するために、連続した4バイトのアドレスをグローバルメモリから読み込む。特に、スレッドi,0は最初の4バイト読み込み、スレッドi,1は2つ目の4バイトを読み込み、スレッドi,2は3番目の4バイト読み込む。グローバルメモリから、64もしくは128バイトのチャンクでメモリアクセスが行われ、そして、アクセスされた全てのメモリを実際に使用することが最適である。しかしながら、は、いずれのスレッド列i,0,i,1,...,i,15に対しても、4バイトしか使用されず、ゆえに、フェッチされたグローバルメモリがほとんど利用されない。一方、は、64バイトのチャンクに対して、完全にコアレスされる。なぜなら、localIdxは、実際に、i,0,i,1,...,i,15のように変化するからである。同様に、スレッドグループ及び_Tileグループが、8x32次元であると仮定すると、は、128バイトのチャンクに対して、完全にコアレスされる。なぜなら、_localIdxは、実際にi,0,i,1,...,i,31,のように変化するからである。全てのメモリアクセスにおいて、必ずコアレスなアクセスがされるようにするために、グローバルメモリのデータがコアレスな形で共有メモリに読み込まれるが、コアレスされた順番は、計算を実行する順番ではないため、グループバリアで同期を取り、その後、共有メモリから望ましい順番でアクセスを行う。これにより、メモリアクセスが完全にコアレスであること、および価値ある最適化がもたらされるが、これは、DP最適化コンピューターノードにおける共有メモリは実質的にユニットアクセススピードを有するからである。これを全て合わせると、以下の結果をもたらす。タイルコミュニケーションオペレーター12の利用により、完全なコアレスメモリアクセスをベースとして、行列積を行うスピードが飛躍的に高まる。加えて、マトリクスのうちの一つが、乗算のパーツとしてトランスポーズtransposeされるとすると、タイルコミュニケーションオペレーター12の利用により、完全なコアレスメモリアクセスをベースとして、劇的にマトリックスの乗算のスピードが高まる可能性がある。AtransposeBの場合、タイリングなしで100倍のパフォーマンスを生み出すために、メモリアクセスは全体として、コアレスメモリアクセスがなされない。図5は、タイルコミュニケーションオペレーター12を含むデータ並列コード10をコンパイルして実行するためのコンピューターシステム100の実施形態を示すブロック図である。コンピューターシステム100は、一つもしくは一つ以上のプロセッサパッケージ図示されていないに配置された一つもしくは一つ以上のプロセッシングエレメントPE102と、メモリシステム104を備えたホスト101を有する。コンピューターシステム100はまた、ゼロまたはそれよりも多い入力/出力デバイス106と、ゼロまたはそれよりも多いディスプレイデバイス108、ゼロまたはそれよりも多い周辺機器110、ゼロまたはそれよりも多いネットワークデバイス112を備えてもよい。コンピューターシステム100はさらに、コンピュータエンジン120を有し、コンピュータエンジン120は、一つ又は一つ以上のDP最適化コンピューターノード121を備えており、それぞれのDP最適化コンピューターノード121は、一つ以上のプロセッシングエレメントPE122とDP実行可能ファイル138を保存するメモリ124とのセットを含んでいる。ホスト101、入力/出力デバイス106、ディスプレイデバイス108、周辺機器110、ネットワークデバイス112およびコンピュータエンジン120は、それぞれ相互に、最適な種類、数及び設定のコントローラ、バス、インターフェース、及び/又はその他の有線又は無線接続を含む相互接続部114を通じて通信を行う。コンピューターシステム100は、汎用又は特定の目的に供すために構成された最適な処理装置を表す。コンピューターシステム100の例には、サーバー、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、PDA、携帯電話、そして、オーディオ/ビデオ機器が含まれる。コンピューターシステム100のコンポーネントすなわち、ホスト101、入力/出力デバイス106、ディスプレイデバイス108、周辺機器110、ネットワークデバイス112、相互接続部114およびコンピュータエンジン120は、1つの共通の図示されていない筐体に設置されていてもよいし、又は、図示されていない適切な数の個別の筐体に置かれていても良い。プロセッシングエレメント102それぞれは、メモリシステム104に保存されている処理命令すなわち、ソフトウェアを実行するように設計されている実行ハードウェアを形成する。各プロセッサパッケージに含まれるプロセッシングエレメント102は、同じ又は異なる、アーキテクチャ及び/又は処理命令セットを有していても良い。例えば、プロセッシングエレメント102は、順番どおりの実行エレメント、スーパースカラsuperscalar実行エレメントおよびデータ並列実行エレメント例えば、GPU実行エレメント等を有していても良い。それぞれのプロセッシングエレメント102はメモリシステム104に保存された処理命令にアクセスし、実行するように設定されている。処理命令は、BIOSbasicinputoutputsystemや図示されていないファームウェア、オペレーションシステムOS132、コード10、コンパイラ134、GP実行可能ファイル136、そして、DP実行可能ファイル138を含む。各プロセッシングエレメント102は、入力/出力デバイス106、ディスプレイデバイス108、周辺機器110、ネットワークデバイス112、相互接続部114、コンピュータエンジン120から受信した情報と併せて、あるいは応答して処理命令を実行し得る。ホスト101は、OS132をブートし、実行する。OS132は、プロセッシングエレメントが実行可能な、コンピューターシステム100のコンポーネントの管理をするための処理命令を含み、また、各プログラムがコンポーネントにアクセスして利用するためのファンクションを提供する。ある実施形態においては、OS132はWindows登録商標オペレーションシステムであってもよい。その他の実施形態においては、OS132は、コンピューターシステム100とともに使用されるのに適切な他のオペレーションシステムであっても良い。コンピューターシステムが、コード10をコンパイルするために、コンパイラ134を実行する際には、コンパイラ134は、一以上の実行可能ファイル、例えば、一つ以上のGP実行可能ファイル136や、一つ以上のDP実行可能ファイル138を生成する。他の実施形態においては、コンパイラ134は、それぞれが一つ以上のDP実行可能ファイル138を含む一つ以上のGP実行可能ファイル136を生成しても良く、GP実行可能ファイル136を生成することなく、一つ以上のDP実行可能ファイル138を生成してもよい。GP実行可能ファイル136及び/又はDP実行可能ファイル138は、コンパイラ実行に応じて、コード10の全て、又は選択された一部をコンパイルすることにより、データ並列処理拡張機能を伴う形式で生成される。コンパイルの実行は、プログラマ又はコンピューターシステム100のその他のユーザーにより行われてもよく、その他のコンピュータシステム図示されていないにおけるコードで指示されていてもよい。GP実行可能ファイル136は、一つ以上の汎用プロセッシングエレメント102例えば、中央処理装置CPU上で実行されるためのプログラムを表す。GP実行可能ファイル136は、一つ以上の汎用プロセッシングエレメント102の命令セットからの下位レベルの処理命令を含む。DP実行可能ファイル138は、データ並列処理プログラム又はデータ並列処理アルゴリズム例えば、shader等を表すものであり、それらは一つ以上のデータ並列DP最適化コンピューターノード121上での実行用に最適化されたものである。ある実施形態においては、DP実行可能ファイル138は、DPバイトコード、又は、DP最適化コンピューターノード上での実行前に、デバイスドライバ図示されていないにより、DP最適化コンピューターノード121の処理命令群がローレベル処理命令に変換された他の中間表現ILを含んでいても良い。その他の実施形態として、DP実行可能ファイル138は、コンパイラ134によって挿入される、一つ以上のDP最適化コンピューターノードの処理命令群からのローレベルの実行命令を含んでも良い。したがって、一つ以上の汎用プロセッサ例えば、CPU等はGP実行可能ファイル136を直接実行することができ、そして、一つ以上のDP最適化コンピューターノード121、又は、DP最適化コンピューターノード121のローレベルの処理命令に変換された後のDP最適化コンピューターノードのいずれも、DP実行可能ファイル138を実行し得る。コンピューターシステム100は一つ以上のプロセッシングエレメント102を使用して、GP実行ファイル136を実行しても良く、そして、コンピューターシステム100はまた、下記に詳説される一つ以上の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、ディスプレイデバイス、周辺機器110、ネットワークデバイス112、コンピュータエンジン120に対し、保存した処理命令やデータを提供する。メモリシステム104におけるストレージデバイスの例として、ハードディスクデバイス、ランダムアクセスメモリRAM、リードオンリメモリROM、フラッシュメモリデバイスもしくはカード、磁気及びCDやDVDといった光学式ディスクが挙げられる。入力/出力デバイス106は、適切なタイプ、数、そしてコンフィグレーションの入力/出力デバイスであって、ユーザーからコンピューターシステム100への処理命令又はデータの入力や、コンピューターシステム100からユーザーへの処理命令又はデータの出力を行うように構成されている。入力/出力デバイス106の例として、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイアル、ノブ、そしてスイッチなどが挙げられる。ディスプレイデバイス108は、適切なタイプ、数、そしてコンフィグレーションのディスプレイデバイスであって、テキスト及び/又はグラフィック情報をコンピューターシステムのユーザーに向けて出力するように構成されている。ディスプレイデバイス108の例として、モニタ、ディスプレイスクリーン、プロジェクタ等が挙げられる。周辺機器110は、適切なタイプ、数、そしてコンフィグレーションからなる周辺機器であって、コンピューターシステム100における一つ以上のコンポーネントが一般的な又は特定の機能を発揮しうるように構成されている。ネットワークデバイス112は、適切なタイプ、数、そしてコンフィグレーションのネットワークデバイスであって、コンピューターシステム100が一つ以上のネットワーク図示されていないを通じて通信可能なように構成されている。ネットワークデバイス112は、適切なネットワークプロトコル及び/又はコンフィグレーションに従い動作し、コンピューターシステム100からネットワークに情報を発信したり、コンピューターシステム100によってネットワークから情報を受信したりする。コンピュータエンジン120は、DP実行可能ファイル138を実行するように設計されている。コンピュータエンジン120は、一つ以上のコンピューターノード121を有する。コンピューターノード121それぞれは、メモリ階層を共有するコンピューター資源の集合体である。各々のコンピューターノード121は、PE122とDP実行可能ファイル138を保存するメモリ124のセットを、1セット以上有する。PE122は、DP実行ファイル138を実行し、そしてその実行結果をメモリ124に保存する。特に、図5において示され、以下に詳説されるように、PE122は、DP実行可能ファイルを実行して、入力インデックスタイプ14にタイルコミュニケーションオペレーター12を適用することにより、出力インデックスタイプ18を生成する。データ並列処理すなわち、DPプログラム又はアルゴリズムの実行のために最適化されたハードウェアアーキテクチャを備える一つ以上のコンピュータリソースを有するコンピューターノード121は、DP最適化コンピューターノード121と呼ばれる。DP最適化コンピューターノード121の例として、PE122のセットが一つ以上のGPUを含むものと、PE122のセットが汎用プロセッサパッケージ中にSIMDユニットのセットを含むものが挙げられる。データ並列処理のための最適化されたハードウェアアーキテクチャを有するコンピュータリソースを全く備えていないコンピューターノード121例えば、汎用プロセッシングエレメント102のみ有するプロセッサパッケージ等は、非DP最適化コンピューターノード121と呼ばれる。各コンピューターノード121においては、メモリ124は、メモリシステム104例えば、GPUにて使用されるGPUメモリ又はメモリシステム104の1部例えば、汎用プロセッサパッケージに含まれるSIMDユニットに使用されるとは区別されうる。ホスト101は、コンピューターノード121に対して、コンピューターノード121が実行するためのDP実行可能ファイル138を提供し、且つ、相互接続部114を使用してDP実行可能ファイル138が生成した応答を受信するよう設計されたホストコンピュータノードを形成する。ホストコンピュータノードは、メモリ階層すなわち、メモリシステム104を共有する汎用コンピュータリソースすなわち、汎用プロセッシングエレメント102の集合体を有する。例えば、ホストコンピュータノードは、SMPsymmetricmultiprocessingarchitectureで設計されていてもよく、そして、また、NUMAnon-uniformmemoryaccessアーキテクチャを採用して、メモリシステム104の局所参照性memorylocalityを最大化し得るように構成されていてもよい。ホストコンピュータノードのOS132は、DPのcallsiteを実行して、DP最適化コンピューターノード又は非DP最適化ノード121がDP実行可能ファイル138を実行するように構成されている。メモリ124をメモリシステム104と区別する実施形態においては、ホストコンピュータノードは、DP実行可能ファイル138および一つ以上の入力インデックスタイプ14がメモリシステム104からメモリ124に対してコピーされるようにする。メモリシステム104がメモリ124を含む実施形態においては、ホストコンピュータノードが、メモリシステム104におけるDP実行可能ファイル138、及び/又は、一つ以上の入力インデックスタイプ14のコピーをメモリ124として指定するか、DP実行ファイル138及び/又は一つ以上の入力インデックスタイプ14を、メモリシステム104におけるある領域からメモリ124を構成するメモリシステム104の他の領域にコピーしてもよい。非同期と指定されない限り、コンピューターノード121とホストコンピュータノード間のコピー処理は、同期ポイントであっても良い。ホストコンピュータノードと各コンピューターノード121は、互いにコードの実行をそれぞれ独立して同時に行っても良い。ホストコンピュータノードと各コンピューターノード121は、同期ポイントにおいて、相互に作用することにより、ノードでの計算を連携させることができる。ある実施形態においては、コンピュータエンジン120は、グラフィックカードを表し、そこでは一つ以上のグラフィックプロセッシングユニットGPUがPE122及びメモリシステム104から分離されたメモリ124を有する。その実施形態においては、グラフィックカードのドライバ図示されていないによって、DP実行可能ファイル138のバイトコード又はDP実行ファイル138の中間表現ILを、GPUのPE122が実行しうる処理命令の形式に変換しても良い。他の実施形態においては、コンピュータエンジン120は、一つ以上の汎用プロセッシングエレメント102、及び、メモリ124を含むメモリシステム104から構成されるプロセッサパッケージに含まれる一つ以上のGPUすなわち、プロセッシングエレメント122の組み合わせによって形成されていても良い。その実施形態においては、DP実行可能ファイル138のバイトコード又はDP実行ファイル138の中間表現ILをGPUが実行しうる処理命令の形式に変換するために、追加のソフトウェアがコンピューターシステム100において提供されても良い。その他の実施形態においては、コンピュータエンジン120は、プロセッシングエレメント102、及び、メモリ124を含むメモリシステム104から構成される一つ以上のプロセッサパッケージにおける、一つ以上のSIMDユニットの組み合わせによって形成されていてもよい。その実施形態においては、DP実行可能ファイル138のバイトコード又はDP実行可能ファイル138の中間表現ILを、プロセッサパッケージに含まれるSIMDユニットが実行しうる処理命令の形式に変換するために、追加のソフトウェアがコンピューターシステム100において提供されても良い。また、その他の実施形態においては、コンピュータエンジン120は、プロセッシングエレメント102、及びメモリ124を含むメモリシステム104から構成される一つ以上のプロセッサパッケージに含まれる、一つ以上のスカラ又はベクタプロセッシングパイプラインの組み合わせによって形成されていてもよい。その実施形態においては、DP実行可能ファイル138のバイトコード又はDP実行可能ファイル138の中間表現ILを、プロセッサパッケージに含まれるスカラプロセッシングパイプラインが実行しうる処理命令の形式に変換するために、追加のソフトウェアがコンピューターシステム100において提供されても良い。ある特定の実施形態がこの明細書中において示され、詳説されているが、当業者は、本発明の趣旨を逸脱しない範囲内において、本明細書において説明されている実施形態に種々の変更を加え、及び/又は同等の実装形態インプレメンテーションに代替することが可能であろう。本出願は、本明細書において説明されている特定の実施形態における応用やバリエーションを包含するものである。それゆえに、本発明は、請求項に記載された事項や、請求項に記載されているに等しい事項に限定されるべきではない。"