(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-01-09
(54)【発明の名称】デュアルベクトル算術論理ユニット
(51)【国際特許分類】
G06F 9/30 20180101AFI20231226BHJP
【FI】
G06F9/30 370
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023535509
(86)(22)【出願日】2021-12-13
(85)【翻訳文提出日】2023-07-11
(86)【国際出願番号】 US2021063132
(87)【国際公開番号】W WO2022132654
(87)【国際公開日】2022-06-23
(32)【優先日】2020-12-14
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ビン ホー
(72)【発明者】
【氏名】ブライアン エンバーリン
(72)【発明者】
【氏名】マーク レザー
(72)【発明者】
【氏名】マイケル マントル
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033AA13
5B033AA14
5B033BB02
5B033DB18
5B033DD09
(57)【要約】
処理システム(100)は、シングル命令複数データ(SIMD)ユニット(230)の複数の算術論理ユニット(ALU)パイプライン(232、234)においてウェーブフロント(302、304)を単一実行サイクルで実行する。ALUパイプラインの各々は、キャッシュ(220)においてベクトル汎用プロセスレジスタ(VGPR)バンク(510、511、512、513)から収集されたウェーブフロントオペランドに対して命令(310、312、314)を実行し、バッファ(235)においてウェーブフロントに対して実行された命令の結果を出力する、いくつかのALUを含む。VGPRバンクによって供給されるウェーブフロントをキャッシュに記憶することによって、VGPR帯域幅を増加させることなく、より多くのウェーブフロントをSIMDユニットに利用可能にすることができ、複数のALUパイプラインが単一実行サイクル中に命令を実行することを可能にする。
【選択図】
図2
【特許請求の範囲】
【請求項1】
方法であって、
第1の算術ユニット(ALU)パイプライン及び第2のALUパイプラインを備える実行ユニットにおける実行のために、各ウェーブフロントがいくつかのワークアイテムを含むウェーブフロントのセットをキャッシュに記憶することと、
前記第1のALUパイプライン及び前記第2のALUパイプラインの両方において、第1の実行サイクルにおいて、前記ウェーブフロントのセットに対してシングル命令又はデュアル命令の何れかを選択的に実行することと、を含む、
方法。
【請求項2】
前記ウェーブフロントのセットをベクトル汎用レジスタ(VGPR)バンクのセットから前記キャッシュに転送することを含む、
請求項1の方法。
【請求項3】
ウェーブフロントのワークアイテムの数は、前記第1のALUパイプラインのALUの数に対して前記第2のALUパイプラインのALUの数を加えた数に等しく、
前記選択的に実行することは、第1の実行サイクルにおいて、前記第1のALUパイプライン及び前記第2のALUパイプラインの両方においてシングル命令を実行することを含む、
請求項2の方法。
【請求項4】
前記ウェーブフロントのセットのうち何れかのウェーブフロントの前記ワークアイテムを、前記VGPRバンクのセットの間で均等に分配することを含む、
請求項3の方法。
【請求項5】
前記シングル命令又は前記デュアル命令の結果をバッファに記憶することと、
前記結果に依存する命令に応じて、前記シングル命令又は前記デュアル命令の結果を前記バッファから前記キャッシュに転送することと、を含む、
請求項1の方法。
【請求項6】
ウェーブフロントのワークアイテムの数は、前記第1のALUパイプラインのALUの数に等しく、
前記選択的に実行することは、第1の実行サイクルにおいて、前記第1のALUパイプラインにおいて第1のウェーブフロントに対して実行するための第1の命令と、前記第2のALUパイプラインにおいて第2のウェーブフロントに対して実行するための第2の命令と、を含むデュアル命令を実行することを含む、
請求項1の方法。
【請求項7】
方法であって、
キャッシュに記憶されたウェーブフロントのセットに基づいて、第1の実行サイクルにおいて、複数の算術論理ユニット(ALU)を備える第1のALUパイプライン及び複数のALUを備える第2のALUパイプラインの両方において、シングル命令又はデュアル命令の何れかを選択的に実行することを含み、
前記ウェーブフロントのセットのうち第1のウェーブフロントは、前記第1のALUパイプラインにおけるALUの数に対して、前記第2のALUパイプラインにおけるALUの数を加えた数に等しい数のワークアイテムを含む、
方法。
【請求項8】
前記ウェーブフロントのセットをベクトル汎用レジスタ(VGPR)バンクのセットから前記キャッシュに転送することを含む、
請求項7の方法。
【請求項9】
前記VGPRバンクのセットから読み取られた値を前記キャッシュに記憶することを含む、
請求項8の方法。
【請求項10】
前記シングル命令又は前記デュアル命令の結果をバッファに記憶することと、
前記結果に依存する命令に応じて、前記結果を前記バッファから前記キャッシュに転送することと、を含む、
請求項8の方法。
【請求項11】
前記デュアル命令は、前記第1の実行サイクルにおいて、前記第1のALUパイプラインにおいて第2のウェーブフロントに対して実行するための第1の命令と、前記第2のALUパイプラインにおいて第3のウェーブフロントに対して実行するための第2の命令と、を含み、
前記ウェーブフロントのセットのうち前記第2のウェーブフロントのワークアイテムの数は、前記第1のALUパイプラインのALUの数に等しく、前記第3のウェーブフロントのワークアイテムの数は、前記第2のALUパイプラインのALUの数に等しい、
請求項7の方法。
【請求項12】
デバイスであって、
ウェーブフロントの第1のセットを記憶するためのキャッシュであって、各ウェーブフロントはいくつかのワークアイテムを含む、キャッシュと、
第1の算術ユニット(ALU)パイプライン及び第2のALUパイプラインを備える実行ユニットであって、前記第1のALUパイプライン及び前記第2のALUパイプラインの両方において、第1の実行サイクルにおいて、前記ウェーブフロントの第1のセットに対してシングル命令又はデュアル命令の何れかを選択的に実行する実行ユニットと、を備え、
前記第1のALUパイプライン及び前記第2のALUパイプラインの各々は、複数のALUを備える、
デバイス。
【請求項13】
ウェーブフロントを前記キャッシュに転送するためのベクトル汎用レジスタ(VGPR)のセットを備える、
請求項12のデバイス。
【請求項14】
前記シングル命令又は前記デュアル命令からの結果を記憶するためのバッファと、
前記結果に依存する命令に応じて、結果を前記バッファから前記キャッシュに転送するためのコントローラと、を備える、
請求項12のデバイス。
【請求項15】
前記デュアル命令は、前記第1の実行サイクルにおいて、前記第1のALUパイプラインにおいて第1のウェーブフロントに対して実行するための第1の命令と、前記第2のALUパイプラインにおいて第2のウェーブフロントに対して実行するための第2の命令と、を含む、
請求項12のデバイス。
【請求項16】
第1のウェーブフロントのワークアイテムの数は、前記第1のALUパイプラインのALUの数に対して前記第2のALUパイプラインのALUの数を加えた数に等しく、
前記実行ユニットは、前記第1のALUパイプライン及び前記第2のALUパイプラインの両方において、前記第1の実行サイクルにおいて、シングル命令を選択的に実行する、
請求項12のデバイス。
【発明の詳細な説明】
【背景技術】
【0001】
グラフィックス処理ユニット(graphics processing unit、GPU)は、グラフィックス処理タスクを実行するように構成された複雑な集積回路である。例えば、GPUは、ビデオゲームアプリケーション等のエンドユーザアプリケーションによって必要とされるグラフィックス処理タスクを実行する。また、GPUは、グラフィックスに関連しない他のタスクを実行するためにもますます使用されている。GPUにおけるグラフィックス処理等の多くのアプリケーションでは、スレッドとも称される一連のワークアイテムが処理されて最終結果が出力される。多くの現代の並列プロセッサでは、例えば、シングル命令複数データ(single instruction multiple data、SIMD)ユニット内の実行ユニットは、ワークアイテムのセットを同期して実行する。共通プロセスによって生成されるワークアイテムの集合は、ウェーブフロント又はワープと称される。
【0002】
処理中、1つ以上のSIMDユニットは、複数のウェーブフロントを同時に実行する。複数の算術論理ユニット(arithmetic logic unit、ALU)を含む1つ以上のALUパイプライン等のSIMDユニットの実行ユニットは、ウェーブフロントを実行して、グラフィックス及びベクトル処理演算を実行する。ウェーブフロントの実行は、ウェーブフロント内の全てのワークアイテムが処理を完了すると終了する。各ウェーブフロントは、同じ命令セットを使用して並列に処理される複数のワークアイテムを含む。場合によっては、ウェーブフロントは、SIMDユニットのALUパイプラインのサブセットにおいて実行されるが、SIMDユニットのALUパイプラインの残りはアイドルである。ウェーブフロント内のワークアイテムの数がALUパイプライン内のALUの数を超える場合、ウェーブフロントの実行は2つ以上の実行サイクルに及ぶ。
【0003】
本開示は、添付の図面を参照することによってより良好に理解され、その数々の特徴及び利点が当業者に明らかになり得る。異なる図面における同じ符号の使用は、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【0004】
【
図1】いくつかの実施形態による、処理システムのブロック図である。
【
図2】いくつかの実施形態による、デュアル算術論理ユニット(ALU)パイプライン処理を採用した処理システムの一部のブロック図である。
【
図3】いくつかの実施形態による、単一サイクルにおいて、SIMDユニットの2つのALUパイプラインにおいて2つのシングル命令複数データ(SIMD)ALU命令を実行するためのデュアル命令を示す図である。
【
図4】いくつかの実施形態による、単一サイクルにおいて、SIMDユニットの2つのALUパイプラインにおいてウェーブフロントを実行するためのシングル命令を示す図である。
【
図5】いくつかの実施形態による、ベクトル汎用レジスタバンク間でウェーブフロントのワークアイテムをスウィズル(swizzling)することを示す図である。
【
図6】いくつかの実施形態による、単一サイクルにおいて、SIMDユニットの2つのALUパイプラインにおいて1つ以上の命令を実行するための方法を示すフロー図である。
【発明を実施するための形態】
【0005】
図1~
図6は、単一実行サイクルにおいて、シングル命令複数データ(SIMD)ユニットの複数の算術論理ユニット(ALU)パイプラインにおいてウェーブフロントを実行するための技術を示す。ALUパイプラインお各々は、キャッシュにおいてベクトル汎用レジスタ(vector general purpose register、VGPR)バンクから収集されたウェーブフロント(オペランド)に対して命令を実行するいくつかのALU(「レーン」とも称される)を含む。ALUは、ウェーブフロントに対して実行された命令の結果をバッファに出力する。VGPRバンクによって供給されるウェーブフロントをキャッシュに記憶することによって、VGPR帯域幅を増加させることなく、より多くのウェーブフロントをSIMDユニットに利用可能にすることができ、複数のALUパイプラインが単一実行サイクル中に命令を実行することを可能にする。コントローラは、後続の命令に対するオペランドである結果をキャッシュに転送する。
【0006】
いくつかの実施形態では、ウェーブフロントは、N個のワークアイテム又は2N個のワークアイテムの何れかを含み、各ALUパイプラインは、N個のALUを含む。いくつかの実施形態では、ウェーブフロントは、32個のワークアイテム(本明細書では「ウェーブ32」と称される)又は64個のワークアイテム(本明細書では「ウェーブ64」と呼ばれる)の何れかを含み、各ALUパイプラインは32個のALUを含む。各ALUパイプラインにおいて実行される命令は、実行サイクル当たり最大3つのオペランドを必要とする。したがって、いくつかの実施形態では、キャッシュは、2つのALUパイプラインが単一実行サイクルにおいて単一のウェーブ64命令又は2つのウェーブ32命令の何れかを実行することを可能にするために、少なくとも6つのオペランドを記憶するようにサイズ決定される。いくつかの実施形態では、ウェーブフロントのワークアイテムは、ALUパイプラインにおいてワークアイテムにアクセスするための帯域幅を低減するために、VGPRバンク間でスウィズル(swizzled)される。本明細書で説明される技術は、様々な実施形態では、様々な並列プロセッサ(例えば、ベクトルプロセッサ、グラフィックス処理ユニット(GPU)、汎用GPU(general-purpose GPU、GPGPU)、非スカラプロセッサ、高並列プロセッサ、人工知能(artificial intelligence、AI)プロセッサ、推論エンジン、機械学習プロセッサ、他のマルチスレッド処理ユニット等)の何れかにおいて利用される。
【0007】
図1は、いくつかの実施形態による、処理システム100のブロック図である。処理システム100は、中央処理ユニット(CPU)102及びグラフィックス処理ユニット(GPU)104を含む。様々な実施形態では、CPU102は、1つ以上の単一コアCPU又はマルチコアCPUを含む。様々な実施形態では、GPU104は、従来のCPU、従来のグラフィックス処理ユニット(GPU)、及び、これらの組み合わせ等のリソースに関連して、加速された様式で、加速されたグラフィックス処理タスク、データ並列タスク、ネストされたデータ並列タスクに関連付けられた機能及び計算を行う、ハードウェア及び/又はソフトウェアの任意の協働する集合体を含む。
図1の実施形態では、処理システム100は、CPU102とGPU104とを組み合わせて統一されたプログラミング及び実行環境を提供する単一のシリコンダイ又はパッケージ上に形成される。当該環境により、GPU104を、いくつかのプログラミングタスクのためにCPU102と同様に流動的に使用できるようになる。その他の実施形態では、CPU102及びGPU104は、別々に形成され、同じ又は異なる基板上に取り付けられる。処理システム100は、
図1に示すよりも多い又は少ない構成要素を含み得ることを理解されたい。例えば、処理システム100は、1つ以上の入力インターフェース、不揮発性ストレージ、1つ以上の出力インターフェース、ネットワークインターフェース、及び、1つ以上のディスプレイ又はディスプレイインターフェースを更に含み得る。
【0008】
図1に示すように、処理システム100は、システムメモリ106、オペレーションシステム108、通信インフラストラクチャ110、及び、1つ以上のアプリケーション112を含む。システムメモリ106へのアクセスは、システムメモリ106に連結されたメモリコントローラ(図示せず)によって管理される。例えば、システムメモリ106から読み取るか又はシステムメモリ106に書き込むための、CPU102又はその他のデバイスからの要求は、メモリコントローラによって管理される。いくつかの実施形態では、1つ以上のアプリケーション112は、CPU102においても実行される計算を行うための様々なプログラム又はコマンドを含む。CPU102は、GPU104で処理するための選択されたコマンドを送信する。オペレーティングシステム108及び通信インフラストラクチャ110を、以下でより詳細に論じる。処理システム100は、デバイスドライバ114及び入力/出力メモリ管理ユニット(IOMMU)116等のメモリ管理ユニットを更に含む。処理システム100の構成要素は、ハードウェア、ファームウェア、ソフトウェア、又は、それらの任意の組み合わせとして実装される。いくつかの実施形態では、処理システム100は、
図1に示されるものに加えて又はそれらとは異なる、1つ以上のソフトウェア構成要素、ハードウェア構成要素及びファームウェア構成要素を含む。
【0009】
処理システム100内で、システムメモリ106は、DRAM(図示せず)等の非永続的メモリを含む。様々な実施形態では、システムメモリ106は、処理論理命令、定数値、アプリケーション又はその他の処理論理の一部分の実行中の変数値、又は、その他の所望の情報を記憶する。例えば、様々な実施形態では、CPU102上の1つ以上の動作を実行するための制御論理の一部は、CPU102による動作のそれぞれの部分の実行中にシステムメモリ106内に存在する。実行中、それぞれのアプリケーション、オペレーティングシステム機能、処理論理コマンド及びシステムソフトウェアは、システムメモリ106に存在する。オペレーティングシステム108に必須の制御論理コマンドは、通常、実行中にシステムメモリ106内に存在する。いくつかの実施形態では、その他のソフトウェアコマンド(例えば、デバイスドライバ114を実装するために使用される命令又はコマンドのセット)は、処理システム100の実行中にシステムメモリ106内に存在する。
【0010】
IOMMU116は、マルチコンテキストメモリ管理ユニットである。本発明で使用する場合、コンテキストは、カーネルが実行される環境と、同期及びメモリ管理が定義されるドメインと、を考慮している。コンテキストは、デバイスのセットと、それらのデバイスにアクセス可能なメモリと、対応するメモリプロパティと、メモリオブジェクト上のカーネル(単数又は複数)又は動作の実行をスケジュールするために使用される1つ以上のコマンドキューと、を含む。IOMMU116には、GPU104等のデバイスに関するメモリページアクセスのために、仮想アドレスから物理的アドレスへの変換を実行するための論理が含まれている。いくつかの実施形態では、IOMMU116は、変換ルックアサイドバッファ(translation lookaside buffer、TLB)(図示せず)を含むか、又は、TLBへのアクセスを有する。TLBは、コンテンツアドレス指定可能メモリ(content addressable memory、CAM)に実装されて、システムメモリ106内のデータについて、GPU104によって行われる要求に対する論理(すなわち、仮想)メモリアドレスから物理メモリアドレスへの変換を加速させる。
【0011】
様々な実施形態では、通信インフラストラクチャ110は、処理システム100の構成要素を相互接続する。通信インフラストラクチャ110は、周辺構成要素相互接続(peripheral component interconnect、PCI)バス、拡張PCI(extended PCI、PCI-E)バス、高度マイクロコントローラバスアーキテクチャ(advanced microcontroller bus architecture、AMBA)バス、高度グラフィックスポート(advanced graphics port、AGP)、又は、その他のこのような通信インフラストラクチャ及び相互接続のうち1つ以上を含む(図示せず)。いくつかの実施形態では、通信インフラストラクチャ110は、イーサネット(登録商標)ネットワーク又はアプリケーションのデータ転送速度要件を満たす任意のその他の適切な物理的通信インフラストラクチャを含む。通信インフラストラクチャ110は、処理システム100の構成要素を含む、構成要素を相互接続するための機能を含む。
【0012】
デバイスドライバ114等のドライバは、相互接続又は通信インフラストラクチャ110を介してデバイス(例えば、GPU104)と通信する。呼び出しプログラムがデバイスドライバ114内のルーチンを起動させる場合、デバイスドライバ114は、コマンドをデバイスに発行する。デバイスがデータをデバイスドライバ114に戻すと、デバイスドライバ114は、元の呼び出しプログラムのルーチンを起動させる。概して、デバイスドライバは、任意の必要な非同期に依存するハードウェアインターフェースに必須の割り込み処理を提供するために、ハードウェア依存であり、オペレーティングシステム固有である。いくつかの実施形態では、コンパイラ120は、デバイスドライバ114内に埋め込まれる。コンパイラ120は、処理システム100による実行に必要なプログラム命令にソースコードをコンパイルする。このようなコンパイル中、コンパイラ120は、コンパイルの様々な段階で命令をプログラムするように変換を適用する。その他の実施形態では、コンパイラ120は、独立型アプリケーションである。様々な実施形態では、デバイスドライバ114は、例えば、CPU102において実行されるソフトウェア(例えば、アプリケーション112)にアプリケーションプログラミングインターフェース(application programming interface、API)を提供して、GPU104の様々な機能にアクセスすることによって、GPU104の動作を制御する。
【0013】
CPU102は、制御プロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、又は、デジタル信号プロセッサ(DSP)のうち1つ以上を含む(図示せず)。CPU102は、処理システム100の動作を制御する制御論理の少なくとも一部を実行する。例えば、様々な実施形態では、CPU102は、オペレーティングシステム108、1つ以上のアプリケーション112及びデバイスドライバ114を実行する。いくつかの実施形態では、CPU102は、CPU102を横切る1つ以上のアプリケーション112と関連付けられた処理及びGPU104等のその他の処理リソースを分配することによって、1つ以上のアプリケーション112の実行を開始及び制御する。
【0014】
GPU104は、並列処理に特に適しているグラフィックス動作及びその他の動作等の選択された機能のためのコマンド及びプログラムを実行する。GPU104は、通常、ピクセル操作、幾何学的計算及びディスプレイへの画像のレンダリング等のグラフィックスパイプライン操作を実行するために頻繁に使用される。いくつかの実施形態では、GPU104は、CPU102から受信したコマンド又は命令に基づいて、計算処理操作(例えば、ビデオ操作、物理的シミュレーション、計算流体ダイナミクス等のようにグラフィックスとは無関係の操作)を実行する。例えば、そのようなコマンドは、GPU104の命令セットアーキテクチャ(instruction set architecture、ISA)で典型的に定義されていない特別な命令を含む。いくつかの実施形態では、GPU104は、画像をレンダリング及び表示するための1つ以上のコマンド又は命令とともに、グラフィックス画像を表す画像ジオメトリを受信する。様々な実施形態では、画像ジオメトリは、ニ次元(2D)又は三次元(3D)のコンピュータ化されたグラフィックス画像の表現に対応する。
【0015】
様々な実施形態では、GPU104は、例えば、SIMD実行モデルに従って、その他のSIMDユニット124によってウェーブフロント内のその他のスレッドの実行と同時にスレッドを実行するように各々構成された1つ以上のSIMDユニット124を含む1つ以上の処理コア122等の1つ以上の計算ユニットを含む。SIMD実行モデルは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、したがって、同じプログラムを実行するが、そのプログラムを異なるデータで実行することができるものである。処理コア122は、シェーダコア又はストリーミングマルチプロセッサ(streaming multi-processor、SMX)とも称される。GPU104に実装される処理コア122の数は、設計上自由に選択できる。各処理コア122は、スカラ及び/又はベクトル浮動小数点ユニット、算術及び論理ユニット(ALU)等の1つ以上の処理要素を含む。様々な実施形態では、処理コア122は、逆平方根ユニット及びサイン/コサインユニット等の特殊用途処理ユニット(図示せず)を更に含む。
【0016】
1つ以上の処理コア122の各々は、特定のワークアイテムのそれぞれのインスタンス化を実行して入力データを処理し、1つ以上の処理コア122における基本的な実行単位は、ワークアイテム(例えば、スレッド)である。各ワークアイテムは、例えば、並列に実行されるコマンドによってデバイス上で起動されたカーネルの並列実行の集合体の単一のインスタンス生成を表す。ワークアイテムは、処理コア122において実行されるワークグループの一部として、1つ以上の処理要素において実行される。
【0017】
GPU104は、単一のSIMDユニット124上の「ウェーブフロント」として同時に実行されるスレッドのグループを含むワークアイテムを発行及び実行する。ウェーブフロントは、ワープ、ベクトル又はスレッドとも互換的に称されてもよい。いくつかの実施形態では、ウェーブフロントは、シェーダプログラムの並列実行のインスタンスを含むが、各ウェーブフロントは、SIMDパラダイム(例えば、複数のデータと同じ命令のストリームを実行する1つの命令制御ユニット)に従って単一のSIMDユニット124上で同時に実行される複数のワークアイテムを含む。スケジューラ128は、異なる処理コア122及びSIMDユニット124上の様々なウェーブフロントのスケジューリング、並びに、GPU104上の様々なタスクを調整するためのその他の動作の実行に関連する動作を実行するように構成されている。
【0018】
オフチップメモリアクセスに関連するレイテンシを低減するために、様々なGPUアーキテクチャは、例えば、L1キャッシュ及びローカルデータシェア(local data share、LDS)を含むメモリキャッシュ階層(図示せず)を含む。LDSは、各処理コア122専用の高速低レイテンシメモリである。いくつかの実施形態では、LDSは、ワークグループが割り当て空間内のどこでも書き込むように、フルギャザー/スキャッタモデルである。
【0019】
1つ以上の処理コア122によって与えられる並列処理は、ピクセル値計算、頂点変換、テッセレーション、ジオメトリシェーディング操作及びその他のグラフィックス操作等のグラフィックス関連操作に適している。グラフィックス処理パイプライン130は、CPU102からのグラフィックス処理コマンドを受け入れ、これにより、並列で実行するために、1つ以上の処理コア122に計算タスクを提供する。ピクセル処理及びその他の並列計算動作等のいくつかのグラフィックスパイプライン操作は、同じコマンドストリーム又は計算カーネルが入力データ要素のストリーム又は集合体に対して実行されることを必要とする。同一の計算カーネルのそれぞれのインスタンスは、このようなデータ要素を並列に処理するために、1つ以上の処理コア122における複数のSIMDユニット124上で同時に実行される。本明細書で言及されるように、例えば計算カーネルは、プログラムで宣言され、APD処理コア122上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラム又はプログラムとも称される。
【0020】
単一実行サイクルにおいて、SIMDユニット124の2つの32レーンALUパイプラインにわたって単一のウェーブ64ウェーブフロント命令又は2つのウェーブ32ウェーブフロント命令の何れかの処理を容易にするために、処理コア122は、ベクトル汎用レジスタ(VGPR)バンクから受信され、且つ、SIMDユニット124の各々への入力として利用可能なオペランド(ウェーブフロント)の数を拡張するためのキャッシュを含み、これについては以下で
図2に関してより詳細に説明する。ウェーブフロントに対してALUパイプラインによって実行された命令の結果は、バッファ(図示せず)に出力される。コントローラ(図示せず)は、後続の命令に対するオペランドである結果をキャッシュに転送する。
【0021】
様々な実施形態では、処理システム100は、コンピュータ、ラップトップ、モバイルデバイス、サーバ、又は、様々な他のタイプのコンピューティングシステム若しくはデバイスのうち何れかとすることができる。処理システム100の構成要素の数は、実施形態ごとに変化し得ることに留意されたい。
図1に示されている数より多い又は少ない各構成要素/サブ構成要素が存在することが可能である。また、処理システム100は、
図1に示されていない他の構成要素を含み得ることに留意されたい。加えて、他の実施形態では、処理システム100は、
図1に示されている以外の方法で構築され得る。
【0022】
図2は、いくつかの実施形態による、デュアル算術論理ユニット(ALU)パイプライン処理を採用した処理システム100のGPU104の一部分200のブロック図である。GPU104の一部分200は、2つのALUパイプライン、ALUパイプライン-1 232及びALUパイプライン-2 234を含むSIMDユニット230と、キャッシュ220と、を含む。キャッシュ220は、VGPRバンク210、211、212、213のセットからウェーブフロント(オペランド)222を受信する。SIMDユニット230は、命令バッファ250からウェーブフロント命令(単に命令とも称される)255を受信して、キャッシュ220に記憶されたウェーブフロント222に対して演算を実行する。実行された命令255の結果はバッファ235に記憶され、コントローラ240は、後続の命令に対するオペランドである結果をキャッシュ220及びVGPRバンク210、211、212、213に転送する。
【0023】
ALUパイプライン-1 232及びALUパイプライン-2 234の各々は、N個のALUを含む。いくつかの実施形態では、ALUパイプライン-1 232及びALUパイプライン-2 234の各々は、同じタイプのウェーブフロント命令をサポートし、他の実施形態では、ALUパイプライン-2 234は、ALUパイプライン-1 232によってサポートされるタイプのウェーブフロント命令のサブセットをサポートする。例えば、いくつかの実施形態では、ALUパイプライン-1 232及びALUパイプライン-2 234は、aとbとの積を計算し、次いでこの積にcを加算するために、融合乗算加算(fused multiply add、FMA)ウェーブフロント命令をサポートする。
【0024】
VGPRバンクのセット、VGPRバンク-0 210、VGPRバンク-1 211、VGPRバンク-2 212、及び、VGPRバンク-3 213(まとめて、VGPRバンク210~213)は、ローカルデータ共有リターンデータ、テクスチャリターンデータ及びVGPR初期化入力等の入力をソース(図示せず)から受信し、ウェーブフロントをキャッシュ220に提供する。いくつかの実施形態では、キャッシュ220は、少なくとも6つのウェーブフロントを記憶するようにサイズ決定され、入力オペランド222をALUパイプライン-1 232及びALUパイプライン-2 234に提供するための少なくとも3つの読み取りポート224を含む。いくつかの実施形態では、各VGPRバンク210~213は、他のVGPRバンク210~213から独立してアクセスされ得る。各VGPRバンク210~213はN個のレジスタを含み、Nの値は実施形態ごとに異なる。VGPRバンク210~213内のレジスタのサイズも、実施形態に応じて異なる。
【0025】
命令255等のベクトルALU(Vector ALU、VALU)命令は、命令バッファ250に記憶され、ギャザー命令キュー(図示せず)からALUパイプライン-1 232及びALUパイプライン-2 234に搬送される。ALUパイプライン-1 232及びALUパイプライン-2 234は、読み取りポート224を介してキャッシュ220から命令255及びウェーブフロントオペランド222を受信し、単一実行サイクルにおいてウェーブフロントオペランド222に対して命令255によって示されるコマンドを実行する。ALUパイプライン-1 232及びALUパイプライン-2 234は、命令255からの結果をバッファ235に出力する。コントローラ240は、バッファ235に記憶された結果のうち何れが後続の命令に対するソースオペランドであるかを判定し、ソースオペランドをキャッシュ220に転送する。コントローラ240は、ハードウェア、ファームウェア、ソフトウェア又はそれらの任意の組み合わせとして実装される。
【0026】
図3は、いくつかの実施形態による、単一サイクルにおいて、シングル命令複数データ(SIMD)ユニットの2つのALUパイプラインにおいてウェーブフロント302、304等の1つ以上のウェーブフロントに対して2つの命令を実行するための例示的なデュアル命令310の一実施形態300を示す。図示した例では、ウェーブフロント302及びウェーブフロント304の各々は、N個のワークアイテムを有し、Nは正の整数であり、Nは実施形態ごとに異なる。同様に、ALUパイプライン-1 232及びALUパイプライン-2 234の各々は、N個のレーン(ALU)を含む。一実施形態では、Nは32に等しい。
【0027】
デュアル命令310は、互いに独立であり、単一サイクル内に1つのウェーブから発行される命令のペア、命令-1 312及び命令-2 314を記述する。デュアル命令310は、ウェーブフロント302、304が、ALUパイプライン232、234の各々におけるALUの数と同じ数のワークアイテムを有するという指標を含む。命令-1 312はALUパイプライン-1 232に発行され、命令-2 314はALUパイプライン-2 234に発行される。いくつかの実施形態では、命令-1 312及び命令-2 314の各々は、最大2つのVGPRバンクを使用し、いくつかの実施形態では、命令-1 312及び命令-2 314の各々のソースオペランドは、異なるVGPRバンクを使用する。
【0028】
図4は、いくつかの実施形態による、単一サイクルにおいて、SIMDユニットの2つのALUパイプラインにおいてウェーブフロント402を実行するための例示的なシングル命令410の一実施形態400を示す。図示した例では、ウェーブフロント402は2*N個のワークアイテムを有し、Nは正の整数であり、Nは実施形態ごとに異なる。一実施形態では、Nは32に等しい。ウェーブフロント402の第1の部分は、ワークアイテムW
0~W
N-1を含み、ウェーブフロント402の第2の部分は、ワークアイテムW
N~W
2N-1を含む。シングル命令410は、ウェーブフロント402が、一緒に加算されたALUパイプライン232、234の両方におけるALUの数と同じ数のワークアイテムを有するという指標を含む。さらに、シングル命令410は、ワークアイテムW
0~W
N-1を含む部分等のウェーブフロント402の単一部分が、所定の命令サイクルにおいてALUパイプライン-1 232のレーンALU
0~ALU
N-1上で実行されるように意図されており、ワークアイテムW
N~W
2N-1を含む部分等のウェーブフロント402の他の部分が、同じ命令サイクルにおいてALUパイプライン-2 234のレーンALU
N~ALU
2N-1上で実行されるように意図されていることを示す。
【0029】
一実施形態では、Nは32であり、ウェーブフロント当たりのワークアイテムの数は64である。他の実施形態では、Nは他の値であってもよい。Nが32である実施形態では、ALUパイプライン-1 232及びALUパイプライン-2 234の各々は、レーンALU0~ALUN-1及びALUN~ALU2N-1として示される32個のレーン(又はALU)を含む。
【0030】
図5は、いくつかの実施形態による、ベクトル汎用レジスタバンクVGPRバンク-0 510、VGPRバンク-1 511、VGPRバンク-2 512、VGPRバンク-3 513(まとめて、VGPRバンク510~513)の間でウェーブフロントのワークアイテムをスウィズルする例の一実施形態500を示す。単一命令サイクルにおいて、各々がN個のレーン(又はALU)を含む2つのALUパイプラインにおける2*N個のワークアイテムを含むウェーブフロントの実行を容易にするために、VGPRの上半分及び下半分は異なるバンクに配置される。図示した例では、Nは32であり、ウェーブフロント内のワークアイテムの数は64である。ウェーブフロントの下半分(レーン31~0に対応する)は、bank[1:0]=VGPR[1:0]となるように構成され、ウェーブフロントの上半分(レーン63~32に対応する)は、bank[1:0]={VGPR[1],~VGPR[0]}となるようにスウィズルされる(すなわち、スワップされる)。
【0031】
したがって、例えば、V0(31~0)はVGPRバンク-0 510に位置し、V0(63~32)はVGPRバンク-1 511に位置し、V1(31~0)はVGPRバンク-1 511に位置し、V1(63~32)はVGPRバンク-0 510に位置する。同様に、V2(31~0)はVGPRバンク-2 512に位置し、V2(63~32)はVGPRバンク-3 513に位置し、V3(31~0)はVGPRバンク-3 513に位置し、V3(63~32)はVGPRバンク-2 512に位置する。このようにして、ウェーブフロントのワークアイテムは、VGPRバンク510~513の間で等しく分配される。スウィズルすることによってVGPRバンク間でウェーブフロントのワークアイテムを分配することにより、ソースは64レーンに対して1サイクルで読み取られることが可能になる。
【0032】
図6は、いくつかの実施形態による、単一サイクルにおいて、SIMDユニットの2つのALUパイプラインにおいて1つ以上の命令を実行するための方法600を示すフロー図である。方法600は、
図1及び
図2の処理システム100における例示的な実装に関して記述されている。ブロック602において、SIMDユニット124は、命令バッファ250から命令255を受信する。ブロック604において、SIMDユニット124は、キャッシュ220においてオペランドを収集する。ブロック606において、SIMDユニット124は、命令255が、2つのALUパイプライン上で実行するためにデュアル命令であるかシングル命令であるかを判定する。
【0033】
ブロック606において、SIMDユニット124が、命令が命令-1 312及び命令-2 314を含むデュアル命令310であると判定した場合、方法フローはブロック608に続く。ブロック608において、SIMDユニット124は、命令-1 312をALUパイプライン-1 232にルーティングし、命令-2 314をALUパイプライン-2 234にルーティングする。ブロック610において、単一命令サイクルにおいてキャッシュ220に記憶されたソースオペランドを使用して、ALU命令パイプライン-1 232は命令-1を実行し、命令パイプライン-2 234は命令-2を実行する。次いで、方法フローはブロック616に続く。
【0034】
ブロック606において、SIMDユニット124が、命令がALUパイプライン-1 232及びALUパイプライン-2 234の両方で実行されるシングル命令410であると判定した場合、方法フローはブロック612に続く。ブロック612において、GPU104は、VGPRバンク間でソースオペランドのワークアイテムをスウィズルして、ウェーブフロントが単一命令サイクルでキャッシュ220に読み取られ得るようにウェーブフロントを均等に分配する。ブロック614において、ALUパイプライン-1 232及びALUパイプライン-2 234の両方は、単一命令サイクルにおいてキャッシュ220に記憶されたソースオペランドを使用して命令410を実行する。次いで、方法フローはブロック616に続く。
【0035】
ブロック616において、SIMDユニット124は、命令の結果をバッファ235に記憶する。ブロック618において、コントローラ240は、後続の命令に対するソースオペランドである結果をバッファ235からキャッシュ220及びVGPRバンク210、211、212、213に転送する。次いで、方法フローは、次の命令のためにブロック602に戻って続く。
【0036】
いくつかの実施形態では、上記の装置及び技術は、
図1~
図6を参照して上述した処理システム等の1つ以上の集積回路(integrated circuit、IC)デバイス(集積回路パッケージ又はマイクロチップとも称される)を含むシステムに実装される。電子設計自動化(electronic design automation、EDA)及びコンピュータ支援設計(computer aided design、CAD)ソフトウェアツールは、これらのICデバイスの設計及び製造に使用することができる。これらの設計ツールは、典型的には、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計するか又は適応させるためのプロセスの少なくとも一部を実行するために、1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作するための、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含み得る。設計ツール又は製造ツールを表すソフトウェア命令は、典型的には、コンピューティングシステムにアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上の段階を表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶され、そこからアクセスされる。
【0037】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
【0038】
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装される。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶されるか、別の方法で明確に具体化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、命令及び特定のデータを含んでもよく、当該命令及び特定のデータは、1つ以上のプロセッサによって実行されると、上述した技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する。非一時的なコンピュータ可読記憶媒体は、例えば、磁気又は光ディスク記憶デバイス、フラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリデバイス(単数又は複数)等を含み得る。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈され若しくは別の方法で実行可能な他の命令形式で実装可能である。
【0039】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0040】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
【手続補正書】
【提出日】2023-08-15
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
方法であって、
第1の算術ユニット(ALU)パイプライン及び第2のALUパイプラインを備える実行ユニットにおける実行のために、各ウェーブフロントがいくつかのワークアイテムを含むウェーブフロントのセットを
、ベクトル汎用レジスタ(VGPR)バンクのセットからキャッシュに転送することと、
前記第1のALUパイプライン及び前記第2のALUパイプラインの両方において、第1の実行サイクルにおいて、前記ウェーブフロントのセットに対してシングル命令又はデュアル命令の何れかを選択的に実行することと、を含む、
方法。
【請求項2】
ウェーブフロントのワークアイテムの数は、前記第1のALUパイプラインのALUの数に対して前記第2のALUパイプラインのALUの数を加えた数に等しく、
前記選択的に実行することは、
前記第1の実行サイクルにおいて、前記第1のALUパイプライン及び前記第2のALUパイプラインの両方においてシングル命令を実行することを含む、
請求項
1の方法。
【請求項3】
前記ウェーブフロントのセットのうち何れかのウェーブフロントの前記ワークアイテムを、前記VGPRバンクのセットの間で均等に分配することを含む、
請求項
2の方法。
【請求項4】
前記シングル命令又は前記デュアル命令の結果をバッファに記憶することと、
前記結果に依存する命令に応じて、前記シングル命令又は前記デュアル命令の結果を前記バッファから前記キャッシュに転送することと、を含む、
請求項
1~3の何れかの方法。
【請求項5】
ウェーブフロントのワークアイテムの数は、前記第1のALUパイプラインのALUの数に等しく、
前記選択的に実行することは、第1の実行サイクルにおいて、前記第1のALUパイプラインにおいて第1のウェーブフロントに対して実行するための第1の命令と、前記第2のALUパイプラインにおいて第2のウェーブフロントに対して実行するための第2の命令と、を含むデュアル命令を実行することを含む、
請求項1の方法。
【請求項6】
方法であって、
ウェーブフロントのセットをベクトル汎用レジスタ(VGPR)バンクのセットからキャッシュに転送することと、
前記ウェーブフロントのセットに基づいて、第1の実行サイクルにおいて、
第1の複数の算術論理ユニット(ALU)を備える第1のALUパイプライン及び
第2の複数のALUを備える第2のALUパイプラインの両方において、シングル命令又はデュアル命令の何れかを選択的に実行することを含み、
前記ウェーブフロントのセットのうち第1のウェーブフロントは、
いくつかのワークアイテムを含む、
方法。
【請求項7】
前記VGPRバンクのセットから読み取られた値を前記キャッシュに記憶することを含む、
請求項
6の方法。
【請求項8】
前記シングル命令又は前記デュアル命令の結果をバッファに記憶すること
を含む、
請求項
6又は7の方法。
【請求項9】
前記結果に依存する命令に応じて、前記結果を前記バッファから前記キャッシュに転送することを含む、
請求項6~8の何れかの方法。
【請求項10】
前記デュアル命令は、前記第1の実行サイクルにおいて、前記第1のALUパイプラインにおいて第2のウェーブフロントに対して実行するための第1の命令と、前記第2のALUパイプラインにおいて第3のウェーブフロントに対して実行するための第2の命令と、を含み、
前記ウェーブフロントのセットのうち前記第2のウェーブフロントのワークアイテムの数は、前記第1のALUパイプラインのALUの数に等しく、前記第3のウェーブフロントのワークアイテムの数は、前記第2のALUパイプラインのALUの数に等しい、
請求項
6の方法。
【請求項11】
デバイスであって、
ベクトル汎用レジスタ(VGPR)バンクのセットから転送されたウェーブフロントの第1のセットを記憶するためのキャッシュであって、各ウェーブフロントはいくつかのワークアイテムを含む、キャッシュと、
第1の算術ユニット(ALU)パイプライン及び第2のALUパイプラインを備える実行ユニットであって、前記第1のALUパイプライン及び前記第2のALUパイプラインの両方において、第1の実行サイクルにおいて、前記ウェーブフロントの第1のセットに対してシングル命令又はデュアル命令の何れかを選択的に実行する実行ユニットと、を備え、
前記第1のALUパイプライン及び前記第2のALUパイプラインの各々は、複数のALUを備える、
デバイス。
【請求項12】
前記シングル命令又は前記デュアル命令からの結果を記憶するためのバッファ
を備える、
請求項
11のデバイス。
【請求項13】
前記結果に依存する命令に応じて、結果を前記バッファから前記キャッシュに転送するためのコントローラを備える、
請求項12のデバイス。
【請求項14】
前記デュアル命令は、前記第1の実行サイクルにおいて、前記第1のALUパイプラインにおいて第1のウェーブフロントに対して実行するための第1の命令と、前記第2のALUパイプラインにおいて第2のウェーブフロントに対して実行するための第2の命令と、を含む、
請求項
11~13の何れかのデバイス。
【請求項15】
第1のウェーブフロントのワークアイテムの数は、前記第1のALUパイプラインのALUの数に対して前記第2のALUパイプラインのALUの数を加えた数に等しく、
前記実行ユニットは、前記第1のALUパイプライン及び前記第2のALUパイプラインの両方において、前記第1の実行サイクルにおいて、シングル命令を選択的に実行する、
請求項
11~14の何れかのデバイス。
【国際調査報告】