"システムコールの通信を最適化する方法であって、ウェーブフロント内のワークアイテムごとのシステムコールを記憶するステップと、前記記憶されたシステムコールを、実行対象としてプロセッサに送信するステップと、前記送信に応じて、前記ウェーブフロント内の各ワークアイテムについての結果を受信するステップと、を含む、方法。前記記憶するステップは、前記システムコールを、CPUが認識することが可能な高優先度キュー内のSIMDベクトルに記憶するステップを含む、請求項1の方法。各ワークアイテムは、同一のシステムコールを、前記SIMDベクトルに記憶する、請求項2の方法。各記憶されたシステムコールは、関数セレクタと、引数リストと、前記結果用のメモリ空間とを含む、請求項3の方法。前記SIMDベクトルは、複数のウェーブフロントからのシステムコールを含む、請求項2の方法。システムコールの通信を最適化する方法であって、ウェーブフロント内の各ワークアイテムからシステムコールを受信するステップと、各システムコールを実行するステップと、各システムコールの結果を、前記ウェーブフロント内の各ワークアイテムに送信するステップと、を含む、方法。前記受信するステップは、グラフィックス処理デバイスが認識することが可能な高優先度キュー内のSIMDベクトルを受信するステップを含む、請求項6に記載の方法。システムコールの通信を最適化するためのシステムであって、ウェーブフロント内のワークアイテムごとのシステムコールを記憶するように構成されたメモリと、CPUとを含み、前記CPUは、各システムコールを実行することと、各システムコールの結果を、前記ウェーブフロント内の各ワークアイテムに送信することと、を行うように構成されている、システム。前記メモリは、SIMDベクトルを記憶するように構成された高優先度キューであり、前記高優先度キューは、CPUにとって認識可能である、請求項8に記載のシステム。各ワークアイテムは、同一のシステムコールを、前記SIMDベクトルに記憶する、請求項9に記載のシステム。各記憶されたシステムコールは、関数セレクタと、引数リストと、前記結果用のメモリ空間とを含む、請求項10に記載のシステム。前記SIMDベクトルは、複数のウェーブフロントからのシステムコールを含む、請求項9に記載のシステム。システムコールの通信を最適化するためのシステムであって、メモリと、CPUとを含み、前記CPUは、システムコールを、ウェーブフロント内の各ワークアイテムから受信することであって、前記システムコールは、前記メモリに記憶されることと、各システムコールを実行することと、各システムコールの結果を、前記ウェーブフロント内の各ワークアイテムに送信することと、を行うように構成されている、システム。前記CPUは、前記グラフィックス処理デバイスが認識することが可能な高優先度キュー内のSIMDベクトルを受信すること、を行うように構成されている、請求項13に記載のシステム。コンピュータで読み出し可能な媒体を含む製品であって、前記媒体には命令が記憶されており、前記命令がコンピューティングデバイスによって実行されると、前記コンピューティングデバイスは、ウェーブフロント内のワークアイテムごとのシステムコールを記憶することと、前記記憶されたシステムコールを、実行対象としてプロセッサに送信することと、前記送信に応じて、前記ウェーブフロント内の各ワークアイテムについての結果を受信することと、を行うことによって、システムコールのための通信を最適化する、製品。前記記憶することは、前記システムコールを、CPUが認識することが可能な高優先度キュー内のSIMDベクトルに記憶することを含む、請求項15に記載の製品。コンピュータで読み出し可能な媒体を含む製品であって、前記媒体には命令が記憶されており、前記命令がコンピューティングデバイスによって実行されると、前記コンピューティングデバイスは、システムコールを、ウェーブフロント内の各ワークアイテムから受信することと、各システムコールを実行することと、各システムコールの結果を、前記ウェーブフロント内の各ワークアイテムに送信することと、を行うことによって、システムコールのための通信を最適化する、製品。前記受信することは、グラフィックス処理デバイスが認識することが可能な高優先度キュー内のSIMDベクトルを受信することを含む、請求項17に記載の製品。コンピュータで読み出し可能な媒体であって、前記媒体には命令が記憶されており、前記命令がコンピューティングデバイスによって実行されると、前記コンピューティングデバイスは、ウェーブフロント内のワークアイテムごとのシステムコールを記憶することと、前記記憶されたシステムコールを、実行対象としてプロセッサに送信することと、前記送信に応じて、前記ウェーブフロント内の各ワークアイテムについての結果を受信することと、を行うことによって、システムコールのための通信を最適化する、コンピュータで読み出し可能な媒体。前記記憶することは、前記システムコールを、CPUが認識することが可能な高優先度キュー内のSIMDベクトルに記憶することを含む、請求項19に記載のコンピュータで読み出し可能な媒体。コンピュータで読み出し可能な媒体であって、前記媒体には命令が記憶されており、前記命令がコンピューティングデバイスによって実行されると、前記コンピューティングデバイスは、システムコールのための通信を最適化し、システムコールを、ウェーブフロント内の各ワークアイテムから受信することと、各システムコールを実行することと、各システムコールの結果を、前記ウェーブフロント内の各ワークアイテムに送信することと、を行うことによって、システムコールのための通信を最適化する、コンピュータで読み出し可能な媒体。前記受信することは、前記グラフィックス処理デバイスが認識することが可能な高優先度キュー内のSIMDベクトルを受信すること、を含む、請求項21に記載のコンピュータで読み出し可能な媒体。以下の詳細な説明においては、1つの実施形態、ある実施形態、例示的実施形態またはその他を参照することは、本明細書において説明される実施形態が、特定の特徴、構造または特性を有することを示すが、全ての実施形態がその特定の特徴、構造または特性を必ずしも含むとは限らない。さらに、係る語句は、同一の実施形態を参照するとは限らない。さらに、特定の特徴、構造または特性が1つの実施形態に関連して説明されるとき、係る特長、構造または特性を他の実施形態との関連で実施することは、明示されているか否かによらず、当業者の知識の範囲内であることが提起される。本発明の実施形態という用語は、本発明の実施形態の全部が検討の対象である特徴、特長または操作モードを含むことを必ずしも要求しない。代替的な実施形態が本発明の範囲から逸脱することなく考案され、本発明の既知の構成要素は、本発明の関連する詳細を不明瞭化しないために、必ずしも詳細に説明されるとは限らず、または省略され得る。加えて、本明細書において用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を制限することを意図するものではない。例えば、本明細書において用いられる単数形の1つのおよびそのは、内容的に明らかに単数のみを指す場合を除き、複数形をも含むことを意図するものである。本明細書において用いられる場合、含む、備える、包含するおよび/または有するという用語は、述べられた特徴、整数、ステップ、操作、構成要素および/またはコンポーネントが存在することを指定するが、1つまたは複数の他の特徴、整数、ステップ、操作、構成要素、コンポーネントおよび/またはこれらの群の存在または追加を除外しない。図1Aは、CPU102およびAPD104を含む統合化されたコンピューティングシステム100の例示的な図である。CPU102は、1つ以上のシングルコアまたはマルチコアCPUを含み得る。本発明の一実施形態において、システム100は、統合化されたプログラミング環境および実行環境を提供するために、CPU102およびAPD104を組み合わせた単一のシリコンダイまたはパッケージ上に形成される。この環境は、APD104が、いくつかのプログラミングタスクに対して、CPU102と同程度に流動的に用いられることを可能にする。しかし、CPU102およびAPD104が単一のシリコンダイ上に形成されることは、本発明の絶対的な要件ではない。いくつかの実施形態において、CPU102およびAPD104は別個に形成され、同一の基板または異なる基板上に搭載されることが可能である。1つの例において、システム100は、メモリ106、オペレーティングシステム108および通信インフラストラクチャ109を含む。オペレーティングシステム108および通信インフラストラクチャ109は、以下でより詳細に説明される。システム100は、カーネルモードドライバKMD:kernelmodedriver110と、ソフトウェアスケジューラSWS:softwarescheduler112と、例えば入出力メモリ管理ユニットIOMMU:input/outputmemorymanagementunit等のメモリ管理ユニット116とを含む。システム100の構成品は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの任意の組合せとして実装され得る。当業者は、システム100が図1Aに示される実施形態において示されるものに加えて、またはこれらとは異なる、1つ以上のソフトウェアコンポーネント、ハードウェアコンポーネントおよびファームウェアコンポーネントを含み得ることを理解するであろう。1つの例において、KMD110等のドライバは、通常、ハードウェアが接続されたコンピュータバスまたは通信サブシステムを通してデバイスと通信する。呼び出しプログラムがドライバにおいてルーチンを呼び出すと、ドライバは、デバイスに対してコマンドを発行する。デバイスがドライバに対してデータを戻すと、ドライバは、元の呼び出しプログラムにおいてルーチンを呼び出し得る。1つの例において、ドライバは、ハードウェア依存的であり、オペレーティングシステム固有である。ドライバは、通常、任意の必要な非同期的時間依存性のハードウェアインターフェースに対して要求されるインタラプトハンドリングを提供する。デバイスドライバは、特に現代のウィンドウズ登録商標プラットフォームにおいては、カーネルモードリング0またはユーザモードリング3において実行され得る。ドライバをユーザモードにおいて実行することの利益は、安定性が改善されることである。なぜなら、不完全な形で書かれたユーザモードデバイスドライバは、カーネルメモリを上書きすることによってシステムをクラッシュさせることができないためである。一方、ユーザモード/カーネルモードの遷移は、通常、顕著な性能オーバーヘッドを与え、それにより、低レイテンシおよび高スループット要件目的のユーザモードドライバを阻害する。カーネルスペースは、システムコールの使用を通してのみ、ユーザモジュールからのアクセスが可能である。UNIX登録商標シェルまたは他のGUIベースのアプリケーションなどのエンドユーザプログラムは、ユーザスペースの一部である。これらのアプリケーションは、カーネルにサポートされた機能を通してハードウェアと相互作用する。CPU102は、制御プロセッサ、フィールドプログラマブルゲートアレイFPGA:fieldprogrammablegatearray、特定用途集積回路ASIC:applicationspecificintegratedcircuitまたはデジタルシグナルプロセッサDSP:digitalsignalprocessorのうち1つ以上を含み得る図示せず。CPU102は、例えば、コンピューティングシステム100の動作を制御する、オペレーティングシステム108、KMD110、SWS112およびアプリケーション111を含む制御ロジックを実行する。この例示的な実施形態において、CPU102は、1つの実施形態によれば、アプリケーション111の実行の起動および制御を、例えばそのアプリケーションに関連する処理をCPU102とAPD104等の他の処理リソースとの間に分散させることにより行う。APD104は、とりわけ、グラフィックス演算や、例えば特に並列処理に好適となり得る他の演算等の、選択された機能のためのコマンドおよびプログラムを実行する。一般に、APD104は、ピクセル処理、幾何学演算およびディスプレイに対する画像のレンダリング等のグラフィックスパイプライン処理を実行するために、しばしば用いられ得る。本発明の様々な実施形態において、APD104は、CPU102から受信したコマンドまたは命令に基づいて、計算処理演算も実行し得る。例えば、コマンドは、ISAに定義されない特殊な命令であるとみなすことができ、所与のISAまたは独特なハードウェアからの1組の命令によって大抵得られる。コマンドは、例えばディスパッチプロセッサ、コマンドプロセッサまたはネットワークコントローラ等の特殊なプロセッサにより実行され得る。一方、命令は、例えばコンピュータアーキテクチャ内のプロセッサの単一の演算であるとみなされ得る。1つの例において、2セットのISAが用いられる場合には、いくつかの命令は、x86プログラムを実行するために用いられ、いくつかの命令は、APD計算ユニット上でカーネルを実行するために用いられる。例示的な実施形態において、CPU102は、選択されたコマンドをAPD104に伝達する。これらの選択されたコマンドは、並列実行に適したグラフィックスコマンドと、並列実行に適した他のコマンドとを含み得る。計算処理コマンドを含み得るこれらの選択されたコマンドは、実質的にCPU102から独立して実行され得る。APD104は、例えば1つ以上の単一命令複数データSIMD:singleinstructionmultipledata処理コア等ではあるがこれに制限されない、自身の計算ユニット図示せずを含み得る。本明細書で参照されるSIMDは、数学パイプライン、すなわち、それぞれが自身のデータおよび共有プログラムカウンタを有する複数の処理エレメント上でカーネルが同時に実行されるプログラミングモデルである。全ての処理エレメントは、完全に同一の1組の命令を実行する。プレディケーションを用いることにより、発行された各コマンドに対して、ワークアイテムを関与させることまたはさせないことが可能となる。1つの例において、各APD計算ユニット104は、1つ以上のスカラーおよび/またはベクトル浮動小数点演算ユニットおよび/または算術論理ユニットALU:arithmeticandlogicunitを含み得る。APD計算ユニットは、逆平方根ユニットおよびサイン/コサインユニット等の特殊用途処理ユニット図示せずも含み得る。1つの例において、APD計算ユニットは、本明細書においてシェーダコア122と総称される。1つ以上のSIMDが存在することにより、一般に、APD104は、グラフィックス処理において一般的なデータ並列タスク等のデータ並列タスクの実行に、理想的に好適なものとなる。ピクセル処理等のいくつかのグラフィックスパイプライン処理と、他の並列演算処理とは、同一のコマンドストリームまたは計算カーネルが、ストリームまたは入力データ要素の集合体上で実行されることを要求する。同一の計算カーネルのそれぞれのインスタンス化は、上記データ要素を並列に処理するために、シェーダコア122の複数の計算ユニット上で同時に実行され得る。本明細書で参照されるように、例えば計算カーネルは、プログラム上で宣言され、APD計算ユニット上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラムまたはプログラムとも称される。1つの例示的な実施形態において、各計算ユニット例えばSIMD処理コアは、入力されるデータを処理するために、特定ワークアイテムのそれぞれのインスタンス化を実行し得る。ワークアイテムは、コマンドによりデバイス上で呼び出されるカーネルの並列実行の集合体のうちの1つである。ワークアイテムは、計算ユニット上で実行されるワークグループの一部として、1つ以上の処理エレメントにより実行され得る。ワークアイテムは、自身のグローバルIDおよびローカルIDによって、集合体内の他の実行から区別される。1つの例において、ワークグループにおいて1つのSIMDエンジンで同時に実行されるワークアイテムの一部は、ウェーブフロント136と称され得る。ウェーブフロントの幅は、計算ユニット例えば、SIMD処理コアのハードウェアの特性である。本明細書で参照されるワークグループは、単一の計算ユニット上で実行される関連するワークアイテムの集合体である。ワークグループ内のワークアイテムは、同一のカーネルを実行し、ローカルメモリおよびワークグループバリアを共有する。1つのワークグループからの全てのウェーブフロントは、同一のSIMDエンジンで処理される。ウェーブフロントにわたる命令は1つずつ発行され、全てのワークアイテムが同一の制御フローに従う場合には、各ワークアイテムは、同一のプログラムを実行する。実行マスクおよびワークアイテムプレディケーションは、ウェーブフロント内の拡散的な制御フローを可能にするために用いられる。なお、拡散的な制御フローにおいては、各個別のワークアイテムは、カーネルを通じて一意的なコードパスを実際に取り得る。部分的に占められたウェーブフロントは、ワークアイテムの全てのセットがウェーブフロント開始時にて必ずしも利用可能とは限らない場合に、処理され得る。ウェーブフロントは、ワープ、ベクトルまたはスレッドと称され得る。コマンドは、ウェーブフロントに対して1つずつ発行され得る。全てのワークアイテムが同一の制御フローに従う場合には、各ワークアイテムは同一のプログラムを実行し得る。1つの例では、実行マスクおよびワークアイテムプレディケーションは、各個別のワークアイテムがカーネルドライバを通じて一意的なコードパスを実際に取り得る拡散的な制御フローを可能にするために用いられる。ワークアイテムの全てのセットが開始時において利用できない場合には、部分的なウェーブフロントを処理することができる。例えば、シェーダコア122は、所定数のウェーブフロント136を同時に実行することができ、各ウェーブフロント136は、所定数のワークアイテムを含む。システム100において、APD104は、グラフィックスメモリ130等の自身のメモリを含む。グラフィックスメモリ130は、APD104における計算実行の間の使用のために、ローカルメモリを提供する。シェーダコア122内の個々の計算ユニット図示せずは、自身のローカルデータ記憶装置図示せずを有し得る。1つの実施形態において、APD104は、ローカルグラフィックスメモリ130へのアクセス、ならびにメモリ106へのアクセスを含む。他の実施形態において、APD104は、ダイナミックランダムアクセスメモリDRAM:dynamicrandomaccessmemory、または、APD104には直接的に接続されているがメモリ106からは分離している他のメモリ図示せずへのアクセスを含み得る。図示の例において、APD104は、1つまたはn個のコマンドプロセッサCP:commandprocessor124を含み得る。CP124は、APD104内の処理を制御する。CP124は、実行されるべきコマンドを、メモリ106内のコマンドバッファ125から取得し、APD104でのこれらのコマンドの実行を調整する。1つの例において、CPU102は、アプリケーション111に基づくコマンドを、適切なコマンドバッファ125に入力する。本明細書において参照されるように、アプリケーションは、CPU内またはAPD内の計算ユニット上で実行されるプログラム部分の組合せである。複数のコマンドバッファ125は、各プロセスがAPD104での実行のためにスケジュールされた状態で、保持され得る。CP124は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの組合せにおいて実装され得る。1つの実施形態において、CP124は、スケジューリングロジックを含むロジックを実装するためのマイクロコードを有する縮小命令セットコンピュータRISC:reducedinstructionsetcomputerエンジンとして実装される。APD104は、1つまたはn個のディスパッチコントローラDC:dispatchcontroller126を含み得る。本願において、ディスパッチという用語は、1セットの計算ユニット上の1セットのワークグループに対するカーネルの実行のスタートを起動するために、コンテキスト状態を使用するディスパッチコントローラにより実行されるコマンドを指す。DC126は、シェーダコア122内でワークグループを起動するためのロジックを含む。いくつかの実施形態において、DC126は、CP124の一部として実装され得る。システム100は、APD104上で実行するためのプロセスを実行リスト150から選択するためのハードウェアスケジューラHWS:hardwarescheduler128を含む。HWS128は、ラウンドロビン方式、優先レベルを用いて、または他のスケジューリングポリシーに基づいて、プロセスを実行リスト150から選択し得る。優先レベルは、例えば、動的に決定され得る。HWS128は、例えば、新規のプロセスを追加することによって、あるいは既存のプロセスを実行リスト150から削除することによって、実行リスト150を管理する機能を含み得る。HWS128の実行リスト管理ロジックは、実行リストコントローラRLC:runlistcontrollerと称されることもある。本発明の様々な実施形態において、HWS128が、実行リスト150からプロセスの実行を開始すると、CP124は、対応するコマンドバッファ125からのコマンドの取得および実行を開始する。いくつかの事例において、CP124は、CPU102から受信したコマンドに対応する、APD104内で実行される1つ以上のコマンドを生成し得る。1つの実施形態において、CP124は、APD104リソースおよび/またはシステム100のリソースの利用が改善または最大化されるように、APD104におけるコマンドの優先化およびスケジューリングを、他のコンポーネントとともに実装する。APD104は、インタラプトジェネレータ146に対してアクセスを有するか、またはインタラプトジェネレータ146を含み得る。インタラプトジェネレータ146は、APD104がページフォールト等のインタラプトイベントに遭遇すると、APD104によってオペレーティングシステム108にインタラプトをかけるよう構成され得る。例えば、APD104は、IOMMU116内のインタラプト生成ロジックに依存して、上述のページフォールトインタラプトを生成し得る。APD104は、シェーダコア122内で現在実行中のプロセスを切り替えるためのプリエンプションおよびコンテキストスイッチロジック120を含み得る。コンテキストスイッチロジック120は、例えばプロセスを停止させ、その現在状態例えばシェーダコア122状態およびCP124状態を保存する機能を含む。本明細書において参照される状態という用語は、初期状態、中間状態および/または最終状態を含み得る。初期状態は、機械がプログラム順序に従って入力データセットを処理することによって、データの出力セットを生成する開始点である。例えば、処理を前進させるためにいくつかのポイントにおいて記憶される必要がある中間状態が存在する。この中間状態は、他のプロセスによってインタラプトがかけられた場合に、後に実行を継続することを可能にするために記憶される場合もある。出力データセットの一部として記録され得る最終状態も存在する。プリエンプションおよびコンテキストスイッチロジック120は、他のプロセスを、APD104にコンテキストスイッチするためのロジックを含み得る。他のプロセスをAPD104で実行するようにコンテキストスイッチするための機能は、APD104上で実行するために、例えばCP124およびDC126によってプロセスをインスタンス化することと、当該プロセスに対して以前に保存された状態を復元することと、当該プロセスの実行を開始することと、を含み得る。メモリ106は、DRAM図示せず等の非永続型メモリを含み得る。メモリ106は、例えば、アプリケーションまたは他の処理ロジックの部分を実行する間に、処理ロジック命令、定数および様々な変数を記憶し得る。例えば、1つの実施形態において、CPU102上で1つ以上の演算を実行するための制御ロジックの部分は、CPU102によって演算のそれぞれの部分が実行される間、メモリ106内に常駐し得る。本明細書において用いられる処理ロジックまたはロジックといいう用語は、制御フローコマンド、計算実行コマンドおよびリソースアクセス関連コマンドを指す。実行中、個別のアプリケーション、オペレーティングシステム関数、処理ロジックコマンドおよびシステムソフトウェアは、メモリ106に常駐し得る。オペレーティングシステム108に対して必須である制御ロジックコマンドは、一般に、実行中にはメモリ106に常駐することとなるであろう。他のソフトウェアコマンド、例えばカーネルモードドライバ110およびソフトウェアスケジューラ112は、システム100の実行中にはメモリ106に常駐し得る。この例において、メモリ106は、コマンドをAPD104に送るために、CPU102によって用いられるコマンドバッファ125を含む。メモリ106は、プロセスリストおよびプロセス情報例えば、アクティブリスト152およびプロセス制御ブロック154を含み得る。これらのリストおよび情報は、スケジュール情報を、APD104および/または関連するスケジューリングハードウェアに伝えるために、CPU102上で実行されるスケジューリングソフトウェアによって使用される。メモリ106に対するアクセスは、メモリ106に接続されたメモリコントローラ140によって管理され得る。例えば、メモリ106に対する読み出しおよび書き込みを実行するための、CPU102または他のデバイスからの要求は、メモリコントローラ140によって管理される。システム100の他の態様に戻ると、IOMMU116は、マルチコンテキストメモリ管理ユニットである。本明細書で用いられるコンテキストプロセスともよばれるという用語は、カーネルが実行される環境であって、同期およびメモリ管理が定義されるドメインであるとみなされる。コンテキストは、1セットのデバイスと、これらのデバイスに対してアクセス可能であるメモリと、対応するメモリ特性と、メモリオブジェクトにおけるカーネル単数または複数または演算の実行をスケジュールするために用いられる1つ以上のコマンドキューとを含む。一方、プロセスは、コンピュータ上で実行するプロセスを発生するアプリケーション用のプログラムの実行とみなすことができる。オペレーティングシステムは、実行対象プログラム用のデータ記録および仮想メモリアドレス空間を生成し得る。プログラム実行のメモリおよび現在の状態は、プロセスと呼ばれ得る。オペレーティングシステムは、メモリ上で動作させるべきプロセス用のタスクを、初期状態から最終状態までスケジュールする。図1Aにおいて示される例に戻ると、IOMMU116は、APD104を含むデバイスに対するメモリページアクセスに対して、仮想アドレスから物理アドレスへの変換を実行するためのロジックを含む。IOMMU116は、例えば、APD104等のデバイスによるページアクセスの結果としてページフォールトが生じる場合に、インタラプトを生成するためのロジックを含み得る。IOMMU116は、トランスレーションルックアサイドバッファTLB:translationlookasidebuffer118を含むか、あるいはTLB118に対するアクセスを有し得る。TLB118は、1つの例として、メモリ106内のデータ用にAPD104によりなされた要求に対して、論理すなわち仮想メモリアドレスから物理メモリアドレスへの変換を高速化するために、コンテントアドレサブルメモリCAM:contentaddressablememoryに実装され得る。示された例において、通信インフラストラクチャ109は、必要に応じてシステム100のコンポーネントを相互接続する。通信インフラストラクチャ109は、周辺構成要素相互接続PCIバス、拡張PCIPCI-Eバス、アドバンストマイクロコントローラバスアーキテクチャAMBAバス、アドバンストグラフィックスポートAGPまたは他の通信インフラストラクチャのうち1つ以上を含み得る図示せず。通信インフラストラクチャ109は、イーサネット登録商標若しくは同様のネットワークまたはアプリケーションの転送速度要求を満足する任意の好適な物理的通信インフラストラクチャを含み得る。通信インフラストラクチャ109は、コンピューティングシステム100のコンポーネントを含むコンポーネントを相互接続するための機能を含む。この例において、オペレーティングシステム108は、システム100のハードウェアコンポーネントを管理する機能と、共通サービスを提供するための機能とを含む。様々な実施形態において、オペレーティングシステム108は、CPU102上で実行し、共通サービスを提供する。これらの共通サービスは、例えば、CPU102内での実行のためにアプリケーションをスケジューリングすることと、フォールト管理と、インタラプトサービスと、他のアプリケーションの入力および出力を処理することと、を含む。いくつかの実施形態において、オペレーティングシステム108は、例えばインタラプトコントローラ148等のインタラプトコントローラによって生成されたインタラプトに基づいて、適切なインタラプトハンドリングルーチンを呼び出す。例えば、オペレーティングシステム108は、ページフォールトインタラプトを検出すると、関連するページをメモリ106にロードし始め、且つ、対応するページテーブルを更新するために、インタラプトハンドラを呼び出す。オペレーティングシステム108は、オペレーティングシステムにより管理されるカーネル機能を通して、ハードウェア部品に対するアクセスが仲介されることを確保することによって、システム100を保護する機能を含み得る。事実、オペレーティングシステム108は、アプリケーション111等のアプリケーションが、CPU102上でユーザスペースにおいて実行されることを確保する。オペレーティングシステム108は、アプリケーション111が、ハードウェアにアクセスするためにオペレーティングシステムにより提供されるカーネル機能および/または入出力機能を呼び出すことも確保する。例として、アプリケーション111は、CPU102上でも実行されるユーザ計算を実行するための様々なプログラムまたはコマンドを含む。このような統一コンセプトによって、選択されたコマンドをAPD104上での処理対象としてCPU102からシームレスに送ることが可能になる。この統一APD/CPUフレームワークにおいて、アプリケーション111からの入力/出力要求は、対応するオペレーティングシステム機能を通じて処理される。1つの例において、KMD110は、CPU102、CPU102上で実行されるアプリケーションまたは他のロジックが、APD104の機能を呼び出し得るアプリケーションプログラミングインタフェースAPIを実装する。例えば、KMD110は、CPU102からのコマンドを、コマンドバッファ125にエンキューし得る。なお、APD104は、このコマンドバッファ125からコマンドを続けて取得することとなる。加えて、KMD110は、APD104上で実行されるプロセスのスケジューリングを、SWS112とともに実行する。SWS112は、例えば、APD上で実行されるプロセスの優先度リストを保持するためのロジックを含み得る。本発明の他の実施形態において、CPU102上で実行するアプリケーションは、コマンドをエンキューするときに、KMD110を完全にバイパスし得る。いくつかの実施形態において、SWS112は、APD104上で実行されるプロセスのアクティブリスト152を、メモリ106に保持する。SWS112は、アクティブリスト152におけるプロセスのうち、ハードウェアのHWS128により管理される一部を選択する。各プロセスをAPD104上で実行することに関する情報は、CPU102からプロセス制御ブロックPCB:processcontrolblock154を通して、APD104に伝えられる。アプリケーション、オペレーティングシステムおよびシステムソフトウェアのための処理ロジックは、マスクワーク/フォトマスクの生成を通して最終的に製造プロセスを構成することで、本明細書において説明される本発明の態様を具体化するハードウェア装置を生成することを可能にするための、例えば、C言語等のプログラム言語および/またはVerilog、RTL等のハードウェア記述言語もしくはネットリストにおいて指定されるコマンドを含み得る。当業者は、コンピューティングシステム100が、図1Aにおいて示されるコンポーネントよりも多数または少数のコンポーネントを含み得ることを、本明細書を読むことで理解するであろう。例えば、コンピューティングシステム100は、1つ以上の入力インターフェースと、不揮発性ストレージと、1つ以上の出力インターフェースと、ネットワークインターフェースと、1つ以上のディスプレイまたはディスプレイインターフェースと、を含み得る。図1Bは、図1Aにおいて示されるAPD104のより詳細な例示を示す実施形態である。図1Bにおいて、CP124は、CPパイプライン124a,124b,124cを含み得る。CP124は、図1Aにおいて示されるコマンドバッファ125から入力として提供されるコマンドリストを、処理するように構成され得る。図1Bの典型的な動作において、CP入力0124aは、コマンドをグラフィックスパイプライン162に駆動することを担当する。CP入力1および2124bおよび124cは、コマンドを計算パイプライン160に伝える。HWS128の動作を制御するためのコントローラ機構166も提供される。図1Bにおいて、グラフィックスパイプライン162は、本明細書において順序化パイプライン164と称される、1セットのブロックを含み得る。例えば、順序化パイプライン164は、頂点グループ変換器VGT:vertexgrouptranslator164aと、プリミティブアセンブラPA:primitiveassembler164bと、スキャンコンバータSC:scanconverter164cと、シェーダエクスポートレンダーバックユニットSX/RB:shader-export,render-backunit176とを含む。順序化パイプライン164内の各ブロックは、グラフィックスパイプライン162内の異なる段階のグラフィックス処理を表し得る。順序化パイプライン164は、固定機能ハードウェアパイプラインであり得る。本発明の精神および範囲に含まれ得る他の実装を用いることも可能である。わずかな量のデータが、入力としてグラフィックスパイプライン162に提供されるが、このデータは、グラフィックスパイプライン162からの出力として提供される回数分だけ増幅されることとなるであろう。グラフィックスパイプライン162は、CPパイプライン124aから受け取ったワークアイテムグループ内の範囲にわたってカウントするためのDC166も含む。DC166を通して提示された計算作業は、グラフィックスパイプライン162と準同期している。計算パイプライン160は、シェーダDC168,170を含む。DC168,170のそれぞれは、CPパイプライン124b,124cから受け取ったワークグループ内の計算範囲にわたってカウントするように構成されている。図1Bにおいて示されるDC166,168,170は、入力範囲を受け取り、入力範囲をワークグループに分割し、次いでこれらのワークグループをシェーダコア122に伝える。グラフィックスパイプライン162は、一般に固定機能パイプラインであるため、その状態を保存および復元することは困難であり、そのためグラフィックスパイプライン162は、コンテキストスイッチが困難である。したがって、ほとんどの場合、本明細書において論じられるコンテキストスイッチは、グラフィックス処理におけるコンテキストスイッチに関係しない。例外は、シェーダコア122におけるグラフィックス作業であり、これはコンテキストスイッチされ得る。シェーダコア122は、グラフィックスパイプライン162および計算パイプライン160により共有され得る。シェーダコア122は、汎用プロセッサであり、ウェーブフロントを実行するように構成されている。1つの例において、計算パイプライン160内の全てのワークは、シェーダコア122内で処理される。シェーダコア122は、プログラム可能なソフトウェアコードを実行し、多様な形態のデータ例えば、状態データを含む。しかし、計算パイプライン160は、処理対象ワークをグラフィックスパイプライン162に送らない。グラフィックスパイプライン162内におけるワーク処理が完了した後、この完了したワークを、レンダーバックユニット176を通じて処理する。レンダーバックユニット176は、デプスおよび色の計算を行った後に、この最終結果を、グラフィックスメモリ130に書き込む。以下に記載するように、本発明は、ソフトウェア、ハードウェア、ファームウェアおよび/または図示のエンティティの多数の異なる実施形態において実行することが可能であることが当業者にとって明らかである。本発明を実行するためのハードウェアの特殊制御を用いた実際のソフトウェアコードは、本発明を限定しない。従って、本明細書に記載された詳細に鑑みれば、実施形態の改変および変更が可能であるとの理解の下、本発明の動作挙動について説明する。さらに、当業者であれば理解するように、上記したようなコンピュータで読み出し可能なコード例えば、汎用プログラミング言語例えば、CまたはC、VerilogHDL、VHDL、AlteraHDLAHDLなどを含むハードウェア記述言語HDLまたは他の利用可能なプログラミングおよび/または回路図入力ツール例えば、回路入力ツールの利用を通じて、本発明の多様な実施形態のシミュレーション、合成および/または製造を遂行することが部分的に可能である。コンピュータで読み出し可能なコードは、任意の公知のコンピュータにおいて利用可能な媒体例えば、半導体、磁気ディスク、光学ディスク例えば、CD-ROM、DVD-ROM内に配置することもできるし、あるいはコンピュータデータ信号としてコンピュータで利用可能な例えば、読み出し可能な伝送媒体例えば、搬送波または他の任意の媒体例えば、デジタル媒体、光学媒体、またはアナログ媒体内に埋め込むことも可能である。従って、上記コードは、通信ネットワーク例えば、インターネットおよびイントラネットを通じて送信することができる。上述のシステムおよび技術によって達成される機能および/または上述のシステムおよび技術によって提供される構造は、プログラムコードに具現化されているコア例えば、APDコアおよび/またはCPUコアとして表現され、集積回路製造の一部としてハードウェアに変換され得ることが理解される。本発明の実施形態により、プログラマは、CPUとAPDとの間のデータ処理移動をシームレスに行うアプリケーションを書くことが可能になり、両者の最高の特性が得られるという利益を受けることが可能になる。統一された単一プログラミングプラットフォームによって、並列処理を利用する言語、フレームワークおよびアプリケーションの開発のための強固な基盤を得ることが可能になる。本発明の実施形態により、プログラマは、CPUとAPDとの間のデータ処理移動をシームレスに行うアプリケーションをプログラマが書くことが可能になり、両者の最高の特性が得られるという利益を受けることが可能になる。統一された単一プログラミングプラットフォームにより、並列処理を利用する言語、フレームワークおよびアプリケーションの開発のための強固な基盤を得ることが可能になる。図2は、APDとCPUとの間のシスコール要求についての最適化された通信プロセスの例示的ブロック図200である。ブロック図200は、ウェーブフロント136と、SIMDベクトル208と、キュー210とを含む。ウェーブフロント136は、シェーダコア122によって順次処理される。各ウェーブフロントは、複数のワークアイテム204を含む。各ワークアイテム204には、処理すべきタスクまたは上記タスクの一部が割りあてられている。シェーダコア122は、ウェーブフロント136内のワークアイテム204を、並列に、且つ、同一の1組の命令と共に処理する。その結果、ウェーブフロント136内の各ワークアイテム204は、シスコールをCPU102に同時に発行し得る。APDが、各ワークアイテムからのシスコール要求をCPUに個別に送る構成である従来のシステムとは対照的に、APD104は、SIMDベクトル206を用いて要求を送るため、シスコール要求を単一データ構造としてまとめることが可能になる。SIMDベクトル206は、SIMDエレメント208を含む。各SIMDエレメントは、シスコールデータ構造を含む。シスコールデータ構造は、関数セレクタパラメータ特定のシスコール要求と、引数リストと、シスコール要求結果をAPD104へ返送するためのメモリ空間とを含む。本明細書では、一実施形態として例示的なシスコールデータ構造について説明する。OSを必要とするプロセスがワークアイテム204から要求された場合には、APD104は、各ワークアイテム204からのシスコール要求を、対応するSIMDエレメント208に記憶する。例えば、図1において、ワークアイテムWI1は、シスコールSC1を、SIMDエレメント208に記憶し、ワークアイテムWI1は、シスコールSC2を、別のSIMDエレメント208に記憶する。APD104は、各ワークアイテム204からのシスコール要求の種類を、関数セレクタパラメータ内に保存する。また、APD104は、必要であれば、引数リストを引数リスト部に挿入する。さらに、APD104は、複数のウェーブフロント136のワークアイテムからのシスコールを、1つのSIMDベクトル206に記憶し得る。キュー210は、高優先度の公的メモリキューである。キューは、ファーストインファーストアウトFIFO原理に従って動作する。公的キューは、CPU102およびAPD104プロセッサが認識することが可能なキューである。すなわち、先行してキューに入れられたワークロードは、先行してキューから取り外される。また、当業者であれば、キューデータ構造を用いた例は例示目的のためであり、限定的なものではなく、他のデータ構造も利用可能であることを理解するであろう。APD104は、SIMDベクトル206と共にキュー210にエンキューする。APD104がSIMDベクトル206をキューに入れた後、一実施形態において、APDは、CPU102がSIMDベクトル206を処理するすなわち、SIMDベクトル206を受信し、内部に保存されているシスコールを処理し、各シスコール結果をAPD104へ送信するまで停止して待機する。別の実施形態において、APD104がキュー210をエンキューした後、APD104は、ウェーブフロントの状態をメモリ106中に保存し、別のウェーブフロントの処理を開始する。APD104は、処理完了を示す信号をCPU102から受信すると、元のウェーブフロント136をメモリ106から取り出し、処理を回復させる。CPU102は、高優先度キューから受信したタスクを、他のプロセスよりも優先して処理する。よって、CPU102は、高優先度キュー例えば、キュー210から要求を受信すると、現在のプロセスを保存し、上記受信した要求を処理する。本明細書中に記載される高優先度公的キューの例は、例示的なものであり、限定的なものではなく、当業者であれば、他のメモリ保存構造も利用可能であることを理解するであろう。CPU102は、SIMDベクトル206をキュー210から取り出し、SIMDエレメント208の処理を開始する。CPU102は、OSを呼び出し、各SIMDエレメント208内の関数セレクタパラメータに記憶されたシスコール要求の処理を開始する。また、CPU102は、必要であれば、SIMDエレメント208に記憶された引数リストを読み出す。CPU102は、各シスコール要求を完了した後に、その結果を、各SIMDエレメント208に割りあてられたメモリアドレスに書き込む。CPU102は、全てのSIMDエレメント208の処理を完了した後に、一実施形態において、SIMDベクトル206をキュー210上に配置し、SIMDベクトル206をAPD104に返送する。典型的には、CPU102は、SIMDベクトル206を、APD104が認識することが可能なメモリキュー210上に配置する。別の実施形態において、CPU102は、SIMDベクトル206の処理を完了すると、セマフォ機構を用いて、信号をAPD104に送る。当業者であれば、セマフォ機構を用いることにより、APD104が、処理要求されたシスコールをCPU102が完了するのを待機しているときに、他のウェーブフロントを処理する事態が無くなることを理解するであろう。APD104は、SIMDベクトル206をキューから取り外すか、あるいはシスコールが処理された旨の信号をCPU102から受信した後に、上記要求されたシスコールの結果を用いて、ウェーブフロント136の処理を開始する。APD104が、プロセスSIMDベクトル206をCPUが処理するのを待機しつつ、別のウェーブフロントを処理することが可能な実施形態において、APD104は、ウェーブフロント136をAPDメモリ130から取り出した後に、処理を継続する。シスコールの一例として、メモリに対する要求例えば、malloc関数がある。malloc要求は、特定の処理または関数用のメモリをシステムメモリ106に割りあてる。APD104は、malloc要求を処理することができない。なぜならば、APD104は、OSへのアクセスを有していないからである。そのため、APD104は、malloc要求用のシスコールを、CPU102に送る。APD104は、ウェーブフロント136内のワークアイテム204がメモリを要求した場合に、malloc要求を発行する。従来のシステムの場合、APDが個別のmalloc要求を各ワークアイテムからCPUに送る従来のシステムとは異なり、APD104は、ウェーブフロント136内のワーキングアイテム204ごとのmalloc要求を含む1つのSIMDベクトル206を、CPU102に送る。APD104は、malloc要求に必要な情報を、対応するSIMDエレメント208にワークアイテムごとに記憶する。上記必要な情報は、関数セレクタと、引数リストと、空パラメータとを含む。上記関数セレクタは、malloc関数に対するメモリアドレスである。上記引数リストは、CPU102が各ワークアイテム204に割りあてることが必要なメモリサイズを含む。CPU102は、上記割りあてられた空間のアドレスを、上記空パラメータに記憶する。各ワークアイテムが、各シスコールの処理に必要なmallocパラメータを含んだ後に、APD104は、本明細書に記載のように、SIMDベクトル206をキュー210上に配置する。CPU102は、SIMDベクトル206をキュー210から取り出して、SIMDエレメント208の処理を開始する。CPU102が、SIMDベクトル206内のmalloc要求を処理すると、CPU102は、OSに対して1つのコールを発行する。その後、CPU102は、上記コールのワークアイテム204ごとのメモリを、OSに割りあてる。その後、CPU102は、SIMDエレメント208内のワークアイテム204ごとに割りあてられたメモリ空間に、アドレスを記憶する。CPU102は、全てのシスコール要求を完了した後に、SIMDベクトル206をAPD104に返送する。SIMDエレメント208は、シスコールをCPU102へ送るための複数の構造を含む。一実施形態において、各SIMDエレメント208は、関数セレクタパラメータと、引数リストと、シスコールの結果とを記憶するためのデータ構造を含み得る。非限定的な例において、例示的なデータ構造を以下に示す。structMyTaskMyPtrmyCodePtrmyCPUCodePtrpointertocodemyAPDCodePtrGPRusageinkernelLDSrequiredbykernelPointertocodeotherparametersMyPtrmyDataPtrmyExecRangeGlobalgriddimensionsLocalgriddimensionsmyArgSizemyArgsMyNotificationNotificationmechanism上記のMyTask構造は、APD104上の命令処理のためのMyPtrmyAPDCodePtrポインタと、CPU102上の命令処理のためのMyPtrmyCPUCodePtrポインタと、データポインタであるmyPtr_myDataPtrとを含む。ワークアイテム204が、CPU102からのシスコールを要求すると、myAPDCodePtrポインタおよびmyCPUCodePtrポインタが、特定のシスコール機能のメモリアドレスをポイントする。上記mtDataPtrポインタは、引数リスト用のパラメータと、各シスコール結果を含むメインメモリ106内のメモリアドレスへのポインタとを含む。さらに、MyTask構造は、MyNotification機構を含む。APD104は、上記通知機構を用いて、処理を必要とするMyTaskがキュー110に存在していることを、CPU102に通知する。同様に、CPU102は、MyNotificationを用いて、CPU102によるシスコール処理が完了したことを、APD104に通知する。図3は、SIMDベクトル206を用いてシスコール要求を処理するシステム100の例示的なフローチャート200である。ステップ302において、ウェーブフロント136内のワークアイテム204が、CPU102を用いた処理を必要とするシスコールを要求した場合に、APD104は、SIMDベクトル206を初期化する。ステップ304において、各ワークアイテム204は、本明細書に記載のように、シスコール要求の処理に必要な情報を、対応するSIMDエレメント208に記憶する。ステップ306において、APD104は、SIMDベクトル206をキュー210にエンキューする。ステップ308において、CPU102は、SIMDベクトル206をキュー210から取り出す。CPU102は、SIMDベクトル206をキューから取り出した後に、OSを呼び出し、各SIMDエレメント208内のシスコールの処理を開始する。ステップ310において、CPU102は、各シスコールの結果をSIMDエレメント208に書き込む。当業者であれば、ステップ310を、ステップ308と共に実行することが可能であることを理解するであろう。ステップ312において、CPU102は、シスコール処理が完了したことをAPD104に通知する。一実施形態において、CPU102は、APD104が認識することが可能なキュー210を用いて、SIMDベクトル206をAPD104に返送する。別の実施形態において、CPU102は、セマフォを用いて、信号をAPD104に送信する。ステップ314において、APD104は、SIMDベクトル206をキュー210から取り出し、ウェーブフロント136の処理を継続する。本発明の様々な態様は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせによって実装することが可能である。例えば、図3のフローチャート300によって示す方法を、図1の統一コンピューティングシステム100において実行することが可能である。本発明の多様な実施形態について、本例の統一コンピューティングシステム100を用いて説明する。他のコンピュータシステムおよび/またはコンピュータアーキテクチャを用いて本発明を実行するための方法が、当業者にとって明らかである。本文書において、コンピュータプログラム媒体およびコンピュータで利用可能な媒体とは、例えばリムーバブルストレージユニットやハードディスクドライブなどの媒体を主に指す。また、コンピュータプログラム媒体およびコンピュータで利用可能な媒体は、メモリ例えば、システムメモリ106およびグラフィックスメモリ130を指す。上記メモリは、メモリ半導体例えば、DRAMであり得る。これらのコンピュータプログラム製品は、ソフトウェアを統一コンピューティングシステム100に提供するための手段である。本発明は、任意のコンピュータで利用可能な媒体に記憶されたソフトウェアを含むコンピュータプログラム製品にも関する。このようなソフトウェアが1つ以上のデータ処理デバイスにおいて実行された場合、データ処理デバイス単数または複数は、本明細書にて記載したように動作し、コンピューティングデバイス例えば、ASICまたはプロセッサの合成および/または製造を許容して、本明細書に記載の本発明の実施形態の実行が可能となる。本発明の実施形態において、現在公知であるかまたは将来において公知となるコンピュータで利用可能な媒体、またはコンピュータで読み出し可能な媒体がすべて用いられる。コンピュータで利用可能な媒体の例を非限定的に挙げると、一次記憶デバイス例えば、任意の種類のランダムアクセスメモリ、二次記憶デバイス例えば、ハードドライブ、フロッピー登録商標ディスク、CDROM、ZIPディスク、テープ、磁気記憶デバイス、光学記憶デバイス、MEMS、ナノ技術記憶デバイスならびに通信媒体例えば、有線通信ネットワークおよび無線通信ネットワーク、ローカルエリアネットワーク、広域ネットワーク、イントラネットがある。本発明の多様な実施形態について上記において説明してきたが、これらの実施形態はひとえに例示的なものであり、制限的なものではないことが理解されるべきである。当業者であれば、これらの実施形態において、形態および詳細における多様な変更が添付の特許請求の範囲に記載のような本発明の意図および範囲から逸脱することなく可能であることを理解する。本発明はこれらの例に限定されないことが理解されるべきである。本発明は、本明細書中に記載のように動作する要素に適用することが可能である。よって、本発明の範囲は、上記した例示的実施形態のいずれによっても限定されるべきではなく、以下の特許請求の範囲およびその均等物によって規定されるべきものである。"