【文献】
竹居智久,Apple主導の「OpenCL」プロセサに自由をもたらす,日経エレクトロニクス,日本,日経BP社,2008年12月15日,第993号,pp.107-117
(58)【調査した分野】(Int.Cl.,DB名)
コンピュータ実行可能命令を記憶するコンピュータ可読記憶媒体であって、前記命令は、コンピュータシステムにより実行されると、コンピュータシステムに方法を実行させ、該方法が、
データ並列ソースコードに応答して、計算デバイスオブジェクトおよびリソースビューオブジェクトを生成するステップであって、前記計算デバイスオブジェクトがデバイスレベルを指定し、前記リソースビューオブジェクトがリソースレベルを指定し、前記デバイスレベルが、計算ノードのタイプを示し、前記リソースレベルが、前記データ並列ソースコードの実行において使用するランタイムライブラリのタイプを示す、ステップと、
前記データ並列ソースコードのデータ並列関数を前記デバイスレベルに対応する計算ノードを使用して実行するステップであって、該実行が、前記データ並列関数に適用されるアノテーションに応答し、該アノテーションが、前記データ並列関数が前記リソースレベルと互換性があることを示す、ステップと
を含む、コンピュータ可読記憶媒体。
【発明を実施するための形態】
【0007】
以下の「発明を実施するための形態」において、添付の図面を参照するが、該図面はその一部を成し、本発明を実践できる特定の実施形態を例として示すものである。この点に関して、方向性を表す用語である「上部」、「底部」、「表」、「裏」、「前」、「後」などを、記載されている図面の向きに関連して使用している。実施形態の構成要素は多数の異なる向きで位置付けることが可能であるため、方向を表す用語は例示目的で使用し、制限のために使用するものではない。他の実施形態を利用してよく、また、構造または論理の変更を本発明の範囲から逸脱することなく加えてよいことは、理解されるべきである。従って、以下の詳細説明は、制限する意味でとらえられるべきではなく、本発明の範囲は、添付の請求項により定義するものである。別段言及しない限り、本明細書に記載する種々の例示の実施形態の特徴をお互いに組み合わせてよいことは、理解されるべきである。
【0008】
図1は、
図5に示すコンピュータシステム100などのコンピュータシステムにおける拡張可能なデータ並列セマンティクスを用いたランタイム環境2の一実施形態を例示するブロック図である。ランタイム環境2は、コンピュータシステムにおけるランタイムモードの動作を表すもので、該コンピュータシステムは、1つまたは複数の計算ノード121上でユーザコード10および1つまたは複数のランタイムライブラリ20の組からの命令を実行している(
図5にも示し、以下でさらに詳細に説明する)。
【0009】
コード10には、1つまたは複数の計算ノード121による実行用の1つまたは複数の実行ファイル(例えば、
図5に示すDP実行ファイル138)にコンパイルすることができる高レベルの汎用またはデータ並列のプログラミング言語からの一連の命令が含まれる。コード10は、1つまたは複数のランタイムライブラリ20と連動して実行され、この場合ランタイムライブラリ20には、データ並列関数を提供するデータ並列API(アプリケーションプログラミングインターフェース)が含まれる。
【0010】
コード10は、ランタイムライブラリ20から計算デバイスオブジェクト12を生成させて、コード10の少なくとも一部を実行するための計算ノード121を指定し、また、ランタイムライブラリ20からリソースビューオブジェクト14を生成させて、コード10の実行時に使用されるランタイムライブラリ20を指定する。計算デバイスオブジェクト12は、デバイスレベル(すなわち、計算ノード121の1つの型)を指定するハードウェアのアブストラクションを形成する。リソースビューオブジェクト14は、計算デバイスオブジェクト12が指定するハードウェアをどのように使用するかについて記述するリソースレベルを指定する。リソースビューオブジェクト14は、例えば、異なるDirectXの実装(例えば、DirectX11、DirectX11.1、DirectX12、およびDirectX13)またはSSE/AVXの実装を、ネイティブコード生成、またはWARP(DirectXのソフトウェアエミュレータ)を用いて記述することができる。リソースビューオブジェクト14にはまた、メモリ管理およびカーネル実行のサービスを含んでよい。計算デバイスオブジェクト12およびリソースビューオブジェクト14を、関連するセマンティックメタデータと共に使用することにより、コード10の下層のプログラミング言語のセマンティックな変更を扱う拡張可能なデータ並列セマンティクスを提供する。拡張可能なデータ並列セマンティクスにより、コード10を、新しいおよび/または更新された型の計算ノード121、ならびに新しいおよび/または更新された型のランタイムライブラリ20を用いて実行することが可能となる。その結果、特定の型の計算ノード121を用いた使用向けに設計されていたコード10の構造を、新しいおよび/または更新された型の計算ノード121により実行することができる。
【0011】
一実施形態において、コード10には、1つまたは複数のモジュールのセット内に記憶させるプログラムを形成する、データ並列拡張を有する高レベルの汎用プログラミング言語(以後、GP言語)からの一連の命令が含まれる。GP言語により、プログラムを異なる部分(すなわち、モジュール)に記述することが可能となり、そのため、各モジュールをコンピュータシステムがアクセス可能な別々のファイルまたは場所に記憶することができる。GP言語により、1つまたは複数の汎用プロセッサおよび1つまたは複数の専用のDP最適計算ノードを含むコンピュータ環境をプログラミングするための単一の言語を提供する。DP最適計算ノードは典型的には、GPU(graphic processing unit)または汎用プロセッサのSIMDユニットであるが、いくつかのコンピュータ環境においては、汎用プロセッサのスカラまたはベクトルの実行ユニット、FPGA(field programmable gate array)、または他の適切なデバイスを含んでもよい。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言語により、1つまたは複数のDP最適計算ノードを有するコンピュータ環境においてDP最適計算ノードをプログラミングするための専用言語を提供する。DP言語を使用して、プログラマは、DP最適計算ノード上での実行が意図されるDPソースコードをコード10内に生成する。DP言語により、DP最適計算ノードの専用アーキテクチャの利点を生かしてデータ並列操作を汎用プロセッサで行うよりも速くまたはより効率的に実行することを可能にするプログラミングツールを提供する。DP言語は、既存のDPプログラミング言語であってよく、例えば、HLSL、GLSL、Cg、C、C++、NESL、Chapel、CUDA、OpenCL、Accelerator、Ct、PGI GPGPU Accelerator、CAPS GPGPU Accelerator、Brook+、CAL、APL、Fortran90(後継を含む)、Data Parallel C、DAPPLE、またはAPLである。コード10は、本実施形態においては、アプリケーション、ライブラリ関数、またはオペレーティングシステムサービスなどの任意の適切な型のDPソースコードを表してよい。
【0014】
コード10には、DP最適計算ノード121上での実行用に指定されるコード部分が含まれる。DP最適計算ノード121は、データ並列計算(すなわち、DPプログラムまたはアルゴリズムの実行)用に最適化されるハードウェアアーキテクチャを伴う1つまたは複数の計算リソースを有する。
図2に示す一実施形態において、コード10がGP言語で記述されており、GP言語により、プログラマが、ベクトル関数を定義する際にアノテーション29(例えば、rl_annote)を使用してDPソースコードを指定することが可能となる。アノテーション29は、DP最適計算ノード上での実行が意図されるベクトル関数の関数名27(例えば、vector_func)に関連付けされる。コード10にはまた、ベクトル関数の1つまたは複数の呼び出し28(例えば、forall...,vector_func,...)を呼び出しサイト(例えば、forall、reduce、scan、またはsort)において含んでよい。呼び出しサイトに対応するベクトル関数をカーネル関数と称する。カーネル関数は、他のベクトル関数をコード10(すなわち、他のDPソースコード)に呼び出してよく、また、カーネル関数をベクトル関数呼び出しグラフのルートと見なしてよい。カーネル関数はまた、コード10により定義される型(例えば、クラスまたは構造体)を使用することもできる。型はDPソースコードとして注釈付けされてもされなくてもよい。他の実施形態において、他の適切なプログラミング言語構造を使用して、DPソースコードおよび/または汎用プロセッサコードとして、コード10の部分を指定してもよい。加えて、アノテーション29は、コード10がDP言語で記述される実施形態においては省略してもよい。
【0015】
アノテーション29は、ベクトル関数についてリソースレベルのセマンティクスを指定する。アノテーション29により、計算デバイスオブジェクト12およびリソースビューオブジェクト14において反映されるように、コンパイラがベクトル関数のセマンティック状態がセマンティクスおよび対象の計算ノード121の他の特性との互換性を確実に持つことが可能となる。セマンティック制限が時と共に緩和されるにつれて、より新しい計算ノード121ほどセマンティック制限が少なくなり、高レベルのセマンティック制限を示すより古いアノテーション29を有するベクトル関数を実行することができる。
【0016】
ランタイムライブラリ20には、タスク並列および/またはデータ並列(DP)の実行能力を提供する任意の適切な型および/または数のライブラリが含まれる。例えば、ランタイムライブラリ20には、一実施形態において、DirectXランタイムライブラリ、および、並列パターンライブラリ(PPL)を有する同時実行ランタイムライブラリを含んでよい。ランタイムライブラリ20は、API(appplication programming interface)、または、タスク並列および/またはデータ並列の能力と共に関数を与える他の適切なプログラミング構造を提供する。
【0017】
図3Aから3Cは、それぞれ、
図1に示すランタイム環境2において使用するためのランタイムライブラリ20の実施形態20(l)から20(3)を例示する。
図3Aの実施形態において、ランタイムライブラリ20(1)には、計算デバイス関数42、リソースビュー関数43、データ並列(DP)関数44、および、呼び出しサイトアブストラクション関数46が含まれる。
【0018】
計算デバイス関数42は、ユーザコード10が供給するパラメータに従って計算デバイスオブジェクト12(
図1に示す)を作成する。特に、ユーザコード10は、計算デバイスオブジェクト12を作成するために、少なくともコード10の一部を実行するための計算ノードの型を指定するデバイスレベル(例えば、device_level)を渡す。計算デバイス関数42は、一実施形態において、
図4Aのデータ構造に示されるデバイスレベル(すなわち、none、custom、GPU、WARP、REF、NATIVE、SSE、AVX、およびLRB)を認識する。従って、ユーザコード10は、本実施形態においてこれらのデバイスレベルの内の1つを渡すことができる。
【0019】
リソースビュー関数43は、ユーザコード10が供給するパラメータに従って、リソースビューオブジェクト14(
図1に示す)を作成する。特に、ユーザコード10は、計算デバイスオブジェクト12が指定するハードウェアをどのように使用するかについて記述するリソースレベル(例えば、resource_level)を渡す。リソースビュー関数43は、一実施形態において、
図4Bのデータ構造に示されるリソースレベル(すなわち、none、NATIVE、CUSTOM、DX11、DX11.1、およびDX12)を認識する。従って、ユーザコード10は、本実施形態において、これらのリソースレベルの内の1つを渡すことができる。
【0020】
ユーザコード10のデバイスレベルおよびリソースレベルは、ユーザコード10が満たす必要があるセマンティック制限のレベルを示す。これらのセマンティック制限は、新しいおよび更新された計算ノード121およびランタイムライブラリ20がユーザコード10の実行に使用されるため、時と共に減少すると推測される。従って、計算ノード121およびランタイムライブラリ20が、ユーザコード10のデバイスレベルおよびリソースレベルと同じまたはより少ないセマンティック制限を有する場合に、計算ノード121およびランタイムライブラリ20は、ユーザコード10を実行することが可能である。
【0021】
一実施形態において、ユーザコード10は、GPUのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、DX11のリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10にはまた、DX11を示すアノテーション29を有する少なくとも1つのベクトル関数が含まれる。GPUのデバイスレベルは、ユーザコード10の少なくとも一部が、GPU上での実行用に記述されることを示し、DX11のリソースレベルは、ユーザコード10の少なくとも一部が、DirectX11を含むまたはサポートするランタイムライブラリ20を用いた実行用に記述されることを示す。従って、ベクトル関数(複数可)は、DirectX11のセマンティック制限と一致し、GPU上でDirectX11を用いて実行してよい。リソースビューオブジェクト14が、DX11ではなくDX12のリソースレベルを有する場合(すなわち、ユーザコード10が、DirectX12を含むまたはサポートするランタイムライブラリ20を用いた実行用に記述される)、ベクトル関数(複数可)のアノテーション29(複数可)は、DX11、DX11.1、またはDX12であってよく、何故ならDirectX12にはDirectX11およびDirectX11.1より少ないセマンティック制限しか含まれていないためである。
【0022】
別の実施形態において、ユーザコード10は、WARPのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、DX11またはDX12のリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10にはまた、リソースレベルがDX11またはDX11、DX11.1である場合にDX11を示し、リソースレベルがDX12である場合にDX12を示すアノテーション29を有する少なくとも1つのベクトル関数が含まれる。WARPのデバイスレベルは、ユーザコード10の少なくとも一部がSSE、AVX、またはLRBniが可能なDirectXシミュレータによる実行用に記述されること示し、DX11またはDX12のリソースレベルは、ユーザコード10の少なくとも一部が、DirectX11またはDirectX12を含むまたはサポートするランタイムライブラリ20を用いる実行用に記述されることを示す。従って、DirectX11のセマンティック制限と一致するベクトル関数を、DirectX11またはその上位を用いてWARPシミュレータ上で実行してよく、DirectX12のセマンティック制限と一致するベクトル関数を、DirectX12を用いてWARPシミュレータ上で実行してよい。
【0023】
さらなる一例において、ユーザコード10は、REFのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、DX11またはDX12のリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10にはまた、リソースレベルがDX11またはDX11、DX11.1である場合にDX11を示し、リソースレベルがDX12である場合にDX12を示すアノテーション29を有する少なくとも1つのベクトル関数が含まれる。REFのデバイスレベルは、ユーザコード10の少なくとも一部が、シングルスレッドCPUベースのDirectXシミュレータによる実行用に記述されることを示し、DX11またはDX12のリソースレベルはそれぞれ、ユーザコード10の少なくとも一部が、DirectX11またはDX12を含むまたはサポートするランタイムライブラリ20を用いる実行用に記述されることを示す。従って、DirectX11のセマンティック制限と一致するベクトル関数を、DirectX11またはその上位を用いてREFシミュレータ上で実行してよく、DirectX12のセマンティック制限と一致するベクトル関数を、DirectX12を用いてREFシミュレータ上で実行してよい。
【0024】
上記の例では、DirectXをサポートするランタイムライブラリ20が使用される。他の例では、他の実装を、デバイスレベルとしてハードウェア型を示し、リソースレベルとしてネイティブ型を示すことによりサポートすることができる。例えば、ユーザコード10は、計算デバイスオブジェクト12を、SSEのデバイスレベルを用いて作成してIntelおよびAMDのCPU上でSSEベクトルユニットを有効にすることができ、AVXのデバイスレベルを用いて作成してIntelのSandy Bridge CPUを有効にすることができ、または、LRBのデバイスレベルを用いて作成してIntelのKnights Ferryの専用データ並列最適化CPUを有効にすることができる。これらの例を用いると、ユーザコード10は、リソースビューオブジェクト14を、ネイティブレベル(すなわち、NATIVE)を用いて作成することができ、ユーザコード10のベクトル関数が、データ並列セマンティクスに関して制限されず、下層にある汎用言語(例えば、C++)のセマンティクスと一致する。
【0025】
図3Aのランタイムライブラリ20(1)に戻ると、DP関数44は、データ並列関数を提供して、GPU、またはWARPもしくはREFのソフトウェアシミュレータを有する計算ノードなどの計算ノード121の選択された型について、forall、scan、reduce、およびsortなどの呼び出しサイトを実装させる。他の型の計算ノード121(例えば、新しいおよび/または更新された型)を用いて、ランタイムライブラリ20(1)は、呼び出しサイトを抽象化する呼び出しサイトアブストラクション関数46を提供する。呼び出しサイトアブストラクション関数46を使用して、新しいおよび/または更新された型の計算ノード121について、呼び出しサイト機能を実装することができる。
【0026】
図3Bに示すように、ユーザはまた、カスタム計算デバイス関数48、カスタムリソースビュー関数、および/またはカスタムDP関数50を含む1つまたは複数のランタイムライブラリ20(2)を提供してもよい。カスタム計算デバイス関数48を、抽象基底クラスとして実装してよく、また、ユーザがユーザコード10を実行するための新しいおよび/または更新された型の計算ノード121についてセマンティックメタデータを提供することが可能となる。カスタムリソースビュー関数49もまた、抽象基底クラスとして実装してよく、ユーザがユーザコード10を実行するためにハードウェアをどのように使用するかについて記述する新しいおよび/または更新されたリソースレベルを提供することが可能となる。カスタムDP関数50により、ユーザが新しいおよび/または更新された型の計算ノード121上で実行できるforall、scan、reduce、およびsortなどのカスタム呼び出しサイトの実装を提供することが可能となる。
【0027】
一例において、ランタイムライブラリ20(2)を使用するために、ユーザコード10は、CUSTOMのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、NATIVEのリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10はまた、カスタム計算デバイス関数48を呼び出して、新しいおよび/または更新された型の計算ノード121についてセマンティックメタデータを提供する。呼び出しサイトに関しては、ユーザコード10は、ランタイムライブラリ20(1)の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。
【0028】
別の例において、ランタイムライブラリ20(2)を使用するために、ユーザコード10は、NATIVEのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、CUSTOMのリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10はまた、カスタムリソースビュー関数49を呼び出して、ユーザコード10を実行するための計算デバイスオブジェクト12により指定される計算ノード121をどのように使用するかについて記述する新しいおよび/または更新されたリソースレベルを提供する。例えば、リソースレベルは、カスタムバージョンのIntel(登録商標)Thread Building Blocks(TBB)であってよい。呼び出しサイトについては、ユーザコード10は、ランタイムライブラリ20(1)の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。
【0029】
さらなる例において、ランタイムライブラリ20(2)を使用するために、ユーザコード10は、CUSTOMのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、CUSTOMのリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10は、カスタム計算デバイス関数48を呼び出して、新しいおよび/または更新された型の計算ノード121についてセマンティックメタデータを提供する。ユーザコード10はまた、カスタムリソースビュー関数49を呼び出して、ユーザコード10を実行するための計算デバイスオブジェクト12により指定される計算ノード121をどのように使用するかについて記述する新しいおよび/または更新されたリソースレベルを提供する。呼び出しサイトについては、ユーザコード10は、ランタイムライブラリ20(1)の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。
【0030】
ベクトル関数をホスト(すなわち、非ベクトルCPU)上で実行するために、ユーザコード10は、NATIVEのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、NATIVEのリソースレベルを用いてリソースビューオブジェクト14を作成する。NATIVEのデバイスレベルは、ユーザコード10の少なくとも一部をホスト上で実行してよいことを示す。NATIVEのリソースレベルにより、ユーザコード10のベクトル関数が、データ並列セマンティクスに関して制限されず、下層にある汎用言語(例えば、C++)のセマンティクスと一致することが可能となる。ホストの実行を用いて、ユーザコード10は、ランタイムライブラリ20(1)の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。
【0031】
データ並列セマンティック制限が低減または除去された拡張可能なデータ並列セマンティクスを提供することによりタスクベースの並列プログラミングランタイムライブラリ20との統合(またはヘテロジニアスプログラミング)を達成することができる。特に、
図3Cに示す、タスク並列関数52を有するランタイムライブラリ20(3)を、DP関数44(
図3A)と連動して使用してよい。タスク並列関数52が並列バターンライブラリ(PPL)を有する同時実行ランタイムライブラリ(ConcRT)を表す一例において、タスク並列関数52を使用するforallの実装を、仮想プロセッサを使用するホスト上での実行用に生成してよい。同様に、PPLおよびC++の標準テンプレートライブラリ(STL)からのforeachおよびtransformの実装には、直線的なイテレータ(反復子)の代わりにrange based(範囲ベース)の記号を含んでよい。一実施形態において、範囲パターンのオプションは以下の通り。
【0032】
エニュメレータ (基本的に、標準的なSTLのイテレータパターンであって前方、双方向、等の変形を有する)
再帰的二分割(タスク並列)
チャンキング(タスク並列)
ランダムアクセス(タスク並列またはデータ並列)
foreachおよびtransformの実装により、これらの範囲パターンを使用する範囲トレイトまたはカテゴリをアクティブにする。
【0033】
データ並列形式のforeachにおいて、「range」は、forallにおける計算ドメインの類似物である。単純な実装では、データ並列サブトレイトでランダムアクセス「range」を用いて示される場合、foreachの内部にforallを呼び出すことができる。foreachまたはtransformにおけるカーネル引数の数の制限を、ラムダ閉鎖を使用することにより緩和する。
【0034】
ユーザが、forall機能(forallと呼ばれない場合でも)のConcRT実装の使用を望む場合、foreachが呼び出されると、ConcRTのforeachが実装されていないと仮定して(あるいは、自明に焼かれるかもしれない−呼び出されたforallのバージョンが、計算デバイスオブジェクト12およびリソースビューオブジェクト14のセマンティック状態に依存する)、foreachを、ConcRT(または他のカスタム)ベースのデータ並列呼び出しサイトの実装用に作成される「range」型に対して特殊化してよい。
【0035】
組み込みの「range」ベースのforeachおよびtransformの実装は、「range」トレイトをアクティブにしてどの実装パターンであるかを決定する。カスタムデータ並列呼び出しサイトの実装を導入するために、新しい「range」型を多重定義することができる。従って、データ並列関数44とタスクベースの並列プログラミングランタイムライブラリ20との統合(例えば、ランタイムライブラリ20(3)とタスク並列関数52との統合)は、既存の言語機構を使用してユーザ拡張性を用いて達成することができる。
【0036】
図5は、拡張可能なデータ並列セマンティクスを用いてデータ並列コード10をコンパイルかつ実行するべく構成されるコンピュータシステム100の一実施形態を例示するブロック図である。
【0037】
コンピュータシステム100は、1つまたは複数のプロセッサパッケージ(図示せず)内に収容される1つまたは複数の処理要素(PE)102を有するホスト101、およびメモリシステム104を含む。コンピュータシステム100はまた、ゼロまたはそれ以上の入力/出力装置106、ゼロまたはそれ以上の表示装置108、ゼロまたはそれ以上の周辺装置110、および、ゼロまたはそれ以上のネットワーク装置112を含む。コンピュータシステム100は、1つまたは複数のDP最適型または他の型の計算ノード121を有する計算エンジン120をさらに含み、各DP最適計算ノード121は、1つまたは複数の処理要素(PE)122およびDP実行ファイル138を記憶するメモリ124のセットを含む。
【0038】
ホスト101、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、および計算エンジン120は、任意の最適な型、数、および構成のコントローラ、バス、インターフェース、および/または、他の有線もしくは無線の接続を含む相互接続114のセットを使用して通信する。
【0039】
コンピュータシステム100は、汎用または専用に構成される任意の適切な処理装置を表す。コンピュータシステム100の例に含まれるものには、サーバ、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、PDA(personal digital assistant)、携帯電話、および、音声/映像装置がある。コンピュータシステム100の構成要素(すなわち、ホスト101、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、相互接続114、および計算エンジン120)を、共通の筺体(図示せず)または任意の適切な数の別個の筺体(図示せず)内に包含してよい。
【0040】
処理要素102はそれぞれ、メモリシステム104内に記憶される命令(すなわち、ソフトウェア)を実行するべく構成される、実行ハードウェアを形成する。各プロセッサパッケージ内の処理要素102は、同じまたは異なるアーキテクチャおよび/または命令セットを有することができる。例えば、処理要素102には、順次実行要素、スーパースカラ実行要素、およびデータ並列実行要素(例えば、GPU実行要素)の任意の組み合わせを含んでよい。各処理要素102は、メモリシステム104内に記憶される命令にアクセスして実行するべく構成される。命令には、BIOS(basic input output system)またはファームウェア(図示せず)、OS(operating system )132、コード10、コンパイラ134、GP実行ファイル136、およびDP実行ファイル138を含んでよい。各処理要素102は、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、および/または、計算エンジン120と連動して、またはこれらから受け取る情報に応じて、命令を実行することができる。
【0041】
ホスト101は、OS132をブートして実行する。OS132は、処理要素により実行可能な命令を含み、コンピュータシステム100の構成要素を管理し、プログラムに構成要素へのアクセスおよび使用を可能にする関数のセットを提供する。一実施形態において、OS132は、Windows(登録商標)オペレーティングシステムである。他の実施形態において、OS132は、コンピュータシステム100を用いる使用に適した別のオペレーティングシステムである。
【0042】
コンピュータシステムが、コンパイラ134を実行してコード10をコンパイルすると、コンパイラ134は、1つまたは複数の実行ファイル−例えば、1つまたは複数のGP実行ファイル136および1つまたは複数のDP実行ファイル138を生成する。他の実施形態において、コンパイラ134は、1つまたは複数のGP実行ファイル136を生成して、それぞれが1つまたは複数のDP実行ファイル138を含むようにしてもよく、または、1つまたは複数のDP実行ファイル138を生成して、いずれのGP実行ファイル136も生成しなくてもよい。GP実行ファイル136および/またはDP実行ファイル138は、データ並列拡張を用いてコンパイラ134の呼び出しに応じて生成されて、コード10の全てまたは選択された部分がコンパイルされる。呼び出しを、例えば、プログラマもしくはコンピュータシステム100の他のユーザ、コンピュータシステム100内の他のコード、または、別のコンピュータシステム(図示せず)内の他のコードにより生成してよい。
【0043】
GP実行ファイル136は、1つまたは複数の汎用の処理要素102(例えば、CPU(central processing unit))上での実行用に意図されるプログラムを表す。GP実行ファイル136には、1つまたは複数の汎用の処理要素102の命令セットからの低レベルの命令が含まれる。
【0044】
DP実行ファイル138は、1つまたは複数のデータ並列(DP)最適計算ノード121上での実行用に意図され最適化されるデータ並列のプログラムまたはアルゴリズム(例えば、シェーダ)を表す。一実施形態において、DP実行ファイル138には、DPバイトコード、または、DP最適計算ノード121上で実行される前にデバイスドライバ(図示せず)を使用してDP最適計算ノード121の命令セットからの低レベルの命令に変換される何らかの他の中間表現(IL)が含まれる。他の実施形態において、DP実行ファイル138には、コンパイラ134によって低レベルの命令が挿入された1つまたは複数のDP最適計算ノード121の命令セットからの低レベルの命令が含まれる。従って、GP実行ファイル136は、1つまたは複数の汎用プロセッサ(例えば、CPU)により直接実行可能であり、また、DP実行ファイル138は、1つまたは複数のDP最適計算ノード121により直接実行可能であるか、または、DP最適計算ノード121の低レベルの命令に変換された後に、1つまたは複数のDP最適計算ノード121により実行可能である。
【0045】
コンピュータシステム100は、1つまたは複数の処理要素102を使用してGP実行ファイル136を実行してよく、また、コンピュータシステム100は、以下追加的に詳細に記載するように1つまたは複数のPE122を使用して、DP実行ファイル138を実行してもよい。
【0046】
メモリシステム104には、命令およびデータを記憶するべく構成される、任意の適切な型、数、および構成の揮発性または不揮発性の記憶装置が含まれる。メモリシステム104の記憶装置は、OS132、コード10、コンパイラ134、GP実行ファイル136、およびDP実行ファイル138を含むコンピュータ実行可能命令(すなわち、ソフトウェア)を記憶する、コンピュータ可読記憶媒体を表す。命令は、コンピュータシステム100により実行可能であり、本明細書に記載されるようなOS132、コード10、コンパイラ134、GP実行ファイル136、およびDP実行ファイル138の関数および方法を実施する。メモリシステム104は、処理要素102、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、および計算エンジン120から受け取った命令およびデータを記憶する。メモリシステム104は、記憶した命令およびデータを、処理要素102、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、および計算エンジン120に提供する。メモリシステム104内の記憶装置の例に含まれるものには、ハードディスクドライブ、RAM(random access memory)、ROM(read only memory)、フラッシュメモリドライブおよびカード、ならびに、CDおよびDVDなどの磁気ディスクおよび光ディスクがある。
【0047】
入力/出力装置106には、命令またはデータをユーザからコンピュータシステム100に入力し、かつ、命令またはデータをコンピュータシステム100からユーザに出力するべく構成される任意の適切な型、数、および構成の入力/出力装置が含まれる。入力/出力装置106の例に含まれるものには、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイアル、ノブ、およびスイッチがある。
【0048】
表示装置108には、テキストおよび/またはグラフィックの情報をコンピュータシステム100のユーザに出力するべく構成される任意の適切な型、数、および構成の表示装置が含まれる。表示装置108の例に含まれるものには、モニタ、表示スクリーン、およびプロジェクタがある。
【0049】
周辺装置110には、コンピュータシステム100内の1つまたは複数の他の構成要素と共に動作して、汎用または専用の処理機能を実施するべく構成される任意の適切な型、数、および構成の周辺装置が含まれる。
【0050】
ネットワーク装置112には、コンピュータシステム100が1つまたは複数のネットワーク(図示せず)に渡って通信することを可能にするべく構成される任意の適切な型、数、および構成のネットワーク装置が含まれる。ネットワーク装置112は、任意の適切なネットワーキングプロトコルおよび/または構成に従って動作して、情報が、コンピュータシステム100によりネットワークに送信され、または、コンピュータシステム100によりネットワークから受信されることを可能にすることができる。
【0051】
計算エンジン120は、DP実行ファイル138を実行するべく構成される。計算エンジン120には、1つまたは複数の計算ノード121が含まれる。各計算ノード121は、メモリ階層を共有する計算リソースの集合体である。計算ノード121は、1つまたは複数のPE122およびDP実行ファイル138を記憶するメモリ124のセットを含む。PE122は、DP実行ファイル138を実行し、DP実行ファイル138により生成される結果をメモリ124内に記憶する。
【0052】
上記で触れたように、データ並列計算(すなわち、DPプログラムまたはアルゴリズムの実行)用に最適化されるハードウェアアーキテクチャを伴う1つまたは複数の計算リソースを有する計算ノード121を、DP最適計算ノード121と称する。DP最適計算ノード121の例に含まれるものには、PE122のセットが1つまたは複数のGPUを含むノード121、および、PE122のセットが汎用プロセッサパッケージ内にSIMDユニットのセットを含むノード121がある。データ並列計算用に最適化されるハードウェアアーキテクチャを伴う計算リソースを何ら持たない計算ノード121(例えば、汎用の処理要素102のみを有するプロセッサパッケージ)を、非DP最適計算ノード121と称する。各計算ノード121において、メモリ124は、メモリシステム104から分離されてよく(例えば、GPUが使用するGPUメモリ)、または、メモリシステム104の一部であってもよい(例えば、汎用プロセッサパッケージにおいてSIMDユニットが使用するメモリ)。
【0053】
ホスト101は、相互接続114を使用して、DP実行ファイル138を実行用に計算ノード121に提供するべく、かつ、DP実行ファイル138によって生成された結果を受け取るべく構成される、ホスト計算ノードを形成する。ホスト計算ノードには、メモリ階層(すなわち、メモリシステム104)を共有する汎用計算リソース(すなわち、汎用の処理要素102)の集合体を含む。ホスト計算ノードを、SMP(symmetric multiprocessing architecutre)を用いて構成してよく、また、例えば、NUMA(non−uniform memory access)アーキテクチャを使用してメモリシステム104のメモリの局所性を最大化するべく構成してもよい。
【0054】
ホスト計算ノードのOS132は、DP呼び出しサイトを実行して、DP実行ファイル138がDP最適計算ノードまたは非DP最適計算ノード121により実行されるようにするべく構成される。メモリ124がメモリシステム104から分離される実施形態において、ホスト計算ノードは、DP実行ファイル138および1つまたは複数のインデックス付け可能な型14がメモリシステム104からメモリ124にコピーされるようにする。メモリシステム104がメモリ124を含む実施形態において、ホスト計算ノードは、DP実行ファイル138および/または1つまたは複数のインデックス付け可能な型14のコピーをメモリ124としてのメモリシステム104内に指定してよく、および/または、DP実行ファイル138および/または1つまたは複数のインデックス付け可能な型14を、メモリシステム104の一部から、メモリ124を形成するメモリシステム104の別の部分にコピーしてもよい。計算ノード121とホスト計算ノードとの間のコピー処理は、非同期と指定されない場合は同期点であってよい。
【0055】
ホスト計算ノードおよび各計算ノード121は、お互いに独立してコードを同時に実行することができる。ホスト計算ノードおよび各計算ノード121は、同期点において相互作用して、ノード計算を調和させることができる。
【0056】
一実施形態において、計算エンジン120は、1つまたは複数のGPU(graphics processing unit)にPE122およびメモリシステム104から分離されるメモリ124が含まれるグラフィックカードを表す。本実施形態において、グラフィックカードのドライバ(図示せず)は、バイトコードまたはDP実行ファイル138の何らかの他の中間表現(IL)を、GPUのPE122による実行用のGPUの命令セットに変換してよい。
【0057】
別の実施形態において、計算エンジン120は、1つまたは複数の汎用の処理要素102を有するプロセッサパッケージ内に含まれる1つまたは複数のGPU(すなわち、PE122)と、メモリ124を含むメモリシステム104の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム100上に提供して、バイトコードまたはDP実行ファイル138の何らかの他の中間表現(IL)を、プロセッサパッケージ内のGPUの命令セットに変換してよい。
【0058】
さらなる実施形態において、計算エンジン120は、処理要素102を含む1つまたは複数のプロセッサパッケージ内の1つまたは複数のSIMDユニットと、メモリ124を含むメモリシステム104の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム100上に提供して、バイトコードまたはDP実行ファイル138の何らかの他の中間表現(IL)を、プロセッサパッケージ内のSIMDユニットの命令セットに変換してよい。
【0059】
さらに別の実施形態において、計算エンジン120は、処理要素102を含む1つまたは複数のプロセッサパッケージ内の1つまたは複数のスカラまたはベクトル処理パイプランと、メモリ124を含むメモリシステム104の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム100上に提供して、バイトコードまたはDP実行ファイル138の何らかの他の中間表現(IL)を、プロセッサパッケージ内のスカラ処理パイプラインの命令セットに変換してよい。
【0060】
本明細書において特定の実施形態を例示し記載したが、種々の代替のおよび/または等価の実装が、本発明の範囲から逸脱することなく、示し記載した特定の実施形態と入れ替えられることは、当業者には理解されるであろう。本出願は、本明細書において検討した特定の実施形態のいずれの適用または変形も含むことを意図している。従って、本発明が特許請求の範囲およびその等価物によってのみ制限されることを意図している。