(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-27
(45)【発行日】2024-04-04
(54)【発明の名称】部分行列の順序付けを伴う行列乗算器
(51)【国際特許分類】
G06F 17/16 20060101AFI20240328BHJP
【FI】
G06F17/16 F
(21)【出願番号】P 2021523783
(86)(22)【出願日】2019-06-18
(86)【国際出願番号】 US2019037656
(87)【国際公開番号】W WO2020091848
(87)【国際公開日】2020-05-07
【審査請求日】2022-06-14
【審判番号】
【審判請求日】2023-04-13
(32)【優先日】2018-10-31
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マキシム ヴィー. カザコフ
(72)【発明者】
【氏名】ジャン マオ
【合議体】
【審判長】吉田 美彦
【審判官】林 毅
【審判官】稲垣 良一
(56)【参考文献】
【文献】特開平5-324700(JP,A)
【文献】米国特許出願公開第2005/0193050(US,A1)
【文献】米国特許出願公開第2017/0060811(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F17/16
(57)【特許請求の範囲】
【請求項1】
第1の行列及び第2の行列を乗算するグラフィックスプロセッシングユニット(GPU)の行列乗算器の第1の乗算サイクルにおいて、第1の入力レジスタに記憶された前記第1の行列の第1の部分行列を、第2の入力レジスタに記憶された前記第2の行列の第1の部分行列と乗算することと、
前記行列乗算器の前記第1の乗算サイクルに続く第2の乗算サイクルにおいて、前記第1の入力レジスタに記憶された前記第1の行列の前記第1の部分行列を、第2の入力レジスタに記憶された前記第2の行列の第2の部分行列と乗算することと、前記第1の乗算サイクル及び前記第2の乗算サイクルにおいて、前記第1の部分行列を前記第1の入力レジスタに維持することと、
前記第2の乗算サイクルに続く第3の乗算サイクルにおいて、前記第1の入力レジスタに記憶された前記第1の行列の第2の部分行列を、前記第2の入力レジスタに記憶された前記第2の行列の前記第2の部分行列と乗算することと、
前記第3の乗算サイクルにおいて、前記第1の行列の前記第1の部分行列を、前記第1の行列の前記第2の部分行列に変更することと、を含む、
方法。
【請求項2】
前記第1の部分行列は、少なくとも1つの非ゼロ要素を含む、
請求項1の方法。
【請求項3】
前記第1の乗算サイクル及び前記第2の乗算サイクルの結果に基づいて、前記第1の行列及び前記第2の行列の積を決定することであって、前記積は結果行列を含む、ことをさらに含む、
請求項1の方法。
【請求項4】
前記積を決定することは、
前記第1の乗算サイクル及び前記第2の乗算サイクルの結果に基づいて、前記結果行列の部分行列を決定することを含む、
請求項
3の方法。
【請求項5】
前記結果行列の前記部分行列は、前記結果行列の列及び行の何れかを含む、
請求項
4の方法。
【請求項6】
前記積を決定することは、
前記第1の乗算サイクル及び前記第2の乗算サイクルの結果に基づいて、外積を決定することを含む、
請求項
3の方法。
【請求項7】
グラフィックスプロセッシングユニット(GPU)の行列乗算器で第1の行列の部分行列を第2の行列の部分行列と乗算して、行列の積を決定することを含み、
前記乗算することは、
第1の複数の乗算サイクルに亘って、前記行列乗算器の第1の入力レジスタにおいて第1の部分行列を維持すること
と、
前記第1の複数の乗算サイクルに亘って、前記行列乗算器の第2の入力レジスタにおいて部分行列を変更することと、
第2の複数の乗算サイクルに亘って、前記行列乗算器の前記第2の入力レジスタにおいて第2の部分行列を維持することと、を含む、
方法。
【請求項8】
前記第1の部分行列の少なくとも1つの要素は非ゼロ要素である、
請求項
7の方法。
【請求項9】
第1の入力レジスタと、
第2の入力レジスタと、
前記第1の入力レジスタに記憶された部分行列を、前記第2の入力レジスタに記憶された部分行列と乗算するための行列乗算器と、
前記第1の入力レジスタ及び前記第2の入力レジスタに記憶された部分行列を制御するためのシーケンサと、を備え、
前記シーケンサは、
前記行列乗算器の第1の乗算サイクルにおいて、第1の行列の第1の部分行列を前記第1の入力レジスタに記憶し、第2の行列の第1の部分行列を前記第2の入力レジスタに記憶し、
前記行列乗算器の前記第1の乗算サイクルに続く第2の乗算サイクルにおいて、前記第1の行列の前記第1の部分行列を前記第1の入力レジスタに維持し、前記第2の行列の第2の部分行列を前記第2の入力レジスタに記憶
し、
前記第2の乗算サイクルに続く第3の乗算サイクルにおいて、前記第1の行列の第2の部分行列を前記第1の入力レジスタに記憶し、前記第2の行列の前記第2の部分行列を前記第2の入力レジスタに記憶するように構成されている、
グラフィックスプロセッシングユニット(GPU)。
【請求項10】
前記第1の部分行列は、少なくとも1つの非ゼロ要素を含む、
請求項
9のGPU。
【請求項11】
前記GPUは、
前記第1の乗算サイクル及び前記第2の乗算サイクルの結果に基づいて、前記第1の行列と前記第2の行列の積を決定するように構成されており、
前記積は結果行列を含む、
請求項
9のGPU。
【請求項12】
前記GPUは、
前記第1の乗算サイクル及び前記第2の乗算サイクルの結果に基づいて前記結果行列の部分行列を求めることによって、前記積を決定するように構成されている、
請求項
11のGPU。
【請求項13】
前記結果行列の前記部分行列は、前記結果行列の列及び行の何れかを含む、
請求項
12のGPU。
【請求項14】
前記GPUは、
前記第1の乗算サイクル及び前記第2の乗算サイクルの結果に基づいて外積を決定することによって、前記積を決定するように構成されている、
請求項
11のGPU。
【発明の詳細な説明】
【背景技術】
【0001】
最近のプロセッサアプリケーションでは、ベクトル、行列、及び、同様の構造の比較的複雑な操作が必要になることがよくある。例えば、ベクトル及び行列の演算は、グラフィックス操作、デジタル信号処理アプリケーション、ニューラルネットワークアプリケーション等で有用である。これらのアプリケーションや操作の処理効率を高めるために、プロセッサは、グラフィックスプロセッシングユニット(GPU)を含むことができる。GPUには、比較的大きなデータブロックに対する並列処理を実行するための専用ハードウェアが含まれている。したがって、GPUは、グラフィックスアプリケーションだけでなく、ベクトル及び行列の操作を必要とする他の演算もサポートすることができる。処理効率をさらに高めるために、GPUは、行列の乗算を含む特定のタイプの行列の演算を実行するための専用ハードウェアを含むことができる。ただし、この専用ハードウェアに対する従来のアプローチは、大量の電力を消費する場合があり、それによって、プロセッサのパフォーマンスに悪影響を与えることがある。
【0002】
本開示は、添付の図面を参照することによってより良好に理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面において同じ符号を用いた場合、同様又は同一の要素であることを示す。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、行列乗算器への部分行列の適用を順序付けることによって行列の乗算を実行するように構成された、プロセッサのGPUのブロック図である。
【
図2】いくつかの実施形態による、
図1のGPUでの乗算のための例示的な行列を示す図である。
【
図3】いくつかの実施形態による、
図1の行列乗算器への部分行列の適用を順序付ける例を示す図である。
【
図4】いくつかの実施形態による、部分行列の順序付けをサポートする
図1のGPUの追加の態様のブロック図である。
【
図5】いくつかの実施形態による、GPUの行列乗算器での部分行列の適用を順序付ける方法のフロー図である。
【発明を実施するための形態】
【0004】
図1~
図5は、行列乗算器での部分行列の適用を順序付けて、行列乗算器の入力レジスタにおける入力変更の数を低減することによって、プロセッサのグラフィックスプロセッシングユニット(GPU)での消費電力を低減するための技術を示している。行列乗算器は、比較的小さい行列(例えば、4×4の行列)に対して行列の乗算を実行するように構成されている。2つの大きな行列(16×16の行列等)を乗算するために、GPUは、大きな行列を小さな部分行列に分解し、その部分行列を行列乗算器の入力レジスタに順番に記憶して、結果行列の各列を計算する。GPUは、入力レジスタにおける部分行列の記憶を順序付けて、行列乗算器の複数の計算サイクルに亘って1つの入力レジスタで入力データを維持し、それによって、GPUにおける消費電力を低減する。
【0005】
図1は、いくつかの実施形態による、部分行列の適用を順序付けることによって行列の乗算を実行するように構成されたプロセッサのGPU100を示している。少なくとも1つの実施形態では、GPU100は、電子デバイスに代わって動作を実行するために命令セットを実行するように一般に構成されたプロセッサの一部である。したがって、異なる実施形態では、GPU100は、電子デバイス(例えば、デスクトップ又はラップトップコンピュータ、サーバ、ハンドヘルドデバイス(例えば、携帯電話又はタブレット)、ゲームコンソール等)の一部である。GPU100は、一般に、プロセッサに代わって、グラフィックス及びベクトルの処理演算を実行するように構成されている。例えば、いくつかの実施形態では、プロセッサの中央処理装置(
図1には示されていないCPU)は、実行される演算のセットをGPUに提供し、それによって、演算のセットは、グラフィックス又はベクトルの処理に関連付けられる。
【0006】
GPU100は、提供された演算の実行を容易にするために、複数の単一命令複数データ(SIMD)処理ユニット(例えば、SIMDユニット102,104)を含む。また、GPU100は、SIMDユニットをサポートするための追加のモジュール(例えば、SIMDユニットの命令をフェッチ及びデコードするためのフェッチ及びデコードロジック、SIMDユニットのオペランドを記憶するためのレジスタファイル等)を含むことが理解されよう。入力された行列105のセットの行列乗算の演算をサポートするために、各SIMDユニットは、対応する入力レジスタ及び対応する出力レジスタと共に行列乗算器を含む。例えば、SIMDユニット102は、行列乗算器110と、入力レジスタ106,107と、出力レジスタ108と、を含む。「レジスタ」という用語は、行列(部分行列を含む)を記憶するように構成された任意の記憶モジュールを指すことが理解されよう。
【0007】
行列乗算器110は、レジスタ106,107に記憶された行列を乗算し、その結果となる積をレジスタ108に記憶するように構成されている。入力レジスタ106,107における行列の単一の積を生成することは、本明細書では、行列乗算器110の「乗算サイクル」と呼ばれる。いくつかの実施形態では、SIMDユニット102は、クロック信号(「CLK」で示されている)によってクロックされ、行列乗算器110の乗算サイクルは、CLKクロック信号の単一のクロックサイクルに対応する。すなわち、CLKクロック信号の単一のクロックサイクルに対して、行列乗算器110は、入力レジスタ106,107に記憶された入力オペランドに基づいて、レジスタ108において積を生成するように構成されている。他の実施形態では、行列乗算器110の各乗算サイクルは、CLKクロック信号の複数のサイクルを必要とする。
【0008】
いくつかの実施形態では、回路面積を節約するために、行列乗算器110は、比較的小さい入力行列の積を生成するように構成されている。例えば、いくつかの実施形態では、行列乗算器110は、4×4×4の乗算器であり、行列乗算器110は、入力レジスタ106に記憶された4×4の行列を、入力レジスタ107に記憶された4×4の行列と乗算して、出力レジスタ108に記憶される4×4の積(結果)を生成するように構成されている。ただし、一部のシナリオでは、CPUは、大きな行列の乗算(例えば、16×16の行列の乗算等)を必要とする演算をGPU100に提供する。大きな行列の乗算をサポートするために、SIMDは、大きな行列を複数の小さな部分行列に分解し、行列乗算器110で部分行列を乗算して中間結果のセットを生成し、中間結果を組み合わせて大きな行列の積を生成するように構成されている。
【0009】
説明すると、いくつかの実施形態において、行列乗算器110は、行列A(MXKの行列)及び行列B(KXNの行列)で示される入力行列を乗算して、結果行列R(MXN)の行列を計算する。行列A,Bは、それぞれ入力レジスタ106,107に記憶され、結果行列Rは、出力レジスタ108に記憶される。いくつかの実施形態では、行列乗算器110は、以下の式によって示されるように、i番目の行とj番目の列との内積を計算することによって、結果行列Rを計算する。
Ri,j=SumAi,k×Bk,j、k=0…K-1、iは[0..M-1]、jは[0..N-1]
【0010】
他の実施形態では、行列乗算器110は、以下の式によって示されるように、A行列の列kとB行列の行kとのK個の外積を合計することによって、結果行列Rを計算する。
R=SumRk,Rk
i,j=Ai,k×Bk,j
【0011】
大きな行列の場合、SIMD102は、入力行列を、行列乗算器110によって指定された入力サイズである小さい部分行列に分解し、行列乗算器110で部分行列を乗算して中間結果のセットを生成し、中間結果を組み合わせて最終結果行列Rを求める。したがって、行列乗算器が内積を計算する実施形態では、SIMD102は、入力行列を小さな部分行列に分解し、異なるセットの内積に基づいて部分行列の異なるセットの積を決定し、次に、得られた内積の外積を計算して、最終結果行列を決定する。
【0012】
本明細書でさらに説明するように、異なる中間結果(異なる部分行列の積)を計算するには、入力レジスタ106,107に記憶された部分行列を変更する必要があることが理解されよう。しかし、入力レジスタに記憶されたデータの各々を変更することは、GPU102において電力を消費する。さらに、対応する算術論理ユニット(ALU)又は行列乗算器110の他のモジュールの入力においてデータの各々を変更することは、入力データを不変の状態に維持することに比べて、追加の電力を消費する。したがって、電力を節約するために、SIMD102は、入力レジスタ106,107での部分行列の記憶を順序付けて、その部分行列が、結果行列Rの計算にもはや必要とされなくなるまで、複数の連続する乗算サイクルの間、1つの入力レジスタ(例えば、レジスタ107)で維持されるようにする。すなわち、SIMD102は、入力レジスタ106,107での入力された部分行列の適用を順序付けて、1つのレジスタにおける入力スイッチングの量を低減し、結果として、行列乗算器110の1つの入力において電力を節約する。
【0013】
GPU100での入力部分行列の順序付けの例が、
図2及び
図3に関して説明されている。
図2は、行列A及び行列Bと示される2つの16×16の行列220,222の例を示している。行列A,Bの各々は、16個の4×4の部分行列(例えば、行列Aの部分行列221)を含む。行列A,Bは、GPU102で乗算され、行列Rと示される結果行列224を生成し、これも、複数の4×4の部分行列を含む。行列Rは、部分行列の列のセットとみなすことができる。例えば、Rの最初の列は、部分行列R
0,0,R
1,0,R
2,0,R
3,0で構成されている。以下にさらに説明するように、いくつかの実施形態では、GPU100は、Rの部分行列の各列を計算することによって行列Rを計算し、次に、異なる列を連結してR行列を形成する。いくつかの実施形態では、Rの部分行列の各列は、GPU100の異なる対応するSIMDで同時に計算され、1つのSIMDが、部分行列の列を連結してRを形成する。
【0014】
Rの部分行列の列を計算するために、対応するSIMDは、その行列乗算器を使用して、行列A,Bの対応する部分行列の内積(dot)のセットを求め、内積結果に対して外積を計算する。例えば、部分行列R0,0を生成するために、SIMD102は、以下の計算を実行する。
R0,0=A0,0×B0,0
R0,0+=A0,1×B1,0
R0,0+=A0,2×B2,0
R0,0+=A0,3×B3,0
ここで、「+=」は、対応する積を、R0,0の前の値に加算することを示す。同様に、部分行列R1,0を生成するために、SIMD102は、以下の計算を実行する。
R1,0=A1,0×B0,0
R0,0+=A1,1×B1,0
R0,0+=A1,2×B2,0
R0,0+=A1,3×B3,0
SIMD102は、同様の計算を実行して、部分行列R2,0,R3,0を生成する。
【0015】
対応する部分行列を計算するための各乗算を実行するために、SIMD102は、行列A及び行列Bの対応する部分行列をそれぞれ入力レジスタ106,107にロードし、行列乗算器110は、乗算を実行し、結果を出力レジスタ108に記憶する。ただし、上記の例から分かるように、行列Bの部分行列は、行列Rの異なる部分行列を計算するために再利用される。したがって、SIMD102は、入力レジスタ107に記憶された行列Bの部分行列が行列乗算器110の複数の連続する乗算サイクルに亘って変化しないように、乗算を順序付けるように構成されている。それにより、SIMD102は、入力レジスタ107へのロードの数、及び、行列乗算器110の入力の変化を低減し、これにより、電力の消費を低減する。
【0016】
いくつかの実施形態による、入力される順序付けの一部の例が、
図3に示されている。
図3は、連続する乗算サイクル310~305のセットと、入力レジスタ106,107の各々の対応する内容を示している。したがって、図示した例では、乗算サイクル301において、SIMD102は、部分行列A
0,0,B
0,0を、それぞれ入力レジスタ106,107にロードする。以下にさらに説明するように、行列乗算器110は、部分行列を乗算して、結果行列Rの第1の列の中間結果を計算する。次の乗算サイクル302(乗算サイクル301の直後の乗算サイクル)において、SIMD102は、部分行列A
1,0を入力レジスタ106にロードするが、部分行列B
0,0を入力レジスタ107に維持する。行列乗算器110は、部分行列を乗算して、結果行列Rの第1の列の別の中間結果を計算する。
【0017】
次の乗算サイクル303において、SIMD102は、部分行列A2,0を入力レジスタ106にロードするが、部分行列B0,0を入力レジスタ107に維持する。行列乗算器110は、部分行列を乗算して、結果行列Rの第1の列のさらに別の中間結果を計算する。次の乗算サイクル304において、SIMD102は、部分行列A3,0を入力レジスタ106にロードするが、部分行列B0,0を入力レジスタ107に維持する。行列乗算器110は、部分行列を乗算して、結果行列Rの第1の列の別の中間結果を計算する。次の乗算サイクル305において、部分行列B0,0を必要とする全ての計算が完了する。したがって、乗算サイクル305において、SIMD102は、部分行列A0,1を入力レジスタ106にロードし、部分行列B1,0を入力レジスタ107にロードする。したがって、図示した例では、4つの継続する(連続する)乗算サイクルにおいて、SIMD102は、入力レジスタ107において部分行列B0,0を維持し、これにより、入力部分行列を変更して行列乗算結果を計算するのに必要な電力を節約する。
【0018】
SIMD102は、行列乗算器110で乗算の演算を実行し続け、得られた積を組み合わせて、結果行列Rの第1の列を計算する。乗算の順序付け(入力レジスタ106,107にロード及び維持される対応する入力行列を含む)は、以下の通りである。
R0,0=A0,0×B0,0
R1,0=A1,0×B0,0 <=Bの入力は維持
R2,0=A2,0×B0,0 <=Bの入力は維持
R3,0=A3,0×B0,0 <=Bの入力は維持(4xを使用)
R0,0+=A0,1×B1,0 <=Bの入力を更新
R1,0+=A1,1×B1,0 <=Bの入力は維持
R2,0+=A2,1×B1,0 <=Bの入力は維持
R3,0+=A3,1×B1,0 <=Bの入力は維持(4xを使用)
R0,0+=A0,2×B2,0 <=Bの入力を更新
R1,0+=A1,2×B2,0 <=Bの入力は維持
R2,0+=A2,2×B2,0 <=Bの入力は維持
R3,0+=A3,2×B2,0 <=Bの入力は維持(4xを使用)
R0,0+=A0,3×B3,0 <=Bの入力を更新
R1,0+=A1,3×B3,0 <=Bの入力は維持
R2,0+=A2,3×B3,0 <=Bの入力は維持
R3,0+=A3,3×B3,0 <=Rの第1の列を完了する計算
【0019】
GPU102は、結果行列Rの他の列を計算するために同様の計算を実行する。いくつかの実施形態では、GPU102は、結果行列Rの対応する列を同時に計算するために異なるSIMDを使用し、1つのSIMD又は他のモジュールを使用して、異なる列を最終結果行列Rに連結する。
【0020】
図4は、いくつかの実施形態による、行列乗算器110の入力部分行列の順序付けをサポートする
図1のSIMD102の追加の態様を示している。図示した例では、SIMD102は、シーケンサ430に接続されたデータストア435を含む。データストア435は、行列乗算器110の部分行列(例えば、部分行列433)を記憶するように構成されたバッファ、キャッシュ、レジスタファイル又は他のメモリ構造である。シーケンサ430は、入力された行列105(行列A及び行列B)を対応する部分行列に分解し、データストア435に部分行列を記憶するように構成されたハードウェアモジュールである。シーケンサ430は、対応する乗算サイクルにおいて、データストア435から1つ以上の部分行列を取得し、取得した各部分行列を対応する入力レジスタ106,107にロードするようにさらに構成されている。したがって、シーケンサ430は、比較的大きな行列の行列乗算を実行するために、行列乗算器110での入力部分行列の順序付けを制御する。
【0021】
図5は、いくつかの実施形態による、GPUの行列乗算器での部分行列の適用を順序付ける方法のフロー図である。説明のために、方法500は、
図1のGPU100での例示的な実装に関して説明される。ブロック502において、シーケンサ430は、初期の部分行列(例えば、部分行列A
0,0及びB
0,0)をデータストア435から入力レジスタ106,107にそれぞれロードする。ブロック504において、行列乗算器110は、入力レジスタ106,107に記憶された部分行列を乗算して積を生成し、上記のように、その結果を、結果行列Rの対応する列が存在する場合にはその中間結果に加算する。方法のフローはブロック506に移動し、シーケンサ430は、入力レジスタ106の入力部分行列が行列Aの最後の行に対応するかどうかを判別する。対応しない場合、方法のフローはブロック508に移動し、シーケンサ430は、現在の列(例えば、列0)及び次の行に対応するAの部分行列を入力レジスタ106にロードする。入力レジスタ107に記憶されたBの部分行列が維持されることによって、電力を節約する。方法のフローはブロック504に戻り、行列乗算器110は、次の乗算演算、すなわち、次の乗算サイクルを実行する。
【0022】
ブロック506に戻ると、入力レジスタ106における入力部分行列が行列Aの最後の行に対応する場合、方法のフローはブロック510に移り、シーケンサ430は、入力レジスタ107に記憶された入力部分行列が行列Bの最後の行に対応するかどうかを判別する。対応しない場合、方法のフローはブロック512に移り、シーケンサ430は、計算中のRの列に対応するBの部分行列を入力レジスタ107にロードする。さらに、シーケンサ430は、最初の行(例えば、行0)及び次の列に対応するAの部分行列を入力レジスタ106にロードする。方法のフローはブロック504に戻り、行列乗算器110は、次の乗算演算を実行する。
【0023】
ブロック510に戻ると、入力レジスタ107に記憶された入力部分行列が行列Bの最後の行に対応する場合、結果行列Rの対応する列の計算が完了する。したがって、方法のフローはブロック514に移動し、SIMD102は、Rの列の最終的な結果を記憶する。ブロック516において、GPU100は、計算された列の各々を組み合わせて、結果行列Rを生成する。いくつかの実施形態では、GPU102は、さらなる処理のために結果行列RをCPUに提供する。他の実施形態では、GPU100は、結果行列Rを使用して、例えば、表示フレーム内に1つ以上のオブジェクトを生成し、表示デバイスで表示するために表示フレームをフレームバッファに提供する。
【0024】
本明細書に開示されるように、いくつかの実施形態では、方法は、グラフィックスプロセッシングユニット(GPU)の行列乗算器の第1の乗算サイクルにおいて、第1の行列及び第2の行列を乗算することと、第1の入力レジスタに記憶された第1の行列の第1の部分行列を、第2の入力レジスタに記憶された第2の行列の第1の部分行列と乗算することと、行列乗算器の第1の乗算サイクルに続く第2の乗算サイクルにおいて、第1の入力レジスタに記憶された第1の行列の第1の部分行列を、第2の入力レジスタに記憶された第2の行列の第2の部分行列と乗算することと、第1の乗算サイクル及び第2の乗算サイクルにおいて、第1の部分行列を第1の入力レジスタに維持することと、を含む。一態様において、方法は、行列乗算器の第2の乗算サイクルに続く第3の乗算サイクルにおいて、第1の入力レジスタに記憶された第1の行列の第1の部分行列を、第2の入力レジスタに記憶された第2の行列の第2の部分行列と乗算することと、第1の乗算サイクル、第2の乗算サイクル及び第3の乗算サイクルにおいて、第1の部分行列を第1の入力レジスタに維持することと、を含む。別の態様において、第1の部分行列は、少なくとも1つの非ゼロ要素を含む。
【0025】
一態様において、方法は、第1の乗算サイクル及び第2の乗算サイクルの結果に基づいて、第1の行列及び第2の行列の積を決定することであって、積は結果行列を含む、ことを含む。別の態様において、積を決定することは、第1の乗算サイクル及び第2の乗算サイクルの結果に基づいて、結果行列の部分行列を決定することを含む。さらに別の態様において、結果行列の部分行列は、結果行列の列及び行の何れかを含む。また別の態様において、積を決定することは、第1の乗算サイクル及び第2の乗算サイクルの結果に基づいて、外積を決定することを含む。さらに別の態様において、方法は、行列乗算器の第1の乗算サイクルに続く第3の乗算サイクルにおいて、第1の入力レジスタに記憶された第1の行列の第2の部分行列を、第2の入力レジスタに記憶された第2の行列の第2の部分行列と乗算することと、第3の乗算サイクルにおいて、第1の行列の第1の部分行列を、第1の行列の第2の部分行列に変更することと、を含む。
【0026】
本明細書に開示されるように、いくつかの実施形態では、方法は、グラフィックスプロセッシングユニット(GPU)の行列乗算器で第1の行列の部分行列を第2の行列の部分行列と乗算して、行列の積を決定することを含み、乗算することは、第1の複数の乗算サイクルに亘って、行列乗算器の第1の入力レジスタにおいて第1の部分行列を維持することを含む。一態様では、乗算することは、第1の複数の乗算サイクルに亘って、行列乗算器の第2の入力レジスタにおいて部分行列を変更することをさらに含む。別の態様では、乗算することは、第2の複数の乗算サイクルに亘って、行列乗算器の第2の入力レジスタにおいて第2の部分行列を維持することをさらに含む。さらに別の態様では、第1の部分行列の少なくとも1つの要素は非ゼロ要素である。
【0027】
本明細書に開示されるように、いくつかの実施形態では、グラフィックスプロセッシングユニット(GPU)は、第1の入力レジスタと、第2の入力レジスタと、第1の入力レジスタに記憶された部分行列を、第2の入力レジスタに記憶された部分行列と乗算するための行列乗算器と、第1の入力レジスタ及び第2の入力レジスタに記憶された部分行列を制御するためのシーケンサと、を備え、シーケンサは、行列乗算器の第1の乗算サイクルにおいて、第1の行列の第1の部分行列を第1の入力レジスタに記憶し、第2の行列の第1の部分行列を第2の入力レジスタに記憶し、行列乗算器の第1の乗算サイクルに続く第2の乗算サイクルにおいて、第1の行列の第1の部分行列を第1の入力レジスタに維持し、第2の行列の第2の部分行列を第2の入力レジスタに記憶する、ように構成されている。一態様において、シーケンサは、行列乗算器の第1の乗算サイクルに続く第3の乗算サイクルにおいて、第1の入力レジスタに記憶された第1の行列を維持し、第2の行列の第2の部分行列を第2の入力レジスタに記憶するように構成されている。別の態様において、第1の部分行列は、少なくとも1つの非ゼロ要素を含む。
【0028】
一態様において、GPUは、第1の乗算サイクル及び第2の乗算サイクルの結果に基づいて、第1の行列と第2の行列の積を決定するように構成されており、積は結果行列を含む。別の態様では、GPUは、第1の乗算サイクル及び第2の乗算サイクルの結果に基づいて結果行列の部分行列を決定することによって、積を決定するように構成されている。また別の態様では、結果行列の部分行列は、結果行列の列及び行の何れかを含む。さらに別の態様では、GPUは、第1の乗算サイクル及び第2の乗算サイクルの結果に基づいて外積を決定することによって、積を決定するように構成されている。別の態様では、シーケンサは、行列乗算器の第1の乗算サイクルに続く第3の乗算サイクルにおいて、第1の行列の第2の部分行列を第1の入力レジスタに記憶し、第2の行列の第2の部分行列を第2の入力レジスタに記憶するように構成されている。
【0029】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
【0030】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行するプロセッシングシステムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0031】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0032】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。