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

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

▶ グーグル インコーポレイテッドの特許一覧

特許7566931出力後処理を伴うシストリックアレイセル
<>
  • 特許-出力後処理を伴うシストリックアレイセル 図1
  • 特許-出力後処理を伴うシストリックアレイセル 図2
  • 特許-出力後処理を伴うシストリックアレイセル 図3
  • 特許-出力後処理を伴うシストリックアレイセル 図4
  • 特許-出力後処理を伴うシストリックアレイセル 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-04
(45)【発行日】2024-10-15
(54)【発明の名称】出力後処理を伴うシストリックアレイセル
(51)【国際特許分類】
   G06F 17/16 20060101AFI20241007BHJP
【FI】
G06F17/16 M
【請求項の数】 21
(21)【出願番号】P 2022568966
(86)(22)【出願日】2021-11-18
(65)【公表番号】
(43)【公表日】2023-09-19
(86)【国際出願番号】 US2021059859
(87)【国際公開番号】W WO2022109115
(87)【国際公開日】2022-05-27
【審査請求日】2023-03-08
(31)【優先権主張番号】63/116,034
(32)【優先日】2020-11-19
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ウィルコック,ジェレマイア
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開2019-164595(JP,A)
【文献】特開2009-140491(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
シストリックアレイに含まれるデータ処理セルであって、
第1の方向に沿って転送された第1の入力行列を受け取り、前記第1の入力行列を前記データ処理セルから前記第1の方向に沿ってシフトアウトするよう構成される第1の入力レジスタと、
第2の方向に沿って転送された第2の入力行列を受け取り、前記第2の入力行列を前記データ処理セルから前記第2の方向に沿ってシフトアウトするよう構成される第2の入力レジスタと、
前記第1の入力行列の要素と前記第2の入力行列の要素との積を求めるよう構成される乗算回路と、
前記乗算回路によって出力された積の和を累算することによって累算値を求め、前記データ処理セルから前記累算値をシフトアウトし、前記シストリックアレイの他のデータ処理セルから累算値を受け取るよう構成されるアキュムレータと、
前記アキュムレータによって求められた前記累算値に対して1つ以上の後処理演算を実行することによって、後処理された値を求めるよう構成される後処理構成要素とを備え
前記アキュムレータは、前記データ処理セルから前記後処理された値をシフトアウトし、前記シストリックアレイの他のデータ処理セルから後処理された値を受け取るようさらに構成される、データ処理セル。
【請求項2】
前記後処理構成要素から前記後処理された値を受け取り、前記データ処理セルから前記後処理された値をシフトアウトするよう構成される出力レジスタをさらに備える、請求項1に記載のデータ処理セル。
【請求項3】
前記後処理構成要素は、前記アキュムレータによって求められた前記累算値を、より高精度の数値形式からより低精度の数値形式に丸めるよう構成される丸め回路を備える、請求項1または2に記載のデータ処理セル。
【請求項4】
前記より低精度の数値形式のビット数に等しい数の出力配線をさらに含む、請求項3に記載のデータ処理セル。
【請求項5】
前記後処理構成要素は、前記アキュムレータによって求められた前記累算値を、より高精度の数値形式からより低精度の数値形式に切り捨てるよう構成される切り捨て回路を備える、請求項1~4のいずれか1項に記載のデータ処理セル。
【請求項6】
前記後処理構成要素は、
前記アキュムレータによって求められた前記累算値が正のときに前記アキュムレータによって求められた前記累算値を出力し、
前記アキュムレータによって求められた前記累算値が負または0のときに0の値を出力するよう構成される、正規化線形ユニット(ReLU)回路を備える、請求項1~5のいずれか1項に記載のデータ処理セル。
【請求項7】
前記後処理構成要素はプログラム可能であり、制御信号に基づいて複数の後処理演算のうちの1つを実行するよう構成される、請求項1~6のいずれか1項に記載のデータ処理セル。
【請求項8】
複数の、請求項1~7のいずれか1項に記載のデータ処理セルを備える、行列乗算ユニット。
【請求項9】
行列を乗算するための方法であって、
シストリックアレイに含まれるセルの第1の入力レジスタが、第1の方向に沿って転送された第1の入力行列を受け取ることと、
前記第1の入力レジスタが、前記第1の入力行列を前記セルから前記第1の方向に沿ってシフトアウトすることと、
前記セルの第2の入力レジスタが、第2の方向に沿って転送された第2の入力行列を受け取ることと、
前記第2の入力レジスタが、前記第2の入力行列を前記セルから前記第2の方向に沿ってシフトアウトすることと、
前記セルの乗算回路が、前記第1の入力行列の要素と前記第2の入力行列の要素との積を生成することと、
前記セルのアキュムレータが、前記積を累算する累算値を生成することと、
前記セルの後処理構成要素が、前記累算値に対して1つ以上の後処理演算を実行することによって、後処理された値を求めること
前記アキュムレータが、前記セルから前記累算値または前記後処理された値をシフトアウトすることと、
前記アキュムレータが、前記シストリックアレイの他のセルから累算値または後処理された値を受け取ることとを含む、方法。
【請求項10】
前記1つ以上の後処理演算を実行することは、前記累算値を、より高精度の数値形式からより低精度の数値形式に丸めることを含む、請求項9に記載の方法。
【請求項11】
前記1つ以上の後処理演算を実行することは、前記累算値を、より高精度の数値形式からより低精度の数値形式に切り捨てることを含む、請求項9または10に記載の方法。
【請求項12】
前記1つ以上の後処理演算を実行することは、
前記累算値が正の場合に前記累算値を出力することと、
前記累算値が負または0のときに0の値を出力することとを含む、請求項9~11のいずれか1項に記載の方法。
【請求項13】
前記1つ以上の後処理演算を実行することは、
制御信号を受信することと、
前記制御信号に基づいて複数の後処理演算のうちの所与の後処理演算を実行することとを含む、請求項9~12のいずれか1項に記載の方法。
【請求項14】
さらに、
出力レジスタが、前記後処理構成要素から、前記後処理された値を受け取ることと、
前記出力レジスタが、前記後処理された値を前記セルからシフトアウトすることとを含む、請求項9~13のいずれか1項に記載の方法。
【請求項15】
行列乗算ユニットであって、
シストリックアレイに配置された複数のセルを備え、各セルは、
第1の方向に沿って転送された第1の入力行列を受け取り、前記第1の入力行列を当該セルから前記第1の方向に沿ってシフトアウトするよう構成される第1の入力レジスタと、
第2の方向に沿って転送された第2の入力行列を受け取り、前記第2の入力行列を当該セルから前記第2の方向に沿ってシフトアウトするよう構成される第2の入力レジスタと、
前記第1の入力行列の要素と前記第2の入力行列の要素との積を求めるよう構成される乗算回路と、
前記乗算回路によって出力された積の和を累算することによって累算値を求め、前記累算値を当該セルからシフトアウトし、前記シストリックアレイの他のセルから累算値を受け取るよう構成されるアキュムレータと、
前記アキュムレータによって求められた前記累算値に対して1つ以上の後処理演算を実行することによって、後処理された値を求めるよう構成される後処理構成要素とを備え
前記アキュムレータは、前記セルから前記後処理された値をシフトアウトし、前記シストリックアレイの他のセルから累算値を受け取るようさらに構成される、行列乗算ユニット。
【請求項16】
各セルは、前記後処理構成要素から前記後処理された値を受け取り、前記セルから前記後処理された値をシフトアウトするよう構成される出力レジスタをさらに備える、請求項15に記載の行列乗算ユニット。
【請求項17】
前記後処理構成要素は、前記アキュムレータによって求められた前記累算値を、より高精度の数値形式からより低精度の数値形式に丸めるよう構成される丸め回路を備える、請求項15または16に記載の行列乗算ユニット。
【請求項18】
各セルは、前記より低精度の数値形式のビット数に等しい数の出力配線を含む、請求項17に記載の行列乗算ユニット。
【請求項19】
前記後処理構成要素は、前記アキュムレータによって求められた前記累算値を、より高精度の数値形式からより低精度の数値形式に切り捨てるよう構成される切り捨て回路を備える、請求項15~18のいずれか1項に記載の行列乗算ユニット。
【請求項20】
前記後処理構成要素は、
前記アキュムレータによって求められた前記累算値が正のときに前記アキュムレータによって求められた前記累算値を出力し、
前記アキュムレータによって求められた前記累算値が負または0のときに0の値を出力するよう構成される、正規化線形ユニット(ReLU)回路を備える、請求項15~19のいずれか1項に記載の行列乗算ユニット。
【請求項21】
前記後処理構成要素はプログラム可能であり、制御信号に基づいて複数の後処理演算のうちの1つを実行するよう構成される、請求項15~20のいずれか1項に記載の行列乗算ユニット。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の参照
本出願は、「SYSTOLIC ARRAY CELLS WITH OUTPUT POST-PROCESSING(出力後処理を伴うシストリックアレイセル)」と題される、2020年11月19日に提出された米国仮出願63/116,034に対する優先権を主張し、その開示は参照により本明細書に組み込まれる。
【0002】
技術分野
本明細書は、ハードウェア処理ユニットのシストリックアレイに関する。
【背景技術】
【0003】
背景
シストリックアレイは、データを計算し、ネットワークを介して渡す処理ユニットのネットワークである。シストリックアレイ内のデータは、処理ユニット間をパイプライン方式で流れ、各処理ユニットは、その上流の隣接する処理ユニットから受信したデータに基づいて部分的な結果を独立して計算し得る。セルとも称され得る処理ユニットは、データを上流処理ユニットから下流処理ユニットに渡すよう、共に結線され得る。シストリックアレイは、機械学習適用例において、例えば、行列乗算を実行するために、使用される。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
概して、本明細書で説明する主題の、1つの革新的な局面は、シストリックアレイに配置された複数のセルを含む行列乗算ユニットにおいて具現化され得る。各セルは、入力行列の要素の積を求めるよう構成される乗算回路を含む。各セルは、乗算回路によって出力された積の和を累算することによって累算値を求めるよう構成されるアキュムレータを含む。各セルはまた、累算値に対して1つ以上の後処理演算を実行することによって、後処理された値を求めるよう構成される後処理構成要素を含む。
【0005】
これらおよび他の実現例は、各々、以下の特徴のうちの1つ以上を任意選択で含み得る。いくつかの局面では、各セルは、後処理された値を受け取り、後処理された値をセルからシフトアウトするよう構成される出力レジスタをさらに含む。
【0006】
いくつかの局面では、後処理構成要素は、累算値を、より高精度の数値形式からより低精度の数値形式に丸めるよう構成される丸め回路を含む。各セルは、より低精度の数値形式のビット数に等しい数の出力配線を含み得る。セル内でのこの丸めは、出力帯域幅を低減し得る。出力帯域幅を低減することにより、セルから出力データを抽出するために必要な配線の数を低減することができる。配線の数の低減は、シストリックアレイのための、より小さいダイサイズ、または、ダイサイズを増加させることなく、ダイあたりの、より大量のセルを可能にし得る。
【0007】
いくつかの局面では、後処理構成要素は、累算値を、より高精度の数値形式からより低精度の数値形式に切り捨てるよう構成される切り捨て回路を備える。いくつかの局面では、後処理構成要素は、累算値が正であるときは累算値を出力し、累算値が負または0であるときは0の値を出力するよう構成される正規化線形ユニット(ReLU)回路を含む。いくつかの局面では、後処理構成要素は、プログラム可能であり、制御信号に基づいて複数の後処理演算のうちの1つを実行するよう構成される。
【0008】
概して、本明細書に記載される主題の、別の革新的な局面は、データ処理セルにおいて具現化され得る。データ処理セルは、入力行列の要素の積を求めるよう構成される乗算回路と、乗算回路によって出力された積の和を累算することによって累算値を求めるよう構成されるアキュムレータと、累算値に対して1つ以上の後処理演算を実行することによって、後処理された値を求めるよう構成される後処理構成要素とを含み得る。
【0009】
これらおよび他の実現例は、各々、以下の特徴のうちの1つ以上を任意選択で含み得る。いくつかの局面では、セルは、後処理された値を受け取り、後処理された値をデータ処理セルからシフトアウトするよう構成される出力レジスタを含み得る。
【0010】
いくつかの局面では、後処理構成要素は、累算値を、より高精度の数値形式からより低精度の数値形式に丸めるよう構成される丸め回路を含む。セルは、より低精度の数値形式のビット数に等しい数の出力配線を含み得る。セル内でのこの丸めは、出力帯域幅を低減し得る。出力帯域幅を低減することにより、セルから出力データを抽出するために必要な配線の数を低減することができる。配線の数の低減は、シストリックアレイのための、より小さいダイサイズ、または、ダイサイズを増加させることなく、ダイあたりの、より大量のセルを可能にし得る。
【0011】
いくつかの局面では、後処理構成要素は、累算値を、より高精度の数値形式からより低精度の数値形式に切り捨てるよう構成される切り捨て回路を含む。後処理構成要素は、累算値が正であるときは累算値を出力し、累算値が負または0であるときは0の値を出力するよう構成されるReLU回路を含み得る。いくつかの局面では、後処理構成要素は、プログラム可能であり、制御信号に基づいて複数の後処理演算のうちの1つを実行するよう構成される。
【0012】
概して、本明細書で説明する主題の、別の革新的な局面は、行列を乗算するための方法において具現化され得る。本方法は、セルの第1の入力レジスタが、第1の入力行列を受け取ることと、セルの第2の入力レジスタが、第2の入力行列を受け取ることと、セルの乗算回路が、第1の入力行列の要素と第2の入力行列の要素との積を生成することと、セルのアキュムレータが、積を累算する累算値を生成することと、セルの後処理構成要素が、累算値に対して1つ以上の後処理演算を実行することとを含む。
【0013】
これらおよび他の実現例は、各々、以下の特徴のうちの1つ以上を任意選択で含み得る。いくつかの局面では、1つ以上の後処理演算を実行することは、累算値を、より高精度の数値形式からより低精度の数値形式に丸めることを含み得る。
【0014】
いくつかの局面では、1つ以上の後処理演算を実行することは、累算値を、より高精度の数値形式からより低精度の数値形式に切り捨てることを含み得る。1つ以上の後処理演算を実行することは、累算値が正であるときには累算値を出力することと、累算値が負または0であるときには0の値を出力することとを含み得る。
【0015】
いくつかの局面では、1つ以上の後処理演算を実行することは、制御信号を受信することと、制御信号に基づいて複数の後処理演算のうちの所与の後処理演算を実行することとを含み得る。
【0016】
いくつかの局面は、出力レジスタが、後処理構成要素から、後処理された累算値を受け取ることと、出力レジスタが、セルから、後処理された累算値をシフトアウトすることとを含み得る。
【発明の効果】
【0017】
この明細書において記載される主題は、以下の利点の1つ以上を実現するように特定の実施の形態において実現され得る。本明細書に記載されるシストリックアレイセルは、セルの出力をセルからシフトする前に、セルの出力の後処理を実行する後処理構成要素を含み得る。セル内のこの後処理は、出力帯域幅を低減し得、これは、セルから出力データを抽出するために必要とされる配線の数を低減し得る。例えば、後処理は、浮動小数点数の精度を、例えば32ビットから16ビットに低減することを含み得、これは、次いで、セルが出力ビット当たり1つの出力配線を含む場合には、出力配線の数を32から16に低減し得る。配線の数の低減は、シストリックアレイのための、より小さいダイサイズ、または、ダイサイズを増加させることなく、ダイあたりの、より大量のセルを可能にし得る。後処理構成要素は、各セルによって実行され得る後処理演算のタイプにおいて、より大きな柔軟性を可能にする、プログラム可能な要素であり得る。
【0018】
前述の主題の様々な特徴および利点は、図に関して以下で説明される。さらなる特徴および利点は、本明細書に記載される主題および特許請求の範囲から明らかである。
【図面の簡単な説明】
【0019】
図1】行列計算ユニットを含む例示的な処理システムを示す。
図2】行列計算ユニットを含む例示的なアーキテクチャを示す。
図3】シストリックアレイ内のセルの例示的なアーキテクチャを示す。
図4】シストリックアレイ内のセルの例示的なアーキテクチャを示す。
図5】行列乗算を実行し、1つ以上の後処理演算を実行するための例示的なプロセスのフロー図である。
【発明を実施するための形態】
【0020】
様々な図面における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
概して、本文書は、後処理構成要素を含むセルのシストリックアレイを記載する。セルは、計算を実行するための計算ユニット、例えば乗算および/または加算回路を含み得る。例えば、シストリックアレイは、入力行列に対して行列-行列乗算を実行し得、各セルは、各入力行列の一部の部分的な行列積を求め得る。セルのシストリックアレイは、処理システム、例えば、機械学習モデルをトレーニングおよび/または機械学習計算を実行するために使用される専用機械学習プロセッサ、グラフィックス処理ユニット(GPU)、または行列乗算を実行する別の適切な処理システムの行列計算ユニットの一部となり得る。
【0021】
シストリックアレイは、各セルが入力行列の要素の一部の積の部分和を計算する出力定常(output stationary)行列乗算技術を実行し得る。出力定常技術では、入力行列の要素は、シストリックアレイの行を横切って、または列を横切って、反対または直交方向にシフトされ得る。セルは、行列要素の対を受け取るたびに、2つの要素の積を求め、2つの入力行列のその要素部分について当該セルによって求められた積のすべての部分和を累算する。入力行列の要素は、個々の要素または部分行列であり得る。
【0022】
セルの後処理構成要素は、セルの計算ユニットによって計算された部分結果に対して後処理演算を実行し得る。たとえば、計算ユニットが32ビットの浮動小数点数を累算する場合、後処理構成要素は、それらの浮動小数点数を、16ビットの浮動小数点形式などの、より低精度の浮動小数点形式に丸めるかまたは切り捨て得る。後処理は、各セルによってではなく、シストリックアレイの外部で実行され得る。しかしながら、各セル内で後処理を行うことによって、各セルの出力帯域幅を低減し得、各セルの入力および/または出力配線の数を低減し得る。例えば、各セルは、32ビットの浮動小数点数を受け取るための32本の入力配線と、32ビットの浮動小数点数を出力するための32本の出力配線とを含み得る。各セル内で浮動小数点数を丸めるかまたは切り捨てることによって、各セルの入力配線および/または出力配線の数を50%低減し得、これによって、乗算ユニットのサイズを縮小し得、および/または、乗算ユニットのサイズを増大させることなく、乗算ユニット当たり、より多くのセルを可能にし得る。
【0023】
図1は、行列計算ユニット112を含む例示的な処理システム100を示す。システム100は、後処理構成要素を有するセルのシストリックアレイを有する行列計算ユニット112を実現し得るシステムの一例である。
【0024】
システム100は、1つ以上の計算コア103を含み得るプロセッサ102を含む。各計算コア103は、後処理構成要素を有するセルのシストリックアレイを使用して行列-行列乗算を実行するために使用され得る行列計算ユニット112を含み得る。システム100は、専用ハードウェアチップの形態であり得る。
【0025】
図2は、行列計算ユニット112を含む例示的なアーキテクチャを示す。行列計算ユニットは、2次元シストリックアレイ206である。2次元シストリックアレイ206は、正方形アレイであり得る。アレイ206は、複数のセル204を含む。いくつかの実現例では、シストリックアレイ206の第1の次元220はセルの列に対応し、シストリックアレイ206の第2の次元222はセルの行に対応する。シストリックアレイ206は、列よりも多くの行、行よりも多くの列、または等しい数の列および行を有し得る。したがって、シストリックアレイ206は、正方形以外の形状を有し得る。
【0026】
この例では、シストリックアレイ206は、ニューラルネットワーク計算に使用される。例えば、図1の行列計算ユニット112は、シストリックアレイ206として実現され得る。他の例では、シストリックアレイ206は、他の用途において、行列乗算または他の計算、例えば、畳み込み、相関、またはデータ分類に使用され得る。
【0027】
図示の例では、値ローダ202は、アレイ206の行に活性化入力を送り、重みフェッチャインターフェイス(weight fetcher interface)208は、アレイ206の列に重み入力を送る。しかしながら、いくつかの他の実現例では、活性化入力および重み入力は、シストリックアレイ206の列の両側に転送される。活性化入力および重み入力よりもむしろ他のタイプの入力が使用される場合、重みフェッチャインターフェイス208は、値ローダがシストリックアレイ206にわたって反対または直交方向に入力を送り得るように、別の値で置き換えられ得る。
【0028】
別の例では、値ローダ202は、シストリックアレイ206の行を横切って活性化入力を送り得、重みフェッチャインターフェイス208は、シストリックアレイ206の列を横切って重み入力を送り得、またはその逆である。ニューラルネットワークの例では、値ローダ202は、アレイ206の行(または列)に活性化入力を送り得、重みフェッチャインターフェイス208は、値ローダ202の側から反対側(または直交側)からアレイ206の行(または列)に重み入力を送り得る。さらに別の例では、値ローダ202は、アレイ206を対角線状に横切って活性化入力を送り得、重みフェッチャインターフェイス208は、アレイを対角線状に横切って、たとえば値ローダ202のそれとは反対方向に、または値ローダ202の方向と直交する方向に、重み入力を送り得る。
【0029】
値ローダ202は、統合バッファまたは他の適切なソースから活性化入力を受け取り得る。各値ローダ202は、対応する活性化入力をアレイ206の別個の最も左のセルに送り得る。最も左のセルは、アレイ206の最も左の列に沿ったセルであり得る。例えば、値ローダ212は、ある活性化入力をセル214に送り得る。値ローダは、その活性化入力を隣接する値ローダにも送り得、当該活性化入力は、アレイ206の別の最も左のセルにおいて使用され得る。これは、活性化入力がアレイ206の別の特定のセルで使用するためにシフトされることを可能にする。
【0030】
重みフェッチャインターフェイス208は、メモリユニットから重み入力を受け取り得る。重みフェッチャインターフェイス208は、対応する重み入力をアレイ206の別個の最も上のセルに送り得る。最も上のセルは、アレイ206の最上行に沿ったセルであり得る。たとえば、重みフェッチャインターフェイス208は、セル214~217に重み入力を送り得る。
【0031】
いくつかの実現例では、ホストインターフェイスが、活性化入力を、アレイ206全体にわたって、ある次元に沿って、たとえば右に、シフトさせ、一方、重み入力を、アレイ206全体にわたって、直交次元に沿って、たとえば下に、シフトさせる。例えば、1クロックサイクルにわたって、セル214における活性化入力は、セル214の右にあるセル215内の活性化レジスタにシフトし得る。同様に、セル214における重み入力は、セル214の下にあるセル218における重みレジスタにシフトし得る。他の例では、重み入力は、活性化入力の方向とは反対の方向(例えば、右から左)にシフトされ得る。
【0032】
例えば、1つは活性化入力を表し、1つは重みを表す、2つの行列の積を、出力定常技術を使用して求めるために、各セルは、セル内にシフトされた行列要素の積の和を累算する。各クロックサイクルで、各セルは、所与の重み入力および所与の活性化入力を処理して、2つの入力の積を求め得る。セルは、セルのアキュムレータによって維持される累算値に各積を加算し得る。たとえば、セル215は、2つの行列要素、たとえば、第1の活性化入力および第1の重み入力、の第1の積を求め、その積をアキュムレータに記憶し得る。セル215は、活性化入力をセル216にシフトし、重み入力をセル214にシフトし得る。同様に、セル215は、セル214から第2の活性化入力を受け取り得、セル216から第2の重み入力を受け取り得る。セル215は、第2の活性化入力と第2の重み入力との積を求め得る。セル215は、これを前の累算値に加算して、更新された累算値を生成し得る。
【0033】
行列要素のすべてがシストリックアレイの行および列を通過した後、各セルは、その累算値を、行列乗算の部分的な結果として、シフトアウトし得る。累算値をシフトアウトする前に、各セルは、累算値を後処理し、後処理された出力を適切なアキュムレータユニット210、例えば、当該セルと同じ列内のアキュムレータユニット210に渡し得る。例えば、各セルは、出力される数を、より低精度の数に丸めるかまたは切り捨て、それをアキュムレータユニット210に渡し得る。例示的な個々のセルは、図3および図4を参照して以下でさらに説明される。
【0034】
セルは、後処理された出力を、それらの列に沿って、例えば、アレイ206内の列の底部に向かって、通過、例えばシフトさせることができる。いくつかの実現例では、各列の底部において、アレイ206は、各列からの各後処理された出力を記憶および累算するアキュムレータユニット210を含み得る。アキュムレータユニット210は、それの列の各後処理された出力を累算して、最終的な累算値を生成し得る。最終累算値は、ベクトル計算ユニットまたは他の適切な構成要素に転送され得る。
【0035】
シストリックアレイ206のセル204は、隣接するセルに結線され得る。たとえば、セル215は、配線のセットを使用してセル214およびセル216に結線され得る。いくつかの実現例では、出力データをセルからアキュムレータユニット210にシフトアウトするとき、セルは、数値を単一のクロックサイクルで出力し得る。そうするために、セルは、出力値を表すために使用されるコンピュータ数値形式の各ビットに対する出力配線を有し得る。例えば、出力値が32ビット浮動小数点形式、例えば、float32またはFP32を使用して表される場合、セルは、出力値全体を単一のクロックサイクルでシフトアウトするために、32本の出力配線を有し得る。
【0036】
場合によっては、計算ユニットおよび/またはセルのアキュムレータへの入力は、計算ユニットおよび/またはアキュムレータの内部精度よりも低い精度を有する。たとえば、入力行列の浮動小数点値は、たとえばbfloat16またはBF16形式で、16ビットであり得る。しかしながら、乗算回路、加算回路、および/またはアキュムレータは、より高精度の数、例えば、FP32数で動作し得る。この例では、上流セルのアキュムレータの出力は、FP32数であり得る。したがって、FP32数を1クロックサイクルで出力するために、上流セルは、下流セルへの32本の出力配線を有し得る。図3に示されるように、各セルにおいてポストプロセッサを使用することによって、出力配線の数は、たとえばポストプロセッサがFP32数をBF16数に丸めるかまたは切り捨てる場合に、16に低減され得る。FP32およびBF16は、例としてのみ使用される。セル204は、他のレベルの精度を有する他の数値形式で動作し得る。
【0037】
このように出力配線の数を低減することにより、シストリックアレイの全体サイズを小さくし得る。すなわち、シストリックアレイが実現される集積回路のダイを低減し得、および/またはシストリックアレイのセル数を、ダイのサイズを増加させることなく増加させ得る。
【0038】
図3は、シストリックアレイ内のセルの例示的なアーキテクチャ300を示す。例えば、図2のシストリックアレイ206のセル204は、アーキテクチャ300を使用して実現され得る。セルは、2つの入力行列の行列-行列乗算を実行するために使用され得る。セルは、行列-行列乗算を実行することに関して説明されるが、セルは、他の計算、例えば、畳み込み、相関、またはデータ分類を実行するために使用され得る。
【0039】
セルは、入力レジスタ302および入力レジスタ304を含む入力レジスタを含み得る。入力レジスタ302は、バス322を介して入力行列を受け取り得る。例えば、入力レジスタ302は、シストリックアレイ内のセルの位置に応じて、右隣のセル(例えば、所与のセルの右に位置する隣接セル)から、または別の構成要素(たとえば、図2のシストリックアレイ206において使用される場合、重みフェッチャインターフェイス)から、入力行列の要素を受け取り得る。したがって、入力レジスタ302によって受け取られる入力行列の各要素は、重み入力であり得る。
【0040】
入力レジスタ304も、バス324を介して入力行列の要素を受け取り得る。例えば、入力レジスタ304は、シストリックアレイ内のセルの位置に応じて、左隣のセル(例えば、所与のセルの左に位置する隣接セル)から、または別の構成要素(例えば、図2のシストリックアレイ206で使用される場合、値ローダまたは統合バッファ)から、入力行列を受け取り得る。したがって、入力レジスタ304によって受け取られる入力行列の各要素は、活性化入力であり得る。
【0041】
セルは、乗算回路306および加算回路308を含む。乗算回路306は、入力レジスタ302および304に記憶された行列要素の積を求め得る。例えば、乗算回路306は、入力レジスタ302に記憶された入力行列の要素と、入力レジスタ304に記憶された入力行列の要素とを乗算して、積を求め得る。入力レジスタ302によって受け取られた入力行列の要素が重み入力であり、入力レジスタ304によって受け取られた入力行列の要素が活性化入力である場合、乗算回路306は、重み入力を活性化入力で乗算し得る。乗算回路306は、積を加算回路308に出力し得る。
【0042】
加算回路308は、積とアキュムレータ310に記憶された累算値との和を求めて、新たな累算値を求め得る。次いで、加算回路308は、新たな累算値をアキュムレータ310に送り得る。アキュムレータ310は、現在の累算値を記憶し得る。
【0043】
入力行列のすべての要素について乗算が完了した後、アキュムレータ310は、累算されたデータを、セルの後処理構成要素312に出力し得る。後処理構成要素312は、回路を使用して実現され得、アキュムレータ310から受け取られた累算データに対して後処理演算を実行し得る。
【0044】
いくつかの実現例では、後処理構成要素312は、累算値を、より高精度の数値形式からより低精度の数値形式に丸めるよう構成される丸め回路を含む。例えば、後処理構成要素312は、FP32数をBF16数に丸め得る。
【0045】
後処理構成要素312は、累算値を、より高精度の数値形式からより低精度の数値形式に切り捨てるための切り捨て回路を含み得る。例えば、後処理構成要素312は、FP32数をBF16数に切り捨て得る。
【0046】
後処理構成要素312は、累算されたデータに対して正規化線形活性化関数を実行するよう構成される正規化線形ユニット(ReLU)回路を含み得る。ReLUは、累算値が正である場合、累算値を直接出力し得る。累算値が負である場合、ReLUは、0の値を出力し得る。後処理構成要素312は、ReLUを丸めまたは切り捨て回路と組み合わせて含み得る。このようにして、後処理構成要素312は、負の値に対して0の値を出力しながら、正の値の精度を低減することができる。
【0047】
後処理構成要素312は、累算されたデータに対して他の演算を実行するための回路を含み得る。例えば、後処理構成要素312は、他の活性化関数、例えば、バイナリステップ関数、線形活性化関数、および/またはシグモイド関数などの非線形活性化関数を実行するための回路を含み得る。
【0048】
いくつかの実現例では、後処理構成要素312は、複数の後処理演算を実行し得るプログラム可能な構成要素である。このようにして、ホストインターフェイス(またはコア103の別の構成要素)は、異なる入力行列、異なる機械学習計算、または他の目的のために、後処理演算を調整し得る。例えば、いくつかの機械学習計算は、より高い精度値がセルによっていつ出力されるかを、より良好に要求または実行し得る。この例では、後処理構成要素312は、累算値を丸めて、例えば、複数の可能な、より低精度の形式のうちの1つにするか、またはより高精度の累算値を直接渡すよう、制御され得る。制御信号を用いて、プログラム可能な後処理構成要素312によって実行される後処理演算を変更し得る。前の例を続けると、後処理構成要素312は、第1の制御信号を受信することに応答して累算値を第1のより低精度の形式に丸め得、第2の制御信号を受信することに応答して累算値を第2のより低精度の形式に丸め得、または第3の制御信号を受信することに応答してまったく丸めない。別の例では、後処理構成要素312は、制御信号に基づいて、後処理構成要素312の、可能な活性化関数のセットのうちの、所与の活性化関数を実行し得る。
【0049】
後処理が完了した後、後処理構成要素312は、後処理されたデータを出力レジスタ314に送り得る。出力レジスタ314は、出力バス336を使用して、シストリックアレイ内のセルの位置に応じて、後処理されたデータを、隣接セルに、例えば、最も下の隣接セルに、またはアキュムレータに、シフトし得る。
【0050】
いくつかの実現例では、後処理構成要素312は、アキュムレータ310の一部であり得る。アキュムレータ310はそれ自体のレジスタを含み得るので、この例では出力レジスタ314を省略し得る。
【0051】
後処理演算が冪等(idempotent)である場合、例えばReLU演算の場合、後処理はあらゆるステップで実行され得る。この例では、後処理構成要素は、アキュムレータの間に配置され得、アキュムレータは、後処理されたデータをセルからシフトするために使用され得る。
【0052】
セルはまた、行列要素を、他のセルからシフトインし、他のセルにシフトアウトするためのバスを含む。例えば、セルは、行列要素を左隣のセルから受け取るためのバス324と、行列要素を右隣のセルにシフトするためのバス332とを含む。同様に、セルは、一番上の隣接セルから行列要素を受け取るためのバス322と、一番下の隣接セルに行列要素をシフトするためのバス328とを含む。セルはまた、一番上の隣接セルから累算値、例えば、後処理された値を受け取るためのバス330と、一番上の隣接セルから受け取られた累算値を一番下の隣接セルにシフトするためのバス334とを含む。各バスは、配線のセットとして実現し得る。
【0053】
図4は、シストリックアレイ、例えば、図2のシストリックアレイ206の内部のセルの例示的なアーキテクチャ400を示す。この例では、シストリックアレイのセルは、ニューラルネットワーク計算を実行するために使用される。これは、ニューラルネットワーク処理ユニットのシストリックアレイセルにおいて後処理回路414がどのように使用され得るかの例を提供する。
【0054】
セルは、活性化入力を記憶する活性化レジスタ406を含み得る。活性化レジスタは、シストリックアレイ内のセルの位置に応じて、左隣のセル、すなわち所与のセルの左に位置する隣接セルから、または値ローダもしくはバッファから、活性化入力を受け取り得る。セルは、重み入力を記憶する重みレジスタ402を含み得る。重み入力は、シストリックアレイ内のセルの位置に応じて、一番上の隣接セルから、または重みフェッチャインターフェイスから、転送され得る。乗算回路408は、重みレジスタ402からの重み入力を活性化レジスタ406からの活性化入力と乗算するために使用され得る。乗算回路408は、積を加算回路410に出力し得る。
【0055】
加算回路は、積とレジスタ404の和からの累算値とを加算して、新たな累算値を生成し得る。次いで、加算回路410は、新たな累算値をアキュムレータ411に送り得る。入力行列の行列要素のすべてが処理されると、アキュムレータ411は最終累算値を後処理回路414に送り得る。後処理回路414は、累算値をアキュムレータユニットに出力する前に、累算値に対して1つ以上の後処理演算を実行し得る。上述したように、後処理は、例えば、累算値を丸めること、累算値を切り捨てること、および/または累算値にReLUを適用することを含み得る。
【0056】
セルはまた、重み入力および活性化入力を、処理のために、隣接するセルにシフトし得る。たとえば、重みレジスタ402は、重み入力を、最も下の隣接セルにおける別の重みレジスタに送り得る。活性化レジスタ406は、活性化入力を、右隣のセルにおける別の活性化レジスタに送り得る。したがって、重み入力および活性化入力の両方を、後続のクロックサイクルにおいて、アレイ内の他のセルによって、再使用し得る。
【0057】
いくつかの実現例では、セルは、制御レジスタも含む。制御レジスタは、セルが重み入力または活性化入力のいずれかを隣接するセルにシフトすべきかどうかを決定する制御信号を記憶し得る。いくつかの実現例では、重み入力または活性化入力をシフトすることは、1つ以上のクロックサイクルを要する。制御信号はまた、活性化入力または重み入力が乗算回路408に転送されるかどうかを決定し得、または乗算回路408が活性化入力および重み入力で演算を行うかどうかを決定し得る。制御信号はまた、例えば、配線を使用して、1つ以上の隣接するセルに渡され得る。
【0058】
図5は、行列乗算を実行し、1つ以上の後処理演算を実行するための例示的なプロセス500のフロー図である。プロセス500は、乗算ユニットのシストリックアレイの1つ以上のセルの各々によって実行され得る。
【0059】
セルの第1の入力レジスタは、第1の入力行列を受け取る(502)。例えば、第1の入力行列は、活性化入力を表し得る。
【0060】
セルの第2の入力レジスタは、第2の入力行列を受け取る(504)。たとえば、第2の入力行列は重み入力を表し得る。
【0061】
セルの乗算回路は、入力行列の要素の積を求める(506)。たとえば、乗算回路は、一度に1つ以上の、第1の入力行列の対応する要素に、第2の入力行列の対応する要素を乗算することによって、行列-行列乗算を実行し得る。
【0062】
セルのアキュムレータは、積の合計を累算する(508)。例えば、セルの加算要素は、最新の積とアキュムレータに記憶された現在の累算値との和を求め、更新されたアキュムレータ値をアキュムレータに記憶し得る。
【0063】
セルの後処理構成要素は、累算値に対して1つ以上の後処理演算を実行する(510)。入力行列に対してすべての積が求められた後、アキュムレータは最終累算値を後処理構成要素に出力し得る。次いで、後処理構成要素は、累算値に対して丸め、切り捨て、ReLU演算、または別の適切な演算を実行し得る。次いで、後処理構成要素は、後処理された値を、セルから、たとえば出力レジスタを介して、出力し得る。
【0064】
本明細書において記載される主題および機能的動作の実施形態は、本明細書に開示される構造およびそれらの構造的等価物を含む、デジタル電子回路系において、有形で実施されるコンピュータソフトウェアもしくはファームウェアにおいて、コンピュータハードウェアにおいて、またはそれらの1つ以上の組合せにおいて実現され得る。本明細書に記載される主題の実施形態は、1つ以上のコンピュータプログラムとして、すなわち、データ処理装置による実行のために、または、データ処理装置の動作を制御するために有形の非一時的なプログラム担体上でエンコードされたコンピュータプログラム命令の1つ以上のモジュールとして実現され得る。代替的に、または加えて、プログラム命令は、データ処理装置による実行に対して好適な受信側装置への送信のために情報をエンコードするよう生成される、例えばマシンにより生成された電気信号、光信号、または電磁気信号などの、人為的に生成された伝搬される信号上でエンコードすることができる。コンピュータ記憶媒体は、機械可読記憶装置、機械可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、または、それらの1つ以上の組合せであり得る。
【0065】
本明細書に記載されるプロセスおよび論理フローは、入力データ上で動作し出力を生成することにより機能を実行するよう1つ以上のプログラマブルプロセッサが1つ以上のコンピュータプログラムを実行することによって実行され得る。プロセスおよび論理フローは、たとえばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)といった特殊目的論理回路、またはGPGPU(汎用グラフィック処理装置)によっても実行され得、装置もそれらにより実現され得る。
【0066】
コンピュータプログラムの実行に好適であるプロセッサは、例として、汎用マイクロプロセッサもしくは特殊目的マイクロプロセッサもしくはその両方または任意の種類の中央処理ユニットに基づき得る。一般に、中央処理ユニットは、リードオンリメモリもしくはランダムアクセスメモリまたはその両方から命令およびデータを受取る。コンピュータの必須の要素は、命令を実行するための中央処理ユニットと、命令およびデータを記憶するための1つ以上のメモリデバイスとである。一般に、コンピュータはさらに、たとえば磁気ディスク、光磁気ディスクまたは光ディスクといった、データを格納するための1つ以上の大容量記憶装置を含むか、当該1つ以上の大容量記憶装置からデータを受取るかもしくは当該1つ以上の大容量記憶装置にデータを転送するよう作動的に結合されるか、またはその両方を行うことにもなる。しかしながら、コンピュータは、そのようなデバイスを有する必要はない。さらに、コンピュータはたとえば、携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブル記憶装置(たとえばユニバーサルシリアルバス(USB)フラッシュドライブ)といった別のデバイスに埋め込まれ得る。
【0067】
コンピュータプログラム命令およびデータを格納するのに好適であるコンピュータ可読媒体は、例として、たとえばEPROM、EEPROMおよびフラッシュメモリデバイスといった半導体メモリデバイスを含むすべての形態の不揮発性メモリ、媒体およびメモリデバイス;たとえば内部ハードディスクまたはリムーバブルディスクといった磁気ディスク;光磁気ディスク;ならびにCD-ROMおよびDVD-ROMディスクを含む。プロセッサおよびメモリは、特殊目的論理回路によって補足され得るか、または特殊目的論理回路に組み込まれ得る。
【0068】
本明細書は多くの特定の実現例の詳細を含んでいるが、これらは如何なる発明の範囲または請求され得るものの範囲に対する限定としても解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴であり得る記載として解釈されるべきである。本明細書において別々の実施形態の文脈で記載される特定の特徴は、単一の実施形態において組合せでも実現され得る。反対に、単一の実施形態の文脈において記載されるさまざまな特徴は、複数の実施形態において別々に、または任意の好適な部分的組合わせでも実現され得る。さらに、特徴は、ある組合せにおいて作用すると上で記載され、最初はそのように請求されていさえする場合もあるが、請求される組合せからの1つ以上の特徴はいくつかの場合には当該組合せから削除され得、請求される組合せは、部分的組合わせまたは部分的組合わせの変形例に向けられ得る。
【0069】
同様に、動作が図においては特定の順に示されているが、そのような動作は、望ましい結果を達成するために、示された当該特定の順もしくは連続した順で実行される必要があると理解されるべきではなく、または、すべての示された動作が実行される必要があると理解されるべきではない。特定の状況では、マルチタスク化および並列処理化が有利である場合もある。さらに、上述の実施形態における様々なシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とすると理解されるべきではなく、記載されるプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に統合され得るかまたは複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
【0070】
主題の特定の実施形態が記載された。他の実施形態は以下の請求の範囲内にある。たとえば、請求項において記載されるアクションは、異なる順で実行され得、それでも望ましい結果を達成し得る。一例として、添付の図において示されるプロセスは、望ましい結果を達成するために、示された特定の順または連続する順であることを必ずしも必要としない。ある実現例においては、マルチタスキングおよび並列処理が有利であり得る。
図1
図2
図3
図4
図5