(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-07-12
(54)【発明の名称】インサイチュでのスパース行列展開
(51)【国際特許分類】
G06F 17/16 20060101AFI20240705BHJP
【FI】
G06F17/16 F
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023570438
(86)(22)【出願日】2022-07-06
(85)【翻訳文提出日】2024-01-11
(86)【国際出願番号】 US2022036258
(87)【国際公開番号】W WO2023283267
(87)【国際公開日】2023-01-12
(32)【優先日】2021-07-06
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ヤング,レジナルド・クリフォード
(72)【発明者】
【氏名】ゲイル,トレバー・ジョン
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB38
5B056BB42
(57)【要約】
行列を、M×N個のセルを有するアレイを有する回路にロードするための、コンピュータストレージ媒体上に符号化されるコンピュータプログラムを含む、方法、システムおよび装置。方法のうちの1つは、第1の入力行列から複数の非ゼロ入力値を受信するステップと、複数の入力値における非ゼロ入力値ごとに、アレイ内のM×N個のセルのうちのいずれのセルに非ゼロ入力値がロードされるべきであるかを示すインデックスメタデータを受信するステップと、非ゼロ入力値およびインデックスメタデータをM×N個のセルに送信するステップと、アレイにおけるM×N個のセルのうちの特定のセルにおいて、特定の非ゼロ入力値および対応するインデックスメタデータを受信し、特定の非ゼロ入力値の対応するインデックスメタデータから、特定の非ゼロ入力値をセルに記憶するか、または特定の非ゼロ入力値を別のセルにシフトするかを判断するステップとを含む。
【特許請求の範囲】
【請求項1】
M×N個のセルを有するアレイのための回路を含むハードウェアデバイスによって実行される方法であって、
前記ハードウェア回路において、前記アレイを用いて第2の入力行列と乗算されることになる第1の入力行列から複数の非ゼロ入力値を受信するステップを含み、前記第1の入力行列は、前記複数の非ゼロ入力値および複数のゼロ入力値を含み、
前記方法は、
前記ハードウェア回路において、前記複数の入力値における非ゼロ入力値の各々について、前記アレイ内の前記M×N個のセルのうちのいずれのセルに前記非ゼロ入力値がロードされるべきであるかを示すインデックスメタデータを受信するステップと、
前記ハードウェア回路を用いて、前記非ゼロ入力値および前記インデックスメタデータを前記M×N個のセルに送信するステップと、
前記アレイにおける前記M×N個のセルのうちの特定のセルにおいて、
特定の非ゼロ入力値および前記特定の非ゼロ入力値の対応するインデックスメタデータを受信し、
前記特定の非ゼロ入力値の前記対応するインデックスメタデータから、前記特定の非ゼロ入力値を、乗算を行う際に用いるために前記セルに記憶するか、または前記特定の非ゼロ入力値を別のセルにシフトするかを判断するステップと
をさらに含み、
MおよびNは、1よりも大きい正の整数である、方法。
【請求項2】
前記アレイ内の前記M×N個のセルのうちの前記特定のセルにおいて、前記非ゼロ入力値および前記インデックスメタデータを前記M×N個のセルに送信する前に、ゼロ入力値を前記セルに自動的にロードするステップをさらに含む、請求項1に記載の方法。
【請求項3】
前記非ゼロ重み入力値および前記インデックスメタデータを前記M×N個のセルに送信するステップは、前記M×N個のセルを有する前記アレイの第1の次元に沿って前記非ゼロ重み入力値を送信するステップを含む、請求項1~2のいずれか1項に記載の方法。
【請求項4】
前記アレイの前記第1の次元は、前記アレイの垂直次元を含み、
前記アレイの前記第1の次元に沿って前記非ゼロ重み入力および前記インデックスメタデータを前記M×N個のセルに送信するステップは、前記アレイの上縁から開始して、前記非ゼロ重み入力および前記インデックスメタデータを送信するステップを含む、請求項3に記載の方法。
【請求項5】
前記アレイの前記第1の次元は、前記アレイの水平次元を含み、
前記アレイの前記第1の次元に沿って前記非ゼロ重み入力および前記インデックスメタデータを前記M×N個のセルに送信するステップは、前記アレイの左縁から開始して、前記非ゼロ重み入力および前記インデックスメタデータを送信するステップを含む、請求項3に記載の方法。
【請求項6】
前記インデックスメタデータは、非ゼロ入力値ごとに、絶対固定長の行インデックスを含む、請求項1~5のいずれか1項に記載の方法。
【請求項7】
前記インデックスメタデータは、非ゼロ入力値ごとに、ランレングス符号化行インデックスを含む、請求項1~5のいずれか1項に記載の方法。
【請求項8】
前記インデックスメタデータは、前記アレイの前記M×N個のセルにおける前記非ゼロ入力値のロケーションのビットマップを含む、請求項1~5のいずれか1項に記載の方法。
【請求項9】
前記ハードウェアデバイスは、前記アレイの前記M×N個のセル内のセルごとに比較器をさらに含み、前記比較器は、(i)各非ゼロ入力値の前記インデックスメタデータと、(ii)前記アレイの前記第1の次元に沿って前記M×N個のセルにおけるそのロケーションを示す前記セルのインデックスとを比較するように構成される、請求項1~8のいずれか1項に記載の方法。
【請求項10】
前記複数の入力値は、圧縮スパース列(CSC)行列形式である、請求項1~9のいずれか1項に記載の方法。
【請求項11】
前記ハードウェアデバイスは、前記アレイの前記M×N個のセルにおけるセルごとに先入れ先出し(FIFO)レジスタをさらに備え、それぞれの前記非ゼロ入力値を前記セルにロードするステップは、前記セルに関連付けられた前記FIFOレジスタにおいて、それぞれの前記非ゼロ入力値をエンキューするステップを含む、請求項1~10のいずれか1項に記載の方法。
【請求項12】
特定の非ゼロ入力値を記憶する前記アレイ内のセルごとに、
前記ハードウェア回路を用いて、前記第2の入力行列から第2の入力値を受信するステップと、
前記ハードウェア回路を用いて、前記特定の非ゼロ入力値および前記第2の入力値に基づいて、それぞれの乗算積を決定するステップと
をさらに含む、請求項1~11のいずれか1項に記載の方法。
【請求項13】
前記非ゼロ入力値は、クロックサイクルごとに1セルだけ動く、請求項1~12のいずれか1項に記載の方法。
【請求項14】
前記第1の入力行列は、ゼロ入力値のみを有する列を含むと判断するステップと、
応答して、ゼロ入力値ごとに、前記対応するインデックスメタデータによって定義されるインデックスに符号ビットを付加するステップと
をさらに含む、請求項1~13のいずれか1項に記載の方法。
【請求項15】
1つまたは複数のコンピュータと、前記1つまたは複数のコンピュータに結合され、命令が記憶されているコンピュータ可読媒体とを備えるシステムであって、前記命令は、前記1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに、先行する請求項のいずれかに記載の方法のうちのいずれか1つの方法のそれぞれの動作を実行させる、システム。
【請求項16】
命令が記憶されているコンピュータ可読媒体であって、前記命令は、1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに、先行する請求項のいずれかに記載の方法のうちのいずれか1つの方法のそれぞれの動作を実行させる、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2021年7月6日に出願されている米国出願第17/368,374号の優先権の利益を主張するものであり、この米国出願の全体が、参照により本明細書に組み込まれる。
【背景技術】
【0002】
背景
本明細書は、一般に、回路を用いて行列を処理することに関する。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
本明細書に記載の主題の1つの革新的態様によれば、コンピューティングシステムは、入力行列からの値が行列乗算ユニットにおいてセルのアレイにロードされるレートを増大させることによって、入力行列を行列乗算ユニットにロードするためのスループットを改善することができる。例えば、行列プロセッサは、ニューラルネットワークをトレーニングするか、ニューラルネットワークの推論を計算するか、またはその双方を行う専用ハードウェア回路の一部とすることができる。
【0004】
スループットを改善するための1つの方式は、行列をロードするレートを増大させ、特に、スパース行列をセルのアレイにロードするレートを増大させることである。スパース行列は、「ヌル」値、すなわち、ゼロである値を有する多くの要素を有する行列である。例えば、行列の値の半分超がヌルである場合、この行列をスパースであるとみなすことができる。
【0005】
一般的に、本明細書に記載の本主題の1つの革新的態様は、M×N個のセルを有するアレイのための回路を備えるハードウェアデバイスによって実行されるアクションを含む方法において実現することができる。アクションは、ハードウェア回路において、アレイを用いて第2の入力行列と乗算されることになる第1の入力行列から複数の非ゼロ入力値を受信するステップを含み、第1の入力行列は複数の非ゼロ入力値および複数のゼロ入力値を含む。アクションは、ハードウェア回路において、複数の入力値における非ゼロ入力値の各々について、アレイ内のM×N個のセルのうちのいずれのセルに非ゼロ入力値がロードされるべきであるかを示すインデックスメタデータを受信するステップと、ハードウェア回路を用いて、非ゼロ入力値およびインデックスメタデータをM×N個のセルに送信するステップと、アレイにおけるM×N個のセルのうちの特定のセルにおいて、特定の非ゼロ入力値および特定の非ゼロ入力値の対応するインデックスメタデータを受信するステップと、特定の非ゼロ入力値の対応するインデックスメタデータから、特定の非ゼロ入力値を、乗算を行う際に用いるためにセルに記憶するか、または特定の非ゼロ入力値を別のセルにシフトするかを判断するステップとをさらに含む。MおよびNは1よりも大きい正の整数である。
【0006】
実施態様は、以下の特徴のうちの1つまたは複数を含むことができる。方法は、アレイ内のM×N個のセルのうちの特定のセルにおいて、非ゼロ入力値およびインデックスメタデータをM×N個のセルに送信する前に、ゼロ入力値をセルに自動的にロードするステップをさらに含むことができる。非ゼロ重み入力値およびインデックスメタデータをM×N個のセルに送信するステップは、M×N個のセルを有するアレイの第1の次元に沿って非ゼロ重み入力値を送信するステップを含むことができる。アレイの第1の次元は、アレイの垂直次元を含むことができ、アレイの第1の次元に沿って非ゼロ重み入力およびインデックスメタデータをM×N個のセルに送信するステップは、アレイの上縁から開始して、非ゼロ重み入力およびインデックスメタデータを送信するステップを含むことができる。アレイの第1の次元は、アレイの水平次元を含むことができ、アレイの第1の次元に沿って非ゼロ重み入力およびインデックスメタデータをM×N個のセルに送信するステップは、アレイの左縁から開始して、非ゼロ重み入力およびインデックスメタデータを送信するステップを含むことができる。インデックスメタデータは、非ゼロ入力値ごとに、絶対固定長の行インデックスを含むことができる。インデックスメタデータは、非ゼロ入力値ごとに、ランレングス符号化行インデックスを含むことができる。インデックスメタデータは、アレイのM×N個のセルにおける非ゼロ入力値のロケーションのビットマップを含むことができる。ハードウェアデバイスは、アレイのM×N個のセル内のセルごとに比較器をさらに含むことができ、比較器は、(i)各非ゼロ入力値のインデックスメタデータと、(ii)アレイの第1の次元に沿ってM×N個のセルにおけるそのロケーションを示すセルのインデックスとを比較するように構成される。複数の入力値は、圧縮スパース列(CSC)行列形式であり得る。ハードウェアデバイスは、アレイのM×N個のセルにおけるセルごとに先入れ先出し(FIFO)レジスタをさらに備えることができ、それぞれの非ゼロ入力値をセルにロードするステップは、セルに関連付けられたFIFOレジスタにおいて、それぞれの非ゼロ入力値をエンキューするステップを含むことができる。方法は、特定の非ゼロ入力値を記憶するアレイ内のセルごとに、ハードウェア回路を用いて、第2の入力行列から第2の入力値を受信するステップと、ハードウェア回路を用いて、特定の非ゼロ入力値および第2の入力値に基づいて、それぞれの乗算積を決定するステップとをさらに含むことができる。非ゼロ入力値は、クロックサイクルあたり1セルだけ動くことができる。方法は、第1の入力行列が、ゼロ入力値のみを有する列を含むと判断するステップと、応答して、ゼロ入力値ごとに、対応するインデックスメタデータによって定義されるインデックスに符号ビットを付加するステップとをさらに含むことができる。
【0007】
この態様および他の態様の他の実施態様は、方法のアクションを実施するように構成され、コンピュータストレージデバイス上に符号化される、対応するシステム、装置、およびコンピュータプログラムを含む。1つまたは複数のコンピュータのシステムは、システム上にインストールされるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せによって、動作時に、システムにアクションを実施させるように構成することができる。1つまたは複数のコンピュータプログラムは、命令を有することによって、データ処理装置によって実行されるとき、装置にアクションを実施させるように構成することができる。
【発明の効果】
【0008】
本明細書に記載の主題の特定の実施形態は、以下の利点のうちの1つまたは複数を実現するように実施することができる。本明細書は、従来の行列乗算ユニットよりも大幅に少ないクロックサイクルで、別の行列(またはベクトル)と乗算されることになる入力行列をロードすることができる行列乗算ユニットを記述する。特に、アレイのセルごとに比較器を有する行列乗算ユニットは、ゼロ入力値を含む得られた全ての入力値ではなく、非ゼロ入力値(すなわち、入力行列からの非ゼロ値を有する要素)のみをアレイのそれぞれのセルにロードすることができる。次に、専用ハードウェア回路は、行列乗算ユニットの外部で別個の処理ユニットにおいてではなく、または行列乗算ユニットの境界においてではなく、行列乗算ユニット内部で行列を展開することによって、入力値を行列乗算ユニットのアレイに効率的にロードし、それによって、ハードウェア回路がより効率的に行列演算を行うことを可能にすることができる。これにより、例えば、外部メモリユニットを各セルに結合する入力値ロード配線を通じてアレイのそれぞれのセルに入力値をロードするのに必要な合計クロックサイクル数の観点で、入力値を行列乗算ユニットにロードするのに必要な時間を節約することができる。これにより、ハードウェア回路のメモリ容量、帯域幅または双方のより良好な利用を可能にすることもでき、これにより性能がさらに改善する。
【0009】
本明細書の主題の1つまたは複数の実施形態の詳細が、添付の図面および以下の説明において説明される。主題の他の特徴、態様、および利点が、説明、図面、および特許請求の範囲から明らかとなるであろう。
【図面の簡単な説明】
【0010】
【
図1】行列計算ユニットを含む例示的なアーキテクチャを示す図である。
【
図2】行列計算ユニットの2次元アレイ内部のセルの例示的なアーキテクチャを示す図である。
【
図3】異なるインデックスメタデータの例示的な説明を示す図である。
【
図4】行列を行列計算ユニットにロードするためのプロセスの例を示す流れ図である。
【
図5】行列計算ユニットにロードされることになる行列の前処理の例示的な説明を示す図である。
【
図6A】行列計算ユニットへの行列のロードの例示的な説明を示す図である。
【
図6B】行列計算ユニットへの行列のロードの例示的な説明を示す図である。
【発明を実施するための形態】
【0011】
様々な図面における類似の参照番号および名称は、類似の要素を指す。
詳細な説明
一般的に、データは行列の形態で表すことができ、コンピューティングシステムは、行列演算を実行することによってデータを操作することができる。行列は1次元ベクトルまたは多次元行列とすることができる。行列は、データベーステーブルまたは変数などのデータ構造によって表すことができる。スパース行列は、「ヌル」値、すなわち、ゼロである値を有する多くの要素を有する行列である。例えば、行列の値の半分超がヌルである場合、この行列をスパースであるとみなすことができる。
【0012】
図1は、行列計算ユニットを含む例示的なアーキテクチャ100を示す。行列計算ユニットは2次元アレイ106である。アレイ106は、複数のセル、例えば、セル114、116および118を含む。いくつかの実施態様において、アレイ106の第1の次元は、セルの行に対応する垂直次元であり、アレイ106の第2の次元は、セルの列に対応する水平次元である。アレイ106は、列よりも多くの行、行よりも多くの列、または等しい数の行および列を有することができる。
【0013】
いくつかの実施態様において、行列計算ユニットは、例えば、セルの2次元アレイ106の各セル内に、データを処理するように構成される追加の回路を含むことができる。
【0014】
1つの例として、行列計算ユニットは、ニューラルネットワークをトレーニングするか、ニューラルネットワークの推論を計算するか、またはその双方を行う専用ハードウェア回路の一部とすることができ、行列計算ユニットは、2つの行列間の行列乗算演算を行う行列乗算ユニットとすることができる。すなわち、行列計算ユニットを用いて、アレイ106のセル内の乗算および加算回路を用いることによって、ならびに例えば、スカラ処理ユニットおよびベクトル処理ユニットに加えて、関連するスカラメモリおよびベクトルメモリを含むことができるハードウェア回路の追加の構成要素と協働することによって、ニューラルネットワークにおいて数学演算、例えば乗算および加算を実行することができる。
【0015】
別の例として、行列計算ユニットは、複数のレーンのうちの異なるレーン間をデータが動くように構成されるクロスレーンユニットとすることができる。本明細書において用いられるとき、レーンは一般的に、ハードウェア回路のコンピューティング/データ処理リソースを含むことができる例示的なハードウェア回路のエリア、セクションまたは部分に対応する。例えば、クロスレーンユニットは、転置ユニット、簡約ユニットまたは置換ユニットとすることができる。転置ユニットは、行列の転置演算を実行することができる。すなわち、転置ユニットは、(例えば、所与の行に沿った)1つの次元における数を取り込むことができ、これらを、レーンを横切る数が(例えば、所与の列に沿った)他の次元の数と転置されるように転置する。簡約または置換ユニットは、置換、レーン回転、回転置換、レーン簡約、置換レーン簡約、セグメント化置換レーン簡約などの様々な演算をサポートすることによってクロスレーン通信の問題に対処することができる。
【0016】
別の例として、行列計算ユニットは、平方根、対数および逆数などの演算を、テーブル駆動関数近似を通じて行う算術ユニットとすることができる。例えば、算術ユニットは、マルチエントリ、マルチポートのテーブルルックアップ、例えばクロックサイクルあたり128エントリ、128ポートのテーブルルックアップを実行することができる。加えて、この例において、算術ユニットは、ゼロホット符号化を用いることによって、より大きなテーブルにブリッジすることができ、算術ユニットにロードされる入力値を再生することによってさらなるポートにブリッジすることができる。ゼロホット符号化は、ゼロの初期状態ベクトルを用いたワンホット符号化に対する拡張であり、例えば、[000;001;010;100]である。
【0017】
さらに別の例として、行列計算ユニットは、パディングデータを圧縮するかまたはテンソルに投入し(inject)、それによって、効率な行列計算を依然としてサポートしながら追加のストレージ節減を提供することができるテンソルユニットとすることができる。テンソルは、通常、アレイの次元に対応する特定の順序を有する数値または他の値、例えば文字列の多次元アレイを指す。例えば、スカラ値は0次テンソルであり、数値のベクトルは1次テンソルであり、行列は2次テンソルである。
【0018】
スカラまたはベクトル処理ユニットおよび拡張ベクトルユニットなどのこれらの例示的なハードウェアコンポーネントの機能に関するさらなる詳細は、2018年5月17日に出願され、2020年4月14日に付与されている、「PERFORMING MATRIX MULTIPLICATION IN HARDWARE」と題する米国特許第10,621,269B2号に見ることができ、この特許は参照により本明細書に組み込まれる。
【0019】
通常、行列-行列乗算またはベクトル-行列乗算などの一連の行列演算を開始する前に、行列の少なくとも一部分が行列計算ユニットに予めロードされる必要がある。上記の例において、行列計算ユニットは、入力値が行列計算ユニットにロードされるレートを増大させ、それによって、ハードウェア回路がより効率的に行列計算、例えばニューラルネットワークの処理のための計算を実行することを可能にすることによってハードウェア回路にわたるスループットを改善することができる。
【0020】
行列計算ユニットに行列をロードすることは、通常、例えばホストインタフェース制御信号に従って、アレイ106全体にわたる行列からの入力値を、1つの次元に沿って、例えば左から右、または上から下にシフトすることを伴う。例えば、1つのクロックサイクルにわたって、セル114における入力値は、セル114の右にあるセル116のレジスタにシフトすることができる。同様に、セル114における入力値は、セル114の下にあるセル118のレジスタにシフトすることができる。
【0021】
示されるように、セルの2次元アレイ106の各セルは、比較器ユニット、例えば、比較器ユニット115、117または119と関連付けられる。各セルは、例えば配線を用いて、関連する比較器ユニットに接続することができる。比較器ユニットは、2つの入力される数値、例えばデジタルまたはバイナリ数を比較して、1つの入力される数値が他方の入力される数値に等しいか、その数値未満であるか、その数値を上回るかを判断するためのハードウェア回路を含む。例えば、比較器ユニット、例えば比較器ユニット115は、2つのマルチビットバイナリ数、例えば、4ビット、7ビットまたは8ビットバイナリ数間の等しさを判断するように構成されるマルチビットバイナリ比較器とすることができる。以下にさらに説明されるように、行列計算ユニットは、比較器ユニットを利用して、例えば行列演算が開始する前に、セルのアレイ106にデータをロードする効率を向上させる。
【0022】
いくつかの実施態様において、セルの2次元アレイ106の各セルにおけるレジスタは、先入れ先出し(FIFO)レジスタとすることができ、それぞれの非ゼロ入力値をセルにロードすることは、セルに関連付けられたFIFOレジスタにおいて、それぞれの非ゼロ入力値をエンキューすることを含む。同様に、それぞれの非ゼロ入力値をセルからアンロードすることは、セルに関連付けられたFIFOレジスタからそれぞれの非ゼロ入力値をデキューすることを含む。
【0023】
いくつかの実施態様において、セルの2次元アレイ106の各セルは、各々が異なる入力値、例えば、重み入力または起動(activation)入力値を記憶するように動作可能な複数のレジスタを含むことができる。同じセルにおけるレジスタは、同じタイプ、例えばFIFOレジスタ、または異なるタイプとすることができる。
【0024】
行列は、行列計算ユニットに接続されているバスによってソースバスを介して行列計算ユニットに送達することができ、次に行列演算が開始することができるようにレジスタにロードすることができる。例えば、行列は、回路から離れた場所にある場合があるシステムのメモリユニットまたはメモリバッファから送達することができる。
【0025】
いくつかの実施態様において、行列は、通常、行列に関する情報を記憶するのに線形(すなわち1次元)アレイを用いる圧縮スパース行(CSR)フォーマットまたは圧縮スパース列(CSC)フォーマットなどの圧縮フォーマットにおいて受信される。そのような圧縮フォーマットにおいて表されるとき、行列を記述するデータは、通常、行列内の非ゼロ要素(またはエントリ)(以下で「非ゼロ入力値」として参照される)ごとに、元の行列における非ゼロ入力値の対応する位置を示す関連インデックスメタデータを含む。このインデックスメタデータは、セルの2次元アレイのいずれのセルに非ゼロ入力値がロードされるべきかをさらに示す。
【0026】
Aを、非ゼロ入力値を有するm×nの行列とする。Av、AcおよびArを、それぞれ長さe、eおよび(m+1)の3つの1次元アレイとする。CSRフォーマットにおいて、Aは<Av、Ac、Ar>として符号化され、ここで、
値アレイAvは、Aにおける全ての非ゼロ入力値の値を行優先順で保持し、
列アレイAcは、Aにおける全ての非ゼロ入力値の列を行優先順で保持し、
行インデックスアレイArは、Aにおける各行の第1の非ゼロ入力値のAvにおけるインデックスを保持し、Arアレイにおける最後の要素は、Avアレイにおける要素の総数である。
【0027】
例えば、以下の4×4行列
【0028】
【0029】
は、CSRにおいて、<Av=[1,0.5,0.5,0.5,0.5,1]、Ac=[3,0,3,0,1,2]、Ar=[0,1,3,5,6]>として符号化することができる。
【0030】
この例および以下に説明する他の例において、行および列はインデックス付けされ、インデックスは0から開始し、列を左から右に進み、行を行列の上から下に進んで増大する。このため、上記の行列Aは、0から3に進む行および列のインデックスを有する。
【0031】
行列は、多くの場合にCSR「転置」とみなされる、圧縮スパース列(CSC)フォーマットにおいて符号化することもできる。Aを、非ゼロ入力値を有するm×nのスパース行列とする。A’v、A’cおよびA’rを、それぞれ長さe、eおよび(m+1)の3つの1次元アレイとする。CSCフォーマットにおいて、Aは<A’v,A’r,A’c>として符号化され、ここで、
値アレイA’vは、Aにおける全ての非ゼロ入力値の値を列優先順で保持し、
行アレイA’rは、Aにおける全ての非ゼロ入力値の行を列優先順で保持し、
列インデックスアレイA’cは、Aにおける各列の第1の非ゼロ入力値のA’vにおけるインデックスを保持し、A’cアレイにおける最後の要素は、A’vアレイにおける要素の総数である。
【0032】
上記で示したのと同じ4×4行列
【0033】
【0034】
は、CSCにおいて、<A′v=[0.5,0.5,0.5,1,1,0.5]、A′r=[1,2,2,3,0,1]、A′c=[0,2,3,4,6]>として符号化することができる。
【0035】
このため、行列のCSRまたはCSC表現に含まれる行および列インデックス情報は、複数の入力値における非ゼロ入力値ごとに、セルの2次元アレイにおけるいずれのセルに非ゼロ入力値がロードされるべきかを示す行列の関連メタデータに対応する。
【0036】
行列に関連付けられたインデックスメタデータは、システムによって、行列と共に予め生成および受信することができるか、またはシステムの異なるコンポーネント、例えばメタデータ生成ユニットによって、受信行列からオンザフライで生成することができる。同様に、インデックスメタデータは、追加のバス(または 配線)を介して、メモリユニットまたはメモリバッファから行列計算ユニットに送達することができ、アレイ106全体にわたる行列からの入力値と共に、1つの次元に沿って、例えば左から右、または上から下にシフトすることができる。例えば、1つのクロックサイクルにわたって、セル114における入力値を記述するインデックスメタデータは、セルの114の右にあるセル116に関連付けられた比較器ユニット117にシフトすることができる。同様に、セル114の入力値を記述するインデックスメタデータは、セル114の下のセル118に関連付けられた比較器ユニット119にシフトすることができる。例示的なインデックスメタデータ、およびインデックスメタデータを用いることによる行列計算ユニットへの行列のロードが以下にさらに説明される。
【0037】
図1に示す例において、行列計算ユニットは行列乗算ユニットであり、ここで、入力値フェッチャインタフェース108は、第1の入力行列の入力値、および第1の入力行列の関連インデックスメタデータをアレイ106の列に送信し、値ローダ112は、第2の入力行列の入力値および第2の入力行列の関連インデックスメタデータをアレイ106の行に送信する。しかしながら、いくつかの他の実施態様において、第1の入力行列の入力値は、行に転送され、第2の入力行列の入力値は、アレイ106の列に転送される。
【0038】
例えば、第1の入力行列の入力値は、重み入力値に対応することができ、第2の入力行列の入力値は、入力起動値に対応することができ、ここで、重み入力値および入力起動値は、推論を計算するのに用いることができるニューラルネットワークの複数のレイヤのうちの1つのレイヤに関連付けられる。
【0039】
例えば、入力を所与として、ニューラルネットワークは、入力の推論を計算することができる。ニューラルネットワークは、ニューラルネットワークのレイヤの各々を通じて入力を処理することによってこの推論を計算する。特に、ニューラルネットワークのレイヤは、各々がそれぞれの重みのセットを有してシーケンス内に配列される。各レイヤは、入力を受信し、レイヤの重みのセットに従って入力を処理して出力を生成する。したがって、受信入力から推論を計算するために、ニューラルネットワークは入力を受信し、シーケンス内のニューラルネットワークレイヤの各々を通じてこれを処理して推論を生成する。ここで、1つのニューラルネットワークレイヤからの出力は、次のニューラルネットワークレイヤへの入力として提供される。ニューラルネットワークレイヤへのデータ入力、例えばニューラルネットワークへの入力、またはシーケンスにおけるこのレイヤの下のレイヤの、ニューラルネットワークレイヤへの出力のいずれかは、レイヤへの起動入力と呼ぶことができる。
【0040】
図1の入力値フェッチャインタフェース108は、入力値、および関連インデックスメタデータを、メモリユニット、例えばダイナミックメモリから受信することができる。入力値フェッチャインタフェース108は、対応する入力値を、例えばデータ配線を用いることによって、アレイ106の別個の最上セルに送信することができる。入力値フェッチャインタフェース108は、関連インデックスメタデータを、例えば追加の配線を用いることによってまたは同じデータ配線を再利用することによって、アレイ106の別個の最上セルに送信することもできる。最上セルは、アレイ106の最上行に沿ったセルとすることができる。例えば、入力値フェッチャインタフェース208は、入力値をセル114および116に送信することができる。
【0041】
図1の値ローダ112は、入力値、および関連インデックスメタデータを、メモリバッファ、例えば統合バッファから受信することができる。各値ローダ112は、対応する入力値を、アレイ106の別個の最左セルに送信することができる。最左セルは、アレイ106の最左列に沿ったセルとすることができる。例えば、セル114に対応する値ローダ112は、入力値をセル114に送信することができる。
【0042】
しかしながら、行列のサイズが大きすぎるとき、行列計算ユニットに行列全体(すなわち、行列の全ての入力値)を投入するのにかかる時間量が長くなり得る。このため、行列を行列計算ユニットに効率的に投入するために、すなわち、行列計算ユニットの上の投入ポートが行列を投入するために動作しているサイクル数を低減するために、行列計算ユニットは、比較器ユニットを利用して、例えば、行列計算ユニットのセルの2次元アレイ106の特定のセルにおいて、特定のセルにシフトされる入力値に関連付けられているインデックスメタデータが、2次元アレイにおける特定のセルのロケーションインデックスに一致するかどうかを判断する。肯定判断に応じて、次に行列計算ユニットは、行列演算の実行において後に用いるための特定のセルのレジスタに入力値を記憶する。代替的に、否定判断に応じて、システムは、入力値を記憶するのではなく、特定のセルの隣接セルにシフトする。
【0043】
このようにして、行列全体を投入するのに要するクロックサイクル数が、(正方)行列の次元に概ね等しい数から、最も多くの非ゼロ値を有する行列の列(または行)における非ゼロ値の数に概ね等しい数まで減少する。行列がスパース行列である場合、要求されるクロックサイクル数は、1桁以上減少することができる。また、これにより、密な行列、すなわち、ゼロ入力値よりも非ゼロ入力値が多い行列を投入することがより容易になり得る。密な行列の投入のために同じメカニズムを用いるために、上縁を通過する各入力値にインデックスを付加するために、上縁にカウンタを配置することができる。
【0044】
図2は、行列計算ユニットの2次元アレイ内部のセルの例示的なアーキテクチャ200を示す。
図2の例において、行列計算ユニットは、行列乗算演算、例えば128要素ベクトルと128×128行列との乗算を実行するように配線接続されている2次元アレイを有する行列乗算ユニットとして示される。
【0045】
セルは、起動入力を記憶する起動レジスタ206を含むことができる。起動レジスタは、アレイ内のセルの位置に依拠して、左の隣接セル、すなわち、所与のセルの左に位置する隣接セルから、またはメモリバッファから、起動入力を受信することができる。セルは、2つの重み経路レジスタ212A~212Bを含むことができ、各々は、重み入力を受信し、この重み入力を重みレジスタ202に転送することができる。次に、重みレジスタ202は、制御信号に基づいて重み入力を記憶することができる。例えば、重み入力は、アレイ内のセルの位置に依拠して、上の隣接セルから、または重みフェッチャインタフェースから、重み経路レジスタにシフトすることができる。セルは、サム入力レジスタ(sum in register)204も含むことができる。サム入力レジスタ204は、上の隣接セルからの累積値を記憶することができる。重みレジスタ202、サム入力レジスタ204、起動レジスタ206および重み経路レジスタ212A~212Bは、特定のフォーマットの浮動小数点値などの特定のサイズの値を記憶するように構成されるレジスタとすることができる。
【0046】
乗算回路208を用いて、重みレジスタ202からの重み入力を、起動レジスタ206からの起動入力と乗算することができる。乗算回路208は積を加算回路210に出力することができる。いくつかの実施態様において、乗算回路208の入力および出力値は、異なるサイズおよび/または形式とすることができる。
【0047】
加算回路210は、積と、サム入力レジスタ204からの累積値とを合計し、新たな累積値を生成することができる。次に、加算回路210は、新たな累積値を、下の隣接セルに位置する別のサム入力レジスタに送信することができる。新たな累積値は、下の隣接セルにおける加算のためのオペランドとして用いることができる。加算回路210は、サム入力レジスタ204からの値を受理し、サム入力レジスタ204からの値を、乗算回路208からの積と合計することなく、サム入力レジスタ204からの値を下の隣接セルに送信することもできる。いくつかの実施態様において、加算回路210の入力値は、異なるサイズおよび/または形式とすることができる。いくつかの実施態様において、加算回路210のいくつかの入力および出力値は、異なるサイズおよび/または形式とすることができる。
【0048】
また、セルは、重み入力および起動入力を、処理のために隣接セルにシフトすることもできる。例えば、重み経路レジスタ212Bは、重み入力を、下の隣接セルにおける別の重みレジスタに送信することができる。起動レジスタ206は、起動入力を、右の隣接セルにおける別の起動レジスタに送信することができる。したがって、重み入力および起動入力の双方を、後続のクロックサイクルにおけるアレイ内の他のセルによって再利用することができる。
【0049】
セルは比較器ユニット214も含むことに留意されたい。比較器ユニットは、2つの入力値間の等しさを判断することができる。例えば、比較器ユニット214は、重み経路レジスタ212Aから転送される重み入力に関連付けられたインデックスメタデータによって定義されるインデックス216を、2次元アレイ内のセルのロケーションインデックスに対し比較することができる。別の例として、比較器ユニット214は、重み経路レジスタ212Bから転送される重み入力に関連付けられているインデックスメタデータによって定義されるインデックス218を、2次元アレイ内のセルのロケーションインデックスに対し比較することができる。比較器ユニットは、例えば配線を用いることによって、比較の結果に基づいて、重みレジスタ202に制御信号を送信することができる。特に、比較器ユニット214によって生成される制御信号は、セルによる重み入力のハンドリングを調整することができ、すなわち、各クロックサイクルにおいて、セルが、乗算回路208による演算を受けるために重みレジスタ202において重み入力を記憶するべきか(等しい場合)、または重み入力を隣接セルにシフトするべきか(等しくない場合)を調整する。
【0050】
インデックスメタデータは、通常、多岐にわたる方式のうちの任意のもので作成および維持することができる。インデックスメタデータのいくつかの例が次に説明される。
【0051】
図3は、異なるインデックスメタデータの例示的な説明を示す。
図3の例における元の行列は、複数の非ゼロ入力値および複数のゼロ入力値を有する。複数の非ゼロ入力値および複数のゼロ入力値の各々は、それぞれ302および304に示すように、元の行列における別個のロケーションに存在する。
【0052】
1つの例において、306に示すように、インデックスメタデータはビットマップインデックスを含むことができる。例えば、インデックスメタデータは、元の行列を参照して、非ゼロ入力値のそれぞれのロケーションのビットマップを含むことができる。
【0053】
別の例において、308に示すように、インデックスメタデータは絶対固定長の行インデックスを含むことができる。例えば、絶対固定長のインデックスは、行列の非ゼロ入力値ごとの絶対固定長の列または行インデックスとすることができ、すなわち元の行列を参照することができる。
【0054】
別の例において、310に示すように、インデックスメタデータはランレングス符号化インデックスを含むことができる。例えば、ランレングス符号化インデックスは、行列の非ゼロ入力値ごとのランレングス符号化列または行インデックスとすることができ、すなわち元の行列を参照することができる。ランレングス符号化は、可変長データフィールドを用い、それによってストレージの節減の増大をもたらすストアインデックスメタデータを可能にする技術である。
【0055】
これらの例において、インデックスメタデータは、通常、セルの2次元アレイのいずれのセルに各非ゼロ入力値がロードされるべきかを示すかまたは他の形で指定する。加えて、インデックスメタデータは、行列に含まれる入力値が非ゼロ値であるかどうかをさらに示すことができる。例えば、インデックスメタデータは、各ゼロ入力値の元の符号なしインデックスに付加される追加の符号ビットを含むことができ、それによって、負のインデックスはアレイ内の任意のセルのロケーションインデックスに決して一致しないため、ゼロ入力値はアレイにロードされない。
【0056】
行列を行列計算ユニットの2次元アレイにロードする一方で、行列の各非ゼロ入力値に関連付けられたインデックスメタデータと、2次元アレイの特定のセルのロケーションインデックスとの間に一致があるかどうかを判断するために比較器ユニットを利用することによって、行列計算ユニットは、任意のゼロ入力値を含む行列全体を行列計算ユニットにロードすることがもはや必要とされないため、ロードにかかる時間量を低減させることができる。代わりに、行列内の非ゼロ入力値の比較的小さなセットのみがロードされればよい。この行列ローディングプロセスは、以下により詳細に説明される。
【0057】
図4は、行列を行列計算ユニットにロードするためのプロセスの例を示す流れ
図400である。便宜上、方法400は、1つまたは複数の回路を有するシステムに関して説明される。例えば、
図1を参照すると、システムは、M個の行およびN個の列内に物理的にまたは論理的に配列される複数のセルを含む2次元アレイとして構成される行列計算ユニットを含むことができ、ここで、MおよびNは1よりも大きい正の整数である。
【0058】
システムは、ハードウェア回路において、アレイを用いて第2の入力行列と乗算されることになる第1の入力行列から複数の非ゼロ入力値を受信する(402)。第1の入力行列は、複数の非ゼロ入力値および複数のゼロ入力値を含む行列とすることができる。同様に複数の非ゼロ入力値および複数のゼロ入力値を含むことができる第2の入力行列は、第1の行列と同じかまたは異なる次元を有することができる。
【0059】
システムは、ハードウェア回路において、複数の入力値における非ゼロ入力値の各々について、アレイ内のM×N個のセルのうちのいずれのセルに非ゼロ入力値がロードされるべきであるかを示すインデックスメタデータを受信する(404)。インデックスメタデータは、ほんの一部の例を挙げると、絶対固定長行インデックス、ランレングス符号化行インデックスまたはビットマップインデックスの形態で表すことができる。換言すれば、システムは、絶対固定長行インデックス、ランレングス符号化行インデックス、または各々が元の行列を参照して非ゼロ入力値のロケーション情報を指定するビットマップインデックスを受信することができる。いくつかの実施態様において、システムは、例えば、システムのメモリユニットまたはメモリバッファから、第1の入力行列と共にインデックスメタデータを受信することができる。例えば、第1の入力行列は、圧縮スパース行(CSR)形式または圧縮スパース列(CSC)形式で受信することができ、ここで、第1の入力行列における非ゼロ入力値の行および列インデックス情報は、関連付けられたインデックスメタデータに対応する。
【0060】
他の実施態様において、システムは、受信した第1の入力行列からインデックスメタデータをオンザフライで生成することができる。すなわち、システムは、例えば、システムのメタデータ生成ユニットを用いることによって第1の入力行列を、行列計算ユニットにロードする前に前処理し、これを用いて乗算および加算などの数学演算を実行する。
【0061】
図5は、行列計算ユニットにロードされることになる行列の前処理の例示的な説明を示す。
【0062】
示すように、第1の行列は、サイズ6×6の行列510である。行列510は、複数の非ゼロ入力値、例えば入力値522、および複数のゼロ入力値、例えば入力値526を有する。
【0063】
行列を前処理することは、まず、入力行列510から全てのゼロ入力値、例えば入力値522を消去し、次に、1つの次元、例えば垂直次元に沿った入力行列510の残りの入力値、例えば入力値522を圧縮することを含む。垂直次元に沿って圧縮するために、システムは対応する行インデックスラベルを各非ゼロ入力値に割り当て、次に、垂直次元に沿って、すなわち各列において非ゼロ入力値を圧縮することができる。例えば、第1の(最左)列において、システムは、「0」ラベル532を入力値522に割り当て、「3」ラベル542を入力値532に割り当て、入力値522および532が行列の第1の(最上)列および第4の列にそれぞれ位置することを示すことができ、次にラベルデータを第1の列の下のリストに圧縮することができる。このようにして、システムは、例示的な
図550に示すように圧縮スパース列(CSC)形式で元の行列510の表現を得る。
【0064】
システムは、ハードウェア回路を用いて、非ゼロ入力値およびインデックスメタデータをM×N個のセルのアレイに送信する(406)。
【0065】
通常、システムは、非ゼロ入力値およびインデックスメタデータを、アレイの1つの次元に沿って、例えば左から右に、または上から下に送信する。例えば、CSC表現において符号化される行列をロードするとき、システムは、対応する入力値をアレイの別個の最上セル、すなわち、アレイの最上行に沿ったセルに送信することができる。別の例として、CSR表現において符号化される行列をロードするとき、システムは、対応する入力値をアレイの別個の最左セル、すなわち、アレイの最左列に沿ったセルに送信することができる。
【0066】
図6A~
図6Bは、セルの6×6のアレイを有する行列計算ユニットへの行列のロードの例示的な説明を示す。
図5を参照して上記で説明したように、行列の非ゼロ入力値および関連行インデックスメタデータは、行列演算が開始する前にアレイの別個の列におけるセルに送信することができる。さらに、各列内の非ゼロ入力値の投入は、他の列と独立することができる。すなわち、入力値を列に沿って下方にセルに送信する場合、列間通信は必要とされない。したがって、別個の列にわたる入力値の投入は、同時に開始する必要がなく、これらは行列計算ユニットの上縁において入力値の到達順でずらすことができ、それによって、柔軟なタイミング、例えばシストリックアレイタイミングを容易にすることができる。
【0067】
例示として、610において、システムは、2つの非ゼロ入力値の第1のセットと、それらの関連付けられた行インデックス「0」および「3」とを含むデータをアレイの第1の列に送信する。システムは、2つの非ゼロ入力値の第2のセットと、それらの関連付けられた行インデックス「1」および「4」とを含むデータをアレイの第2の列に送信する。システムは、単一の非ゼロ入力値を含む第3のセットと、その関連付けられた行インデックス「4」とを含むデータをアレイの第3の列に送信する。システムは、アレイの第4の列にデータを送信しない。システムは、単一の非ゼロ入力値を各々が含む第5および第6のセットと、その関連付けられた行インデックス「2」とを含むデータを、それぞれアレイの第5の列および第6の列に送信する。全てのクロックサイクルの後、非ゼロ入力値およびそれらの関連付けられた行インデックスメタデータは、1つのセルだけ、および1つの次元において、例えば上から下にシフトすることができる。入力値がアレイの列に送信されるシステムについて説明したが、いくつかの実施態様において入力値はアレイの行に送信される。
【0068】
次に、アレイ内のM×N個のセルのうちのいくつかまたは全ての各々(以下で「特定のセル」と呼ばれる)において、システムは、特定のセルに関連付けられた比較器ユニットを利用して、特定の非ゼロ入力値が特定のセルに記憶されるべきであるか、または特定のセルの隣接セルにシフトされるべきであるかを判断する。いくつかの実施態様において、システムは、これをアレイ内の全てのM×N個のセルの各々において行うことができる。しかしながら、他の実施態様において、システムは、宛先にまだ到達していない任意の入力値が最下行に沿ってセル内にロードされることになると仮定して、アレイ内のM×N個のセルのうちのいくつかにおいて、例えばアレイ内の最下セル以外の全てのセルの各々においてのみこれを行うことができる。
【0069】
より詳細には、システムは、アレイ内のM×N個のセルのうちの特定のセルにおいて、特定の非ゼロ入力値と、その特定の非ゼロ入力値のための対応するインデックスメタデータとを受信する(408)。
【0070】
上記で説明したように、特定のセルは、入力値を記憶するレジスタ、例えばFIFOレジスタを含むことができる。レジスタは、アレイ内のセルの位置に依拠して、上の隣接セルから、または入力値フェッチャインタフェースから、入力値を受信することができる。代替的に、レジスタは、ここでもまたアレイ内のセルの位置に依拠して、左の隣接セル、すなわち、特定のセルの左に位置する隣接セルから、または値ローダから、入力値を受信することができる。
【0071】
システムは、アレイ内のM×N個のセルのうちの特定のセルにおいて、特定の非ゼロ入力値の対応するインデックスメタデータから、特定の非ゼロ入力値を、乗算を行う際に用いるためにセルに記憶するか、または特定の非ゼロ入力値を別のセルにシフトするかを判断する(410)。
【0072】
例えば、第1のクロックサイクル(「クロックサイクル0」)620において、アレイは左上セル内に「3」を有する。「3」は、セル内に記憶される行インデックス「3」をラベル付けされている非ゼロ入力値を表す。アレイは、それぞれアレイの第1の(最上)行に沿った第2、第3、第5および第6のセルに記憶されている、「4」、「4」、「2」および「2」をラベル付けされている非ゼロ入力値も有する。システムは、非ゼロ入力値に関連付けられた対応するインデックスメタデータから、非ゼロ入力値のいずれも宛先セルに達していないと判断する。例えば、左上セルにおいて、システムは、セルにおける比較器を利用して、左上セルの行インデックス「0」に対し非ゼロ入力値に関連付けられた行インデックス「3」を比較し、インデックスが互いに等しくないと判断する。
【0073】
次のクロックサイクル(「クロックサイクル1」)630において、行インデックス「3」、「4」、「4」、「2」および「2」をラベル付けされている非ゼロ入力値は第1の行内のセルの下のそれぞれのセルまでシフトダウンされ、インデックス「0」をラベル付けされている行列からの別の非ゼロ入力値は、左上セル内にロードされ、インデックス「1」をラベル付けされている行列からの非ゼロ入力値は第2の列において最上セルにロードされる。
【0074】
左上セル632において、システムは、行インデックス「0」をラベル付けされている非ゼロ入力値が宛先セルに達したと判断し、これはすなわち、セル632において比較器ユニットを用いて行インデックス、すなわち、第1の行を示す「0」と、セル632がアレイの第1の行にあることを示す左上セル632のロケーションインデックスとを比較し、一致があると判断した後である。
【0075】
第3のクロックサイクル(「クロックサイクル2」)640において、まだ適所にない残りの非ゼロ入力値は再びシフトされる。まだ適所にない残りの非ゼロ入力値の各々について、アレイ内のいずれのセルに非ゼロ入力値がロードされるべきかを示す関連メタデータも非ゼロ入力値と共にシフトされる。第1の列において、行インデックス「3」をラベル付けされている非ゼロ入力値は、前のサイクルにおいて記憶されていた場所から第3のセルまでシフトダウンされるのに対し、行インデックス「0」をラベル付けされている非ゼロ入力値は、前のサイクルにおいて記憶されていた場所に留まる。第2の列において、行インデックス「1」および「4」をラベル付けされている非ゼロ入力値は、それぞれ、前のサイクルにおいて記憶されていた場所から1セルだけシフトダウンされる。同様に、第3、第5および第6の列において、行インデックス「4」、「2」および「2」をラベル付けされている非ゼロ入力値は、それぞれ第3の行に沿ってセルにシフトダウンされる。
【0076】
セル642において、システムは、「1」をラベル付けされている非ゼロ入力値が宛先セルに達したと判断し、これはすなわち、セルにおいて比較器ユニットを用いて対応する行インデックス、すなわち、第2の行を示す「1」と、セル642がアレイの第2の行にあることを示すセル642のロケーションインデックスとを比較し、一致があると判断した後である。同様に、セル644および646において、システムは、行インデックス「2」をラベル付けされている入力値がそれぞれ宛先セルに到達したと判断する。
【0077】
第4のクロックサイクル(「クロックサイクル3」)650において、まだ適所にない非ゼロ入力値は再びシフトされる。第1の列において、行インデックス「3」をラベル付けされている非ゼロ入力値は、前のサイクルにおいて記憶されていた場所から第4のセルまで再びシフトダウンされる。第2の列において、行インデックス「4」をラベル付けされている非ゼロ入力値は、前のサイクルにおいて記憶されていた場所から第4のセルまでシフトダウンされるのに対し、行インデックス「1」をラベル付けされている非ゼロ入力値は、前のサイクルにおいて記憶されていた場所に留まる。第3の列において、行インデックス「4」をラベル付けされている非ゼロ入力値は、第4のセルまで1セルだけシフトダウンされる。第5および第6の列において、行インデックス「2」をラベル付けされている非ゼロ入力値は、前のサイクルにおいて記憶されていた場所に留まる。
【0078】
セル652において、システムは、行インデックス「3」をラベル付けされている入力値が宛先セルに達したと判断し、これはすなわち、セルにおいて比較器ユニットを用いて対応する行インデックス、すなわち、第4の行を示す「3」と、セル652がアレイの第4の行にあることを示すセル652のロケーションインデックスとを比較し、一致があると判断した後である。
【0079】
第5のクロックサイクル(「クロックサイクル4」)660において、まだ適所にない非ゼロ入力値は再びシフトされる。第2および第3の列において、行インデックス「4」をラベル付けされている入力値は、前のサイクルにおいて記憶されていた場所から再び1セルだけシフトダウンされる。
【0080】
セル662および664において、システムは、例えば、セル662において比較器ユニットを用いて対応する行インデックス、すなわち、第5の行を示す「4」と、セル662がアレイの第5の行にあることを示すセル662のロケーションインデックスとを比較し、一致があると判断した後、行インデックス「4」をラベル付けされている入力値が宛先セルに達したと判断する。
【0081】
特に、5つのクロックサイクル後、
図6Bの例示的な
図660に示すように、行列からの全ての非ゼロ入力値は、ここで、セルの例示的な6×6のアレイ内の宛先セルに到達した。
【0082】
いくつかの実施態様において、アレイ内の各セルは、第1の入力行列がアレイ内にロードされる前に、ゼロ(またはヌル)のデフォルト値を有するように初期化することができる。非ゼロ入力値が適所にあると、すなわち、アレイが第1の入力行列に対し動作を始める際、非ゼロ入力値を有しないセルの各々が、例えば、いずれの非ゼロ入力値に関連付けられたインデックスもロケーションインデックスに明示的に一致していないことを指定する、セル内に記憶されている制御信号に基づいて、ゼロ入力値がロードされているかのように動作することができる。
【0083】
いくつかの実施態様において、第1の入力行列を行列計算ユニットにロードする間、またはロードした後、システムは、類似のまたは異なる方式で、第2の入力行列を行列計算ユニットにロードすることができる。行列計算ユニットの特定のセルにおいて、例えば制御信号を介して、第1および第2の入力行列からの第1および第2の双方の入力値が適所にあると判断されると、システムは、セル内に記憶されている第1および第2の入力値を用いて、例えばセル内の乗算または加算回路を用いることによって、計算の実行に進むことができる。計算を実行するとき、システムは、第1の入力行列からの非ゼロ入力値のみを用いることができる。
【0084】
図6A~
図6Bの例は、複数の連続クロックサイクルにわたって同じ行列を行列計算ユニットにロードすることを示しているが、これは必須ではない。複数のワンホット行列(すなわち、CSRまたはCSC形式において符号化されるワンホット行列)のシーケンスを行列計算ユニットにロードする場合、全てのクロックサイクルにおいて異なる行列が用いられる場合がある。ワンホット行列は、各列(または行)が1つのみの非ゼロ入力値、例えば1を有し、他の入力値はゼロである行列を指す。これは、例えば行列乗算ユニットとして構成されるときの、行列計算ユニットの敏捷性を拡張するのみでなく、例えば置換ユニットまたは算術ユニットとして構成されるときの、置換およびテーブルルックアップ機能も実現する。
【0085】
本明細書に記載の主題および機能的動作の実施形態は、本明細書において開示される構造およびその構造的均等物を含めて、デジタル電子回路、有形に具現化されるコンピュータソフトウェアもしくはファームウェア、コンピュータハードウェア、またはそれらのうちの1つもしくは複数の組合せにおいて実施することができる。本明細書に記載の主題の実施形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置による実行またはデータ処理装置の動作の制御のために有形の非一時的なストレージ媒体上で符号化されるコンピュータプログラム命令の1つまたは複数のモジュールとして実施することができる。コンピュータストレージ媒体は、機械可読ストレージデバイス、機械可読ストレージ基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つもしくは複数の組合せとすることができる。代替的に、または加えて、プログラム命令は、人工的に生成される伝播信号、例えばデータ処理装置による実行に適した受信機装置への伝送のために、情報をエンコードするために生成される機械生成電気信号、光信号、または電磁信号において符号化することができる。
【0086】
「データ処理装置」という用語はデータ処理ハードウェアを指し、一例として、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのあらゆる種類の装置、デバイス、およびマシンを包含する。装置は、専用論理回路、例えばFPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)とすることもでき、またはこれらをさらに含むことができる。この装置は任意選択で、ハードウェアに加えて、コンピュータプログラムの実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つもしくは複数の組合せを構成するコードを含むことができる。
【0087】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、スクリプト、もしくはコードとも称され得る、またはそれらとして記述され得る、コンピュータプログラムは、コンパイル型言語もしくはインタープリタ型言語、または宣言型言語もしくは手続き型言語を含んでいる任意の形式のプログラム言語で書くことができ、スタンドアロンプログラムとして、またはモジュール、コンポーネント、サブルーチン、もしくはコンピューティング環境で使用するのに適切な他のユニットとして含まれる任意の形式で配置することができる。プログラムは、ファイルシステムの中のファイルに対応することができるが、これは必須ではない。プログラムは、他のプログラムもしくはデータを保持するファイルの一部、例えば、マークアップ言語のドキュメントに記憶されている1つもしくは複数のスクリプト、問題にしているプログラムに専用の単一のファイル、または複数の組織されているファイル、例えば、1つもしくは複数のモジュール、サブプログラム、もしくはコードの一部を記憶するファイルに記憶することができる。コンピュータプログラムは、1つのコンピュータ上で、または1つの場所に置かれるか、もしくは複数の場所に分散され、データ通信ネットワークによって相互に接続される複数のコンピュータ上で実行されるように配置することができる。
【0088】
本明細書に記載されるプロセスおよび論理フローは、入力データに対して動作し、出力を生成することによって機能を実行するために、1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラマブルコンピュータによって実行することができる。プロセスおよび論理フローは、専用論理回路、例えばFPGAもしくはASICによって、または専用論理回路および1つまたは複数のプログラムされているコンピュータの組合せによって実行することもできる。
【0089】
コンピュータプログラムの実行に好適なコンピュータは、汎用マイクロプロセッサもしくは専用マイクロプロセッサもしくはこれら両方、または任意の他の種類の中央処理ユニットに基づくことができる。概して、中央処理ユニットは、リードオンリーメモリ、またはランダムアクセスメモリ、またはこれら両方から命令およびデータを受け取る。コンピュータの必須の要素は、命令を遂行または実行するための中央処理ユニット、ならびに命令およびデータを記憶するための1つまたは複数のメモリデバイスである。中央処理ユニットおよびメモリは、専用論理回路によって補足するか、または専用論理回路に組み込むことができる。また、概してコンピュータは、データを記憶するための1つまたは複数の大容量ストレージデバイス、例えば、磁気ディスク、光磁気ディスク、もしくは光ディスクを含むか、またはそれらからデータを受信するかもしくはそれらにデータを転送するかもしくはその双方のためにそれらに動作可能に結合される。しかしながら、コンピュータはそのようなデバイスを有する必要がない。さらに、コンピュータは、別のデバイスに、例えば、ほんの一部を挙げると、携帯電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブルストレージデバイス、例えばユニバーサルシリアルバス(USB)フラッシュドライブに埋め込むことができる。
【0090】
コンピュータプログラム命令およびデータを記憶するのに適したコンピュータ可読媒体は、例として、半導体メモリデバイス、例えば、EPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスク、例えば、内蔵ハードディスクまたはリムーバブルディスク、光磁気ディスク、ならびにCD-ROMディスクおよびDVD-ROMディスクを含む、全ての形態の不揮発性メモリ、媒体、およびメモリデバイスを含む。
【0091】
ユーザとのインタラクションを提供するために、本明細書に記載の主題の実施形態は、ユーザに対して情報を表示するためのディスプレイデバイス、例えば、CRT(陰極線管)またはLCD(液晶ディスプレイ)モニタ、ならびにユーザがコンピュータに入力を与えることができるキーボードおよびポインティングデバイス、例えば、マウスまたはトラックボールを有するコンピュータ上で実施することができる。他の種類のデバイスを用いて、ユーザとのインタラクションを提供することもできる。例えば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックとすることができ、ユーザからの入力は、音響、発話、または触覚による入力を含む任意の形態で受信することができる。加えて、コンピュータは、文書をユーザによって使用されるデバイスに送信し、文書をそのデバイスから受信することによって、例えば、ユーザのデバイス上のウェブブラウザから受信される要求に応じてウェブページをそのウェブブラウザに送信することによって、ユーザとインタラクトすることができる。また、コンピュータは、テキストメッセージまたは他の形式のメッセージを個人用デバイス、例えばスマートフォンに送信し、メッセージングアプリケーションを実行し、それに対しユーザから応答メッセージを受信することにより、ユーザとインタラクトすることができる。
【0092】
本明細書に記載される主題の実施形態は、例えばデータサーバとしてバックエンドコンポーネントを含むか、ミドルウェアコンポーネント、例えばアプリケーションサーバを含むか、フロントエンドコンポーネント、例えばユーザが本明細書に記載される主題の実施とインタラクトすることができるグラフィカルユーザインタフェース、ウェブブラウザもしくはアプリを有するクライアントコンピュータを含むか、または1つまたは複数のそのようなバックエンドコンポーネント、ミドルウェアコンポーネントもしくはフロントエンドコンポーネントの任意の組合せを含むコンピューティングシステムにおいて実施することができる。システムのコンポーネントは、デジタルデータ通信、例えば通信ネットワークの任意の形態または媒体によって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(LAN)および広域ネットワーク(WAN)、例えばインターネットを含む。
【0093】
コンピューティングシステムは、クライアントとサーバとを含むことができる。クライアントおよびサーバは一般に、互いに離れた場所にあり、典型的には、通信ネットワークを介してインタラクトする。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行され、互いにクライアント-サーバ関係を有するコンピュータプログラムにより生じる。いくつかの実施形態では、サーバは、例えば、クライアントとして振る舞うユーザデバイスとインタラクトするユーザにデータを表示し、およびそのユーザからユーザ入力を受信する目的で、データ、例えば、HTMLページをこのデバイスに送信する。ユーザデバイスにおいて生成されるデータ、例えば、ユーザインタラクションの結果は、サーバにおいてデバイスから受信することができる。
【0094】
実施形態1は、M×N個のセルを有するアレイのための回路を含むハードウェアデバイスによって実行される方法である。方法は、
ハードウェア回路において、アレイを用いて第2の入力行列と乗算されることになる第1の入力行列から複数の非ゼロ入力値を受信するステップを含む。第1の入力行列は、複数の非ゼロ入力値および複数のゼロ入力値を含む。方法は、
ハードウェア回路において、複数の入力値における非ゼロ入力値の各々について、アレイ内のM×N個のセルのうちのいずれのセルに非ゼロ入力値がロードされるべきであるかを示すインデックスメタデータを受信するステップと、
ハードウェア回路を用いて、非ゼロ入力値およびインデックスメタデータをM×N個のセルに送信するステップと、
アレイにおけるM×N個のセルのうちの特定のセルにおいて、
特定の非ゼロ入力値および特定の非ゼロ入力値の対応するインデックスメタデータを受信し、
特定の非ゼロ入力値の対応するインデックスメタデータから、特定の非ゼロ入力値を、乗算を行う際に用いるためにセルに記憶するか、または特定の非ゼロ入力値を別のセルにシフトするかを判断するステップと
をさらに含む。
【0095】
MおよびNは、1よりも大きい正の整数である。
実施形態2は、実施形態1に記載されている方法であって、アレイ内のM×N個のセルのうちの特定のセルにおいて、非ゼロ入力値およびインデックスメタデータをM×N個のセルに送信する前に、ゼロ入力値をセルに自動的にロードするステップをさらに含む。
【0096】
実施形態3は、実施形態1~2のいずれか1つに記載されている方法であって、非ゼロ重み入力値およびインデックスメタデータをM×N個のセルに送信するステップは、M×N個のセルを有するアレイの第1の次元に沿って非ゼロ重み入力値を送信するステップを含む。
【0097】
実施形態4は、実施形態1~3のいずれか1つに記載されている方法であって、アレイの第1の次元は、アレイの垂直次元を含む。
【0098】
アレイの第1の次元に沿って非ゼロ重み入力およびインデックスメタデータをM×N個のセルに送信するステップは、アレイの上縁から開始して、非ゼロ重み入力およびインデックスメタデータを送信するステップを含む。
【0099】
実施形態5は、実施形態1~3のいずれか1つに記載されている方法であって、アレイの第1の次元は、アレイの水平次元を含む。
【0100】
アレイの第1の次元に沿って非ゼロ重み入力およびインデックスメタデータをM×N個のセルに送信するステップは、アレイの左縁から開始して、非ゼロ重み入力およびインデックスメタデータを送信するステップを含む。
【0101】
実施形態6は、実施形態1~5のいずれか1つに記載されている方法であって、インデックスメタデータは、非ゼロ入力値ごとに、絶対固定長の行インデックスを含む。
【0102】
実施形態7は、実施形態1~5のいずれか1つに記載されている方法であって、インデックスメタデータは、非ゼロ入力値ごとに、ランレングス符号化行インデックスを含む。
【0103】
実施形態8は、実施形態1~5のいずれか1つに記載されている方法であって、インデックスメタデータは、アレイのM×N個のセルにおける非ゼロ入力値のロケーションのビットマップを含む。
【0104】
実施形態9は、実施形態1~8のいずれか1つに記載されている方法であって、ハードウェアデバイスは、アレイのM×N個のセル内のセルごとに比較器をさらに含む。比較器は、(i)各非ゼロ入力値のインデックスメタデータと、(ii)アレイの第1の次元に沿ってM×N個のセルにおけるそのロケーションを示すセルのインデックスとを比較するように構成される。
【0105】
実施形態10は、実施形態1~9のいずれか1つに記載されている方法であって、複数の入力値は、圧縮スパース列(CSC)行列形式である。
【0106】
実施形態11は、実施形態1~10のいずれか1つに記載されている方法であって、ハードウェアデバイスは、アレイのM×N個のセルにおけるセルごとに先入れ先出し(FIFO)レジスタをさらに備える。それぞれの非ゼロ入力値をセルにロードするステップは、セルに関連付けられたFIFOレジスタにおいて、それぞれの非ゼロ入力値をエンキューするステップを含む。
【0107】
実施形態12は、実施形態1~10のいずれか1つに記載されている方法であって、特定の非ゼロ入力値を記憶するアレイ内のセルごとに、
ハードウェア回路を用いて、第2の入力行列から第2の入力値を受信するステップと、
ハードウェア回路を用いて、特定の非ゼロ入力値および第2の入力値に基づいて、それぞれの乗算積を決定するステップと、
をさらに含む。
【0108】
実施形態13は、実施形態1~12のいずれか1つに記載されている方法であって、非ゼロ入力値は、クロックサイクルごとに1セルだけ動く。
【0109】
実施形態14は、実施形態1~13のいずれか1つに記載されている方法であって、
第1の入力行列は、ゼロ入力値のみを有する列を含むと判断するステップと、
応答して、ゼロ入力値ごとに、対応するインデックスメタデータによって定義されるインデックスに符号ビットを付加するステップと、
をさらに含む。
【0110】
実施形態15は、1つまたは複数のコンピュータと、命令が記憶されている1つまたは複数のストレージデバイスとを備えるシステムである。命令は、1つまたは複数のコンピュータによって実行されると、1つまたは複数のコンピュータに、実施形態1~14のいずれか1つに記載されている方法を実行させるように動作可能である。
【0111】
実施形態16は、コンピュータプログラムが符号化されているコンピュータストレージ媒体である。プログラムは、命令を含み、命令は、データ処理装置によって実行されると、データ処理装置に、実施形態1~14のいずれか1つに記載されている方法を実行させるように動作可能である。
【0112】
本明細書は多くの特定の実施の詳細を含んでいるが、これらはいかなる発明の範囲または特許請求され得るものの範囲に対する限定としても解釈されるべきではなく、特定の発明の特定の実施形態に特有であり得る特徴の記載として解釈されるべきである。別個の実施形態の文脈で本明細書において説明されている或る特定の特徴は、組み合わせて単一の実施形態で実施することもできる。逆に、単一の実施形態の文脈で説明されている様々な特徴は、複数の実施形態で別々に、または任意の好適な部分的組合せで実施することもできる。さらに、特徴は、或る特定の組合せで動作するものとして上記で説明され、さらにはそのようなものとして最初に特許請求される場合があるが、特許請求される組合せからの1つまたは複数の特徴は、場合によってはその組合せから削除することができ、特許請求される組合せは、部分的組合せまたは部分的組合せの変形を対象としてもよい。
【0113】
同様に、動作が特定の順序で図面に示されているが、これは望ましい結果を達成するために、そのような動作が、示されている特定の順序で実行されること、または順次に実行されること、あるいは図示されている全ての動作が実行されることを要求するものと解されるべきではない。特定の状況では、マルチタスク処理および並列処理が有利な場合もある。さらに、上記で説明した実施形態における様々なシステムモジュールおよびコンポーネントの分離が、全ての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは、一般的には、単一のソフトウェア製品に統合することができるか、または複数のソフトウェア製品にパッケージ化することができることが理解されるべきである。
【0114】
主題の特定の実施形態について説明した。他の実施形態は以下の特許請求の範囲の適用範囲内にある。例えば、請求項において記載されるアクションは、異なる順で実行されてもよく、それでも望ましい結果を達成することができる。一例として、添付の図において示されるプロセスは、望ましい結果を達成するために、示されている特定の順序または連続する順序であることを必ずしも必要としない。いくつかの場合、マルチタスク処理および並列処理が有利な場合がある。
【手続補正書】
【提出日】2024-05-31
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
M×N個のセルを有するアレイのための回路を含むハードウェアデバイスによって実行される方法であって、
前記ハードウェア回路において、前記アレイを用いて第2の入力行列と乗算されることになる第1の入力行列から複数の非ゼロ入力値を受信するステップを含み、前記第1の入力行列は、前記複数の非ゼロ入力値および複数のゼロ入力値を含み、
前記方法は、
前記ハードウェア回路において、前記複数の入力値における非ゼロ入力値の各々について、前記アレイ内の前記M×N個のセルのうちのいずれのセルに前記非ゼロ入力値がロードされるべきであるかを示すインデックスメタデータを受信するステップと、
前記ハードウェア回路を用いて、前記非ゼロ入力値および前記インデックスメタデータを前記M×N個のセルに送信するステップと、
前記アレイにおける前記M×N個のセルのうちの特定のセルにおいて、
特定の非ゼロ入力値および前記特定の非ゼロ入力値の対応するインデックスメタデータを受信し、
前記特定の非ゼロ入力値の前記対応するインデックスメタデータから、前記特定の非ゼロ入力値を、乗算を行う際に用いるために前記セルに記憶するか、または前記特定の非ゼロ入力値を別のセルにシフトするかを判断するステップと
をさらに含み、
MおよびNは、1よりも大きい正の整数である、方法。
【請求項2】
前記アレイ内の前記M×N個のセルのうちの前記特定のセルにおいて、前記非ゼロ入力値および前記インデックスメタデータを前記M×N個のセルに送信する前に、ゼロ入力値を前記セルに自動的にロードするステップをさらに含む、請求項1に記載の方法。
【請求項3】
前記非ゼロ重み入力値および前記インデックスメタデータを前記M×N個のセルに送信するステップは、前記M×N個のセルを有する前記アレイの第1の次元に沿って前記非ゼロ重み入力値を送信するステップを含む、請求項
1に記載の方法。
【請求項4】
前記アレイの前記第1の次元は、前記アレイの垂直次元を含み、
前記アレイの前記第1の次元に沿って前記非ゼロ重み入力および前記インデックスメタデータを前記M×N個のセルに送信するステップは、前記アレイの上縁から開始して、前記非ゼロ重み入力および前記インデックスメタデータを送信するステップを含む、請求項3に記載の方法。
【請求項5】
前記アレイの前記第1の次元は、前記アレイの水平次元を含み、
前記アレイの前記第1の次元に沿って前記非ゼロ重み入力および前記インデックスメタデータを前記M×N個のセルに送信するステップは、前記アレイの左縁から開始して、前記非ゼロ重み入力および前記インデックスメタデータを送信するステップを含む、請求項3に記載の方法。
【請求項6】
前記インデックスメタデータは、非ゼロ入力値ごとに、絶対固定長の行インデックスを含む、請求項
1に記載の方法。
【請求項7】
前記インデックスメタデータは、非ゼロ入力値ごとに、ランレングス符号化行インデックスを含む、請求項
1に記載の方法。
【請求項8】
前記インデックスメタデータは、前記アレイの前記M×N個のセルにおける前記非ゼロ入力値のロケーションのビットマップを含む、請求項
1に記載の方法。
【請求項9】
前記ハードウェアデバイスは、前記アレイの前記M×N個のセル内のセルごとに比較器をさらに含み、前記比較器は、(i)各非ゼロ入力値の前記インデックスメタデータと、(ii)前記アレイの前記第1の次元に沿って前記M×N個のセルにおけるそのロケーションを示す前記セルのインデックスとを比較するように構成される、請求項
1に記載の方法。
【請求項10】
前記複数の入力値は、圧縮スパース列(CSC)行列形式である、請求項
1に記載の方法。
【請求項11】
前記ハードウェアデバイスは、前記アレイの前記M×N個のセルにおけるセルごとに先入れ先出し(FIFO)レジスタをさらに備え、それぞれの前記非ゼロ入力値を前記セルにロードするステップは、前記セルに関連付けられた前記FIFOレジスタにおいて、それぞれの前記非ゼロ入力値をエンキューするステップを含む、請求項
1に記載の方法。
【請求項12】
特定の非ゼロ入力値を記憶する前記アレイ内のセルごとに、
前記ハードウェア回路を用いて、前記第2の入力行列から第2の入力値を受信するステップと、
前記ハードウェア回路を用いて、前記特定の非ゼロ入力値および前記第2の入力値に基づいて、それぞれの乗算積を決定するステップと
をさらに含む、請求項
1に記載の方法。
【請求項13】
前記非ゼロ入力値は、クロックサイクルごとに1セルだけ動く、請求項
1に記載の方法。
【請求項14】
前記第1の入力行列は、ゼロ入力値のみを有する列を含むと判断するステップと、
応答して、ゼロ入力値ごとに、前記対応するインデックスメタデータによって定義されるインデックスに符号ビットを付加するステップと
をさらに含む、請求項
1に記載の方法。
【請求項15】
1つまたは複数のコンピュータと、前記1つまたは複数のコンピュータに結合され、命令が記憶されているコンピュータ可読媒体とを備えるシステムであって、前記命令は、前記1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに
、請求項
1~14のいずれか
1項に記載の方
法を実行させる、システム。
【請求項16】
コンピュータ
プログラムであって、前記
コンピュータプログラムは、1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに
、請求項
1~14のいずれか
1項に記載の方
法を実行させる、コンピュータ
プログラム。
【国際調査報告】