(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-03-15
(54)【発明の名称】ウェーブフロント(wavefront)の選択及び実行
(51)【国際特許分類】
G06F 9/38 20180101AFI20240308BHJP
【FI】
G06F9/38 370A
G06F9/38 370C
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023557708
(86)(22)【出願日】2022-03-02
(85)【翻訳文提出日】2023-10-18
(86)【国際出願番号】 US2022018558
(87)【国際公開番号】W WO2022211962
(87)【国際公開日】2022-10-06
(32)【優先日】2021-03-31
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マキシム ヴィー. カザコフ
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013AA18
5B013DD01
5B013DD03
(57)【要約】
ウェーブフロントを実行するための技術が提供される。この技術は、実行のための命令を発行するための第1の時間において、第1の識別を実行することであって、第1の識別は、処理レーン内で第1の命令セットを共に実行するのに十分な処理リソースが存在するのを識別することを含む、ことと、第1の識別に応じて、第1の命令セットを共に実行することと、実行のための命令を発行するための第2の時間において、第2の識別を実行することであって、第2の識別は、処理レーン内で共に実行するのに十分な処理リソースが存在する命令が利用不可能であるのを識別することを含む、ことと、第2の識別に応じて、他の命令から独立して命令を実行することと、を含む。
【選択図】
図5
【特許請求の範囲】
【請求項1】
実行のための命令を発行するための第1の時間において、第1の識別を実行することであって、前記第1の識別は、処理レーン内で第1の命令セットを共に実行するのに十分な処理リソースが存在するのを識別することを含む、ことと、
前記第1の識別に応じて、前記第1の命令セットを共に実行することと、
実行のための命令を発行するための第2の時間において、第2の識別を実行することであって、前記第2の識別は、処理レーン内で共に実行するのに十分な処理リソースが存在する命令が利用不可能であるのを識別することを含む、ことと、
前記第2の識別に応じて、他の命令から独立して命令を実行することと、を含む、
方法。
【請求項2】
前記十分な処理リソースが存在するのを識別することは、前記第1の命令セットの各命令の少なくとも1つの動作を同じクロックサイクルで実行するのに十分な機能ユニットが前記処理レーン内に存在するのを識別することを含む、
請求項1の方法。
【請求項3】
前記十分な処理リソースが存在するのを識別することは、前記第1の命令セットの各命令が、機能ユニットの複数のコピーが前記処理レーン内に存在する単純な命令を含むことを決定することを含む、
請求項1の方法。
【請求項4】
前記十分な処理リソースが存在するのを識別することは、前記第1の命令セットのうち何れかの命令が、機能ユニットの1つのコピーが前記処理レーン内に存在する複雑な命令を含み、前記第1の命令セットのうち別の命令が、機能ユニットの複数のコピーが前記処理レーン内に存在する単純な命令を含むことを決定することを含む、
請求項1の方法。
【請求項5】
前記十分な処理リソースが存在するのを識別することは、前記第1の命令セットの各命令のオペランドに対して十分な帯域幅が存在するのを決定することを含む、
請求項1の方法。
【請求項6】
前記十分な帯域幅は、前記第1の命令セットの命令のオペランドによって消費される帯域幅がレジスタファイル内で利用可能な帯域幅よりも小さい場合に存在する、
請求項5の方法。
【請求項7】
レジスタファイル以外のソースから利用可能なオペランドは、前記レジスタファイルの帯域幅を消費しない、
請求項6の方法。
【請求項8】
前記第1の命令セットの命令は、同じウェーブフロントからの命令である、
請求項1の方法。
【請求項9】
前記第1の命令セットの命令は、異なるウェーブフロントからの命令である、
請求項1の方法。
【請求項10】
計算ユニットであって、
命令を記憶するように構成されたメモリと、
処理ユニットと、を備え、
前記処理ユニットは、
実行のために前記メモリから取得された命令を発行するための第1の時間において、第1の識別を実行することであって、前記第1の識別は、処理レーン内で第1の命令セットを共に実行するのに十分な処理リソースが存在するのを識別することを含む、ことと、
前記第1の識別に応じて、前記第1の命令セットを共に実行することと、
実行のために前記メモリから取得された命令を発行するための第2の時間において、第2の識別を実行することであって、前記第2の識別は、処理レーン内で共に実行するのに十分な処理リソースが存在する命令が利用不可能であるのを識別することを含む、ことと、
前記第2の識別に応じて、他の命令から独立して命令を実行することと、
を行うように構成されている、
計算ユニット。
【請求項11】
前記十分な処理リソースが存在するのを識別することは、前記第1の命令セットの各命令の少なくとも1つの動作を同じクロックサイクルで実行するのに十分な機能ユニットが前記処理レーン内に存在するのを識別することを含む、
請求項10の計算ユニット。
【請求項12】
前記十分な処理リソースが存在するのを識別することは、前記第1の命令セットの各命令が、機能ユニットの複数のコピーが前記処理レーン内に存在する単純な命令を含むことを決定することを含む、
請求項10の計算ユニット。
【請求項13】
前記十分な処理リソースが存在するのを識別することは、前記第1の命令セットのうち何れかの命令が、機能ユニットの1つのコピーが前記処理レーン内に存在する複雑な命令を含み、前記第1の命令セットのうち別の命令が、機能ユニットの複数のコピーが前記処理レーン内に存在する単純な命令を含むことを決定することを含む、
請求項10の計算ユニット。
【請求項14】
前記十分な処理リソースが存在するのを識別することは、前記第1の命令セットの各命令のオペランドに対して十分な帯域幅が存在するのを決定することを含む、
請求項10の計算ユニット。
【請求項15】
前記十分な帯域幅は、前記第1の命令セットの命令のオペランドによって消費される帯域幅がレジスタファイル内で利用可能な帯域幅よりも小さい場合に存在する、
請求項14の計算ユニット。
【請求項16】
レジスタファイル以外のソースから利用可能なオペランドは、前記レジスタファイルの帯域幅を消費しない、
請求項15の計算ユニット。
【請求項17】
前記第1の命令セットの命令は、同じウェーブフロントからの命令である、
請求項10の計算ユニット。
【請求項18】
前記第1の命令セットの命令は、異なるウェーブフロントからの命令である、
請求項10の計算ユニット。
【請求項19】
加速処理デバイスであって、
複数の計算ユニットを備え、
各計算ユニットは、
命令を記憶するように構成されたメモリと、
処理ユニットと、を備え、
前記処理ユニットは、
実行のために前記メモリから取得された命令を発行するための第1の時間において、第1の識別を実行することであって、前記第1の識別は、処理レーン内で第1の命令セットを共に実行するのに十分な処理リソースが存在するのを識別することを含む、ことと、
前記第1の識別に応じて、前記第1の命令セットを共に実行することと、
実行のために前記メモリから取得された命令を発行するための第2の時間において、第2の識別を実行することであって、前記第2の識別は、処理レーン内で共に実行するのに十分な処理リソースが存在する命令が利用不可能であるのを識別することを含む、ことと、
前記第2の識別に応じて、他の命令から独立して命令を実行することと、
を行うように構成されている、
加速処理デバイス。
【請求項20】
前記十分な処理リソースが存在するのを識別することは、前記第1の命令セットの各命令の少なくとも1つの動作を同じクロックサイクルで実行するのに十分な機能ユニットが前記処理レーン内に存在するのを識別することを含む、
請求項19の加速処理デバイス。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2021年3月31日に出願された「WAVEFRONT SELECTION AND EXECUTION」と題する係属中の米国特許出願第17/219,775号の利益を主張し、その全体が、参照により本明細書に組み込まれる。
【背景技術】
【0002】
グラフィックス処理ユニットは、高度並列方式でシェーダプログラムを実行する並列処理要素を含む。シェーダプログラムの実行効率の改善が絶えず行われている。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0004】
【
図1】本開示の1つ以上の特徴を実装することができる、例示的なデバイスのブロック図である。
【
図2】追加の詳細を示す、
図1のデバイスのブロック図である。
【
図3】一例による、グラフィックス処理パイプラインを示すブロック図である。
【
図4】一例による、SIMDユニットの詳細を示す図である。
【
図5】一例による、命令を実行するための方法のフロー図である。
【発明を実施するための形態】
【0005】
ウェーブフロントを実行するための技術が提供される。この技術は、実行のための命令を発行するための第1の時間において、第1の識別を実行することであって、第1の識別は、処理レーン内で第1の命令セットを共に実行するのに十分な処理リソースが存在するのを識別することを含む、ことと、第1の識別に応じて、第1の命令セットを共に実行することと、実行のための命令を発行するための第2の時間において、第2の識別を実行することであって、第2の識別は、処理レーン内で共に実行するのに十分な処理リソースが存在する命令が利用不可能であるのを識別することを含む、ことと、第2の識別に応じて、他の命令から独立して命令を実行することと、を含む。
【0006】
図1は、本開示の1つ以上の特徴を実装することができる、例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含み得る。デバイス100は、プロセッサ102、メモリ104、記憶装置106、1つ以上の入力デバイス108、及び、1つ以上の出力デバイス110を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含み得る。デバイス100は、
図1に示されていない追加の構成要素を含むことができることを理解されたい。
【0007】
様々な代替例では、プロセッサ102は、中央処理ユニット(central processing unit、CPU)、グラフィックス処理ユニット(graphics processing unit、GPU)、同じダイ上に位置するCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUとすることができる。様々な代替例では、メモリ104は、プロセッサ102と同じダイ上に位置するか、又は、プロセッサ102とは別に位置する。メモリ104は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(random access memory、RAM)、ダイナミックRAM、キャッシュ)を含む。
【0008】
記憶装置106は、固定又はリムーバブル記憶装置(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802シグナルの送信及び/又は受信のための無線ローカルエリアネットワークカード)を含むが、これらに限定されない。
【0009】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信できるようにする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信できるようにする。入力ドライバ112及び出力ドライバ114は、オプションの構成要素であること、並びに、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合、同じ方式で動作することに留意されたい。出力ドライバ114は、ディスプレイ(表示)デバイス118に連結された加速処理デバイス(accelerated processing device、APD)116を含む。APDは、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け入れて、それらの計算コマンド及びグラフィックスレンダリングコマンドを処理し、表示のためにピクセル出力をディスプレイデバイス118に提供する。以下で更に詳細に説明するように、APD116は、単一命令複数データ(single-instruction-multiple-data、SIMD)パラダイムに従って計算を行う1つ以上の並列処理ユニットを含む。こうして、様々な機能は、本明細書では、APD116によって又はAPD116と併せて行われるものとして説明されているが、様々な代替例では、APD116によって行われるものとして説明される機能は、追加的又は代替的に、ホストプロセッサ(例えば、プロセッサ102)によってドライブされない同様の能力を有する他のコンピューティングデバイスによって行われ、ディスプレイデバイス118にグラフィック出力を提供する。例えば、SIMDパラダイムに従って処理タスクを行う任意の処理システムが、本明細書に説明される機能を行い得ることが企図される。代替的に、SIMDパラダイムに従って処理タスクを行わないコンピューティングシステムが、本明細書に説明される機能を行うことが企図される。
【0010】
図2は、APD116上の処理タスクの実行に関する追加の詳細を示す、デバイス100のブロック図である。プロセッサ102は、システムメモリ104内で、プロセッサ102による実行のための1つ以上の制御論理モジュールを維持する。制御論理モジュールは、オペレーティングシステム120、ドライバ122及びアプリケーション126を含む。これらの制御論理モジュールは、プロセッサ102及びAPD116の動作の様々な特徴を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、プロセッサ102上で実行される他のソフトウェアのためのハードウェアへのインターフェースを提供する。ドライバ122は、例えば、プロセッサ102上で実行されるソフトウェア(例えば、アプリケーション126)にアプリケーションプログラミングインターフェース(application programming interface、API)を提供して、APD116の様々な機能にアクセスすることによって、APD116の操作を制御する。また、ドライバ122は、APD116の処理構成要素(以下で更に詳細に説明されるSIMDユニット138等)によって実行するためのプログラムをコンパイルするジャストインタイムコンパイラも含む。
【0011】
APD116は、並列処理に適し得るグラフィック動作及び非グラフィック動作等の選択された機能のためのコマンド及びプログラムを実行する。APD116は、プロセッサ102から受信したコマンドに基づいて、ピクセル動作、幾何学計算及びディスプレイデバイス118への画像のレンダリング等のグラフィックスパイプライン動作を実行するために使用することができる。また、APD116は、プロセッサ102から受信したコマンドに基づいて、ビデオ、物理シミュレーション、計算流体力学又は他のタスクに関連する動作等のように、グラフィックス動作に直接関連しない計算処理動作を実行する。
【0012】
APD116は、プロセッサ102の要求で、SIMDパラダイムに従って並列の方式で動作を行う1つ以上のSIMDユニット138を含む計算ユニット132を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって同じプログラムを実行するが、そのプログラムを異なるデータで実行することができるものである。一例では、各SIMDユニット138は、16個のレーンを含み、各レーンは、SIMDユニット138内の他のレーンと同時に同じ命令を実行するが、その命令を異なるデータで実行することができる。レーンは、全てのレーンが所定の命令を実行する必要がない場合、予測でオフに切り替えることができる。また、予測は、分岐制御フローを有するプログラムを実行するために使用することができる。より具体的には、制御フローが個々のレーンによって行われる計算に基づいている条件付き分岐又は他の命令を有するプログラムについては、現在実行されていない制御フローパスに対応するレーンの予測及び異なる制御フローパスのシリアル実行が、任意の制御フローを可能にする。
【0013】
計算ユニット132内の実行の基本的単位は、ワークアイテムである。各ワークアイテムは、特定のレーンにおいて並列で実行されるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMDユニット138上の「ウェーブフロント(wavefront)」として同時に実行することができる。1つ以上のウェーブフロントが「ワークグループ」に含まれ、これは、同じプログラムを実行するように指定されたワークアイテムの集合体を含む。ワークグループは、ワークグループを構成するウェーブフロントの各々を実行することによって実行することができる。代替例では、ウェーブフロントは、単一のSIMDユニット138上で連続して、又は、異なるSIMDユニット138上で部分的に若しくは完全に並列で実行される。
【0014】
コマンドプロセッサ136は、異なる計算ユニット132及びSIMDユニット138上の様々なワークグループのスケジューリングに関連する動作を実施する。概して、コマンドプロセッサ136は、プロセッサ102等のエンティティからコマンドを受信し、コマンドは、APD116に命令して、グラフィックスレンダリング、汎用シェーダの実行等のタスクを実施する。
【0015】
計算ユニット132によって与えられる並列処理は、ピクセル値計算、頂点変換及び他のグラフィック動作等のグラフィック関連動作に好適である。したがって、場合によっては、プロセッサ102からのグラフィックス処理コマンドを受け入れるグラフィックス処理パイプライン134は、並列で実行するために計算タスクを計算ユニット132に提供する。
【0016】
また、計算ユニット132は、グラフィックに関連しないか又はグラフィックス処理パイプライン134の「通常の」動作の一部(例えば、グラフィックス処理パイプライン134の動作に対して行われる処理を補足するために行われるカスタム動作)として行われない計算タスクを行うために使用される。プロセッサ102上で実行されるアプリケーション126又は他のソフトウェアは、そのような計算タスクを定義するプログラムを、実行のためにAPD116に送信する。
【0017】
図3は、
図2に示されるグラフィックス処理パイプライン134の追加の詳細を示すブロック図である。グラフィックス処理パイプライン134は、各々が特定の機能を実行する段階(ステージ)を含む。段階は、グラフィックス処理パイプライン134の機能のサブディビジョンを表す。各段階は、プログラマブル処理ユニット202内で実行されるシェーダプログラムとして部分的若しくは完全に、又は、プログラム可能な処理ユニット202の外部の固定機能非プログラム可能ハードウェアとして部分的若しくは完全に実装される。
【0018】
入力アセンブラ段階302は、ユーザが満たしたバッファからのプリミティブデータ(例えば、アプリケーション126等のプロセッサ102によって実行されるソフトウェアの要求で満たされたバッファ)を読み取り、そのデータを、パイプラインの残りの部分によって使用されるプリミティブに組み立てる(アセンブルする)。入力アセンブラ段階302は、ユーザが満たしたバッファに含まれるプリミティブデータに基づいて、異なるタイプのプリミティブを生成することができる。入力アセンブラ段階302は、パイプラインの残りの部分によって使用するための組み立てられたプリミティブをフォーマットする。
【0019】
頂点シェーダ段階304は、入力アセンブラ段階302によって組み立てられたプリミティブの頂点を処理する。頂点シェーダ段階304は、変換、スキニング、モーフィング及び各々の頂点照明等の様々な頂点毎の動作を行う。変換動作は、頂点の座標を変換するための様々な動作を含む。これらの動作は、モデリング変換、ビュー変換、投影変換、斜視分割及びビューポート変換のうち1つ以上を含む。本明細書では、そのような変換は、変換が行われる頂点の座標又は「位置」を変更すると考えられる。頂点シェーダ段階304の他の動作は、座標以外の属性を変更する。
【0020】
頂点シェーダ段階304は、1つ以上の計算ユニット132上で実行される頂点シェーダプログラムとして部分的又は完全に実装される。頂点シェーダプログラムは、プロセッサ102によって提供され、コンピュータプログラマによって事前に書き込まれたプログラムに基づく。ドライバ122は、そのようなコンピュータプログラムをコンパイルして、計算ユニット132内での実行に適した形式を有する頂点シェーダプログラムを生成する。
【0021】
ハルシェーダ段階306、モザイク化器(テッセレータ)段階308及びドメインシェーダ段階310は、モザイク化(テッセレーション)を実装するために共に動作し、モザイク化は、プリミティブを細分することによって、単純なプリミティブをより複雑なプリミティブに変換する。ハルシェーダ段階306は、入力プリミティブに基づいて、モザイク化のためのパッチを生成する。モザイク化器段階308は、パッチのためのサンプルセットを生成する。ドメインシェーダ段階310は、パッチのサンプルに対応する頂点の頂点位置を計算する。ハルシェーダ段階306及びドメインシェーダ段階310は、プログラマブル処理ユニット202上で実行されるシェーダプログラムとして実装され得る。
【0022】
ジオメトリシェーダ段階312は、プリミティブ基準で頂点動作を行う。ポイントスプリント拡張(point sprint expansion)、動的粒子システム操作(dynamic particle system operations)、ファーフィン生成(fur-fin generation)、シャドウボリューム生成(shadow volume generation)、シングルパスレンダリング-キューブマップ(single pass render-to-cubemap)、プリミティブごとの材料交換(per-primitive material swapping)、及び、プリミティブごとの材料設定(per-primitive material setup)等の動作を含む様々な異なるタイプの動作が、ジオメトリシェーダ段階312によって実行され得る。場合によっては、プログラマブル処理ユニット202上で実行されるシェーダプログラムは、ジオメトリシェーダ段階312の動作を実行する。
【0023】
ラスタライザ段階314は、単純なプリミティブを受け入れ、ラスタライズし、上流に生成される。ラスタライズは、何れのスクリーンピクセル(又はサブピクセルサンプル)が特定のプリミティブによってカバーされることを決定することを含む。ラスタライズは、固定機能ハードウェアによって行われる。
【0024】
ピクセルシェーダ段階316は、上流に生成されたプリミティブ及びラスタライズの結果に基づいて、スクリーンピクセルの出力値を計算する。ピクセルシェーダ段階316は、テクスチャメモリからテクスチャを適用することができる。ピクセルシェーダ段階316の動作は、プログラマブル処理ユニット202上で実行されるシェーダプログラムによって実行される。
【0025】
出力マージ段階318は、ピクセルシェーダ段階316からの出力を受け入れ、それらの出力をマージし、z試験及びアルファブレンド等の動作を実行して、スクリーンピクセルの最終色を決定する。
【0026】
グラフィックス処理パイプライン134は、APD116内に含まれるものとして例示されているが、グラフィックス処理パイプライン134を含まない(ただし、汎用計算シェーダプログラム等のシェーダプログラムを実行する計算ユニット132を含む)APD116の実施形態が本開示によって想定されていることを理解されたい。
【0027】
本明細書の他の箇所で説明されるように、ウェーブフロントは、複数のワークアイテムを含む。SIMDユニット138は、ウェーブフロントのワークアイテムを、SIMDユニット138のレーンにわたって足並みをそろえて、共に実行することによって、ウェーブフロントを実行する。SIMDユニット138は、複数の実行インスタンス(作業項目)に対して同じ命令フロー回路(例えば、命令フェッチ及び命令ポインタ調整回路)を利用することによって、効率的な方法で高度並列実行を容易にする。各レーンは、1つのワークアイテムのデータに対して命令の1つのインスタンスを実行するための機能ハードウェア(加算、減算、乗算、除算、マトリックス乗算、超越関数及び他の関数等のような、APD116の命令セットアーキテクチャの命令を実行するための四則演算ロジックユニット及び他の回路等)と共に提供される。
【0028】
レーン毎に1つのワークアイテムについてこれらの命令タイプの全てを実行するためのハードウェアは、特定の条件が満たされる場合、レーン毎に複数のワークアイテムについての命令を共に同時に実行するのに十分である。例えば、SIMDユニット138は、各ワークアイテムについてマトリックス乗算演算を実施することができ、かつ、マトリックス乗算は、比較的多数の乗算及び加算演算を含むため、SIMDユニット138は、そのような機能ハードウェアがそれほど多くない命令よりも高速に、乗算、加算、又は、融合した乗算及び加算命令等のような、複数の「単純な」命令を実行するためのハードウェアを有する。場合によっては、いくつかの命令についての実行速度の増加を達成することができるが、SIMDユニット138のハードウェアは、「通常」の実行速度のみを無条件でサポートするのに十分である。言い換えると、実行速度に対する制限は、レジスタファイル帯域幅に関連する制限等の他の理由により存在する。それにもかかわらず、本開示のSIMDユニット138は、非常に多くの状況においてより高速に命令を実行しようとする。
【0029】
上述した高められた実行速度は、本明細書では、「増加した実行速度」と呼ばれることがある。実行速度を増加させるための技術を実施せずに命令を実行することは、本明細書では、「通常の実行速度」で実施されると言われることがある。一実施形態では、増加した実行速度と、通常の実行速度と、の間を区別できる特徴は、増加した実行速度では、各レーンが複数の命令を実行するのに対して、通常の実行速度では、各レーンが1つの命令を実行することである。増加した実行速度で各レーンにおいて実行される複数の命令が、異なるウェーブフロントからやって来ることは可能である。あるいは、複数の命令が同じウェーブフロントからやって来ることが可能である。例えば、プログラム順序における次の命令が、プログラム順序における当該1つ後の命令と共に、同じウェーブフロントから実行することが可能である。
【0030】
図4は、一例による、SIMDユニット138の詳細を示している。いくつかの例では、SIMDユニット138の例示されたブロック(例えば、アービタ404、機能ユニット406、ベクトルレジスタファイル412又はスカラレジスタファイル414)の各々は、本明細書で説明される動作を実施するように構成されたハードワイヤード回路に実装可能である。他の実施形態では、SIMDユニット138の例示されたブロックのうちいくつか又は全ては、プロセッサ上で実行するソフトウェア、又は、ソフトウェア及びハードウェア回路の組み合わせとして実装される。
【0031】
図4のSIMDユニット138は、機能ユニット406、アービタ404、ベクトルレジスタファイル412及びスカラレジスタファイル414を含む。アービタ404は、実行のための1つ以上の保留中のワークグループ402から1つ以上の保留中の命令403を選択するように構成されている。各保留中のウェーブフロント402は、実行のためのSIMDユニット138に割り当てられるウェーブフロントである。様々な例において、この割り当ては、計算ユニット132内のスケジューラによって、又は、詳述されていない別のスケジューラによって実施される。いくつかの実施形態では、SIMDユニット138は、目的が隠された待ち時間のために「過剰申込」が行われる。「過剰申込」という用語は、SIMDユニット138に割り当てられているいくつかのワークグループが存在すること、及び、SIMDユニット138が、これらの割り当てられているワークグループの各々を同時に実行するのに十分なハードウェア(例えば、機能ユニット406)を有していないことを意味する。したがって、SIMDユニット138は、異なるワークグループからの命令を交替でスケジューリングする。ワークグループは、メモリアクセスが完了するのを待つか、又は、長い命令が完了するのを待つか等のような様々な理由によりときどき機能停止するため、隠された待ち時間が発生する。
【0032】
各保留中のワークグループ402は、機能ユニット406によって実行される命令を表す1つ以上の保留中の命令403を有する。いくつかの例では、保留中の命令403は、プログラム順序における次の命令を含む。いくつかの例では、保留中の命令403は、1つ以上のワークグループ402のための2つ以上の命令を含む。一例では、保留中の命令403は、プログラム順序において次の命令を含み、次いで、プログラム順序において当該命令の後の次の命令を含む。
【0033】
アービタ404は、保留中の命令403を検査し、通常の実行速度か又は増加した実行速度で命令を発行するかどうかを決定する。本明細書の他の箇所に記述されているように、機能ユニット406は、概して、少なくとも通常の実行速度で命令を実行するのに十分なリソースを有する。しかしながら、機能ユニット406は、全ての状況において、増加した実行速度で命令を実行するのに十分なリソースを有していない。少なくとも2つのリソース、すなわち、レジスタファイル帯域幅及び機能ユニット実行リソースが、実行を通常の実行速度に制限することがある。レジスタファイル帯域幅に関して、保留中の命令403は、レジスタファイルに存在する帯域幅よりも多くの帯域幅を必要とする性質のものである可能性がある。そのような状況では、SIMDユニット138は、増加した実行速度で動作することができず、通常の実行速度で動作する。機能ユニット実行リソースに関して、機能ユニット406内に存在する実行リソースが少なすぎることに起因して、共に実行することができる保留中の命令403が存在しない可能性がある。そのような状況では、SIMDユニット138は、通常の実行速度で実行する。少なくとも2つの保留中の命令403を共に実行するのに十分なリソースがある場合、SIMDユニット138は、増加した実行速度で実行する。「共に実行する」という用語は、機能ユニット406が、共に実行されない場合に異なるクロックサイクルで実施されることになる、複数の命令についての動作を同じクロックサイクルで実行することを意味する。一例では、命令が加算命令である場合、2つの命令を共に実行することは、単一のクロックサイクルで各命令について加算演算を実施することを意味する。この例では、2つの命令を共に実行することは、2つの異なる命令についての加算演算が異なるクロックサイクルで実施される、2つの命令を共に実行しないこととは対照的である。命令がパイプライン化されることは、命令実行が複数のサブ演算を含み、それらのサブ演算の各々は、1つ以上のクロックサイクルで実施されることを意味することに留意されたい。命令を共に実行するために、SIMDユニット138のレーンは、同じサイクルで異なる命令のための複数のサブ演算を実行することが可能である。
【0034】
本明細書の他の箇所で説明されているように、SIMDユニット138がより速い実行速度で実行することができることの1つの理由は、いくつかの命令が複雑であり、かつ、非常に多数の「単純な」機能ユニットを必要とするため、複数の命令を共に実行するのに十分な機能ユニット406が存在するからである。したがって、いくつかの例では、命令を共に実行することは、複数の命令を同じクロックサイクルで実行することを意味し、その場合、少なくとも1つのそのような命令は、他のサイクルで複雑な命令によって使用される「単純な」機能ユニットを使用する「単純な」命令である。ある例では、2つの加算命令が、共に実行され、少なくとも1つのそのような加算命令は、異なる時間に実行されるマトリックス乗算命令のために使用される加算器を使用する。
【0035】
上述したように、機能ユニットの数は、複数の命令が共に実行されることが可能であるかどうかを制限する場合がある。より具体的には、レーンは、命令セットアーキテクチャ内のあらゆる命令の複数のインスタンスを実行するための複製のハードウェアを含まないため、SIMDユニット138は、特定のタイプの命令の組み合わせを共に実行することができない。特に、SIMDユニット138は、当該命令を実行するために必要とされる機能ユニットの2つのインスタンスが機能ユニット406内に存在しない命令の2つのインスタンスを共に実行することができない。ただし、非常に単純なタイプの1つ命令及びより複雑なタイプの別の命令が、そのように実行するのに十分な機能ユニットが存在する場合に、共に実行することが可能である場合がある。一例では、加算命令、乗算命令及び融合加算乗算命令が、共に実行することができる。単純な命令の他の例としては、単純な数学的命令(例えば、減算)、ビット操作命令(例えば、ビット単位のAND、OR、XOR、シフト等)、又は、他の命令が挙げられる。いくつかの「同時実行可能な複雑な命令」とは、複数のそのような命令が共に実行するのに十分なハードウェアが存在しない命令である。したがって、アービタ404は、共に実行する複数のそのような命令を選択しない。しかしながら、SIMDユニット138は、単純な命令と共に同時実行可能な複雑な命令を実行するのに十分なハードウェアを有する。したがって、アービタは、同時実行可能な複雑な命令を選択して、単純な命令と共に実行することが許される。最後に、いくつかの「非同時実行可能な複雑な命令」は、多すぎるサイクルを消費するか、又は、多すぎる機能ユニット406を消費して、単純な命令と共に実行可能である。したがって、SIMDユニット138は、どのような他の命令と共に、決して同時共通実行可能な複雑な命令を実行しない。
【0036】
図4では、機能ユニット406は、単純な機能ユニット408、及び、複雑な命令410のための追加ロジックを含む。この単純な機能ユニット408は、単純な命令を実行するための機能ユニットである。様々な例では、単純な機能ユニット408は、加算器、乗算器、ビット単位の操作命令等を含む。複雑な命令410のための追加ロジックは、同時実行可能な複雑な命令及び非同時実行可能な複雑な命令のためのハードウェアを含む。単純な機能ユニット408は、単純な命令と、複雑な命令410のための、少なくとも何らかの追加ロジックとの間で共有される。例えば、加算器及び乗算器は、加算命令及び乗算命令、並びに、乗算及び加算を使用する、より複雑な命令のために使用される。
【0037】
上述したように、アービタ404は、保留中の命令403がレジスタファイル帯域幅内に収まるレジスタアクセス要件を有する状況において、実行するためにそれらの保留中の命令403を選択することができる。いくつかの例では、レジスタファイル帯域幅とは、レジスタファイルポートにおいて利用可能な帯域幅を指す。レジスタファイルポートは、機能ユニット406がレジスタの内容にアクセするのを可能にするインターフェースであり、制限された数のレジスタファイルポートが存在する。ある例では、ベクトルレジスタファイル412は、4つのポートを有し、それらの各々は、64ビット等のように、クロックサイクル毎に特定のビット数を提供することができる。アービタ404が、ベクトルレジスタファイル412の帯域幅内に収まる複数の保留中の命令403を見つけることができない場合に、アービタ404は、SIMDユニット138が通常の実行速度で実行すべきであると決定する。全ての命令の全てのオペランドにアクセスして共に実行するのに十分な帯域幅が存在する場合に、複数の命令が、帯域幅「内に収まる」。
【0038】
レジスタファイル帯域幅は、いくつかの例では、異なるタイプのレジスタファイルが存在するという事実によって更に拡張され、その各々は、それら独自の独立した帯域幅を有する。ある例では、SIMDユニット138は、ベクトルレジスタファイル412及びスカラレジスタファイル414を含む。このベクトルレジスタファイル412は、ベクトルレジスタファイルポートを有し、スカラレジスタファイル414は、スカラレジスタファイルポートを有する。ベクトルレジスタファイルポートは、スカラレジスタファイルポートとは独立してアクセスされる。したがって、利用可能な帯域幅は、同じレジスタファイルにアクセスする命令セットと比較して、異なるレジスタファイルにアクセスする命令セットに対して増加する。ある例では、第1の命令は、3つのベクトルレジスタファイルレジスタにアクセスし、第2の命令は、2つのベクトルレジスタファイルレジスタ及び1つのスカラレジスタファイルレジスタにアクセスする。第3の命令は、3つのベクトルレジスタファイルレジスタにアクセスする。第1及び第2の命令は、第1及び第3の命令、又は、第2及び第3の命令よりも、レジスタファイル帯域幅競合を有する可能性が低い。
【0039】
いくつかの例では、命令は、オペランドが何れの「スロット」にあるかに基づいて、レジスタファイル内のオペランドにアクセする。より具体的には、命令は、特定の順序でレジスタを参照する。この順序におけるレジスタの場所は、スロットを画定する。いくつかの実施形態では、命令のためのレジスタは、異なるクロックサイクルでアクセスされ、レジスタがアクセスされる特定のサイクルは、レジスタのスロットに依存する。いくつかの実施形態では、共に実行する命令は、同じクロックサイクルで、同じスロットのオペランドにアクセスする。ある例では、共に実行する2つの命令は、同じクロックサイクルで、第1のスロットのレジスタにアクセスする。したがって、2つの命令の各スロットのレジスタにアクセスするのに十分な帯域幅が存在する場合、それらの2つの命令は、共に実行することができ、十分な帯域幅が存在しない場合、2つの命令は、共に実行することができない。ある例では、2つの命令が、それらの第1のスロット内の2つのベクトルレジスタにアクセスする。ベクトルレジスタファイル412が第1のスロットのクロックサイクルにおいてこれらの2つのアクセスを満たすのに十分な帯域幅を有する場合、アービタ404は、共に実行するためのそれらの2つの命令をスケジューリングすることができ、そうでない場合、アービタ404は、共に実行するためのそれらの2つの命令をスケジューリングすることができない。
【0040】
アービタ404が、2つの命令のためのレジスタアクセスが利用可能なレジスタアクセス帯域幅に収まるかどうかを決定する際に、考慮するいくつかの態様が存在する。一態様は、命令によって必要とされる帯域幅の量と、そのような帯域幅が利用可能であるかどうかと、の間の比較を含む。一例では、特定の数のレジスタファイルポートが、レジスタアクセスに対して利用可能である。各ポートは、クロックサイクル毎に特定の数のビットへのアクセスを提供することができ、レジスタへのアクセスは、そのような特定の数のビットを必要とする。ある例では、第1の命令は、3つの32ビットベクトルレジスタにアクセスし、第2の命令は、1つの64ビットベクトルレジスタ及び2つの32ビットレジスタにアクセスする。この例では、ベクトルレジスタファイル412への3つのポートが存在し、各ポートが、64ビットの帯域幅を提供する。この場合、必要とされるビットの量(5×32+64=224)は、利用可能なビットの数(192)よりも大きく、したがって、そのような命令は、共に実行することができない。別の例では、第1の命令が、2つの32ビットレジスタにアクセスし、第2の命令が、3つの32ビットレジスタにアクセスする。この例では、別の競合が存在しない場合、それらの命令は、共に実行することができる。
【0041】
いくつかの実施形態では、ポートは、単一又は2倍のデータ速度を提供することができる。これらの実施形態では、ポートの各「半分」は、レジスタファイルの異なるバンクにアクセすることができる。ベクトルレジスタファイルのバンクは、異なるバンクに割り当てられたレジスタと相互に排他的である、レジスタのセットを含むレジスタファイルの一部である。ポートは、ポートのデータが2つの異なるバンクから調達される場合に、レジスタファイルのレジスタへのアクセス速度を向上させることができる。ある例では、奇数レジスタが1つのバンク内にあり、偶数レジスタが別のバンク内にある。したがって、帯域幅が命令のためのレジスタアクセスに利用可能であるかどうかを考慮する場合に、アービタ404は、アクセスされているレジスタが異なるバンク内で見つかるかどうかを考慮し、その異なるバンクは、利用可能な帯域幅を増加又は制限することができる。
【0042】
別の態様は、アクセスされているレジスタのレジスタファイルタイプを含む。具体的には、上述したように、異なるタイプのレジスタファイルが、それら自体の独立した帯域幅を有する。ある例では、ベクトルレジスタファイル412は、3ポートを有し、その各々は、64ビットにアクセスすることができ、スカラレジスタファイル414も、3ポートを有し、その各々は、64ビットにアクセスすることができる。したがって、2つの命令がベクトルレジスタ及びスカラレジスタの混合を有する場合、アービタ404は、ベクトルレジスタファイル412及びスカラレジスタファイル414の両方にわたって十分な帯域幅が存在するかどうかを考慮する。
【0043】
別の態様は、レジスタファイルを介して直接アクセスされるのに必要な帯域幅の量を低減するために、レジスタ値がレジスタファイル以外のエンティティからアクセスされ得るかどうかを含む。いくつかのそのようなエンティティは、SIMDユニット138実行パイプライン内の転送回路、オペランドキャッシュ、又は、他のオペランド若しくは命令として使用されるレジスタ値を含む。転送回路は、実行パイプラインにおいて行われるデータ障害を補償する回路である。データ障害とは、パイプライン内の1つの命令が、パイプライン内の別の命令によって読み取られるレジスタに書き込む状況である。当該他の命令がレジスタファイルからレジスタの値を読み込むことになっている場合、これは、第1の命令によって生成された値がファイルに書き込まれる前に行われた可能性があり、他の命令は、古くなってしまったデータを読み取る可能性がある。転送回路は、命令に書き込まれることになる値を提供することによって、このことが行われることを防止する。この転送回路は、レジスタファイルの帯域幅を占有しない。したがって、値の転送がこのようにして行われる場合、レジスタファイルの帯域幅は、効果的に増加する。プログラム順序で共に近接して(例えば、命令がパイプラインによって実行されるのに要するサイクル数内で)実行する命令は、転送されたデータを使用することが多い。オペランドキャッシュは、キャッシュレジスタ値をキャッシュする。命令が、そのようなオペランドキャッシュから値を取得することができる場合、これは、有効なレジスタファイル帯域幅を増加させる。レジスタ値は、複製することができ、これは、レジスタ値が1つ以上の命令にわたって2回以上使用することができることを意味する。この場合、1回のアクセスのみがレジスタファイル帯域幅を消費する。
【0044】
要約すると、アービタ404は、2つ(又はそれ以上)の命令を選択して、それらの2つの命令を実行するのに十分な機能ユニット406が存在するという状況において、また、十分なレジスタファイル帯域幅が存在するという状況において、並行して実行することができる。2つの命令が命令タイプを有し、各レーンがそれらのタイプの両方を共に実行するための機能ユニット406を含む場合、十分な機能ユニット406が存在する。2つの命令によってアクセスされるオペランドが、利用可能なレジスタファイル帯域幅内に収まる場合、十分なレジスタファイル帯域幅が存在する。
【0045】
定期的に(例えば、クロックサイクル毎に、又は、アービタ404が実行のための命令をスケジューリングする準備ができている毎に)、アービタ404は、何れの命令を実行すべきか、及び、複数の命令が共に実行することができるかに関する決定を行う。アービタ404は、保留中の命令403の1つ以上の組み合わせを考慮し、そのような1つ以上の組み合わせが、共に実行することができるために本明細書に記述された基準を満たすかどうかを判定する。そのような組み合わせは、「適格な組み合わせ」と呼ばれる。アービタ404は、そのような組み合わせが存在する状況において、共に実行するためにそのような1つの組み合わせを選択して、そのような命令の組み合わせを共に実行させる。アービタ404は、そのような組み合わせが存在しない場合、どのような命令の組み合わせにも、共に実行させず、その場合には、1つの命令に実行させる。様々な例では、アービタ404は、優先度割り当て動作によって決定されるように、最高の優先度を有する適格な組み合わせを選択する。優先度は、任意の技術的に実現可能な方法で決定され、例えば、総当たり戦実行を容易にする優先度、前進を支援する優先度、又は、任意の他の技術的に実現可能な方法で決定される優先度である。いくつかの例では、最高の優先度を有する命令が任意の他の命令と同時実行可能ではないが、優先度を有する場合、アービタ404は、実行のみのために当該命令を選択する。
【0046】
図5は、一例による、命令を実行するための方法500のフロー図である。
図1~
図4のシステムに関して説明されているが、当業者は、任意の技術的に実現可能な順序で方法500のステップを実施するように構成された任意のシステムが本開示の範囲内に入ることを理解するであろう。
【0047】
ステップ502において、アービタ404は、第1の時間において動作して、実行のための命令を発行する。アービタ404は、リソースが新しい命令に利用可能である限り、サイクル毎等のように、様々な時間における実行のための命令を選択することを理解されたい。アービタ404は、第1の命令セットを共に実行するための十分な処理リソースが存在することを識別する。いくつかの例では、命令を共に実行することは、命令の各々に対する少なくとも1つの動作が、同じサイクルでSIMDユニット138の同じレーンと共に実施されることを意味する。いくつかの例では、命令を共に実行することは、命令のうちの少なくとも1つの少なくとも1つの動作(例えば、マトリックス乗算又は他のより複雑な命令のために使用されることになる加算器のうち何れか)が、複雑な命令に対して使用されるハードウェアを用いて実施されることを意味する。いくつかの例では、命令を共に実行することは、命令の実行速度が命令の「通常の」実行速度を上回って増加することを意味する。いくつかの例では、通常の実行速度は、各命令について機能ユニット及び/又はレジスタ帯域幅について競合が存在する場合であっても、命令が実行することができる速度である。いくつかの例では、通常の実行速度とは、機能停止のための他の理由(データがメモリから取り出されるのを待つこと等)がないと仮定した場合、SIMDユニット138の1つのレーンが実行を保証するのに十分なハードウェアを有する速度である。いくつかの例では、通常の実行速度は、単一速度の実行速度であり、増加した実行速度は、2倍の実行速度である。いくつかの例では、共に実行される命令は、異なるウェーブフロントからのものであり、他の例では、共に実行される命令は、同じウェーブフロントからのものである。共に実行される命令が、異なるウェーブフロントからのものである例では、これらの命令を共に実行することは、命令が共に実行することができない場合に、1つのウェーブフロントのみからの演算が進行するのと同じ時間に2つのウェーブフロントのための演算が進行することを可能にする。ある例では、命令が共に実行することができる場合、2つのウェーブフロントの各々に対する1つの命令は、サイクル毎に(又は特定のサイクル数毎に)完了することができ、これに対して、そのような命令を共に実行することができない場合、1つのウェーブフロントのみからの命令は、サイクル毎に(又は特定のサイクル数毎に)完了することができる。
【0048】
ステップ502は、命令を共に実行するのに十分な処理リソースが存在するのを識別することを含む。いくつかの例では、そのような処理リソースがレジスタファイル帯域幅及び機能ユニットを含む。いくつかの例では、各レーンは、命令タイプの特定の組み合わせを共に実行するのに十分な機能ユニット406を有するが、命令タイプの他の組み合わせについては、そうではない。ある例では、マトリックス乗算等の複雑な命令は、加算器及び乗算器等のように、非常に多くの特定のタイプの機能ユニットを必要とする。更に、各レーンは、各命令タイプを実行することが可能であるため、各レーンは、これらの異なる機能ユニットのうち少なくとも1つのコピーを含む。したがって、各レーンは、単純な加算又は乗算演算等のより単純な命令を実施するための機能ユニットの複数のコピーを含む。したがって、一例では、命令が、それらの命令を実行するための機能ユニットのうち少なくとも1つのコピーが存在するタイプのものである場合、2つの命令に対して十分な処理リソースが存在する。
【0049】
いくつかの例では、レジスタファイル帯域幅は、ベクトルレジスタファイル412及びスカラレジスタファイル414等の1つ以上のレジスタファイルに対する帯域幅を含む。いくつかの例では、命令は、指定されたオペランドに基づいて、レジスタファイル帯域幅を消費する。より具体的には、命令は、レジスタ名によってオペランドを指定することができる。更に、これらのオペランドは、転送される必要があるデータの量を暗黙的又は明示的に含む。一例では、オペランドは、32ビットオペランド又は64ビットオペランドである。アービタ404は、複数の命令に対して指定されたデータの量が、指定されたレジスタに対して利用可能な帯域幅よりも少ない場合、レジスタファイル帯域幅が十分であると判定する。様々な例では、ベクトルレジスタファイル412及びスカラレジスタファイル414は、独立した帯域幅を有し、これは、ベクトルレジスタファイル412へのアクセスが、スカラレジスタファイル414の帯域幅を消費せず、スカラレジスタファイル414へのアクセスが、ベクトルレジスタファイル412に対する帯域幅を消費しないことを意味する。更に、SIMDユニット138がキャッシュ又は転送回路等の異なる場所からオペランドにアクセスすることができる等の他の理由により、特定のレジスタアクセスが帯域を消費しないことが可能である。レジスタを参照しないオペランド(リテラル値等)は、レジスタファイル帯域幅を消費しない。いくつかの例では、レジスタファイルアクセスに対する制限がある。例えば、いくつかの例では、全帯域幅にアクセスするために、アクセスは、レジスタファイルの2つ(又はそれ超える)の異なるバンクに対するものでなければならない。いくつかの例では、全てのバンクが使用される場合、最大帯域幅がアクセス可能であり、レジスタアクセスが特定のバンクに偏っている場合、帯域幅が制限される。ある例では、ベクトルレジスタファイル412は、2つのバンクを含む。更に、2つの命令のためのレジスタアクセスは、全帯域幅を利用し、バンク間で等しく分配される。当該状況では、命令を共に実行するのに十分な帯域幅が存在する。別の例では、2つの命令のためのレジスタアクセスは、全帯域幅を利用するが、1つのバンクに向かって大きく偏る。そのような例では、命令を共に実行するのに十分な帯域幅が存在しない。
【0050】
ステップ502は、命令を共に実行するのに十分な機能ユニットが存在すること、及び、命令を共に実行するのに十分なレジスタ帯域幅が存在することの両方を判定することを含む。ステップ504において、この決定に応じて、アービタ404は、共に実行するための第1の命令セットを発行する。いくつかの実施形態では、動作中、アービタ404は、共に実行するのにふさわしい2つ以上の命令セットの間で選択する場合があることを理解されたい。いくつかの例では、この選択は、優先度機構に基づいて行われる。
【0051】
ステップ506において、アービタ404は、共に実行するための基準を満たす命令セットが存在しないと判定する。一例では、(例えば、多すぎる機能ユニット406を使用することに起因して)任意の他の命令と共に実行することができない命令が最高優先度を有する(したがって、実行しなければならない)ため、この決定が行われる。他の例では、アービタ404が、ステップ502に関して説明された基準を満たすどのような命令セットも見つけることができないため、この決定が行われる。ステップ508において、ステップ506の決定に応じて、アービタ404は、複数の命令を共に発行する代わりに、1つの命令を発行する。
【0052】
アービタ404は、方法500のステップを連続的に実施して、実行のための命令を発行することを理解されたい。更に、方法500は、アービタ404が共に実行するための命令を選択する1回の繰り返し、及び、アービタ404が任意の他の命令と共に実行しない命令を選択する1回の繰り返しを含むが、この特定のパターンは、単に例示的なものであること、及び、アービタ404が、実行環境保証として、共に実行するための命令又は共に実行しないための命令を自由に選択できることを理解されたい。
【0053】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上に説明されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。
【0054】
各図に示され及び/又は本明細書に記載された様々な機能ユニット(プロセッサ102、入力ドライバ112、入力デバイス108、出力ドライバ114、出力デバイス110、加速処理デバイス116、コマンドプロセッサ136、グラフィックス処理パイプライン134、計算ユニット132、SIMDユニット138、システム400、又は、レジスタアロケータ402を含むが、これらに限定されない)は、汎用コンピュータ、プロセッサ若しくはプロセッサコアとして、又は、汎用コンピュータ、プロセッサ若しくはプロセッサコアによって実行可能な非一時的なコンピュータ可読記憶媒体若しくは別の媒体に記憶されているプログラム、ソフトウェア若しくはファームウェアとして実装することができる。提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実装することができる。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(digital signal processor、DSP)、複数のマイクロプロセッサ、DSPコアと関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)回路、任意の他のタイプの集積回路(integrated circuit、IC)、及び/又は、状態マシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(hardware description language、HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体に記憶させることが可能な命令)の結果を使用して製造プロセスを構成することによって製造することができる。そのような処理の結果はマスクワークとすることができ、このマスクワークをその後の半導体製造プロセスにおいて使用して、本開示の特徴を実装するプロセッサを製造する。
【0055】
本明細書に提供される方法又はフロー図は、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実装することができる。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD)等の光学媒体が挙げられる。
【国際調査報告】