(57)【要約】グラフィックス処理装置（ＧＰＵ）コプロセッサを実装するシステム、装置及び方法が開示される。ＧＰＵコプロセッサは、入力データフローイベントに基づいてサブウェーブプロシージャを自己スケジューリングする機能を有するＳＩＭＤユニットを含む。ホストプロセッサは、ＧＰＵコプロセッサ宛てのメッセージをキューに送信する。ＧＰＵコプロセッサは、キュー内の第１メッセージを検出したことに応じて、第１サブタスクを、実行するためにスケジューリングする。ＧＰＵコプロセッサは、ベクトル汎用レジスタ（ＶＧＰＲ）ファイルのためのレーン間クロスバー及びレーン内バイアスインデクシングメカニズムを含む。ＶＧＰＲファイルは、２つのファイルに分割されている。第１ＶＧＰＲファイルは、１つの読み出しポートと１つの書き込みポートとを有する、より大きなレジスタファイルである。第２ＶＧＰＲファイルは、複数の読み出しポートと１つの書き込みポートとを有する、より小さなレジスタファイルである。第２ＶＧＰＲは、クロックサイクル毎に複数の命令を同時発行する機能を導入する。【選択図】図１０
2019536169.tif 000002
【特許請求の範囲】
【請求項１】
キューと、
グラフィックス処理装置（ＧＰＵ）と、
ＧＰＵコプロセッサと、
前記ＧＰＵコプロセッサ宛てのメッセージを前記キューに送信するように構成されたホストプロセッサと、を備え、
前記ＧＰＵコプロセッサは、
前記キューを監視し、
前記キュー内の第１メッセージを検出したことに応じて、パーシステントスレッドである第１サブタスクを、実行するためにスケジューリングするように構成されている、
システム。
【請求項２】
前記ＧＰＵコプロセッサは、
前記第１メッセージを検出したことに応じて、前記第１メッセージについてイベントテーブルのルックアップを実行し、
前記イベントテーブルを使用して、前記第１メッセージを第１イベントにマッピングし、
前記第１メッセージを前記第１イベントにマッピングしたことに応じて、前記第１サブタスクを、実行するためにスケジューリングし、
計算リソースが利用可能な場合に後続のメッセージを処理し続けるようにさらに構成されている、
請求項１のシステム。
【請求項３】
前記ＧＰＵコプロセッサは、
前記キュー内の第２メッセージを検出し、
前記イベントテーブルを使用して、前記第２メッセージを第２イベントにマッピングし、
前記第２メッセージを前記第２イベントにマッピングしたことに応じて、第１行列に対して行列転置演算を実行するために第２タスクをスケジューリングし、
クロスバーを利用して、前記第１行列内のデータ項目を回転させて第２行列を生成し、
複数のバイアスインデクシング操作を利用して前記第２行列内のデータ項目を並べ替えて、第３行列を生成し、
前記クロスバーを利用して前記第３行列内のデータ項目を回転させて、前記第１行列の転置バージョンである第４行列を生成するようにさらに構成されている、
請求項２のシステム。
【請求項４】
前記ＧＰＵコプロセッサは、
１つの読み出しポートと１つの書き込みポートとを有する第１ベクトル汎用レジスタ（ＶＧＰＲ）ファイルと、
複数の読み出しポートと１つの書き込みポートとを有する第２ＶＧＰＲファイルと、
単一命令複数データ（ＳＩＭＤ）ユニットと、
バイアスインデックスアクセスブロックと、
クロスバーと、を備え、
前記ＧＰＵコプロセッサは、単一クロックサイクルで複数のオペランドを前記第２ＶＧＰＲファイルから前記ＳＩＭＤユニットに伝達するように構成されている、
請求項１のシステム。
【請求項５】
前記第１ＶＧＰＲファイルは、マルチバンクアレイであり、
前記ＧＰＵコプロセッサは、前記バイアスインデックスアクセスブロックを使用して、単一クロックサイクルで前記第１ＶＧＰＲファイルの別々のバンクの異なるワードラインにアクセスするように構成されている、
請求項４のシステム。
【請求項６】
前記システムは、ＧＰＵをさらに備え、
前記ホストプロセッサは、ビデオストリームのためにグラフィックス処理タスクを前記ＧＰＵにスケジューリングし、
前記ホストプロセッサは、前記ビデオストリームのために音声処理タスクを実行するように前記ＧＰＵコプロセッサをプログラムする、
請求項１のシステム。
【請求項７】
前記ＧＰＵコプロセッサは、スカラユニットとベクトルユニットとをさらに備え、
前記スカラユニットは、
メッセージについて前記キューを監視し、
前記ベクトルユニット上で実行するサブタスクをスケジューリングするように構成されている、
請求項１のシステム。
【請求項８】
グラフィックス処理装置（ＧＰＵ）コプロセッサ宛てのメッセージをホストプロセッサからキューに送信することと、
前記ＧＰＵコプロセッサによって、前記キューを監視すること、
前記ＧＰＵコプロセッサによって、前記キュー内の第１メッセージを検出したことに応じて、パーシステントスレッドである第１サブタスクを、実行するためにスケジューリングすることと、を含む、
方法。
【請求項９】
前記第１メッセージを検出したことに応じて、前記第１メッセージについてイベントテーブルのルックアップを実行することと、
前記イベントテーブルを使用して、前記第１メッセージを第１イベントにマッピングすることと、
前記第１メッセージを前記第１イベントにマッピングしたことに応じて、前記第１サブタスクを、実行するためにスケジューリングすることと、
計算リソースが利用可能な場合に後続のメッセージを処理し続けることと、をさらに含む、
請求項８の方法。
【請求項１０】
前記キュー内の第２メッセージを検出することと、
前記イベントテーブルを使用して、前記第２メッセージを第２イベントにマッピングすることと、
前記第２メッセージを前記第２イベントにマッピングしたことに応じて、第１行列に対して行列転置演算を実行するために第２タスクをスケジューリングすることと、
クロスバーを利用して、前記第１行列内のデータ項目を回転させて第２行列を生成することと、
複数のバイアスインデクシング操作を利用して前記第２行列内のデータ項目を並べ替えて、第３行列を生成し、
前記クロスバーを利用して前記第３行列内のデータ項目を回転させて、前記第１行列の転置バージョンである第４行列を生成することと、をさらに含む、
請求項９の方法。
【請求項１１】
前記ＧＰＵコプロセッサは、
１つの読み出しポートと１つの書き込みポートとを有する第１ベクトル汎用レジスタ（ＶＧＰＲ）ファイルと、
複数の読み出しポートと１つの書き込みポートとを有する第２ＶＧＰＲファイルと、
単一命令複数データ（ＳＩＭＤ）ユニットと、
バイアスインデックスアクセスブロックと、
クロスバーと、を備え、
前記方法は、単一クロックサイクルで複数のオペランドを前記第２ＶＧＰＲファイルから前記ＳＩＭＤユニットに伝達することをさらに含む、
請求項８の方法。
【請求項１２】
前記第１ＶＧＰＲファイルは、マルチバンクアレイであり、
前記方法は、前記バイアスインデックスアクセスブロックを使用して、単一クロックサイクルで前記第１ＶＧＰＲファイルの別々のバンクの異なるワードラインにアクセスすることをさらに含む、
請求項１１の方法。
【請求項１３】
前記システムは、ＧＰＵをさらに備え、
前記方法は、
マルチメディアプロセスのためにビデオ処理タスクを前記ＧＰＵにスケジューリングすることと、
前記マルチメディアプロセスのために音声処理タスクを実行するように前記ＧＰＵコプロセッサをプログラムすることと、をさらに含む、
請求項８の方法。
【請求項１４】
前記ＧＰＵコプロセッサは、スカラユニットとベクトルユニットとをさらに備え、
前記方法は、
前記スカラユニットによって、メッセージについて前記キューを監視することと、
前記スカラユニットによって、前記ベクトルユニット上で実行するサブタスクをスケジューリングすることと、をさらに含む、
請求項８の方法。
【請求項１５】
スカラユニットと、
ベクトルユニットと、を備え、
前記スカラユニットは、
キューを監視し、
前記キュー内の第１メッセージを検出したことに応じて、パーシステントスレッドである第１サブタスクを、前記ベクトルユニット上で実行するためにスケジューリングするように構成されている、
グラフィックス処理装置（ＧＰＵ）コプロセッサ。
【請求項１６】
前記ＧＰＵコプロセッサは、
前記第１メッセージを検出したことに応じて、前記第１メッセージについてイベントテーブルのルックアップを実行し、
前記イベントテーブルを使用して、前記第１メッセージを第１イベントにマッピングし、
前記第１メッセージを前記第１イベントにマッピングしたことに応じて、前記第１サブタスクを、前記ベクトルユニット上で実行するためにスケジューリングし、
計算リソースが利用可能な場合に後続のメッセージを処理し続けるように構成されている、
請求項１５のＧＰＵコプロセッサ。
【請求項１７】
前記ＧＰＵコプロセッサは、
前記キュー内の第２メッセージを検出し、
前記イベントテーブルを使用して、前記第２メッセージを第２イベントにマッピングし、
前記第２メッセージを前記第２イベントにマッピングしたことに応じて、第１行列に対して行列転置演算を実行するために第２タスクをスケジューリングし、
クロスバーを利用して、前記第１行列内のデータ項目を回転させて第２行列を生成するように構成されている、
請求項１６のＧＰＵコプロセッサ。
【請求項１８】
前記ＧＰＵコプロセッサは、
複数のバイアスインデクシング操作を利用して前記第２行列内のデータ項目を並べ替えて、第３行列を生成し、
前記クロスバーを利用して前記第３行列内のデータ項目を回転させて、前記第１行列の転置バージョンである第４行列を生成するように構成されている、
請求項１７のＧＰＵコプロセッサ。
【請求項１９】
前記ＧＰＵコプロセッサは、
１つの読み出しポートと１つの書き込みポートとを有する第１ベクトル汎用レジスタ（ＶＧＰＲ）ファイルと、
複数の読み出しポートと１つの書き込みポートとを有する第２ＶＧＰＲファイルと、
バイアスインデックスアクセスブロックと、
クロスバーと、を備え、
前記ＧＰＵコプロセッサは、単一クロックサイクルで複数のオペランドを前記第２ＶＧＰＲファイルから前記ベクトルユニットに伝達するように構成されている、
請求項１５のＧＰＵコプロセッサ。
【請求項２０】
前記第１ＶＧＰＲファイルは、マルチバンクアレイであり、
前記ＧＰＵコプロセッサは、前記バイアスインデックスアクセスブロックを使用して、単一クロックサイクルで前記第１ＶＧＰＲファイルの別々のバンクの異なるワードラインにアクセスするように構成されている、
請求項１９のＧＰＵコプロセッサ。
【発明の詳細な説明】
【背景技術】
【０００１】
並列処理アーキテクチャは、特定のアプリケーションについては十分に拡張しない。例えば、最小の並列処理幅で比較的限られた計算機能のみを必要とする超低電力アプリケーションは、効率的な方法で並列処理アーキテクチャを使用しない。これらのアプリケーションでは、タスク割り当て及びスケジューリングのオーバーヘッドは、配置された計算リソースと比較してかなりの量になる。これらのアプリケーションには、ネットワークパッケージ処理、画像認識、音声処理、暗号高速化等が含まれる。これらのアプリケーションは、一般的に、安定した入力データフローと、比較的稀な処理カーネル及び状態変化と、を伴う低レイテンシ及びパーシステントコンピューティングを必要とする。
【０００２】
いくつかのグラフィックス処理装置（ＧＰＵ）アーキテクチャ及びプログラミングモデルは、多くの小さいタスクを完了するために、カーネルのバッチをＧＰＵにディスパッチするホスト又は中央処理装置（ＣＰＵ）を含む。ホストは、カーネルの入力データを準備し、タスクをスケジューリングするように機能する。しかしながら、アプリケーションによっては、大きな入力データセットを直ぐに有しない場合や、低レイテンシのコンピューティングを伴う高速リアルタイム反応を必要とする小さいサイズの入力バッチを有する場合がある。現在のＧＰＵアーキテクチャ及びプログラミングモデルは、これらのアプリケーションでは上手く機能しない。
【０００３】
本明細書で説明する方法及びメカニズムの利点は、添付の図面と共に以下の説明を参照することによって、より良く理解することができる。
【図面の簡単な説明】
【０００４】
【図１】コンピュータシステムの一実施形態のブロック図である。
【図２】ＧＰＵコプロセッサユニットの一実施形態のブロック図である。
【図３】パーシステントコンピューティングのためのシェーダカーネル実行モデルの一実施形態のブロック図である。
【図４】ＳＩＭＤユニットの一実施形態のブロック図である。
【図５】バイアスインデクシング（biased indexing）レジスタ操作をサポートするためのベクトルレジスタファイルの一実施形態のブロック図である。
【図６】ベクトル汎用レジスタ（ＶＧＰＲ）のバイアスインデクシングのための擬似コードの一実施形態を示す図である。
【図７】クロスバーの一実施形態のブロック図である。
【図８】クロスバーの機能を実施するための擬似コードの一実施形態を示す図である。
【図９】行列転置演算の一実施形態のブロック図である。
【図１０】ＧＰＵコプロセッサ上でパーシステント計算カーネルを実行する方法の一実施形態を示す一般化されたフロー図である。
【図１１】パーシステントキュー内のメッセージを処理する方法の別の実施形態を示す一般化されたフロー図である。
【図１２】行列転置演算を実行する方法の一実施形態を示す一般化されたフロー図である。
【図１３】ビデオストリームに関連する音声処理方法の一実施形態を示す一般化されたフロー図である。
【図１４】ＧＰＵコプロセッサの動作方法の別の実施形態を示す一般化されたフロー図である。
【図１５】オペランドを異なるベクトル汎用レジスタ（ＶＧＰＲ）ファイルに割り当てる方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【０００５】
以下の説明では、本明細書に提示されている方法及びメカニズムの完全な理解を提供するために、多数の具体的な詳細が示されている。しかしながら、当業者であれば、これらの具体的な詳細がなくても様々な実施形態を実施し得ることを認識されたい。いくつかの例では、本明細書に記載のアプローチを曖昧にするのを避けるために、周知の構造、コンポーネント、信号、コンピュータプログラム命令及び技術が詳細に示されていない。説明を簡潔且つ明瞭にするために、図面に示される要素は必ずしも縮尺通りに描かれていないことを理解されたい。例えば、いくつかの要素の寸法は、他の要素に対して誇張される場合がある。
【０００６】
グラフィックス処理装置（ＧＰＵ）コプロセッサを実装するための様々なシステム、装置、方法及びコンピュータ可読媒体が開示される。一実施形態では、ＧＰＵコプロセッサは、入力データフローイベントに基づいてそれ自体のサブウェーブプロシージャ（sub-wave procedures）を自己スケジューリングする機能を有する単一命令複数データ（ＳＩＭＤ）ユニットを含む。一実施形態では、ＧＰＵコプロセッサは、複数のＳＩＭＤユニットによって共有されるローカルデータ共有（ＬＤＳ）共通メモリユニットを有していない。むしろ、ＧＰＵコプロセッサは、ＶＧＰＲファイルのためのレーン間クロスバー及びレーン内ベクトル汎用レジスタ（ＶＧＰＲ）バイアスインデクシングメカニズム（biased indexing mechanism）を含む。
【０００７】
一実施形態では、ＶＧＰＲファイルは、２つのファイルに分割される。第１ＶＧＰＲファイルは、１つの読み出しポートと１つの書き込みポートとを有する、大きなレジスタファイルである。第２ＶＧＰＲファイルは、複数の読み出しポートと１つの書き込みポートとを有する、小さなレジスタファイルである。第２ＶＧＰＲは、クロックサイクル毎に２つ以上の命令を発行する潜在的機能を導入する。ＧＰＵコプロセッサは、複数のオペランドを、第２ＶＧＰＲファイルからＳＩＭＤユニットに単一のクロックで伝達するように構成されている。さらに、第１ＶＧＰＲファイル及び第２ＶＧＰＲファイルは、マルチバンクアレイであり、ＧＰＵコプロセッサは、何れかのＶＧＰＲファイルの別々のバンクの異なるワードラインに対して単一のクロックサイクルでアクセスするように構成されている。
【０００８】
一実施形態では、システムは、パーシステントキューと、ＧＰＵと、ＧＰＵコプロセッサと、入出力（Ｉ／Ｏ）モジュールと、ホストプロセッサと、を含む。本明細書で使用する場合、「パーシステントキュー」という用語は、パーシステントスレッド（後述する）又は他のパーシステントタスク用のデータを記憶するキューを指し、当該技術分野で周知の様々なタイプのキューのうち何れかのキューであってもよい。ホストプロセッサ及び／又はＩ／Ｏモジュールは、ＧＰＵコプロセッサ宛てのメッセージをパーシステントキューに送信する。ＧＰＵコプロセッサは、パーシステントキューの状況を監視するように構成されている。ＧＰＵコプロセッサは、パーシステントキュー内の第１メッセージの検出に応じて、第１メッセージについてのイベントテーブルのルックアップを実行する。次に、ＧＰＵコプロセッサは、イベントテーブルを使用して、第１メッセージを第１イベントにマッピングする。次に、ＧＰＵコプロセッサは、第１イベントが第１サブタスクのスケジューリングを指定したと判別したことに応じて、第１サブタスクを実行するためにスケジューリングする。次いで、ＧＰＵコプロセッサは、ＳＩＭＤ計算リソース（例えば、ＶＧＰＲ、サブウェーブスロット）が利用可能である場合、次のメッセージを処理し続け、次のサブタスクを並列にスケジューリングすることができる。
【０００９】
一実施形態では、ＧＰＵコプロセッサは、パーシステントキュー内の第２メッセージを検出し、イベントテーブルを使用して、第２メッセージを第２イベントにマッピングする。次に、ＧＰＵコプロセッサは、第２メッセージを第２イベントにマッピングし、第２イベントが第２サブタスクを指定したと判別したことに応じて、第１行列に対して行列転置演算を実行するための第２サブタスクをスケジューリングする。ＧＰＵコプロセッサは、第２サブタスクを実行するために、クロスバーを利用して第１行列内のデータ項目を回転させて、第２行列を生成する。次に、ＧＰＵコプロセッサは、第１行列の転置バージョンである第３行列を生成するために、複数のバイアスインデクシング操作を利用してデータ項目を並べ替える。
【００１０】
一実施形態では、ホストプロセッサは、ビデオストリームのために、ＧＰＵに対してグラフィックス処理タスクをスケジューリングする。ホストプロセッサは、ビデオストリームの音声処理タスクを開始するために、メッセージをＧＰＵコプロセッサに送信する。一実施形態では、ＧＰＵコプロセッサは、スカラユニットと、ベクトルユニットと、を含む。スカラユニットは、イベントテーブルを使用して受信メッセージをイベントにマッピングしたことに応じて、メッセージについてパーシステントキューを監視し、ベクトルユニット上で実行するサブタスクプロシージャをスケジューリングするように構成されている。
【００１１】
図１を参照すると、コンピュータシステム１００の一実施形態のブロック図が示されている。システム１００は、少なくともホストプロセッサ１０２と、入出力（Ｉ／Ｏ）モジュール１０４と、グラフィックス処理装置（ＧＰＵ）１０６と、ＧＰＵコプロセッサ１０８と、レギュラーキュー１１０と、パーシステントキュー１１２と、メモリサブシステム１１４と、を含む。システム１００は、図面を曖昧にするのを避けるために、示されていない他のコンポーネントも含むことに留意されたい。
【００１２】
ホストプロセッサ１０２は、Ｉ／Ｏモジュール１０４と、ＧＰＵ計算装置１０６と、ＧＰＵコプロセッサ１０８と、メモリサブシステム１１４と、に接続されている。ホストプロセッサ１０２は、任意の数のコアを有する任意の数及びタイプのプロセッサ（例えば、中央処理装置（ＣＰＵ））を表す。一実施形態では、ホストプロセッサ１０２は、例えばオペレーティングシステム等のシステム１００の主制御ソフトウェアを実行するように構成されている。一般に、使用中にホストプロセッサ１０２によって実行されるソフトウェアは、システム１００の所望の機能を実現するために、システム１００の他のコンポーネントを制御することができる。ホストプロセッサ１０２は、例えばアプリケーションプログラム等の他のソフトウェアも実行することができる。
【００１３】
ホストプロセッサ１０２は、Ｉ／Ｏモジュール１０４と、ＧＰＵ１０６と、ＧＰＵコプロセッサ１０８と、を含むシステム１００の異なるタイプの計算ノードを管理するように構成されている。ＧＰＵ１０６は、レギュラーキュー１１０を介してＩ／Ｏモジュール１０４から入力データを受信し、ＧＰＵコプロセッサ１０８による処理のために、データをパーシステントキュー１１２に出力する。また、パーシステントキュー１１２は、Ｉ／Ｏモジュール１０４からデータを直接受信する。様々な実施形態では、パーシステントキュー１１２は、ホストプロセッサ１０２によって管理されるＧＰＵ、キャッシュベース又は仮想的にマッピングされたキューと同じ半導体回路デバイス上にある。
【００１４】
Ｉ／Ｏモジュール１０４は、任意の数及びタイプのＩ／Ｏデバイス及び／又はＩ／Ｏインタフェースを表す。例えば、一実施形態では、Ｉ／Ｏモジュール１０４は、カメラを含むか、カメラに接続されている。また、一実施形態では、Ｉ／Ｏモジュール１０４は、他の周辺デバイスを含むか、他の周辺デバイスに接続されている。一実施形態では、ＧＰＵ１０６は、単一命令複数データ（ＳＩＭＤ）ユニットと、ローカルデータ共有（ＬＤＳ）メモリと、並列処理タスクをサポートする他のコンポーネントと、を含む複数の計算ユニットを含む。一実施形態では、ＳＩＭＤユニットは、パイプライン又はプログラミングモデルであり、カーネルは、各々が独自データ及び共有プログラムカウンタを有する複数の処理要素上で同時に実行される。処理要素は、同一の命令シーケンスを実行する。本明細書で言及するカーネルとは、プログラム内で宣言され、計算ユニット上で実行される命令を含む関数である。この関数は、シェーダ、シェーダプログラム又はプログラムとも呼ばれる。
【００１５】
ＧＰＵコプロセッサ１０８は、パーシステントスレッドを実行するように構成されている。本明細書で使用される場合、「パーシステントスレッド」という用語は、完了することなく、キュー又は他のデータ構造から作業を継続的にポーリングするカーネルとして定義される。つまり、パーシステントスレッドは、現在のタスクが完了するまで実行された後に、処理するデータ及び／又は実行するタスクがあるかどうかをチェックする。一実施形態では、ＧＰＵコプロセッサ１０８は、単一のＳＩＭＤユニットを含む。ＧＰＵコプロセッサ１０８は、メッセージについてパーシステントキュー１１２を監視し、ルックアップテーブルを用いて、これらのメッセージをイベントにマッピングする。ＧＰＵコプロセッサ１０８は、パーシステントキュー１１２内のメッセージを検出したことに応じて、実行するサブタスクをスケジューリングするように構成されている。
【００１６】
ホストプロセッサ１０２、入出力（Ｉ／Ｏ）モジュール１０４、グラフィックス処理装置（ＧＰＵ）１０６及びＧＰＵコプロセッサ１０８は、メモリサブシステム１１４に接続されている。様々な実施形態では、メモリサブシステム１１４は、１つ以上のレベルのキャッシュ及び／又はメインメモリを含む。実施形態に応じて、様々な異なるタイプのメモリデバイスが、メモリサブシステム１１４の一部として実装される。これらのメモリデバイスは、デュアルインラインメモリモジュール（ＤＩＭＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ、（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、抵抗変化型ＲＡＭ（ＲｅＲＡＭ）、相変化ＲＡＭ（ＰＣＲＡＭ）、ダブルデータレート（ＤＤＲ）ＤＲＡＭ、ＤＤＲ２  ＤＲＡＭ、ＤＤＲ３  ＤＲＡＭ、ＤＤＲ４  ＤＲＡＭ、高速ＣＭＯＳ、高密度ＤＲＡＭ、ｅＤＲＡＭ、３Ｄ積層メモリ（例えば、積層ＤＲＡＭ）、ＨＢＭ（High Bandwidth Memory）、インターポーザベースの集積メモリ、マルチチップモジュール（ＭＣＭ）、光磁気記憶媒体、読み出し専用メモリ（ＲＯＭ）、相変化メモリ、スピン転送トルク磁気ＲＡＭ、メモリスタ、拡張データ出力（ＥＤＯ）ＲＡＭ、Ｒａｍｂｕｓ  ＲＡＭ、Ｒａｍｂｕｓ  ＤＲＡＭ、消去可能プログラム可能メモリ（ＥＥＰＲＯＭ）、ソリッドステートメモリ、ハードディスクドライブ、光記憶媒体等を含む（ただし、これらに限定されない）。
【００１７】
一実施形態では、ホストプロセッサ１０２は、ＧＰＵコプロセッサ１０８を初期化し、シェーダを一度に設定する。次に、シェーダは、ホストプロセッサ１０２がＧＰＵコプロセッサ１０８に対して停止を通知するまで、ＧＰＵコプロセッサ１０８上で無期限に実行される。シェーダは、ホストプロセッサ１０２から送信されたメッセージについてパーシステントキュー１１２を監視して、計算される異なるサブタスクをスケジューリングする。サブタスクは、ＳＩＭＤユニット又は他の並列処理ユニット上で実行されるプロセス、スレッド、関数、カーネル、シェーダ又は他の命令シーケンスとして定義される。「サブタスク」及び「タスク」という用語は、本明細書において交換可能に使用されることに留意されたい。
【００１８】
システム１００は、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ若しくはノートブックコンピュータ、スーパーコンピュータ、モバイルデバイス、タブレット、電話、スマートフォン、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、コンシューマデバイス、サーバ、ファイルサーバ、アプリケーションサーバ、ストレージサーバ、ウェブサーバ、クラウドコンピューティングサーバ、又は、一般に任意のタイプのコンピューティングシステム若しくはデバイスを含むがこれらに限定されない、様々なタイプのコンピュータシステム及びコンピューティングデバイスの何れにも対応することができる。システム１００のコンポーネントの数は、実施形態毎に変更可能であることに留意されたい。各コンポーネント／サブコンポーネントの数は、図１に示す数より多くてもよいし、少なくてもよい。システム１００は、図１に示されていない他のコンポーネントを含んでもよいことに留意されたい。さらに、他の実施形態では、システム１００は、図１に示す以外の方法で構成することができる。
【００１９】
図２を参照すると、ＧＰＵコプロセッサユニット２００の一実施形態のブロック図が示されている。一実施形態では、ＧＰＵコプロセッサユニット２００は、ホストプロセッサと、ＧＰＵと、Ｉ／Ｏブロックと、パーシステントキューと、メモリサブシステムと、に接続されている。ＧＰＵコプロセッサユニット２００は、実行する命令をフェッチするために命令レベル１（Ｌ１）キャッシュ２３０に接続された命令フェッチアービトレーションユニット（instruction fetch arbitration unit）２０４を含む。命令フェッチアービトレーションユニット２０４は、ＳＩＭＤプログラムカウンタ（ＰＣ）と、フェッチされた命令をバッファリングする命令バッファ（ＩＢ）２０６と、に接続されており、命令アービトレーションユニット２０８に接続されている。
【００２０】
命令アービトレーションユニット２０８は、分岐及びメッセージユニット２１０と、ベクトルメモリ復号ユニット２１２と、スカラ復号ユニット２１４と、ベクトル復号ユニット２１６と、に接続されている。分岐及びメッセージユニット２１０は、分岐命令及びメッセージ（例えば、ホストプロセッサからのメッセージ、デバッグメッセージ、同期メッセージ）を復号するように構成されている。メッセージキュー２２０は、メッセージをこれらのユニットに伝達するために、分岐及びメッセージユニット２１０及びスカラユニット２１８に接続されている。ベクトルメモリ復号ユニット２１２は、メモリ命令を復号するように構成されている。スカラ復号ユニット２１４は、スカラユニット２１８上で実行される命令を復号するように構成されており、ベクトル復号ユニット２１６は、単一命令複数データ（ＳＩＭＤ）ユニット２２４上で実行される命令を復号するように構成されている。
【００２１】
スカラユニット２１８は、データ及び／又は命令にアクセスするために、スカラＬ１キャッシュ２２８に接続されている。スカラＬ１キャッシュ２２８は、レベル２（Ｌ２）キャッシュ（図示省略）又はメインメモリバス（図示省略）に接続された要求アービタ２３２にも接続されている。スカラユニット２１８は、スカラレジスタファイル２５２と、整数算術論理演算装置（ＡＬＵ）２５４と、を含む。一実施形態では、スカラユニット２１８は、サブタスクスケジューラを実行し、ホストプロセッサ（例えば、図１のホストプロセッサ１０２）からメッセージを受信し、メッセージをホストプロセッサに送信するように構成されている。一実施形態では、ホストプロセッサから受信したメッセージは、サブタスクプロシージャを直接トリガする。スカラユニット２１８は、整数ＡＬＵ２５４上で命令を実行し、スカラレジスタファイル２５２内のこれらの命令のオペランドにアクセスするように構成されている。スカラユニット２１８は、メッセージキュー２２２と、キャッシュ／テクスチャユニット２２６と、に接続されている。一実施形態では、スカラユニット２１８は、スカラユニット２１８が特定の命令シーケンスの処理を終了した場合及び／又はスカラユニット２１８が追加データの処理を待っている場合に、メッセージを生成する。
【００２２】
ＳＩＭＤユニット２２４は、メインベクトルレジスタファイル２４０と、高速ベクトルレジスタファイル２４２と、ベクトルＡＬＵパイプライン２４４，２４６と、バイアスインデックスアクセスメカニズム２４８と、クロスバー２５０と、を含む。一実施形態では、メインベクトルレジスタファイル２４０は、１つの読み出しポートと、１つの書き込みポートと、を有し、高速ベクトルレジスタファイル２４２は、複数の読み出しポートと、１つの書き込みポートと、を有する。また、一実施形態では、メインベクトルレジスタファイル２４０は、高速ベクトルレジスタファイル２４２よりも大きい。命令は、ベクトルＡＬＵパイプライン２４４又は２４６上でＳＩＭＤユニット２２４によって実行される。ＳＩＭＤユニットアーキテクチャの一例を図４に示し、詳細に説明する。
【００２３】
また、ＳＩＭＤユニット２２４は、バイアスインデックスアクセスメカニズム２４８と、クロスバー２５０と、を含む。バイアスインデックスアクセスメカニズム２４８は、ベクトルＡＬＵパイプライン２４４，２４６が、同じクロックサイクルでレジスタファイル２４０，２４２の異なるワードラインにアクセスするのを可能にする。バイアスインデックスアクセスメカニズム２４８は、行列の複数の行内のデータ項目を効率的に収集することによって、特定の演算（例えば、行列転置演算）を効率的に実行するのを可能にする。クロスバー２５０は、レジスタファイル２４０，２４２からアクセスされたデータ及びベクトルＡＬＵパイプライン２４４，２４６によって生成された結果データに対して並び替えを実行するのを可能にする。また、クロスバー２５０は、行列内のデータ項目を再配置することによって、特定の演算（例えば、行列転置演算）を効率的に実行することができる。
【００２４】
キャッシュ／テクスチャユニット２２６は、スカラユニット２１８及びＳＩＭＤユニット２２４がアクセスするデータを記憶するように構成されている。キャッシュ／テクスチャユニット２２６は、別のキャッシュ及び／又はメモリバスにも接続されている。ＧＰＵコプロセッサユニット２００は、ＧＰＵコプロセッサユニットアーキテクチャの一例であることを理解されたい。他の実施形態では、ＧＰＵコプロセッサユニットは、他のユニットを含み及び／又は他の適切な方法で構造化されている。
【００２５】
図３を参照すると、パーシステントコンピューティングのためのシェーダカーネル実行モデル３００の一実施形態のブロック図が示されている。パーシステントシェーダ実行モデル３００は、連続的に実行されている１つのメインウェーブスケジューラプロシージャ３０６を有する。メインウェーブスケジューラプロシージャ３０６は、ＶＧＰＲバイアスインデクシングメカニズム（図示省略）を使用して全てのベクトル汎用レジスタ（ＶＧＰＲ）３１２にアクセスすることができる。スケジューラ３０６は、ホストメッセージキュー３０２又はベクトルＩ／Ｏリターンキュー３０４で受信された着信メッセージに基づいてイベントドリブンサブウェーブを管理し、スケジューリングする。着信メッセージは、ホストメッセージ、Ｉ／Ｏメッセージ、ベクトルリターン信号又は他のメッセージである。
【００２６】
一実施形態では、キュー３０２内のメッセージは、スケジューラ３０６によってルックアップテーブル３０８を用いてイベントにマッピングされる。次に、そのイベントを用いて、対応するサブウェーブプロシージャ３１０Ａ〜３１０Ｎを開始する。実施形態に応じて、単一のイベント又は複数のイベントの組み合わせが、サブウェーブプロシージャを呼び出す。プライベートＶＧＰＲスペースは、ＶＧＰＲ３１２内の新たなサブウェーブプロシージャに対して割り当てられる。また、サブウェーブプロシージャは、ＶＧＰＲバイアスインデクシング操作を使用して、共有ＶＧＰＲスペース３１２にアクセスすることができる。一実施形態では、スケジューラ３０６は、各サブウェーブプロシージャ３１０Ａ〜３１０Ｎの優先順位に基づいて命令をスケジューリングし、スケジューラ３０６は、サブウェーブ全体のデータコヒーレンシ及びアトミック操作を維持する。サブウェーブプロシージャ３１０Ａ〜３１０Ｎが終了すると、そのサブウェーブに割り当てられたプライベートＶＧＰＲスペースが解放され、新たなサブウェーブプロシージャによって使用することができる。
【００２７】
図４を参照すると、ＳＩＭＤユニット４００の一実施形態のブロック図が示されている。一実施形態では、ＳＩＭＤユニット４００の回路は、（図２の）ＳＩＭＤユニット２２４に含まれている。ＳＩＭＤユニット４００は、高速ＶＧＰＲ４１０Ａ〜４１０Ｄと、メインＶＧＰＲ４１６Ａ〜４１６Ｄと、融合積和（ＦＭＡ）ユニット４１８，４２０と、を含む。高速ＶＧＰＲ４１０Ａ〜４１０Ｄは、任意の数の高速ＶＧＰＲを表し、メインＶＧＰＲ４１６Ａ〜４１６Ｄは、ＳＩＭＤユニット４００の一部として実装される任意の数のメインＶＧＰＲを表す。４つのＶＧＰＲと４つのメインＶＧＰＲとがＳＩＭＤユニット４００に示されているが、他の実施形態では、他の数の高速ＶＧＰＲとメインＶＧＰＲとが利用されることに留意されたい。さらに、他の実施形態では、他の数のＦＭＡユニットが利用される。
【００２８】
複数の入力は、高速ＶＧＰＲ４１０Ａ〜４１０Ｄ及びメインＶＧＰＲ４１６Ａ〜４１６Ｄに送る入力マルチプレクサに接続されている。ＳＩＭＤユニット４００内のロジックは、何れの入力がこれらの入力マルチプレクサを介して高速ＶＧＰＲ４１０Ａ〜４１０Ｄ及びメインＶＧＰＲ４１６Ａ〜４１６Ｄを通過するかを選択するための選択信号を生成するのに使用される。入力は、キャッシュ（図示省略）、ＦＭＡユニット４１８，４２０の出力、汎用レジスタ（ＧＰＲ）バイアスインデックスユニット４２２及びフルクロスバー４２４に接続された出力マルチプレクサから接続されている。一実施形態では、各高速ＶＧＰＲ４１０Ａ〜４１０Ｄは、複数の読み出しポートを有するが、各メインＶＧＰＲ４１６Ａ〜４１６Ｄは、単一の読み出しポートを有する。
【００２９】
高速ＶＧＰＲ４１０Ａ〜４１０Ｄ及びメインＶＧＰＲ４１６Ａ〜４１６Ｄの読み出しポートは、マルチプレクサ及びフリップフロップを含むロジックを介してＦＭＡユニット４１８，４２０に接続されている。ＦＭＡユニット４１８，４２０は、ＳＩＭＤユニット４００上で実行するパーシステントスレッドに対する命令を実行する適切な入力を選択するように構成されている。一実施形態では、各ＦＭＡユニット４１８，４２０は、クロックサイクル毎に複数のＦＭＡ操作を実行するための複数のＦＭＡユニットを有する。
【００３０】
図５を参照すると、ベクトルレジスタファイル５００の一実施形態のブロック図が示されている。一実施形態では、レジスタファイル５００は、４つの別々のランダムアクセスメモリ（ＲＡＭ）５１０Ａ〜５１０Ｄと、各ＲＡＭに対して異なるアドレス又はバイアスされたアドレスを保持するアドレスフロップ５０４のセットと、データを保持するデータフロップ５０２のセットと、偶数レーン及び奇数レーンについての読み出し／書き込みマスクをＲＡＭ５１０Ａ〜５１０Ｎに保持するデータワードマスク５０６のセットと、を含む。ＲＡＭ５１０Ａ〜５１０Ｄ内の異なるワードラインは、同じクロックサイクルでアクセス可能である。したがって、単一クロックサイクルの場合には、ＲＡＭ５１０Ａ内の第１ワードラインへのアクセスが実行され、ＲＡＭ５１０Ｂ内の第２ワードラインへのアクセスが実行され、ＲＡＭ５１０Ｃ内の第３ワードラインへのアクセスが実行され、ＲＡＭ５１０Ｄ内の第４ワードラインへのアクセスが実行され、全てが同じクロックサイクルの場合には、バイアスインデックスユニット（例えば、図４のバイアスインデックスユニット４２２）を用いて実装されるＲＡＭ５１０Ａ〜５１０Ｄ内の異なるワードラインである第１ワードライン、第２ワードライン、第３ワードライン及び第４ワードラインを用いて行われる。
【００３１】
各ＲＡＭ５１０Ａ〜５１０Ｄのデータ幅はＮビット幅であり、Ｎは正の整数であり、実施形態毎に異なる。各アドレスフロップ５０４のアドレス幅はＭビット幅であり、Ｍは正の整数であり、実施形態毎に異なる。また、各データワードマスク５０６の幅はＰビット幅であり、Ｐは正の整数であり、実施形態毎に異なる。一実施形態では、一定数のスレッドが各ＲＡＭ５１０Ａ〜５１０Ｄに割り当てられている。例えば、一実施形態では、各ＲＡＭ５１０Ａ〜５１０Ｄを使用するために２つのスレッドが割り当てられている。したがって、この実施形態では、スレッド０，１がＲＡＭ５１０Ａに割り当てられ、スレッド２，３がＲＡＭ５１０Ｂに割り当てられ、スレッド４，５がＲＡＭ５１０Ｃに割り当てられ、スレッド６，７がＲＡＭ５１０Ｄに割り当てられる。他の実施形態では、各ＲＡＭ５１０Ａ〜５１０Ｄを使用するために他の数のスレッドが割り当てられる。
【００３２】
図６を参照すると、ベクトル汎用レジスタ（ＶＧＰＲ）バイアスインデックスのための擬似コード６００の一実施形態が示されている。一実施形態では、ＧＰＵコプロセッサ上のベクトルレジスタファイルの実装形態は、ランダムアクセスメモリ（ＲＡＭ）の複数のバンクを使用する。この実施形態では、各バンクは、１つの読み出しポートと１つの書き込みポートとを有する１つの大きなＶＧＰＲを有し、各バンクは、複数の読み出しポートと１つの書き込みポートとを有する１つの小さなＶＧＰＲを有する。各ＲＡＭは、ＶＧＰＲバイアスインデックススキームを使用して異なるオフセットでアドレス指定することができる。一実施形態では、ＶＧＰＲバイアスインデックススキームは、擬似コード６００を使用して実施される。
【００３３】
擬似コード６００では、ＶＧＰＲファイルのＲＡＭ毎に３２個のスレッドと４個のバンクとが存在すると想定されている。ＶＧＰＲファイルからの読み出しのために、先ず、読み出しインデックスがＶＧＰＲファイル内のターゲットレジスタから検索される。この読み出しインデックスは、ＶＧＰＲファイルから読み出されているデータの位置を識別する。次に、この識別された位置からデータが読み出され、ターゲットレジスタに記憶される。ＶＧＰＲファイルへの書き込みのために、先ず、書き込みインデックスがＶＧＰＲファイル内のターゲットレジスタから検索される。この書き込みインデックスは、データがＶＧＰＲファイルに書き込まれる位置を識別する。その後、データは、この識別された位置に書き込まれる。疑似コード６００に示されたアプローチを使用して、任意のタイプの所望のアクセスパターンを、ＶＧＰＲファイルのインデックスにプログラムすることができる。
【００３４】
図７を参照すると、クロスバー７００の一実施形態のブロック図が示されている。クロスバー７００は、ＳＩＭＤコントローラ７０６と、レジスタファイル７１０Ａ〜７１０Ｄと、ＡＬＵ７２０Ａ〜７２０Ｄと、に接続されている。クロスバー７００は、レジスタファイル７１０Ａ〜７１０Ｄからのデータ項目をＡＬＵ７２０Ａ〜７２０Ｄの何れかに接続することができるように、レジスタファイル７１０Ａ〜７１０Ｄからのデータを並べ替えるように構成されている。これにより、ＡＬＵ７２０Ａ〜７２０Ｄのソース「Ａ」入力をレジスタファイル７１０Ａ〜７１０Ｄの何れかから受信することが可能になり、異なるレジスタファイル７１０Ａ〜７１０ＤとＡＬＵ７２０Ａ〜７２０Ｄとの間のデータの共有が容易になる。一実施形態では、データを、クロスバー７００を介してレジスタファイル７１０Ａ〜７１０ＤからＡＬＵ７２０Ａ〜７２０Ｄにどのようにルーティングするかを決定する制御信号は、ＳＩＭＤコントローラ７０６によって生成され、クロスバー７００に伝達される。また、クロスバー７００の出力は、レジスタファイル７１０Ａ〜７１０Ｄの書き込みポートに接続されている。様々なデータパスの幅はＮビットであり、Ｎは正の整数であり、実施形態毎に異なる。一実施形態では、各ＡＬＵ７２０Ａ〜７２０Ｄは、複数のＡＬＵを含む。例えば、一実施形態では、各ＡＬＵ７２０Ａ〜７２０Ｄは、２つのＡＬＵを含む。
【００３５】
図８を参照すると、クロスバーの機能を実施するための擬似コード８００の一実施形態が示されている。疑似コード８００に示される関数「ｖｅｃｔｏｒ＿ｐｅｒｍｕｔｅ」は、ＧＰＵコプロセッサ内のクロスバー（例えば、図７のクロスバー７００）の実装の一例である。クロスバーは、任意のレジスタファイルからのデータ項目を入力として受信し、入力データ項目を、レジスタファイルの選択された位置及び／又は様々なＡＬＵの入力に書き込む。
【００３６】
図９を参照すると、行列転置演算の一実施形態のブロック図が示されている。一実施形態では、行列転置は、ＶＧＰＲバイアスインデクシング及びクロスバー機能を使用して、ＧＰＵコプロセッサ（例えば、図２のＧＰＵコプロセッサ２００）によって実行される。図９の左側に初期の行列レイアウト９０５が示されている。この説明の目的のために、転置される行列は８×８行列であると想定する。他の実施形態では、他のサイズの行列が転置される。
【００３７】
第１演算シーケンスでは、ＶＧＰＲインデックス０のデータ項目が変更されることなく維持され、ＶＧＰＲインデックス１のデータ項目がクロスバー（例えば、図７のクロスバー７００）を使用して左から右へ１項目ずつ回転され、ＶＧＰＲインデックス２のデータ項目がクロスバーを使用して左から右へ２項目ずつ回転され、ＶＧＰＲインデックス３のデータ項目がクロスバーを使用して左から右へ３項目ずつ回転される等である。これらの７つの演算の後に、結果が図９の中央の行列９１０として示される。
【００３８】
第２演算シーケンスでは、行列要素０、８、１６、２４、３２、４０、４８、５６をＶＧＰＲインデックス０、１、２、３、４、５、６、７からＶＧＰＲ０レーン０、１、２、３、４、５、６、７にそれぞれロードするために、ＶＧＰＲバイアスインデクシングが利用される。次に、行列９１０の他の斜めに配置されたデータ項目に対して同様のバイアスインデクシング操作が実行される。図９の右側には、事前結果行列９１５が示されている。演算の第３セットでは、別の７行回転操作を実行して、最終結果行列９２０を生成する。全部で７つのクロスバー操作、８つのバイアスインデクシング操作、そしてさらに７つのクロスバー操作を実行して、８×８行列転置が完了する。
【００３９】
図１０を参照すると、ＧＰＵコプロセッサ上でパーシステントカーネルを実行する方法１０００の一実施形態が示されている。説明の目的のために、この実施形態及び図１１〜図１５におけるステップは、順番に示されている。しかしながら、記載された方法の様々な実施形態において、記載された要素のうち１つ以上の要素は、示された順序と異なる順序で同時に実行されてもよいし、完全に省略されてもよいことに留意されたい。必要に応じて他の追加の要素も実行される。本明細書に記載の様々なシステム又は装置の何れも方法１０００を実施するように構成されている。
【００４０】
ＧＰＵコプロセッサは、パーシステント計算カーネルで初期化される（ブロック１００５）。次に、ＧＰＵコプロセッサは、新たなメッセージについてパーシステントキューを監視する（ブロック１０１０）。パーシステント計算カーネルがパーシステントキュー内で新たなメッセージを検出した場合（条件付きブロック１０１５：Ｙｅｓ）、ＧＰＵコプロセッサは、新たなメッセージを使用してイベントにマッピングする（ブロック１０２０）。一実施形態では、メッセージは、ＧＰＵコプロセッサが処理するデータが存在することも示す。次に、ＧＰＵコプロセッサは、イベントによって指定されたサブタスクをスケジューリングする（ブロック１０２５）。パーシステント計算カーネルがパーシステントキュー内で新たなメッセージを検出しない場合（条件付きブロック１０１５：Ｎｏ）、方法１０００は、監視ブロック１０１０に戻る。
【００４１】
全ての入力データがサブタスクによって処理された場合（条件付きブロック１０３０：Ｙｅｓ）、ＧＰＵコプロセッサは、ＧＰＵコプロセッサがさらなるデータを待っているというメッセージを生成する（ブロック１０３５）。ブロック１０３５の後、方法１０００は、ブロック１０１０に戻る。全ての入力データがＧＰＵコプロセッサによって処理されていない場合（条件付きブロック１０３０：Ｎｏ）、方法１０００は、スケジュールブロック１０２５に戻る。
【００４２】
図１１を参照すると、パーシステントキュー内のメッセージを処理する方法１１００の一実施形態が示されている。ＧＰＵコプロセッサは、パーシステントキュー内のメッセージを検出する（ブロック１１０５）。ＧＰＵコプロセッサは、メッセージの検出に応じて、当該メッセージについてイベントテーブルのルックアップを実行する（ブロック１１１０）。ＧＰＵコプロセッサは、イベントテーブルを使用して、メッセージをイベントにマッピングする（ブロック１１１５）。次に、ＧＰＵコプロセッサは、イベントによって指定されたサブタスクを、実行するためにスケジューリングする（ブロック１１２０）。次いで、ＧＰＵコプロセッサは、計算リソースが利用可能になった場合に後続のメッセージを処理し続ける。ブロック１１２５の後、方法１１００は終了する。
【００４３】
図１２を参照すると、行列転置演算を実行する方法１２００の一実施形態が示されている。ＧＰＵコプロセッサは、第１行列に対して行列転置演算を実行するための要求を検出する（ブロック１２０５）。ＧＰＵコプロセッサは、要求の検出に応じて、第１行列に対して行列転置演算を実行するためのサブタスクをスケジューリングする（ブロック１２１０）。一実施形態では、第１行列は、ＧＰＵコプロセッサの１つ以上のＶＧＰＲファイルに記憶される。
【００４４】
ＧＰＵコプロセッサは、クロスバーを利用して第１行列内のデータ項目を回転させて第２行列を生成する（ブロック１２１５）。第２行列は、行列転置演算の一部として生成されるデータ項目の一時的な配置であることに留意されたい。次に、ＧＰＵコプロセッサは、バイアスインデクシング操作を利用して第２行列内のデータ項目を並べ替え、第１行列の転置バージョンである第３行列を生成する（ブロック１２２０）。次いで、ＧＰＵコプロセッサは、クロスバーを利用して第３行列のデータ項目を回転させて第４行列を生成する（ブロック１２２５）。ブロック１２２５の後、方法１２００は終了する。
【００４５】
図１３を参照すると、ビデオストリームに関連する音声処理方法１３００の一実施形態が示されている。ホストプロセッサは、ビデオストリームのために、ＧＰＵにグラフィックス処理タスクをスケジューリングする（ブロック１３０５）。ホストプロセッサは、ビデオストリームに関連する音声処理タスクを実行するようにＧＰＵコプロセッサをプログラムする（ブロック１３１０）。ブロック１３１０の後、方法１３００は終了する。
【００４６】
図１４を参照すると、ＧＰＵコプロセッサの動作方法１４００の一実施形態が示されている。一実施形態では、ＧＰＵコプロセッサは、少なくともスカラユニットとベクトルユニットとを含む。一実施形態では、ベクトルユニットは、ＳＩＭＤユニットである。スカラユニットは、メッセージについてパーシステントキューを監視する（ブロック１４０５）。スカラユニットは、ベクトルユニット上で実行するためのサブタスクプロシージャをスケジューリングする（ブロック１４１０）。例えば、スカラユニットは、第１メッセージを検出したことに応じて、ベクトルユニット上で実行するための第１サブタスクプロシージャをスケジューリングする。ブロック１４１０の後、方法１４００は終了する。
【００４７】
図１５を参照すると、オペランドを異なるベクトル汎用レジスタ（ＶＧＰＲ）ファイルに割り当てる方法１５００の一実施形態が示されている。コンパイラは、ＧＰＵコプロセッサ上で実行される命令を検出する（ブロック１５０５）。コンパイラは、命令のオペランド数を決定する（ブロック１５１０）。命令のオペランド数が閾値を超える場合（条件付きブロック１５１５：Ｙｅｓ）、コンパイラは、オペランドを第１ＶＧＰＲファイル内のレジスタに割り当てる（ブロック１５２０）。一実施形態では、第１ＶＧＰＲファイルは、複数の読み出しポートを有する。一実施形態では、閾値は２である。他の実施形態では、閾値は他の数である。一方、命令のオペランド数が閾値以下である場合（条件付きブロック１５１５：Ｎｏ）、コンパイラは、オペランドを第２ＶＧＰＲファイル内のレジスタに割り当てる（ブロック１５２５）。この説明の目的のために、第２ＶＧＰＲファイルは、第１のＶＧＰＲファイルと異なると想定されてもよい。一実施形態では、第２ＶＧＰＲファイルは、単一の読み出しポートを有し、第２ＶＧＰＲファイルは、第１ＶＧＰＲファイルよりも大きい記憶容量を有する。ブロック１５２０及び１５２５の後、方法１５００は終了する。
【００４８】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を用いて、上述した方法及び／又はメカニズムを実施する。プログラム命令は、例えばＣ等の高水準プログラミング言語でハードウェアの動作を記述する。或いは、例えばＶｅｒｉｌｏｇ等のハードウェア設計言語（ＨＤＬ）が使用される。プログラム命令は、非一時的なコンピュータ可読記憶媒体に記憶される。多くのタイプの記憶媒体が利用可能である。記憶媒体は、使用中にコンピューティングシステムによってアクセス可能であり、プログラム命令及び付随データを、プログラム実行のためにコンピューティングシステムに提供する。コンピューティングシステムは、プログラム命令を実行するように構成された少なくとも１つ以上のメモリと、１つ以上のプロセッサと、を含む。上述した実施形態は、実装の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、かかる変形及び修正の全てを包含するように解釈されることを意図している。
【図１】
2019536169.tif 000003
【図２】
2019536169.tif 000004
【図３】
2019536169.tif 000005
【図４】
2019536169.tif 000006
【図５】
2019536169.tif 000007
【図６】
2019536169.tif 000008
【図７】
2019536169.tif 000009
【図８】
2019536169.tif 000010
【図９】
2019536169.tif 000011
【図１０】
2019536169.tif 000012
【図１１】
2019536169.tif 000013
【図１２】
2019536169.tif 000014
【図１３】
2019536169.tif 000015
【図１４】
2019536169.tif 000016
【図１５】
2019536169.tif 000017
【国際調査報告】
2019536169.tif 000018
2019536169.tif 000019