(58)【調査した分野】(Int.Cl.,DB名)
請求項10記載の方法において、前記出力インデックスタイプが、前記1つ以上のデータ並列最適化計算ノードにおける、前記入力インデックスタイプのローカルビューストラクチャを提供する、方法。
請求項19記載のコンピューター可読メモリにおいて、前記第1エレメントタイプが第1の形状を有し、前記第2エレメントタイプは、前記タイルである第2の形状を有する、コンピューター可読メモリ。
【発明を実施するための形態】
【0008】
次の詳細な説明において、本明細書の一部を形成し、本発明が実行されうる例示的な実施形態によって示される添付図面を参照する。本明細書において、上(top)、下(bottom)、前(front)、後ろ(back)、先頭の(leading)、後続の(trailing)等の方向を示すための用語が、開示される図面の向きを示す言葉として用いられている。実施形態におけるコンポーネントは様々な異なる形態で配置可能であるから、方向を示すための用語が図示するために用いられているが、限定されて解釈されうるものではない。本発明の範囲を逸脱せずに、その他の実施形態が採用され得ること、構造的又は論理的な変更がされ得ることを留意されたい。したがって、以下の詳細な説明は、限定して解釈されるものではなく、本発明の範囲は添付された書面における、特許請求の範囲によって定義されるべきである。本明細書において開示される様々な実施例の機能は、特に限定のない限り、それぞれ組み合わされ得ることに留意されたい。
【0009】
図1は、タイルコミュニケーションオペレーター12のコード10の実施形態を表すコンピュータコード図である。コンパイルされ実行される際に、タイルコミュニケーションオペレーター12は、計算上の空間(
図1の実施形態においてindexable_type<N,T>として表される)を、extentとして定義される(
図1の実施形態において_Extentとして表される)サブスペース(すなわち、タイル)に分解する。タイルは、例えば、
図5におけるDP最適化コンピューターノード121や以下に詳説されるデータ並列(DP)最適化コンピューターノードの実行構造体(execution structure)(例えば、スレッドグループ(DirectX),スレッドブロック(CUDA),ワークグループ(OpenCL), 又はwaves(AND/ATI)等)にマッピングされうる。
【0010】
コード10は、高水準汎用プログラミング言語、又は、データ並列プログラミング言語(一つ以上のデータ並列(DP)最適化コンピューターノード(例えば、
図5におけるDP最適化コンピューターノード121)による実行のために一つ以上の実行可能ファイル(例えば、DP実行可能ファイル138)にコンパイルされうる)で記述された一連の処理命令を含む。
【0011】
ある実施形態においては、コード10は、一つ以上のモジュールのセットに保存されるプログラムを構成する、データ並列処理拡張機能を有する高水準汎用プログラミング言語(以下、「GP言語」という。)からの一連の処理命令を含む。GP言語においては、プログラムを異なるパーツ(例えば、モジュール)に分けて記述することが許容され、それぞれのモジュールは、コンピューターシステムがアクセスし得る、それぞれ異なるファイル又は場所に保存されても良い。GP言語は、一つ以上の汎用プロセッサ及び一つ以上の専用のDP最適化コンピューターノードの両方を含むコンピューター環境をプログラミングするための唯一の言語である。DP最適化コンピューターノードは、一般的にグラフィックプロセッシングユニット(GPU)又は汎用プロセッサのSIMDユニットであるが、汎用プロセッサのスカラまたはベクタ実行ユニットや、フィールドプログラマブルゲートアレイ(FPGA)、その他特定のコンピューター実行環境において最適なデバイスであっても良い。GP言語を利用して、プログラマは、汎用プロセッサ又はDPコンピューターノードそれぞれによる実行のために、汎用プロセッサ及びDP両方のソースコードをコード10に含めることができ、汎用プロセッサ及びDPソースコードの実行を協働させることができる。本実施形態においては、コード10は、アプリケーション、ライブラリ関数、又はオペレーティングシステムサービス等の適切なコードの種類を表すことができる。
【0012】
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最適化コンピューターノード、両方のためのプログラムを記述することを可能とする、推奨されるべき高水準汎用プログラミング言語となり得る。
【0013】
その他の実施形態として、コード10は、プログラムを形成する高水準データ並列処理プログラミング言語(以下、「DP言語」という。)からの一連の処理命令を含む。DP言語は、DP最適化コンピューターノードを有するコンピューター環境において、DP最適化コンピューターノードをプログラミングするための専用言語である。DP言語を利用することによって、プログラマは、DP最適化コンピューターノード上での実行用のコード10中で、DPソースコードを生成する。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等であってもよい。コード10は本実施形態において、アプリケーション、ライブラリ関数、又は、オペレーティングシステムサービスといった、適切なコードの種類であってもよい。
【0014】
コード10は、DP最適化コンピューターノード上での実行のために指定されるコード部分を含む。コード10がGP言語で記載された
図1における実施形態においては、GP言語を使用して、プログラマは、ベクトル関数を定義する際に、アノテーション26(例えば、_declspec(vector)...)を使って、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は、省略されても良い。
【0015】
図2は、タイルコミュニケーションオペレーター12を、入力インデックスタイプ14に適用することにより、出力インデックスタイプ18を生成する実施形態を表すブロック図である。ここで用いられているように、インデックスタイプは、一つ以上の添字演算子として、非負の整数であるランクと、element_typeとして表されるタイプが指定されているものであればどのようなデータタイプでもよい。もし、index<N>が整数のN−タプル(すなわち、整数のデータタイプであればよい)を示すタイプであれば、index<N>のインスタンスは、N個の整数{i0,i1,...,im}(mはN−1(すなわち、Nタプル)に等しい)のセットである。インデックス演算子であるランクNは、index<N>におけるNタプルインスタンスをとり、そのインスタンスを、インデックスタイプにおける各要素を定義するエレメントタイプと呼ばれる他の型のインスタンスと関連付ける。ある実施形態においては、インデックスタイプは、一つ以上の以下の演算子(operators)を定義する。
【0017】
その他の実施形態においては、オペレータは、関数、ファンクタ(Functor)又はより一般的な形態であっても良い。所定のランクとエレメントタイプを有するインデックスタイプのカテゴリは、フィールドと呼ばれるイニシャルオブジェクトを有する。インデックスタイプは、ポリトープ(polytope)の形状として、すなわち、座標軸における一次関数で表された有限数からなる半平面の交点として、代数的に表現されてもよい。
【0018】
図1及び
図2を参照すると、高水準言語であるコード10は、タイルコミュニケーションオペレーター12を、入力インデックスタイプ14をデータ並列コンピューティング環境において使用するために用いている。入力インデックスタイプ14は、ランク(例えば、
図1の実施形態におけるランクN)やエレメントタイプ(例えば、
図1の実施形態におけるエレメントタイプT)を有し、そして、タイルコミュニケーションオペレーター12によって分解される計算上の空間を定義する。入力インデックスタイプ14それぞれに対し、タイルコミュニケーションオペレーター12は、出力インデックスタイプ18を、入力インデックスタイプ14と同じランク、および入力インデックスタイプ14のタイルであるエレメントタイプとして出力する。
【0019】
図3は、タイルコミュニケーションオペレーター12によって出力インデックスタイプ18を生成する際の実施例を示すブロック図である。
図3の例として、タイルコミュニケーションオペレーター12は、2x2のタイルを使用して、4x4の入力インデックスタイプ14を、2x2の出力インデックスタイプ18に分割している。他の例として(図示されていない)、1024x1024のマトリックスを有する入力インデックスタイプ14と64x64のタイルを考えると、出力インデックスタイプ18を16x16のタイル(64x16=1024)とする例が挙げられる。
【0020】
タイルコミュニケーションオペレーター12はデータ分割の範囲パターン(range pattern)を示す。範囲パターンは、インデックスタイプの集合体を含む。Indexable<N>を、任意のランクNの入力インデックスタイプ14とすることは、インデックスオペレーターが、index<N>タイプのインスタンスを対象とすることを意味する。添字演算子(例えば、エレメントタイプ)の返される型(type)は、Indexable<N>::element_typeとなる。
【0021】
タイルコミュニケーションオペレーター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=(grid+grid_tile_−1)/grid_tile のオフセットでトランスレートされるgrid_tileに制限される、Indexable<N>の集合体となる。したがって、tile<grid_tile>(Indexable<N>)で生成された際に、grid_range は、range<N,Indexable<N>>の形状となる。
【0022】
タイルコミュニケーションオペレーター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>のパーティショニングであることである。
【0023】
入力インデックスタイプ14が”range”として定義されている例において、タイルコミュニケーションオペレーター12の以下のコード部分における“tile”を使用することによって、入力インデックスタイプ14のrangeを出力インデックスタイプ18にタイリングすることが可能である。
【0025】
上記のコード部分においては、grid<_Rank>(e)は、タイルの集合体として、tile_rangeの形状(shape)を現している。_Tileは乗数(multiplier)又はtile_rangeによって行われるステップ、すなわち、次のタイル(’the next tile’)は、_Tileによってインクリメントされる。最後のパラメーターである、
【0027】
は、_Parentのサブオブジェクトである_Tile−shapedを示すものである。実際に、インデックスタイプをタイリングするために、つまり、’tile(...)’演算子を有効とするために、以下のシグネチャのコンストラクタを有することが必要とされる。
【0029】
入力インデックスタイプ14がフィールドのイニシャルオブジェクト(すなわち、”field”)として定義されている他の例において、タイルコミュニケーションオペレーター12は以下のコード部分を利用して、入力インデックスタイプ14のフィールドを出力インデックスタイプ18にタイリングする。
【0031】
上記のコード部分においては、grid<_Rank>(e)は、タイルの集合体としてのtile_rangeの形状(shape)を示す。_Tileは乗数(multiplier)又はtile_rangeによって行われるステップ、すなわち、次のタイル(’the next tile’)は、_Tileによってインクリメントされる。最後のパラメーターである、
【0033】
は、field<_Rank, _Element_type>のサブオブジェクトである_Tile−shapedを示すものである。
【0034】
図4は、タイルコミュニケーションオペレーター12と出力インデックスタイプ18を実装するコードの一実施形態を示すコンピュータコード図である。
図4において示されるコードにおいて、データストラクチャである”tile_range”が、タイルコミュニケーションオペレーター12の”tile”により、出力インデックスタイプ18(同様に、”pseudo−field”と呼ばれる)を形成する。tile_rangeのインデックス演算子は、以下をとり、
【0036】
そして、フィールド、又は、エクステントが_Tile
であり、そのオフセットが_Parent 内の
【0038】
である pseudo−fieldを形成する。
【0039】
出力インデックスタイプ18は、DP最適化コンピューターノードにおいてグローバルメモリへのコアレス(coalesce)アクセスを可能とするデータ並列処理アルゴリズムの計算上の空間(例えば、入力インデックスタイプ14等)のローカルビュー構造を提供する。データ並列処理アルゴリズムのローカル構造(ストラクチャ)は、DP最適化コンピューターノードの実行構造体(execution structure)(例えば、スレッドグループ、スレッドブロック、ワークグループ又はwave等)に対応したスケジューリングパターンを形成する。ストリーミングSIMDエクステンション(SSE)計算エンジンを含むDP最適化コンピューターノードに対して、ローカルストラクチャは、ループタイリング又はループブロッキングを通じて形成されるストリップマイニング拡張機能に相似するものである。ローカルストラクチャは、グローバルメモリストアへのアクセスにおいて、アルゴリズム的により高いアクセスパフォーマンスを実現するために、DP最適化コンピューターノードの高速なローカルメモリ又は共有メモリ(例えば、有効なスクラッチパッドメモリ又はキャッシュ)と情報をやりとりする。タイリングに対するローカルストラクチャの関係性は次のものである。タイルは複数のローカルストラクチャの定数の倍数として設定されることにより、タイルに割り当てられるローカルストラクチャの数によって、実行構造のループディメンションをループ展開(アンローリング)する程度が決定される。この関係性は、以下のローカルビューの分解において示される:
【0041】
_tileIndex は、_index(すなわち、入力インデックスタイプ14)に含まれるタイルの座標を示し、そして、_localIndex は、そのタイルにおけるオフセットを示す。ローカルストラクチャの定数である、thread_group_dimentionsは、_Tileと同じ値にセットされるか、又は、thread_group_dimentionsの倍数(例えば16)が_Tileと同じ値にセットされることにより、DP最適化コンピューターノードにおいて、グローバルメモリへのコアレス(coalesce)アクセスを可能とする。従って、タイルコミュニケーションオペレーター12によれは、DP最適化ノードにおいて、単純で且つエラーフリーで直感的なタイル分割を可能とする。
【0042】
タイルコミュニケーションオペレーター12は、繰り返し適用され、インデックスタイプを操作するその他のコミュニケーションオペレーターと結び付けられてもよい。
【0043】
行列積に関するタイルコミュニケーションオペレーター12の使用について、ここで示される。
【0044】
タイルコミュニケーションオペレーター12を使用しなければ、行列積はグローバルビューストラクチャにおいて、以下のコードで示されるように実施されるであろう。
【0046】
16x16のスレッドグループディメンションとされたローカルビューストラクチャがあると仮定する。アルゴリズム的には、マトリックスA,B及びCを16x16のタイルにタイリングする(ここでは、Nは、16で割り切れる数とする−一般的な境界チェック(checks for boundary conditions)とカーネルは、タイル元のデータに完全に含まれていないときは、早い時期に終了してしまう。)。
【0047】
以下のループ処理が繰り返し実行され、
【0051】
上記をタイリングするために、解体する
【0053】
そして、タイリングされた_mA及びタイリングされた_mBから以下をもたらす。
【0055】
上記の解体から、以下のことがわかる。
【0058】
から応答が始まり、つまり、マトリックス中のすべてのポイントは、タイル中にポイント及びオフセットを含むタイルに固有に分解したものを有している。ここで挙げた例を完了するために、共有メモリを利用したコアレスアクセスが実施されうる。上記のグローバルビューマトリックス乗算により、16x16のスレッドグループディメンションに対してディスパッチされるカーネルが形成されると仮定すると、論理的には256スレッドが同時にカーネルを実行することになる。あるスレッドは、同じスレッドグループの他のスレッドからの結果を必要とするときは常に、下記の同期バリア処理命令が挿入され、スレッドグループ内の他の全てのスレッドプロセスがバリアに到達するまで進行しないようにする。
【0060】
以下のメモリ読み込みが行われることを想定する。
【0062】
スレッドグループは、threads(i,j) 0<=i,j<16 となる。任意のiに対して、スレッド
【0064】
は、完全にコアレスなメモリアクセスを実現するために、連続した4バイトのアドレスをグローバルメモリから読み込む。特に、スレッド(i,0)は最初の4バイト読み込み、スレッド(i,1)は2つ目の4バイトを読み込み、スレッド(i,2)は3番目の4バイト読み込む。
【0065】
グローバルメモリから、64もしくは128バイトのチャンクでメモリアクセスが行われ、そして、アクセスされた全てのメモリを実際に使用することが最適である。しかしながら、
【0067】
は、いずれのスレッド列(i,0),(i,1),...,(i,15)に対しても、4バイトしか使用されず、ゆえに、フェッチされたグローバルメモリがほとんど利用されない。一方、
【0069】
は、64バイトのチャンクに対して、完全にコアレスされる。なぜなら、localIdxは、実際に、(i,0), (i,1),...,(i,15)のように変化するからである。同様に、スレッドグループ及び_Tileグループが、8x32次元であると仮定すると、
【0071】
は、128バイトのチャンクに対して、完全にコアレスされる。なぜなら、_localIdx は、実際に (i,0),(i,1),...,(i,31),のように変化するからである。
【0072】
全てのメモリアクセスにおいて、必ずコアレスなアクセスがされるようにするために、グローバルメモリのデータがコアレスな形で共有メモリに読み込まれるが、コアレスされた順番は、計算を実行する順番ではないため、グループバリアで同期を取り、その後、共有メモリから望ましい順番でアクセスを行う。これにより、メモリアクセスが完全にコアレスであること、および価値ある最適化がもたらされるが、これは、DP最適化コンピューターノードにおける共有メモリは実質的にユニットアクセススピードを有するからである。
【0074】
これを全て合わせると、以下の結果をもたらす。
【0076】
タイルコミュニケーションオペレーター12の利用により、完全なコアレスメモリアクセスをベースとして、行列積を行うスピードが飛躍的に高まる。加えて、マトリクスのうちの一つが、乗算のパーツとしてトランスポーズ(transpose)されるとすると、タイルコミュニケーションオペレーター12の利用により、完全なコアレスメモリアクセスをベースとして、劇的にマトリックスの乗算のスピードが高まる可能性がある。A*transpose(B)の場合、タイリングなしで100倍のパフォーマンスを生み出すために、メモリアクセスは全体として、コアレスメモリアクセスがなされない。
【0077】
図5は、タイルコミュニケーションオペレーター12を含むデータ並列コード10をコンパイルして実行するためのコンピューターシステム100の実施形態を示すブロック図である。
【0078】
コンピューターシステム100は、一つもしくは一つ以上のプロセッサパッケージ(図示されていない)に配置された一つもしくは一つ以上のプロセッシングエレメント(PE)102と、メモリシステム104を備えたホスト101を有する。コンピューターシステム100はまた、ゼロまたはそれよりも多い入力/出力デバイス106と、ゼロまたはそれよりも多いディスプレイデバイス108、ゼロまたはそれよりも多い周辺機器110、ゼロまたはそれよりも多いネットワークデバイス112を備えてもよい。コンピューターシステム100はさらに、コンピュータエンジン120を有し、コンピュータエンジン120は、一つ又は一つ以上のDP最適化コンピューターノード121を備えており、それぞれのDP最適化コンピューターノード121は、一つ以上のプロセッシングエレメント(PE)122とDP実行可能ファイル138を保存するメモリ124とのセットを含んでいる。
【0079】
ホスト101、入力/出力デバイス106、ディスプレイデバイス108、周辺機器110、ネットワークデバイス112およびコンピュータエンジン120は、それぞれ相互に、最適な種類、数及び設定のコントローラ、バス、インターフェース、及び/又はその他の有線又は無線接続を含む相互接続部114を通じて通信を行う。
【0080】
コンピューターシステム100は、汎用又は特定の目的に供すために構成された最適な処理装置を表す。コンピューターシステム100の例には、サーバー、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、PDA、携帯電話、そして、オーディオ/ビデオ機器が含まれる。コンピューターシステム100のコンポーネント(すなわち、ホスト101、入力/出力デバイス106、ディスプレイデバイス108、周辺機器110、ネットワークデバイス112、相互接続部114およびコンピュータエンジン120)は、1つの共通の(図示されていない)筐体に設置されていてもよいし、又は、(図示されていない)適切な数の個別の筐体に置かれていても良い。
【0081】
プロセッシングエレメント102それぞれは、メモリシステム104に保存されている処理命令(すなわち、ソフトウェア)を実行するように設計されている実行ハードウェアを形成する。各プロセッサパッケージに含まれるプロセッシングエレメント102は、同じ又は異なる、アーキテクチャ及び/又は処理命令セットを有していても良い。例えば、プロセッシングエレメント102は、順番どおりの実行エレメント、スーパースカラ(superscalar)実行エレメントおよびデータ並列実行エレメント(例えば、GPU実行エレメント等)を有していても良い。それぞれのプロセッシングエレメント102はメモリシステム104に保存された処理命令にアクセスし、実行するように設定されている。処理命令は、BIOS(basic input output system)や(図示されていない)ファームウェア、オペレーションシステム(OS)132、コード10、コンパイラ134、GP実行可能ファイル136、そして、DP実行可能ファイル138を含む。各プロセッシングエレメント102は、入力/出力デバイス106、ディスプレイデバイス108、周辺機器110、ネットワークデバイス112、相互接続部114、コンピュータエンジン120から受信した情報と併せて、あるいは応答して処理命令を実行し得る。
【0082】
ホスト101は、OS132をブートし、実行する。OS132は、プロセッシングエレメントが実行可能な、コンピューターシステム100のコンポーネントの管理をするための処理命令を含み、また、各プログラムがコンポーネントにアクセスして利用するためのファンクションを提供する。ある実施形態においては、OS132はWindows(登録商標)オペレーションシステムであってもよい。その他の実施形態においては、OS132は、コンピューターシステム100とともに使用されるのに適切な他のオペレーションシステムであっても良い。
【0083】
コンピューターシステムが、コード10をコンパイルするために、コンパイラ134を実行する際には、コンパイラ134は、一以上の実行可能ファイル、例えば、一つ以上のGP実行可能ファイル136や、一つ以上のDP実行可能ファイル138を生成する。他の実施形態においては、コンパイラ134は、それぞれが一つ以上のDP実行可能ファイル138を含む一つ以上のGP実行可能ファイル136を生成しても良く、GP実行可能ファイル136を生成することなく、一つ以上のDP実行可能ファイル138を生成してもよい。GP実行可能ファイル136及び/又はDP実行可能ファイル138は、コンパイラ実行に応じて、コード10の全て、又は選択された一部をコンパイルすることにより、データ並列処理拡張機能を伴う形式で生成される。コンパイルの実行は、プログラマ又はコンピューターシステム100のその他のユーザーにより行われてもよく、その他のコンピュータシステム(図示されていない)におけるコードで指示されていてもよい。
【0084】
GP実行可能ファイル136は、一つ以上の汎用プロセッシングエレメント102(例えば、中央処理装置(CPU))上で実行されるためのプログラムを表す。GP実行可能ファイル136は、一つ以上の汎用プロセッシングエレメント102の命令セットからの下位レベルの処理命令を含む。
【0085】
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を実行し得る。
【0086】
コンピューターシステム100は一つ以上のプロセッシングエレメント102を使用して、GP実行ファイル136を実行しても良く、そして、コンピューターシステム100はまた、下記に詳説される一つ以上のPE122を利用してDP実行可能ファイル138を実行してもよい。
【0087】
メモリシステム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といった光学式ディスクが挙げられる。
【0088】
入力/出力デバイス106は、適切なタイプ、数、そしてコンフィグレーションの入力/出力デバイスであって、ユーザーからコンピューターシステム100への処理命令又はデータの入力や、コンピューターシステム100からユーザーへの処理命令又はデータの出力を行うように構成されている。入力/出力デバイス106の例として、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイアル、ノブ、そしてスイッチなどが挙げられる。
【0089】
ディスプレイデバイス108は、適切なタイプ、数、そしてコンフィグレーションのディスプレイデバイスであって、テキスト及び/又はグラフィック情報をコンピューターシステムのユーザーに向けて出力するように構成されている。ディスプレイデバイス108の例として、モニタ、ディスプレイスクリーン、プロジェクタ等が挙げられる。
【0090】
周辺機器110は、適切なタイプ、数、そしてコンフィグレーションからなる周辺機器であって、コンピューターシステム100における一つ以上のコンポーネントが一般的な又は特定の機能を発揮しうるように構成されている。
【0091】
ネットワークデバイス112は、適切なタイプ、数、そしてコンフィグレーションのネットワークデバイスであって、コンピューターシステム100が一つ以上のネットワーク(図示されていない)を通じて通信可能なように構成されている。ネットワークデバイス112は、適切なネットワークプロトコル及び/又はコンフィグレーションに従い動作し、コンピューターシステム100からネットワークに情報を発信したり、コンピューターシステム100によってネットワークから情報を受信したりする。
【0092】
コンピュータエンジン120は、DP実行可能ファイル138を実行するように設計されている。コンピュータエンジン120は、一つ以上のコンピューターノード121を有する。コンピューターノード121それぞれは、メモリ階層を共有するコンピューター資源の集合体である。各々のコンピューターノード121は、PE122とDP実行可能ファイル138を保存するメモリ124のセットを、1セット以上有する。PE122は、DP実行ファイル138を実行し、そしてその実行結果をメモリ124に保存する。特に、
図5において示され、以下に詳説されるように、PE122は、DP実行可能ファイルを実行して、入力インデックスタイプ14にタイルコミュニケーションオペレーター12を適用することにより、出力インデックスタイプ18を生成する。
【0093】
データ並列処理(すなわち、DPプログラム又はアルゴリズムの実行)のために最適化されたハードウェアアーキテクチャを備える一つ以上のコンピュータリソースを有するコンピューターノード121は、DP最適化コンピューターノード121と呼ばれる。DP最適化コンピューターノード121の例として、PE122のセットが一つ以上のGPUを含むものと、PE122のセットが汎用プロセッサパッケージ中にSIMDユニットのセットを含むものが挙げられる。データ並列処理のための最適化されたハードウェアアーキテクチャを有するコンピュータリソースを全く備えていないコンピューターノード121(例えば、汎用プロセッシングエレメント102のみ有するプロセッサパッケージ等)は、非DP最適化コンピューターノード121と呼ばれる。各コンピューターノード121においては、メモリ124は、メモリシステム104(例えば、GPUにて使用されるGPUメモリ)又はメモリシステム104の1部(例えば、汎用プロセッサパッケージに含まれるSIMDユニットに使用される)とは区別されうる。
【0094】
ホスト101は、コンピューターノード121に対して、コンピューターノード121が実行するためのDP実行可能ファイル138を提供し、且つ、相互接続部114を使用してDP実行可能ファイル138が生成した応答を受信するよう設計されたホストコンピュータノードを形成する。ホストコンピュータノードは、メモリ階層(すなわち、メモリシステム104)を共有する汎用コンピュータリソース(すなわち、汎用プロセッシングエレメント102)の集合体を有する。例えば、ホストコンピュータノードは、SMP(symmetric multiprocessing architecture)で設計されていてもよく、そして、また、NUMA(non−uniform memory access)アーキテクチャを採用して、メモリシステム104の局所参照性(memory locality)を最大化し得るように構成されていてもよい。
【0095】
ホストコンピュータノードのOS132は、DPの call siteを実行して、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とホストコンピュータノード間のコピー処理は、同期ポイントであっても良い。
【0096】
ホストコンピュータノードと各コンピューターノード121は、互いにコードの実行をそれぞれ独立して同時に行っても良い。ホストコンピュータノードと各コンピューターノード121は、同期ポイントにおいて、相互に作用することにより、ノードでの計算を連携させることができる。
【0097】
ある実施形態においては、コンピュータエンジン120は、グラフィックカードを表し、そこでは一つ以上のグラフィックプロセッシングユニット(GPU)がPE122及びメモリシステム104から分離されたメモリ124を有する。その実施形態においては、グラフィックカードのドライバ(図示されていない)によって、DP実行可能ファイル138のバイトコード又はDP実行ファイル138の中間表現(IL)を、GPUのPE122が実行しうる処理命令の形式に変換しても良い。
【0098】
他の実施形態においては、コンピュータエンジン120は、一つ以上の汎用プロセッシングエレメント102、及び、メモリ124を含むメモリシステム104から構成されるプロセッサパッケージに含まれる一つ以上のGPU(すなわち、プロセッシングエレメント122)の組み合わせによって形成されていても良い。その実施形態においては、DP実行可能ファイル138のバイトコード又はDP実行ファイル138の中間表現(IL)をGPUが実行しうる処理命令の形式に変換するために、追加のソフトウェアがコンピューターシステム100において提供されても良い。
【0099】
その他の実施形態においては、コンピュータエンジン120は、プロセッシングエレメント102、及び、メモリ124を含むメモリシステム104から構成される一つ以上のプロセッサパッケージにおける、一つ以上のSIMDユニットの組み合わせによって形成されていてもよい。その実施形態においては、DP実行可能ファイル138のバイトコード又はDP実行可能ファイル138の中間表現(IL)を、プロセッサパッケージに含まれるSIMDユニットが実行しうる処理命令の形式に変換するために、追加のソフトウェアがコンピューターシステム100において提供されても良い。
【0100】
また、その他の実施形態においては、コンピュータエンジン120は、プロセッシングエレメント102、及びメモリ124を含むメモリシステム104から構成される一つ以上のプロセッサパッケージに含まれる、一つ以上のスカラ又はベクタプロセッシングパイプラインの組み合わせによって形成されていてもよい。その実施形態においては、DP実行可能ファイル138のバイトコード又はDP実行可能ファイル138の中間表現(IL)を、プロセッサパッケージに含まれるスカラプロセッシングパイプラインが実行しうる処理命令の形式に変換するために、追加のソフトウェアがコンピューターシステム100において提供されても良い。
【0101】
ある特定の実施形態がこの明細書中において示され、詳説されているが、当業者は、本発明の趣旨を逸脱しない範囲内において、本明細書において説明されている実施形態に種々の変更を加え、及び/又は同等の実装形態(インプレメンテーション)に代替することが可能であろう。本出願は、本明細書において説明されている特定の実施形態における応用やバリエーションを包含するものである。それゆえに、本発明は、請求項に記載された事項や、請求項に記載されているに等しい事項に限定されるべきではない。