JP6092780B2 - タイルコミュニケーションオペレーター - Google Patents

タイルコミュニケーションオペレーター Download PDF

Info

Publication number
JP6092780B2
JP6092780B2 JP2013533869A JP2013533869A JP6092780B2 JP 6092780 B2 JP6092780 B2 JP 6092780B2 JP 2013533869 A JP2013533869 A JP 2013533869A JP 2013533869 A JP2013533869 A JP 2013533869A JP 6092780 B2 JP6092780 B2 JP 6092780B2
Authority
JP
Japan
Prior art keywords
data parallel
index type
tile
parallel processing
type
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
JP2013533869A
Other languages
English (en)
Other versions
JP2013539888A5 (ja
JP2013539888A (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 JP2013539888A publication Critical patent/JP2013539888A/ja
Publication of JP2013539888A5 publication Critical patent/JP2013539888A5/ja
Application granted granted Critical
Publication of JP6092780B2 publication Critical patent/JP6092780B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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/453Data distribution
    • 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
    • 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

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)
  • Communication Control (AREA)

Description

本発明は、タイルコミュニケーションオペレーター(Tile Communication Operator)に関する。
従来、コンピューターシステムは、通常、一つ又は一つ以上の汎用プロセッサ(例えば、中央処理装置(CPU)や、一つ又は一つ以上の、より特化したデータ並列計算ノード(例えば、グラフィックスプロセッシングユニット(GPU)又は、CPUにおけるSIMD(single instruction, multiple data)演算実行部)を有する。汎用プロセッサは、通常コンピューターシステムにおいて汎用的な処理を行い、データ並列計算ノードは、一般的にコンピューターシステムにおいてデータ並列処理(例えば、グラフィック処理等)を行う。汎用プロセッサは、データ並列処理アルゴリズムの実装が可能であり、データ並列計算ノードのようなハードウェアリソースの最適化を行わずに処理を行うこともある。その結果、汎用プロセッサにおけるデータ並列処理アルゴリズムの処理は、データ並列計算ノードに比して、かなり非効率となる。
データ並列計算ノードは、もともと、コンピューターシステムにおいてプログラムを実行する際の、汎用プロセッサに対する補助的な役割を有している。データ並列計算ノードの処理能力の向上により、データ並列処理アルゴリズムを実施するための最適化されたハードウェアの役割は増しており、データ並列計算ノードのプログラムを行うプログラマの技能を高めること、そして、より容易にデータ並列計算ノードのプログラミングを行い得ることが望まれている。
計算機型線形代数(computational linear algebra)における一般的な技術として、計算上の空間が、サブスペースに分割され、各タイル又はブロックをポイントであるかのように処理することによってアルゴリズムが再帰的に実装される、タイル又はブロック分割アルゴリズムがある。そのような分割においては、しかしながら、インデックス群の詳細なトラッキングが必要であり、また、タイル及びブロックの相対的な位置関係の把握も必要とされる。その結果、インデックスの作成及び位置関係の処理においては、エラーが発生しやすく、実装が難しい。
本要約は、簡潔化された形式で選択されたコンセプト群を紹介するものであり、下記の発明を実施するための形態においてより詳細に説明される。本要約は、特許請求の範囲に記載された事項の主要な機能や本質的な機能を明らかにするためのものではなく、請求項に記載された事項の範囲を限定するために用いられるものでもない。
高級プログラミング言語によって、計算上の空間を、データ並列計算ノードにおける実行構造体(execution structure)(例えば、スレッドグループ)にマッピングされたサブスペース(すなわち、タイル)に分割するタイルコミュニケーションオペレーターを提供する。ランク(rank)とエレメントタイプ(element type)を有するインデックスタイプ(indexable type)は、計算上の空間を定義する。入力インデックスタイプ(input indexable type)に対し、タイルコミュニケーションオペレーターは、入力インデックスタイプと同じランクと入力インデックスタイプのタイルであるエレメントタイプを有する出力インデックスタイプ(output indexable type)を生成する。出力インデックスタイプは、データ並列計算ノードにおいて、グローバルメモリアクセスにおけるコアレッシング(coalescing)を実現する計算上の空間におけるローカルビューストラクチャを提供する。
添付された図面は、本発明の実施形態をより深く理解するために提供され、本明細書の一部として組み込まれている。図面は、本発明の実施形態を示し、明細書中の説明と共に参照されることにより、実施形態の原理が理解され得る。その他の実施形態及び実施形態における意図された有益な点は、以下の詳細な説明を参照することにより、理解が深まり、より一層認識され得る。図面における各要素は、必ずしも相対的に縮尺を変える必要はない。同一の参照番号は、同一又は類似する部分を示す。
タイルコミュニケーションオペレーターのコードの実施形態を表すコンピュータコード図である。 入力インデックスタイプにタイルコミュニケーションオペレーターを適用する実施形態を表すブロック図である。 出力インデックスタイプをタイルコミュニケーションオペレーターで生成する実施形態を表すブロック図である。 タイルコミュニケーションオペレーターを実装するコードの実施形態を表すコンピュータコード図である。 タイルコミュニケーションオペレーターを含むデータ並列コードをコンパイルし実行するように設計されたコンピューターシステムの実施形態を表すブロック図である。
次の詳細な説明において、本明細書の一部を形成し、本発明が実行されうる例示的な実施形態によって示される添付図面を参照する。本明細書において、上(top)、下(bottom)、前(front)、後ろ(back)、先頭の(leading)、後続の(trailing)等の方向を示すための用語が、開示される図面の向きを示す言葉として用いられている。実施形態におけるコンポーネントは様々な異なる形態で配置可能であるから、方向を示すための用語が図示するために用いられているが、限定されて解釈されうるものではない。本発明の範囲を逸脱せずに、その他の実施形態が採用され得ること、構造的又は論理的な変更がされ得ることを留意されたい。したがって、以下の詳細な説明は、限定して解釈されるものではなく、本発明の範囲は添付された書面における、特許請求の範囲によって定義されるべきである。本明細書において開示される様々な実施例の機能は、特に限定のない限り、それぞれ組み合わされ得ることに留意されたい。
図1は、タイルコミュニケーションオペレーター12のコード10の実施形態を表すコンピュータコード図である。コンパイルされ実行される際に、タイルコミュニケーションオペレーター12は、計算上の空間(図1の実施形態においてindexable_type<N,T>として表される)を、extentとして定義される(図1の実施形態において_Extentとして表される)サブスペース(すなわち、タイル)に分解する。タイルは、例えば、図5におけるDP最適化コンピューターノード121や以下に詳説されるデータ並列(DP)最適化コンピューターノードの実行構造体(execution structure)(例えば、スレッドグループ(DirectX),スレッドブロック(CUDA),ワークグループ(OpenCL), 又はwaves(AND/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,Visual Basic,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,PGI GPGPU Accelerator,CAPS GPGPU Accelerator,Brook+,CAL,APL,Fortran 90(より上位),Data Parallel C, DAPPLE,又はAPL等であってもよい。コード10は本実施形態において、アプリケーション、ライブラリ関数、又は、オペレーティングシステムサービスといった、適切なコードの種類であってもよい。
コード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は、省略されても良い。
図2は、タイルコミュニケーションオペレーター12を、入力インデックスタイプ14に適用することにより、出力インデックスタイプ18を生成する実施形態を表すブロック図である。ここで用いられているように、インデックスタイプは、一つ以上の添字演算子として、非負の整数であるランクと、element_typeとして表されるタイプが指定されているものであればどのようなデータタイプでもよい。もし、index<N>が整数のN−タプル(すなわち、整数のデータタイプであればよい)を示すタイプであれば、index<N>のインスタンスは、N個の整数{i0,i1,...,im}(mはN−1(すなわち、Nタプル)に等しい)のセットである。インデックス演算子であるランクNは、index<N>におけるNタプルインスタンスをとり、そのインスタンスを、インデックスタイプにおける各要素を定義するエレメントタイプと呼ばれる他の型のインスタンスと関連付ける。ある実施形態においては、インデックスタイプは、一つ以上の以下の演算子(operators)を定義する。
Figure 0006092780
その他の実施形態においては、オペレータは、関数、ファンクタ(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はデータ分割の範囲パターン(range pattern)を示す。範囲パターンは、インデックスタイプの集合体を含む。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=(grid+grid_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にタイリングすることが可能である。
Figure 0006092780
上記のコード部分においては、grid<_Rank>(e)は、タイルの集合体として、tile_rangeの形状(shape)を現している。_Tileは乗数(multiplier)又はtile_rangeによって行われるステップ、すなわち、次のタイル(’the next tile’)は、_Tileによってインクリメントされる。最後のパラメーターである、
Figure 0006092780
は、_Parentのサブオブジェクトである_Tile−shapedを示すものである。実際に、インデックスタイプをタイリングするために、つまり、’tile(...)’演算子を有効とするために、以下のシグネチャのコンストラクタを有することが必要とされる。
Figure 0006092780
入力インデックスタイプ14がフィールドのイニシャルオブジェクト(すなわち、”field”)として定義されている他の例において、タイルコミュニケーションオペレーター12は以下のコード部分を利用して、入力インデックスタイプ14のフィールドを出力インデックスタイプ18にタイリングする。
Figure 0006092780
上記のコード部分においては、grid<_Rank>(e)は、タイルの集合体としてのtile_rangeの形状(shape)を示す。_Tileは乗数(multiplier)又はtile_rangeによって行われるステップ、すなわち、次のタイル(’the next tile’)は、_Tileによってインクリメントされる。最後のパラメーターである、
Figure 0006092780
は、field<_Rank, _Element_type>のサブオブジェクトである_Tile−shapedを示すものである。
図4は、タイルコミュニケーションオペレーター12と出力インデックスタイプ18を実装するコードの一実施形態を示すコンピュータコード図である。図4において示されるコードにおいて、データストラクチャである”tile_range”が、タイルコミュニケーションオペレーター12の”tile”により、出力インデックスタイプ18(同様に、”pseudo−field”と呼ばれる)を形成する。tile_rangeのインデックス演算子は、以下をとり、
Figure 0006092780
そして、フィールド、又は、エクステントが_Tile
であり、そのオフセットが_Parent 内の
Figure 0006092780
である pseudo−fieldを形成する。
出力インデックスタイプ18は、DP最適化コンピューターノードにおいてグローバルメモリへのコアレス(coalesce)アクセスを可能とするデータ並列処理アルゴリズムの計算上の空間(例えば、入力インデックスタイプ14等)のローカルビュー構造を提供する。データ並列処理アルゴリズムのローカル構造(ストラクチャ)は、DP最適化コンピューターノードの実行構造体(execution structure)(例えば、スレッドグループ、スレッドブロック、ワークグループ又はwave等)に対応したスケジューリングパターンを形成する。ストリーミングSIMDエクステンション(SSE)計算エンジンを含むDP最適化コンピューターノードに対して、ローカルストラクチャは、ループタイリング又はループブロッキングを通じて形成されるストリップマイニング拡張機能に相似するものである。ローカルストラクチャは、グローバルメモリストアへのアクセスにおいて、アルゴリズム的により高いアクセスパフォーマンスを実現するために、DP最適化コンピューターノードの高速なローカルメモリ又は共有メモリ(例えば、有効なスクラッチパッドメモリ又はキャッシュ)と情報をやりとりする。タイリングに対するローカルストラクチャの関係性は次のものである。タイルは複数のローカルストラクチャの定数の倍数として設定されることにより、タイルに割り当てられるローカルストラクチャの数によって、実行構造のループディメンションをループ展開(アンローリング)する程度が決定される。この関係性は、以下のローカルビューの分解において示される:
Figure 0006092780
_tileIndex は、_index(すなわち、入力インデックスタイプ14)に含まれるタイルの座標を示し、そして、_localIndex は、そのタイルにおけるオフセットを示す。ローカルストラクチャの定数である、thread_group_dimentionsは、_Tileと同じ値にセットされるか、又は、thread_group_dimentionsの倍数(例えば16)が_Tileと同じ値にセットされることにより、DP最適化コンピューターノードにおいて、グローバルメモリへのコアレス(coalesce)アクセスを可能とする。従って、タイルコミュニケーションオペレーター12によれは、DP最適化ノードにおいて、単純で且つエラーフリーで直感的なタイル分割を可能とする。
タイルコミュニケーションオペレーター12は、繰り返し適用され、インデックスタイプを操作するその他のコミュニケーションオペレーターと結び付けられてもよい。
行列積に関するタイルコミュニケーションオペレーター12の使用について、ここで示される。
タイルコミュニケーションオペレーター12を使用しなければ、行列積はグローバルビューストラクチャにおいて、以下のコードで示されるように実施されるであろう。
Figure 0006092780
16x16のスレッドグループディメンションとされたローカルビューストラクチャがあると仮定する。アルゴリズム的には、マトリックスA,B及びCを16x16のタイルにタイリングする(ここでは、Nは、16で割り切れる数とする−一般的な境界チェック(checks for boundary conditions)とカーネルは、タイル元のデータに完全に含まれていないときは、早い時期に終了してしまう。)。
以下のループ処理が繰り返し実行され、
Figure 0006092780
そして以下の結果がもたらされる
Figure 0006092780
上記をタイリングするために、解体する
Figure 0006092780
そして、タイリングされた_mA及びタイリングされた_mBから以下をもたらす。
Figure 0006092780
上記の解体から、以下のことがわかる。
Figure 0006092780
Figure 0006092780
から応答が始まり、つまり、マトリックス中のすべてのポイントは、タイル中にポイント及びオフセットを含むタイルに固有に分解したものを有している。ここで挙げた例を完了するために、共有メモリを利用したコアレスアクセスが実施されうる。上記のグローバルビューマトリックス乗算により、16x16のスレッドグループディメンションに対してディスパッチされるカーネルが形成されると仮定すると、論理的には256スレッドが同時にカーネルを実行することになる。あるスレッドは、同じスレッドグループの他のスレッドからの結果を必要とするときは常に、下記の同期バリア処理命令が挿入され、スレッドグループ内の他の全てのスレッドプロセスがバリアに到達するまで進行しないようにする。
Figure 0006092780
以下のメモリ読み込みが行われることを想定する。
Figure 0006092780
スレッドグループは、threads(i,j) 0<=i,j<16 となる。任意のiに対して、スレッド
Figure 0006092780
は、完全にコアレスなメモリアクセスを実現するために、連続した4バイトのアドレスをグローバルメモリから読み込む。特に、スレッド(i,0)は最初の4バイト読み込み、スレッド(i,1)は2つ目の4バイトを読み込み、スレッド(i,2)は3番目の4バイト読み込む。
グローバルメモリから、64もしくは128バイトのチャンクでメモリアクセスが行われ、そして、アクセスされた全てのメモリを実際に使用することが最適である。しかしながら、
Figure 0006092780
は、いずれのスレッド列(i,0),(i,1),...,(i,15)に対しても、4バイトしか使用されず、ゆえに、フェッチされたグローバルメモリがほとんど利用されない。一方、
Figure 0006092780
は、64バイトのチャンクに対して、完全にコアレスされる。なぜなら、localIdxは、実際に、(i,0), (i,1),...,(i,15)のように変化するからである。同様に、スレッドグループ及び_Tileグループが、8x32次元であると仮定すると、
Figure 0006092780
は、128バイトのチャンクに対して、完全にコアレスされる。なぜなら、_localIdx は、実際に (i,0),(i,1),...,(i,31),のように変化するからである。
全てのメモリアクセスにおいて、必ずコアレスなアクセスがされるようにするために、グローバルメモリのデータがコアレスな形で共有メモリに読み込まれるが、コアレスされた順番は、計算を実行する順番ではないため、グループバリアで同期を取り、その後、共有メモリから望ましい順番でアクセスを行う。これにより、メモリアクセスが完全にコアレスであること、および価値ある最適化がもたらされるが、これは、DP最適化コンピューターノードにおける共有メモリは実質的にユニットアクセススピードを有するからである。
Figure 0006092780
これを全て合わせると、以下の結果をもたらす。
Figure 0006092780
タイルコミュニケーションオペレーター12の利用により、完全なコアレスメモリアクセスをベースとして、行列積を行うスピードが飛躍的に高まる。加えて、マトリクスのうちの一つが、乗算のパーツとしてトランスポーズ(transpose)されるとすると、タイルコミュニケーションオペレーター12の利用により、完全なコアレスメモリアクセスをベースとして、劇的にマトリックスの乗算のスピードが高まる可能性がある。A*transpose(B)の場合、タイリングなしで100倍のパフォーマンスを生み出すために、メモリアクセスは全体として、コアレスメモリアクセスがなされない。
図5は、タイルコミュニケーションオペレーター12を含むデータ並列コード10をコンパイルして実行するためのコンピューターシステム100の実施形態を示すブロック図である。
コンピューターシステム100は、一つもしくは一つ以上のプロセッサパッケージ(図示されていない)に配置された一つもしくは一つ以上のプロセッシングエレメント(PE)102と、メモリシステム104を備えたホスト101を有する。コンピューターシステム100はまた、ゼロまたはそれよりも多い入力/出力デバイス106と、ゼロまたはそれよりも多いディスプレイデバイス108、ゼロまたはそれよりも多い周辺機器110、ゼロまたはそれよりも多いネットワークデバイス112を備えてもよい。コンピューターシステム100はさらに、コンピュータエンジン120を有し、コンピュータエンジン120は、一つ又は一つ以上のDP最適化コンピューターノード121を備えており、それぞれのDP最適化コンピューターノード121は、一つ以上のプロセッシングエレメント(PE)122と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に保存された処理命令にアクセスし、実行するように設定されている。処理命令は、BIOS(basic input output system)や(図示されていない)ファームウェア、オペレーションシステム(OS)132、コード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)の集合体を有する。例えば、ホストコンピュータノードは、SMP(symmetric multiprocessing architecture)で設計されていてもよく、そして、また、NUMA(non−uniform memory access)アーキテクチャを採用して、メモリシステム104の局所参照性(memory locality)を最大化し得るように構成されていてもよい。
ホストコンピュータノードの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とホストコンピュータノード間のコピー処理は、同期ポイントであっても良い。
ホストコンピュータノードと各コンピューターノード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において提供されても良い。
ある特定の実施形態がこの明細書中において示され、詳説されているが、当業者は、本発明の趣旨を逸脱しない範囲内において、本明細書において説明されている実施形態に種々の変更を加え、及び/又は同等の実装形態(インプレメンテーション)に代替することが可能であろう。本出願は、本明細書において説明されている特定の実施形態における応用やバリエーションを包含するものである。それゆえに、本発明は、請求項に記載された事項や、請求項に記載されているに等しい事項に限定されるべきではない。

Claims (20)

  1. コンピューター実行可能命令を格納するコンピューター可読メモリであって、コンピューターシステムによってコンパイルおよび実行されると、
    専用アーキテクチャーを有する1つ以上のデータ並列最適化計算ノード上での実行のために構成されたデータ並列処理ソースコード中のタイルコミュニケーションオペレーターに応答して、入力インデックスタイプから出力インデックスタイプを生成するステップであって、
    前記データ並列処理ソースコードが、前記1つ以上のデータ並列最適化計算ノードの専用アーキテクチャーを利用するデータ並列処理機能を含み、データ並列処理動作が、汎用プロセッサよりもより速くまたはより効率的に実行できるようにし、
    前記入力インデックスタイプが、ランクと、第1のエレメントタイプおよび第1の形状の内少なくとも1つとを有し、
    前記出力インデックスタイプが、前記ランクと、前記入力インデックスタイプのタイルである第2のエレメントタイプおよび前記入力インデックスタイプのタイルである第2の形状の内少なくとも1つとを有する、ステップと、
    前記出力インデックスタイプを用いてデータ並列処理アルゴリズムを実行するステップと
    を含む方法を実行させる、コンピューター可読メモリ。
  2. 請求項1記載のコンピューター可読メモリにおいて、
    前記入力インデックスタイプが前記第1エレメントタイプを有し、
    前記出力インデックスタイプが、前記入力インデックスタイプのタイルである前記第2エレメントタイプを有する、コンピューター可読メモリ。
  3. 請求項1記載のコンピューター可読メモリにおいて、
    前記入力インデックスタイプが、前記第1形状を有し、
    前記出力インデックスタイプが、前記入力インデックスタイプのタイルである前記第2形状を有する、コンピューター可読メモリ。
  4. 請求項1記載のコンピューター可読メモリにおいて、
    前記出力インデックスタイプが、前記1つ以上のデータ並列最適化計算ノードの実行構造体にマッピングされる、コンピューター可読メモリ。
  5. 請求項1記載のコンピューター可読メモリにおいて、
    前記出力インデックスタイプが、前記1つ以上のデータ並列最適化計算ノードにおける、前記入力インデックスタイプのローカルビューストラクチャを提供する、コンピューター可読メモリ。
  6. 請求項1記載のコンピューター可読メモリにおいて、
    前記データ並列処理ソースコードが、データ並列処理拡張機能を有する高水準汎用プログラミング言語で記述される、コンピューター可読メモリ。
  7. 請求項1記載のコンピューター可読メモリにおいて、
    前記データ並列処理ソースコードが、高水準データ並列処理プログラミング言語で記述される、コンピューター可読メモリ。
  8. 請求項1記載のコンピューター可読メモリにおいて、
    前記1つ以上のデータ並列最適化計算ノードが、少なくとも1つのグラフィックプロセッシングユニットを含む、コンピューター可読メモリ。
  9. 請求項1記載のコンピューター可読メモリにおいて、
    前記1つ以上のデータ並列最適化計算ノードが、少なくとも1つの汎用プロセッサを含む、コンピューター可読メモリ。
  10. コンピューターシステムにおいてコンパイラが実施する方法であって、
    専用アーキテクチャーを有する1つ以上のデータ並列最適化計算ノード上での実行のために構成されたデータ並列処理ソースコードのタイルコミュニケーションオペレーターを特定するステップであって、
    前記データ並列処理ソースコードが、前記1つ以上のデータ並列最適化計算ノードの専用アーキテクチャーを利用するデータ並列処理機能を含み、データ並列処理動作が、汎用プロセッサよりもより早くまたはより効率的に実行できるようにする
    ステップと、
    前記データ並列処理ソースコードから、入力インデックスタイプを出力インデックスタイプに分割することによってタイルコミュニケーションオペレーターを実装するデータ並列処理実行コードを生成するステップであって
    前記入力インデックスタイプが、ランクと、第1のエレメントタイプおよび第1の形状の内少なくとも1つとを有し、
    前記出力インデックスタイプが、前記ランクと、前記入力インデックスタイプのタイルである第2のエレメントタイプおよび前記入力インデックスタイプのタイルである第2の形状の内少なくとも1つとを有する
    ステップと
    を含む、方法。
  11. 請求項10記載の方法において、
    前記入力インデックスタイプが、前記第1エレメントタイプを有し、
    前記出力インデックスタイプが、前記入力インデックスタイプのタイルである前記第2エレメントタイプを有する、方法。
  12. 請求項10記載の方法において、
    前記入力インデックスタイプが、前記第1形状を有し、
    前記出力インデックスタイプが、前記入力インデックスタイプのタイルである前記第2形状を有する、方法。
  13. 請求項10記載の方法において、前記出力インデックスタイプが、前記1つ以上のデータ並列最適化計算ノードの実行構造体にマッピングされる、方法。
  14. 請求項10記載の方法において、前記出力インデックスタイプが、前記1つ以上のデータ並列最適化計算ノードにおける、前記入力インデックスタイプのローカルビューストラクチャを提供する、方法。
  15. 請求項10記載の方法において、前記データ並列処理ソースコードが、データ並列処理拡張機能を有する高水準汎用プログラミング言語で記述される、方法。
  16. 請求項10記載の方法において、前記データ並列処理ソースコードが、高水準データ並列処理プログラミング言語で記述される、方法。
  17. 請求項10記載の方法において、前記1つ以上のデータ並列最適化計算ノードが、少なくとも1つのグラフィックプロセッシングユニットを含む、方法。
  18. 請求項10記載の方法において、前記1つ以上のデータ並列最適化計算ノードが、少なくとも1つの汎用プロセッサを含む、方法。
  19. コンピューター実行可能命令を格納するコンピューター可読メモリであって、コンピューターシステムによって実行されると、
    タイルコミュニケーションオペレーターを適用して、ランクと第1のエレメントタイプとを有する入力インデックスタイプを、前記ランクと前記入力インデックスタイプのタイルである第2のエレメントタイプとを有する出力インデックスタイプに分解するステップと、
    前記入力インデックスタイプに対して、前記出力インデックスタイプを用いてデータ並列処理アルゴリズムを実行するステップと
    を含む方法を実行させ、
    前記タイルコミュニケーションオペレーターが、データ並列処理拡張機能を有する高水準汎用プログラミング言語で記述されたデータ並列処理ソースコードに含まれ、
    前記出力インデックスタイプが、専用アーキテクチャーを有する前記データ並列処理アルゴリズムを実行するように構成された1つ以上のデータ並列最適化計算ノードの実行構造体にマッピングされ、
    データ並列処理拡張機能が、前記1つ以上のデータ並列最適化計算ノードの専用アーキテクチャーを利用するデータ並列処理機能を含み、データ並列処理動作が、汎用プロセッサよりもより速くまたはより効率的に実行できるようにし、
    1つ以上の前記データ並列最適化計算ノードが、少なくとも1つのグラフィックプロセッシングユニットを含む、コンピューター可読メモリ。
  20. 請求項19記載のコンピューター可読メモリにおいて、前記第1エレメントタイプが第1の形状を有し、前記第2エレメントタイプは、前記タイルである第2の形状を有する、コンピューター可読メモリ。
JP2013533869A 2010-10-12 2011-09-23 タイルコミュニケーションオペレーター Active JP6092780B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/902,404 US9489183B2 (en) 2010-10-12 2010-10-12 Tile communication operator
US12/902,404 2010-10-12
PCT/US2011/053017 WO2012050796A2 (en) 2010-10-12 2011-09-23 Tile communication operator

Publications (3)

Publication Number Publication Date
JP2013539888A JP2013539888A (ja) 2013-10-28
JP2013539888A5 JP2013539888A5 (ja) 2014-10-16
JP6092780B2 true JP6092780B2 (ja) 2017-03-08

Family

ID=45926119

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013533869A Active JP6092780B2 (ja) 2010-10-12 2011-09-23 タイルコミュニケーションオペレーター

Country Status (7)

Country Link
US (1) US9489183B2 (ja)
EP (1) EP2628075A4 (ja)
JP (1) JP6092780B2 (ja)
KR (1) KR101740093B1 (ja)
CN (1) CN102495723B (ja)
CA (1) CA2813879A1 (ja)
WO (1) WO2012050796A2 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US9830133B1 (en) * 2011-12-12 2017-11-28 Significs And Elements, Llc Methods and apparatus for automatic communication optimizations in a compiler based on a polyhedral representation
CN102707932B (zh) * 2012-05-16 2013-07-24 清华大学 一种用于地球系统模式的并行耦合方法
US9367293B2 (en) * 2012-06-18 2016-06-14 International Business Machines Corporation System and method for compiler assisted parallelization of a stream processing operator
US10255299B2 (en) * 2012-06-21 2019-04-09 Neha Bhatia Polytope and convex body database
CN104881326B (zh) * 2015-05-26 2018-04-13 上海帝联信息科技股份有限公司 日志文件处理方法及装置
KR102034662B1 (ko) * 2016-01-14 2019-11-18 서울대학교산학협력단 병렬 연산을 수행하는 장치 및 방법
DE102017209697A1 (de) * 2016-06-13 2017-12-14 Denso Corporation Parallelisierungsverfahren, Parallelisierungswerkzeug und fahrzeuginterne Vorrichtung
US10929143B2 (en) * 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
WO2020185544A1 (en) 2019-03-08 2020-09-17 Mevion Medical Systems, Inc. Delivery of radiation by column and generating a treatment plan therefor
CN113553039B (zh) * 2020-04-23 2024-05-31 杭州海康威视数字技术股份有限公司 算子的可执行代码的生成方法及装置
CN112463218B (zh) * 2020-11-27 2022-12-09 成都海光微电子技术有限公司 指令发射控制方法及电路、数据处理方法及电路

Family Cites Families (97)

* 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
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
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
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
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
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
US6088511A (en) 1998-05-13 2000-07-11 Microsoft Corporation Nested parallel 2D Delaunay triangulation method
US6106575A (en) 1998-05-13 2000-08-22 Microsoft Corporation Nested parallel language preprocessor for converting parallel language programs into sequential code
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
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
US7233331B2 (en) 2000-03-16 2007-06-19 Square Enix Co., Ltd. Parallel object task engine and processing method
AU2001249553A1 (en) 2000-03-28 2001-10-08 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
US6847370B2 (en) 2001-02-20 2005-01-25 3D Labs, Inc., Ltd. Planar byte memory organization with linear access
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
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
US7464103B2 (en) 2004-10-29 2008-12-09 Microsoft Corporation Multi-level nested open hashed data stores
US7800620B2 (en) 2004-11-05 2010-09-21 Microsoft Corporation Optimizing automated shader program construction
US7733347B2 (en) 2004-11-05 2010-06-08 Microsoft Corporation Automated construction of shader programs
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
US7689980B2 (en) 2005-09-30 2010-03-30 Intel Corporation Splitting the computation space to optimize parallel code
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
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
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++
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
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
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
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
US8453134B2 (en) 2008-06-04 2013-05-28 Intel Corporation Improving data locality and parallelism by code replication
US8806426B2 (en) 2008-06-04 2014-08-12 Microsoft Corporation Configurable partitioning of parallel data for parallel processing
US8286198B2 (en) 2008-06-06 2012-10-09 Apple Inc. Application programming interfaces for data parallel computing on multiple processors
US20100082724A1 (en) 2008-09-30 2010-04-01 Oleg Diyankov 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
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
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
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

Also Published As

Publication number Publication date
CA2813879A1 (en) 2012-04-19
KR101740093B1 (ko) 2017-05-25
EP2628075A4 (en) 2014-08-13
KR20140001864A (ko) 2014-01-07
EP2628075A2 (en) 2013-08-21
CN102495723B (zh) 2015-11-25
WO2012050796A2 (en) 2012-04-19
US20120089961A1 (en) 2012-04-12
US9489183B2 (en) 2016-11-08
WO2012050796A3 (en) 2012-05-31
CN102495723A (zh) 2012-06-13
JP2013539888A (ja) 2013-10-28

Similar Documents

Publication Publication Date Title
JP6092780B2 (ja) タイルコミュニケーションオペレーター
JP6027021B2 (ja) アジャイル通信演算子
Dathathri et al. Generating efficient data movement code for heterogeneous architectures with distributed-memory
KR101962484B1 (ko) 확장 가능한 데이터 병렬 시맨틱스
CN102541612B (zh) 数据平行代码中的映射变换
US8839214B2 (en) Indexable type transformations
US20170083301A1 (en) Nested communication operator
Komoda et al. Integrating multi-GPU execution in an OpenACC compiler
Yan et al. Supporting multiple accelerators in high-level programming models
US8713039B2 (en) Co-map communication operator
US20160371061A1 (en) Read-only communication operator
Winter et al. QDP-JIT/PTX: A QDP++ Implementation for CUDA-Enabled GPUs

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130703

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130717

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140901

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140901

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150522

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150831

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150909

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20151208

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160108

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160208

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160519

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160818

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20161018

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: 20170111

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170209

R150 Certificate of patent or registration of utility model

Ref document number: 6092780

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