(57)【要約】高級プログラミング言語によって、計算上の空間を、データ並列計算ノードにおける実行構造体（例えば、スレッドグループ）にマッピングされたサブスペース（すなわち、タイル）に分割するタイルコミュニケーションオペレーターを提供する。ランクとエレメントタイプを有するインデックスタイプは、計算上の空間を定義する。入力インデックスタイプに対し、タイルコミュニケーションオペレーターは、入力インデックスタイプと同じランクと入力インデックスタイプのタイルであるエレメントタイプを有する出力インデックスタイプを生成する。出力インデックスタイプは、データ並列計算ノードにおいて、グローバルメモリアクセスにおけるコアレッシングを実現する計算上の空間におけるローカルビューストラクチャを提供する。
2013539888.tif 000002
【特許請求の範囲】
【請求項１】
コンピューターシステムによって実行されるとき、
一つ以上のデータ並列計算ノード上での実行のために構成されたデータ並列処理ソースコード中のタイルコミュニケーションオペレーターに応答して、入力インデックスタイプから出力インデックスタイプを生成し、
前記出力インデックスタイプを用いてデータ並列処理アルゴリズムを実施する
手順を前記コンピューターシステムに実行させるコンピューター実行可能命令を記録したことを特徴とするコンピューター読み取り可能な記録媒体。
【請求項２】
前記入力インデックスタイプはランク及び第１のエレメントタイプを有し、
前記出力インデックスタイプは、前記ランク及び前記入力インデックスタイプのタイルである第２のエレメントタイプを有することを特徴とする請求項１記載のコンピューター読み取り可能な記録媒体。
【請求項３】
前記入力インデックスタイプはランク及び第１の形状を有し、
前記出力インデックスタイプは、前記ランク及び前記入力インデックスタイプのタイルである第２の形状を有することを特徴とする請求項１記載のコンピューター読み取り可能な記録媒体。
【請求項４】
前記出力インデックスタイプは、前記一つ以上のデータ並列計算ノードの実行構造体にマッピングされていることを特徴とする請求項１記載のコンピューター読み取り可能な記録媒体。
【請求項５】
前記出力インデックスタイプは、前記一つ以上のデータ並列計算ノードにおける、前記入力インデックスタイプのローカルビューストラクチャを提供することを特徴とする請求項１記載のコンピューター読み取り可能な記録媒体。
【請求項６】
データ並列処理ソースコードは、データ並列処理拡張機能を有するプログラミング言語で記述されていることを特徴とする請求項１記載のコンピューター読み取り可能な記録媒体。
【請求項７】
前記一つ以上のデータ並列計算ノードは、少なくとも一つのグラフィックプロセッシングユニットを含むことを特徴とする請求項１記載のコンピューター読み取り可能な記録媒体。
【請求項８】
前記一つ以上のデータ並列計算ノードは、少なくとも一つの汎用プロセッサを含むことを特徴とする請求項１記載のコンピューター読み取り可能な記録媒体。
【請求項９】
コンピューターシステムにおいてコンパイラが実施する方法であって、
前記方法は、
一つ以上のデータ並列計算ノード上での実行のために構成されたデータ並列処理ソースコードのタイルコミュニケーションオペレーターを特定し、
前記データ並列処理ソースコードから、入力インデックスタイプを出力インデックスタイプに分割することによってタイルコミュニケーションオペレーターを実装するデータ並列処理実行コードを生成することを備えることを特徴とする方法。
【請求項１０】
前記入力インデックスタイプはランク及び第１のエレメントタイプを有し、
前記出力インデックスタイプは、前記ランク及び前記入力インデックスタイプのタイルである第２のエレメントタイプを有することを特徴とする請求項９記載の方法。
【請求項１１】
前記入力インデックスタイプはランク及び第１の形状を有し、
前記出力インデックスタイプは、前記ランク及び前記入力インデックスタイプのタイルである第２の形状を有することを特徴とする請求項９記載の方法。
【請求項１２】
前記出力インデックスタイプは、前記一つ以上のデータ並列計算ノードの実行構造体にマッピングされていることを特徴とする請求項９記載の方法。
【請求項１３】
前記出力インデックスタイプは、前記１つ以上のデータ並列計算ノードにおける、前記入力インデックスタイプのローカルビューストラクチャを提供することを特徴とする請求項９記載の方法。
【請求項１４】
コンピューターシステムによって実行されるとき、
タイルコミュニケーションオペレーターを適用して、ランク及び第１のエレメントタイプを有する入力インデックスタイプを、前記ランク及び前記入力インデックスタイプのタイルである第２のエレメントタイプを有する出力インデックスタイプに分解することと、
前記入力インデックスタイプに対して、前記出力インデックスタイプを用いてデータ並列処理アルゴリズムを実施すること
を備える方法を前記コンピューターシステムに実行させるコンピューター実行可能命令を記録したコンピューター読み取り可能な記録媒体であって、
前記タイルコミュニケーションオペレーターは、データ並列処理拡張機能を有する高水準汎用プログラミング言語で記述された前記データ並列処理ソースコードに含まれており、
前記出力インデックスタイプは、前記データ並列処理アルゴリズムを実行するように構成された１つ以上のデータ並列計算ノードの実行構造体にマッピングされ、
１つ以上の前記データ並列計算ノードは少なくとも１つのグラフィックプロセッシングユニットを含むことを特徴とするコンピューター読み取り可能な記録媒体。
【請求項１５】
前記第１のエレメントタイプは第１の形状を有し、前記第２のエレメントタイプは、タイルである第２の形状を有することを特徴とする請求項１４記載のコンピューター読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、タイルコミュニケーションオペレーター（Ｔｉｌｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｏｐｅｒａｔｏｒ）に関する。
【背景技術】
【０００２】
従来、コンピューターシステムは、通常、一つ又は一つ以上の汎用プロセッサ（例えば、中央処理装置（ＣＰＵ）や、一つ又は一つ以上の、より特化したデータ並列計算ノード（例えば、グラフィックスプロセッシングユニット（ＧＰＵ）又は、ＣＰＵにおけるＳＩＭＤ（ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ，  ｍｕｌｔｉｐｌｅ  ｄａｔａ）演算実行部）を有する。汎用プロセッサは、通常コンピューターシステムにおいて汎用的な処理を行い、データ並列計算ノードは、一般的にコンピューターシステムにおいてデータ並列処理（例えば、グラフィック処理等）を行う。汎用プロセッサは、データ並列処理アルゴリズムの実装が可能であり、データ並列計算ノードのようなハードウェアリソースの最適化を行わずに処理を行うこともある。その結果、汎用プロセッサにおけるデータ並列処理アルゴリズムの処理は、データ並列計算ノードに比して、かなり非効率となる。
【０００３】
データ並列計算ノードは、もともと、コンピューターシステムにおいてプログラムを実行する際の、汎用プロセッサに対する補助的な役割を有している。データ並列計算ノードの処理能力の向上により、データ並列処理アルゴリズムを実施するための最適化されたハードウェアの役割は増しており、データ並列計算ノードのプログラムを行うプログラマの技能を高めること、そして、より容易にデータ並列計算ノードのプログラミングを行い得ることが望まれている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
計算機型線形代数（ｃｏｍｐｕｔａｔｉｏｎａｌ  ｌｉｎｅａｒ  ａｌｇｅｂｒａ）における一般的な技術として、計算上の空間が、サブスペースに分割され、各タイル又はブロックをポイントであるかのように処理することによってアルゴリズムが再帰的に実装される、タイル又はブロック分割アルゴリズムがある。そのような分割においては、しかしながら、インデックス群の詳細なトラッキングが必要であり、また、タイル及びブロックの相対的な位置関係の把握も必要とされる。その結果、インデックスの作成及び位置関係の処理においては、エラーが発生しやすく、実装が難しい。
【課題を解決するための手段】
【０００５】
本要約は、簡潔化された形式で選択されたコンセプト群を紹介するものであり、下記の発明を実施するための形態においてより詳細に説明される。本要約は、特許請求の範囲に記載された事項の主要な機能や本質的な機能を明らかにするためのものではなく、請求項に記載された事項の範囲を限定するために用いられるものでもない。
【０００６】
高級プログラミング言語によって、計算上の空間を、データ並列計算ノードにおける実行構造体（ｅｘｅｃｕｔｉｏｎ  ｓｔｒｕｃｔｕｒｅ）（例えば、スレッドグループ）にマッピングされたサブスペース（すなわち、タイル）に分割するタイルコミュニケーションオペレーターを提供する。ランク（ｒａｎｋ）とエレメントタイプ（ｅｌｅｍｅｎｔ  ｔｙｐｅ）を有するインデックスタイプ（ｉｎｄｅｘａｂｌｅ  ｔｙｐｅ）は、計算上の空間を定義する。入力インデックスタイプ（ｉｎｐｕｔ  ｉｎｄｅｘａｂｌｅ  ｔｙｐｅ）に対し、タイルコミュニケーションオペレーターは、入力インデックスタイプと同じランクと入力インデックスタイプのタイルであるエレメントタイプを有する出力インデックスタイプ（ｏｕｔｐｕｔ  ｉｎｄｅｘａｂｌｅ  ｔｙｐｅ）を生成する。出力インデックスタイプは、データ並列計算ノードにおいて、グローバルメモリアクセスにおけるコアレッシング（ｃｏａｌｅｓｃｉｎｇ）を実現する計算上の空間におけるローカルビューストラクチャを提供する。
【図面の簡単な説明】
【０００７】
添付された図面は、本発明の実施形態をより深く理解するために提供され、本明細書の一部として組み込まれている。図面は、本発明の実施形態を示し、明細書中の説明と共に参照されることにより、実施形態の原理が理解され得る。その他の実施形態及び実施形態における意図された有益な点は、以下の詳細な説明を参照することにより、理解が深まり、より一層認識され得る。図面における各要素は、必ずしも相対的に縮尺を変える必要はない。同一の参照番号は、同一又は類似する部分を示す。
【図１】タイルコミュニケーションオペレーターのコードの実施形態を表すコンピュータコード図である。
【図２】入力インデックスタイプにタイルコミュニケーションオペレーターを適用する実施形態を表すブロック図である。
【図３】出力インデックスタイプをタイルコミュニケーションオペレーターで生成する実施形態を表すブロック図である。
【図４】タイルコミュニケーションオペレーターを実装するコードの実施形態を表すコンピュータコード図である。
【図５】タイルコミュニケーションオペレーターを含むデータ並列コードをコンパイルし実行するように設計されたコンピューターシステムの実施形態を表すブロック図である。
【発明を実施するための形態】
【０００８】
次の詳細な説明において、本明細書の一部を形成し、本発明が実行されうる例示的な実施形態によって示される添付図面を参照する。本明細書において、上（ｔｏｐ）、下（ｂｏｔｔｏｍ）、前（ｆｒｏｎｔ）、後ろ（ｂａｃｋ）、先頭の（ｌｅａｄｉｎｇ）、後続の（ｔｒａｉｌｉｎｇ）等の方向を示すための用語が、開示される図面の向きを示す言葉として用いられている。実施形態におけるコンポーネントは様々な異なる形態で配置可能であるから、方向を示すための用語が図示するために用いられているが、限定されて解釈されうるものではない。本発明の範囲を逸脱せずに、その他の実施形態が採用され得ること、構造的又は論理的な変更がされ得ることを留意されたい。したがって、以下の詳細な説明は、限定して解釈されるものではなく、本発明の範囲は添付された書面における、特許請求の範囲によって定義されるべきである。本明細書において開示される様々な実施例の機能は、特に限定のない限り、それぞれ組み合わされ得ることに留意されたい。
【０００９】
図１は、タイルコミュニケーションオペレーター１２のコード１０の実施形態を表すコンピュータコード図である。コンパイルされ実行される際に、タイルコミュニケーションオペレーター１２は、計算上の空間（図１の実施形態においてｉｎｄｅｘａｂｌｅ＿ｔｙｐｅ＜Ｎ，Ｔ＞として表される）を、ｅｘｔｅｎｔとして定義される（図１の実施形態において＿Ｅｘｔｅｎｔとして表される）サブスペース（すなわち、タイル）に分解する。タイルは、例えば、図５におけるＤＰ最適化コンピューターノード１２１や以下に詳説されるデータ並列（ＤＰ）最適化コンピューターノードの実行構造体（ｅｘｅｃｕｔｉｏｎ  ｓｔｒｕｃｔｕｒｅ）（例えば、スレッドグループ（ＤｉｒｅｃｔＸ），スレッドブロック（ＣＵＤＡ），ワークグループ（ＯｐｅｎＣＬ），  又はｗａｖｅｓ（ＡＮＤ／ＡＴＩ）等）にマッピングされうる。
【００１０】
コード１０は、高水準汎用プログラミング言語、又は、データ並列プログラミング言語（一つ以上のデータ並列（ＤＰ）最適化コンピューターノード（例えば、図５におけるＤＰ最適化コンピューターノード１２１）による実行のために一つ以上の実行可能ファイル（例えば、ＤＰ実行可能ファイル１３８）にコンパイルされうる）で記述された一連の処理命令を含む。
【００１１】
ある実施形態においては、コード１０は、一つ以上のモジュールのセットに保存されるプログラムを構成する、データ並列処理拡張機能を有する高水準汎用プログラミング言語（以下、「ＧＰ言語」という。）からの一連の処理命令を含む。ＧＰ言語においては、プログラムを異なるパーツ（例えば、モジュール）に分けて記述することが許容され、それぞれのモジュールは、コンピューターシステムがアクセスし得る、それぞれ異なるファイル又は場所に保存されても良い。ＧＰ言語は、一つ以上の汎用プロセッサ及び一つ以上の専用のＤＰ最適化コンピューターノードの両方を含むコンピューター環境をプログラミングするための唯一の言語である。ＤＰ最適化コンピューターノードは、一般的にグラフィックプロセッシングユニット（ＧＰＵ）又は汎用プロセッサのＳＩＭＤユニットであるが、汎用プロセッサのスカラまたはベクタ実行ユニットや、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、その他特定のコンピューター実行環境において最適なデバイスであっても良い。ＧＰ言語を利用して、プログラマは、汎用プロセッサ又はＤＰコンピューターノードそれぞれによる実行のために、汎用プロセッサ及びＤＰ両方のソースコードをコード１０に含めることができ、汎用プロセッサ及びＤＰソースコードの実行を協働させることができる。本実施形態においては、コード１０は、アプリケーション、ライブラリ関数、又はオペレーティングシステムサービス等の適切なコードの種類を表すことができる。
【００１２】
ＧＰ言語は、データ並列処理機能を含む、Ｃ又はＣ＋＋といった、広く採用されている、高水準汎用プログラミング言語を拡張することによって構成されても良い。ＤＰ機能を含みうるその他の汎用言語の例としては、Ｊａｖａ（登録商標），ＰＨＰ，Ｖｉｓｕａｌ  Ｂａｓｉｃ，Ｐｅｒｌ，Ｐｙｔｈｏｎ（商標），Ｃ＃，Ｒｕｂｙ，Ｄｅｌｐｈｉ，Ｆｏｒｔｒａｎ，ＶＢ，Ｆ＃，ＯＣａｍｌ，Ｈａｓｋｅｌｌ，Ｅｒｌａｎｇ，ＮＥＳＬ，Ｃｈａｐｅｌ，ＪａｖａＳｃｒｉｐｔ（登録商標）等が挙げられる。ＧＰ言語は、それぞれのプログラムの部分が異なるモジュールに含まれることを許容するリッチなリンク設定機能を有していてもよい。データ並列処理機能は、専用アーキテクチャであるＤＰ最適化コンピューターノードを利用して、汎用プロセッサ（例えば、ＤＰ最適化コンピューターノード非対応のもの）に比して、データ並列処理をより速く又はより効率的に実行することができるプログラミングツールを提供する。ＧＰ言語はまた、プログラマが、汎用プロセッサ及びＤＰ最適化コンピューターノード、両方のためのプログラムを記述することを可能とする、推奨されるべき高水準汎用プログラミング言語となり得る。
【００１３】
その他の実施形態として、コード１０は、プログラムを形成する高水準データ並列処理プログラミング言語（以下、「ＤＰ言語」という。）からの一連の処理命令を含む。ＤＰ言語は、ＤＰ最適化コンピューターノードを有するコンピューター環境において、ＤＰ最適化コンピューターノードをプログラミングするための専用言語である。ＤＰ言語を利用することによって、プログラマは、ＤＰ最適化コンピューターノード上での実行用のコード１０中で、ＤＰソースコードを生成する。ＤＰ言語は、専用アーキテクチャであるＤＰ最適化コンピューターノードを利用して、汎用プロセッサに比して、データ並列処理をより速く又はより効率的に実行できるようにするプログラミングツールを提供する。ＤＰ言語は、既存のＤＰプログラミング言語であるＨＬＳＬ，ＧＬＳＬ，Ｃｇ，Ｃ，Ｃ＋＋，ＮＥＳＬ，Ｃｈａｐｅｌ，ＣＵＤＡ，ＯｐｅｎＣＬ，Ａｃｃｅｌｅｒａｔｏｒ，Ｃｔ，ＰＧＩ  ＧＰＧＰＵ  Ａｃｃｅｌｅｒａｔｏｒ，ＣＡＰＳ  ＧＰＧＰＵ  Ａｃｃｅｌｅｒａｔｏｒ，Ｂｒｏｏｋ＋，ＣＡＬ，ＡＰＬ，Ｆｏｒｔｒａｎ  ９０（より上位），Ｄａｔａ  Ｐａｒａｌｌｅｌ  Ｃ，  ＤＡＰＰＬＥ，又はＡＰＬ等であってもよい。コード１０は本実施形態において、アプリケーション、ライブラリ関数、又は、オペレーティングシステムサービスといった、適切なコードの種類であってもよい。
【００１４】
コード１０は、ＤＰ最適化コンピューターノード上での実行のために指定されるコード部分を含む。コード１０がＧＰ言語で記載された図１における実施形態においては、ＧＰ言語を使用して、プログラマは、ベクトル関数を定義する際に、アノテーション２６（例えば、＿ｄｅｃｌｓｐｅｃ（ｖｅｃｔｏｒ）．．．）を使って、ＤＰソースコードを指定することが可能である。アノテーション２６は、ＤＰ最適化コンピューターノードにおいて実行されるためのベクトル関数のファンクション名２７（例えば、ｖｅｃｔｏｒ＿ｆｕｎｃ）に関連付けられている。コード１０はまた、コールサイト（例えば、ｆｏｒａｌｌ，ｒｅｄｕｃｅ，ｓｃａｎ，等）のベクトル関数（例えば、ｆｏｒａｌｌ…，ｖｅｃｔｏｒ＿ｆｕｎｃ，…）の一つ以上の呼び出し関数（インボケーション）２８を含みうる。コールサイトに対応するベクトル関数は、カーネル関数として参照される。カーネル関数は、コード１０（例えば他のＤＰソースコード）において他のベクトル関数を呼び出し、ベクトル関数のコールグラフのルートと見なされうる。カーネル関数はまた、コード１０において定義された型（ｔｙｐｅ）（例えば、クラス又はストラッツ（ｓｔｒｕｃｔｓ））を利用しうる。ＤＰソースコードとして型（ｔｙｐｅ）をアノテーションしてもしなくても良い。他の実施形態においては、他の適切なプログラム言語のコンストラクタが、ＤＰソースコード、及び／又は汎用プロセッサコードとして、コード１０の部分を指定するために用いられても良い。さらに、コード１０がＤＰ言語で記述されている実施形態においては、アノテーション２６は、省略されても良い。
【００１５】
図２は、タイルコミュニケーションオペレーター１２を、入力インデックスタイプ１４に適用することにより、出力インデックスタイプ１８を生成する実施形態を表すブロック図である。ここで用いられているように、インデックスタイプは、一つ以上の添字演算子として、非負の整数であるランクと、ｅｌｅｍｅｎｔ＿ｔｙｐｅとして表されるタイプが指定されているものであればどのようなデータタイプでもよい。もし、ｉｎｄｅｘ＜Ｎ＞が整数のＮ−タプル（すなわち、整数のデータタイプであればよい）を示すタイプであれば、ｉｎｄｅｘ＜Ｎ＞のインスタンスは、Ｎ個の整数｛ｉ０，ｉ１，．．．，ｉｍ｝（ｍはＮ−１（すなわち、Ｎタプル）に等しい）のセットである。インデックス演算子であるランクＮは、ｉｎｄｅｘ＜Ｎ＞におけるＮタプルインスタンスをとり、そのインスタンスを、インデックスタイプにおける各要素を定義するエレメントタイプと呼ばれる他の型のインスタンスと関連付ける。ある実施形態においては、インデックスタイプは、一つ以上の以下の演算子（ｏｐｅｒａｔｏｒｓ）を定義する。
【００１６】
2013539888.tif 000003
【００１７】
その他の実施形態においては、オペレータは、関数、ファンクタ（Ｆｕｎｃｔｏｒ）又はより一般的な形態であっても良い。所定のランクとエレメントタイプを有するインデックスタイプのカテゴリは、フィールドと呼ばれるイニシャルオブジェクトを有する。インデックスタイプは、ポリトープ（ｐｏｌｙｔｏｐｅ）の形状として、すなわち、座標軸における一次関数で表された有限数からなる半平面の交点として、代数的に表現されてもよい。
【００１８】
図１及び図２を参照すると、高水準言語であるコード１０は、タイルコミュニケーションオペレーター１２を、入力インデックスタイプ１４をデータ並列コンピューティング環境において使用するために用いている。入力インデックスタイプ１４は、ランク（例えば、図１の実施形態におけるランクＮ）やエレメントタイプ（例えば、図１の実施形態におけるエレメントタイプＴ）を有し、そして、タイルコミュニケーションオペレーター１２によって分解される計算上の空間を定義する。入力インデックスタイプ１４それぞれに対し、タイルコミュニケーションオペレーター１２は、出力インデックスタイプ１８を、入力インデックスタイプ１４と同じランク、および入力インデックスタイプ１４のタイルであるエレメントタイプとして出力する。
【００１９】
図３は、タイルコミュニケーションオペレーター１２によって出力インデックスタイプ１８を生成する際の実施例を示すブロック図である。図３の例として、タイルコミュニケーションオペレーター１２は、２ｘ２のタイルを使用して、４ｘ４の入力インデックスタイプ１４を、２ｘ２の出力インデックスタイプ１８に分割している。他の例として（図示されていない）、１０２４ｘ１０２４のマトリックスを有する入力インデックスタイプ１４と６４ｘ６４のタイルを考えると、出力インデックスタイプ１８を１６ｘ１６のタイル（６４ｘ１６＝１０２４）とする例が挙げられる。
【００２０】
タイルコミュニケーションオペレーター１２はデータ分割の範囲パターン（ｒａｎｇｅ  ｐａｔｔｅｒｎ）を示す。範囲パターンは、インデックスタイプの集合体を含む。Ｉｎｄｅｘａｂｌｅ＜Ｎ＞を、任意のランクＮの入力インデックスタイプ１４とすることは、インデックスオペレーターが、ｉｎｄｅｘ＜Ｎ＞タイプのインスタンスを対象とすることを意味する。添字演算子（例えば、エレメントタイプ）の返される型（ｔｙｐｅ）は、Ｉｎｄｅｘａｂｌｅ＜Ｎ＞：：ｅｌｅｍｅｎｔ＿ｔｙｐｅとなる。
【００２１】
タイルコミュニケーションオペレーター１２の計算結果は、下記のようになる。  
ｔｉｌｅ＜ｇｒｉｄ＿ｔｉｌｅ＞：Ｉｎｄｅｘａｂｌｅ＜Ｎ＞−＞ｒａｎｇｅ＜Ｎ，Ｉｎｄｅｘａｂｌｅ＜Ｎ＞＞およびｒａｎｇｅ＜Ｎ，Ｉｎｄｅｘａｂｌｅ＜Ｎ＞＞は、ｇｒｉｄ＿ｔｉｌｅに制限される、Ｉｎｄｅｘａｂｌｅ＜Ｎ＞  の集合体となり、Ｉｎｄｅｘａｂｌｅ＜Ｎ＞／ｇｒｉｄ＿ｔｉｌｅでインデックス化される。より詳細には、もしｇｒｉｄが、Ｉｎｄｅｘａｂｌｅ＜Ｎ＞の形状（ｓｈａｐｅ）を示すのであれば、ｒａｎｇｅ＜Ｎ，Ｉｎｄｅｘａｂｌｅ＜Ｎ＞＞は、ｇｒｉｄ＿ｒａｎｇｅ＝（ｇｒｉｄ＋ｇｒｉｄ＿ｔｉｌｅ＿−１）／ｇｒｉｄ＿ｔｉｌｅ  のオフセットでトランスレートされるｇｒｉｄ＿ｔｉｌｅに制限される、Ｉｎｄｅｘａｂｌｅ＜Ｎ＞の集合体となる。したがって、ｔｉｌｅ＜ｇｒｉｄ＿ｔｉｌｅ＞（Ｉｎｄｅｘａｂｌｅ＜Ｎ＞）で生成された際に、ｇｒｉｄ＿ｒａｎｇｅ  は、ｒａｎｇｅ＜Ｎ，Ｉｎｄｅｘａｂｌｅ＜Ｎ＞＞の形状となる。
【００２２】
タイルコミュニケーションオペレーター１２においてコンストラクトされる、すべてのｒａｎｇｅインスタンスは、Ｉｎｄｅｘａｂｌｅ＜Ｎ＞の形状（ｓｈａｐｅ）又はＩｎｄｅｘａｂｌｅ＜Ｎ＞の元々の定義領域を使用して、一般性を失うことなく、Ｉｎｄｅｘａｂｌｅ＜Ｎ＞．ｇｒｉｄとして参照される。定義上は、Ｉｎｄｅｘａｂｌｅ＜Ｎ＞のインデックスオペレーターは、Ｉｎｄｅｘａｂｌｅ＜Ｎ＞．ｇｒｉｄとして表されるすべてのＩｎｄｅｘ＜Ｎ＞に作用する。ｒａｎｇｅ＜Ｎ１，Ｉｎｄｅｘａｂｌｅ＜Ｎ２＞＞を形成する際に、Ｉｎｄｅｘａｂｌｅ＜Ｎ＞．ｇｒｉｄの分割が形成され、そして、ｒａｎｇｅ＜Ｎ１，Ｉｎｄｅｘａｂｌｅ＜Ｎ２＞＞で定義される集合体が、Ｎ２次元（Ｎ２−ｄｉｍｅｎｔｉｏｎａｌ）の分割に制限された、オリジナルなＩｎｄｅｘａｂｌｅ＜Ｎ＞となる−−それらは、Ｎ１次元（Ｎ１−ｄｉｍｅｎｔｉｏｎａｌ）のＩｎｄｅｘ＜Ｎ１＞のセットでパラメーター化されている。コンパイルする際にコンパイラによって推論できる最適化は、ｒａｎｇｅ＜Ｎ，Ｉｎｄｅｘａｂｌｅ＜Ｎ＞＞が元々のＩｎｄｅｘａｂｌｅ＜Ｎ＞のパーティショニングであることである。
【００２３】
入力インデックスタイプ１４が”ｒａｎｇｅ”として定義されている例において、タイルコミュニケーションオペレーター１２の以下のコード部分における“ｔｉｌｅ”を使用することによって、入力インデックスタイプ１４のｒａｎｇｅを出力インデックスタイプ１８にタイリングすることが可能である。
【００２４】
2013539888.tif 000004
【００２５】
上記のコード部分においては、ｇｒｉｄ＜＿Ｒａｎｋ＞（ｅ）は、タイルの集合体として、ｔｉｌｅ＿ｒａｎｇｅの形状（ｓｈａｐｅ）を現している。＿Ｔｉｌｅは乗数（ｍｕｌｔｉｐｌｉｅｒ）又はｔｉｌｅ＿ｒａｎｇｅによって行われるステップ、すなわち、次のタイル（’ｔｈｅ  ｎｅｘｔ  ｔｉｌｅ’）は、＿Ｔｉｌｅによってインクリメントされる。最後のパラメーターである、
【００２６】
2013539888.tif 000005
【００２７】
は、＿Ｐａｒｅｎｔのサブオブジェクトである＿Ｔｉｌｅ−ｓｈａｐｅｄを示すものである。実際に、インデックスタイプをタイリングするために、つまり、’ｔｉｌｅ（．．．）’演算子を有効とするために、以下のシグネチャのコンストラクタを有することが必要とされる。
【００２８】
2013539888.tif 000006
【００２９】
入力インデックスタイプ１４がフィールドのイニシャルオブジェクト（すなわち、”ｆｉｅｌｄ”）として定義されている他の例において、タイルコミュニケーションオペレーター１２は以下のコード部分を利用して、入力インデックスタイプ１４のフィールドを出力インデックスタイプ１８にタイリングする。
【００３０】
2013539888.tif 000007
【００３１】
上記のコード部分においては、ｇｒｉｄ＜＿Ｒａｎｋ＞（ｅ）は、タイルの集合体としてのｔｉｌｅ＿ｒａｎｇｅの形状（ｓｈａｐｅ）を示す。＿Ｔｉｌｅは乗数（ｍｕｌｔｉｐｌｉｅｒ）又はｔｉｌｅ＿ｒａｎｇｅによって行われるステップ、すなわち、次のタイル（’ｔｈｅ  ｎｅｘｔ  ｔｉｌｅ’）は、＿Ｔｉｌｅによってインクリメントされる。最後のパラメーターである、
【００３２】
2013539888.tif 000008
【００３３】
は、ｆｉｅｌｄ＜＿Ｒａｎｋ，  ＿Ｅｌｅｍｅｎｔ＿ｔｙｐｅ＞のサブオブジェクトである＿Ｔｉｌｅ−ｓｈａｐｅｄを示すものである。
【００３４】
図４は、タイルコミュニケーションオペレーター１２と出力インデックスタイプ１８を実装するコードの一実施形態を示すコンピュータコード図である。図４において示されるコードにおいて、データストラクチャである”ｔｉｌｅ＿ｒａｎｇｅ”が、タイルコミュニケーションオペレーター１２の”ｔｉｌｅ”により、出力インデックスタイプ１８（同様に、”ｐｓｅｕｄｏ−ｆｉｅｌｄ”と呼ばれる）を形成する。ｔｉｌｅ＿ｒａｎｇｅのインデックス演算子は、以下をとり、
【００３５】
2013539888.tif 000009
【００３６】
そして、フィールド、又は、エクステントが＿Ｔｉｌｅ
であり、そのオフセットが＿Ｐａｒｅｎｔ  内の
【００３７】
2013539888.tif 000010
【００３８】
である  ｐｓｅｕｄｏ−ｆｉｅｌｄを形成する。
【００３９】
出力インデックスタイプ１８は、ＤＰ最適化コンピューターノードにおいてグローバルメモリへのコアレス（ｃｏａｌｅｓｃｅ）アクセスを可能とするデータ並列処理アルゴリズムの計算上の空間（例えば、入力インデックスタイプ１４等）のローカルビュー構造を提供する。データ並列処理アルゴリズムのローカル構造（ストラクチャ）は、ＤＰ最適化コンピューターノードの実行構造体（ｅｘｅｃｕｔｉｏｎ  ｓｔｒｕｃｔｕｒｅ）（例えば、スレッドグループ、スレッドブロック、ワークグループ又はｗａｖｅ等）に対応したスケジューリングパターンを形成する。ストリーミングＳＩＭＤエクステンション（ＳＳＥ）計算エンジンを含むＤＰ最適化コンピューターノードに対して、ローカルストラクチャは、ループタイリング又はループブロッキングを通じて形成されるストリップマイニング拡張機能に相似するものである。ローカルストラクチャは、グローバルメモリストアへのアクセスにおいて、アルゴリズム的により高いアクセスパフォーマンスを実現するために、ＤＰ最適化コンピューターノードの高速なローカルメモリ又は共有メモリ（例えば、有効なスクラッチパッドメモリ又はキャッシュ）と情報をやりとりする。タイリングに対するローカルストラクチャの関係性は次のものである。タイルは複数のローカルストラクチャの定数の倍数として設定されることにより、タイルに割り当てられるローカルストラクチャの数によって、実行構造のループディメンションをループ展開（アンローリング）する程度が決定される。この関係性は、以下のローカルビューの分解において示される：
【００４０】
2013539888.tif 000011
【００４１】
＿ｔｉｌｅＩｎｄｅｘ  は、＿ｉｎｄｅｘ（すなわち、入力インデックスタイプ１４）に含まれるタイルの座標を示し、そして、＿ｌｏｃａｌＩｎｄｅｘ  は、そのタイルにおけるオフセットを示す。ローカルストラクチャの定数である、ｔｈｒｅａｄ＿ｇｒｏｕｐ＿ｄｉｍｅｎｔｉｏｎｓは、＿Ｔｉｌｅと同じ値にセットされるか、又は、ｔｈｒｅａｄ＿ｇｒｏｕｐ＿ｄｉｍｅｎｔｉｏｎｓの倍数（例えば１６）が＿Ｔｉｌｅと同じ値にセットされることにより、ＤＰ最適化コンピューターノードにおいて、グローバルメモリへのコアレス（ｃｏａｌｅｓｃｅ）アクセスを可能とする。従って、タイルコミュニケーションオペレーター１２によれは、ＤＰ最適化ノードにおいて、単純で且つエラーフリーで直感的なタイル分割を可能とする。
【００４２】
タイルコミュニケーションオペレーター１２は、繰り返し適用され、インデックスタイプを操作するその他のコミュニケーションオペレーターと結び付けられてもよい。
【００４３】
行列積に関するタイルコミュニケーションオペレーター１２の使用について、ここで示される。
【００４４】
タイルコミュニケーションオペレーター１２を使用しなければ、行列積はグローバルビューストラクチャにおいて、以下のコードで示されるように実施されるであろう。
【００４５】
2013539888.tif 000012
【００４６】
１６ｘ１６のスレッドグループディメンションとされたローカルビューストラクチャがあると仮定する。アルゴリズム的には、マトリックスＡ，Ｂ及びＣを１６ｘ１６のタイルにタイリングする（ここでは、Ｎは、１６で割り切れる数とする−一般的な境界チェック（ｃｈｅｃｋｓ  ｆｏｒ  ｂｏｕｎｄａｒｙ  ｃｏｎｄｉｔｉｏｎｓ）とカーネルは、タイル元のデータに完全に含まれていないときは、早い時期に終了してしまう。）。
【００４７】
以下のループ処理が繰り返し実行され、
【００４８】
2013539888.tif 000013
【００４９】
そして以下の結果がもたらされる
【００５０】
2013539888.tif 000014
【００５１】
上記をタイリングするために、解体する
【００５２】
2013539888.tif 000015
【００５３】
そして、タイリングされた＿ｍＡ及びタイリングされた＿ｍＢから以下をもたらす。
【００５４】
2013539888.tif 000016
【００５５】
上記の解体から、以下のことがわかる。
【００５６】
2013539888.tif 000017
【００５７】
2013539888.tif 000018
【００５８】
から応答が始まり、つまり、マトリックス中のすべてのポイントは、タイル中にポイント及びオフセットを含むタイルに固有に分解したものを有している。ここで挙げた例を完了するために、共有メモリを利用したコアレスアクセスが実施されうる。上記のグローバルビューマトリックス乗算により、１６ｘ１６のスレッドグループディメンションに対してディスパッチされるカーネルが形成されると仮定すると、論理的には２５６スレッドが同時にカーネルを実行することになる。あるスレッドは、同じスレッドグループの他のスレッドからの結果を必要とするときは常に、下記の同期バリア処理命令が挿入され、スレッドグループ内の他の全てのスレッドプロセスがバリアに到達するまで進行しないようにする。
【００５９】
2013539888.tif 000019
【００６０】
以下のメモリ読み込みが行われることを想定する。
【００６１】
2013539888.tif 000020
【００６２】
スレッドグループは、ｔｈｒｅａｄｓ（ｉ，ｊ）  ０＜＝ｉ，ｊ＜１６  となる。任意のｉに対して、スレッド
【００６３】
2013539888.tif 000021
【００６４】
は、完全にコアレスなメモリアクセスを実現するために、連続した４バイトのアドレスをグローバルメモリから読み込む。特に、スレッド（ｉ，０）は最初の４バイト読み込み、スレッド（ｉ，１）は２つ目の４バイトを読み込み、スレッド（ｉ，２）は３番目の４バイト読み込む。
【００６５】
グローバルメモリから、６４もしくは１２８バイトのチャンクでメモリアクセスが行われ、そして、アクセスされた全てのメモリを実際に使用することが最適である。しかしながら、
【００６６】
2013539888.tif 000022
【００６７】
は、いずれのスレッド列（ｉ，０），（ｉ，１），．．．，（ｉ，１５）に対しても、４バイトしか使用されず、ゆえに、フェッチされたグローバルメモリがほとんど利用されない。一方、
【００６８】
2013539888.tif 000023
【００６９】
は、６４バイトのチャンクに対して、完全にコアレスされる。なぜなら、ｌｏｃａｌＩｄｘは、実際に、（ｉ，０），  （ｉ，１），．．．，（ｉ，１５）のように変化するからである。同様に、スレッドグループ及び＿Ｔｉｌｅグループが、８ｘ３２次元であると仮定すると、
【００７０】
2013539888.tif 000024
【００７１】
は、１２８バイトのチャンクに対して、完全にコアレスされる。なぜなら、＿ｌｏｃａｌＩｄｘ  は、実際に  （ｉ，０），（ｉ，１），．．．，（ｉ，３１），のように変化するからである。
【００７２】
全てのメモリアクセスにおいて、必ずコアレスなアクセスがされるようにするために、グローバルメモリのデータがコアレスな形で共有メモリに読み込まれるが、コアレスされた順番は、計算を実行する順番ではないため、グループバリアで同期を取り、その後、共有メモリから望ましい順番でアクセスを行う。これにより、メモリアクセスが完全にコアレスであること、および価値ある最適化がもたらされるが、これは、ＤＰ最適化コンピューターノードにおける共有メモリは実質的にユニットアクセススピードを有するからである。
【００７３】
2013539888.tif 000025
【００７４】
これを全て合わせると、以下の結果をもたらす。
【００７５】
2013539888.tif 000026
【００７６】
タイルコミュニケーションオペレーター１２の利用により、完全なコアレスメモリアクセスをベースとして、行列積を行うスピードが飛躍的に高まる。加えて、マトリクスのうちの一つが、乗算のパーツとしてトランスポーズ（ｔｒａｎｓｐｏｓｅ）されるとすると、タイルコミュニケーションオペレーター１２の利用により、完全なコアレスメモリアクセスをベースとして、劇的にマトリックスの乗算のスピードが高まる可能性がある。Ａ＊ｔｒａｎｓｐｏｓｅ（Ｂ）の場合、タイリングなしで１００倍のパフォーマンスを生み出すために、メモリアクセスは全体として、コアレスメモリアクセスがなされない。
【００７７】
図５は、タイルコミュニケーションオペレーター１２を含むデータ並列コード１０をコンパイルして実行するためのコンピューターシステム１００の実施形態を示すブロック図である。
【００７８】
コンピューターシステム１００は、一つもしくは一つ以上のプロセッサパッケージ（図示されていない）に配置された一つもしくは一つ以上のプロセッシングエレメント（ＰＥ）１０２と、メモリシステム１０４を備えたホスト１０１を有する。コンピューターシステム１００はまた、ゼロまたはそれよりも多い入力／出力デバイス１０６と、ゼロまたはそれよりも多いディスプレイデバイス１０８、ゼロまたはそれよりも多い周辺機器１１０、ゼロまたはそれよりも多いネットワークデバイス１１２を備えてもよい。コンピューターシステム１００はさらに、コンピュータエンジン１２０を有し、コンピュータエンジン１２０は、一つ又は一つ以上のＤＰ最適化コンピューターノード１２１を備えており、それぞれのＤＰ最適化コンピューターノード１２１は、一つ以上のプロセッシングエレメント（ＰＥ）１２２とＤＰ実行可能ファイル１３８を保存するメモリ１２４とのセットを含んでいる。
【００７９】
ホスト１０１、入力／出力デバイス１０６、ディスプレイデバイス１０８、周辺機器１１０、ネットワークデバイス１１２およびコンピュータエンジン１２０は、それぞれ相互に、最適な種類、数及び設定のコントローラ、バス、インターフェース、及び／又はその他の有線又は無線接続を含む相互接続部１１４を通じて通信を行う。
【００８０】
コンピューターシステム１００は、汎用又は特定の目的に供すために構成された最適な処理装置を表す。コンピューターシステム１００の例には、サーバー、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、ＰＤＡ、携帯電話、そして、オーディオ／ビデオ機器が含まれる。コンピューターシステム１００のコンポーネント（すなわち、ホスト１０１、入力／出力デバイス１０６、ディスプレイデバイス１０８、周辺機器１１０、ネットワークデバイス１１２、相互接続部１１４およびコンピュータエンジン１２０）は、１つの共通の（図示されていない）筐体に設置されていてもよいし、又は、（図示されていない）適切な数の個別の筐体に置かれていても良い。
【００８１】
プロセッシングエレメント１０２それぞれは、メモリシステム１０４に保存されている処理命令（すなわち、ソフトウェア）を実行するように設計されている実行ハードウェアを形成する。各プロセッサパッケージに含まれるプロセッシングエレメント１０２は、同じ又は異なる、アーキテクチャ及び／又は処理命令セットを有していても良い。例えば、プロセッシングエレメント１０２は、順番どおりの実行エレメント、スーパースカラ（ｓｕｐｅｒｓｃａｌａｒ）実行エレメントおよびデータ並列実行エレメント（例えば、ＧＰＵ実行エレメント等）を有していても良い。それぞれのプロセッシングエレメント１０２はメモリシステム１０４に保存された処理命令にアクセスし、実行するように設定されている。処理命令は、ＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ  ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）や（図示されていない）ファームウェア、オペレーションシステム（ＯＳ）１３２、コード１０、コンパイラ１３４、ＧＰ実行可能ファイル１３６、そして、ＤＰ実行可能ファイル１３８を含む。各プロセッシングエレメント１０２は、入力／出力デバイス１０６、ディスプレイデバイス１０８、周辺機器１１０、ネットワークデバイス１１２、相互接続部１１４、コンピュータエンジン１２０から受信した情報と併せて、あるいは応答して処理命令を実行し得る。
【００８２】
ホスト１０１は、ＯＳ１３２をブートし、実行する。ＯＳ１３２は、プロセッシングエレメントが実行可能な、コンピューターシステム１００のコンポーネントの管理をするための処理命令を含み、また、各プログラムがコンポーネントにアクセスして利用するためのファンクションを提供する。ある実施形態においては、ＯＳ１３２はＷｉｎｄｏｗｓ（登録商標）オペレーションシステムであってもよい。その他の実施形態においては、ＯＳ１３２は、コンピューターシステム１００とともに使用されるのに適切な他のオペレーションシステムであっても良い。
【００８３】
コンピューターシステムが、コード１０をコンパイルするために、コンパイラ１３４を実行する際には、コンパイラ１３４は、一以上の実行可能ファイル、例えば、一つ以上のＧＰ実行可能ファイル１３６や、一つ以上のＤＰ実行可能ファイル１３８を生成する。他の実施形態においては、コンパイラ１３４は、それぞれが一つ以上のＤＰ実行可能ファイル１３８を含む一つ以上のＧＰ実行可能ファイル１３６を生成しても良く、ＧＰ実行可能ファイル１３６を生成することなく、一つ以上のＤＰ実行可能ファイル１３８を生成してもよい。ＧＰ実行可能ファイル１３６及び／又はＤＰ実行可能ファイル１３８は、コンパイラ実行に応じて、コード１０の全て、又は選択された一部をコンパイルすることにより、データ並列処理拡張機能を伴う形式で生成される。コンパイルの実行は、プログラマ又はコンピューターシステム１００のその他のユーザーにより行われてもよく、その他のコンピュータシステム（図示されていない）におけるコードで指示されていてもよい。
【００８４】
ＧＰ実行可能ファイル１３６は、一つ以上の汎用プロセッシングエレメント１０２（例えば、中央処理装置（ＣＰＵ））上で実行されるためのプログラムを表す。ＧＰ実行可能ファイル１３６は、一つ以上の汎用プロセッシングエレメント１０２の命令セットからの下位レベルの処理命令を含む。
【００８５】
ＤＰ実行可能ファイル１３８は、データ並列処理プログラム又はデータ並列処理アルゴリズム（例えば、ｓｈａｄｅｒ等）を表すものであり、それらは一つ以上のデータ並列（ＤＰ）最適化コンピューターノード１２１上での実行用に最適化されたものである。ある実施形態においては、ＤＰ実行可能ファイル１３８は、ＤＰバイトコード、又は、ＤＰ最適化コンピューターノード上での実行前に、デバイスドライバ（図示されていない）により、ＤＰ最適化コンピューターノード１２１の処理命令群がローレベル処理命令に変換された他の中間表現（ＩＬ）を含んでいても良い。その他の実施形態として、ＤＰ実行可能ファイル１３８は、コンパイラ１３４によって挿入される、一つ以上のＤＰ最適化コンピューターノードの処理命令群からのローレベルの実行命令を含んでも良い。したがって、一つ以上の汎用プロセッサ（例えば、ＣＰＵ等）はＧＰ実行可能ファイル１３６を直接実行することができ、そして、一つ以上のＤＰ最適化コンピューターノード１２１、又は、ＤＰ最適化コンピューターノード１２１のローレベルの処理命令に変換された後のＤＰ最適化コンピューターノードのいずれも、ＤＰ実行可能ファイル１３８を実行し得る。
【００８６】
コンピューターシステム１００は一つ以上のプロセッシングエレメント１０２を使用して、ＧＰ実行ファイル１３６を実行しても良く、そして、コンピューターシステム１００はまた、下記に詳説される一つ以上のＰＥ１２２を利用してＤＰ実行可能ファイル１３８を実行してもよい。
【００８７】
メモリシステム１０４は、処理命令やデータを保存するために、適切なタイプ、数、そしてコンフィグレーションの揮発性又は不揮発性のストレージデバイスを含む。メモリシステム１０４のストレージデバイスは、ＯＳ１３２、コード１０、コンパイラ１３４、ＧＰ実行可能ファイル１３６、ＤＰ実行可能ファイル１３８を含む、コンピューターが実行可能な処理命令（すなわち、ソフトウェア）を保存するコンピューター可読保存媒体を表す。ＯＳ１３２、コード１０、コンパイラ１３４、ＧＰ実行可能ファイル１３６、ＤＰ可能実行ファイル１３８のファンクションやメソッドを実行するために、処理命令がコンピューターシステム１００によって実行されうる。メモリシステム１０４は、プロセッシングエレメント１０２、入力／出力デバイス１０６、ディスプレイデバイス１０８、周辺機器１１０、ネットワークデバイス１１２、コンピュータエンジン１２０から受信した処理命令やデータを保存する。メモリシステム１０４は、プロセッシングエレメント１０２、入力／出力デバイス１０６、ディスプレイデバイス、周辺機器１１０、ネットワークデバイス１１２、コンピュータエンジン１２０に対し、保存した処理命令やデータを提供する。メモリシステム１０４におけるストレージデバイスの例として、ハードディスクデバイス、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、フラッシュメモリデバイスもしくはカード、磁気及びＣＤやＤＶＤといった光学式ディスクが挙げられる。
【００８８】
入力／出力デバイス１０６は、適切なタイプ、数、そしてコンフィグレーションの入力／出力デバイスであって、ユーザーからコンピューターシステム１００への処理命令又はデータの入力や、コンピューターシステム１００からユーザーへの処理命令又はデータの出力を行うように構成されている。入力／出力デバイス１０６の例として、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイアル、ノブ、そしてスイッチなどが挙げられる。
【００８９】
ディスプレイデバイス１０８は、適切なタイプ、数、そしてコンフィグレーションのディスプレイデバイスであって、テキスト及び／又はグラフィック情報をコンピューターシステムのユーザーに向けて出力するように構成されている。ディスプレイデバイス１０８の例として、モニタ、ディスプレイスクリーン、プロジェクタ等が挙げられる。
【００９０】
周辺機器１１０は、適切なタイプ、数、そしてコンフィグレーションからなる周辺機器であって、コンピューターシステム１００における一つ以上のコンポーネントが一般的な又は特定の機能を発揮しうるように構成されている。
【００９１】
ネットワークデバイス１１２は、適切なタイプ、数、そしてコンフィグレーションのネットワークデバイスであって、コンピューターシステム１００が一つ以上のネットワーク（図示されていない）を通じて通信可能なように構成されている。ネットワークデバイス１１２は、適切なネットワークプロトコル及び／又はコンフィグレーションに従い動作し、コンピューターシステム１００からネットワークに情報を発信したり、コンピューターシステム１００によってネットワークから情報を受信したりする。
【００９２】
コンピュータエンジン１２０は、ＤＰ実行可能ファイル１３８を実行するように設計されている。コンピュータエンジン１２０は、一つ以上のコンピューターノード１２１を有する。コンピューターノード１２１それぞれは、メモリ階層を共有するコンピューター資源の集合体である。各々のコンピューターノード１２１は、ＰＥ１２２とＤＰ実行可能ファイル１３８を保存するメモリ１２４のセットを、１セット以上有する。ＰＥ１２２は、ＤＰ実行ファイル１３８を実行し、そしてその実行結果をメモリ１２４に保存する。特に、図５において示され、以下に詳説されるように、ＰＥ１２２は、ＤＰ実行可能ファイルを実行して、入力インデックスタイプ１４にタイルコミュニケーションオペレーター１２を適用することにより、出力インデックスタイプ１８を生成する。
【００９３】
データ並列処理（すなわち、ＤＰプログラム又はアルゴリズムの実行）のために最適化されたハードウェアアーキテクチャを備える一つ以上のコンピュータリソースを有するコンピューターノード１２１は、ＤＰ最適化コンピューターノード１２１と呼ばれる。ＤＰ最適化コンピューターノード１２１の例として、ＰＥ１２２のセットが一つ以上のＧＰＵを含むものと、ＰＥ１２２のセットが汎用プロセッサパッケージ中にＳＩＭＤユニットのセットを含むものが挙げられる。データ並列処理のための最適化されたハードウェアアーキテクチャを有するコンピュータリソースを全く備えていないコンピューターノード１２１（例えば、汎用プロセッシングエレメント１０２のみ有するプロセッサパッケージ等）は、非ＤＰ最適化コンピューターノード１２１と呼ばれる。各コンピューターノード１２１においては、メモリ１２４は、メモリシステム１０４（例えば、ＧＰＵにて使用されるＧＰＵメモリ）又はメモリシステム１０４の１部（例えば、汎用プロセッサパッケージに含まれるＳＩＭＤユニットに使用される）とは区別されうる。
【００９４】
ホスト１０１は、コンピューターノード１２１に対して、コンピューターノード１２１が実行するためのＤＰ実行可能ファイル１３８を提供し、且つ、相互接続部１１４を使用してＤＰ実行可能ファイル１３８が生成した応答を受信するよう設計されたホストコンピュータノードを形成する。ホストコンピュータノードは、メモリ階層（すなわち、メモリシステム１０４）を共有する汎用コンピュータリソース（すなわち、汎用プロセッシングエレメント１０２）の集合体を有する。例えば、ホストコンピュータノードは、ＳＭＰ（ｓｙｍｍｅｔｒｉｃ  ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  ａｒｃｈｉｔｅｃｔｕｒｅ）で設計されていてもよく、そして、また、ＮＵＭＡ（ｎｏｎ−ｕｎｉｆｏｒｍ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）アーキテクチャを採用して、メモリシステム１０４の局所参照性（ｍｅｍｏｒｙ  ｌｏｃａｌｉｔｙ）を最大化し得るように構成されていてもよい。
【００９５】
ホストコンピュータノードのＯＳ１３２は、ＤＰの  ｃａｌｌ  ｓｉｔｅを実行して、ＤＰ最適化コンピューターノード又は非ＤＰ最適化ノード１２１がＤＰ実行可能ファイル１３８を実行するように構成されている。メモリ１２４をメモリシステム１０４と区別する実施形態においては、ホストコンピュータノードは、ＤＰ実行可能ファイル１３８および一つ以上の入力インデックスタイプ１４がメモリシステム１０４からメモリ１２４に対してコピーされるようにする。メモリシステム１０４がメモリ１２４を含む実施形態においては、ホストコンピュータノードが、メモリシステム１０４におけるＤＰ実行可能ファイル１３８、及び／又は、一つ以上の入力インデックスタイプ１４のコピーをメモリ１２４として指定するか、ＤＰ実行ファイル１３８及び／又は一つ以上の入力インデックスタイプ１４を、メモリシステム１０４におけるある領域からメモリ１２４を構成するメモリシステム１０４の他の領域にコピーしてもよい。非同期と指定されない限り、コンピューターノード１２１とホストコンピュータノード間のコピー処理は、同期ポイントであっても良い。
【００９６】
ホストコンピュータノードと各コンピューターノード１２１は、互いにコードの実行をそれぞれ独立して同時に行っても良い。ホストコンピュータノードと各コンピューターノード１２１は、同期ポイントにおいて、相互に作用することにより、ノードでの計算を連携させることができる。
【００９７】
ある実施形態においては、コンピュータエンジン１２０は、グラフィックカードを表し、そこでは一つ以上のグラフィックプロセッシングユニット（ＧＰＵ）がＰＥ１２２及びメモリシステム１０４から分離されたメモリ１２４を有する。その実施形態においては、グラフィックカードのドライバ（図示されていない）によって、ＤＰ実行可能ファイル１３８のバイトコード又はＤＰ実行ファイル１３８の中間表現（ＩＬ）を、ＧＰＵのＰＥ１２２が実行しうる処理命令の形式に変換しても良い。
【００９８】
他の実施形態においては、コンピュータエンジン１２０は、一つ以上の汎用プロセッシングエレメント１０２、及び、メモリ１２４を含むメモリシステム１０４から構成されるプロセッサパッケージに含まれる一つ以上のＧＰＵ（すなわち、プロセッシングエレメント１２２）の組み合わせによって形成されていても良い。その実施形態においては、ＤＰ実行可能ファイル１３８のバイトコード又はＤＰ実行ファイル１３８の中間表現（ＩＬ）をＧＰＵが実行しうる処理命令の形式に変換するために、追加のソフトウェアがコンピューターシステム１００において提供されても良い。
【００９９】
その他の実施形態においては、コンピュータエンジン１２０は、プロセッシングエレメント１０２、及び、メモリ１２４を含むメモリシステム１０４から構成される一つ以上のプロセッサパッケージにおける、一つ以上のＳＩＭＤユニットの組み合わせによって形成されていてもよい。その実施形態においては、ＤＰ実行可能ファイル１３８のバイトコード又はＤＰ実行可能ファイル１３８の中間表現（ＩＬ）を、プロセッサパッケージに含まれるＳＩＭＤユニットが実行しうる処理命令の形式に変換するために、追加のソフトウェアがコンピューターシステム１００において提供されても良い。
【０１００】
また、その他の実施形態においては、コンピュータエンジン１２０は、プロセッシングエレメント１０２、及びメモリ１２４を含むメモリシステム１０４から構成される一つ以上のプロセッサパッケージに含まれる、一つ以上のスカラ又はベクタプロセッシングパイプラインの組み合わせによって形成されていてもよい。その実施形態においては、ＤＰ実行可能ファイル１３８のバイトコード又はＤＰ実行可能ファイル１３８の中間表現（ＩＬ）を、プロセッサパッケージに含まれるスカラプロセッシングパイプラインが実行しうる処理命令の形式に変換するために、追加のソフトウェアがコンピューターシステム１００において提供されても良い。
【０１０１】
ある特定の実施形態がこの明細書中において示され、詳説されているが、当業者は、本発明の趣旨を逸脱しない範囲内において、本明細書において説明されている実施形態に種々の変更を加え、及び／又は同等の実装形態（インプレメンテーション）に代替することが可能であろう。本出願は、本明細書において説明されている特定の実施形態における応用やバリエーションを包含するものである。それゆえに、本発明は、請求項に記載された事項や、請求項に記載されているに等しい事項に限定されるべきではない。
【図１】
2013539888.tif 000027
【図２】
2013539888.tif 000028
【図３】
2013539888.tif 000029
【図４】
2013539888.tif 000030
【図５】
2013539888.tif 000031
【国際調査報告】
2013539888.tif 000032
2013539888.tif 000033