(57)【特許請求の範囲】
【請求項１】
コンピュータ実行可能命令を記憶するコンピュータ可読記憶媒体であって、前記命令は、コンピュータシステムにより実行されると、コンピュータシステムに方法を実行させ、該方法が、
データ並列ソースコードに応答して、計算デバイスオブジェクトおよびリソースビューオブジェクトを生成するステップであって、前記計算デバイスオブジェクトがデバイスレベルを指定し、前記リソースビューオブジェクトがリソースレベルを指定し、前記デバイスレベルが、計算ノードのタイプを示し、前記リソースレベルが、前記データ並列ソースコードの実行において使用するランタイムライブラリのタイプを示す、ステップと、
前記データ並列ソースコードのデータ並列関数を前記デバイスレベルに対応する計算ノードを使用して実行するステップであって、該実行が、前記データ並列関数に適用されるアノテーションに応答し、該アノテーションが、前記データ並列関数が前記リソースレベルと互換性があることを示す、ステップと
を含む、コンピュータ可読記憶媒体。
【請求項２】
前記リソースビューオブジェクトにより指定される前記リソースレベルはネイティブである、請求項１記載のコンピュータ可読記憶媒体。
【請求項３】
前記デバイスレベルは前記計算デバイスオブジェクトにおいてカスタムであることを検出するステップと、
前記デバイスレベルがカスタムであることを検出したことに応答して、カスタム計算デバイス関数またはカスタムデータ並列関数の一方を使用するステップと
をさらに含む、請求項１記載のコンピュータ可読記憶媒体。
【請求項４】
呼び出しサイトアブストラクション関数を使用して前記計算ノードについて呼び出しサイトの実装を生成するステップ
をさらに含む、請求項１記載のコンピュータ可読記憶媒体。
【請求項５】
前記データ並列ソースコードは、データ並列拡張を有するプログラミング言語で記述される、請求項１記載のコンピュータ可読記憶媒体。
【請求項６】
前記データ並列ソースコードは、高レベルのデータ並列プログラミング言語で記述される、請求項１記載のコンピュータ可読記憶媒体。
【請求項７】
１つまたは複数の前記計算ノードは、少なくとも１つのグラフィックスプロセッシングユニットを含む、請求項１記載のコンピュータ可読記憶媒体。
【請求項８】
１つまたは複数の前記計算ノードは、少なくとも１つの汎用プロセッサを含む、請求項１記載のコンピュータ可読記憶媒体。
【請求項９】
コンピュータシステムにおいてコンパイラにより実行される方法であって、
１つまたは複数のデータ並列計算ノード上での実行用に構成されるデータ並列ソースコードのデータ並列関数内のアノテーションを識別するステップと、
前記アノテーションのアプリケーションに応答して、前記データ並列ソースコードからデータ並列実行可能コードを生成するステップであって、前記アノテーションが、前記データ並列関数が前記データ並列ソースコードにより指定されるリソースレベルと互換性があることを示し、前記リソースレベルが、前記データ並列ソースコードの実行において使用するランタイムライブラリのタイプを示す、ステップと
を含む方法。
【請求項１０】
リソースビューオブジェクトに対応する前記リソースレベルはネイティブである、請求項９記載の方法。
【請求項１１】
カスタムのデバイスレベルの検出に応答して、カスタム計算デバイス関数またはカスタムデータ並列関数の一方を含むようにデータ並列実行可能コードを生成するステップ
をさらに含む請求項９記載の方法。
【請求項１２】
呼び出しサイトアブストラクション関数を使用して前記１つまたは複数のデータ並列計算ノードについて呼び出しサイトの実装を生成するステップをさらに含む、請求項９記載の方法。
【請求項１３】
前記データ並列ソースコードは、データ並列拡張を有する高レベルの汎用プログラミング言語で記述される、請求項９記載の方法。
【請求項１４】
請求項９〜１３のいずれかに記載の方法をコンピュータに実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、拡張可能なデータ並列セマンティクスに関する。
【背景技術】
【０００２】
コンピュータシステムに多くの場合に含まれるものには、１つまたは複数の汎用プロセッサ（例えば、ＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ））、および、１つまたは複数の専用データ並列計算ノード（例えば、ＧＰＵ（ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）、またはＣＰＵ内のＳＩＭＤ（ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ，ｍｕｌｔｉｐｌｅ  ｄａｔａ）実行ユニット）がある。汎用プロセッサは、概してコンピュータシステム上で汎用の処理を実施し、データ並列計算ノードは、概してコンピュータシステム上でデータ並列処理（例えば、グラフック処理）を実施する。汎用プロセッサは、データ並列アルゴリズムを実装する能力を有するが、データ並列計算ノード内に最適化されたハードウェアリソースが見つからない状態で行うことが多い。その結果、汎用プロセッサは、データ並列アルゴリズムの実行においてデータ並列計算ノードよりはるかに非効率的になってしまう。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
データ並列計算ノードは、従来、コンピュータシステム上でプログラム実行時に汎用プロセッサに対するサポートの役割を担ってきた。データ並列アルゴリズム用に最適化されたハードウェアの役割がデータ並列計算ノードの処理能力の増大により高まるのに連れて、データ並列計算ノードをプログラミングするプログラマの能力が向上し、データ並列計算ノードのプログラミングが容易になることが望ましい。しかし、データ並列アルゴリズムは典型的には、汎用プログラミング言語とは異なるセマンティック（意味的）制限を有するデータ並列言語を用いてプログラミングされる。
【課題を解決するための手段】
【０００４】
この概要は、以下の「発明を実施するための形態」でさらに述べる概念を選択して簡略化した形式で紹介するために提供するものである。この要約は、特許請求の主題の重要な特徴または主要な特徴を特定することを意図しておらず、特許請求の主題の範囲を制限するものとして使用されることも意図していない。
【０００５】
高レベルのプログラミング言語により、拡張可能なデータ並列セマンティクスを提供する。ユーザコードは、計算デバイスオブジェクトおよびリソースビューオブジェクトを使用してデータ並列コードを実行するためのハードウェアおよびソフトウェアのリソースを指定する。ユーザコードは、オブジェクトおよびセマンティックメタデータを使用して、新しいおよび／または更新された型の計算ノード、ならびに新しいおよび／または更新された型のランタイムライブラリによる実行を可能にする。拡張可能なデータ並列セマンティクスにより、ユーザコードを新しいおよび／または更新された型の計算ノードおよびランタイムライブラリにより実行することが可能となる。
【図面の簡単な説明】
【０００６】
添付の図面は、実施形態のさらなる理解を提供するために含まれ、また、本明細書に組み込まれかつその一部を構成する。図面は実施形態を例示し、また、記載と共に実施形態の原理の説明に役立つ。他の実施形態および実施形態の意図される利点の多くが、以下の詳細説明を参照することにより、より良く理解されて、容易に認められるであろう。図面の要素は必ずしもお互いに相対して縮尺されていない。同様の参照番号は対応する同様の部分を示す。
【図１】拡張可能なデータ並列セマンティクスを用いたランタイム環境の一実施形態を例示するブロック図である。
【図２】拡張可能なデータ並列セマンティクスを実装するコードの一実施形態を例示するコンピュータコードの図である。
【図３Ａ】拡張可能なデータ並列セマンティクスを実装するランタイム環境におけるランタイムライブラリの実施形態を例示するブロック図である。
【図３Ｂ】拡張可能なデータ並列セマンティクスを実装するランタイム環境におけるランタイムライブラリの実施形態を例示するブロック図である。
【図３Ｃ】拡張可能なデータ並列セマンティクスを実装するランタイム環境におけるランタイムライブラリの実施形態を例示するブロック図である。
【図４Ａ】拡張可能なデータ並列セマンティクスをサポートするデータ構造の実施形態を例示するブロック図である。
【図４Ｂ】拡張可能なデータ並列セマンティクスをサポートするデータ構造の実施形態を例示するブロック図である。
【図５】拡張可能なデータ並列セマンティクスを用いてデータ並列コードをコンパイルかつ実行するべく構成されるコンピュータシステムの一実施形態を例示するブロック図である。
【発明を実施するための形態】
【０００７】
以下の「発明を実施するための形態」において、添付の図面を参照するが、該図面はその一部を成し、本発明を実践できる特定の実施形態を例として示すものである。この点に関して、方向性を表す用語である「上部」、「底部」、「表」、「裏」、「前」、「後」などを、記載されている図面の向きに関連して使用している。実施形態の構成要素は多数の異なる向きで位置付けることが可能であるため、方向を表す用語は例示目的で使用し、制限のために使用するものではない。他の実施形態を利用してよく、また、構造または論理の変更を本発明の範囲から逸脱することなく加えてよいことは、理解されるべきである。従って、以下の詳細説明は、制限する意味でとらえられるべきではなく、本発明の範囲は、添付の請求項により定義するものである。別段言及しない限り、本明細書に記載する種々の例示の実施形態の特徴をお互いに組み合わせてよいことは、理解されるべきである。
【０００８】
図１は、図５に示すコンピュータシステム１００などのコンピュータシステムにおける拡張可能なデータ並列セマンティクスを用いたランタイム環境２の一実施形態を例示するブロック図である。ランタイム環境２は、コンピュータシステムにおけるランタイムモードの動作を表すもので、該コンピュータシステムは、１つまたは複数の計算ノード１２１上でユーザコード１０および１つまたは複数のランタイムライブラリ２０の組からの命令を実行している（図５にも示し、以下でさらに詳細に説明する）。
【０００９】
コード１０には、１つまたは複数の計算ノード１２１による実行用の１つまたは複数の実行ファイル（例えば、図５に示すＤＰ実行ファイル１３８）にコンパイルすることができる高レベルの汎用またはデータ並列のプログラミング言語からの一連の命令が含まれる。コード１０は、１つまたは複数のランタイムライブラリ２０と連動して実行され、この場合ランタイムライブラリ２０には、データ並列関数を提供するデータ並列ＡＰＩ（アプリケーションプログラミングインターフェース）が含まれる。
【００１０】
コード１０は、ランタイムライブラリ２０から計算デバイスオブジェクト１２を生成させて、コード１０の少なくとも一部を実行するための計算ノード１２１を指定し、また、ランタイムライブラリ２０からリソースビューオブジェクト１４を生成させて、コード１０の実行時に使用されるランタイムライブラリ２０を指定する。計算デバイスオブジェクト１２は、デバイスレベル（すなわち、計算ノード１２１の１つの型）を指定するハードウェアのアブストラクションを形成する。リソースビューオブジェクト１４は、計算デバイスオブジェクト１２が指定するハードウェアをどのように使用するかについて記述するリソースレベルを指定する。リソースビューオブジェクト１４は、例えば、異なるＤｉｒｅｃｔＸの実装（例えば、ＤｉｒｅｃｔＸ１１、ＤｉｒｅｃｔＸ１１．１、ＤｉｒｅｃｔＸ１２、およびＤｉｒｅｃｔＸ１３）またはＳＳＥ／ＡＶＸの実装を、ネイティブコード生成、またはＷＡＲＰ（ＤｉｒｅｃｔＸのソフトウェアエミュレータ）を用いて記述することができる。リソースビューオブジェクト１４にはまた、メモリ管理およびカーネル実行のサービスを含んでよい。計算デバイスオブジェクト１２およびリソースビューオブジェクト１４を、関連するセマンティックメタデータと共に使用することにより、コード１０の下層のプログラミング言語のセマンティックな変更を扱う拡張可能なデータ並列セマンティクスを提供する。拡張可能なデータ並列セマンティクスにより、コード１０を、新しいおよび／または更新された型の計算ノード１２１、ならびに新しいおよび／または更新された型のランタイムライブラリ２０を用いて実行することが可能となる。その結果、特定の型の計算ノード１２１を用いた使用向けに設計されていたコード１０の構造を、新しいおよび／または更新された型の計算ノード１２１により実行することができる。
【００１１】
一実施形態において、コード１０には、１つまたは複数のモジュールのセット内に記憶させるプログラムを形成する、データ並列拡張を有する高レベルの汎用プログラミング言語（以後、ＧＰ言語）からの一連の命令が含まれる。ＧＰ言語により、プログラムを異なる部分（すなわち、モジュール）に記述することが可能となり、そのため、各モジュールをコンピュータシステムがアクセス可能な別々のファイルまたは場所に記憶することができる。ＧＰ言語により、１つまたは複数の汎用プロセッサおよび１つまたは複数の専用のＤＰ最適計算ノードを含むコンピュータ環境をプログラミングするための単一の言語を提供する。ＤＰ最適計算ノードは典型的には、ＧＰＵ（ｇｒａｐｈｉｃ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）または汎用プロセッサのＳＩＭＤユニットであるが、いくつかのコンピュータ環境においては、汎用プロセッサのスカラまたはベクトルの実行ユニット、ＦＰＧＡ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）、または他の適切なデバイスを含んでもよい。ＧＰ言語を使用して、プログラマは、汎用プロセッサおよびＤＰソースコードの両方を、それぞれ汎用プロセッサおよびＤＰ計算ノードによる実行用にコード１０に含めることができ、また、汎用プロセッサおよびＤＰソースコードの実行を調和させることができる。コード１０は、本実施形態においては、アプリケーション、ライブラリ関数、またはオペレーティングシステムサービスなどの任意の適切な型のコードを表してよい。
【００１２】
ＧＰ言語は、データ並列の特徴を含むべく、ＣまたはＣ＋＋などの広く適応した高レベルの汎用プログラミング言語を拡張することにより形成してよい。ＤＰの特徴が現れる汎用言語の他の例には、Ｊａｖａ（登録商標）、ＰＨＰ、Ｖｉｓｕａｌ  Ｂａｓｉｃ、Ｐｅｒｌ、Ｐｙｔｈｏｎ（商標）、Ｃ＃、Ｒｕｂｙ、Ｄｅｌｐｈｉ、Ｆｏｒｔｒａｎ、ＶＢ、Ｆ＃、ＯＣａｍｌ、Ｈａｓｋｅｌｌ、Ｅｒｌａｎｇ、ＮＥＳＬ、Ｃｈａｐｅｌ、およびＪａｖａＳｃｒｉｐｔ（登録商標）が含まれる。ＧＰ言語の実装には、プログラムの異なる部分を異なるモジュールに含めることが可能な豊富なリンク機能を含んでよい。データ並列の特徴により、ＤＰ最適計算ノードの専用アーキテクチャの利点を生かしてデータ並列操作を汎用プロセッサ（すなわち、非ＤＰ最適計算ノード）で行うよりも速くまたはより効率的に実行することを可能にするプログラミングツールを提供する。ＧＰ言語はまた、プログラマが汎用プロセッサおよびＤＰ最適計算ノードの両方についてプログラミングすることを可能にする別の適切な高レベルの汎用プログラミング言語であってよい。
【００１３】
別の実施形態において、コード１０には、プログラムを形成する高レベルのデータ並列プログラミング言語（以後、ＤＰ言語）からの一連の命令が含まれる。ＤＰ言語により、１つまたは複数のＤＰ最適計算ノードを有するコンピュータ環境においてＤＰ最適計算ノードをプログラミングするための専用言語を提供する。ＤＰ言語を使用して、プログラマは、ＤＰ最適計算ノード上での実行が意図されるＤＰソースコードをコード１０内に生成する。ＤＰ言語により、ＤＰ最適計算ノードの専用アーキテクチャの利点を生かしてデータ並列操作を汎用プロセッサで行うよりも速くまたはより効率的に実行することを可能にするプログラミングツールを提供する。ＤＰ言語は、既存のＤＰプログラミング言語であってよく、例えば、ＨＬＳＬ、ＧＬＳＬ、Ｃｇ、Ｃ、Ｃ＋＋、ＮＥＳＬ、Ｃｈａｐｅｌ、ＣＵＤＡ、ＯｐｅｎＣＬ、Ａｃｃｅｌｅｒａｔｏｒ、Ｃｔ、ＰＧＩ  ＧＰＧＰＵ  Ａｃｃｅｌｅｒａｔｏｒ、ＣＡＰＳ  ＧＰＧＰＵ  Ａｃｃｅｌｅｒａｔｏｒ、Ｂｒｏｏｋ＋、ＣＡＬ、ＡＰＬ、Ｆｏｒｔｒａｎ９０（後継を含む）、Ｄａｔａ  Ｐａｒａｌｌｅｌ  Ｃ、ＤＡＰＰＬＥ、またはＡＰＬである。コード１０は、本実施形態においては、アプリケーション、ライブラリ関数、またはオペレーティングシステムサービスなどの任意の適切な型のＤＰソースコードを表してよい。
【００１４】
コード１０には、ＤＰ最適計算ノード１２１上での実行用に指定されるコード部分が含まれる。ＤＰ最適計算ノード１２１は、データ並列計算（すなわち、ＤＰプログラムまたはアルゴリズムの実行）用に最適化されるハードウェアアーキテクチャを伴う１つまたは複数の計算リソースを有する。図２に示す一実施形態において、コード１０がＧＰ言語で記述されており、ＧＰ言語により、プログラマが、ベクトル関数を定義する際にアノテーション２９（例えば、ｒｌ＿ａｎｎｏｔｅ）を使用してＤＰソースコードを指定することが可能となる。アノテーション２９は、ＤＰ最適計算ノード上での実行が意図されるベクトル関数の関数名２７（例えば、ｖｅｃｔｏｒ＿ｆｕｎｃ）に関連付けされる。コード１０にはまた、ベクトル関数の１つまたは複数の呼び出し２８（例えば、ｆｏｒａｌｌ．．．，ｖｅｃｔｏｒ＿ｆｕｎｃ，．．．）を呼び出しサイト（例えば、ｆｏｒａｌｌ、ｒｅｄｕｃｅ、ｓｃａｎ、またはｓｏｒｔ）において含んでよい。呼び出しサイトに対応するベクトル関数をカーネル関数と称する。カーネル関数は、他のベクトル関数をコード１０（すなわち、他のＤＰソースコード）に呼び出してよく、また、カーネル関数をベクトル関数呼び出しグラフのルートと見なしてよい。カーネル関数はまた、コード１０により定義される型（例えば、クラスまたは構造体）を使用することもできる。型はＤＰソースコードとして注釈付けされてもされなくてもよい。他の実施形態において、他の適切なプログラミング言語構造を使用して、ＤＰソースコードおよび／または汎用プロセッサコードとして、コード１０の部分を指定してもよい。加えて、アノテーション２９は、コード１０がＤＰ言語で記述される実施形態においては省略してもよい。
【００１５】
アノテーション２９は、ベクトル関数についてリソースレベルのセマンティクスを指定する。アノテーション２９により、計算デバイスオブジェクト１２およびリソースビューオブジェクト１４において反映されるように、コンパイラがベクトル関数のセマンティック状態がセマンティクスおよび対象の計算ノード１２１の他の特性との互換性を確実に持つことが可能となる。セマンティック制限が時と共に緩和されるにつれて、より新しい計算ノード１２１ほどセマンティック制限が少なくなり、高レベルのセマンティック制限を示すより古いアノテーション２９を有するベクトル関数を実行することができる。
【００１６】
ランタイムライブラリ２０には、タスク並列および／またはデータ並列（ＤＰ）の実行能力を提供する任意の適切な型および／または数のライブラリが含まれる。例えば、ランタイムライブラリ２０には、一実施形態において、ＤｉｒｅｃｔＸランタイムライブラリ、および、並列パターンライブラリ（ＰＰＬ）を有する同時実行ランタイムライブラリを含んでよい。ランタイムライブラリ２０は、ＡＰＩ（ａｐｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）、または、タスク並列および／またはデータ並列の能力と共に関数を与える他の適切なプログラミング構造を提供する。
【００１７】
図３Ａから３Ｃは、それぞれ、図１に示すランタイム環境２において使用するためのランタイムライブラリ２０の実施形態２０（ｌ）から２０（３）を例示する。図３Ａの実施形態において、ランタイムライブラリ２０（１）には、計算デバイス関数４２、リソースビュー関数４３、データ並列（ＤＰ）関数４４、および、呼び出しサイトアブストラクション関数４６が含まれる。
【００１８】
計算デバイス関数４２は、ユーザコード１０が供給するパラメータに従って計算デバイスオブジェクト１２（図１に示す）を作成する。特に、ユーザコード１０は、計算デバイスオブジェクト１２を作成するために、少なくともコード１０の一部を実行するための計算ノードの型を指定するデバイスレベル（例えば、ｄｅｖｉｃｅ＿ｌｅｖｅｌ）を渡す。計算デバイス関数４２は、一実施形態において、図４Ａのデータ構造に示されるデバイスレベル（すなわち、ｎｏｎｅ、ｃｕｓｔｏｍ、ＧＰＵ、ＷＡＲＰ、ＲＥＦ、ＮＡＴＩＶＥ、ＳＳＥ、ＡＶＸ、およびＬＲＢ）を認識する。従って、ユーザコード１０は、本実施形態においてこれらのデバイスレベルの内の１つを渡すことができる。
【００１９】
リソースビュー関数４３は、ユーザコード１０が供給するパラメータに従って、リソースビューオブジェクト１４（図１に示す）を作成する。特に、ユーザコード１０は、計算デバイスオブジェクト１２が指定するハードウェアをどのように使用するかについて記述するリソースレベル（例えば、ｒｅｓｏｕｒｃｅ＿ｌｅｖｅｌ）を渡す。リソースビュー関数４３は、一実施形態において、図４Ｂのデータ構造に示されるリソースレベル（すなわち、ｎｏｎｅ、ＮＡＴＩＶＥ、ＣＵＳＴＯＭ、ＤＸ１１、ＤＸ１１．１、およびＤＸ１２）を認識する。従って、ユーザコード１０は、本実施形態において、これらのリソースレベルの内の１つを渡すことができる。
【００２０】
ユーザコード１０のデバイスレベルおよびリソースレベルは、ユーザコード１０が満たす必要があるセマンティック制限のレベルを示す。これらのセマンティック制限は、新しいおよび更新された計算ノード１２１およびランタイムライブラリ２０がユーザコード１０の実行に使用されるため、時と共に減少すると推測される。従って、計算ノード１２１およびランタイムライブラリ２０が、ユーザコード１０のデバイスレベルおよびリソースレベルと同じまたはより少ないセマンティック制限を有する場合に、計算ノード１２１およびランタイムライブラリ２０は、ユーザコード１０を実行することが可能である。
【００２１】
一実施形態において、ユーザコード１０は、ＧＰＵのデバイスレベルを用いて計算デバイスオブジェクト１２を作成し、ＤＸ１１のリソースレベルを用いてリソースビューオブジェクト１４を作成する。ユーザコード１０にはまた、ＤＸ１１を示すアノテーション２９を有する少なくとも１つのベクトル関数が含まれる。ＧＰＵのデバイスレベルは、ユーザコード１０の少なくとも一部が、ＧＰＵ上での実行用に記述されることを示し、ＤＸ１１のリソースレベルは、ユーザコード１０の少なくとも一部が、ＤｉｒｅｃｔＸ１１を含むまたはサポートするランタイムライブラリ２０を用いた実行用に記述されることを示す。従って、ベクトル関数（複数可）は、ＤｉｒｅｃｔＸ１１のセマンティック制限と一致し、ＧＰＵ上でＤｉｒｅｃｔＸ１１を用いて実行してよい。リソースビューオブジェクト１４が、ＤＸ１１ではなくＤＸ１２のリソースレベルを有する場合（すなわち、ユーザコード１０が、ＤｉｒｅｃｔＸ１２を含むまたはサポートするランタイムライブラリ２０を用いた実行用に記述される）、ベクトル関数（複数可）のアノテーション２９（複数可）は、ＤＸ１１、ＤＸ１１．１、またはＤＸ１２であってよく、何故ならＤｉｒｅｃｔＸ１２にはＤｉｒｅｃｔＸ１１およびＤｉｒｅｃｔＸ１１．１より少ないセマンティック制限しか含まれていないためである。
【００２２】
別の実施形態において、ユーザコード１０は、ＷＡＲＰのデバイスレベルを用いて計算デバイスオブジェクト１２を作成し、ＤＸ１１またはＤＸ１２のリソースレベルを用いてリソースビューオブジェクト１４を作成する。ユーザコード１０にはまた、リソースレベルがＤＸ１１またはＤＸ１１、ＤＸ１１．１である場合にＤＸ１１を示し、リソースレベルがＤＸ１２である場合にＤＸ１２を示すアノテーション２９を有する少なくとも１つのベクトル関数が含まれる。ＷＡＲＰのデバイスレベルは、ユーザコード１０の少なくとも一部がＳＳＥ、ＡＶＸ、またはＬＲＢｎｉが可能なＤｉｒｅｃｔＸシミュレータによる実行用に記述されること示し、ＤＸ１１またはＤＸ１２のリソースレベルは、ユーザコード１０の少なくとも一部が、ＤｉｒｅｃｔＸ１１またはＤｉｒｅｃｔＸ１２を含むまたはサポートするランタイムライブラリ２０を用いる実行用に記述されることを示す。従って、ＤｉｒｅｃｔＸ１１のセマンティック制限と一致するベクトル関数を、ＤｉｒｅｃｔＸ１１またはその上位を用いてＷＡＲＰシミュレータ上で実行してよく、ＤｉｒｅｃｔＸ１２のセマンティック制限と一致するベクトル関数を、ＤｉｒｅｃｔＸ１２を用いてＷＡＲＰシミュレータ上で実行してよい。
【００２３】
さらなる一例において、ユーザコード１０は、ＲＥＦのデバイスレベルを用いて計算デバイスオブジェクト１２を作成し、ＤＸ１１またはＤＸ１２のリソースレベルを用いてリソースビューオブジェクト１４を作成する。ユーザコード１０にはまた、リソースレベルがＤＸ１１またはＤＸ１１、ＤＸ１１．１である場合にＤＸ１１を示し、リソースレベルがＤＸ１２である場合にＤＸ１２を示すアノテーション２９を有する少なくとも１つのベクトル関数が含まれる。ＲＥＦのデバイスレベルは、ユーザコード１０の少なくとも一部が、シングルスレッドＣＰＵベースのＤｉｒｅｃｔＸシミュレータによる実行用に記述されることを示し、ＤＸ１１またはＤＸ１２のリソースレベルはそれぞれ、ユーザコード１０の少なくとも一部が、ＤｉｒｅｃｔＸ１１またはＤＸ１２を含むまたはサポートするランタイムライブラリ２０を用いる実行用に記述されることを示す。従って、ＤｉｒｅｃｔＸ１１のセマンティック制限と一致するベクトル関数を、ＤｉｒｅｃｔＸ１１またはその上位を用いてＲＥＦシミュレータ上で実行してよく、ＤｉｒｅｃｔＸ１２のセマンティック制限と一致するベクトル関数を、ＤｉｒｅｃｔＸ１２を用いてＲＥＦシミュレータ上で実行してよい。
【００２４】
上記の例では、ＤｉｒｅｃｔＸをサポートするランタイムライブラリ２０が使用される。他の例では、他の実装を、デバイスレベルとしてハードウェア型を示し、リソースレベルとしてネイティブ型を示すことによりサポートすることができる。例えば、ユーザコード１０は、計算デバイスオブジェクト１２を、ＳＳＥのデバイスレベルを用いて作成してＩｎｔｅｌおよびＡＭＤのＣＰＵ上でＳＳＥベクトルユニットを有効にすることができ、ＡＶＸのデバイスレベルを用いて作成してＩｎｔｅｌのＳａｎｄｙ  Ｂｒｉｄｇｅ  ＣＰＵを有効にすることができ、または、ＬＲＢのデバイスレベルを用いて作成してＩｎｔｅｌのＫｎｉｇｈｔｓ  Ｆｅｒｒｙの専用データ並列最適化ＣＰＵを有効にすることができる。これらの例を用いると、ユーザコード１０は、リソースビューオブジェクト１４を、ネイティブレベル（すなわち、ＮＡＴＩＶＥ）を用いて作成することができ、ユーザコード１０のベクトル関数が、データ並列セマンティクスに関して制限されず、下層にある汎用言語（例えば、Ｃ＋＋）のセマンティクスと一致する。
【００２５】
図３Ａのランタイムライブラリ２０（１）に戻ると、ＤＰ関数４４は、データ並列関数を提供して、ＧＰＵ、またはＷＡＲＰもしくはＲＥＦのソフトウェアシミュレータを有する計算ノードなどの計算ノード１２１の選択された型について、ｆｏｒａｌｌ、ｓｃａｎ、ｒｅｄｕｃｅ、およびｓｏｒｔなどの呼び出しサイトを実装させる。他の型の計算ノード１２１（例えば、新しいおよび／または更新された型）を用いて、ランタイムライブラリ２０（１）は、呼び出しサイトを抽象化する呼び出しサイトアブストラクション関数４６を提供する。呼び出しサイトアブストラクション関数４６を使用して、新しいおよび／または更新された型の計算ノード１２１について、呼び出しサイト機能を実装することができる。
【００２６】
図３Ｂに示すように、ユーザはまた、カスタム計算デバイス関数４８、カスタムリソースビュー関数、および／またはカスタムＤＰ関数５０を含む１つまたは複数のランタイムライブラリ２０（２）を提供してもよい。カスタム計算デバイス関数４８を、抽象基底クラスとして実装してよく、また、ユーザがユーザコード１０を実行するための新しいおよび／または更新された型の計算ノード１２１についてセマンティックメタデータを提供することが可能となる。カスタムリソースビュー関数４９もまた、抽象基底クラスとして実装してよく、ユーザがユーザコード１０を実行するためにハードウェアをどのように使用するかについて記述する新しいおよび／または更新されたリソースレベルを提供することが可能となる。カスタムＤＰ関数５０により、ユーザが新しいおよび／または更新された型の計算ノード１２１上で実行できるｆｏｒａｌｌ、ｓｃａｎ、ｒｅｄｕｃｅ、およびｓｏｒｔなどのカスタム呼び出しサイトの実装を提供することが可能となる。
【００２７】
一例において、ランタイムライブラリ２０（２）を使用するために、ユーザコード１０は、ＣＵＳＴＯＭのデバイスレベルを用いて計算デバイスオブジェクト１２を作成し、ＮＡＴＩＶＥのリソースレベルを用いてリソースビューオブジェクト１４を作成する。ユーザコード１０はまた、カスタム計算デバイス関数４８を呼び出して、新しいおよび／または更新された型の計算ノード１２１についてセマンティックメタデータを提供する。呼び出しサイトに関しては、ユーザコード１０は、ランタイムライブラリ２０（１）の呼び出しサイトアブストラクション関数４６を使用して、計算ノード１２１について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムＤＰ関数５０を提供してもよい。
【００２８】
別の例において、ランタイムライブラリ２０（２）を使用するために、ユーザコード１０は、ＮＡＴＩＶＥのデバイスレベルを用いて計算デバイスオブジェクト１２を作成し、ＣＵＳＴＯＭのリソースレベルを用いてリソースビューオブジェクト１４を作成する。ユーザコード１０はまた、カスタムリソースビュー関数４９を呼び出して、ユーザコード１０を実行するための計算デバイスオブジェクト１２により指定される計算ノード１２１をどのように使用するかについて記述する新しいおよび／または更新されたリソースレベルを提供する。例えば、リソースレベルは、カスタムバージョンのＩｎｔｅｌ（登録商標）Ｔｈｒｅａｄ  Ｂｕｉｌｄｉｎｇ  Ｂｌｏｃｋｓ（ＴＢＢ）であってよい。呼び出しサイトについては、ユーザコード１０は、ランタイムライブラリ２０（１）の呼び出しサイトアブストラクション関数４６を使用して、計算ノード１２１について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムＤＰ関数５０を提供してもよい。
【００２９】
さらなる例において、ランタイムライブラリ２０（２）を使用するために、ユーザコード１０は、ＣＵＳＴＯＭのデバイスレベルを用いて計算デバイスオブジェクト１２を作成し、ＣＵＳＴＯＭのリソースレベルを用いてリソースビューオブジェクト１４を作成する。ユーザコード１０は、カスタム計算デバイス関数４８を呼び出して、新しいおよび／または更新された型の計算ノード１２１についてセマンティックメタデータを提供する。ユーザコード１０はまた、カスタムリソースビュー関数４９を呼び出して、ユーザコード１０を実行するための計算デバイスオブジェクト１２により指定される計算ノード１２１をどのように使用するかについて記述する新しいおよび／または更新されたリソースレベルを提供する。呼び出しサイトについては、ユーザコード１０は、ランタイムライブラリ２０（１）の呼び出しサイトアブストラクション関数４６を使用して、計算ノード１２１について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムＤＰ関数５０を提供してもよい。
【００３０】
ベクトル関数をホスト（すなわち、非ベクトルＣＰＵ）上で実行するために、ユーザコード１０は、ＮＡＴＩＶＥのデバイスレベルを用いて計算デバイスオブジェクト１２を作成し、ＮＡＴＩＶＥのリソースレベルを用いてリソースビューオブジェクト１４を作成する。ＮＡＴＩＶＥのデバイスレベルは、ユーザコード１０の少なくとも一部をホスト上で実行してよいことを示す。ＮＡＴＩＶＥのリソースレベルにより、ユーザコード１０のベクトル関数が、データ並列セマンティクスに関して制限されず、下層にある汎用言語（例えば、Ｃ＋＋）のセマンティクスと一致することが可能となる。ホストの実行を用いて、ユーザコード１０は、ランタイムライブラリ２０（１）の呼び出しサイトアブストラクション関数４６を使用して、計算ノード１２１について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムＤＰ関数５０を提供してもよい。
【００３１】
データ並列セマンティック制限が低減または除去された拡張可能なデータ並列セマンティクスを提供することによりタスクベースの並列プログラミングランタイムライブラリ２０との統合（またはヘテロジニアスプログラミング）を達成することができる。特に、図３Ｃに示す、タスク並列関数５２を有するランタイムライブラリ２０（３）を、ＤＰ関数４４（図３Ａ）と連動して使用してよい。タスク並列関数５２が並列バターンライブラリ（ＰＰＬ）を有する同時実行ランタイムライブラリ（ＣｏｎｃＲＴ）を表す一例において、タスク並列関数５２を使用するｆｏｒａｌｌの実装を、仮想プロセッサを使用するホスト上での実行用に生成してよい。同様に、ＰＰＬおよびＣ＋＋の標準テンプレートライブラリ（ＳＴＬ）からのｆｏｒｅａｃｈおよびｔｒａｎｓｆｏｒｍの実装には、直線的なイテレータ（反復子）の代わりにｒａｎｇｅ  ｂａｓｅｄ（範囲ベース）の記号を含んでよい。一実施形態において、範囲パターンのオプションは以下の通り。
【００３２】
エニュメレータ  （基本的に、標準的なＳＴＬのイテレータパターンであって前方、双方向、等の変形を有する）
再帰的二分割（タスク並列）
チャンキング（タスク並列）
ランダムアクセス（タスク並列またはデータ並列）
ｆｏｒｅａｃｈおよびｔｒａｎｓｆｏｒｍの実装により、これらの範囲パターンを使用する範囲トレイトまたはカテゴリをアクティブにする。
【００３３】
データ並列形式のｆｏｒｅａｃｈにおいて、「ｒａｎｇｅ」は、ｆｏｒａｌｌにおける計算ドメインの類似物である。単純な実装では、データ並列サブトレイトでランダムアクセス「ｒａｎｇｅ」を用いて示される場合、ｆｏｒｅａｃｈの内部にｆｏｒａｌｌを呼び出すことができる。ｆｏｒｅａｃｈまたはｔｒａｎｓｆｏｒｍにおけるカーネル引数の数の制限を、ラムダ閉鎖を使用することにより緩和する。
【００３４】
ユーザが、ｆｏｒａｌｌ機能（ｆｏｒａｌｌと呼ばれない場合でも）のＣｏｎｃＲＴ実装の使用を望む場合、ｆｏｒｅａｃｈが呼び出されると、ＣｏｎｃＲＴのｆｏｒｅａｃｈが実装されていないと仮定して（あるいは、自明に焼かれるかもしれない−呼び出されたｆｏｒａｌｌのバージョンが、計算デバイスオブジェクト１２およびリソースビューオブジェクト１４のセマンティック状態に依存する）、ｆｏｒｅａｃｈを、ＣｏｎｃＲＴ（または他のカスタム）ベースのデータ並列呼び出しサイトの実装用に作成される「ｒａｎｇｅ」型に対して特殊化してよい。
【００３５】
組み込みの「ｒａｎｇｅ」ベースのｆｏｒｅａｃｈおよびｔｒａｎｓｆｏｒｍの実装は、「ｒａｎｇｅ」トレイトをアクティブにしてどの実装パターンであるかを決定する。カスタムデータ並列呼び出しサイトの実装を導入するために、新しい「ｒａｎｇｅ」型を多重定義することができる。従って、データ並列関数４４とタスクベースの並列プログラミングランタイムライブラリ２０との統合（例えば、ランタイムライブラリ２０（３）とタスク並列関数５２との統合）は、既存の言語機構を使用してユーザ拡張性を用いて達成することができる。
【００３６】
図５は、拡張可能なデータ並列セマンティクスを用いてデータ並列コード１０をコンパイルかつ実行するべく構成されるコンピュータシステム１００の一実施形態を例示するブロック図である。
【００３７】
コンピュータシステム１００は、１つまたは複数のプロセッサパッケージ（図示せず）内に収容される１つまたは複数の処理要素（ＰＥ）１０２を有するホスト１０１、およびメモリシステム１０４を含む。コンピュータシステム１００はまた、ゼロまたはそれ以上の入力／出力装置１０６、ゼロまたはそれ以上の表示装置１０８、ゼロまたはそれ以上の周辺装置１１０、および、ゼロまたはそれ以上のネットワーク装置１１２を含む。コンピュータシステム１００は、１つまたは複数のＤＰ最適型または他の型の計算ノード１２１を有する計算エンジン１２０をさらに含み、各ＤＰ最適計算ノード１２１は、１つまたは複数の処理要素（ＰＥ）１２２およびＤＰ実行ファイル１３８を記憶するメモリ１２４のセットを含む。
【００３８】
ホスト１０１、入力／出力装置１０６、表示装置１０８、周辺装置１１０、ネットワーク装置１１２、および計算エンジン１２０は、任意の最適な型、数、および構成のコントローラ、バス、インターフェース、および／または、他の有線もしくは無線の接続を含む相互接続１１４のセットを使用して通信する。
【００３９】
コンピュータシステム１００は、汎用または専用に構成される任意の適切な処理装置を表す。コンピュータシステム１００の例に含まれるものには、サーバ、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、ＰＤＡ（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ）、携帯電話、および、音声／映像装置がある。コンピュータシステム１００の構成要素（すなわち、ホスト１０１、入力／出力装置１０６、表示装置１０８、周辺装置１１０、ネットワーク装置１１２、相互接続１１４、および計算エンジン１２０）を、共通の筺体（図示せず）または任意の適切な数の別個の筺体（図示せず）内に包含してよい。
【００４０】
処理要素１０２はそれぞれ、メモリシステム１０４内に記憶される命令（すなわち、ソフトウェア）を実行するべく構成される、実行ハードウェアを形成する。各プロセッサパッケージ内の処理要素１０２は、同じまたは異なるアーキテクチャおよび／または命令セットを有することができる。例えば、処理要素１０２には、順次実行要素、スーパースカラ実行要素、およびデータ並列実行要素（例えば、ＧＰＵ実行要素）の任意の組み合わせを含んでよい。各処理要素１０２は、メモリシステム１０４内に記憶される命令にアクセスして実行するべく構成される。命令には、ＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ  ｏｕｔｐｕｔ  ｓｙｓｔｅｍ）またはファームウェア（図示せず）、ＯＳ（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ  ）１３２、コード１０、コンパイラ１３４、ＧＰ実行ファイル１３６、およびＤＰ実行ファイル１３８を含んでよい。各処理要素１０２は、入力／出力装置１０６、表示装置１０８、周辺装置１１０、ネットワーク装置１１２、および／または、計算エンジン１２０と連動して、またはこれらから受け取る情報に応じて、命令を実行することができる。
【００４１】
ホスト１０１は、ＯＳ１３２をブートして実行する。ＯＳ１３２は、処理要素により実行可能な命令を含み、コンピュータシステム１００の構成要素を管理し、プログラムに構成要素へのアクセスおよび使用を可能にする関数のセットを提供する。一実施形態において、ＯＳ１３２は、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムである。他の実施形態において、ＯＳ１３２は、コンピュータシステム１００を用いる使用に適した別のオペレーティングシステムである。
【００４２】
コンピュータシステムが、コンパイラ１３４を実行してコード１０をコンパイルすると、コンパイラ１３４は、１つまたは複数の実行ファイル−例えば、１つまたは複数のＧＰ実行ファイル１３６および１つまたは複数のＤＰ実行ファイル１３８を生成する。他の実施形態において、コンパイラ１３４は、１つまたは複数のＧＰ実行ファイル１３６を生成して、それぞれが１つまたは複数のＤＰ実行ファイル１３８を含むようにしてもよく、または、１つまたは複数のＤＰ実行ファイル１３８を生成して、いずれのＧＰ実行ファイル１３６も生成しなくてもよい。ＧＰ実行ファイル１３６および／またはＤＰ実行ファイル１３８は、データ並列拡張を用いてコンパイラ１３４の呼び出しに応じて生成されて、コード１０の全てまたは選択された部分がコンパイルされる。呼び出しを、例えば、プログラマもしくはコンピュータシステム１００の他のユーザ、コンピュータシステム１００内の他のコード、または、別のコンピュータシステム（図示せず）内の他のコードにより生成してよい。
【００４３】
ＧＰ実行ファイル１３６は、１つまたは複数の汎用の処理要素１０２（例えば、ＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ））上での実行用に意図されるプログラムを表す。ＧＰ実行ファイル１３６には、１つまたは複数の汎用の処理要素１０２の命令セットからの低レベルの命令が含まれる。
【００４４】
ＤＰ実行ファイル１３８は、１つまたは複数のデータ並列（ＤＰ）最適計算ノード１２１上での実行用に意図され最適化されるデータ並列のプログラムまたはアルゴリズム（例えば、シェーダ）を表す。一実施形態において、ＤＰ実行ファイル１３８には、ＤＰバイトコード、または、ＤＰ最適計算ノード１２１上で実行される前にデバイスドライバ（図示せず）を使用してＤＰ最適計算ノード１２１の命令セットからの低レベルの命令に変換される何らかの他の中間表現（ＩＬ）が含まれる。他の実施形態において、ＤＰ実行ファイル１３８には、コンパイラ１３４によって低レベルの命令が挿入された１つまたは複数のＤＰ最適計算ノード１２１の命令セットからの低レベルの命令が含まれる。従って、ＧＰ実行ファイル１３６は、１つまたは複数の汎用プロセッサ（例えば、ＣＰＵ）により直接実行可能であり、また、ＤＰ実行ファイル１３８は、１つまたは複数のＤＰ最適計算ノード１２１により直接実行可能であるか、または、ＤＰ最適計算ノード１２１の低レベルの命令に変換された後に、１つまたは複数のＤＰ最適計算ノード１２１により実行可能である。
【００４５】
コンピュータシステム１００は、１つまたは複数の処理要素１０２を使用してＧＰ実行ファイル１３６を実行してよく、また、コンピュータシステム１００は、以下追加的に詳細に記載するように１つまたは複数のＰＥ１２２を使用して、ＤＰ実行ファイル１３８を実行してもよい。
【００４６】
メモリシステム１０４には、命令およびデータを記憶するべく構成される、任意の適切な型、数、および構成の揮発性または不揮発性の記憶装置が含まれる。メモリシステム１０４の記憶装置は、ＯＳ１３２、コード１０、コンパイラ１３４、ＧＰ実行ファイル１３６、およびＤＰ実行ファイル１３８を含むコンピュータ実行可能命令（すなわち、ソフトウェア）を記憶する、コンピュータ可読記憶媒体を表す。命令は、コンピュータシステム１００により実行可能であり、本明細書に記載されるようなＯＳ１３２、コード１０、コンパイラ１３４、ＧＰ実行ファイル１３６、およびＤＰ実行ファイル１３８の関数および方法を実施する。メモリシステム１０４は、処理要素１０２、入力／出力装置１０６、表示装置１０８、周辺装置１１０、ネットワーク装置１１２、および計算エンジン１２０から受け取った命令およびデータを記憶する。メモリシステム１０４は、記憶した命令およびデータを、処理要素１０２、入力／出力装置１０６、表示装置１０８、周辺装置１１０、ネットワーク装置１１２、および計算エンジン１２０に提供する。メモリシステム１０４内の記憶装置の例に含まれるものには、ハードディスクドライブ、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）、フラッシュメモリドライブおよびカード、ならびに、ＣＤおよびＤＶＤなどの磁気ディスクおよび光ディスクがある。
【００４７】
入力／出力装置１０６には、命令またはデータをユーザからコンピュータシステム１００に入力し、かつ、命令またはデータをコンピュータシステム１００からユーザに出力するべく構成される任意の適切な型、数、および構成の入力／出力装置が含まれる。入力／出力装置１０６の例に含まれるものには、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイアル、ノブ、およびスイッチがある。
【００４８】
表示装置１０８には、テキストおよび／またはグラフィックの情報をコンピュータシステム１００のユーザに出力するべく構成される任意の適切な型、数、および構成の表示装置が含まれる。表示装置１０８の例に含まれるものには、モニタ、表示スクリーン、およびプロジェクタがある。
【００４９】
周辺装置１１０には、コンピュータシステム１００内の１つまたは複数の他の構成要素と共に動作して、汎用または専用の処理機能を実施するべく構成される任意の適切な型、数、および構成の周辺装置が含まれる。
【００５０】
ネットワーク装置１１２には、コンピュータシステム１００が１つまたは複数のネットワーク（図示せず）に渡って通信することを可能にするべく構成される任意の適切な型、数、および構成のネットワーク装置が含まれる。ネットワーク装置１１２は、任意の適切なネットワーキングプロトコルおよび／または構成に従って動作して、情報が、コンピュータシステム１００によりネットワークに送信され、または、コンピュータシステム１００によりネットワークから受信されることを可能にすることができる。
【００５１】
計算エンジン１２０は、ＤＰ実行ファイル１３８を実行するべく構成される。計算エンジン１２０には、１つまたは複数の計算ノード１２１が含まれる。各計算ノード１２１は、メモリ階層を共有する計算リソースの集合体である。計算ノード１２１は、１つまたは複数のＰＥ１２２およびＤＰ実行ファイル１３８を記憶するメモリ１２４のセットを含む。ＰＥ１２２は、ＤＰ実行ファイル１３８を実行し、ＤＰ実行ファイル１３８により生成される結果をメモリ１２４内に記憶する。
【００５２】
上記で触れたように、データ並列計算（すなわち、ＤＰプログラムまたはアルゴリズムの実行）用に最適化されるハードウェアアーキテクチャを伴う１つまたは複数の計算リソースを有する計算ノード１２１を、ＤＰ最適計算ノード１２１と称する。ＤＰ最適計算ノード１２１の例に含まれるものには、ＰＥ１２２のセットが１つまたは複数のＧＰＵを含むノード１２１、および、ＰＥ１２２のセットが汎用プロセッサパッケージ内にＳＩＭＤユニットのセットを含むノード１２１がある。データ並列計算用に最適化されるハードウェアアーキテクチャを伴う計算リソースを何ら持たない計算ノード１２１（例えば、汎用の処理要素１０２のみを有するプロセッサパッケージ）を、非ＤＰ最適計算ノード１２１と称する。各計算ノード１２１において、メモリ１２４は、メモリシステム１０４から分離されてよく（例えば、ＧＰＵが使用するＧＰＵメモリ）、または、メモリシステム１０４の一部であってもよい（例えば、汎用プロセッサパッケージにおいてＳＩＭＤユニットが使用するメモリ）。
【００５３】
ホスト１０１は、相互接続１１４を使用して、ＤＰ実行ファイル１３８を実行用に計算ノード１２１に提供するべく、かつ、ＤＰ実行ファイル１３８によって生成された結果を受け取るべく構成される、ホスト計算ノードを形成する。ホスト計算ノードには、メモリ階層（すなわち、メモリシステム１０４）を共有する汎用計算リソース（すなわち、汎用の処理要素１０２）の集合体を含む。ホスト計算ノードを、ＳＭＰ（ｓｙｍｍｅｔｒｉｃ  ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ  ａｒｃｈｉｔｅｃｕｔｒｅ）を用いて構成してよく、また、例えば、ＮＵＭＡ（ｎｏｎ−ｕｎｉｆｏｒｍ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）アーキテクチャを使用してメモリシステム１０４のメモリの局所性を最大化するべく構成してもよい。
【００５４】
ホスト計算ノードのＯＳ１３２は、ＤＰ呼び出しサイトを実行して、ＤＰ実行ファイル１３８がＤＰ最適計算ノードまたは非ＤＰ最適計算ノード１２１により実行されるようにするべく構成される。メモリ１２４がメモリシステム１０４から分離される実施形態において、ホスト計算ノードは、ＤＰ実行ファイル１３８および１つまたは複数のインデックス付け可能な型１４がメモリシステム１０４からメモリ１２４にコピーされるようにする。メモリシステム１０４がメモリ１２４を含む実施形態において、ホスト計算ノードは、ＤＰ実行ファイル１３８および／または１つまたは複数のインデックス付け可能な型１４のコピーをメモリ１２４としてのメモリシステム１０４内に指定してよく、および／または、ＤＰ実行ファイル１３８および／または１つまたは複数のインデックス付け可能な型１４を、メモリシステム１０４の一部から、メモリ１２４を形成するメモリシステム１０４の別の部分にコピーしてもよい。計算ノード１２１とホスト計算ノードとの間のコピー処理は、非同期と指定されない場合は同期点であってよい。
【００５５】
ホスト計算ノードおよび各計算ノード１２１は、お互いに独立してコードを同時に実行することができる。ホスト計算ノードおよび各計算ノード１２１は、同期点において相互作用して、ノード計算を調和させることができる。
【００５６】
一実施形態において、計算エンジン１２０は、１つまたは複数のＧＰＵ（ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）にＰＥ１２２およびメモリシステム１０４から分離されるメモリ１２４が含まれるグラフィックカードを表す。本実施形態において、グラフィックカードのドライバ（図示せず）は、バイトコードまたはＤＰ実行ファイル１３８の何らかの他の中間表現（ＩＬ）を、ＧＰＵのＰＥ１２２による実行用のＧＰＵの命令セットに変換してよい。
【００５７】
別の実施形態において、計算エンジン１２０は、１つまたは複数の汎用の処理要素１０２を有するプロセッサパッケージ内に含まれる１つまたは複数のＧＰＵ（すなわち、ＰＥ１２２）と、メモリ１２４を含むメモリシステム１０４の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム１００上に提供して、バイトコードまたはＤＰ実行ファイル１３８の何らかの他の中間表現（ＩＬ）を、プロセッサパッケージ内のＧＰＵの命令セットに変換してよい。
【００５８】
さらなる実施形態において、計算エンジン１２０は、処理要素１０２を含む１つまたは複数のプロセッサパッケージ内の１つまたは複数のＳＩＭＤユニットと、メモリ１２４を含むメモリシステム１０４の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム１００上に提供して、バイトコードまたはＤＰ実行ファイル１３８の何らかの他の中間表現（ＩＬ）を、プロセッサパッケージ内のＳＩＭＤユニットの命令セットに変換してよい。
【００５９】
さらに別の実施形態において、計算エンジン１２０は、処理要素１０２を含む１つまたは複数のプロセッサパッケージ内の１つまたは複数のスカラまたはベクトル処理パイプランと、メモリ１２４を含むメモリシステム１０４の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム１００上に提供して、バイトコードまたはＤＰ実行ファイル１３８の何らかの他の中間表現（ＩＬ）を、プロセッサパッケージ内のスカラ処理パイプラインの命令セットに変換してよい。
【００６０】
本明細書において特定の実施形態を例示し記載したが、種々の代替のおよび／または等価の実装が、本発明の範囲から逸脱することなく、示し記載した特定の実施形態と入れ替えられることは、当業者には理解されるであろう。本出願は、本明細書において検討した特定の実施形態のいずれの適用または変形も含むことを意図している。従って、本発明が特許請求の範囲およびその等価物によってのみ制限されることを意図している。
【図１】
0005957006.tif 000002
【図２】
0005957006.tif 000003
【図３Ａ】
0005957006.tif 000004
【図３Ｂ】
0005957006.tif 000005
【図３Ｃ】
0005957006.tif 000006
【図４Ａ】
0005957006.tif 000007
【図４Ｂ】
0005957006.tif 000008
【図５】
0005957006.tif 000009