(57)【要約】【解決手段】  複数の仮想エンジンとシェーダコアとを含む処理ユニット。複数の仮想エンジンは、（i）オペレーティングシステム（ＯＳ）から複数のタスクを互いに実質的に並列に受信すると共に（ii）複数のタスクの各々に関連付けられる状態データのセットをロードするように構成される。シェーダコアは、複数のタスクの各々に関連付けられる状態データのセットに基づいて複数のタスクを実質的に並列に実行するように構成される。処理ユニットは、複数のタスクがシェーダコアへ発行されるようにスケジューリングするスケジューリングモジュールを含んでいてもよい。【選択図】図４
2013504131.tif 000002
【特許請求の範囲】
【請求項１】
（i）オペレーティングシステム（ＯＳ）から複数のタスクを互いに実質的に並列に受信すると共に（ii）前記複数のタスクの各々に関連付けられる状態データのセットをロードするように構成される複数の仮想エンジンと、
前記複数のタスクの各々に関連付けられる状態データの前記セットに基づいて前記複数のタスクを実質的に並列に実行するように構成されるシェーダコアと、を備える処理ユニット。
【請求項２】
前記シェーダコアは、
第１のタスクを前記第１のタスクに関連付けられる状態データの第１のセットに基づいて実行するように構成される第１の複数の処理要素と、
第２のタスクを前記第２のタスクに関連付けられる状態データの第２のセットに基づいて実行するように構成される第２の複数の処理要素と、を備える請求項１の処理ユニット。
【請求項３】
前記複数の仮想エンジンは、（i）第１の種類のタスクを受信するように構成される第１のキューと、（ii）第２の種類のタスクを受信するように構成される第２のキューと、を備える請求項１の処理ユニット。
【請求項４】
前記第１の種類のタスクは低遅延タスクを備え、前記第２の種類のタスクは標準遅延タスクを備える請求項３の処理ユニット。
【請求項５】
前記第１の種類のタスクはグラフィクス処理タスクを備え、前記第２の種類のタスクは一般計算タスクを備える請求項３の処理ユニット。
【請求項６】
前記複数のタスクが前記シェーダコアへ発行されるようにスケジューリングするスケジューリングモジュールを更に備える請求項１の処理ユニット。
【請求項７】
コンピューティングデバイス上で実行される場合に処理ユニットを定義する命令が入っているコンピュータ可読記憶媒体を備えるコンピュータプログラム製品であって、前記処理ユニットは、
（i）オペレーティングシステム（ＯＳ）から複数のタスクを互いに実質的に並列に受信すると共に（ii）前記複数のタスクの各々に関連付けられる状態データのセットをロードするように構成される複数の仮想エンジンと、
前記複数のタスクの各々に関連付けられる状態データの前記セットに基づいて前記複数のタスクを実質的に並列に実行するように構成されるシェーダコアと、を備えるコンピュータプログラム製品。
【請求項８】
前記シェーダコアは、
第１のタスクを前記第１のタスクに関連付けられる状態データの第１のセットに基づいて実行するように構成される第１の複数の処理要素と、
第２のタスクを前記第２のタスクに関連付けられる状態データの第２のセットに基づいて実行するように構成される第２の複数の処理要素と、を備える請求項７のコンピュータプログラム製品。
【請求項９】
前記複数の仮想エンジンは、（i）第１の種類のタスクを受信するように構成される第１のキューと、（ii）第２の種類のタスクを受信するように構成される第２のキューと、を備える請求項７のコンピュータプログラム製品。
【請求項１０】
前記第１の種類のタスクは低遅延タスクを備え、前記第２の種類のタスクは標準遅延タスクを備える請求項９のコンピュータプログラム製品。
【請求項１１】
前記第１の種類のタスクはグラフィクス処理タスクを備え、前記第２の種類のタスクは一般計算タスクを備える請求項９のコンピュータプログラム製品。
【請求項１２】
前記プロセッサは、
前記複数のタスクが前記シェーダコアへ発行されるようにスケジューリングするスケジューリングモジュールを更に備える請求項７のコンピュータプログラム製品。
【請求項１３】
メモリと、
処理ユニットと、
前記メモリ及び前記処理ユニットに結合されるバスと、を備えるコンピューティングシステムであって、前記処理ユニットは、
（i）オペレーティングシステム（ＯＳ）から複数のタスクを互いに実質的に並列に受信すると共に（ii）前記複数のタスクの各々に関連付けられる状態データのセットをロードするように構成される複数の仮想エンジンと、
前記複数のタスクの各々に関連付けられる状態データの前記セットに基づいて前記複数のタスクを実質的に並列に実行するように構成されるシェーダコアと、を備えるコンピューティングシステム。
【請求項１４】
前記シェーダコアは、
第１のタスクを前記第１のタスクに関連付けられる状態データの第１のセットに基づいて実行するように構成される第１の複数の処理要素と、
第２のタスクを前記第２のタスクに関連付けられる状態データの第２のセットに基づいて実行するように構成される第２の複数の処理要素と、を備える請求項１３のコンピューティングシステム。
【請求項１５】
前記複数の仮想エンジンは、（i）第１の種類のタスクを受信するように構成される第１のキューと、（ii）第２の種類のタスクを受信するように構成される第２のキューと、を備える請求項１３のコンピューティングシステム。
【請求項１６】
前記第１の種類のタスクは低遅延タスクを備え、前記第２の種類のタスクは標準遅延タスクを備える請求項１５のコンピューティングシステム。
【請求項１７】
前記第１の種類のタスクはグラフィクス処理タスクを備え、前記第２の種類のタスクは一般計算タスクを備える請求項１５のコンピューティングシステム。
【請求項１８】
前記処理ユニットは、
前記複数のタスクが前記シェーダコアへ発行されるようにスケジューリングするスケジューリングモジュールを更に備える請求項１３のコンピューティングシステム。
【請求項１９】
処理ユニットにおいてタスクを処理するためのコンピュータ実装の方法であって、
オペレーティングシステム（ＯＳ）から複数のタスクを互いに並列に受信することと、
前記複数のタスクの各々に関連付けられる状態データのセットをロードすることと、
前記複数のタスクの各々に関連付けられる状態データの前記セットに基づいて前記複数のタスクをシェーダコア内で実質的に並列に実行することと、を備えるコンピュータ実装の方法。
【請求項２０】
前記実行することは、
第１のタスクを前記第１のタスクに関連付けられる状態データの第１のセットに基づいて前記シェーダコアの第１の複数の処理要素において実行することと、
第２のタスクを前記第２のタスクに関連付けられる状態データの第２のセットに基づいて前記シェーダコアの第２の複数の処理要素において実行することと、を備える請求項１９のコンピュータ実装の方法。
【請求項２１】
前記受信することは、
第１の種類のタスクを第１のキュー内にキューすることと、
第２の種類のタスクを第２のキュー内にキューすることと、を備える請求項１９のコンピュータ実装の方法。
【請求項２２】
前記第１の種類のタスクは低遅延タスクを備え、前記第２の種類のタスクは標準遅延タスクを備える請求項２１のコンピュータ実装の方法。
【請求項２３】
前記第１の種類のタスクはグラフィクス処理タスクを備え、前記第２の種類のタスクは一般計算タスクを備える請求項２１のコンピュータ実装の方法。
【請求項２４】
前記処理ユニットのスケジューリングモジュールを用いて前記複数のタスクが前記シェーダコアへ発行されるようにスケジューリングすることを更に備える請求項１９のコンピュータ実装の方法。
【請求項２５】
処理ユニットへタスクを提供するためのコンピュータ実装の方法であって、
各々が優先度種類の表示を含む複数のタスクを１つ以上のアプリケーションから受信することと、
前記複数のタスク及び各タスクに関連付けられる前記優先度種類の前記表示を前記処理ユニットへ提供することと、を備えるコンピュータ実装の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概してコンピュータシステムにおいて行われるコンピューティング動作に向けられている。より特定的には、本発明はコンピューティング動作を行うグラフィクス処理ユニット（ＧＰＵ）等の処理ユニット及びそのアプリケーションに向けられている。
【背景技術】
【０００２】
ＧＰＵは、グラフィクス処理タスク等のデータ並列コンピューティングタスクを行うことに適合させられている複雑な集積回路である。ＧＰＵは、例えば、ビデオゲームアプリケーション等のエンドユーザアプリケーションによって要求されるグラフィクス処理タスクを実行することができる。ＧＰＵは、ディスクリートな（即ち別個の）デバイス及び／又はパッケージであることがあり、あるいは別のプロセッサ（例えば中央処理ユニット（ＣＰＵ））と同じデバイス及び／又パッケージ内に含まれていることがある。例えばＧＰＵは、経路付けデバイス又は例えばノースブリッジ等のブリッジデバイス内にしばしば集積化される。
【０００３】
エンドユーザアプリケーションとＧＰＵの間には何層ものソフトウエアが存在する。エンドユーザアプリケーションは、アプリケーションプログラミングインタフェース（ＡＰＩ）と通信する。ＡＰＩは、ＧＰＵに依存するフォーマットでよりはむしろ標準的なフォーマットでエンドユーザアプリケーションがグラフィクスデータ及びコマンドを出力することを可能にする。ワシントン、レドモンドのマイクロソフト社(Microsoft Corporation of Redmond, Washington)によって開発されたダイレクトＸ(DirectX)（登録商標）及びクロノスグループ(Khronos Group)によって推奨されているオープンＧＬ(OpenGL)（登録商標）を含めて様々な種類のＡＰＩが商業的に利用可能である。ＡＰＩはドライバと通信する。ドライバは、ＡＰＩから受信した標準コードを、ＧＰＵによって理解されるネイティブフォーマットの命令にトランスレートする。ドライバは典型的にはＧＰＵの製造業者によって書かれる。ＧＰＵは次いでドライバからの命令を実行する。
【０００４】
ＧＰＵによって行われるグラフィクス処理タスクは、典型的には、行列操作及びベクトル操作等の複雑な数学的計算を伴う。単一のグラフィクス処理タスクを行うために、ＧＰＵは複数の異なるスレッド（命令のシーケンス）を実行することがある。各スレッドは、幾何シェーダ(shader)、画素シェーダ、頂点シェーダ等のシェーダプログラムを備えているかもしれない。各スレッド（例えばシェーダプログラム）は、典型的には、ＧＰＵのデータ記憶ユニット内にローカル的に記憶される状態データ（例えばテクスチャハンドル、シェーダ定数、変形行列、等）のセットと関連付けられている。ローカル的に記憶される状態データはコンテクストと称される。
【０００５】
単一のグラフィクス処理タスクの種々のスレッド（例えばシェーダプログラム）を効率的に実行するために、ＧＰＵはシェーダコアと称される処理要素のアレイを含む。処理要素のアレイは、単一命令多重データ（ＳＩＭＤ）デバイスへと組織化される。多重スレッド（例えばシェーダプログラム）がシェーダコアに同時に発行されることがあり、各スレッド（例えばシェーダプログラム）を実行するために必要とされるデータは、シェーダコアの異なる処理要素へ並列に分配される。異なる処理要素は次いで、データ上での動作を並列に行うことができる。このようにしてＧＰＵは、グラフィクス処理タスクに必要な複雑な数学的計算を典型的な中央処理ユニット（ＣＰＵ）よりも速く行うことができる。結果として、コンピューティングシステムがＧＰＵを含む場合には、グラフィクス処理タスク（及び他の種類のデータ並列処理タスク）は、典型的にはＣＰＵよりはむしろＧＰＵへ渡される。
【０００６】
タスクをＧＰＵへ渡すために、オペレーティングシステム（ＯＳ）スケジューラはタスクをコマンドバッファ内に記憶する。従来のＧＰＵは１度に１つのコマンドバッファを処理する。ＯＳスケジューラはコマンドバッファ内にタスクをシリアルに置き、そしてＧＰＵは典型的にはタスクをそれらがコマンドバッファ内に置かれている順で処理する。しかし、場合によっては、ＧＰＵはタスクをそれらがコマンド内に置かれた順ではなく処理するかもしれない。例えばＧＰＵは、第１のタスクの実行に割り込んで、第１のタスクの後にコマンドバッファ内に置かれた更に重要な（例えば低遅延な(low-latency)）タスクを実行することがある。
【０００７】
第１のタスクがＧＰＵのシェーダコア内での完了を終えてしまう前にその更に重要な（例えば低遅延な）タスクを行うために、従来のＧＰＵはコンテクストスイッチを行う。即ち、第１のタスクのスレッドに関連付けられる状態データは、従来のＧＰＵによって維持されているバックアップ記憶ユニット内へと交換され、そしてその更に重要な（例えば低遅延な）タスクのスレッド（例えばシェーダプログラム）に関連付けられる新たな状態データがリトリーブされて(retrieved)シェーダコアのデータ記憶ユニット内に置かれる。シェーダコアは次いで、その更に重要な（例えば低遅延な）タスクのスレッド（例えばシェーダプログラム）をデータ記憶ユニット内に記憶される新たな状態データに基づいて実行する。その更に重要な（例えば低遅延な）タスクが実行を完了した後に、その更に重要な（例えば低遅延な）タスクのスレッドに関連付けられる状態データはデータ記憶ユニットからフラッシュされ(flushed)、そして第１のタスクのスレッドからの状態データがシェーダコアのデータ記憶ユニット内へと交換され戻される。次いでシェーダコアは第１のタスクのスレッドの実行を再開する(resume)ことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
コンテクストスイッチにより、ＧＰＵは複数のタスクをそれらがコマンドバッファ内に置かれた順ではなく処理することが可能になるが、コンテクストスイッチには幾つかの理由により問題がある。先ず、コンテクストスイッチを行うのに相当量の時間が必要であり、ＧＰＵの性能を制限してしまう。また、コンテクストスイッチは、スイッチされているコンテクストを記憶するために追加的なローカルメモリ（例えばバックアップ記憶ユニット）を必要とする。追加的なローカルメモリは貴重なチップ面積を占め、結果としてＧＰＵの大型化を招く。
【０００９】
相当量の時間と面積を必要とすることに加えて、コンテクストスイッチは、低遅延高優先度タスクを処理するのには効果的でない。低遅延高優先度タスクを実行するようシェーダコアを準備するために、従来のＧＰＵはコンテクストスイッチを行う必要がある。コンテクストスイッチに伴う時間（例えば数百クロックサイクル）は、低遅延高優先度タスクを実行するための実際の時間がたとえ比較的短い（例えば数十クロックサイクル）ことがあるとしても、低遅延高優先度タスクを実行するための実効時間を比較的長くしてしまう。
【００１０】
上述に鑑み、コンテクストスイッチなしに重要な（例えば低遅延な）タスクを効率的に処理することができる処理ユニットが必要とされている。
【課題を解決するための手段】
【００１１】
本発明の実施形態は、非同期タスクディスパッチを可能にするための方法、装置及びシステム並びにそれらのアプリケーションを提供することによって、上述の必要性を満たす。
【００１２】
例えば、本発明の実施形態は、複数の仮想エンジンとシェーダコアとを含む処理ユニットを提供する。複数の仮想エンジンは、（i）オペレーティングシステム（ＯＳ）から複数のタスクを互いに実質的に並列に受信すると共に（ii）複数のタスクの各々に関連付けられる状態データのセットをロードするように構成される。シェーダコアは、複数のタスクの各々に関連付けられる状態データのセットに基づいて複数のタスクを実質的に並列に実行するように構成される。処理ユニットは、複数のタスクがシェーダコアへ発行されるようにスケジューリングするスケジューリングモジュールを含んでいてもよい。
【００１３】
別の実施形態では、処理ユニットはソフトウエアにおいて定義される。この実施形態では、コンピュータプログラム製品は、コンピューティングデバイス上で実行される場合に処理ユニットを定義する命令が入っているコンピュータ可読記憶媒体を含む。
【００１４】
更なる実施形態では、処理ユニットはコンピューティングシステム内に含まれる。この実施形態では、コンピューティングシステムは、メモリと、第１の処理ユニットと、第２の処理ユニットと、メモリ、第１の処理ユニット及び処理ユニットに結合されるバスと、を含む。例示的なコンピューティングシステムは、限定はされないが、スーパーコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、ビデオゲームコンソール、埋め込みデバイス、携帯デバイス（例えば携帯電話、スマートフォン、ＭＰ３プレイヤ、カメラ、ＧＰＳデバイス等）、又は処理ユニットを含み若しくは処理ユニットを含むように構成される何らかの他のデバイスを含んでいてよい。
【００１５】
本発明の別の実施形態は、処理ユニットにおいてタスクを処理するためのコンピュータ実装の方法(computer-implemented method)を提供する。このコンピュータ実装の方法は幾つかの動作を含む。第１の動作においては、オペレーティングシステム（ＯＳ）から複数のタスクが互いに並列に受信される。第２の動作においては、複数のタスクの各々に関連付けられる状態データのセットがロードされる。第３の動作においては、複数のタスクの各々に関連付けられる状態データのセットに基づいて複数のタスクがシェーダコア内で実質的に並列に実行される。このコンピュータ実装の方法は、複数のタスクがシェーダコアへ発行されるようにスケジューリングすることを含んでいてもよい。
【００１６】
本発明の更なる実施形態は、処理ユニットへタスクを提供するためのコンピュータ実装の方法を提供する。この方法は幾つかの動作を含む。第１の動作においては、複数のタスクが１つ以上のアプリケーションから受信され、ここで各タスクは優先度種類の表示を含む。第２の動作においては、複数のタスク及び各タスクに関連付けられる優先度種類の表示が処理ユニットへ提供される。ある実施形態においては、コンピュータプログラム製品のコンピュータ可読記憶媒体上に記憶される命令は、その命令がコンピューティングデバイスによって実行される場合に、コンピューティングデバイスにこの方法を行わせてよい。
【００１７】
本発明の更なる特徴及び利点の他、本発明の種々の実施形態の構成及び動作は、添付の図面を参照して以下に詳細に説明される。尚、本発明はここに説明される特定の実施形態に限定されない。そのような実施形態は例示の目的のみのためにここに提示されている。追加的な実施形態はここに含まれる教示に基き関連分野を含めた当業者にとって明らかであろう。
【図面の簡単な説明】
【００１８】
ここに組み込まれ且つ出願書類の一部をなす添付の図面は本発明を示し、そして明細書と共に、本発明の原理を説明すること及び関連分野を含めた当業者が本発明を作りそして使用するのを可能にすることに更に役立つ。
【００１９】
【図１】図１は本発明の実施形態に従う例示的なコンピュータシステムを示すブロック図である。
【００２０】
【図２】図２は本発明の実施形態に従う例示的なＧＰＵのブロック図である。
【００２１】
【図３Ａ】図３Ａは本発明の実施形態に従いＧＰＵの仮想エンジンにタスクを発行するための例示的なワークフローを示すブロック図（その１）である。
【図３Ｂ】図３Ｂは本発明の実施形態に従いＧＰＵの仮想エンジンにタスクを発行するための例示的なワークフローを示すブロック図（その２）である。
【００２２】
【図４】図４は本発明の実施形態に従いＧＰＵの仮想エンジンにタスクを発行するための更に詳細な例示的なワークフローを示す図である。
【００２３】
【図５】図５は本発明の実施形態が実装され得る例示的なコンピュータシステムのブロック図である。
【００２４】
本発明の特徴及び利益は、図面と共に以下に記述される詳細な説明からより明らかになり、図面において同様の参照符号は全体を通して対応する要素を識別する。図面において、同様の参照数字は一般的に同一の、機能的に類似の、及び／又は構造的に類似の要素を示す。ある要素が最初に現れる図面は対応する参照番号の一番左の単一又は複数の桁によって示される。
【発明を実施するための形態】
【００２５】
I．概説
本発明の実施形態は、非同期タスクディスパッチを可能にする処理ユニット及びそのアプリケーションを提供する。以下の詳細な説明において、「１つの実施形態」、「ある実施形態」、「例示的実施形態」等に対する言及は、説明される実施形態が特定の特徴、構造又は特性を含んでいてよいが、全ての実施形態が必ずしも当該特定の特徴、構造又は特性を含む必要がなくてよいことを示している。また、そのような表現は必ずしも同じ実施形態を参照しているとは限らない。更に、特定の特徴、構造又は特性がある実施形態に関連して説明されている場合には、明示的に説明されていようとなかろうと、他の実施形態に関連して当該特定の特徴、構造又は特性を具現化することは当業者の知識の範囲内にあることと言える。
【００２６】
ある実施形態によると、処理ユニットは単一のシェーダコア上で具現化される複数の仮想エンジンを含む。各仮想エンジンは、データ並列処理タスク（例えばグラフィクス処理タスク及び一般計算タスク）を受信すると共にこれらのタスクを単一のシェーダコア上で独立して実行するように構成される。このようにして処理ユニットは、処理タスクの２つ以上の異なるストリーム、例えば低遅延処理タスクの第１のストリーム及び標準グラフィクス処理タスクの第２のストリームを、コンテクストスイッチを必要とせずに実行することができる。処理タスクの２つ以上の異なるストリームを実行することは、処理ユニットを停止し処理ユニットからデータを流出させることに関連するオーバーヘッドなしに、コンテクストスイッチの低遅延利益を提供する。事実、本発明の実施形態は、多重コンテクストが単一のシェーダコア内で存在し且つ（実質的に）同時に実行されることを可能にする。
【００２７】
例示のみを目的とし且つ限定を目的とせずに、本発明の実施形態はＧＰＵに関してここに説明されることになる。しかし、関連分野を含めた当業者であれば、本発明の実施形態は処理タスクの複数のストリームを受信する他の種類の処理ユニット、例えば中央処理ユニット及びコプロセッサ、にも適用され得ることを理解するであろう。これら他の種類のプロセッサは本発明の精神及び範囲内で検討される。
【００２８】
実施形態においては、ＧＰＵは複数のコマンドバッファを処理する。低遅延処理タスクは例えば第１のコマンドバッファ内に置かれてよく、また標準グラフィクス処理タスクは例えば第２のコマンドバッファ内に置かれてよい。ＧＰＵの第１の仮想エンジンは低遅延処理タスクをリトリーブし、またＧＰＵの第２の仮想エンジンは標準グラフィクス処理タスクをリトリーブする。各仮想エンジンからのタスクは次いで、実質的に互いに並列で単一のシェーダコアに発行される。
【００２９】
２つ以上の異なる仮想エンジンからの複数のタスクを単一のシェーダコアが（実質的に）同時に処理することを可能にするために、シェーダコアの資源は空間的且つ／又は時間的に区分化される。空間的な区分化を達成するためには、例えば、第１の仮想エンジンからの第１の（例えば低遅延の）タスクはシェーダコアの複数の処理要素（ＳＩＭＤ）の第１のサブセットへ発行され、また第２の仮想エンジンからの第２の（例えば標準グラフィクスの）タスクはシェーダコアの複数の処理要素（ＳＩＭＤ）の第２のサブセットへ発行される。時間的な区分化を達成するためには、例えば、第１及び第２のタスクは、シェーダコアの処理要素（ＳＩＭＤ）の一定の割合の時間を共有する。ある実施形態においては、ＧＰＵは、２つ以上の異なる仮想エンジンからのタスクをシェーダコア上での実行のためにスケジューリングするスケジューリングモジュールを含む。
【００３０】
本発明の実施形態に従いＧＰＵの資源を共有して複数の仮想エンジンを提供することは、特に大きなチップ上でのＧＰＵ資源の使用を改善する。タスクの２つ以上のストリームが単一のシェーダコアに発行され得るので、ＧＰＵが効率的に計算上の及び入力／出力の設備を使用することが可能になる。例えば、ＧＰＵシェーダコアの資源（例えばＳＩＭＤ）は、デマンド限界、優先度限界、及び／又はプリセット限界に基づいて並列タスク間で分割され得るが、任意の１つのタスクがＧＰＵの資源を（実質的に）完全に消費することを一時的に可能にする。
【００３１】
本発明の実施形態に従う例示的なＧＰＵの更なる詳細が以下に説明される。しかし、これらの詳細を提供するのに先立ちそのようなＧＰＵが実装されるであろう例示的なシステムを説明することは有用である。
【００３２】
II．例示的なシステム
図１は実施形態に従うコンピューティングシステム１００のブロック図である。コンピューティングシステム１００は、ＣＰＵ１０２、ＧＰＵ１１０を含み、そして随意的にコプロセッサ１１２を含んでいてよい。図１の実施形態においては、ＣＰＵ１０２及びＧＰＵ１１０が別個のブロックとして示されている。これは例示のみを目的としており且つ限定を目的としていない。関連分野を含めた当業者であれば、ＣＰＵ１０２及びＧＰＵ１１０は別々のパッケージ内に含まれてよく又は単一のパッケージ若しくは集積回路内で結合されていてよいことを理解するはずである。
【００３３】
コンピューティングシステム１００はまた、ＣＰＵ１０２、ＧＰＵ１１０及びコプロセッサ１１２によってアクセスされてよいシステムメモリ１０４を含む。実施形態においては、コンピューティングシステム１００は、スーパーコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、ビデオゲームコンソール、埋め込みデバイス、携帯デバイス（例えば携帯電話、スマートフォン、ＭＰ３プレイヤ、カメラ、ＧＰＳデバイス等）、又はＧＰＵを含み若しくはＧＰＵを含むように構成される何らかの他のデバイスを備えていてよい。
【００３４】
ＧＰＵ１１０は、特定の特別の機能（例えばグラフィクス処理タスク及びデータ並列一般計算タスク）を、ＣＰＵ１０２がソフトウエアにおいてそれらを行い得るであろうよりも通常は高速に行うことによって、ＣＰＵ１０２を支援する。ＧＰＵ１１０は、単一のシェーダコアの資源を共有する複数の仮想エンジンを含む。このようにして、ＧＰＵ１１０の複数の仮想エンジンは、複数のタスクを実質的に並列で実行することができる。実施形態においては、ＧＰＵ１１０はチップセット及び／又はＣＰＵ１０２内に集積化されていてよい。ＧＰＵ１１０の追加的な詳細は後で提供される。
【００３５】
コプロセッサ１１２もまたＣＰＵ１０２を支援する。コプロセッサ１１２は、限定はされないが、浮動小数点コプロセッサ、ＧＰＵ、ネットワーキングコプロセッサ、並びに関連する分野を含めて当業者に明らかであろうような他の種類のコプロセッサ及びプロセッサを含んでいてよい。
【００３６】
ＧＰＵ１１０及びコプロセッサ１１２は、ＣＰＵ１０２及びシステムメモリとバス１１４を介して通信する。バス１１４は、周辺要素インタフェース(peripheral component interface)（ＰＣＩ）バス、アクセラレーテッドグラフィクスポート(accelerated graphics port)（ＡＧＰ）バス、ＰＣＩエクスプレス(PCI Express)（ＰＣＩＥ）バス、又は現在利用可能であり若しくは将来開発される別の種類のバスを含めてコンピュータシステムにおいて用いられる任意の種類のバスであってよい。
【００３７】
システムメモリ１０４に加えて、コンピューティングシステム１００はローカルメモリ１０６及びローカルメモリ１０８を更に含む。ローカルメモリ１０６はＧＰＵ１１０に結合されており、またバス１１４に結合されていてもよい。ローカルメモリ１０８はコプロセッサ１１２に結合されており、またバス１１４に結合されていてもよい。ローカルメモリ１０６及び１０８は、特定のデータ（例えば頻繁に用いられるデータ）への、そのデータがシステムメモリ１０４内に記憶されていたとした場合に可能であろうよりも高速なアクセスを提供するために、それぞれＧＰＵ１１０及びコプロセッサ１１２に利用可能である。
【００３８】
ある実施形態においては、ＧＰＵ１１０及びコプロセッサ１１２は、ＣＰＵ１０２と並列に命令をデコードし、そしてそれらを対象としている命令のみを実行する。別の実施形態においては、ＧＰＵ１１０及びコプロセッサ１１２を対象としている命令をＣＰＵ１０２がそれぞれのコマンドバッファへ送る。
【００３９】
図１には具体的に示されていないが、コンピューティングシステム１００は、ディスプレイデバイス（例えば陰極線管、液晶ディスプレイ、プラズマディスプレイ等）を含み又はディスプレイデバイスに接続されていてもよい。ディスプレイデバイスは、コンテンツをユーザに表示するために用いられる（例えば、コンピューティングシステム１００がコンピュータ、ビデオゲームコンソール又は携帯デバイスを備えている場合）。
【００４０】
III．例示的なプロセッサ
上述したように、ＧＰＵ１１０はシェーダコア上で具現化される複数の仮想エンジンを含む。各仮想エンジンは、ＯＳスケジューラによって提供される処理タスクのストリームを実行するように構成され、ここでは所与のストリームの各処理タスクは、複数の個別の処理スレッドを含んでいてよい。ＧＰＵ１１０は複数の仮想エンジンを含むので、ＧＰＵ１１０は、コンテクストスイッチを必要とせずに、ＯＳスケジューラからの処理タスクの異なるストリームを実行することができる。事実、実施形態においては、ＧＰＵ１１０は、複数の異なるコンテクストに対応する複数のストリームからのタスクを、タスク間でシェーダコアの資源を共有することによって、単一のシェーダコア内で（実質的に）同時に実行する。
【００４１】
図２はＧＰＵ１１０の例示的なハードウエア要素を示すブロック図である。図２を参照すると、ＧＰＵ１１０は、コマンドプロセッサ２３０、入力論理（頂点解析器２０８、走査変換器２１２及び調整論理(arbitration logic)２２２を含む）、シェーダコア２１４、出力論理２２４、及びメモリシステム２１０を含む。これらの要素の各々は以下に説明される。
【００４２】
Ａ．コマンドプロセッサ
コマンドプロセッサ２３０は、ＯＳスケジューラによって満たされる１つ以上のコマンドバッファからタスク（例えばグラフィクス処理タスク及び一般計算タスク）を受信する。図３に示されるように、コマンドプロセッサ２３０は、ＧＰＵ１１０の資源を共有する複数の仮想エンジンを含む。コマンドプロセッサ２３０の異なる仮想エンジンは異なる種類のタスクを処理する。
【００４３】
図２の実施形態においては、コマンドプロセッサ２３０は、第１の背景エンジン２０２Ａ、第２の背景エンジン２０２Ｂ、実時間低遅延エンジン２０２Ｃ、主３Ｄエンジン２０２Ｄ、及び低遅延３Ｄエンジン２０２Ｅを含む。背景エンジン２０２は低優先度タスクを処理する。しかし、コマンドプロセッサ２３０は他の種類の仮想エンジンを含んでいてもよいことが理解されるべきである。背景エンジン２０２は、他の仮想エンジンがＧＰＵ１１０の資源を使用していない場合にのみＧＰＵ１１０の資源を引き継ぐ。実時間低遅延エンジン２０２Ｃは、高優先度タスクを処理するためにＧＰＵ１１０の資源への優先アクセスを有している。主３Ｄエンジン２０２Ｄは標準グラフィクス処理タスクを処理し、また低遅延３Ｄエンジン２０２Ｅは高優先度グラフィクス処理タスクを処理する。低遅延３Ｄエンジン２０２Ｅは、ＧＰＵ１１０のグラフィクス処理資源への優先アクセスを有している。
【００４４】
ＧＰＵ１１０のシェーダコア２１４へ発行されるのに先立ち、コマンドプロセッサ２３０からのタスクは入力論理に供給される。
【００４５】
Ｂ．入力論理
入力論理は、どのタスクがシェーダコア２１４へ発行されるのかを調整する(arbitrates)。ある実施形態においては、入力論理は、シェーダコア２１４の資源の利用可能性及び種々のタスクの相対的な優先度に基づいてタスクをシェーダコア２１４内での実行のために経路付けるソフトウエアルーチンを実装している。図３の実施形態においては、入力論理は、グラフィクス前処理論理（シェーダコア２１４への発行のためにグラフィクス処理タスクを準備する）及び調整論理２２２（タスクをシェーダコア２１４へ供給する）を含む。
【００４６】
グラフィクス前処理論理は、頂点解析器２０８及び走査変換器２１２を含む。主３Ｄエンジン２０２Ｄ及び低遅延３Ｄエンジン２０２Ｅからのタスクがグラフィクス前処理論理へ送られる。先入れ先出し（ＦＩＦＯ）バッファ２０４Ａは主３Ｄエンジン２０２Ｄからのタスクを受信し、またＦＩＦＯバッファ２０４Ｂは低遅延３Ｄエンジン２０２Ｅからのタスクを受信する。マルチプレクサ２０６は、ＦＩＦＯバッファ２０４の１つからのタスクを頂点解析器２０８へ供給する。
【００４７】
頂点解析器２０８は、グラフィクス処理タスク及び／又は一般計算タスクに関連するシェーダプログラムを識別し、そして利用可能になるはずの入力データ及び出力データに基づいて各シェーダプログラムがシェーダコア２１４においていつ着手され得るのかをスケジューリングする。着手のためにシェーダプログラムをスケジューリングすることに加えて、頂点解析器２０８はまた、頂点バッファへのポインタを生成し、そして接続性データ(connectivity data)を含む。ポインタは頂点バッファから頂点を読み出すために用いられる。頂点が既に処理されてしまっており且つ頂点バッファ内に記憶されている場合、頂点解析器２０８はその頂点を頂点バッファから読み出してよく、その結果、頂点は１回だけ処理される。接続性データは、複数の頂点が互いにどのように適合してプリミティブ（例えば三角形）を作成するのかを指定し、その結果、プリミティブは適切にラスタライズされ(rasterized)得る。
【００４８】
頂点解析器２０８は、グラフィクス処理タスクを走査変換器２１２へ送り、また一般計算タスクを調整論理２２２へ送る。走査変換器２１２は、プリミティブを横断して(traverse)、シェーダコア２１４によって処理されるべき画素を決定する。走査変換器２１２は次いで、画素を調整論理２２２へ送る。調整論理２２２は、コマンドプロセッサ２３０の異なる仮想エンジンからのタスクをシェーダコア２１４へ供給する。
【００４９】
Ｃ．シェーダコア
シェーダコア２１４は、ＧＰＵ１１０に供給されるタスクを実行するための複数の処理要素２２０を含む。処理要素２２０はＳＩＭＤデバイスとして配置され、シェーダコア２１４が複数のデータ並列処理タスクを（実質的に）同時に実行することを可能にしている。コマンドプロセッサ２３０の複数の仮想エンジンからのタスクをシェーダコア２１４が（実質的に）同時に処理することを可能にするために、シェーダコア２１４の処理要素２２０は空間的に且つ／又は時間的に区分化されている。
【００５０】
空間的な区分化を達成するためには、処理要素２２０の異なるサブセットが異なるタスクを実行するように構成される。例えば、第１の仮想エンジン（例えば実時間低遅延エンジン２０２Ｃ）からの第１の（例えば低遅延の）タスクはシェーダコア２１４の処理要素２２０の第１のサブセットへ発行されてよく、また第２の仮想エンジン（例えば主３Ｄエンジン２０２Ｄ）からの第２の（例えば標準グラフィクスの）タスクはシェーダコア２１４の処理要素２２０の第２のサブセットへ発行されてよい。処理要素２２０の各サブセットは次いで、それが受信したタスクを独立して実行する。
【００５１】
時間的な区分化を達成するためには、異なる仮想エンジンの異なる処理タスクは、シェーダコア２１４の処理要素２２０の一定の割合の時間を共有する。上述の例からは、第１及び第２のタスクがシェーダコア２１４の処理要素２２０の一定の割合の時間を共有する。
【００５２】
シェーダコア２１４はまた、ＯＳスケジューラによって供給される処理タスクを実行するために、処理要素２２０によって用いられるデータを記憶する１つ以上のローカルデータシェア（ＬＤＳ）２２８を含む。ＬＤＳ２２８は、シェーダコア２１４によって実行されるべき各タスクに関連付けられる状態データを記憶する。ある実施形態においては、ＬＤＳ２２８は複数の異なるコンテクストの状態データを記憶して、コンテクストスイッチを必要とせずに、複数の異なるコンテクストに関連付けられるＯＳスケジューラからの複数の異なるタスクをシェーダコア２１４が（実質的に）同時に実行することを可能にしている。
【００５３】
処理要素２２０の中間結果は、シェーダコア２１４において再処理されてよい。例えば処理要素２２０は、複数の異なるシェーダプログラ（例えば幾何シェーダ、頂点シェーダ、画素シェーダ、テセレーション(tessellation)シェーダ等）を実装して、ＯＳスケジューラによって供給される単一のグラフィクス処理タスクを完了してよい。異なるシェーダプログラムの中間結果は、頂点解析器２０８及び／又は走査変換器２１２へ送り戻され、そして最終的には処理要素２２０に再循環させられる。ＯＳスケジューラによって提供されるタスクを処理要素２２０が完了した後に、最終的な結果は出力論理２２４へ供給される。
【００５４】
Ｄ．出力論理
出力論理２２４は複数のバッファを含み、これらバッファは書き込み結合(write-combining)キャッシュ、深さバッファ及び色バッファを含む。書き込み結合キャッシュは、オフチップメモリへ書き込まれるべきデータを結合して、オフチップメモリへの効率的なアクセスを可能にする。深さバッファはｚ試験のために結果をバッファリングする。色バッファは色混合のために結果をバッファリングする。書き込み結合キャッシュ、深さバッファ及び色バッファに関連する処理を行った後に、出力論理２２４は結果をメモリシステム２１０へ供給する。
【００５５】
Ｅ．メモリシステム
メモリシステム２１０は、１つ以上のオンチップキャッシュ及び１つ以上のオフチップメモリインタフェースを含む。メモリシステム２１０は、コマンドプロセッサ２３０、頂点解析器２０８、走査変換器２１２、シェーダコア２１４及び出力論理２２４の各々に結合される。これらのうちの任意の要素がシェーダプログラムを実行するためデータを必要とすると、要求がメモリシステム２１０のオンチップキャッシュへ作成される。オンチップキャッシュ内でヒットがある（即ち要求されたデータがオンチップキャッシュ内にある）場合、データはそれを要求した要素へと転送される。オンチップキャッシュ内でミスがある（即ち要求されたデータがオンチップキャッシュ内にない）場合、要求されたデータは、メモリシステム２１０のオフチップメモリインタフェースを介してオフチップメモリ（例えば図１のシステムメモリ１０４）からリトリーブされる必要がある。オフチップメモリからデータがリトリーブされた後、データはそれを要求した要素へと転送される。加えて、データは、関連分野を含めた当業者によく知られているキャッシュメモリ技術を用いてオンチップキャッシュ内に記憶される。
【００５６】
IV．例示的な動作
ＧＰＵ１１０は、ＯＳスケジューラによって供給される処理タスクの複数のストリームを実行するように構成される。処理タスクの複数のストリームは、単一のアプリケーション又は２つ以上のアプリケーションによって生成されてよい。
【００５７】
図３Ａはシェーダコア２１４が処理タスクの２つ（又は３つ以上）の異なるストリームを（実質的に）同時に実行する例を示しており、ここでは処理タスクのストリームは単一のアプリケーション３０２によって生成される。アプリケーション３０２は、例えば、グラフィクス処理タスクを生成するエンドユーザアプリケーション（例えばビデオゲームアプリケーション、コンピュータ支援設計（ＣＡＤ）アプリケーション等）、又はＧＰＵ上で実行されるべき一般計算タスク（例えば数学的アルゴリズム、物理的シミュレーション等）を生じさせるエンドユーザアプリケーションであってよい。図３Ａを参照すると、アプリケーション３０２は第１のタスク３０８Ａ及び第２のタスク３０８Ｂを生成する。アプリケーション３０２が生成する各タスク３０８は優先度種類を含む。例えば、アプリケーション３０２は、第１のタスク３０８Ａが低遅延高優先度タスクであり且つ第２のタスク３０８Ｂが標準優先度タスクであることを表示してよい。ＯＳスケジューラ３１０は、アプリケーション３０２によって生成されたタスクを受信し、そしてタスクをＧＰＵ１１０の異なる仮想エンジンへ発行する。例えばＯＳスケジューラ３１０は、第１のタスク３０８Ａを第１の仮想エンジン３１２Ａへ発行し、また第２のタスク３０８Ｂを第２の仮想エンジン３１２Ｂへ発行する。各仮想エンジン３１２からのタスクは次いで、ＧＰＵ１１０のシェーダコア２１４によって（実質的に）同時に実行される。
【００５８】
図３Ｂはシェーダコア２１４が処理タスクの２つ（又は３つ以上）の異なるストリームを（実質的に）同時に実行する例を示しており、ここでは各ストリームは異なるアプリケーションによって生成される。図３Ｂに示されるように、第１の処理タスク３３０Ａは第１のアプリケーション３０２Ａによって生成され、また第２の処理タスク３３０Ｂは第２のアプリケーション３０２Ｂによって生成される。各タスク３３０は優先度種類を含む。ＯＳスケジューラ３１０はタスク３３０を受信し、そしてそれらをＧＰＵ１１０の異なる仮想エンジンへ発行する。例えばＯＳスケジューラ３１０は、第１のタスク３３０Ａを第１の仮想エンジン３３２Ａへ発行し、また第２のタスク３３０Ｂを第２の仮想エンジン３３２Ｂへ発行する。各仮想エンジン３３２からのタスクは次いで、ＧＰＵ１１０のシェーダコア２１４によって（実質的に）同時に実行される。
【００５９】
図３Ａ及び３Ｂの例においては、ＧＰＵ１１０はタスク及び優先度種類の両方を受信する。優先度種類をＧＰＵ１１０に提供するために、アプリケーション３０２はビットをＡＰＩに提供して各タスクの優先度種類を表示する。ＡＰＩはこの情報をＧＰＵ１１０のドライバに順に提供する。ある実施形態においては、ＧＰＵ１１０は、シェーダコア２１４上で実行されるべきタスクを、アプリケーションによって指定される優先度種類に少なくとも部分的に基づいてスケジューリングするスケジューリングモジュールを含む。
【００６０】
図３Ａ及び３Ｂの例は処理タスクの２つのストリームのみを実行するシェーダコア２１４を示しているが、これは例示のみを目的としており且つ限定を目的としていない。シェーダコア２１４は１つ以上のアプリケーションによって生成される処理タスクの２つ以上のストリームを（実質的に）同時に実行してよいことが理解されるべきである。
【００６１】
例えば、図４はコンピューティングシステム（例えばコンピューティングシステム１００）上で実行している１つ以上のアプリケーションとそのコンピューティングシステム内に含まれるＧＰＵ１１０との間でのソフトウエア及びハードウエアの種々の層を示す例示的なワークフローである。図４の例では、２つの異なる種類の処理ユニット、即ちＣＰＵ１０２及びＧＰＵ１１０がある。また、２つのアプリケーション、即ち第１のアプリケーション４０２Ａ及び第２のアプリケーション４０２Ｂがコンピュータシステム上で実行中である。ＣＰＵ１０２はアプリケーション４０２によって必要とされる主たる機能性を提供する。例えば、ＣＰＵ１０２は複数のコア４１２Ａ〜Ｎを含んでいてよく、ここでは第１のアプリケーション４０２Ａは主として第１のコア４１２Ａ上で動作し、また第２のアプリケーション４０２Ｂは主として第２のコア４１２Ｎ上で動作する。
【００６２】
動作の経過の間、アプリケーション４０２は、ＣＰＵ１０２上でよりはむしろＧＰＵ１１０上で実行されるべき複数のタスク４０４Ａ〜Ｄを生成してよい。タスク４０４は、ＣＰＵ１０２がソフトウエアにおいて実行し得たであろうよりもＧＰＵ１１０がおそらく高速に実行し得るデータ並列処理タスク（例えばグラフィクス処理タスク、一般計算タスク等）を備えていてよい。各タスク４０４は、アプリケーション４０２によって指定されるような優先度種類の表示を含む（図３Ａ及び３Ｂに示されるタスクに含まれる優先度種類と同様）。従来のシステムにおいては、ＯＳスケジューラはタスク４０４を単一のコマンドバッファへシリアルに供給していたであろうし、また従来のＧＰＵはタスクをシリアルに処理していたであろう。このような従来のシステムとは異なり、スケジューラ３１０は、アプリケーション４０２によって指定される優先度種類に基づいて、各タスク４０４を複数のコマンドバッファ４２０Ａ〜Ｎの１つへ供給する。例えばＯＳスケジューラ３１０は、第１の種類のタスク（例えば高優先度タスク）を第１のコマンドバッファ４２０Ａへ供給し、第２の種類のタスク（例えばグラフィクス処理タスク）を第２のコマンドバッファ４２０Ｂへ供給し、以下同様である。
【００６３】
ＧＰＵ１１０は複数の仮想エンジン４３２Ａ〜Ｎを含み、各々はコマンドバッファ４２０Ａ〜Ｎの１つをサービスするように構成される。例えば、第１の仮想エンジン４３２Ａは第１のコマンドバッファ４２０Ａをサービスするように構成され、第２の仮想エンジン４３２Ｂは第２のコマンドバッファ４２０Ｂをサービスするように構成され、そして第Ｎの仮想エンジン４３２Ｎは第Ｎのコマンドバッファ４２０Ｎをサービスするように構成される。仮想エンジン４３２からのタスクは次いで、上述したようにシェーダコア２１４によって（実質的に）同時に実行される。ある実施形態においては、ＧＰＵ１１０のスケジューリングモジュール４３４は、（i）アプリケーション４０２によって指定される優先度種類、（ii）仮想エンジン４３２によって処理される複数のタスク４０４の間での相対的優先度、及び（iii）シェーダコア２１４内の資源の利用可能性、の条件に少なくとも基づいて、シェーダコア２１４によって実行されるべきタスクをスケジューリングする。例えばスケジューリングモジュール４３４は、デマンド限界、優先度限界、及び／又はプリセット限界に基づいて並列タスク４０４間でシェーダコア２１４の資源を分割してよい一方で、任意の１つのタスク４０４がＧＰＵ１１０の資源を完全に消費することを一時的に可能にする。シェーダコア２１４内で処理タスクの２つ以上の異なるストリームを実行することによって、ＧＰＵ１１０は、コンテクストスイッチに関与するデータを記憶すること、交換すること、及び流出させることに伴うオーバーヘッドなしに、コンテクストスイッチの低遅延利益を提供する。
【００６４】
V．例示的なコンピュータ実装
本発明の実施形態は、ハードウエア、ソフトウエア又はそれらの組み合わせを用いて実装されてよく、また１つ以上のコンピュータシステム又は他の処理システム内に実装されてよい。コンピュータシステム５００の例が図５に示されている。
【００６５】
コンピュータシステム５００は１つ以上のプロセッサ、例えばプロセッサ５０４を含む。プロセッサ５０４は汎用プロセッサ（例えばＣＰＵ１０２）又は専用プロセッサ（例えばＧＰＵ１１０）であってよい。プロセッサ５０４は通信基盤５０６（例えば通信バス、クロスオーバーバー又はネットワーク）に接続される。種々のソフトウエア実施形態がこの例示的なコンピュータシステムに関して説明される。この明細書を読んだ後に、他のコンピュータシステム及び／又はアーキテクチャを用いて本発明をどのように実装するのかが、関連分野を含めた当業者にとって明らかになるはずである。
【００６６】
コンピュータシステム５００は、通信基盤５０６からの（又は図示しないフレームバッファからの）グラフィクスデータ、テキストデータ及び他のデータをディスプレイユニット５３０上での表示のために転送するディスプレイインタフェース５０２を含む。
【００６７】
コンピュータシステム５００はまた、主メモリ５０８、望ましくはランダムアクセスメモリ（ＲＡＭ）を含み、そして補助メモリ５１０を含んでいてもよい。補助メモリ５１０は例えば、ハードディスクドライブ５１２及び／又はリムーバブル記憶ドライブ５１４を含んでいてよく、フロッピー（登録商標）ディスクドライブ、磁気テープドライブ、光学ディスクドライブ等を代表する。リムーバブル記憶ドライブ５１４は周知の方法でリムーバブル記憶ユニット５１８から読み出し且つ／又はリムーバブル記憶ユニット５１８へ書き込みする。リムーバブル記憶ユニット５１８はフロッピー（登録商標）ディスク、磁気テープ、光学ディスク等を代表し、リムーバブル記憶ドライブ５１４によって読み出され且つ書き込まれる。理解されるであろうように、リムーバブル記憶ユニット５１８はコンピュータソフトウエア及び／又はデータが既に記憶されたコンピュータ使用可能記憶媒体を含む。
【００６８】
代替的な実装においては、補助メモリ５１０は、コンピュータプログラム又は他の命令がコンピュータシステム５００にロードされることを可能にするための他の同様のデバイスを含むことができる。そのようなデバイスは例えばリムーバブル記憶ユニット５２２及びインタフェース５２０を含み得る。そのような例は、プログラムカートリッジ及びカートリッジインタフェース（ビデオゲームデバイスにおいて見られるようなもの）、リムーバブルメモリチップ（例えば消去可能プログラム可能リードオンリメモリ（ＥＰＲＯＭ）又はプログラム可能リードオンリメモリ（ＰＲＯＭ））及び関連するソケット、並びにソフトウエア及びデータがリムーバブル記憶ユニット５２２からコンピュータシステム５００へ転送されることを可能にする他のリムーバブル記憶ユニット５２２及びインタフェース５２０を含み得る。
【００６９】
コンピュータシステム５００はまた通信インタフェース５２４を含むことができる。通信インタフェース５２４は、ソフトウエア及びデータがコンピュータシステム５００と外部デバイスの間で転送されることを可能にする。通信インタフェース５２４の例は、モデム、ネットワークインタフェース（例えばイーサネット（登録商標）カード）、通信ポート、パーソナルコンピュータメモリカード国際協会(Personal Computer Memory Card International Association)（ＰＣＭＣＩＡ）スロット及びカード等を含み得る。通信インタフェース５２４を介して転送されるソフトウエア及びデータは、通信インタフェース５２４によって受信されることが可能な電子的信号、電磁気的信号、光学的信号又は他の信号であってよい信号５２８の形態にある。これらの信号は通信パス（例えばチャネル）５２６を介して通信インタフェース５２４へ供給される。このチャネル５２６は信号を伝え、そしてワイヤ若しくはケーブル、光ファイバ、電話線、携帯電話リンク、ラジオ周波数（ＲＦ）リンク又は他の通信チャネルを用いて実装され得る。
【００７０】
この文書では、「コンピュータ可読記憶媒体」の用語は、リムーバブル記憶ドライブ５１４、及びハードディスクドライブ５１２内に組み込まれるハードディスクを一般的には参照して用いられる。これらのコンピュータプログラム製品は、コンピュータシステム５００にソフトウエアを提供する。
【００７１】
コンピュータプログラム（コンピュータ制御論理とも称される）は主メモリ５０８及び／又は補助メモリ５１０内に記憶される。コンピュータプログラムはまた、通信インタフェース５２４を介して受信されてもよい。そのようなコンピュータプログラムは、実行されるときに、ここで論じられるような本発明の特徴をコンピュータシステム５００が行うことを可能にする。特に、コンピュータプログラムは、実行されるときに、本発明の特徴をプロセッサ５０４が行うことを可能にする。従って、そのようなコンピュータプログラムはコンピュータシステム５００の制御器を代表する。
【００７２】
ある実施形態においては、ソフトウエアは、コンピュータプログラム製品内に記憶されていてよく、そしてリムーバブル記憶ドライブ５１４、ハードドライブ５１２、又は通信インタフェース５２４を用いてコンピュータシステム５００内にロードされてよい。制御論理（ソフトウエア）は、プロセッサ５０４によって実行されるときに、ここに説明されるような本発明の実施形態の機能をプロセッサ５０４に行わせる。
【００７３】
VI．例示的なソフトウエア実装
処理ユニット（例えばＣＰＵ１０２及び／又はＧＰＵ１１０）のハードウエア実装に加えて、そのような処理ユニットはまた、例えばソフトウエア（例えばコンピュータ可読プログラムコード）を記憶するように構成されるコンピュータ可読媒体内に配置されるソフトウエアにおいて具現化されてもよい。プログラムコードは、（i）ここに開示されるシステムの機能及び技術（例えばＧＰＵ１１０にタスクを供給すること、ＧＰＵ１１０内でタスクをスケジューリングすること、ＧＰＵ１１０内でタスクを実行すること、等）、（ii）ここに開示されるシステムの製造及び技術（例えばＧＰＵ１１０の製造）又は（iii）ここに開示されるシステムの機能及び製造並びに技術の組み合わせ、の実施形態を含めて本発明の実施形態の実施可能性を生じさせる。
【００７４】
このことは、例えば、一般的なプログラミング言語（例えばＣ又はＣ＋＋）、ベリログ(Verilog)ＨＤＬ、ＶＨＤＬ、アルテラ(Altera)ＨＤＬ（ＡＨＤＬ）等を含むハードウエア記述言語(hardware description languages)（ＨＤＬ）、あるいは他の利用可能なプログラミング及び／又は回路図等（schematic）キャプチャツール(capture tools)（例えば回路キャプチャツール）の使用を通して達成され得る。プログラムコードは、半導体、磁気ディスク、又は光学ディスク（例えばＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ）を含む任意の既知のコンピュータ可読媒体内に配置され得る。従って、コードは、インターネット及びそれと同等のもの(the Internet and internets)を含む通信ネットワークを介して伝送され得る。上述したシステム及び技術によって達成される機能及び／又は提供される構造は、プログラムコードにおいて具現化されるコア（例えばＧＰＵコア）内で表現することができ、また集積回路の生産の一部としてハードウエアに変換されてよいことが理解される。
【００７５】
VII．結論
概要及び要約の欄ではなく詳細な説明の欄が特許請求の範囲を解釈するために用いられることを意図されていることが理解されるべきである。概要及び要約の欄は、発明者によって検討されているような本発明の１つ以上であるが全てではない例示的な実施形態を記述することができ、従って、本発明及び添付の特許請求の範囲を限定することを意図されるものでは決してない。
【図１】
2013504131.tif 000003
【図２】
2013504131.tif 000004
【図３Ａ】
2013504131.tif 000005
【図３Ｂ】
2013504131.tif 000006
【図４】
2013504131.tif 000007
【図５】
2013504131.tif 000008
【国際調査報告】
2013504131.tif 000009
2013504131.tif 000010
2013504131.tif 000011
2013504131.tif 000012