(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-25
(45)【発行日】2024-02-02
(54)【発明の名称】行列数学命令セットのタイリングアルゴリズム
(51)【国際特許分類】
G06F 9/345 20180101AFI20240126BHJP
G06F 15/80 20060101ALI20240126BHJP
G06F 12/0875 20160101ALI20240126BHJP
G06F 12/0853 20160101ALI20240126BHJP
G06F 9/38 20180101ALI20240126BHJP
G06F 17/16 20060101ALI20240126BHJP
【FI】
G06F9/345 S
G06F15/80
G06F12/0875 104
G06F12/0853
G06F9/38 370C
G06F17/16 A
G06F17/16 B
(21)【出願番号】P 2021531339
(86)(22)【出願日】2019-12-18
(86)【国際出願番号】 US2019067050
(87)【国際公開番号】W WO2020131993
(87)【国際公開日】2020-06-25
【審査請求日】2021-07-20
(31)【優先権主張番号】201811566422.X
(32)【優先日】2018-12-19
(33)【優先権主張国・地域又は機関】CN
(32)【優先日】2018-12-26
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】フア ジャン
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2018/0321938(US,A1)
【文献】米国特許出願公開第2014/0201450(US,A1)
【文献】米国特許出願公開第2011/0055517(US,A1)
【文献】米国特許出願公開第2010/0241824(US,A1)
【文献】国際公開第2018/213636(WO,A1)
【文献】米国特許出願公開第2002/0198911(US,A1)
【文献】AMD Graphics Core Next Architecture, Generation 3,米国,AMD Micro Devices,,2016年08月,1~10-8,http://developer.amd.com/wordpress/media/2013/12/AMD_GCN3_Instruction_Set_Architecture_rev1.1.pdf,Retrieved on [2022/6/10]
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/345
G06F 15/80
G06F 12/0875
G06F 12/0853
G06F 9/38
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
システムであって、
複数の行列要素を
含むソース行列を線形フォーマットで記憶するメモリ
であって、前記ソース行列はM列及びN行を有する、メモリと、
複数のチャネルを含むキャッシュと、
前記ソース行列を前記線形フォーマットからタイリングフォーマットに変換するように構成されたプロセッサ
であって、タイリングフォーマットでは前記ソース行列の行列要素が複数のタイルとして記憶され、前記複数のタイルの各々は前記ソース行列よりも少ない要素を有する、プロセッサと、
複数の計算ユニットであって、前記複数の計算ユニットの各々が
1つ以上の単一命令複数データ(SIMD)ユニットを備える、複数の計算ユニットと、を備え、
前記複数の計算ユニットのうち2つ以上の計算ユニットが同じカーネルを並列に実行している間に、前記2つ以上の計算ユニットの各々のSIMDユニットのレーンは、
前記キャッシュから、少なくとも2つのチャネルを介して並列に、前記複数のタイルの所定の複数の行列要素をロードすることと、
前記所定の複数の行列要素に対して行列演算を実行して、結果をタイリングフォーマットで生成することと、
を行うように構成されて
いる、
システム。
【請求項2】
前記複数の
行列要素は
、単一クロックサイクルで前記
2つ以上の計算ユニットによってロード
される、
請求項1のシステム。
【請求項3】
各
SIMDユニットは、
M個のレーンを含む、
請求項2のシステム。
【請求項4】
前記プロセッサは、第1のソース行列の複数の行列要素を前記線形フォーマットからタイリングフォーマットに変換する要求を受信したことに応じて、
前記メモリの第1のバッファの連続する位置から値を読み出すことであって、前記第1のバッファは行列要素を前記線形フォーマットで記憶する、ことと、
前記値を第2のバッファに書き込みながら、
所定のストライドで前記第2のバッファをステップ実行することであって、前記第2のバッファは行列要素を前記タイリングフォーマットで記憶する、ことと、
を行うように構成されている、
請求項1のシステム。
【請求項5】
前記行列演算は行列乗算演算であり、前記所定の複数の行列要素は、各行列演算ユニットの複数のレーンで伝達される、
請求項1のシステム。
【請求項6】
第1のデータセットの分類は、機械学習エンジンアプリケーションの実行中に生成される、
請求項1のシステム。
【請求項7】
連続する記憶位置に前記線形フォーマットで記憶される第1のソース行列の要素は、タイル
の列の要素の数と等しい数のメモリ位置だけ離れたメモリ位置に前記タイリングフォーマットで記憶される、
請求項1のシステム。
【請求項8】
方法であって、
プロセッサが、メモリに記憶された
ソース行列を線形フォーマットからタイリングフォーマットに変換すること
であって、前記線形フォーマットでは前記ソース行列がM列及びN行を有し、前記タイリングフォーマットでは前記ソース行列の行列要素が複数のタイルとして記憶され、前記複数のタイルの各々は前記ソース行列よりも少ない要素を有する、ことと、
1つ以上の単一命令複数データ(SIMD)ユニットを含む計算ユニットが、複数の行列要素を前記メモリからキャッシュにロードすることと、
所定のSIMDユニットの少なくとも2つのレーンが、前記キャッシュから、前記キャッシュの少なくとも2つのチャネルを介して並列に、1つ以上の対応するタイルの所定の複数の行列要素
をロードすることと、
各行列演算ユニットが、前記所定の複数の行列要素に対して行列演算を実行して、結果を前記タイリングフォーマットで生成することと
、を含む、
方法。
【請求項9】
前記複数の
行列要素は
、単一クロックサイクルで
複数のレーンによってロード
される、、
請求項8の方法。
【請求項10】
前記複数のレーンの数は、Mと等しい、
請求項9の方法。
【請求項11】
前記方法は、第1のソース行列の複数の行列要素を前記線形フォーマットからタイリングフォーマットに変換する要求を受信したことに応じて、
前記メモリ内の第1のバッファの連続する位置から値を読み出すことであって、前記第1のバッファは行列要素を前記線形フォーマットで記憶する、ことと、
前記値を第2のバッファに書き込みながら、
所定のストライドで前記第2のバッファをステップ実行することであって、前記第2のバッファは行列要素を前記タイリングフォーマットで記憶する、ことと、を含む、
請求項8の方法。
【請求項12】
行列演算ユニット毎に、前記所定の複数の行列要素を前記行列演算ユニットの複数のレーンで伝達することであって、前記行列演算は行列乗算演算である、ことをさらに含む、
請求項8の方法。
【請求項13】
第1のデータセットの分類
を、機械学習エンジンアプリケーションの実行中に生成
することをさらに含む、
請求項8の方法。
【請求項14】
連続する記憶位置に前記線形フォーマットで記憶される第1のソース行列の要素は、タイル
の列の要素の数と等しい数のメモリ位置だけ離れたメモリ位置に前記タイリングフォーマットで記憶される、
請求項8の方法。
【発明の詳細な説明】
【背景技術】
【0001】
並列処理ユニットで行列演算を実行すると、メモリから大量のデータがロードされ、メモリ帯域幅の利用率が高くなる。行列要素をロードするには、通常、線形フォーマットでメモリに記憶される行列データ要素をステップ実行するためのオフセットを計算することが必要になる。しかしながら、これは、正しい順序で行列の要素を移動して行列演算を実行するのに使用されるオフセットを計算するために、ロード命令毎に複雑な式が必要になる。本明細書で使用される場合、「線形フォーマット」という用語は、メモリの物理的な行又は列の最後に達するまで、連続する行列要素が、隣接する記憶位置に順次記憶されるフォーマットして定義される。行列要素を記憶するための線形フォーマットの例は、行優先順位及び列優先順位を含む。行優先順位では、行列の行の連続する要素は、メモリ内で互いに隣接して存在する。列優先順位では、行列の列の連続する要素は、メモリ内で互いに隣接して存在する。行列要素を線形フォーマットで処理すると、メモリ帯域幅及び行列演算ユニットの使用効率が悪くなる。
【0002】
添付の図面と併せて以下の説明を参照することによって、本明細書に記載される方法及びメカニズムの利点をより良く理解することができる。
【図面の簡単な説明】
【0003】
【
図1】コンピューティングシステムの一の実施形態のブロック図である。
【
図2】コンピューティングシステムの別の実施形態のブロック図である。
【
図3】行列演算ユニットの一実施形態のブロック図である。
【
図4】SIMDユニットによって演算されるソースA行列のデータレイアウトの一実施形態を示す図である。
【
図5】SIMDユニットによって演算されるソースB行列のデータレイアウトの一実施形態を示す図である。
【
図6】タイリングブロックのタイリングレイアウトの一実施形態を示す図である。
【
図7】ソースA行列内の32×32ブロックのフォーマットの一実施形態を示す図である。
【
図8】ソースA行列内の128×128ブロックのフォーマットの一実施形態を示す図である。
【
図9】128×128ブロックで構成された画像のフォーマットの一実施形態を示す図である。
【
図10】ソースB行列の一実施形態を示す図である。
【
図11】ソースB行列内の32×32ブロックのフォーマットの一実施形態を示す図である。
【
図12】ソースB行列内の128×128ブロックのフォーマットの一実施形態を示す図である。
【
図13】128×128ブロックで構成された画像のフォーマットの一実施形態を示す図である。
【
図15】一実施形態による、ソースA行列を線形フォーマットからタイリングフォーマットに変換するための擬似コードの例を示す図である。
【
図16】一実施形態による、ソースB行列を線形フォーマットからタイリングフォーマットに変換するための擬似コードの例を示す図である。
【
図17】行列演算を実行するために行列データを線形フォーマットからタイリングフォーマットに変換するための方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【0004】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、多くの具体的な詳細が記載されている。しかしながら、当業者は、様々な実施形態がこれらの具体的な詳細無しに実施され得ることを認識すべきである。いくつかの例では、本明細書で説明するアプローチを不明瞭にすることを回避するために、周知の構造、コンポーネント、信号、コンピュータプログラム命令及び技術が詳細に示されていない。説明を簡単且つ明確にするために、図に示す要素が必ずしも縮尺通りに描かれていないことが理解されるであろう。例えば、いくつかの要素の寸法は、他の要素に対して誇張されている場合がある。
【0005】
行列演算を実行するために、行列データを線形フォーマットからタイリングフォーマット(tiling format)に変換するための様々なシステム、装置及び方法が本明細書に開示されている。システムは、メモリと、キャッシュと、プロセッサと、複数の計算ユニットと、を少なくとも含む。メモリは、複数の行列要素を線形フォーマットで記憶し、プロセッサは、複数の行列要素を線形フォーマットからタイリングフォーマットに変換する。一実施形態では、「タイルフォーマット」又は「タイリングフォーマット」という用語は、所定の行列演算を実行するための行列要素が隣接する記憶位置に記憶されるように、行列要素を記憶位置に記憶するためのフォーマットとして定義される。一実装形態では、所定の行列演算は、行列乗算演算である。別の実施形態では、「タイリングフォーマット」という用語は、タイルの列を構成する行列要素が隣接する記憶位置に記憶されるフォーマットとして定義される。「タイル」という用語は、N×Mブロックの要素として定義され、N及びMは正の整数であり、N又はMの少なくとも1つは1よりも大きい。また、「タイル」は、本明細書では「ブロック」と呼ばれる場合もある。一実施形態では、第1のソース行列のタイルの列の数「M」は、行列演算ユニットのレーンの数に等しい。一実装形態では、行列乗算演算の場合、第1のソース行列がN×M個の要素のタイルに分割され、一方、第2のソース行列が、M×N個の要素のタイルに分割される。
【0006】
タイリングフォーマットによって、行列データは、オフセット計算を実行することなくデータを連続してロードすることができる特定のレイアウトで配列される結果となる。各計算ユニットは、1つ以上のタイルの行列要素の行及び/又は列をメモリからキャッシュに取り出す。各計算ユニットは、対応するタイル(複数可)の複数の行列要素をキャッシュから取り出し、複数の行列要素に対して行列演算を実行して、結果をタイリングフォーマットで生成する行列演算ユニットを含む。一実施形態では、システムは、機械学習エンジンの一部として複数の計算ユニットで複数の行列演算を実行して、第1のデータセットの分類を生成する。例えば、一実施形態では、システムは、ニューラルネットワークを実施して画像を1つ以上のカテゴリに分類しながら、複数の行列演算を実行する。ニューラルネットワークは、畳み込みニューラルネットワーク、再帰型(recurrent)ニューラルネットワーク又は他のタイプであってもよい。手書き数字分類や顔検出等の様々なタスクをニューラルネットワークで実行することができる。さらに、ニューラルネットワークは、他のより困難な視覚的分類タスクを実行することもできる。ニューラルネットワークの他の用途は、音声認識、言語モデルリング、感情分析、テキスト予測等を含む。他の実施形態では、システムは、他のタイプのソフトウェアアプリケーションの一部として、複数の計算ユニットで複数の行列演算を実行する。
【0007】
様々な実施形態では、キャッシュはP個のチャネルを有し、Pは1よりも大きい正の整数である。一実施形態では、Pは32に等しい。他の実施形態では、Pは他の数に等しい。要求は、物理アドレスビットの一部に基づいてキャッシュの異なるチャネルにマッピングされる。例えば、一実施形態では、各チャネルは、物理アドレスのビット12~8でマッピングされる。他の実施形態では、チャネルマッピングは、物理アドレスの他のビットに基づく。一実施形態では、行列要素をタイリングフォーマットで記憶すると、キャッシュヒット効率が向上する。典型的な用途では、各計算ユニットは異なる行列タイルを処理するが、タイルは同じキャッシュチャネルにマッピングすることができる。これは、異なる計算ユニットが同じキャッシュチャネルを介してデータを要求することになるため、キャッシュ効率に影響を与える可能性がある。したがって、計算ユニットは、データがキャッシュから返されるのを待機し、キャッシュは、同じチャネルで要求を1つずつ処理する。しかしながら、行列要素がタイリングフォーマットで記憶される場合、異なる計算ユニットが異なるチャネルにマッピングされる。計算ユニットが同じカーネルを並行して実行している場合、要求が異なるチャネル上のキャッシュに送信されるので、キャッシュアクセス効率を向上させるのに役立つ。
【0008】
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、プロセッサ105A~105Nと、入力/出力(I/O)インタフェース120と、バス125と、メモリコントローラ(複数可)130と、ネットワークインタフェース135と、メモリデバイス(複数可)140と、ディスプレイコントローラ150と、ディスプレイ155と、を少なくとも含む。他の実施形態では、コンピューティングシステム100は、他のコンポーネントを含み、及び/又は、異なるように構成されている。プロセッサ105A~105Nは、システム100に含まれる任意の数のプロセッサを表す。
【0009】
一実施形態では、プロセッサ105Aは、中央処理装置(CPU)等の汎用プロセッサである。一実施形態では、プロセッサ105Nは、高度に並列なアーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサは、グラフィックスプロセッシングユニット(GPU)、デジタルシグナルプロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)等を含む。いくつかの実施形態では、プロセッサ105A~105Nは、複数のデータ並列プロセッサを含む。一実施形態では、プロセッサ105Nは、ディスプレイ155に送られるピクセルをディスプレイコントローラ150に提供するGPUである。
【0010】
メモリコントローラ(複数可)130は、プロセッサ105A~105Nによってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ(複数可)130は、任意の数及びタイプのメモリデバイス(複数可)140に結合されている。メモリデバイス(複数可)140は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス(複数可)140内のメモリのタイプとしては、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)等が挙げられる。
【0011】
I/Oインタフェース120は、任意の数及びタイプのI/Oインタフェース(例えば、PCI(Peripheral Component Interconnect)バス、PCI-X(PCI-Extended)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(GBE)バス、ユニバーサルシリアルバス(USB))を表す。様々なタイプの周辺装置(図示省略)がI/Oインタフェース120に結合されている。このような周辺装置は、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶装置、ネットワークインタフェースカード等を含むが、これらに限定されない。ネットワークインタフェース135は、ネットワークを介してネットワークメッセージを送受信するために使用される。
【0012】
様々な実施形態では、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、様々な他のタイプのコンピューティングシステム若しくはコンピューティングデバイスである。コンピューティングシステム100のコンポーネントの数は、実施形態によって異なることに留意されたい。例えば、他の実施形態では、
図1に示す数よりも多い又は少ないコンポーネントが存在する。他の実施形態では、コンピューティングシステム100は、
図1に示されていない他のコンポーネントを含むことにも留意されたい。さらに、他の実施形態では、コンピューティングシステム100は、
図1に示す以外の方法で構成される。
【0013】
図2を参照すると、コンピューティングシステム200の別の実施形態のブロック図が示されている。一実施形態では、システム200は、GPU205と、システムメモリ225と、ローカルメモリ230と、を含む。また、システム200は、図を不明瞭にすることを回避するために図示されていない他のコンポーネントを含む。GPU205は、コマンドプロセッサ235と、制御ロジック240と、ディスパッチユニット250と、計算ユニット255A~255Nと、メモリコントローラ220と、グローバルデータシェア270と、レベル1(L1)キャッシュ265と、レベル2(L2)キャッシュ260と、を少なくとも含む。他の実施形態では、GPU205は、他のコンポーネントを含み、図示されているコンポーネントのうち1つ以上を省略し、例えば1つのインスタンスしか
図2に示されていなくてもコンポーネントの複数のインスタンスを有し、及び/又は、他の適切な方法で構成される。一実施形態では、GPU205の回路は、(
図1の)プロセッサ105Nに含まれる。
【0014】
様々な実施形態では、コンピューティングシステム200は、様々なタイプのソフトウェアアプリケーションの何れかを実行する。所定のソフトウェアアプリケーションの実行の一部として、コンピューティングシステム200のホストCPU(図示省略)は、GPU205で実行されるカーネルを起動する。コマンドプロセッサ235は、ホストCPUからカーネルを受信し、ディスパッチユニット250を使用して、対応するウェーブフロント(wavefront)を計算ユニット255A~255Nに発行する。一実施形態では、各計算ユニット255A~255Nは、行列演算ユニットを含む。例えば、行列演算ユニットは、行列乗算演算を実行する。さらに、様々な実施形態では、行列演算ユニットは、他のタイプの行列演算を実行する。計算ユニット255A~255Nで実行されるウェーブフロントは、データを読み出し、GPU205内のグローバルデータシェア270、L1キャッシュ265及びL2キャッシュ260に書き込む。
図2には示されていないが、一実施形態では、計算ユニット255A~255Nは、各計算ユニット255A~255N内に1つ以上のキャッシュ及び/又はローカルメモリも含む。
【0015】
一実施形態では、行列データは、システムメモリ225及び/又はローカルメモリ230に線形フォーマットで記憶される。行列データをL2キャッシュ260にロードする前に、行列データは、線形フォーマットからタイリングフォーマットに変換される。一実施形態では、「タイリングフォーマット」という用語は、複数の行列要素を一緒にタイルのユニットに記憶することとして定義され、各タイルは、N×Mブロックの行列要素を記憶し、N及びMは正の整数である。「タイリングフォーマット」によって、連続するタイルがメモリに順次記憶される。
【0016】
一実施形態では、コマンドプロセッサ235は、行列データを線形フォーマットからタイリングフォーマットに変換する。別の実施形態では、ホストプロセッサ(例えば、
図1のプロセッサ105A)は、行列データを線形フォーマットからタイリングフォーマットに変換する。次に、計算ユニット255A~255Nでのウェーブフロントの実行中、行列データは、タイリングフォーマットで記憶されているので、L2キャッシュ260から効率的にロードされる。一実施形態では、行列要素がタイリングフォーマットで記憶される場合、行列データ要素は、複数のチャネルでL2キャッシュ260から計算ユニット255A~255Nに並行して読み出される。これは、行列データ要素を線形フォーマットで記憶するよりもより効率的なアプローチであり、行列データ要素は、単一チャネルでL2キャッシュ260から連続して読み出されることになる。
【0017】
図3を参照すると、行列演算ユニット300の一実施形態のブロック図が示されている。一実施形態では、各計算ユニット255A~255Nは、行列演算ユニット300の回路を含む。一実施形態では、行列演算ユニット300は、アーキテクチャベクトル汎用レジスタ(VGPR)ファイル305と、エクスポートユニット310と、蓄積(accumulation)VGPRファイル315と、単一命令複数データ(SIMD)ユニット320と、SIMDユニット325と、を少なくとも含む。行列演算ユニット300は、図を不明瞭にすることを回避するために図示されていない任意の数の他のコンポーネントも含むことを理解されたい。さらに、他の実施形態では、行列演算ユニット300は、他の適切な方法で構成される。
【0018】
一実施形態では、SIMDユニット320は、様々な浮動小数点演算を実行するための浮動小数点ユニットであり、SIMDユニット325は、様々な行列演算(例えば、ドット積演算、行列乗算演算)を実行するための行列ユニットである。一実施形態では、アーキテクチャVGPRファイル305及び蓄積VGPRファイル315に接続されて示されている別個の各入力は、それぞれ32ビットの16レーンを有する。他の実施形態では、入力は、他のビット幅の他の数のレーンを有する。一実施形態では、SIMDユニット325は、行列要素がタイリングフォーマットで記憶される場合に、入力行列要素に対してより効率的に動作する。したがって、この実施形態では、行列要素は、アーキテクチャVGPRファイル305及び/又は蓄積VGPRファイル315に読み込まれる前に、線形フォーマットからタイリングフォーマットに変換される。これにより、SIMDユニット325による演算をより効率的に実行することが可能になる。
【0019】
図4を参照すると、SIMDユニットによって演算されるソースA行列のデータレイアウト400の一実施形態の図が示されている。一実施形態では、(
図3の)SIMDユニット325は、ソースA行列を読み込んで、ソースA行列をソースB行列で乗算した行列乗算演算を実行するために、
図4に示すデータレイアウト400に従って構成される。例えば、この実施形態では、SIMDユニット毎に64のスレッドがデータレイアウト400に存在する。他の実施形態では、SIMDユニットは、データレイアウトに他の数(例えば、32、128)のスレッドを含む。データレイアウト400の各スレッドは、SIMDユニットのレーンに対応する。
【0020】
処理されるブロックのサイズに応じて、異なる数のブロックをデータレイアウト400に従ってマッピングすることができる。例えば、各ブロックが32×2のサイズである場合、2つのブロック(Blk0およびBlk1)がVGPRファイルからSIMDユニットにマッピングされる。各ブロックが16×2のサイズである場合、4つのブロック(Blk0、Blk1、Blk2、Blk3)がVGPRファイルからSIMDユニットにマッピングされる。各ブロックのサイズが4×2の場合、16個のブロック(Blk0、Blk1、Blk2、Blk3、Blk4、Blk5、Blk6、Blk7、Blk8、Blk9、Blk10、Blk11、Blk12、Blk13、Blk14、Blk15)がVGPRファイルからSIMDユニットにマッピングされる。
【0021】
図5を参照すると、SIMDユニットのためのソースB行列のデータレイアウト500の一実施形態の図が示されている。一実施形態では、VGPRファイルとSIMDユニット(例えば、(
図3の)SIMDユニット325)との間の接続は、データレイアウト500に従って構成される。例えば、一実施形態では、データレイアウト500は、ソースA行列とソースB行列との間で行列乗算演算を実行するように、ソースB行列をロードするための接続を定義する。一実装形態では、データレイアウト500は、64スレッドのために構成される。他の実施形態では、データレイアウト500は、他の数のスレッドを含む。データレイアウト500の各スレッドは、SIMDユニットのレーンに対応する。処理されるブロックのサイズ(例えば、2×32、2×16、2×4)に応じて、異なる数(例えば、2、4、16)のブロックをデータレイアウト500に従ってマッピングすることができる。
【0022】
図6を参照すると、ソースA行列のブロック600のタイリングレイアウトの一実施形態の図が示されている。一実施形態では、行列は複数のブロックに分割され、各ブロックはブロック600に従って構成される。ブロック600内の要素の構成は、線形データとタイリングデータとのマッピング関係を示す。例えば、行列要素65は、円605によって示される。この要素の元の位置は(x=3、y=0)である。したがって、位置は、線形フォーマットでは(y×stride+x)=0×4+3=3であり、タイリングフォーマットでは位置65である。一実施形態では、基本的なタイリングブロックは、行列乗算演算を実施するために、ソースA行列の場合32×4であり、ソースB行列の場合4×32である。他の実施形態では、行列演算の基本的なタイリングブロックは、他のサイズであってもよい。一実施形態では、行列階層の次のレベルで、サイズ32×4の8つの基本的なブロックが32×32の中間ブロックに結合される。さらに、行列階層を上に移動すると、16の中間ブロックが128×128の大きいブロックに結合される。残りの説明のために、処理される行列サイズが128×128の大きいブロックに整合されると仮定される。しかしながら、他の実施形態では、行列サイズを他のサイズのブロックに整合することができることを理解されたい。
【0023】
図7を参照すると、ソースA行列内の32×32のブロック700の一実施形態の図が示されている。4×32の各ブロックは、図示するように、左から右へブロック0からブロック7まで左から右に配置されて、32×32ブロック700を形成する。他の実施形態では、他のサイズのブロックを互いに結合して、行列ブロック階層の上位のブロックを形成することができる。
【0024】
図8を参照すると、ソースA行列の128×128ブロック800の一実施形態の図が示されている。128×128ブロック800の第1の列は、ブロック800内に示すように、32×32ブロック0~3から構成される。128×128ブロック800の第2の列は32×32ブロック4~7から構成され、128×128ブロック800の第3の列は32×32ブロック8~11から構成され、128×128ブロック800の第4の列(つまり、最も右の列)32×32ブロック12~15から構成される。一実施形態では、各32×32ブロックは、(
図7の)ブロック700に従って構成される。
【0025】
図9を参照すると、128×128ブロックから構成された画像900の一実施形態の図が示されている。他の実施形態では、画像は、他の適切な方法で構成可能な他のサイズのブロックから構成されることを理解されたい。例えば、他の実施形態では、画像は、64×64ブロック、256×256ブロック、又は、他のサイズのブロックから構成することができる。これらの実施形態の場合、画像900について本明細書で説明するメカニズム及び方法を、他のサイズのブロックから生成された他の画像に適用するように適合させることができる。
【0026】
図10を参照すると、ソースB行列のブロック1000のタイリングレイアウトの一実施形態の図が示されている。一実施形態では、行列演算ユニットは、ソースA行列をソースB行列で乗算する。ソースB行列のブロック1000の構成は、行列乗算演算を実施するための一実施形態によるソースB行列ブロック1000の要素の構成の一例である。
【0027】
図11を参照すると、ソースB行列の32×32ブロック1100の一実施形態の図が示されている。一実施形態では、ソースB行列の32×32ブロック1100は、8つの異なる32×4ブロックを使用して構成される。
図11に示すように、各32×4ブロックは、ブロック1100に示すように、ブロック0からブロック7まで上から下に配置される。他の実施形態では、32×32ブロック1100は、他の数、サイズ、及び/又は、より小さいブロックの配置で構成することができる。
【0028】
図12を参照すると、ソースB行列の128×128ブロック1200の一実施形態の図が示されている。128×128ブロック1200の第1の行は、左から右に移動する32×32ブロック0~3から構成される。128×128ブロック1200の第2の行は、左から右に移動する32×32ブロック4~7から構成され、128×128ブロック1200の第3の行は、左から右に移動する32×32ブロック8~11から構成され、128×128ブロック1200の第4の行(つまり、最下行)は、左から右に移動する32×32ブロック12~15から構成される。一実施形態では、各32×32ブロックは、(
図11の)ブロック1100のレイアウトに従って構成される。
【0029】
図13を参照すると、128×128ブロックから構成された画像1300の一実施形態の図が示されている。画像1300の第1の行は、左から右に移動する128×128ブロック0~7を含む。同様に、画像1300の第2の行は、左から右に移動する128×128ブロック8~15を含む。画像1300の他の行も同様に構成され、下の行は、左から右に移動する128×128ブロック56~63を含む。一実施形態では、各128×128ブロック0~63は、(
図12の)ブロック1200に従って構成される。
【0030】
図14を参照すると、結果C行列のブロック1400の一実施形態の図が示されている。一実施形態では、行列演算ユニットは、ソースA行列をソースB行列で乗算して、結果C行列を生成する。ブロック1400の要素の構成は、行列乗算演算が一実施形態に従って実行された後の結果C行列内のブロックの要素の構成の一例である。ブロック1400の第1の列は、要素0を含み、その後に要素1、要素2、要素3が続く。ブロック1400の第2の列は、要素7の上に要素6、要素6の上に要素5、要素5の上に要素4を含む。この要素レイアウトのパターンは、行列C1400の右側に移動する列において、最後の最も右側の列が要素60、要素61、要素62、要素63を含むまで続く。
【0031】
図15を参照すると、一実施形態による、ソースA行列を線形フォーマットからタイリングフォーマットに変換するための擬似コード1500の例が示されている。擬似コード1500は、ある特定の実施形態に使用される特定の値を有する変数の定義を含む。他の実施形態では、これらの変数の値は、タイルのサイズ、行列乗算ユニットのレーンの数及びビット幅、キャッシュチャネルの数等に応じて変わる場合がある。
【0032】
擬似コード1500及び(
図16の)擬似コード1600の説明のために、2つの入力行列、つまりソースA行列及びソースB行列が存在すると仮定される。また、ソースA行列のサイズがM×Kであり、ソースB行列のサイズがK×Nであり、結果C行列のサイズがM×Nであり、M、N及びKが正の整数であることも仮定される。一実施形態では、M、N及びKは、1024に等しい。他の実施形態では、M、N及びKの値が変わる場合がある。
【0033】
一実施形態では、メモリに2つのセットのバッファがある。A_outbuffer[]及びB_outbuffer[]は、それぞれソースA行列及びソースB行列の行列要素をメモリに線形フォーマットで記憶する。A_package_outbuffer[]及びB_package_outbuffer[]は、それぞれソースA行列及びソースB行列の行列要素をメモリにタイリングフォーマットで記憶する。擬似コード1500の命令に基づいて、連続する記憶位置に線形フォーマットで記憶されるソースA行列の要素は、タイリングフォーマットでタイル高さによって分けられる記憶位置に記憶される。言い換えると、タイル高さに等しいストライドで第2のバッファをステップ実行しながら、第1のバッファ(つまり、A_outbuffer [])の連続した位置から値が読み出され、第2のバッファ(つまり、A_package_outbuffer [])の位置に書き込まれる。ソースA行列及びソースB行列が線形フォーマットからタイリングフォーマットに変換された後、計算ユニット上で実行されるカーネルコードは、メモリからキャッシュ(例えば、L2キャッシュ)にデータをロードする。
【0034】
図16を参照すると、ソースB行列を線形フォーマットからタイリングフォーマットに変換するための擬似コード1600の一例が示されている。擬似コード1600の説明は、(
図15の)擬似コード1500の説明の続きであることを意図している。一実施形態では、擬似コード1600は、ソースB行列を線形フォーマットからタイリングフォーマットに変換するために使用される。ソースB行列が線形フォーマットからタイリングフォーマットに変換されると、カーネルコードは、メモリからキャッシュにデータをロードする。
【0035】
図17を参照すると、行列演算を実行するために行列データを線形フォーマットからタイリングフォーマットに変換するための方法1700の一実施形態が示されている。説明のために、この実施形態のステップは順番に示されている。しかしながら、説明する方法の様々な実施形態では、説明する要素の1つ以上は、同時に実行されてもよいし、図示した順序とは異なる順序で実行されてもよいし、完全に省略されてもよいことに留意されたい。また、他の追加の要素も必要に応じて実行される。本明細書で説明する様々なシステム又は装置の何れも、方法1700を実施するように構成される。
【0036】
ホストプロセッサ(例えば、CPU)は、線形フォーマットで記憶された行列データに対して行列演算を実行する要求を検出する(ブロック1705)。一実施形態では、行列演算は行列乗算演算である。他の実施形態では、他のタイプの行列演算が要求される。次に、ホストプロセッサは、要求を検出したことに応じて、行列データを線形フォーマットからタイリングフォーマットに変換する(ブロック1710)。ソースA行列及びソースB行列を線形フォーマットからタイリングフォーマットに変換するための擬似コード1500,1600の例は、それぞれ
図15及び
図16に示されている。他の実施形態では、ソースA行列及びソースB行列を線形フォーマットからタイリングフォーマットに変換するための他の技術を利用することができる。
【0037】
次に、複数の行列演算ユニットは、タイリングフォーマットの行列データをメモリからキャッシュのN個の全てのチャネルにロードする(ブロック1715)。一実施形態では、キャッシュはL2キャッシュである。一実施形態では、キャッシュはN個のチャネルを有し、Nは1よりも大きい正の整数である。次に、複数の行列演算ユニットは、行列データに対して行列演算を並列に実行して、結果を生成する(ブロック1720)。次に、プロセッサは、結果を使用して、所定のソフトウェアアプリケーションに関連する第1のアクションを完了する(ブロック1725)。一実施形態では、第1のアクションは、第1のデータセットの分類であり、所定のソフトウェアアプリケーションは、機械学習アプリケーションである。一実施形態では、第1のデータセットは画像であり、分類は、画像が属する所定のカテゴリを識別する。別の実施形態では、第1のデータセットはビデオであり、分類は、ビデオを所定のカテゴリに割り当てる。他の実施形態では、第1のデータセットは、他の方法で分類される他のタイプのデータを含む。他の実施形態では、他のタイプのソフトウェアアプリケーションに関連する他のタイプのアクションが実行される。ブロック1725の後に、方法1700は終了する。
【0038】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書に記載された方法及び/又はメカニズムを実施する。例えば、汎用プロセッサ又は専用プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態において、そのようなプログラム命令は、高水準プログラミング言語によって表すことができる。他の実施形態では、プログラム命令は、高水準プログラミング言語からバイナリ、中間又は他の形式にコンパイルされてもよい。或いは、ハードウェアの動作又は設計を記述するプログラム命令を書き込むことができる。このようなプログラム命令を、C等の高水準のプログラミング言語によって表すことができる。或いは、Verilog等のハードウェア設計言語(HDL)を使用することができる。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。一般的に、このようなコンピューティングシステムは、少なくとも1つのメモリと、プログラム命令を実行することができる1つ以上のプロセッサと、を含む。
【0039】
上記の実施形態は、実装態様の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に認識されると、当業者には多数の変形及び修正が明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正の全てを包含すると解釈されることが意図されている。