IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧

特許7377869グラフィックスプロセッシングユニットでのパイプライン化された行列乗算
<>
  • 特許-グラフィックスプロセッシングユニットでのパイプライン化された行列乗算 図1
  • 特許-グラフィックスプロセッシングユニットでのパイプライン化された行列乗算 図2
  • 特許-グラフィックスプロセッシングユニットでのパイプライン化された行列乗算 図3
  • 特許-グラフィックスプロセッシングユニットでのパイプライン化された行列乗算 図4
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-01
(45)【発行日】2023-11-10
(54)【発明の名称】グラフィックスプロセッシングユニットでのパイプライン化された行列乗算
(51)【国際特許分類】
   G06F 17/16 20060101AFI20231102BHJP
   G06F 9/38 20180101ALI20231102BHJP
   G06N 3/044 20230101ALI20231102BHJP
【FI】
G06F17/16 F
G06F9/38 370A
G06N3/044
【請求項の数】 15
(21)【出願番号】P 2021531340
(86)(22)【出願日】2019-12-04
(65)【公表番号】
(43)【公表日】2022-01-26
(86)【国際出願番号】 US2019064454
(87)【国際公開番号】W WO2020117926
(87)【国際公開日】2020-06-11
【審査請求日】2022-11-11
(31)【優先権主張番号】16/211,954
(32)【優先日】2018-12-06
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ミリンド エヌ. ネムレカール
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2016-095764(JP,A)
【文献】米国特許出願公開第2018/0189236(US,A1)
【文献】米国特許出願公開第2016/0321776(US,A1)
【文献】特開平08-227405(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06F 9/38
G06N 3/044
(57)【特許請求の範囲】
【請求項1】
グラフィックスプロセッシングユニット(GPU)[100]において、実行されるコマンドのセットを受信することであって、前記GPUは、複数の計算ユニット(CU)[105,106,107,108]を備え、前記コマンドのセットは、複数の行列乗算演算[103,114]を含む、ことと、
コマンドのセットの受信に応じて、前記複数の行列乗算演算のうち第1の行列乗算演算をCUの第1のサブセット[110]にスケジューリングし、前記複数の行列乗算演算のうち第2の行列乗算演算を前記CUの第2のサブセット[111]にスケジューリングすることであって、前記CUの第2のサブセットは前記CUの第1のサブセットと異なる、ことと、
前記第1の行列乗算演算及び前記第2の行列乗算演算を前記CUの第1のサブセット及び第2のサブセットで実行することと、を含む、
方法。
【請求項2】
前記第2の行列乗算演算を実行するために、前記第1の行列乗算演算の結果を前記CUの第1のサブセットから前記CUの第2のサブセットに提供することをさらに含む、
請求項1の方法。
【請求項3】
第3の行列乗算演算を実行するために、前記第2の行列乗算演算の結果を前記複数のCUのうちCUの第3のサブセット[112]に提供することであって、前記CUの第3のサブセットは、前記CUの第1のサブセット及び第2のサブセットと異なる、ことをさらに含む、
請求項2の方法。
【請求項4】
第4の行列乗算演算を実行するために、前記第3の行列乗算演算の結果を前記CUの第3のサブセットから前記CUの第1のサブセットに提供することをさらに含む、
請求項3の方法。
【請求項5】
前記第1の行列乗算演算は、第1の乗算及び第2の乗算を含み、
前記第2の行列乗算演算は、第3の乗算を含み、
前記第1の行列乗算演算及び第2の行列乗算演算を実行することは、前記第3の乗算と同時に前記第2の乗算を実行することを含む、
請求項2の方法。
【請求項6】
前記第3の乗算は、前記第1の乗算の結果を乗算する、
請求項5の方法。
【請求項7】
前記第1の行列乗算演算は、第1の乗算及び第2の乗算を含み、
前記第1の行列乗算演算を実行することは、前記第1の乗算を前記CUの第1のサブセットの第1のクラスタで実行し、前記第2の乗算を前記CUの第1のサブセットの第2のクラスタで実行することを含む、
請求項2の方法。
【請求項8】
前記第1の行列乗算演算を実行することは、前記第2の乗算と同時に前記第1の乗算を実行することを含む、
請求項7の方法。
【請求項9】
前記第1の行列乗算演算及び第2の行列乗算演算に基づいてリカレントニューラルネットワーク(RNN)[102]の出力を生成することをさらに含む、
請求項1の方法。
【請求項10】
CUの第1のサブセット[110]と、前記CUの第1のサブセットと異なるCUの第2のサブセット[111]と、を含む複数のCU[105,106,107,108]と、
スケジューラ[104]と、を備え、
前記スケジューラは、
複数の行列乗算演算[103,114]を含むコマンドのセットを、実行するために受信することと、
前記コマンドのセットの受信に応じて、前記複数の行列乗算演算のうち第1の行列乗算演算を前記CUの第1のサブセットにスケジューリングし、前記複数の行列乗算演算のうち第2の行列乗算演算を前記CUの第2のサブセットにスケジューリングすることと、
を行うように構成されており、
前記CUの第1のサブセット及び前記CUの第2のサブセットは、前記第1の行列乗算演算及び第2の行列乗算演算を実行するように構成されている、
グラフィックスプロセッシングユニット(GPU)[100]。
【請求項11】
前記CUの第1のサブセットは、前記第2の行列乗算演算を実行するために、前記第1の行列乗算演算の結果を前記CUの第2のサブセットに提供するように構成されている、
請求項10のGPU。
【請求項12】
前記CUの第2のサブセットは、第3の行列乗算演算を実行するために、前記第2の行列乗算演算の結果を前記複数のCUのうちCUの第3のサブセット[112]に提供するように構成されており、前記CUの第3のサブセットは、前記CUの第1のサブセット及び第2のサブセットと異なる、
請求項11のGPU。
【請求項13】
前記CUの第3のサブセットは、第4の行列乗算演算を実行するために、前記第3の行列乗算演算の結果を前記CUの第1のサブセットに提供するように構成されている、
請求項12のGPU。
【請求項14】
前記第1の行列乗算演算は、第1の乗算及び第2の乗算を含み、
前記第2の行列乗算演算は、第3の乗算を含み、
前記CUの第1のサブセットは、前記第3の乗算を実行するように構成された前記CUの第2のサブセットと同時に前記第2の乗算を実行するように構成されている、
請求項11のGPU。
【請求項15】
前記第3の乗算は、前記第1の乗算の結果を乗算する、
請求項14のGPU。
【発明の詳細な説明】
【背景技術】
【0001】
(関連技術の説明)
最近のプロセッサアプリケーションでは、ベクトル、行列、及び、同様の構造の比較的複雑な操作が必要になることがよくある。例えば、ベクトル及び行列の操作は、グラフィックス処理、デジタル信号処理アプリケーション、ニューラルネットワークアプリケーション等において有用である。これらのアプリケーション及び動作の処理効率を高めるために、プロセッサは、グラフィックスプロセッシングユニット(GPU)を含むことができる。GPUには、比較的大きなデータブロックの並列処理を実行するための専用ハードウェアが含まれている。したがって、GPUは、グラフィックスアプリケーションだけでなく、ベクトル及び行列の操作を必要とする他の操作をサポートすることができる。処理効率をさらに高めるために、GPUのスケジューラは、行列乗算等の動作をCUでスケジューリングして、並列処理を確実にする。しかしながら、スケジューリングに対する従来のアプローチでは、いくつかの動作セットについて、計算サイクルの数に比べて多数のメモリフェッチサイクルを必要とする可能性があり、それによって、プロセッサのパフォーマンスに悪影響を及ぼす。
【0002】
本開示は、添付図面を参照することによってより良好に理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面において同じ符号を使用することは、類似又は同一の要素を示す。
【図面の簡単な説明】
【0003】
図1】いくつかの実施形態による、行列乗算演算のセットをCUの異なるサブセットにスケジューリングし、結果を異なるサブセット間でパイプライン化するグラフィックスプロセッシングユニット(GPU)のブロック図である。
図2】いくつかの実施形態による、図1のGPUでの行列乗算のために行列を分解する例を示すブロック図である。
図3】いくつかの実施形態による、行列乗算演算を図1のCUのサブセットでパイプライン化する例を示す図である。
図4】いくつかの実施形態による、行列乗算演算をCPUでパイプライン化する方法のフロー図である。
【発明を実施するための形態】
【0004】
図1から図4は、処理効率を高めるために、GPUのCUの異なるサブセットにおいてリカレント行列乗算演算をスケジューリングする技術を示す。GPUは、リカレントニューラルネットワーク(RNN)に関連する乗算演算等のリカレント行列乗算演算のセットを受信するスケジューラを含む。例えば、RNN層に関連する複数の演算は、単一のカーネルに融合され、これは、1つのワークグループが計算ユニット毎に割り当てられるようにスケジューラによってスケジューリングされ、したがって、GPUのCUの異なるサブセットに異なるリカレント行列乗算演算が割り当てられる。さらに、GPUは、異なるワークグループのソフトウェア同期を介して、割り当てられた行列乗算演算をパイプライン化して、CUの各サブセットが、対応する乗算結果を異なるサブセットに提供するようにし、そして、CUの各サブセットが、乗算演算の少なくとも一部を同時に実行するようにし、それによって、GPUにおける行列乗算の効率を向上させる。
【0005】
本明細書に記載の技術とは対照的に、従来のアプローチでは、行列の結果領域は、GPUの全てのCUに亘って一度にスライスされる。GPU内のCUの数が増加すると、全てのCUを行列乗算演算でビジーにし続けることは非効率的である。例えば、計算サイクルに対するメモリフェッチサイクルの比率は比較的低い。本明細書で説明する技術を用いることによって、GPUは、より多くの作業を並行して行うことが可能になり、CU毎に作業する行列の結果領域をより大きくすることが可能になる。このアプローチは、帯域幅制限と、行列データをフェッチするためのフェッチ操作のレイテンシと、をマスクする。
【0006】
図1は、いくつかの実施形態による、共有負荷を用いるプロセッサのGPU100を示す図である。少なくとも一実施形態では、GPU100は、電子デバイスの代わりに動作を実行するために命令セットを実行するように一般に構成されたプロセッサの一部である。したがって、様々な実施形態では、GPU100は、デスクトップ又はラップトップコンピュータ等の電子デバイス、サーバ、スマートフォン又はタブレット等のハンドヘルド電子デバイス、ゲームコンソール等の一部である。GPU100は、一般に、プロセッサに代わってグラフィックス及びベクトルの処理演算を実行するように構成されている。例えば、いくつかの実施形態では、プロセッサの中央処理装置(図1に示されていないCPU)は、実行される演算のセットをGPU100に提供し、これにより、演算のセットは、グラフィックス又はベクトルの処理に関連付けられる。
【0007】
CPUによって提供される演算のセットの1つのタイプは、本明細書ではリカレント行列乗算演算のセットと呼ばれる。本明細書で用いられる場合、リカレント行列乗算演算とは、行列乗算演算のセットを指し、行列乗算演算のセットのうち少なくとも1つの結果が、セットの他の少なくとも1つの行列乗算演算に提供される。行列乗算演算のセットの例は、リカレントニューラルネットワーク(RNN)に関連するセットである。当業者に理解されるように、RNNは、一連の汎用行列乗算(GEMM)演算とそれに続く活性化関数(例えば、tanh活性化関数)を介して実装される。リカレントGEMM演算に関連する重み行列は、全ての隠れ層に亘って一定である。重み行列のこのプロパティを用いて、この行列をレジスタにプリロードし、それによって、乗算演算の全ての反復におけるフェッチを減らすことができる。したがって、RNNは、本明細書でさらに説明するように、RNNを実装するためにリカレント行列乗算演算のセットを用いる。
【0008】
GPU100は、提供された演算の実行を容易にするために、複数のCU(例えば、CU105~CU108)を含む。各CUは、割り当てられた演算を、他のCUとは独立に且つ同時に実行するように構成されており、GPU100が、行列乗算等の複雑な演算を比較的迅速に実行することを可能にする。したがって、いくつかの実施形態では、各CUは、複数の単一命令複数データ(SIMD)処理ユニット、SIMDユニット用の命令をフェッチしデコードするフェッチ及びデコードロジック、SIMDユニットのオペランドを記憶するレジスタファイル等を含む。
【0009】
GPU100は、CUでの演算の効率的な実行をサポートするために、指定されたスケジューリング基準にしたがって演算を様々なCUに割り当てるように一般に構成されたスケジューラ104を含む。いくつかの実施形態では、基準は、GPU100に提供されるカーネルと呼ばれる演算のセットによって部分的に設定される。リカレント行列乗算演算をサポートするために、スケジューラ104は、GPUのCUを、CUサブセット110~113と指定されたサブセットに論理的に分割する。他の実施形態では、スケジューラ104は、CUを、より多くの又はより少ないサブセットに論理的に分割することが理解されるであろう。本明細書で用いられる場合、サブセットは、GPUのCUの全てではなく一部を含むセットを指す。したがって、例えば、GPU100が合計128個のCUを含む実施形態では、CUサブセット110~113の各々は、32個のCUの異なるセットを含み、128個のCUの各々は、CUサブセット110~113の異なるサブセットにある。
【0010】
いくつかの実施形態では、カーネルは、各CUサブセット110~113を、本明細書で明確にするためにCUクラスタと呼ばれる、より小さなサブセットに論理的に分割する。いくつかの実施形態において、スケジューラ104の様々な動作は、ハードウェアスケジューラによって、ソフトウェアスケジューリング動作によって、又は、これらの組み合わせによって実行するできることが理解されるであろう。本明細書で用いられる場合、CUクラスタは、CUサブセットのCUの全てではなく一部を含むCUのセットである。例えば、CUサブセット110は、CU105~108を含み、CU105,106は、1つのCUクラスタ(CUクラスタ109と示される)に含まれ、CU107,108は、CUサブセット110の異なるCUクラスタに含まれる。CUサブセット110~113の各々が32個のCUを含む上記の例では、各CUクラスタは、対応するCUサブセットの8個のCUを含み、各CUは異なるCUクラスタに含まれる。
【0011】
CUをサブセット及びクラスタに論理的に分割することにより、カーネルは、リカレント行列乗算演算をスケジューリングして、異なるCUへのデータフェッチを減らす。例示すると、GPU100の各CUは、行列乗算で使用されるオペランドを記憶するためのレジスタ、バッファ又は他の記憶素子(図1には示されていない)を含む。リカレント行列乗算演算において、少なくとも1つの行列が、対応する行列乗算で繰り返し用いられる。したがって、本明細書でさらに説明するように、GPU100は、少なくとも1つの行列を部分行列に分割し、異なる部分行列を繰り返し用いて、リカレント行列乗算演算の最終結果を計算する。したがって、リカレント行列乗算演算を実行するために、スケジューラ104は、対応する行列乗算演算の異なるものを、CUサブセット110~113の異なるものに割り当てる。CU110~113の各々は、対応する部分行列を、その対応する記憶素子(例えば、レジスタ)にロードし、複数の行列乗算のために部分行列の少なくとも一部を記憶素子に保持する。したがって、本明細書でさらに説明するように、同じ部分行列は、GPU100の全てのCUにフェッチされるのではなく、対応するCUサブセット及びCUクラスタにのみフェッチされる。対照的に、従来の行列乗算アプローチでは、行列乗算は、GPU100の全てのCU間で分割され、効率を低下させる。
【0012】
例を用いて説明すると、例示された実施形態において、GPU102は、行列Aを行列Bで乗算して行列Cを生成するリカレント行列乗算演算のセットを定義するRNNカーネル102を実装する。行列222が行列Aであり、行列224が行列Bであり、結果として生じる行列226が行列Cであるいくつかの実施形態による例を図2に示す。AとBの乗算は、以下の式で表される。
C=A
【0013】
いくつかの実施形態では、行列Aはニューラルネットワークの重みのセットであり、行列Bは初期入力のセットであり、Cはニューラルネットワークの活性化関数の出力である。ニューラルネットワークはリカレントニューラルネットワークであるため、RNNカーネル102はC’の行列乗算演算も定義する。
C’=A
【0014】
いくつかの実施形態では、指定された数のC行列において、行列C’’、C’’等の追加の行列乗算演算を定義する。ここで、各C行列は、上述したように行列Bの関数である最初のC行列を除いて、前のC行列の関数である。再び図1を参照すると、ハードウェアバリアは、各C行列の生成をCUサブセット110~113の何れかに割り当てるように構成されている。例えば、スケジューラ104は、行列Cを生成する行列乗算演算(演算103と示されている)をCUサブセット110に割り当て、行列C’を生成する行列乗算演算(演算114と示されている)をCUサブセット111に割り当てる。各CUサブセットは、割り当てられた行列乗算演算を実行して、対応するC行列を生成し、RNNカーネル102の全ての行列乗算演算が完了するまで、C行列を、次のC行列を生成するために別のCUサブセットに提供する。したがって、例えば、いくつかの実施形態では、CUサブセット110は、行列CをCUサブセット111に提供して行列C’を計算し、CUサブセット111は、行列C’をCUサブセット112に提供して行列C’’を計算し、CUサブセット112は、行列C’’をCUサブセット113に提供して行列C’’’を計算し、CUサブセットは、行列C’’’をCUサブセットC’’’に提供し、以下同様に、最終的なC行列が計算されるまで続く。
【0015】
さらに、いくつかの実施形態では、CUサブセット110~113は、一連の乗算を介して、対応する行列乗算演算を実行し、一連の乗算の各々は、対応するC行列の一部を生成する。CUサブセット110~113の各々は、対応するC行列の生成された部分を次のCUサブセットに提供し、次のCUサブセットは、提供された部分を使用して、次のC行列の対応する部分を生成する。このようにして行列乗算をスケジューリングすることにより、GPU100は、以下にさらに説明するように、異なる乗算をパイプライン化して処理効率を高めることが可能になる。さらに、いくつかの実施形態では、スケジューラ104は、個々の行列乗算を異なるCUクラスタにスケジューリングして、各CUにおけるメモリフェッチサイクルに対する計算サイクルの比率を向上させる。
【0016】
説明のために、図2を参照すると、GPU100は、行列A及び行列Bを乗算するために、一般に、行列A及び行列Bを部分行列(例えば、部分行列225)に分解するように構成されており、各部分行列は、対応する行列の一部である。したがって、GPU100は、行列Aを、図示した部分行列A0~A3に分解し、行列Bを、図示した部分行列B0~B3に分解する。GPU100は、部分行列を用いて、以下の式に従って、対応する部分行列C0~C3を計算する。
C0=A0B0+A2B1
C1=A1B0+A3B1
C2=A0B2+A2B3
C3=A1B2+A3B3
【0017】
GPU100は、結果として得られたCの部分行列を用いて、以下の式に従って、対応する部分行列C0’~C3’を計算する。
C0’=A0C0+A2C1
C1’=A1C0+A3C1
C2’=A0C2+A2C3
C3’=A1C2+A3C3
GPU100は、同様の式を用いて各C行列を計算する。
【0018】
処理効率を高めるために、スケジューラ100は、CUクラスタによって用いられるA部分行列が変化しないように、個々の行列乗算演算をCUクラスタにスケジューリングする。例えば、いくつかの実施形態では、CUサブセット110が、行列C及び行列C’’’’を計算するために割り当てられる。行列Cを計算するには、A0部分行列に対して以下の乗算を行う必要がある。
A0B0
A0B2
行列C’’’’を計算するには、A0部分行列に対して以下の乗算を行う必要がある。
A0C0’’’
A0C2’’’
【0019】
したがって、データフェッチの数を比較的低く保つために、スケジューラ100は、所定のCUサブセットにおける所定のA部分行列に対する全ての乗算演算を同じCUクラスタにスケジューリングする。したがって、例えば、いくつかの実施形態では、スケジューラ104は、A0部分行列を必要とし、CUサブセット110に割り当てられた部分行列を計算するのに用いられる各行列乗算を、同じCUクラスタ(例えば、CUクラスタ109)に割り当てる。同様に、スケジューラ104は、A0部分行列を必要とし、CUサブセット111に割り当てられた部分行列を計算するのに用いられる各行列乗算を、CUサブセット111の同じCUクラスタに割り当てる。各CUサブセットについて同様である。したがって、各CUクラスタは、複数の異なる行列乗算に対して、対応するA部分行列を対応するレジスタファイル(又は、他のストレージモジュール)に保持することが可能である。
【0020】
さらに、上記の式から、次のC行列の対応する部分行列を計算するのに必要なのは、所定のC行列の部分行列の一部のみであることが分かる。例えば、CUサブセット110が部分行列C0,C1を計算すると、部分行列C0’,C1’の計算に必要とされる全てのデータが計算される。したがって、C0,C1の部分行列を計算した後に、CUサブセット110は、部分行列をCUサブセット111に提供して、C0’,C1’を計算する。いくつかの実施形態では、CUサブセット110は、C2,C3行列を計算する前に(又は、同時に)C0,C1部分行列を提供する。これにより、行列乗算は、CUサブセット110~113に亘ってパイプライン化され、処理効率を高める。
【0021】
いくつかの実施形態による、このような行列乗算のパイプライン化の例を図3に示す。図3は、T~Tで示される期間のシーケンスを示しており、各期間中、C行列の一部が、CUサブセット110~113の少なくとも1つによって計算される。いくつかの実施形態では、各期間は、CUサブセット110~113の複数の処理サイクル又はクロックサイクルを含むことが理解されるであろう。図示した例では、期間Tにおいて、CUサブセット110は、C0,C1部分行列を計算し、部分行列をCUサブセット111に提供する。
【0022】
次の期間Tにおいて、CUサブセット110は、C2,C3部分行列を計算し、部分行列をCUサブセット111に提供する。さらに、C0’,C1’を計算するのに必要な全ての部分行列が利用可能であるため、期間Tにおいて、CUサブセット111は、部分行列C0’,C1’を計算し、部分行列を提供する。すなわち、期間Tにおいて、CUサブセット110及びCUサブセット111は、それぞれ部分行列C0,C1及びC0’,C1’を同時に計算する。
【0023】
次の期間Tにおいて、CUサブセット111は、C2’,C3’部分行列を計算し、CUサブセット112は、C0’’,C1’’部分行列を計算する。次の期間Tにおいて、CUサブセット112は、C2’’,C3’’部分行列を計算し、CUサブセット113は、C0’’’,C1’’’部分行列を計算する。次の期間Tにおいて、CUサブセット113は、C2’’’,C3’’’部分行列を計算する。したがって、図示したように、行列乗算演算は、CUサブセット110~113に亘ってパイプライン化され、処理効率を高める。いくつかの実施形態では、A、B及びC行列は、より多数の部分行列を有するより大きな行列であり、図示したパイプラインの効率をさらに高める。例えば、より大きなC行列の場合、CUサブセット11は、期間TにおいてC4,C5部分行列を計算し、期間TにおいてC6,C7部分行列を計算することができる。
【0024】
図4は、いくつかの実施形態による、GPUで行列乗算演算をパイプライン化する方法400のブロック図である。方法400は、図1のGPU100における実施例に関して説明される。ブロック402において、GPU100は、行列A,B及び実行される行列乗算演算を示すRNNカーネル102を受信する。ブロック404において、スケジューラ104は、異なるC行列の乗算をCUサブセット110~113にスケジューリングし、さらに、各C行列の各部分行列の乗算をCUサブセット110~113のCUクラスタにスケジューリングし、A部分行列を、割り当てられたクラスタの内部記憶モジュールに保持することができるようにする。ブロック406において、CUサブセット110~113は、対応するC行列の部分行列を計算し、図1及び図3に示すように、結果を次のCUサブセットに提供する。ブロック408において、GPUは、リカレントニューラルネットワークの結果を、行列乗算に基づいてCPUに提供する。
【0025】
本明細書に開示されるように、いくつかの実施形態において、方法は、グラフィックスプロセッシングユニット(GPU)において、実行されるコマンドのセットを受信することであって、GPUは、複数の計算ユニット(CU)を含み、コマンドのセットは、複数の行列乗算演算を含む、ことと、コマンドのセットの受信に応じて、複数の行列乗算演算の第1の行列乗算演算をCUの第1のサブセットにスケジューリングし、複数の行列乗算演算の第2の行列乗算演算をCUの第2のサブセットにスケジューリングすることであって、CUの第2のサブセットはCUの第1のサブセットと異なる、ことと、第1の行列乗算演算及び第2の行列乗算演算を、CUの第1のサブセット及び第2のサブセットの各々において実行することと、を含む。一態様では、方法は、第1の行列乗算演算の結果をCUの第1のサブセットからCUの第2のサブセットに提供して、第2の行列乗算演算を実行することを含む。別の態様では、方法は、第2の行列乗算演算の結果を、複数のCUのうちCUの第3のサブセットに提供して、第3の行列乗算演算を実行することを含み、CUの第3のサブセットは、CUの第1のサブセット及び第2のサブセットと異なる。さらに別の態様では、方法は、第3の行列乗算演算の結果をCUの第3のサブセットからCUの第1のセットに提供して、第4の行列乗算演算を実行することを含む。
【0026】
一態様では、第1の行列乗算演算は、第1の乗算及び第2の乗算を含み。第2の行列乗算演算は、第3の乗算を含む。第1の行列乗算演算及び第2の行列乗算演算を実行することは、第3の乗算と同時に第2の乗算を実行することを含む。別の態様では、第3の乗算は、第1の乗算の結果を乗算する。さらに別の態様では、第1の行列乗算演算は、第1の乗算及び第2の乗算を含む。第1の行列乗算演算を実行することは、CUの第1のサブセットの第1のクラスタで第1の乗算を実行し、CUの第1のサブセットの第2のクラスタで第2の乗算を実行することを含む。さらに別の態様では、第1の行列乗算演算を実行することは、第2の乗算と同時に第1の乗算を実行することを含む。さらに別の態様では、方法は、第1の行列乗算演算及び第2の行列乗算演算に基づいてリカレントニューラルネットワーク(RNN)の出力を生成することを含む。
【0027】
いくつかの実施形態において、方法は、複数の計算ユニット(CU)を含むグラフィックスプロセッシングユニット(GPU)において、複数の行列乗算演算を受信することと、複数の行列乗算演算の受信に応じて、複数の行列乗算演算の異なる行列乗算演算を、複数のCUの異なる対応するサブセットにスケジューリングすることと、複数のCUの異なるサブセット間で複数の行列乗算演算の結果をパイプライン化することと、を含む。一態様では、方法は、複数のCUの異なるサブセットにおいて、複数の行列乗算演算の一部を同時に実行することを含む。
【0028】
いくつかの実施形態において、グラフィックスプロセッシングユニット(GPU)は、CUの第1のサブセットと、CUの第1のサブセットと異なるCUの第2のサブセットと、を含む複数のCUと、複数の行列乗算演算を含むコマンドのセットを、実行するために受信し、コマンドのセットの受信に応じて、複数の行列乗算演算のうち第1の行列乗算演算をCUの第1のサブセットにスケジューリングし、複数の行列乗算演算のうち第2の行列乗算演算をCUの第2のサブセットにスケジューリングするように構成されたスケジューラと、第1の行列乗算演算及び第2の行列乗算演算を実行するように構成されたCUの第1のサブセット及びCUの第2のサブセットと、を含む。一態様では、CUの第1のサブセットは、第2の行列乗算演算を実行するために、第1の行列乗算演算の結果をCUの第2のサブセットに提供するように構成されている。
【0029】
一態様では、CUの第2のサブセットは、第3の行列乗算演算を実行するために、第2の行列乗算演算の結果を複数のCUのうちCUの第3のサブセットに提供するように構成されており、CUの第3のサブセットは、CUの第1のサブセット及び第2のサブセットと異なる。別の態様では、CUの第3のサブセットは、第4の行列乗算演算を実行するために、第3の行列乗算演算の結果をCUの第1のセットに提供するように構成されている。さらに別の態様では、第1の行列乗算演算は、第1の乗算及び第2の乗算を含む。第2の行列乗算演算は、第3の乗算を含む。CUの第1のサブセットは、第3の乗算を実行するように構成されたCUの第2のサブセットと同時に第2の乗算を実行するように構成されている。
【0030】
一態様では、第3の乗算は、第1の乗算の結果を乗算する。別の態様では、CUの第1のサブセットは、CUの第1のクラスタ及びCUの第2のクラスタを含む。第2のクラスタは、第1のクラスタと異なる。第1の行列乗算演算は、第1の乗算及び第2の乗算を含む。CUの第1のサブセットは、CUの第1のサブセットの第1のクラスタで第1の乗算を実行し、CUの第1のサブセットの第2のクラスタで第2の乗算を実行するように構成されている。さらに別の態様では、CUの第1のサブセットは、第1の行列乗算演算を第2の乗算と同時に実行するように構成されている。別の態様では、GPUは、第1の行列乗算演算及び第2の行列乗算演算に基づいてリカレントニューラルネットワーク(RNN)の出力を生成するように構成されている。
【0031】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
【0032】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行するプロセッシングシステムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0033】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0034】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
図1
図2
図3
図4