"コンピュータ実行可能命令を記憶するコンピュータ可読記憶媒体であって、前記命令は、コンピュータシステムにより実行されると、コンピュータシステムに、データ並列ソースコードに応じて、計算デバイスオブジェクトおよびリソースビューオブジェクトを生成するステップであって、前記計算デバイスオブジェクトがデバイスレベルを指定し、前記リソースビューオブジェクトがリソースレベルを指定するステップと、前記データ並列ソースコードのデータ並列アルゴリズムを、前記データ並列アルゴリズムが前記リソースレベルと互換性があることを示す前記データ並列アルゴリズムのアノテーションに応じて、前記デバイスレベルに対応する計算ノードを使用して実行するステップとを具えた方法を実行させることを特徴とするコンピュータ可読記憶媒体。前記アノテーションは、前記リソースレベルが前記アノテーションより少ない前記データ並列ソースコードのプログラミング言語のセマンティック制限を有することに応じて、前記データ並列アルゴリズムが前記リソースレベルと互換性があることを示すことを特徴とする請求項1記載のコンピュータ可読記憶媒体。前記リソースビューオブジェクトにより指定される前記リソースレベルはネイティブであることを特徴とする請求項2記載のコンピュータ可読記憶媒体。前記デバイスレベルは前記計算デバイスオブジェクトにおいてカスタムであることを検出するステップと、前記デバイスレベルがカスタムであることを検出するステップに応じて、カスタム計算デバイス関数またはカスタムデータ並列関数の一方を使用するステップとをさらに具えたことを特徴とする請求項1記載のコンピュータ可読記憶媒体。呼び出しサイトアブストラクション関数を使用して前記計算ノードについて呼び出しサイトの実装を生成するステップをさらに具えたことを特徴とする請求項1記載のコンピュータ可読記憶媒体。前記データ並列ソースコードは、データ並列拡張を有するプログラミング言語で記述されることを特徴とする請求項1記載のコンピュータ可読記憶媒体。前記データ並列ソースコードは、高レベルのデータ並列プログラミング言語で記述されることを特徴とする請求項1記載のコンピュータ可読記憶媒体。1つまたは複数のデータ並列計算ノードは、少なくとも1つのグラフィックスプロセッシングユニットを含むことを特徴とする請求項1記載のコンピュータ可読記憶媒体。前記1つまたは複数のデータ並列計算ノードは、少なくとも1つの汎用プロセッサを含むことを特徴とする請求項1記載のコンピュータ可読記憶媒体。コンピュータシステムにおいてコンパイラにより実行される方法であって、1つまたは複数のデータ並列計算ノード上での実行用に構成されるデータ並列ソースコードのデータ並列アルゴリズム内のアノテーションを識別するステップと、前記データ並列アルゴリズムが前記データ並列ソースコードにより指定されるリソースレベルと互換性があることを示すアノテーションに応じて、前記データ並列ソースコードからデータ並列実行可能コードを生成するステップとを具えたことを特徴とする方法。前記アノテーションは、前記リソースレベルが前記アノテーションより少ない前記データ並列ソースコードのプログラミング言語のセマンティック制限を有することに応じて、前記データ並列アルゴリズムが前記リソースレベルと互換性があることを示すことを特徴とする請求項10記載の方法。前記リソースビューオブジェクトに対応する前記リソースレベルはネイティブであることを特徴とする請求項10記載の方法。カスタムのデバイスレベルの検出に応じて、カスタム計算デバイス関数またはカスタムデータ並列関数の一方を含むデータ並列実行可能コードを生成するステップをさらに具えたことを特徴とする請求項10記載の方法。呼び出しサイトアブストラクション関数を使用して前記1つまたは複数のデータ並列計算ノードについて呼び出しサイトの実装を生成するステップをさらに具えたことを特徴とする請求項10記載の方法。前記データ並列ソースコードは、データ並列拡張を有する高レベルの汎用プログラミング言語および高レベルのデータ並列プログラミング言語の一方で記述されることを特徴とする請求項10記載の方法。データ並列計算ノードは、従来、コンピュータシステム上でプログラム実行時に汎用プロセッサに対するサポートの役割を担ってきた。データ並列アルゴリズム用に最適化されたハードウェアの役割がデータ並列計算ノードの処理能力の増大により高まるのに連れて、データ並列計算ノードをプログラミングするプログラマの能力が向上し、データ並列計算ノードのプログラミングが容易になることが望ましい。しかし、データ並列アルゴリズムは典型的には、汎用プログラミング言語とは異なるセマンティック意味的制限を有するデータ並列言語を用いてプログラミングされる。この概要は、以下の発明を実施するための形態でさらに述べる概念を選択して簡略化した形式で紹介するために提供するものである。この要約は、特許請求の主題の重要な特徴または主要な特徴を特定することを意図しておらず、特許請求の主題の範囲を制限するものとして使用されることも意図していない。高レベルのプログラミング言語により、拡張可能なデータ並列セマンティクスを提供する。ユーザコードは、計算デバイスオブジェクトおよびリソースビューオブジェクトを使用してデータ並列コードを実行するためのハードウェアおよびソフトウェアのリソースを指定する。ユーザコードは、オブジェクトおよびセマンティックメタデータを使用して、新しいおよび/または更新された型の計算ノード、ならびに新しいおよび/または更新された型のランタイムライブラリによる実行を可能にする。拡張可能なデータ並列セマンティクスにより、ユーザコードを新しいおよび/または更新された型の計算ノードおよびランタイムライブラリにより実行することが可能となる。以下の発明を実施するための形態において、添付の図面を参照するが、該図面はその一部を成し、本発明を実践できる特定の実施形態を例として示すものである。この点に関して、方向性を表す用語である上部、底部、表、裏、前、後などを、記載されている図面の向きに関連して使用している。実施形態の構成要素は多数の異なる向きで位置付けることが可能であるため、方向を表す用語は例示目的で使用し、制限のために使用するものではない。他の実施形態を利用してよく、また、構造または論理の変更を本発明の範囲から逸脱することなく加えてよいことは、理解されるべきである。従って、以下の詳細説明は、制限する意味でとらえられるべきではなく、本発明の範囲は、添付の請求項により定義するものである。別段言及しない限り、本明細書に記載する種々の例示の実施形態の特徴をお互いに組み合わせてよいことは、理解されるべきである。図1は、図5に示すコンピュータシステム100などのコンピュータシステムにおける拡張可能なデータ並列セマンティクスを用いたランタイム環境2の一実施形態を例示するブロック図である。ランタイム環境2は、コンピュータシステムにおけるランタイムモードの動作を表すもので、該コンピュータシステムは、1つまたは複数の計算ノード121上でユーザコード10および1つまたは複数のランタイムライブラリ20の組からの命令を実行している図5にも示し、以下でさらに詳細に説明する。コード10には、1つまたは複数の計算ノード121による実行用の1つまたは複数の実行ファイル例えば、図5に示すDP実行ファイル138にコンパイルすることができる高レベルの汎用またはデータ並列のプログラミング言語からの一連の命令が含まれる。コード10は、1つまたは複数のランタイムライブラリ20と連動して実行され、この場合ランタイムライブラリ20には、データ並列関数を提供するデータ並列APIアプリケーションプログラミングインターフェースが含まれる。コード10は、ランタイムライブラリ20から計算デバイスオブジェクト12を生成させて、コード10の少なくとも一部を実行するための計算ノード121を指定し、また、ランタイムライブラリ20からリソースビューオブジェクト14を生成させて、コード10の実行時に使用されるランタイムライブラリ20を指定する。計算デバイスオブジェクト12は、デバイスレベルすなわち、計算ノード121の1つの型を指定するハードウェアのアブストラクションを形成する。リソースビューオブジェクト14は、計算デバイスオブジェクト12が指定するハードウェアをどのように使用するかについて記述するリソースレベルを指定する。リソースビューオブジェクト14は、例えば、異なるDirectXの実装例えば、DirectX11、DirectX11.1、DirectX12、およびDirectX13またはSSE/AVXの実装を、ネイティブコード生成、またはWARPDirectXのソフトウェアエミュレータを用いて記述することができる。リソースビューオブジェクト14にはまた、メモリ管理およびカーネル実行のサービスを含んでよい。計算デバイスオブジェクト12およびリソースビューオブジェクト14を、関連するセマンティックメタデータと共に使用することにより、コード10の下層のプログラミング言語のセマンティックな変更を扱う拡張可能なデータ並列セマンティクスを提供する。拡張可能なデータ並列セマンティクスにより、コード10を、新しいおよび/または更新された型の計算ノード121、ならびに新しいおよび/または更新された型のランタイムライブラリ20を用いて実行することが可能となる。その結果、特定の型の計算ノード121を用いた使用向けに設計されていたコード10の構造を、新しいおよび/または更新された型の計算ノード121により実行することができる。一実施形態において、コード10には、1つまたは複数のモジュールのセット内に記憶させるプログラムを形成する、データ並列拡張を有する高レベルの汎用プログラミング言語以後、GP言語からの一連の命令が含まれる。GP言語により、プログラムを異なる部分すなわち、モジュールに記述することが可能となり、そのため、各モジュールをコンピュータシステムがアクセス可能な別々のファイルまたは場所に記憶することができる。GP言語により、1つまたは複数の汎用プロセッサおよび1つまたは複数の専用のDP最適計算ノードを含むコンピュータ環境をプログラミングするための単一の言語を提供する。DP最適計算ノードは典型的には、GPUgraphicprocessingunitまたは汎用プロセッサのSIMDユニットであるが、いくつかのコンピュータ環境においては、汎用プロセッサのスカラまたはベクトルの実行ユニット、FPGAfieldprogrammablegatearray、または他の適切なデバイスを含んでもよい。GP言語を使用して、プログラマは、汎用プロセッサおよびDPソースコードの両方を、それぞれ汎用プロセッサおよびDP計算ノードによる実行用にコード10に含めることができ、また、汎用プロセッサおよびDPソースコードの実行を調和させることができる。コード10は、本実施形態においては、アプリケーション、ライブラリ関数、またはオペレーティングシステムサービスなどの任意の適切な型のコードを表してよい。GP言語は、データ並列の特徴を含むべく、CまたはCなどの広く適応した高レベルの汎用プログラミング言語を拡張することにより形成してよい。DPの特徴が現れる汎用言語の他の例には、Java登録商標、PHP、VisualBasic、Perl、Python商標、C、Ruby、Delphi、Fortran、VB、F、OCaml、Haskell、Erlang、NESL、Chapel、およびJavaScript登録商標が含まれる。GP言語の実装には、プログラムの異なる部分を異なるモジュールに含めることが可能な豊富なリンク機能を含んでよい。データ並列の特徴により、DP最適計算ノードの専用アーキテクチャの利点を生かしてデータ並列操作を汎用プロセッサすなわち、非DP最適計算ノードで行うよりも速くまたはより効率的に実行することを可能にするプログラミングツールを提供する。GP言語はまた、プログラマが汎用プロセッサおよびDP最適計算ノードの両方についてプログラミングすることを可能にする別の適切な高レベルの汎用プログラミング言語であってよい。別の実施形態において、コード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、PGIGPGPUAccelerator、CAPSGPGPUAccelerator、Brook、CAL、APL、Fortran90後継を含む、DataParallelC、DAPPLE、またはAPLである。コード10は、本実施形態においては、アプリケーション、ライブラリ関数、またはオペレーティングシステムサービスなどの任意の適切な型のDPソースコードを表してよい。コード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言語で記述される実施形態においては省略してもよい。アノテーション29は、ベクトル関数についてリソースレベルのセマンティクスを指定する。アノテーション29により、計算デバイスオブジェクト12およびリソースビューオブジェクト14において反映されるように、コンパイラがベクトル関数のセマンティック状態がセマンティクスおよび対象の計算ノード121の他の特性との互換性を確実に持つことが可能となる。セマンティック制限が時と共に緩和されるにつれて、より新しい計算ノード121ほどセマンティック制限が少なくなり、高レベルのセマンティック制限を示すより古いアノテーション29を有するベクトル関数を実行することができる。ランタイムライブラリ20には、タスク並列および/またはデータ並列DPの実行能力を提供する任意の適切な型および/または数のライブラリが含まれる。例えば、ランタイムライブラリ20には、一実施形態において、DirectXランタイムライブラリ、および、並列パターンライブラリPPLを有する同時実行ランタイムライブラリを含んでよい。ランタイムライブラリ20は、APIappplicationprogramminginterface、または、タスク並列および/またはデータ並列の能力と共に関数を与える他の適切なプログラミング構造を提供する。図3Aから3Cは、それぞれ、図1に示すランタイム環境2において使用するためのランタイムライブラリ20の実施形態20lから203を例示する。図3Aの実施形態において、ランタイムライブラリ201には、計算デバイス関数42、リソースビュー関数43、データ並列DP関数44、および、呼び出しサイトアブストラクション関数46が含まれる。計算デバイス関数42は、ユーザコード10が供給するパラメータに従って計算デバイスオブジェクト12図1に示すを作成する。特に、ユーザコード10は、計算デバイスオブジェクト12を作成するために、少なくともコード10の一部を実行するための計算ノードの型を指定するデバイスレベル例えば、device_levelを渡す。計算デバイス関数42は、一実施形態において、図4Aのデータ構造に示されるデバイスレベルすなわち、none、custom、GPU、WARP、REF、NATIVE、SSE、AVX、およびLRBを認識する。従って、ユーザコード10は、本実施形態においてこれらのデバイスレベルの内の1つを渡すことができる。リソースビュー関数43は、ユーザコード10が供給するパラメータに従って、リソースビューオブジェクト14図1に示すを作成する。特に、ユーザコード10は、計算デバイスオブジェクト12が指定するハードウェアをどのように使用するかについて記述するリソースレベル例えば、resource_levelを渡す。リソースビュー関数43は、一実施形態において、図4Bのデータ構造に示されるリソースレベルすなわち、none、NATIVE、CUSTOM、DX11、DX11.1、およびDX12を認識する。従って、ユーザコード10は、本実施形態において、これらのリソースレベルの内の1つを渡すことができる。ユーザコード10のデバイスレベルおよびリソースレベルは、ユーザコード10が満たす必要があるセマンティック制限のレベルを示す。これらのセマンティック制限は、新しいおよび更新された計算ノード121およびランタイムライブラリ20がユーザコード10の実行に使用されるため、時と共に減少すると推測される。従って、計算ノード121およびランタイムライブラリ20が、ユーザコード10のデバイスレベルおよびリソースレベルと同じまたはより少ないセマンティック制限を有する場合に、計算ノード121およびランタイムライブラリ20は、ユーザコード10を実行することが可能である。一実施形態において、ユーザコード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より少ないセマンティック制限しか含まれていないためである。別の実施形態において、ユーザコード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シミュレータ上で実行してよい。さらなる一例において、ユーザコード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シミュレータ上で実行してよい。上記の例では、DirectXをサポートするランタイムライブラリ20が使用される。他の例では、他の実装を、デバイスレベルとしてハードウェア型を示し、リソースレベルとしてネイティブ型を示すことによりサポートすることができる。例えば、ユーザコード10は、計算デバイスオブジェクト12を、SSEのデバイスレベルを用いて作成してIntelおよびAMDのCPU上でSSEベクトルユニットを有効にすることができ、AVXのデバイスレベルを用いて作成してIntelのSandyBridgeCPUを有効にすることができ、または、LRBのデバイスレベルを用いて作成してIntelのKnightsFerryの専用データ並列最適化CPUを有効にすることができる。これらの例を用いると、ユーザコード10は、リソースビューオブジェクト14を、ネイティブレベルすなわち、NATIVEを用いて作成することができ、ユーザコード10のベクトル関数が、データ並列セマンティクスに関して制限されず、下層にある汎用言語例えば、Cのセマンティクスと一致する。図3Aのランタイムライブラリ201に戻ると、DP関数44は、データ並列関数を提供して、GPU、またはWARPもしくはREFのソフトウェアシミュレータを有する計算ノードなどの計算ノード121の選択された型について、forall、scan、reduce、およびsortなどの呼び出しサイトを実装させる。他の型の計算ノード121例えば、新しいおよび/または更新された型を用いて、ランタイムライブラリ201は、呼び出しサイトを抽象化する呼び出しサイトアブストラクション関数46を提供する。呼び出しサイトアブストラクション関数46を使用して、新しいおよび/または更新された型の計算ノード121について、呼び出しサイト機能を実装することができる。図3Bに示すように、ユーザはまた、カスタム計算デバイス関数48、カスタムリソースビュー関数、および/またはカスタムDP関数50を含む1つまたは複数のランタイムライブラリ202を提供してもよい。カスタム計算デバイス関数48を、抽象基底クラスとして実装してよく、また、ユーザがユーザコード10を実行するための新しいおよび/または更新された型の計算ノード121についてセマンティックメタデータを提供することが可能となる。カスタムリソースビュー関数49もまた、抽象基底クラスとして実装してよく、ユーザがユーザコード10を実行するためにハードウェアをどのように使用するかについて記述する新しいおよび/または更新されたリソースレベルを提供することが可能となる。カスタムDP関数50により、ユーザが新しいおよび/または更新された型の計算ノード121上で実行できるforall、scan、reduce、およびsortなどのカスタム呼び出しサイトの実装を提供することが可能となる。一例において、ランタイムライブラリ202を使用するために、ユーザコード10は、CUSTOMのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、NATIVEのリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10はまた、カスタム計算デバイス関数48を呼び出して、新しいおよび/または更新された型の計算ノード121についてセマンティックメタデータを提供する。呼び出しサイトに関しては、ユーザコード10は、ランタイムライブラリ201の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。別の例において、ランタイムライブラリ202を使用するために、ユーザコード10は、NATIVEのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、CUSTOMのリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10はまた、カスタムリソースビュー関数49を呼び出して、ユーザコード10を実行するための計算デバイスオブジェクト12により指定される計算ノード121をどのように使用するかについて記述する新しいおよび/または更新されたリソースレベルを提供する。例えば、リソースレベルは、カスタムバージョンのIntel登録商標ThreadBuildingBlocksTBBであってよい。呼び出しサイトについては、ユーザコード10は、ランタイムライブラリ201の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。さらなる例において、ランタイムライブラリ202を使用するために、ユーザコード10は、CUSTOMのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、CUSTOMのリソースレベルを用いてリソースビューオブジェクト14を作成する。ユーザコード10は、カスタム計算デバイス関数48を呼び出して、新しいおよび/または更新された型の計算ノード121についてセマンティックメタデータを提供する。ユーザコード10はまた、カスタムリソースビュー関数49を呼び出して、ユーザコード10を実行するための計算デバイスオブジェクト12により指定される計算ノード121をどのように使用するかについて記述する新しいおよび/または更新されたリソースレベルを提供する。呼び出しサイトについては、ユーザコード10は、ランタイムライブラリ201の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。ベクトル関数をホストすなわち、非ベクトルCPU上で実行するために、ユーザコード10は、NATIVEのデバイスレベルを用いて計算デバイスオブジェクト12を作成し、NATIVEのリソースレベルを用いてリソースビューオブジェクト14を作成する。NATIVEのデバイスレベルは、ユーザコード10の少なくとも一部をホスト上で実行してよいことを示す。NATIVEのリソースレベルにより、ユーザコード10のベクトル関数が、データ並列セマンティクスに関して制限されず、下層にある汎用言語例えば、Cのセマンティクスと一致することが可能となる。ホストの実行を用いて、ユーザコード10は、ランタイムライブラリ201の呼び出しサイトアブストラクション関数46を使用して、計算ノード121について適切な呼び出しサイト機能を実装してもよいし、呼び出しサイトを実装するカスタムDP関数50を提供してもよい。データ並列セマンティック制限が低減または除去された拡張可能なデータ並列セマンティクスを提供することによりタスクベースの並列プログラミングランタイムライブラリ20との統合またはヘテロジニアスプログラミングを達成することができる。特に、図3Cに示す、タスク並列関数52を有するランタイムライブラリ203を、DP関数44図3Aと連動して使用してよい。タスク並列関数52が並列バターンライブラリPPLを有する同時実行ランタイムライブラリConcRTを表す一例において、タスク並列関数52を使用するforallの実装を、仮想プロセッサを使用するホスト上での実行用に生成してよい。同様に、PPLおよびCの標準テンプレートライブラリSTLからのforeachおよびtransformの実装には、直線的なイテレータ反復子の代わりにrangebased範囲ベースの記号を含んでよい。一実施形態において、範囲パターンのオプションは以下の通り。エニュメレータ基本的に、標準的なSTLのイテレータパターンであって前方、双方向、等の変形を有する再帰的二分割タスク並列チャンキングタスク並列ランダムアクセスタスク並列またはデータ並列foreachおよびtransformの実装により、これらの範囲パターンを使用する範囲トレイトまたはカテゴリをアクティブにする。データ並列形式のforeachにおいて、rangeは、forallにおける計算ドメインの類似物である。単純な実装では、データ並列サブトレイトでランダムアクセスrangeを用いて示される場合、foreachの内部にforallを呼び出すことができる。foreachまたはtransformにおけるカーネル引数の数の制限を、ラムダ閉鎖を使用することにより緩和する。ユーザが、forall機能forallと呼ばれない場合でものConcRT実装の使用を望む場合、foreachが呼び出されると、ConcRTのforeachが実装されていないと仮定してあるいは、自明に焼かれるかもしれない-呼び出されたforallのバージョンが、計算デバイスオブジェクト12およびリソースビューオブジェクト14のセマンティック状態に依存する、foreachを、ConcRTまたは他のカスタムベースのデータ並列呼び出しサイトの実装用に作成されるrange型に対して特殊化してよい。組み込みのrangeベースのforeachおよびtransformの実装は、rangeトレイトをアクティブにしてどの実装パターンであるかを決定する。カスタムデータ並列呼び出しサイトの実装を導入するために、新しいrange型を多重定義することができる。従って、データ並列関数44とタスクベースの並列プログラミングランタイムライブラリ20との統合例えば、ランタイムライブラリ203とタスク並列関数52との統合は、既存の言語機構を使用してユーザ拡張性を用いて達成することができる。図5は、拡張可能なデータ並列セマンティクスを用いてデータ並列コード10をコンパイルかつ実行するべく構成されるコンピュータシステム100の一実施形態を例示するブロック図である。コンピュータシステム100は、1つまたは複数のプロセッサパッケージ図示せず内に収容される1つまたは複数の処理要素PE102を有するホスト101、およびメモリシステム104を含む。コンピュータシステム100はまた、ゼロまたはそれ以上の入力/出力装置106、ゼロまたはそれ以上の表示装置108、ゼロまたはそれ以上の周辺装置110、および、ゼロまたはそれ以上のネットワーク装置112を含む。コンピュータシステム100は、1つまたは複数のDP最適型または他の型の計算ノード121を有する計算エンジン120をさらに含み、各DP最適計算ノード121は、1つまたは複数の処理要素PE122およびDP実行ファイル138を記憶するメモリ124のセットを含む。ホスト101、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、および計算エンジン120は、任意の最適な型、数、および構成のコントローラ、バス、インターフェース、および/または、他の有線もしくは無線の接続を含む相互接続114のセットを使用して通信する。コンピュータシステム100は、汎用または専用に構成される任意の適切な処理装置を表す。コンピュータシステム100の例に含まれるものには、サーバ、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、PDApersonaldigitalassistant、携帯電話、および、音声/映像装置がある。コンピュータシステム100の構成要素すなわち、ホスト101、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、相互接続114、および計算エンジン120を、共通の筺体図示せずまたは任意の適切な数の別個の筺体図示せず内に包含してよい。処理要素102はそれぞれ、メモリシステム104内に記憶される命令すなわち、ソフトウェアを実行するべく構成される、実行ハードウェアを形成する。各プロセッサパッケージ内の処理要素102は、同じまたは異なるアーキテクチャおよび/または命令セットを有することができる。例えば、処理要素102には、順次実行要素、スーパースカラ実行要素、およびデータ並列実行要素例えば、GPU実行要素の任意の組み合わせを含んでよい。各処理要素102は、メモリシステム104内に記憶される命令にアクセスして実行するべく構成される。命令には、BIOSbasicinputoutputsystemまたはファームウェア図示せず、OSoperatingsystem132、コード10、コンパイラ134、GP実行ファイル136、およびDP実行ファイル138を含んでよい。各処理要素102は、入力/出力装置106、表示装置108、周辺装置110、ネットワーク装置112、および/または、計算エンジン120と連動して、またはこれらから受け取る情報に応じて、命令を実行することができる。ホスト101は、OS132をブートして実行する。OS132は、処理要素により実行可能な命令を含み、コンピュータシステム100の構成要素を管理し、プログラムに構成要素へのアクセスおよび使用を可能にする関数のセットを提供する。一実施形態において、OS132は、Windows登録商標オペレーティングシステムである。他の実施形態において、OS132は、コンピュータシステム100を用いる使用に適した別のオペレーティングシステムである。コンピュータシステムが、コンパイラ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内の他のコード、または、別のコンピュータシステム図示せず内の他のコードにより生成してよい。GP実行ファイル136は、1つまたは複数の汎用の処理要素102例えば、CPUcentralprocessingunit上での実行用に意図されるプログラムを表す。GP実行ファイル136には、1つまたは複数の汎用の処理要素102の命令セットからの低レベルの命令が含まれる。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により実行可能である。コンピュータシステム100は、1つまたは複数の処理要素102を使用してGP実行ファイル136を実行してよく、また、コンピュータシステム100は、以下追加的に詳細に記載するように1つまたは複数のPE122を使用して、DP実行ファイル138を実行してもよい。メモリシステム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内の記憶装置の例に含まれるものには、ハードディスクドライブ、RAMrandomaccessmemory、ROMreadonlymemory、フラッシュメモリドライブおよびカード、ならびに、CDおよびDVDなどの磁気ディスクおよび光ディスクがある。入力/出力装置106には、命令またはデータをユーザからコンピュータシステム100に入力し、かつ、命令またはデータをコンピュータシステム100からユーザに出力するべく構成される任意の適切な型、数、および構成の入力/出力装置が含まれる。入力/出力装置106の例に含まれるものには、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイアル、ノブ、およびスイッチがある。表示装置108には、テキストおよび/またはグラフィックの情報をコンピュータシステム100のユーザに出力するべく構成される任意の適切な型、数、および構成の表示装置が含まれる。表示装置108の例に含まれるものには、モニタ、表示スクリーン、およびプロジェクタがある。周辺装置110には、コンピュータシステム100内の1つまたは複数の他の構成要素と共に動作して、汎用または専用の処理機能を実施するべく構成される任意の適切な型、数、および構成の周辺装置が含まれる。ネットワーク装置112には、コンピュータシステム100が1つまたは複数のネットワーク図示せずに渡って通信することを可能にするべく構成される任意の適切な型、数、および構成のネットワーク装置が含まれる。ネットワーク装置112は、任意の適切なネットワーキングプロトコルおよび/または構成に従って動作して、情報が、コンピュータシステム100によりネットワークに送信され、または、コンピュータシステム100によりネットワークから受信されることを可能にすることができる。計算エンジン120は、DP実行ファイル138を実行するべく構成される。計算エンジン120には、1つまたは複数の計算ノード121が含まれる。各計算ノード121は、メモリ階層を共有する計算リソースの集合体である。計算ノード121は、1つまたは複数のPE122およびDP実行ファイル138を記憶するメモリ124のセットを含む。PE122は、DP実行ファイル138を実行し、DP実行ファイル138により生成される結果をメモリ124内に記憶する。上記で触れたように、データ並列計算すなわち、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ユニットが使用するメモリ。ホスト101は、相互接続114を使用して、DP実行ファイル138を実行用に計算ノード121に提供するべく、かつ、DP実行ファイル138によって生成された結果を受け取るべく構成される、ホスト計算ノードを形成する。ホスト計算ノードには、メモリ階層すなわち、メモリシステム104を共有する汎用計算リソースすなわち、汎用の処理要素102の集合体を含む。ホスト計算ノードを、SMPsymmetricmultiprocessingarchitecutreを用いて構成してよく、また、例えば、NUMAnon-uniformmemoryaccessアーキテクチャを使用してメモリシステム104のメモリの局所性を最大化するべく構成してもよい。ホスト計算ノードの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とホスト計算ノードとの間のコピー処理は、非同期と指定されない場合は同期点であってよい。ホスト計算ノードおよび各計算ノード121は、お互いに独立してコードを同時に実行することができる。ホスト計算ノードおよび各計算ノード121は、同期点において相互作用して、ノード計算を調和させることができる。一実施形態において、計算エンジン120は、1つまたは複数のGPUgraphicsprocessingunitにPE122およびメモリシステム104から分離されるメモリ124が含まれるグラフィックカードを表す。本実施形態において、グラフィックカードのドライバ図示せずは、バイトコードまたはDP実行ファイル138の何らかの他の中間表現ILを、GPUのPE122による実行用のGPUの命令セットに変換してよい。別の実施形態において、計算エンジン120は、1つまたは複数の汎用の処理要素102を有するプロセッサパッケージ内に含まれる1つまたは複数のGPUすなわち、PE122と、メモリ124を含むメモリシステム104の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム100上に提供して、バイトコードまたはDP実行ファイル138の何らかの他の中間表現ILを、プロセッサパッケージ内のGPUの命令セットに変換してよい。さらなる実施形態において、計算エンジン120は、処理要素102を含む1つまたは複数のプロセッサパッケージ内の1つまたは複数のSIMDユニットと、メモリ124を含むメモリシステム104の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム100上に提供して、バイトコードまたはDP実行ファイル138の何らかの他の中間表現ILを、プロセッサパッケージ内のSIMDユニットの命令セットに変換してよい。さらに別の実施形態において、計算エンジン120は、処理要素102を含む1つまたは複数のプロセッサパッケージ内の1つまたは複数のスカラまたはベクトル処理パイプランと、メモリ124を含むメモリシステム104の一部との組み合わせから形成される。本実施形態において、追加のソフトウェアをコンピュータシステム100上に提供して、バイトコードまたはDP実行ファイル138の何らかの他の中間表現ILを、プロセッサパッケージ内のスカラ処理パイプラインの命令セットに変換してよい。本明細書において特定の実施形態を例示し記載したが、種々の代替のおよび/または等価の実装が、本発明の範囲から逸脱することなく、示し記載した特定の実施形態と入れ替えられることは、当業者には理解されるであろう。本出願は、本明細書において検討した特定の実施形態のいずれの適用または変形も含むことを意図している。従って、本発明が特許請求の範囲およびその等価物によってのみ制限されることを意図している。"