(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-03-07
(45)【発行日】2025-03-17
(54)【発明の名称】柔軟な精度演算を用いた行列乗算器
(51)【国際特許分類】
G06F 17/16 20060101AFI20250310BHJP
【FI】
G06F17/16 M
(21)【出願番号】P 2022518267
(86)(22)【出願日】2020-09-23
(86)【国際出願番号】 US2020052211
(87)【国際公開番号】W WO2021061768
(87)【国際公開日】2021-04-01
【審査請求日】2023-08-29
(32)【優先日】2019-09-24
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ビン ホー
(72)【発明者】
【氏名】マイケル マントル
(72)【発明者】
【氏名】ジャーシェン チェン
(72)【発明者】
【氏名】ジャン ファン
【審査官】田中 幸雄
(56)【参考文献】
【文献】特表2012-505455(JP,A)
【文献】米国特許出願公開第2005/0193050(US,A1)
【文献】国際公開第2019/002811(WO,A1)
【文献】特開2010-79361(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
積和演算素子を含む複数のベクトル信号プロセッサ(VSP)と、
前記複数のVSPに関連する複数のレジスタと、を備える装置であって、
複数の反復を含む第一
ラウンドの前に、第一行列及び第二行列の第一部分が前記複数のレジスタにフェッチされ、
前記積和演算素子は、第二
ラウンドのために前記第一行列及び前記第二行列の第二部分を前記複数のレジスタにフェッチする前に、前記複数の反復中の前記第一行列及び前記第二行列の前記第一部分のサブセットの異なる組み合わせに対して行列の積和演算を実行する、
装置。
【請求項2】
前記複数のVSPは、第一バッファと、第二バッファと、出力バッファと、をさらに含み、前記第一行列及び前記第二行列の前記第一部分の前記サブセットは、前記複数の反復を開始する前に、前記複数のレジスタから前記複数のVSPの前記第一バッファ及び前記第二バッファにコピーされる、
請求項1の装置。
【請求項3】
前記複数の反復のうち現在の反復中に、前記積和演算素子は、行列の積和演算を、前記現在の反復中の対応する前記第一バッファ及び前記第二バッファに格納された前記第一行列及び前記第二行列の前記第一部分の前記サブセットに対して実行する、
請求項2の装置。
【請求項4】
前記現在の反復中に前記積和演算素子が前記行列の積和演算を実行した後に、前記現在の反復中に、
前記複数のVSP間で前記第一行列の前記第一部分の前記サブセット
をローテーションする、
請求項3の装置。
【請求項5】
前記複数のVSPを相互接続するクロスバースイッチをさらに含み、前記第一行列の前記第一部分の前記サブセット
を、前記クロスバースイッチを介して前記
複数のVSP
間でローテーションする、
請求項4の装置。
【請求項6】
前記積和演算素子が、前記第一
ラウンドにおける前記複数の反復中に、前記第一行列及び前記第二行列の前記第一部分の前記サブセットの全ての組み合わせに対して前記行列の積和演算を実行するように、前記複数の反復が前記複数のVSPに対応する、
請求項1の装置。
【請求項7】
前記複数のVSPは、出力バッファをさらに含み、
前記積和演算素子は、前記第一
ラウンドにおける前記複数の反復中に前記行列の積和演算を実行した後であって、前記第二
ラウンドを開始する前に、積の累算結果を前記出力バッファに書き込む、
請求項1~6の何れかの装置。
【請求項8】
前記第一行列及び前記第二行列の前記第二部分は、前記積和演算素子が前記累算結果を前記出力バッファに書き込むことに応じて、前記複数のレジスタにフェッチされる、
請求項7の装置。
【請求項9】
複数の反復を含む第一
ラウンドの前に、複数のベクトル信号プロセッサ(VSP)に関連する複数のレジスタに第一行列及び第二行列の第一部分をフェッチすることと、
行列の積和演算を、前記複数の反復中に前記第一行列及び前記第二行列の前記第一部分のサブセットの異なる組み合わせに対して実行することと、
前記第一
ラウンドの前記複数の反復を完了したことに応じて、第二
ラウンドのための前記第一行列及び前記第二行列の第二部分を前記複数のレジスタにフェッチすることと、を含む、
方法。
【請求項10】
前記複数の反復を開始する前に、前記第一行列及び前記第二行列の前記第一部分の前記サブセットを前記複数のレジスタから前記複数のVSP内の第一バッファ及び第二バッファにコピーすることをさらに含む、
請求項9の方法。
【請求項11】
前記複数の反復のうち現在の反復中に、行列の積和演算を、前記現在の反復中の前記第一行列及び前記第二行列の前記第一部分の前記サブセットに対して実行することをさらに含む、
請求項10の方法。
【請求項12】
前記行列の積和演算を前記現在の反復中に実行した後に、前記現在の反復中に、
前記複数のVSP間で前記第一行列の前記第一部分の前記サブセットを
ローテーションすることをさらに含む、
請求項11の方法。
【請求項13】
前記複数のVSP間で前記第一行列の前記第一部分の前記サブセットを
ローテーションすることは、前記第一行列の前記第一部分の前記サブセットを、前記複数のVSPを相互接続するクロスバースイッチを介して
前記複数のVSP間でローテーションすることを含む、
請求項12の方法。
【請求項14】
前記複数の反復は前記複数のVSPに対応し、前記行列の積和演算を実行することは、前記第一
ラウンドの前記複数の反復中に、前記第一部分及び前記第二部分の前記サブセットの全ての組み合わせに対する前記行列の積和演算を含む、
請求項11の方法。
【請求項15】
前記第一
ラウンドの前記複数の反復中に前記行列の積和演算を実行した後であって、前記第二
ラウンドを開始する前に、積の累算結果を出力バッファに書き込むことをさらに含み、
前記第一行列及び前記第二行列の前記第二部分をフェッチすることは、前記累算結果を前記出力バッファに書き込むことに応じて、前記第一行列及び前記第二行列の前記第二部分を前記複数のレジスタにフェッチすることを含む、
請求項9~14の何れかの方法。
【発明の詳細な説明】
【背景技術】
【0001】
深層学習、ハイパフォーマンスコンピューティング(HPC)、クラウドコンピューティング及びグラフィックスレンダリング等のデータ集約型アプリケーションを使用して、大規模シミュレーション、気候変動、計算生物学、疾病予防、財務モデリング等を含む課題に対処する。データ集約型アプリケーションをサポートするために、グラフィックスプロセッシングユニット(GPU)等の処理ユニットは、高い浮動小数点パフォーマンス及び高いメモリ帯域幅速度を提供するように設計されている。例えば、GPU内の単一命令複数データ(SIMD)素子の各々は、行列積等の並列演算を実行する4つのベクトル信号プロセッサ(VSP)を含む。対応するソフトウェアプラットフォームによって、エンジニアは、ハイパフォーマンスGPUのリソースを利用することができる。場合によっては、ソフトウェアプラットフォームは、柔軟な混合精度機能を提供する深層学習演算(dlops)をサポートし、これらの混合精度機能は、ニューラルネットワークをトレーニングすること、及び、トレーニングされたニューラルネットワークに対して推論を実行すること等の動的作業負荷をサポートする。柔軟な混合精度機能を実装するには、複素マルチプレクサ、GPU内のVSP間のクロスバースイッチ、及び、ベクトル汎用レジスタ(VGPR)等のレジスタのレイアウトでの複雑化を組み込むことが必要である。
【0002】
添付の図面を参照することにより、本開示をより良く理解することができ、その多くの特徴及び利点が当業者に明らかとなる。異なる図面で同じ符号が使用されている場合には、類似又は同一のアイテムを示している。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、柔軟な精度行列演算をサポートする処理システムのブロック図である。
【
図2】いくつかの実施形態による、2つの行列の行列積のブロック図である。
【
図3】いくつかの実施形態による、4つのベクトル信号プロセッサ(VSP)を含む単一命令複数データ(SIMD)ユニットのブロック図であり、これらのVSPは、システムメモリから行列の部分を協調フェッチし、行列積を求める。
【
図4】いくつかの実施形態による、行列積の丸めにおける反復シーケンスの第一反復及び第二反復中のVSPバッファのブロック図である。
【
図5】いくつかの実施形態による、行列積の丸めにおける反復シーケンスの第三反復及び第四反復中のVSPバッファのブロック図である。
【
図6】いくつかの実施形態による、2つの行列の行列積のブロック図であり、これらの行列のうち1つに部分行列の代替の配列を使用する。
【
図7】いくつかの実施形態による、処理ユニットの複数のVSP内のバッファを介してオペランドを回転させることによって行列積の丸めを実行する方法のブロック図である。
【発明を実施するための形態】
【0004】
データ集約型アプリケーションは、メモリ、処理能力及び帯域幅を含む処理リソースを大量に消費して、メモリとプロセッサとの間でデータを移動させる。したがって、これらのアプリケーションには、より低い電力でより高い計算密度を提供するだけでなく、浮動小数点及び整数演算についての様々な精度をサポートするハードウェアが必要とされる。GPUのパフォーマンスは、オペランドの精度と、面積当たり、そしてワット当たりの深層学習演算(dlops)レートと、によって制限される。32ビットのストリーミングプロセッサのパフォーマンスは、拡張された累算レジスタファイルを実装することにより、より高いスループットの多精度dlopsをサポートするように拡張可能である。ただし、dlopsレートの向上は、2つのVGPRファイルを分離するアーキテクチャによって制限され、倍精度を必要とするHPCアプリケーション等の一般的な計算では、行列パイプラインのロジックを利用することができない。
【0005】
図1~
図7は、第一行列及び第二行列の行列積の間、ハイパフォーマンス処理ユニットでの単位面積当たりの消費電力を低減させ、データの再使用を増加させることで、複数のベクトル信号プロセッサ(VSP)を含む処理ユニットでの帯域幅消費を低減させるための技術を開示する。VSPは、メモリから、処理ユニットの単一命令複数データ(SIMD)素子に実装された対応するレジスタ(ベクトル汎用レジスタ、VGPR等)に第一行列及び第二行列の部分を協調的にフェッチする。第一反復では、第一行列及び第二行列の部分は、レジスタから、複数のVSP内の対応する第一バッファ及び第二バッファに書き込まれる。複数のVSP内の積和演算素子は、第一バッファ及び第二バッファ内の値を結合し、これらの結果を、後続の結果との累算のために格納する。後続の反復では、第一行列及び第二行列の部分の異なる組み合わせが複数のVSPによって積和されるように、第一行列の部分が複数のVSPの第一バッファを通して回転する。例えば、4つのVSPがSIMD素子内に実装される場合、第一行列の4つの部分及び第二行列の4つの部分は、4つの第一バッファ及び4つの第二バッファに書き込まれる。VSP内の積和演算素子で行列積演算を実行し、第一行列の部分を、クロスバースイッチを介して異なるVSP内の異なる第一バッファに回転させる。積和演算素子は、別のセットの行列積演算を並行して実行し、このプロセスが4回繰り返される。複数のVSPの各々の累算結果は、複数のVSPに関連するレジスタに格納される第二行列の各部分と、第一行列の各部分の積和演算を実行することに応じて、VGPR(又は、VGPRの前に対応する出力バッファ)に書き戻される。次に、第一行列及び第二行列の新しい部分は、行列積演算のその次の丸めのためにレジスタにフェッチされる。
【0006】
図1は、いくつかの実施形態による、柔軟な精度行列演算をサポートする処理システム100のブロック図である。処理システム100は、システムメモリ105、又は、ダイナミックランダムアクセスメモリ(DRAM)等の非一時的なコンピュータ可読媒体を使用して実装される他のストレージコンポーネントを含むか、それらにアクセスする。ただし、メモリ105のいくつかの実施形態は、スタティックランダムアクセスメモリ(SRAM)、不揮発性RAM等を含む他のタイプのメモリを使用して実装される。また、処理システム100は、バス110を含み、このバスは、メモリ105等のように、処理システム100内に実装されるエンティティ間の通信をサポートする。処理システム100のいくつかの実施形態は、分かり易くするために
図1に示されていない他のバス、ブリッジ、スイッチ、ルータ等を含む。
【0007】
処理システム100は、中央処理装置(CPU)115を含む。CPU115のいくつかの実施形態は、命令を並行して、又は、並列に実行する複数の処理素子(分かり易くするために
図1に示されていない)を含む。処理素子は、プロセッサコア、計算ユニット又は他の用語を使用して呼ばれる。CPU115は、バス110に接続されているため、バス110を介してメモリ105と通信する。CPU115は、メモリ105に格納されたプログラムコード120等の命令を実行し、CPU115は、実行された命令の結果等の情報をメモリ105に格納する。また、CPU115は、ドローコールを発行することによってグラフィックス処理を開始することができる。
【0008】
入出力(I/O)エンジン125は、ディスプレイ130だけでなく、キーボード、マウス、プリンタ、外部ディスク等の処理システム100の他の要素に関連する入力又は出力操作を処理する。I/Oエンジン125は、バス110に結合されているため、I/Oエンジン125は、メモリ105、CPU115、又は、バス110に接続された他のエンティティと通信することができる。図示した実施形態では、I/Oエンジン125は、外部ストレージコンポーネント135に格納された情報を読み出し、この外部ストレージコンポーネントは、コンパクトディスク(CD)、デジタルビデオディスク(DVD)等の非一時的なコンピュータ可読媒体を使用して実装される。また、I/Oエンジン125は、CPU115による処理の結果等の情報を外部ストレージコンポーネント135に書き込む。
【0009】
処理システム100は、ディスプレイ130上で提示される画像をレンダリングするグラフィックスプロセッシングユニット(GPU)140を含む。例えば、GPU140は、オブジェクトをレンダリングして、ピクセル値を生成し、これらのピクセル値をディスプレイ130に提供し、ディスプレイ130は、ピクセル値を使用して、レンダリングされたオブジェクトを表す画像を表示する。GPU140のいくつかの実施形態は、汎用コンピューティングに使用される。図示した実施形態では、GPU140は、バス110を介してメモリ105(及び、バス110に接続された他のエンティティ)と通信する。ただし、GPU140のいくつかの実施形態は、直接接続を介して、又は、他のバス、ブリッジ、スイッチ、ルータ等を介してメモリ105と通信する。GPU140は、メモリ105に格納された命令を実行し、GPU140は、実行された命令の結果等の情報をメモリ105に格納する。例えば、メモリ105は、GPU140によって実行されるプログラムコードを表す命令のコピー145を格納する。
【0010】
GPU140は、1つ以上の単一命令複数データ(SIMD)ユニット150を含むが、明確にするために
図1に1つだけ示されている。SIMDユニット150は、ベクトル信号プロセッサ(VSP)151,152,153,154等の複数の処理素子を含み、これらは、本明細書では「VSP151~154」とまとめて呼ばれる。図示した実施形態では、クロスバースイッチ155は、VSP151~154を相互接続し、VSP151~154間で情報を伝達するための通信経路を提供する。VSP151~154は、システムメモリ105からフェッチされた情報に対して、例えば明確にするために
図1に示されていないベクトル汎用レジスタ(VGPR)等のレジスタにベクトル演算を実行する。
【0011】
行列積演算を実行するために、VSP151~154は、システムメモリ105から情報を協調的にフェッチし、情報のサブセットに行列積演算を実行してから、情報のサブセットを交換することにより、VSP151~154は、サブセットの様々な組み合わせに行列積演算を実行することができる。VSP151~154のいくつかの実施形態は、システムメモリ105から行列の部分を協調的にフェッチし、次に、これらの行列のフェッチされた部分に行列積演算を実行する。これらの部分は、VSP151~154を通して、例えばクロスバースイッチ155等を介して回転するため、行列の異なる部分の行列積は、システムメモリ105から行列の追加部分をフェッチする前に実行され、累算される。いくつかの実施形態では、複数の反復を含む第一丸めの前に、第一及び第二行列の第一部分をVGPRにフェッチする。VSP151~154内の積和演算素子は、第二丸めの間に第一及び第二行列の第二部分をVGPRにフェッチする前に、複数の反復中に第一及び第二行列の第一部分のサブセットの様々な組み合わせに行列の積和演算を実行する。
【0012】
GPU140のいくつかの実施形態は、異なる精度で柔軟に演算する32ビットストリーミングプロセッサとして実装される。例えば、GPU140は、単精度オペランド、倍精度オペランド、FP16オペランド、及び、8ビット整数オペランドを使用して、正則演算及び行列演算を実行する。
【0013】
図2は、いくつかの実施形態による、2つの行列の行列積200のブロック図である。行列積200は、
図1に示すGPU140のいくつかの実施形態によって実行される。行列積200を使用して、行列205と行列210との積を求め、出力行列215を生成する。図示した実施形態では、行列積200は、行列205,210からの部分行列(又は、サブセット若しくは部分)を乗算し、適切な結果を累算して、出力行列215の対応する部分行列を生成することによって実行される。例えば、行列205からの部分行列A1、及び、行列210からの部分行列B1を積和し、出力行列215の部分行列220を生成する。
【0014】
本明細書で説明するように、行列205,210の部分行列のグループは、SIMD内の複数のVSPによってシステムメモリから協調的にフェッチされ、ついで、VSPは、このフェッチされたデータを共有し、部分行列の様々な組み合わせの行列積を求め、それらの結果を累算する。図示した実施形態では、
図1に示すVSP151~154等の4つのVSPは、行列205からの部分行列A1,A2,A3,A4及び行列210からの部分行列B1,B2,B3,B4を協調的にフェッチする。次に、4セットの行列積を実行し、累算して、出力行列215の部分225の要素を生成する。
【0015】
行列積のセットは、反復して実行される。第一反復では、部分行列A1は、VSPのうち何れかにあるバッファからアクセスされ、他のVSPによってクロスバースイッチを介してアクセスされる。4つのVSPは、行列積を実行する。
A1×B1
A1×B2
A1×B3
A1×B4
【0016】
第二反復の間、行列205からの部分行列A1,A2,A3,A4は、VSPを介して回転し、行列210からの部分行列B1,B2,B3,B4は、それらの元の位置に留まる。本明細書で使用される「回転させる」という用語は、VSPによってそれらの内部バッファ又はクロスバースイッチを介してアクセスされる部分行列A1,A2,A3,A4を変更することを指す。図示した実施形態では、第一反復に続く部分行列A1,A2,A3,A4の回転により、VSPは、内部バッファ又はクロスバースイッチを介して部分行列A2にアクセスする。ただし、他のタイプ又はパターンの回転は、他の実施形態では、内部バッファ及びクロスバースイッチを使用して実施される。
【0017】
第二反復では、4つのVSPは、行列積を実行する。
A2×B1
A2×B2
A2×B3
A2×B4
【0018】
第三反復の間、行列205からの部分行列A1,A2,A3,A4は、VSPを介して再度回転し、行列210からの部分行列B1,B2,B3,B4は、それらの元の位置に留まる。第三反復では、4つのVSPは、行列積を実行する。
A3×B1
A3×B2
A3×B3
A3×B4
【0019】
第四反復の間、行列205からの部分行列A1,A2,A3,A4は、VSPを介して再度回転し、行列210からの部分行列B1,B2,B3,B4は、それらの元の位置に留まる。第四反復では、4つのVSPは、行列積を実行する。
A4×B1
A4×B2
A4×B3
A4×B4
【0020】
この時点では、VSPは、出力行列215の部分225に対応する寄与を生成するために必要な部分行列A1,A2,A3,A4及び行列210からの部分行列B1,B2,B3,B4の全ての組み合わせの行列積を一括して実行したことになる。第四反復を完了することに応じて累算結果が書き込まれ、VSPは、行列210,215の他の部分行列を協調的にフェッチして、反復の別の丸めを実行する。
【0021】
図3は、いくつかの実施形態による、4つのVSP301,302,303,304を含むSIMDユニット300のブロック図であり、これらのVSPは、システムメモリから行列の部分を協調的にフェッチし、行列積を求める。SIMDユニット300を使用して、
図1に示すSIMDユニット150のいくつかの実施形態を実装する。VSP301~304は、互いに乗算される2つの行列の部分(例えば、
図2に示す行列205,210の部分)を格納するVGPR305,306,307,308(本明細書では「VGPR305~308」とまとめて呼ばれる)に関連付けられている。本明細書で説明するように、フェッチされた部分を含む行列積演算の丸めの開始時に、行列の部分をシステムメモリからVGPR305~308に協調的にフェッチする。
【0022】
VSP301~304は、第一バッファ310,311,312,313(本明細書では「第一バッファ310~313」とまとめて呼ばれる)と、第二バッファ315,316,317,318(本明細書では「第二バッファ315~318」とまとめて呼ばれる)と、を含む。第一バッファ310~313は、VGPR305~308に格納された第一行列の部分のサブセットを格納し、第二バッファ315~318は、VGPR305~308に格納された第二行列の部分のサブセットを格納する。また、VSP301~304は、第一バッファ310~313及び第二バッファ315~318に格納されたサブセットに対して行列積を実行する、行列の積和演算素子320,321,322,323(本明細書では「積和演算素子320~323」とまとめて呼ばれる)を含む。次に、行列積の結果は、行列の積和演算素子320~323によって累算される。
【0023】
クロスバースイッチ330がVSP301~304を相互接続することにより、第一バッファ310~313のコンテンツを、VSP301~304間で伝達し又は回転することができる。図示した実施形態では、行列積演算の丸めを開始する前に、第一行列の部分A1,A2,A3,A4及び第二行列の部分B1,B2,B3,B4をシステムメモリからVGPR305~308にフェッチする。第一行列の部分A1,A2,A3,A4は、VGPR305~308から対応する第一バッファ310~313にコピーされ、第二行列の部分B1,B2,B3,B4は、VGPR305~308から対応する第二バッファ315~318にコピーされる。丸めの第一反復中に、積和演算素子320~323は、第二バッファ315~318のコンテンツと、第一バッファ310~313、又は、第一バッファ310~313からクロスバースイッチ330を介して伝達される値のコンテンツと、に行列積を実行する。次に、第一バッファ310~313のコンテンツを回転させ、積和演算プロセスの反復の別の丸めを実行する。このプロセスは、第一行列の部分A1,A2,A3,A4と、第二行列の部分B1,B2,B3,B4との全ての組み合わせを互いに乗算するまで繰り返される。次に、積和演算素子320~323は、対応する出力バッファ325,326,327,328(本明細書では「出力バッファ325~328」とまとめて呼ばれる)に累算結果を書き込む。いくつかの実施形態では、出力バッファ325~328を使用せず、代わりにVGPR305~308に累算結果を直接書き込む。
【0024】
図4は、いくつかの実施形態による、行列積の丸めでの反復シーケンスの第一反復400及び第二反復401中に実行される行列積のブロック図である。反復の丸めを開始する前に、部分A1,A2,A3,A4及び部分B1,B2,B3,B4は、対応するVGPR及びVSP内のバッファにロードされる。図示した実施形態では、第一VSP内のバッファは第一及び第二行列の部分A1,B1を含み、第二VSP内のバッファは第一及び第二行列の部分A2,B2を含み、第三VSP内のバッファは第一及び第二行列の部分A3,B3を含み、第四VSP内のバッファは第一及び第二行列の部分A4,B4を含む。
【0025】
第一反復400中に、対応するVSP内の算術論理演算装置は、部分行列対(ペア)405,406,407,408を形成し、これらの部分行列対は、本明細書では部分行列対405~408とまとめて呼ばれる。算術論理演算装置は、対405~408を乗算し、それらの結果を累算する。算術論理演算装置のいくつかの実施形態は、
図3に示すVSP301~304内の積和演算素子320~323に対応する。反復(又は、サイクル)に応じて、算術論理演算装置は、以下に説明するように、VSP内のバッファから又はクロスバースイッチを介して、部分行列対405~408の値にアクセスする。図示した実施形態では、第一VSP内の算術論理演算装置は、第一反復400中に、バッファから部分A1,B1にアクセスして、対405を形成する。次に、算術論理演算装置は、バッファのコンテンツに行列積を実行し、それらの結果を累算する。他のVSP内の算術論理演算装置は、第一反復400の間にクロスバースイッチを介して部分A1にアクセスする。次に、算術論理演算装置は、対406~408に行列積を実行する。第一反復400の終了時に、部分A1,A2,A3,A4が回転し、部分B1,B2,B3,B4が回転しない。
【0026】
第二反復401中に、対応するVSP内の算術論理演算装置は、部分行列対410,411,412,413を形成し、これらの部分行列対は、本明細書では部分行列対410~413とまとめて呼ばれる。算術論理演算装置は、対410~413を乗算し、それらの結果を累算する。図示した実施形態では、第二VSP内の算術論理演算装置は、バッファから部分A2,B2にアクセスして、対411を形成する。次に、算術論理演算装置は、バッファのコンテンツに行列積を実行し、それらの結果を累算する。他のVSP内の算術論理演算装置は、クロスバースイッチを介して部分A2にアクセスする。次に、算術論理演算装置は、対410,412,413に行列積を実行する。第二反復401の終了時に、部分A1,A2,A3,A4が回転し、部分B1,B2,B3,B4が回転しない。
【0027】
図5は、いくつかの実施形態による、行列積の丸めにおける反復シーケンスの第三反復500及び第四反復501中に実行される行列積のブロック図である。いくつかの実施形態では、第三及び第四反復500,501は、
図4に示す第一及び第二反復400,401に続き、これら第一及び第二反復のものと同じ行列積演算の丸めである。部分A1,A2,A3,A4及び部分B1,B2,B3,B4は、対応するVGPR及びVSP内のバッファにロードされる。図示した実施形態では、第一VSP内のバッファは第一及び第二行列の部分A1,B1を含み、第二VSP内のバッファは第一及び第二行列の部分A2,B2を含み、第三VSP内のバッファは第一及び第二行列の部分A3,B3を含み、第四VSP内のバッファは第一及び第二行列の部分A4,B4を含む。
【0028】
第三反復500中に、対応するVSP内の算術論理演算装置は、部分行列対505,506,507,508を形成し、これらの部分行列対は、本明細書では部分行列対505~508とまとめて呼ばれる。算術論理演算装置は、対505~508を乗算し、それらの結果を累算する。図示した実施形態では、第三VSP内の算術論理演算装置は、バッファから部分A3,B3にアクセスして、対507を形成する。次に、算術論理演算装置は、バッファのコンテンツに行列積を実行し、それらの結果を累算する。他のVSP内の算術論理演算装置は、クロスバースイッチを介して部分A3にアクセスする。次に、算術論理演算装置は、対505,506,508に行列積を実行する。第三反復500の終了時に、部分A1,A2,A3,A4が回転し、部分B1,B2,B3,B4が回転しない。
【0029】
第四反復501中に、対応するVSP内の算術論理演算装置は、部分行列対510,511,512,513を形成し、これらの部分行列対は、本明細書では部分行列対510~513とまとめて呼ばれる。算術論理演算装置は、対510~513を乗算し、それらの結果を累算する。図示した実施形態では、第四VSP内の算術論理演算装置は、バッファから部分A4,B4にアクセスして、対513を形成する。次に、算術論理演算装置は、バッファのコンテンツに行列積を実行し、それらの結果を累算する。他のVSP内の算術論理演算装置は、クロスバースイッチを介して部分A4にアクセスする。次に、算術論理演算装置は、対510~512に行列積を実行する。第四反復501の終了時に、算術論理演算装置は、
図3に示す出力バッファ325~328等の対応する出力バッファに累算結果を書き込む。次に、第一行列及び第二行列の新しい部分を、VSPに関連するVGPRにフェッチし、これらの部分を対応するバッファにコピーして、行列積の別の丸めを開始する。
【0030】
図6は、いくつかの実施形態による、2つの行列の行列積600のブロック図であり、これらの行列のうち何れかに部分行列の代替の配列を使用する。行列積600は、
図1に示すGPU140のいくつかの実施形態によって実行される。行列積600を使用して、行列605と行列610とを乗算し、出力行列615を生成する。図示した実施形態では、行列積600は、行列605,610からの部分行列(又は、サブセット若しくは部分)を乗算し、適切な結果を累算して、出力行列615の対応する部分行列を生成することによって実行される。例えば、行列605からの部分行列A1、及び、行列610からの部分行列B1を積和し、出力行列615の部分行列620を生成する。行列積600は、行列610の部分行列を、行ベース(row-based)の向きではなく、列ベース(column-based)の向きに配列する点において、
図2に示す行列積200とは異なる。したがって、出力行列615の部分625は、
図2に示す出力行列215の部分225のアレイベース(array-based)の代わりに、列ベースの構成として部分行列A1,A2,A3,A4及び部分行列B1,B2,B3,B4を乗算することによって生成される。
【0031】
図7は、いくつかの実施形態による、処理ユニットの複数のVSP内のバッファを介してオペランドを回転させることによって行列積の丸めを実行する方法700のブロック図である。方法700は、
図1に示すGPU140、及び、
図3に示すSIMDユニット300のいくつかの実施形態で実施される。
【0032】
ブロック705では、行列A(第一行列)及び行列B(第二行列)の部分は、システムメモリからフェッチされ、
図3に示すVGPR305~308等のVSPに関連するレジスタに格納される。また、行列A及び行列Bの部分は、本明細書ではVSP内の積和演算ユニットによって実行される行列積演算についてのAオペランド及びBオペランドとも呼ばれる。
【0033】
ブロック710では、A及びBオペランドは、レジスタから、
図3に示す第一バッファ310~313及び第二バッファ315~318等のようなVSPのバッファにロードされる。
【0034】
ブロック715では、行列積演算の反復が開始され、VSP内の積和演算ユニットは、VSPの各々のバッファに格納されたA及びBオペランドに積和演算を実行する。本明細書で説明するように、Aオペランドのうち1つは、対応するVSP内の各々のバッファからアクセスされ、このAオペランドの値は、その他のVSPによってクロスバースイッチを介してアクセスされる。
【0035】
決定ブロック720では、処理ユニットは、A及びBオペランドの全ての組み合わせに行列の積和演算を実行したかどうかを決定する。いくつかの実施形態では、反復回数は、VSPの数に等しいので、丸めが完了する前に、Aオペランドの各々はBオペランドの各々との積を求められる。積和演算を全ての組み合わせで実行した場合、方法700はブロック725に進み、積和演算ユニットは、累算結果を、
図3に示す出力バッファ325~328等の対応する出力バッファに書き込む。Aオペランド及びBオペランドの全ての組み合わせに積和演算を実行していない場合、方法700はブロック730に進む。
【0036】
ブロック730では、AオペランドはVSPを中心に回転する。いくつかの実施形態では、Aオペランドは、
図3に示すクロスバースイッチ330等のクロスバースイッチを介してAオペランドを表す情報を伝達することによって回転する。Aオペランドの回転を
図4及び
図5に示す。次に、方法700はブロック715に戻り、丸めの後続の反復を開始する。
【0037】
上記のような本開示の実施形態は、実施形態の以下の例の実施態様を考慮することによって、より良く理解される。
【0038】
例1.積和演算素子を含む複数のベクトル信号プロセッサ(VSP)と、
前記複数のVSPに関連する複数のレジスタと、を備える装置であって、
複数の反復を含む第一丸めの前に、第一行列及び第二行列の第一部分が前記複数のレジスタにフェッチされ、前記積和演算素子は、第二丸めのために前記第一行列及び前記第二行列の第二部分を前記複数のレジスタにフェッチする前に、前記複数の反復において前記第一行列及び前記第二行列の前記第一部分のサブセットの異なる組み合わせに対して行列の積和演算を実行する、装置。
【0039】
例2.前記複数のVSPは、第一バッファと、第二バッファと、出力バッファと、をさらに含み、前記第一行列及び前記第二行列の前記第一部分の前記サブセットは、前記複数の反復を開始する前に、前記複数のレジスタから前記複数のVSPの前記第一バッファ及び前記第二バッファにコピーされる、例1の装置。
【0040】
例3.前記複数の反復のうち現在の反復中に、前記積和演算素子は、行列の積和演算を、前記現在の反復中の対応する前記第一バッファ及び前記第二バッファに格納された前記第一行列及び前記第二行列の前記第一部分の前記サブセットに対して実行する、例2の装置。
【0041】
例4.前記現在の反復中に前記積和演算素子が前記行列の積和演算を実行した後に、前記現在の反復中に、前記第一行列の前記第一部分の前記サブセットが異なるVSPに回転する、例3の装置。
【0042】
例5.前記複数のVSPを相互接続するクロスバースイッチをさらに含み、前記第一行列の前記第一部分の前記サブセットは、前記クロスバースイッチを介して前記異なるVSPに回転する、例4の装置。
【0043】
例6.前記積和演算素子が、前記第一丸めにおける前記複数の反復中に、前記第一行列及び前記第二行列の前記第一部分の前記サブセットの全ての組み合わせに対して前記行列の積和演算を実行するように、前記複数の反復が前記複数のVSPに対応する、例1の装置。
【0044】
例7.前記複数のVSPは、出力バッファをさらに含み、前記積和演算素子は、前記第一丸めにおける前記複数の反復中に前記行列の積和演算を実行した後であって、前記第二丸めを開始する前に、積の累算結果を前記出力バッファに書き込む、例1~6の何れかの装置。
【0045】
例8.前記第一行列及び前記第二行列の前記第二部分は、前記積和演算素子が前記累算結果を前記出力バッファに書き込むことに応じて、前記複数のレジスタにフェッチされる、例7の装置。
【0046】
例9.複数の反復を含む第一丸めの前に、複数のベクトル信号プロセッサ(VSP)に関連する複数のレジスタに第一行列及び第二行列の第一部分をフェッチすることと、
行列の積和演算を、前記複数の反復中に前記第一行列及び前記第二行列の前記第一部分のサブセットの異なる組み合わせに対して実行することと、
前記第一丸めの前記複数の反復を完了したことに応じて、第二丸めのための前記第一行列及び前記第二行列の第二部分を前記複数のレジスタにフェッチすることと、を含む、
方法。
【0047】
例10.前記複数の反復を開始する前に、前記第一行列及び前記第二行列の前記第一部分の前記サブセットを前記複数のレジスタから前記複数のVSP内の第一バッファ及び第二バッファにコピーすること、をさらに含む、例9の方法。
【0048】
例11.前記複数の反復のうち現在の反復中に、行列の積和演算を、前記現在の反復中の前記第一行列及び前記第二行列の前記第一部分の前記サブセットに対して実行することをさらに含む、例10の方法。
【0049】
例12.前記行列の積和演算を前記現在の反復中に実行した後に、前記現在の反復中に、前記第一行列の前記第一部分の前記サブセットを異なるVSPに回転させることをさらに含む、例11の方法。
【0050】
例13.前記第一行列の前記第一部分の前記サブセットを異なる前記第一バッファに回転させることは、前記第一行列の前記第一部分の前記サブセットを、前記複数のVSPを相互接続するクロスバースイッチを介して回転させることを含む、例12の方法。
【0051】
例14.前記複数の反復は前記複数のVSPに対応し、前記行列の積和演算を実行することは、前記第一丸めの前記複数の反復中に、前記第一部分及び前記第二部分の前記サブセットの全ての組み合わせに対する前記行列の積和演算を含む、例11の方法。
【0052】
例15.前記第一丸めの前記複数の反復中に前記行列の積和演算を実行した後であって、前記第二丸めを開始する前に、積の累算結果を出力バッファに書き込むことをさらに含み、
前記第一行列及び前記第二行列の前記第二部分をフェッチすることは、前記累算結果を前記出力バッファに書き込むことに応じて、前記第一行列及び前記第二行列の前記第二部分を前記複数のレジスタにフェッチすることを含む、例9~14の何れかの方法。
【0053】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
【0054】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行するプロセッシングシステムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0055】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0056】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。