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

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

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

特表2024-509062シストリックアレイにおける乗算器および加算器
<>
  • 特表-シストリックアレイにおける乗算器および加算器 図1A
  • 特表-シストリックアレイにおける乗算器および加算器 図1B
  • 特表-シストリックアレイにおける乗算器および加算器 図2
  • 特表-シストリックアレイにおける乗算器および加算器 図3
  • 特表-シストリックアレイにおける乗算器および加算器 図4A
  • 特表-シストリックアレイにおける乗算器および加算器 図4B
  • 特表-シストリックアレイにおける乗算器および加算器 図5
  • 特表-シストリックアレイにおける乗算器および加算器 図6A
  • 特表-シストリックアレイにおける乗算器および加算器 図6B
  • 特表-シストリックアレイにおける乗算器および加算器 図7
  • 特表-シストリックアレイにおける乗算器および加算器 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-02-29
(54)【発明の名称】シストリックアレイにおける乗算器および加算器
(51)【国際特許分類】
   G06F 17/10 20060101AFI20240221BHJP
   G06F 7/523 20060101ALI20240221BHJP
   G06F 7/50 20060101ALI20240221BHJP
   G06F 15/80 20060101ALN20240221BHJP
【FI】
G06F17/10 S
G06F7/523
G06F7/50
G06F15/80
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023548943
(86)(22)【出願日】2022-06-30
(85)【翻訳文提出日】2023-08-29
(86)【国際出願番号】 US2022035660
(87)【国際公開番号】W WO2023287589
(87)【国際公開日】2023-01-19
(31)【優先権主張番号】17/377,743
(32)【優先日】2021-07-16
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ヨーン,ドゥ・ヒュン
(72)【発明者】
【氏名】ナイ,リーフォン
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB71
(57)【要約】
本明細書に記載する主題は、ディープニューラルネットワーク(DNN)用のアクセラレータで使用されるような、シストリックアレイによって行列乗算を実行する積和演算(MAC)ユニットの設計および使用のためのシステムおよび技法を提供する。これらのMACユニットは、シストリックアレイ内で行列乗算が実行される特定の方法を利用することができる。たとえば、行列Aが行列Bと乗算されるとき、行列Aのスカラー値aは何度も再使用され、行列Bのスカラー値bはシストリックアレイにストリーミングして、シストリックアレイ内の一連のMACユニットに転送することができ、行列乗算のために計算されたドット積の中間値ではなく最終値のみが、正しいものであり得る。これらの観察を利用するように特殊化されるMACユニットハードウェアについて、本明細書で説明する。
【特許請求の範囲】
【請求項1】
2つの数値を乗算して結果を生成する積和(MAC)ユニットであって、
第1の数値をラッチし、前記第1の数値と前記第1の数値に基づく倍数値とを出力するように構成された第1のフリップ/フロップと、
第2の数値をロードし、前記第2の数値を出力するように構成された第2のフリップ/フロップと、
前記第1のフリップ/フロップおよび前記第2のフリップ/フロップと通信する、前記第1のフリップ/フロップから前記第1の数値および前記倍数値を受け取るとともに、前記第2のフリップ/フロップから前記第2の数値を受け取り、前記第1の数値、前記倍数値および前記第2の数値に基づいて複数の部分積を出力するように構成された、マルチプレクサと、
前記マルチプレクサと通信する、前記複数の部分積と部分和とを受け取り、前記複数の部分積と前記部分和とに基づいて少なくとも2つの部分和がとられた数値を出力するように構成された、少なくとも1つの桁上げ保存加算器と、
前記少なくとも1つの桁上げ保存加算器と通信する、前記少なくとも2つの部分和がとられた数値を受け取り、前記少なくとも2つの部分和がとられた数値に対して加算演算を実行し、結果を出力するように構成された、複数の並列分割加算器と、
を備えるMACユニット。
【請求項2】
前記第2の数値が、Booth符号化を用いて符号化される、請求項1に記載のMACユニット。
【請求項3】
前記第1のフリップ/フロップと通信する、プリロードされた数値を受け取り、前記第1のフリップ/フロップに前記倍数値を出力するように構成された、少なくとも1つのハード倍数計算器をさらに備える、請求項1に記載のMACユニット。
【請求項4】
前記少なくとも1つの桁上げ保存加算器が、多入力2出力桁上げ保存加算器のみを含む、請求項1に記載のMACユニット。
【請求項5】
前記少なくとも1つの桁上げ保存加算器が、桁上げ保存加算器および多入力2出力桁上げ保存加算器を含む、請求項1に記載のMACユニット。
【請求項6】
前記多入力2出力桁上げ保存加算器と通信する、前記部分和をロードし、前記部分和を前記多入力2出力桁上げ保存加算器に出力するように構成された、第3のフリップ/フロップをさらに備える、請求項5に記載のMACユニット。
【請求項7】
前記第3のフリップ/フロップが、別のMACユニットから出力された部分和から前記部分和をロードするように構成されている、請求項6に記載のMACユニット。
【請求項8】
前記複数の並列分割加算器が、部分的に冗長な形式の数値のセグメントに対して並列に動作するように構成されている、請求項1に記載のMACユニット。
【請求項9】
前記第1のフリップ/フロップが、前記第1の数値を通常の2倍のクロック速度でラッチするように構成されている、請求項1に記載のMACユニット。
【請求項10】
前記MACユニットが、乗算器および加算器の融合バージョンを使用する拡張MACユニットである、請求項1に記載のMACユニット。
【請求項11】
前記MACユニットがシストリックアレイ内にある、請求項1に記載のMACユニット。
【請求項12】
少なくとも1つの積和演算の結果を計算する方法であって、
第1のフリップ/フロップを使用して、第1の数値と、前記第1の数値に基づく倍数値とをラッチすることと、
第2のフリップ/フロップを使用して第2の数値をロードすることと、
マルチプレクサを使用して、前記第1の数値、前記倍数値、および前記第2の数値に基づいて複数の部分積を生成することと、
少なくとも1つの桁上げ保存加算器を使用して、前記複数の部分積と部分和とを受け取ることと、
前記少なくとも1つの桁上げ保存加算器を使用して、前記複数の部分積と前記部分和とに基づいて少なくとも2つの部分和がとられた数値を生成することと、
複数の並列分割加算器を使用して、前記少なくとも2つの部分和がとられた数値を受け取ることと、
前記少なくとも2つの部分和がとられた数値に対して加算演算を実行して、結果を計算することと、を含む方法。
【請求項13】
前記第2の数値が、Booth符号化を用いて符号化される、請求項12に記載の方法。
【請求項14】
前記倍数値が、少なくとも1つのハード倍数計算器を用いて計算される、請求項12に記載の方法。
【請求項15】
前記部分和をロードすることと、
前記部分和を前記少なくとも1つの桁上げ保存加算器に出力することと、をさらに含む、請求項12に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2021年7月16日に出願された米国特許出願第17/377,743号の継続出願であり、その開示内容は参照により本明細書に組み込まれる。
【背景技術】
【0002】
背景
近年、ディープニューラルネットワーク(DNN)などのニューラルネットワーク用アクセラレータは、高密度計算のためにシストリックアレイを活用している。シストリックアレイは、密行列乗算に使用される重み保持(weight-stationary)手法を用いる積和演算(MAC)ユニットの2Dアレイであり得る。シストリックアレイは、代わりに、出力保持(output-stationary)構造または他の何らかの構造を使用するMACユニットの2Dアレイである場合もある。MACユニット内の乗算器で使用される、通常使用されるハードウェア設計は、Booth(または修正Booth(modified Booth))乗算器である。こうした乗算器は、行列Aおよび行列Bそれぞれのaおよびbなど、2つのスカラー数を、aから部分積を準備し、bをBooth符号化し、桁上げ保存加算器(CSA)木または木縮約(tree reduction)を使用するなどして部分積を2項に累積することにより、かつその結果を最終的な桁上げ伝播加算器(CPA)に出力して乗算の結果を導出することにより、乗算する。基数4Booth2乗算器を使用する場合は約n/2、基数8Booth3乗算器を使用する場合はn/3、基数16Booth4乗算器を使用する場合はn/4であり得る、部分積の数は、木縮約の複雑さを決定する際に重要である可能性がある。実際には、大部分の場合、Booth2乗算器が使用され、他の場合ではBooth3乗算器が使用される。より高基数の乗算器は、計算が困難な「ハード倍数(hard multiple)」のため、めったに使用されない可能性がある。Booth2乗算器では、部分積は、0、±a、および±2aを含む場合がある。しかしながら、Booth3乗算器では、部分積はさらに±3aおよび±4aを含む場合がある。ここで、3aは2のべき乗ではないため、他の部分積とは異なり、aとbとの乗算における他のステップが実行される前に計算されなければならないハード倍数として既知であり得る。高基数の乗算器の設計ほど、計算しなければならないハード倍数が多くなる可能性がある。ハード倍数を計算する必要があるため、既存の高基数Booth乗算器の設計は非実用的かつ非効率的なものとなる。加えて、従来のMACユニット加算器は、乗算器の積を部分和に加算し、その結果を非効率かつ最適化されていない方法でシストリックアレイの次のMACユニットに渡す可能性がある。たとえば、こうした従来の加算器の設計には、それらを行列乗算のためにシストリックアレイで実装することを考慮していない、非効率性がある可能性がある。
【発明の概要】
【0003】
概要
シストリックアレイに基づく行列乗算の効率は、DNNアクセラレータなどのアクセラレータの設計において重要である場合がある。本明細書では、シストリックアレイ用のMACユニットで使用される、より効率的かつ実用的な乗算器および加算器の設計について説明する。シストリックアレイにおける行列Aの行列Bとの行列乗算に使用される従来のMACユニットを調べると、以下の3つの観察結果を得ることができる。
【0004】
第1に、行列Aにおけるスカラー値aが、シストリックアレイ内のMACユニットのフリップ/フロップによってロードおよびラッチされると、何度も再使用される可能性がある。たとえば、通常広い可能性がある行列Bの幅と同じ回数だけ再使用される可能性がある。スカラー値aは、リロードされるまで数回再使用される可能性がある。
【0005】
第2に、行列Bにおけるスカラー値bが、シストリックアレイにストリーミングされる場合がある。特に、同じスカラー値bが、シストリックアレイのある行の一連のMACユニットに転送される可能性がある。
【0006】
第3に、シストリックアレイのある列のMACユニットが合わせて、行列Aの行と行列Bの列とを用いてドット積を計算する場合がある。ドット積計算の最終値のみを使用して、結果が導出される可能性がある。特に、シストリックアレイ内の各MACユニットにおける中間値、すなわち部分和が、最終的なドット積の計算が正しい限り、正しくなくてもよい可能性がある。
【0007】
シストリックアレイ内の従来のMACユニットの動作に関する上記の観察に基づき、シストリックアレイ内のMACユニットのための拡張乗算器および加算器を設計することができる。特に、各MACユニットにおいて従来見られる乗算器および加算器は、融合され、場合によっては追加の構成要素を使用して、上記の観察を利用することができる拡張MACユニットを生成することができる。拡張MACユニットは、より高基数の乗算を利用することができ、それにより、CSA木縮約を単純化することができる。拡張MACユニットは、従来のMACユニットと比較した場合、より高速とすることができ、より効率的とすることができ、行列乗算を実行するために最適化することができ、ハードウェアを少なくすることができ、よりエネルギー効率的とすることができる。拡張MACユニットは、DNN用のアクセラレータに使用されるようなシストリックアレイ内の行列Aの行列Bとの行列乗算に使用される場合、これらおよび他の利点を含むことができる。
【0008】
本明細書では、こうした拡張MACユニットのいくつかの構造例を提供する。概して、本明細書で説明する主題の1つの態様は、2つの数値を乗算して結果を生成する積和演算(MAC)ユニットを含む。MACユニットは、第1のフリップ/フロップ、第2のフリップ/フロップ、マルチプレクサ、少なくとも1つの桁上げ保存加算器、および複数の並列分割(segmented)加算器を含むことができる。第1のフリップ/フロップは、第1の数値をラッチし、第1の数値と第1の数値に基づく倍数値とを出力するように構成することができる。第2のフリップ/フロップは、第2の数値をロードし、第2の数値を出力するように構成することができる。マルチプレクサは、第1のフリップ/フロップおよび第2のフリップ/フロップと通信することができ、第1のフリップ/フロップから第1の数値および倍数値を受け取り、第2のフリップ/フロップから第2の数値を受け取るように構成することができる。マルチプレクサは、第1の数値、倍数値、および第2の数値に基づいて複数の部分積を出力するように構成することができる。少なくとも1つの桁上げ保存加算器は、マルチプレクサと通信することができる。少なくとも1つの桁上げ保存加算器は、複数の部分積と部分和とを受け取り、複数の部分積と部分和とに基づいて、少なくとも2つの部分和がとられた(partially summed)数値を出力するように構成することができる。複数の並列分割加算器は、少なくとも1つの桁上げ保存加算器と通信することができる。複数の並列分割加算器は、少なくとも2つの部分和がとられた数値を受け取り、少なくとも2つの部分和がとられた数値に対して加算演算を実行し、その結果を出力するように構成することができる。第2の数値は、Booth符号化を用いて符号化することができる。MACユニットは、少なくとも1つのハード倍数計算器を含むことができる。少なくとも1つのハード倍数計算器は、第1のフリップ/フロップと通信することができ、プリロードされた数値を受け取り、倍数値を第1のフリップ/フロップに出力するように構成することができる。少なくとも1つの桁上げ保存加算器は、多入力2出力桁上げ保存加算器のみを含むことができる。少なくとも1つの桁上げ保存加算器は、桁上げ保存加算器と多入力2出力桁上げ保存加算器とを含むことができる。MACユニットは、第3のフリップ/フロップを含むことができる。第3のフリップ/フロップは、多入力2出力桁上げ保存加算器と通信することができ、部分和をロードし、部分和を多入力2出力桁上げ保存加算器に出力するように構成することができる。第3のフリップ/フロップは、別のMACユニットからの部分和出力から部分和をロードするように構成することができる。複数の並列分割加算器は、部分的に冗長な形式である数値のセグメントに対して並列に動作するように構成されている。第1のフリップ/フロップは、通常のクロック速度の2倍で第1の数値をラッチするように構成することができる。MACユニットは、乗算器と加算器との融合バージョンを使用する拡張MACユニットであり得る。MACユニットは、シストリックアレイ内にあり得る。
【0009】
主題の別の態様は、積和演算(MAC)ユニットを含む。MACユニットは、第1のフリップ/フロップ、第2のフリップ/フロップ、第3のフリップ/フロップ、乗算器、および加算器を含むことができる。第1のフリップ/フロップは、第1の数値をラッチし、第1の数値を出力するように構成することができる。第2のフリップ/フロップは、第1の数値に基づいて倍数値をラッチし、倍数値を出力するように構成することができる。第3のフリップ/フロップは、第2の数値をロードし、第2の数値を出力するように構成することができる。乗算器は、第1、第2、および第3のフリップ/フロップと通信することができる。乗算器は、第1のフリップ/フロップから第1の数値を受け取り、第2のフリップ/フロップから倍数値を受け取り、第3のフリップ/フロップから第2の数値を受け取るように構成することができる。乗算器は、第1の数値、倍数値、および第2の数値に基づいて、部分積を生成するように構成することができる。乗算器は、部分積を出力するように構成することができる。加算器は、乗算器と通信することができる。加算器は、乗算器から部分積を受け取るように構成することができる。加算器は、部分積を部分和数値と加算して結果を生成するように構成することができる。MACユニットは、通常の2倍のクロック速度で第1の数値および倍数値をラッチするように構成されたダブルデータレートフリップ/フロップを含むことができる。MACユニットは、ダブルデータレートフリップ/フロップならびに第1および第2のフリップ/フロップと通信するデマルチプレクサを含むことができる。デマルチプレクサは、ダブルデータレートフリップ/フロップから第1の数値および倍数値を受け取り、第1の数値を第1のフリップ/フロップに出力し、倍数値を第2のフリップ/フロップに出力するように構成することができる。MACユニットは、第4のフリップ/フロップを含むことができる。第4のフリップ/フロップは、加算器と通信することができ、部分和数値をロードし、部分和数値を加算器に出力するように構成することができる。MACユニットは、シストリックアレイ内にあり得る。
【0010】
主題のさらに別の態様は、少なくとも1つの積和演算の結果を計算する方法を含む。第1のフリップ/フロップを使用して、第1の数値に基づいて第1の数値および倍数値をラッチすることができる。第2のフリップ/フロップを使用して、第2の数値をロードすることができる。マルチプレクサを使用して、第1の数値、倍数値、および第2の数値に基づいて複数の部分積を生成することができる。マルチプレクサから、複数の部分積を受け取ることができる。少なくとも1つの桁上げ保存加算器を使用して、部分和を受け取ることができる。少なくとも1つの桁上げ保存加算器を使用して、複数の部分積と部分和とに基づいて少なくとも2つの部分和がとられた数値を生成することができる。複数の並列分割加算器を使用して、少なくとも2つの部分和がとられた数値を受け取ることができる。少なくとも2つの部分和がとられた数値に対して加算演算を実行して、結果を計算することができる。第2の数値は、Booth符号化を用いて符号化することができる。倍数値は、少なくとも1つのハード倍数計算器を用いて計算することができる。本プロセスは、部分和をロードすることと、部分和を少なくとも1つの桁上げ保存加算器に出力することとを含むことができる。
【図面の簡単な説明】
【0011】
図1A】行列Aと行列Bとを乗算して出力行列Cを生成するために使用されるシストリックアレイ例を示す図である。
図1B】行列Aと行列Bとを乗算するために使用されるシストリックアレイで使用することができるMACユニット例を示す図である。
図2】数ビット長であり得る数値の部分的な冗長形式を示す図である。
図3】シストリックアレイ内の各MACユニットで並列分割加算器を使用して実行される演算例を示す図である。
図4A】行列Aと行列Bとを乗算して出力行列Cを生成するために使用される、別のシストリックアレイ例を示す図である。
図4B図4Aに関連して説明したシストリックアレイなど、行列Aと行列Bとを乗算するために使用されるシストリックアレイで使用することができる、MACユニットを示す図である。
図5】行列Aと行列Bとを乗算して出力行列Cを生成するために使用される、さらに別のシストリックアレイ例を示す図である。
図6A図4Aおよび/または図5に関連して説明したシストリックアレイなど、行列Aと行列Bとを乗算するために使用されるシストリックアレイで使用することができる、MACユニットを示す図である。
図6B図4Aおよび/または図5に関連して説明したシストリックアレイなど、行列Aと行列Bとを乗算するために使用されるシストリックアレイで使用することができる、MACユニットを示す図である。
図7】積和演算の結果を計算するプロセス例のフロー図である。
図8】本開示の態様による電子デバイス例のブロック図である。
【発明を実施するための形態】
【0012】
詳細な説明
図1Aは、行列A110と行列B120とを乗算して出力行列C130を生成するために使用されるシストリックアレイ例100を示す。特に、シストリックアレイ100は、行列C130を生成する行列A110と行列B120との密行列乗算に使用される重み保持手法を有する積和(MAC)ユニットの2Dアレイであり得る。いくつかの例では、シストリックアレイ100は、4×4のサイズであり得る。行列C130は、行列A110の各行および行列B120の各列のドット積を計算することによって導出することができる。したがって、行列C130は、シストリックアレイ100の出力であり得る。シストリックアレイ100の各エントリは、ドット積計算を実行して出力行列C130を生成するMACユニットを表すことができる。行列B120内のスカラー値は、いくつかのMACユニットによって使用されるように、シストリックアレイ100内を水平方向に移動することができる。シストリックアレイ100内のMACユニット間の中間値は、既知でなくてもよい。
【0013】
図1Bは、図1Aに関連して説明したシストリックアレイなど、行列Aと行列Bとを乗算するために使用されるシストリックアレイで使用することができる、MACユニット例150を示す。MACユニット150は、フリップ/フロップ152、154、156、および160と、乗算器158と、加算器162とを含むことができる。図1Bはまた、追加のフリップ/フロップ170、172、および174も示し、これらは、シストリックアレイの他のMACユニット内にあり得る。
【0014】
フリップ/フロップ152および154は、行列Aのスカラー値をプリロードおよびラッチすることができる。特に、フリップ/フロップ152は、行列Aのスカラー値aの値をプリロードするように使用することができ、この値をフリップ/フロップ154に渡すことができる。フリップ/フロップ154は、スカラー値aをロードおよびラッチし、この値がリロードされるまで、計算においてこの値を数回再使用するように使用することができる。フリップ/フロップ156は、行列Bのスカラー値bをロードするように使用することができる。フリップ/フロップ156にロードされたスカラー値bは、シストリックアレイのある行にあるMACユニットの各々において逐次使用することができる。乗算器158は、フリップ/フロップ154においておよびフリップ/フロップ156においてそれぞれロードおよび/またはラッチされた2つのスカラー数値aおよびbを乗算することができる。特に、乗算器158は、フリップ/フロップ154および156からそれぞれスカラー値aおよびbを入力として受け取ることができ、これらのスカラー値を乗算することができる。乗算器158は、乗算の結果を加算器162に出力することができる。フリップ/フロップ160は、たとえば、シストリックアレイ内の先行するMACユニットによって出力されたものであり得る部分和をロードおよび/またはラッチすることができる。加算器162は、乗算器158の出力と、フリップ/フロップ160にロードおよび/またはラッチされた部分和とを入力として受け取ることができ、これらの入力の和を部分和出力として出力することができ、この部分和出力は、シストリックアレイ内の下流のMACユニットのフリップ/フロップ174などのフリップ/フロップによって格納することができる。追加のフリップ/フロップ170、172、および174は、シストリックアレイ内の他のMACユニットにあり得る。中間結果は、MACユニット内の加算器162によって出力される部分和であり得る。この部分和は、シストリックアレイの最下部にあるMACユニットと関連付けられない場合があり、最終結果として使用されない場合がある。代わりに、最終結果は、シストリックアレイの最下部に位置するMACユニットの加算器によって出力することができる。
【0015】
シストリックアレイ内の従来のMACユニットの動作に関して、上記の観察に基づいて、シストリックアレイ内のMACユニットのための拡張乗算器および加算器を設計することができる。特に、シストリックアレイ内でデータがいかに入力され、使用および/または再使用されるかを活用するために、MACユニットに対して設計最適化を行うことができる。いくつかの例では、乗算器および加算器の設計に対する拡張は、一般的な目的に適用可能であり得る。いくつかの例では、乗算器および加算器の設計に対する拡張は、一般的な目的には適用可能ではなくてもよい。
【0016】
シストリックアレイ内のMACユニットにおいて、Booth3またはBooth4乗算器など、高基数乗算器を使用する際の障害のうちの1つは、ハード倍数であり得る。これは、上述したように、こうしたハード倍数は、スカラー値aとスカラー値bとの乗算における他のステップが実行される前に計算しなければならない可能性があるためである。上記の第1の観察に基づき、ハード倍数は、行列Aの各スカラー値aをプリロードするときに計算することができる。計算されたハード倍数は、新しいスカラー値aがMACユニットによってプリロードされるまで、数回使用される場合がある。計算されたハード倍数は、乗算のクリティカルパスから外れる可能性があり、いくつかの例では、マルチサイクル演算で実装することができる。したがって、シストリックアレイ内のMACユニットでは、高基数Booth乗算器を使用することができる。高基数Booth乗算器は、クロックサイクルごとにハード倍数計算を実行しなくてもよく、乗算のクリティカルパスで使用するためのハード倍数計算を実行しなくてもよい。高基数Booth乗算器は、生成する部分積が少なくなるため、従来の乗算器よりも高速であり得る。
【0017】
上記の第2の観察に基づいて、行列Bのスカラー値bを、最初にBooth符号化することができる。スカラー値は、Booth符号化されると、シストリックアレイのMACユニットにストリーミングすることができる。シストリックアレイにストリーミングされる前にスカラー値bをBooth符号化することにより、各MACユニット内の乗算器によって実行される乗算のクリティカルパスからBooth符号化関数をオフロードすることができる。
【0018】
シストリックアレイ内の各MACユニットは、各MACユニット内の乗算器からの積を上のMACユニット/シストリックアレイセルからの部分和に加算する加算器を使用することができる。次いで、MACユニットは、その結果を下のMACユニット/シストリックアレイセルに渡すことができる。上記の第3の観察に基づき、各MACユニット内の加算器を単純化することができる。特に、各加算器に部分的に冗長な形式を使用することができる。
【0019】
図2は、数ビット長であり得る数値200の部分的に冗長な形式を示す。部分的に冗長な形式では、数値200は、いくつかのより小さいセグメントを使用して表すことができる。たとえば、図2に示すように、数値200が24ビットの整数値である場合、セグメント202、204、206、208、210、および212などの6つの4ビットセグメントとして表すことができ、最後のセグメントを除く各セグメントは、次のセグメントへの桁上げ214、216、218、220、および222など、それぞれの1ビット桁上げを含むことができる。最後のセグメントは、桁上げを含まないか、または使用しない。したがって、24ビットの整数値は、合計6×4+5ビット=29ビットで表すことができる。こうした冗長形式は、各MACユニット内の部分和に使用することができる。これは、垂直方向に累積される部分和に対するものであってもよく、各MACユニットにおいて、8ビット×8ビットの乗算が実行されている場合には16ビットの数値など、乗算器からの積を加算することができる。
【0020】
図1Bに関連して説明した加算器162など、従来のMACユニット内の各加算器は、並列分割加算器に置き換えることができる。数値200などの数値の部分的に冗長な形式に基づいて、適切な数の分割加算器が、各MACユニット内で並列に動作することができる。
【0021】
たとえば、図2の数値200の場合、数値200に関連する各セグメントに1つずつ、6つの4ビット加算器を並列に動作させることができる。上のMACユニット/シストリックアレイセル(ある場合)からの桁上げは、シストリックアレイ内の各MACユニットによって実行される加算演算で使用することができる。各MACユニットによって出力される桁上げは、下のMACユニット/シストリックアレイセル(ある場合)に引き渡することができる。シストリックアレイの最下部では、部分的に冗長な形式を非冗長な形式に変換することができる。
【0022】
図3は、シストリックアレイ内の各MACユニット内で並列分割加算器を使用して実行される演算例300を示す。図3において、並列分割加算器は、各MACユニット内の乗算器からの積を、上のMACユニット/シストリックアレイセルからの部分和に加算するように使用される。演算例300では、2つの8ビットセグメントを含む各MACユニット内の乗算器からの積である16ビットの数値310が、3つの8ビットセグメントを含む部分的に冗長な形式の24ビットの部分和320に加算される。数値310と部分和320とは、3つの8ビット並列分割加算器を使用して加算される。
【0023】
16ビットの数値310は、2つのセグメントp1およびp0を使用して表すことができる。数値p1:p0は、16ビットの積であり得る。各シストリックアレイMACユニットにおいて、この数値は、その乗算器から出力される積であり得る。さらに、部分的に冗長な形式の24ビットの部分和320は、セグメントs2、s1、およびs0、ならびに桁上げc2およびc1を使用して表すことができる。数値s2:s1:s0およびc2:c1は、2つの桁上げビットとともに3つの8ビットセグメントを使用して、部分的に冗長な形式で24ビットの部分和を表すことができる。部分和は、シストリックアレイ内の各MACユニットの上のMACユニット/シストリックアレイセルから受け取ることができる。
【0024】
16ビットの積数値310および部分和320などの2つの数値は、複数の並列分割加算器を使用して加算することができる。たとえば、16ビットの積数値310と部分和320とは、3つの8ビット並列分割加算器340、350、および360を使用して加算することができる。図示しないが、シストリックアレイ内の各MACユニットの上のMACユニット/シストリックアレイセルからの桁上げを受け取り、並列分割加算器のうちの最初のもの340への入力として使用することができる。最後の並列分割加算器によって出力される可能性がある桁上げは、次のセグメントに伝播しなくてもよく、むしろ、各MACユニットの下のMACユニット/シストリックアレイセルに渡してもよい。並列分割加算器340、350、および360の出力は、桁上げ376および378とともに、それぞれセグメント370、372、および374であり得る。セグメント370、372、および374は桁上げ376、378と合わせて、並列分割加算器を使用して実行される演算300の最終結果380を形成することができる。
【0025】
演算300は、乗算器からの積である16ビットの数値310が24ビットの部分和320に加算されることを示すが、任意の長さの数値または部分和を同様の方法で加算することができる。さらに、図3には8ビットのセグメントおよび特定の数の桁上げを示すが、図3と同様の方法で、任意の実質的に等しいサイズのセグメントおよび任意の数の桁上げを使用することができる。加えて、図3には3つの並列分割加算器を示すが、図3と同様の方法で、それより多いかまたは少ない数の並列分割加算器を使用することができる。
【0026】
各MACユニット内の乗算器によって桁上げ保存加算器(CSA)を使用することができる。CSAは、乗算演算の一部として3つ以上の入力数値の和を計算する、乗算器において使用することができるデジタル加算器であり得る。CSAは2つの数値を出力することができ、これらの数値の和をとり、和をとるすべき元の数値の最終結果を生成することができる。CSAは、木に関連付けることができ、この木は、元の和の最終結果を生成するために使用される2つの数値を出力するためにCSAが実行すべき加算のいくつかのレベルを有することができる。各MACユニットの乗算器および加算器において、セグメントが合わせて加算される際に桁上げビットを適切に計算するために、桁上げ伝播加算器(CPA)を使用することができる。
【0027】
図4Aは、行列A410と行列B420とを乗算して出力行列C430を生成するために使用されるシストリックアレイ例400を示す。特に、シストリックアレイ400は、行列C430を生成する行列A410と行列B420との密行列乗算に使用される重み保持手法を有する積和(MAC)ユニットの2Dアレイであり得る。いくつかの例では、シストリックアレイ400は、4×4のサイズであり得る。図4Aは、Boothエンコーダ440および最下部CPA445も示す。Boothエンコーダ440を使用して、行列B420のスカラー値bをBooth符号化することができる。これらのスカラー値は、Booth符号化されると、シストリックアレイ400内のMACユニットにストリーミングすることができる。シストリックアレイ400にストリーミングされる前にスカラー値bをBooth符号化することにより、Booth符号化関数を、各MACユニット内の乗算器のクリティカルパスからオフロードすることができる。Boothエンコーダ440の出力b値、および行列A410のスカラー値は、シストリックアレイ400内の各MACユニット内の融合された乗算器および加算器への入力として使用することができる。融合された乗算器および加算器は、少なくとも部分的に、行列A410の各行と行列B420の各列とのドット積を計算する際に使用することができる。CPA445は、上述のしたCPAとして実装された複数の並列分割加算器と同様に動作することができる。シストリックアレイ400の最下部のMACユニット内の融合された乗算器および加算器の出力を最下部CPA445に出力して、行列C430の値を生成するために加算することができる。
【0028】
図4Bは、図4Aに関連して説明したシストリックアレイなど、行列Aと行列Bとを乗算するために使用されるシストリックアレイにおいて使用することができる、MACユニット450を示す。MACユニット450は、図4Aに関連して説明したシストリックアレイ400などのシストリックアレイにおいて使用することができる。MACユニット450は、図1BのMACユニット150などの従来のMACユニットに見られる従来の乗算器および加算器の融合バージョンを含むことができる。MACユニット450は、フリップ/フロップ452、454、458、および462と、ハード倍数計算器456と、マルチプレクサ460と、CSA木470と、3入力2出力CSA472と、並列分割加算器480とを含むことができる。
【0029】
フリップ/フロップ452および454は、行列Aのスカラー値をプリロードおよびラッチするように使用することができる。特に、フリップ/フロップ452は、行列Aのスカラー値aの値をプリロードし、この値をフリップ/フロップ454に出力するように使用することができる。フリップ/フロップ454は、フリップ/フロップ452からのスカラー値aをロードおよびラッチし、この値がリロードされるまで、計算においてこの値を数回再使用するように使用することができる。したがって、スカラー値aをロードおよびラッチすることは、1クロックサイクルまたはわずか数クロックサイクルのみを要する可能性がある。フリップ/フロップ454は、受け取った値をハード倍数計算器456に出力することができる。ハード倍数計算器456は、フリップ/フロップ452および454によってプリロードおよびラッチされたスカラー値aを受け取ることができる。ハード倍数計算器456は、ハード倍数を事前計算するために、受け取った数値に1つまたは複数の整数の倍数を乗算し、乗算の結果をフリップ/フロップ458に出力することができる。特に、ハード倍数計算器456は、スカラー値aのハード倍数を出力することができる。aの各ハード倍数は、2のべき乗ではない任意の倍数であり得る。たとえば、ハード倍数計算器456は、倍数±3a、±5a、および/または±7aをフリップ/フロップ458に出力することができる。ハード倍数の事前計算は、1クロックサイクルまたは数クロックサイクルで行うことができ、毎クロックサイクルで行う必要はない可能性がある。したがって、ハード倍数の計算は乗算のクリティカルパスから外れることができる。フリップ/フロップ458は、フリップ/フロップ454からおよび/またはハード倍数計算器456からスカラー値aを受け取ることができる。加えて、フリップ/フロップ458は、ハード倍数計算器456によって出力された値を受け取ることができる。フリップ/フロップ458は、受け取った値をロードおよび/またはラッチし、これらの値をマルチプレクサ460に出力することができる。
【0030】
フリップ/フロップ462は、行列BのBooth符号化されたスカラー値bをロードするように使用することができる。たとえば、行列Bのスカラー値bは、8の基数を使用するBooth符号化などによってBooth3符号化して、結果をフリップ/フロップ462にロードすることなどにより、Booth3符号化およびロードすることができる。フリップ/フロップ462にロードされたBooth符号化されたスカラー値bは、シストリックアレイのある行にあるMACユニットの各々で、逐次使用することができる。フリップ/フロップ462は、bのロードされたBooth符号化された値をマルチプレクサ460に出力することができる。
【0031】
マルチプレクサ460は、aの値、bのBooth符号化された値、および受け取ったaのハード倍数を入力とすることができ、CSA木470に複数の部分積を出力することができる。たとえば、マルチプレクサ460は、フリップ/フロップ458からaの値、ハード倍数計算器456からaのハード倍数の値、およびフリップ/フロップ462からbのBooth符号化された値を受け取ることができ、3つの部分積をCSA木470に出力することができる。マルチプレクサ460を使用して、たとえば、入力のBooth3乗算を実装することができる。
【0032】
CSA木470は、多入力2出力CSAの第1のレベルのみを含む可能性がある、従来のCSAの改変バージョンであり得る。これは、CSA木470が複数の入力を受け入れ、2つの数値を出力することを意味することができる。たとえば、CSA木470は、3入力2出力CSAの第1のレベルを含むことができ、3つの入力数値を受け入れることができ、2つの数値を出力することができる。いくつかの例では、乗算器によって乗算することができるビットの数に応じて、3入力2出力および/または4入力2出力のCSAなど、CSA木と称することができる多レベルのCSAがあってもよい。CSA木470によって出力される数値は、各々、部分的に冗長な形式であり得る。これらの数値は、上のMACユニット/シストリックアレイセルからの部分和の部分的に冗長な形式に加算することができる。MACユニット450の一部であってもまたはなくてもよいフリップ/フロップ474は、MACユニット450の上のMACユニット/シストリックアレイセルからの部分和をロードおよび/またはラッチすることができる。フリップ/フロップ474は、この値を3入力2出力CSA472などの多入力2出力CSAに出力することができる。
【0033】
MACユニット450では、従来の乗算器の積を表す場合がある、CSA木によって出力された数値の部分的に冗長な形式を、上のMACユニット/シストリックアレイセルからの部分和の部分的に冗長な形式に加算することができる。この加算は、3入力2出力CSA472など、多入力2出力CSAを用いて実行することができる。さらに、従来のMACユニット乗算器と加算器との融合バージョンを含むMACユニット450では、従来の乗算器で使用されるCPAを使用しない、すなわちスキップすることができる。3入力2出力CSA472によって実行されるこの加算演算は、図3に関連して説明した演算300と同様の方法で実行することができる。たとえば、CSA木470によって出力される部分的に冗長な形式の2つの16ビットの数値を、フリップ/フロップ474からの部分和の部分的に冗長な形式の24ビットの数値および5つの桁上げビットに加算することができる。この結果は、3つの数値を入力として受け入れ、2つの数値を出力することができる、3入力2出力CSA472を使用して、縮約することができる。特に、乗算器の出力を表すことができる2つの16ビットの数値など、CSA木470からの2つの数値は、24ビットの数値などの部分和がとられた数値とともに3入力2出力CSA472に入力することができる。3入力2出力CSA472の出力は、2つの数値であり得る。たとえば、2つの16ビットの数値と24ビットの数値とが加算される場合、3入力2出力CSA472は、出力として2つの24ビットの数値を生成することができる。いくつかの例では、CSA木470と3入力2出力CSA472とを結合して、単一の4入力2出力CSAにしてもよく、これを、CSA木470および3入力2出力CSA472と置き換えてもよい。結果として得られる4入力2出力CSAは、CSA木470が通常受け取るのと同じ3つの入力と、3入力2出力CSA472に通常入力される部分和がとられた数値とを入力として受け入れることができる。結果として得られる4入力2出力CSAは、3入力2出力CSA472によって通常出力される2つの数値を出力することができる。
【0034】
3入力2出力CSA472によって出力される数値は、たとえば、いくつかの並列分割加算器480によって加算することができる。シストリックアレイの最下部にあるMACユニットの場合、並列分割加算器は、最下部CPAとして実装することができる。たとえば、Booth3符号化および乗算が実行される場合、6つの4ビット並列分割加算器を使用して、この加算を実行することができる。この加算は、MACユニット450の出力を表す、並列分割加算器480によって出力される数値を生成することができる。たとえば、MACユニット450によって出力される数値は、部分的に冗長な形式で5つの桁上げビットとともに24ビットを含むことができる。
【0035】
MACユニット450では、MACユニットにおいて従来見られる乗算器と加算器とを融合して、拡張MACユニット設計を生成することができる。拡張MACユニット設計は、従来のMACユニット設計と比較した場合、行列乗算を実行するのにより効率的であるものとしかつ最適化することができ、ハードウェアの数を少なくすることができ、よりエネルギー効率的であり得る。拡張MACユニット設計は、DNN用のアクセラレータに使用されるようなシストリックアレイにおける行列乗算に使用される場合、これらおよび他の利点を含むことができる。
【0036】
MACユニット450に関連する上記の例は、Booth3符号化および乗算を使用するものとして説明することができる。しかしながら、24ビットの数値の別の24ビットの数値との乗算など、乗算および/または累積すべき数値の精度がより高い場合、MACユニットに対するより高基数のBooth設計を使用することができる。いくつかの例では、こうした高基数のBooth設計が使用される場合、ハード倍数計算は、より複雑さを伴う可能性があるが、行列Aの次のスカラー値aをプリロードおよびラッチすることによって達成することができる。代替的にまたはさらに、ハード倍数計算をマルチサイクル演算として実行することができる。MACユニットに対するより高基数のBooth設計は、CSA木470の高さを増加させ、場合によっては並列分割加算器480を調整し、さらにMACユニットの構成要素によって入出力される数値の部分的に冗長な形式を調整することも含むことができる。たとえば、並列分割加算器480は、48ビットの加算を実行するように使用される8つの6ビット加算器を含むことができる。
【0037】
MACユニット内の乗算器の複雑性は、nビット×nビットの乗算に対してO(n2)と表記することができる。乗算演算および乗算器までのMACの複雑性は、乗算に関与する被乗数の数値および乗数の数値によって影響を受ける可能性がある。特に、行列Aのスカラー値aなどの被乗数の精度は、ハード倍数計算、桁上げ保存加算器の木縮約の幅、および最終的な桁上げ伝播加算器に影響を与える可能性がある。行列Bのスカラー値bなど、被乗数で乗算されるもの、すなわち乗数の精度は、桁上げ保存加算器の木縮約の高さに影響を与える可能性がある。上述したように、いくつかの例では、ハード倍数は事前に計算することができる。こうした例では、縮約木の幅は、クリティカルパスではなく、大部分木の領域にあり得る。加えて、こうした例では、最終的な桁上げ伝播加算器を並列分割加算器と混在させることができる。したがって、こうした例では、行列Aのスカラー値aの精度は、行列Bのスカラー値bの精度ほど著しくは、計算のレイテンシに影響を与えない可能性がある。したがって、いくつかの例では、シストリックアレイに入力される値/数値に非対称精度を使用することができ、行列Bではなく行列Aにより高い精度を使用することができる。これらの例では、より高い精度の数値を含む行列を行列Aとして定義することができる。たとえば、行列Aには16ビットまたは32ビットの整数を使用することができ、行列Bは8ビットの整数を含むことができる。
【0038】
前述の例では整数演算の使用を想定したが、図4Aおよび図4Bに関連してそれぞれ説明したシストリックアレイ400およびMACユニット450など、各MACユニットを備えたシストリックアレイを使用して、浮動小数点演算を実行することができる。上記で提案したような技法は、整数演算に関して上記で説明したのと同様の方法で、仮数乗算のための浮動小数点演算に適用することができる。上記で提案したような技法はまた、整数演算に関して上記で説明したのと同様の方法で、ブロック浮動小数点演算および関連する数値フォーマットにも適用することもできる。図2に関連して説明した部分的に冗長な形式の数値200などの部分的に冗長な形式の数値、および図4Bに関連して説明した並列分割加算器480などの並列分割加算器もまた、MACユニットによる浮動小数点演算を実行するのに使用することができる。しかしながら、こうした浮動小数点演算を実行するためには、MACユニットの設計に追加の変更が必要になる場合がある。
【0039】
図5は、行列A510と行列B520とを乗算して出力行列C530を生成するために使用されるシストリックアレイ例500を示す。特に、シストリックアレイ500は、行列C530を生成する行列A510と行列B520との密行列乗算に使用される重み保持手法を有する積和(MAC)ユニットの2Dアレイであり得る。いくつかの例では、シストリックアレイ500は、4×4のサイズであり得る。図5は、ハード倍数計算器540も示す。ハード倍数計算器540は、行列A510のスカラー値aを受け取ることができる。ハード倍数計算器540は、1つまたは複数のハード倍数を事前計算するために、受け取った数値に1つまたは複数の整数の倍数を乗算し、乗算の結果をシストリックアレイ500内のMACユニットに出力することができる。特に、ハード倍数計算器540は、各々、値aの、2のべき乗ではない任意の倍数であり得るハード倍数を出力することができる。たとえば、ハード倍数計算器540は、倍数±3a、±5a、および/または±7aを出力することができる。ハード倍数の事前計算は、1クロックサイクルまたは数クロックサイクルで行うことができ、数サイクルにわたって再計算する必要はない可能性がある。したがって、ハード倍数の事前計算は、毎クロックサイクルで行う必要はない可能性があり、これにより、計算効率を高めることができる。したがって、ハード倍数の計算は、乗算のクリティカルパスから外れることができる。行列A510のスカラー値、ハード倍数計算器540によって出力されるハード倍数、および行列B520のスカラー値bは、シストリックアレイ500内の各MACユニット内の融合された乗算器および加算器への入力として使用することができる。融合された乗算器および加算器は、行列C530の行および列を生成するために、行列A510の各行および行列B520の各列のドット積を少なくとも部分的に計算する際に使用することができる。
【0040】
MACユニットで使用される高基数Booth乗算器の面積オーバーヘッドは、ハード倍数計算器を共有することによって低減させることができる。1つの設計技法は、シストリックアレイ500の最上部にあるように示されているハード倍数計算器540など、シストリックアレイの最上部にハード倍数計算器を配置することであり得る。このハード倍数計算器は、行列A510がロードされるときに使用することができる。したがって、シストリックアレイ内の各MACユニットは、ハード倍数計算器を含まなくてもよい。この技法を用いて、計算されたハード倍数をシストリックアレイ内のMACユニットに渡すために追加の配線が使用される場合がある。ハード倍数計算器をシストリックアレイの最上部に配置することにより、シストリックアレイ内のMACユニットの各々機能は変化しない可能性がある。たとえば、各MACユニットで計算を実行するために使用することができる任意のソフトウェアは、行列Aがシストリックアレイに押し込まれる前に、ハード倍数が計算されるか否かを知る必要はない。より詳細に説明するように、後の図6Aは、計算されたハード倍数を渡すために使用することができる追加の配線とともに、シストリックアレイの最上部にハード倍数計算器を使用することができる技法を実証する。
【0041】
代替的に、行列A510のスカラー値aのリロードは、通常のクロック速度よりも速い速度であってもよい。たとえば、Booth3乗算器では、aおよび3aを最初にプッシュしてもよく、その後、これらの値によるフリップ/フロップのリロードを、通常のクロック速度の2倍で行ってもよい。たとえば、aのスカラー値はクロックの立ち上がりエッジでリロードしてもよく、3aはクロックの立ち下がりエッジでロードしてもよい。この例では、3aなどのハード倍数を計算するために使用することができるハード倍数計算器ロジックも、このより高速なクロック速度に合わせて設計してもよい。より詳細に説明するように、後の図6Bは、通常のクロックレートよりも速いクロックレートでaのスカラー値をリロードすることができる技法を実証する。
【0042】
別の設計技法は、シストリックアレイ内の隣接するMACユニットの一部でハード倍数計算器を共有することであり得る。たとえば、シストリックアレイ内の垂直方向に隣接する2つのMACユニットまたは2×2のMACユニットが、1つのハード倍数計算器を共有することができる。この技法を使用して、局所配線であり得る追加の配線を使用してハード倍数を分配することができる。この技法を使用して、aのスカラー値およびaのハード倍数を、代替的に、より高いクロックレートでリロードすることができる。
【0043】
図6Aは、行列Aと行列Bとを乗算するために使用される、シストリックアレイで使用することができるMACユニット600を示す。たとえば、MACユニット600は、図4Aおよび/または図5に関連して説明したシストリックアレイ内にあり得る。MACユニット600は、フリップ/フロップ610、612、614、616、618、および622と、乗算器620と、加算器630とを含むことができる。図6Aは、追加のフリップ/フロップ640、642、644、および648も示し、これらは、シストリックアレイ内の他のMACユニット内にあり得る。
【0044】
フリップ/フロップ610および612は、行列Aのスカラー値をプリロードおよびラッチすることができる。特に、フリップ/フロップ610は、行列Aのスカラー値aをプリロードするように使用することができ、この値をフリップ/フロップ612に渡すことができる。フリップ/フロップ612は、スカラー値aをロードおよびラッチし、この値がリロードされるまで、計算においてこの値を数回再使用するように使用することができる。フリップ/フロップ614および616は、行列Aのスカラー値のハード倍数をプリロードおよびラッチすることができる。特に、フリップ/フロップ614は、行列Aのスカラー値aの事前計算されたハード倍数をプリロードするように使用することができ、これらの値をフリップ/フロップ616に渡すことができる。フリップ/フロップ616は、スカラー値aの事前計算されたハード倍数をロードおよびラッチし、これらの値がリロードされるまで、計算においてこれらの値を数回再使用するように使用することができる。フリップ/フロップ618は、行列Bのスカラー値bをロードするように使用することができる。フリップ/フロップ618にロードされたスカラー値bは、シストリックアレイのある行にあるMACユニットの各々において、逐次使用することができる。
【0045】
乗算器620は、フリップ/フロップ612および/またはフリップ/フロップ616に、ならびにフリップ/フロップ618にロードおよび/またはラッチされた値を乗算することができる。特に、乗算器620は、フリップ/フロップ612、616、および/または618から、スカラー値a、および/またはスカラー値aのハード倍数、およびスカラー値bを入力として受け取ることができ、これらの値のうちの1つまたは複数を乗算して部分積を生成することができる。乗算器620は、乗算の結果をMACユニット600に含まれる加算器630に出力することができる。フリップ/フロップ622は、シストリックアレイ内の先行するMACユニットによって出力された可能性のある部分和をロードおよび/またはラッチすることができる。加算器630は、乗算器620の出力と、フリップ/フロップ622にロードおよび/またはラッチされた部分和とを入力として受け取ることができ、これらの入力の和を部分和出力として出力することができる。この出力は、シストリックアレイ内の下流のMACユニットの、フリップ/フロップ644などのフリップ/フロップによって格納することができる。追加のフリップ/フロップ640、642、644、および648は、シストリックアレイ内の他のMACユニットにあり得る。シストリックアレイの最下行にないMACユニット内の加算器630によって出力される部分和であり得る中間結果は、最終結果として使用されない可能性がある。その代わりに、最終結果は、シストリックアレイの最下行にあるMACユニットの加算器によって出力することができる。
【0046】
図6Bは、行列Aと行列Bとを乗算するために使用される、シストリックアレイで使用することができるMACユニット650を示す。たとえば、MACユニット650は、図4Aおよび/または図5に関連して説明したシストリックアレイにあり得る。MACユニット650は、デマルチプレクサ662と、フリップ/フロップ660、664、666、668、および672と、乗算器670と、加算器680とを含むことができる。図6Aは、追加のフリップ/フロップ690、692、および694も示し、これらはシストリックアレイ内の他のMACユニットにあり得る。
【0047】
フリップ/フロップ660は、行列Aのスカラー値と、これらのスカラー値のハード倍数とをプリロードおよび/またはラッチすることができる。特に、フリップ/フロップ660は、行列Aのスカラー値aをプリロードするとともに、値aの事前計算されたハード倍数をプリロードするように使用することができ、これらの値をデマルチプレクサ662に渡すことができる。フリップ/フロップ660は、ダブルデータレートで動作することができ、したがって、ダブルデータレートフリップ/フロップであるとみなすことができる。デマルチプレクサ662は、スカラー値a、および事前に計算されたaのハード倍数をロードおよびラッチし、これらの値をそれぞれフリップ/フロップ664および666に出力するように使用することができる。フリップ/フロップ664は、スカラー値aをロードおよびラッチし、この値がリロードされるまで、計算においてこの値を数回再使用するように使用することができる。フリップ/フロップ666は、スカラー値aの事前計算されたハード倍数をロードおよびラッチし、これらの値をリロードされるまで計算で数回再使用するように使用することができる。フリップ/フロップ668は、行列Bのスカラー値bをロードするように使用することができる。フリップ/フロップ668にロードされたスカラー値bは、シストリックアレイのある行にあるMACユニットの各々において、逐次使用することができる。
【0048】
乗算器670は、フリップ/フロップ664および/またはフリップ/フロップ666に、ならびにフリップ/フロップ668にロードおよび/またはラッチされた値を乗算することができる。特に、乗算器670は、フリップ/フロップ664、666、および/または668から、スカラー値a、および/またはスカラー値aのハード倍数、ならびにスカラー値bを入力として受け取ることができ、これらの値のうちの1つまたは複数を乗算して部分積を生成することができる。乗算器670は、乗算の結果をMACユニット650に含まれる加算器680に出力することができる。フリップ/フロップ672は、たとえば、シストリックアレイ内の先行するMACユニットによって出力された可能性のある部分和をロードおよび/またはラッチすることができる。加算器680は、乗算器670の出力と、フリップ/フロップ672にロードおよび/またはラッチされた部分和とを入力として受け取ることができ、これらの入力の和を部分和出力として出力することができる。この出力は、シストリックアレイ内の下流のMACユニットの、フリップ/フロップ692などのフリップ/フロップによって格納することができる。追加のフリップ/フロップ690、692、および694は、シストリックアレイ内の他のMACユニットにあり得る。シストリックアレイの最下行にないMACユニット内の加算器680によって出力される部分和である可能性のある中間結果は、最終結果として使用されない可能性がある。その代わりに、最終結果は、シストリックアレイの最下行にあるMACユニットの加算器によって出力することができる。
【0049】
行列Bのbの符号化されていないスカラー値の代わりに、Booth符号化されたスカラー値bをストリーミングすることにより、シストリックアレイ内の各MACユニットの配線の数が増加する可能性がある。たとえば、Booth3符号化を使用する8ビット乗算は、各々が5本の配線を使用する、3組のBooth符号化を使用する可能性がある。この例では、a、2a、3a、4a、および符号に配線を使用することができ、a、2a、3a、4aはワンホットエンコードされ、0を除き、これら4つはゼロであり得る。この例では、符号化されていない8ビットデータに対して配線が8本であるのと比較して、15本の配線が使用される可能性がある。配線の数を減少させる1つの方法は、別の符号化を使用することであり得る。たとえば、Booth3符号化に、4ビットの2の補数符号付き表現を使用することができる。この例では、-4と+4との間のすべてのあり得る場合をカバーするために、-8と+7との間の数値を使用することができる。この例では、図4Bに関連して説明したMACユニット450などの各MACユニットは、図4Bに関連して説明したマルチプレクサ460などの各マルチプレクサを駆動するためにデコーダを使用することができる。行列Bのスカラー値bを入力する別の手法は、図6Bを参照して上述したものと同様の、より高いデータレートを使用することであり得る。この手法を使用して、行列Aのスカラー値aおよび関連するハード倍数値は、ダブルデータレートでプリロードされる。たとえば、この手法を使用すると、8本の配線を使用して、通常の2倍のクロックレート、すなわち2倍のデータレートで行列BのBooth符号化されたスカラー値bを転送および/またはロードすることができる。
【0050】
いくつかの例では、出力保持シストリックアレイを使用することができる。出力保持シストリックアレイは、各MACユニット内に乗算器のオペランドを保持/格納しなくてもよい。加えて、上述したものと同様に、事前計算されたハード倍数を、出力保持シストリックアレイ内で垂直方向下方に渡すことができる。これらの例では、行列BのBooth符号化されたスカラー値bをストリーミングすることができる。さらに、これらの例では、並列分割加算器とともに部分的に冗長な形式の数値を使用することができる。
【0051】
図7は、少なくとも1つの積和演算の結果を計算するプロセス例700のフロー図である。プロセス700は、図4B図6A、および図6Bに関連して説明したMACユニットなどのMACユニットのさまざまな要素によって実行することができる。
【0052】
ブロック710では、図4Bに関連して説明したフリップ/フロップ458などの第1のフリップ/フロップを使用して、第1の数値、および第1の数値に基づく倍数値をラッチすることができる。たとえば、行列Aのスカラー値a、およびハード倍数の数値をラッチすることができる。ラッチされた数値は、リロードおよび/または再ラッチされるまで、シストリックアレイ内の計算において数回再使用することができる。これらのラッチされた数値は、マルチプレクサに出力することができる。
【0053】
ブロック720において、図4Bに関連して説明したフリップ/フロップ462などの第2のフリップ/フロップを使用して、第2の数値をロードすることができる。たとえば、行列BのBooth符号化されたスカラー値bをロードすることができる。ロードされた数値は、MACユニットのシストリックアレイ内にストリーミングすることができる。
【0054】
ブロック730において、図4Bに関連して説明したマルチプレクサ460などのマルチプレクサを使用して、第1の数値、倍数値、および第2の数値に基づいて複数の部分積を生成することができる。たとえば、マルチプレクサは、aの値、bのBooth符号化された値、および受け取ったaのハード倍数を入力とし、これらの数値に基づいて複数の部分積を出力することができる。
【0055】
ブロック740において、図4Bに関連して説明したCSA木470および/または3入力2出力CSA472などの少なくとも1つの桁上げ保存加算器によって、複数の部分積および部分和を受け取ることができる。複数の部分積は、図4Bに関連して説明したマルチプレクサ460などのマルチプレクサから受け取ることができる。部分和は、図4Bに関連して説明したフリップ/フロップ474などのフリップ/フロップによってロードし、そうしたフリップ/フロップから受け取ることができる。
【0056】
ブロック750では、図4Bに関連して説明した3入力2出力CSA472など、少なくとも1つの桁上げ保存加算器を使用して、複数の部分積と部分和とに基づいて、少なくとも2つの部分和がとられた数値を生成することができる。たとえば、図4Bに関連して説明したCSA木470によって出力された部分的に冗長な形式の2つの部分和がとられた16ビットの数値を、図4Bに関連して説明したフリップ/フロップ474からの部分和の部分的に冗長な形式の24ビットの数値および5つの桁上げビットに加算することができる。この結果は、3つの数値を入力として受け入れ、2つの数値を出力することができる、3入力2出力CSA472を使用して、縮約することができる。特に、2つの16ビットの数値など、CSA木470からの2つの数値を、24ビットの数値などの部分和の数値とともに3入力2出力CSA472に入力することができる。少なくとも1つの桁上げ保存加算器の出力は、2つの部分和がとられた数値であり得る。たとえば、2つの16ビットの数値および24ビットの数値が加算される場合、3入力2出力CSA472は、並列分割加算器に出力することができる2つの24ビットの数値を出力として生成することができる。
【0057】
ブロック760では、図4Bに関連して説明した並列分割加算器480などの複数の並列分割加算器を使用して、少なくとも2つの部分和がとられた数値を受け取ることができる。先の例を続けると、3入力2出力CSA472は、出力として、並列分割加算器480によって受け取られる少なくとも2つの部分和がとられた数値であり得る2つの24ビットの数値を生成することができる。
【0058】
ブロック770では、少なくとも2つの部分和がとられた数値に対して加算演算を実行して、結果を計算することができる。桁上げ保存加算器によって出力された数値は、いくつかの並列分割加算器480などの並列分割加算器によって加算することができる。たとえば、Booth3符号化および乗算が実行される場合、この加算を実行するために6つの4ビット並列分割加算器を使用することができる。この加算により、並列分割加算器によって出力される数値を生成することができる。この数値は、処理700を実行することができるMACユニットの出力を表すことができる。先の例を続けると、図4Bに関連して説明したMACユニット450などのMACユニットによって出力される数値は、部分的に冗長な形式で5つの桁上げビットとともに24ビットを含むことができる。
【0059】
プロセス700の動作を特定の順序で説明しているが、順序は変更してもよく、動作は並行して実行してもよいことが理解されるべきである。さらに、動作を追加または省略してもよいことが理解されるべきである。
【0060】
図8は、電子デバイス例800のブロック図を示す。電子デバイス800は、1つまたは複数のxPUなどの1つまたは複数のプロセッサ810と、システムメモリ820と、バス830と、ネットワーキングインターフェース840と、ストレージ、出力デバイスインターフェース、入力デバイスインターフェースなどの他の構成要素(図示せず)とを含むことができる。プロセッサ810、システムメモリ820、ネットワーキングインターフェース840、および他の構成要素の間で通信するために、バス830を使用することができる。電子デバイス800の任意のまたはすべての構成要素を、本開示の主題とともに使用することができる。
【0061】
所望の構成に応じて、プロセッサ810は、限定されないが、テンソルプロセッシングユニット(TPU:tensor processing unit)、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、またはそれらの任意の組み合わせを含む任意のタイプのものであり得る。プロセッサ810は、図4Aおよび/または図5に関連して説明したシストリックアレイなどのシストリックアレイを含むことができる。プロセッサ810は、レベル1キャッシュ811およびレベル2キャッシュ812などのもう1つのレベルのキャッシングと、プロセッサコア813と、1つまたは複数のMACユニット850と、レジスタ814とを含むことができる。プロセッサコア813は、1つまたは複数の算術論理演算装置(ALU)、1つまたは複数の浮動小数点演算装置(FPU)、1つまたは複数のDSPコア、またはそれらの任意の組み合わせを含むことができる。いくつかの例では、1つまたは複数のMACユニット850は、プロセッサコア813内に実装することができる。プロセッサ810とともにメモリコントローラ815も使用することができ、またはいくつかの実施態様では、メモリコントローラ815は、プロセッサ810の内部部品であり得る。
【0062】
所望の構成に応じて、物理メモリ820は、限定されないが、RAMなどの揮発性メモリ、ROMなどの不揮発性メモリ、フラッシュメモリなど、またはそれらの任意の組み合わせを含む任意のタイプのものであり得る。物理メモリ820は、オペレーティングシステム821と、1つまたは複数のアプリケーション822と、サービスデータ825を含むことができるプログラムデータ824とを含むことができる。非一時的コンピュータ可読媒体プログラムデータ824は、1つまたは複数の処理デバイスによって実行されると、積和演算823の結果を計算するプロセスを実装する命令を格納することを含むことができる。いくつかの例では、1つまたは複数のアプリケーション822は、オペレーティングシステム821上でプログラムデータ824およびサービスデータ825を用いて動作するように配置することができる。
【0063】
電子デバイス800は、基本構成801と任意の必要なデバイスおよびインターフェースとの間の通信を容易にする、追加の特徴または機能、および追加のインターフェースを有することができる。
【0064】
物理メモリ820は、コンピュータ記憶媒体の一例であり得る。コンピュータ記憶媒体としては、限定されないが、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、または所望の情報を記憶するために使用することができ、電子デバイス800によってアクセスすることができる他の任意の媒体が挙げられる。こうした任意のコンピュータ記憶媒体は、デバイス800の一部であり得る。
【0065】
ネットワークインターフェース840は、電子デバイス800をネットワーク(図示せず)におよび/または別の電子デバイス(図示せず)に結合することができる。このように、電子デバイス800は、ローカルエリアネットワーク(「LAN」)、広域ネットワーク(「WAN」)、イントラネット、またはインターネットなどのネットワークのうちの1つのネットワークなど、電子デバイスのネットワークの一部であり得る。いくつかの例では、電子デバイス800は、ネットワークへのネットワーク接続を形成するネットワーク接続インターフェースと、別のデバイスとのテザリング接続を形成するローカル通信接続インターフェースとを含むことができる。接続は、有線であってもまたは無線であってもよい。電子デバイス800は、ネットワーク接続とテザリング接続とをブリッジして、ネットワークインターフェース840を介して他のデバイスをネットワークに接続することができる。
【0066】
1つまたは複数のMACユニット850を使用して、行列乗算のために実行される必要がある演算などの積和演算を実行することができる。1つまたは複数のMACユニット850は、シストリックアレイの一部であり得る。たとえば、MACユニット850とそれが動作するシストリックアレイとは、DNN実施態様に使用することができるアクセラレータにおいて使用することができる。1つまたは複数のMACユニット850は、上述したMACユニットのうちの任意の1つであり得る。たとえば、MACユニット850は、図4Bに関連して説明したMACユニット450、図6Aに関連して説明したMACユニット600、および/または図6Bに関連して説明したMACユニット650と同様であるか、またはそれらを含むことができる。
【0067】
MACユニット850は、本明細書で説明した融合された乗算器もしくは加算器または他の拡張機能を含むものなど、拡張MACユニットであるとみなすことができる。こうした拡張MACユニットは、従来のMACユニットと比較した場合、より効率的であり、実用的であり、行列乗算を実行するために最適化されたものとすることができ、ハードウェアをより少なくすることができ、よりエネルギー効率的であり得る。拡張MACユニットは、DNN用のアクセラレータに使用されるようなシストリックアレイにおける行列乗算に使用される場合、これらおよび他の利点を含むことができる。
【0068】
電子デバイス800は、スピーカ、ヘッドホン、イヤホン、携帯電話、スマートフォン、スマートウォッチ、携帯情報端末(PDA)、パーソナルメディアプレーヤーデバイス、タブレットコンピュータ(タブレット)、ワイヤレスウェブウォッチデバイス、パーソナルヘッドセットデバイス、ウェアラブルデバイス、特定用途向けデバイス、または上記の機能のうちの任意のものを含むハイブリッドデバイスなど、小型フォームファクタのポータブル(またはモバイル)電子デバイスの一部として実装することができる。電子デバイス800はまた、ラップトップコンピュータ構成および非ラップトップコンピュータ構成の両方を含むパーソナルコンピュータとして実装することもできる。電子デバイス800は、サーバ、アクセラレータ、または大規模システムとして実装することもできる。
【0069】
本開示の態様は、コンピュータ実装プロセス、システムとして、またはメモリデバイスもしくは非一時的コンピュータ可読記憶媒体などの製造品として実装することができる。コンピュータ可読記憶媒体は、電子デバイスによって読み取り可能なものとすることができ、電子デバイスまたは他のデバイスに本開示に記載するプロセスおよび技法を実行させるための命令を含むことができる。コンピュータ可読記憶媒体は、揮発性コンピュータメモリ、不揮発性コンピュータメモリ、ソリッドステートメモリ、フラッシュドライブ、および/もしくは他のメモリ、または他の非一時的および/もしくは一時的媒体によって実装することができる。本開示の態様は、異なる形態のソフトウェア、ファームウェア、および/またはハードウェアで実行することができる。さらに、本開示の教示は、たとえば、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他のコンポーネントによって実行することができる。
【0070】
本開示の態様は、単一のデバイス上で実行してもよく、または、複数のデバイス上で実行してもよい。たとえば、本明細書に記載した1つまたは複数の構成要素を含むプログラムモジュールは、異なるデバイスに位置していてもよく、各々、本開示の1つまたは複数の態様を実行してもよい。本開示で使用する場合、「ある(a)」または「1つの」という用語は、別段の断りのない限り、1つまたは複数の項目を含むことができる。さらに、「~に基づく」という語句は、別段の断りのない限り、「少なくとも一部~に基づく」を意味するように意図されている。
【0071】
本開示の上記の態様は、例示的であるように意図されている。これらは、本開示の原理および適用を説明するために選択されたものであり、網羅的であるようにも、または本開示を限定するようにも意図されていない。開示した態様の多くの変更および変形は、当業者には明らかであり得る。
【0072】
別段の断りのない限り、前述の代替例は相互に排他的なものではなく、一意の利点を達成するようにさまざまな組み合わせで実装することができる。上述した特徴のこれらおよび他の変形および組み合わせは、特許請求の範囲によって定義される主題から逸脱することなく利用することができるため、上述した例の説明は、特許請求の範囲によって定義される主題を限定するものとしてではなく説明するものとして解釈されるべきである。加えて、本明細書に記載した例の提供、ならびに「など」、「~を含む」などのように表した句は、特許請求の範囲の主題を特定の例に限定するものとして解釈されるべきではなく、むしろ、それらの例は、多くの可能な例のうちの1つのみを例示するように意図されている。さらに、異なる図面における同じの参照番号は、同じかまたは同様の要素を特定することができる。
【0073】
本願明細書では多くの例を記載し、それらは単に例示を目的として提示している。記載した例は、いかなる意味においても限定的なものではなく、また限定的であるように意図されていない。当業者であれば、開示した主題は、構造的、論理的、ソフトウェア、および電気的な変更など、さまざまな変更および改変を伴って実施することができることを理解するであろう。記載した特徴は、明示的に別段の指定がない限り、それらを説明する際に参照した1つまたは複数の特定の例または図面で使用されることに限定されないことが理解されるべきである。
図1A
図1B
図2
図3
図4A
図4B
図5
図6A
図6B
図7
図8
【手続補正書】
【提出日】2023-08-29
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
2つの数値を乗算して結果を生成する積和(MAC)ユニットであって、
第1の数値をラッチし、前記第1の数値と前記第1の数値に基づく倍数値とを出力するように構成された第1のフリップ/フロップと、
第2の数値をロードし、前記第2の数値を出力するように構成された第2のフリップ/フロップと、
前記第1のフリップ/フロップおよび前記第2のフリップ/フロップと通信する、前記第1のフリップ/フロップから前記第1の数値および前記倍数値を受け取るとともに、前記第2のフリップ/フロップから前記第2の数値を受け取り、前記第1の数値、前記倍数値および前記第2の数値に基づいて複数の部分積を出力するように構成された、マルチプレクサと、
前記マルチプレクサと通信する、前記複数の部分積と部分和とを受け取り、前記複数の部分積と前記部分和とに基づいて少なくとも2つの部分和がとられた数値を出力するように構成された、少なくとも1つの桁上げ保存加算器と、
前記少なくとも1つの桁上げ保存加算器と通信する、前記少なくとも2つの部分和がとられた数値を受け取り、前記少なくとも2つの部分和がとられた数値に対して加算演算を実行し、結果を出力するように構成された、複数の並列分割加算器と、
を備えるMACユニット。
【請求項2】
前記第2の数値が、Booth符号化を用いて符号化される、請求項1に記載のMACユニット。
【請求項3】
前記第1のフリップ/フロップと通信する、プリロードされた数値を受け取り、前記第1のフリップ/フロップに前記倍数値を出力するように構成された、少なくとも1つのハード倍数計算器をさらに備える、請求項1または2に記載のMACユニット。
【請求項4】
前記少なくとも1つの桁上げ保存加算器が、多入力2出力桁上げ保存加算器のみを含む、請求項1または2に記載のMACユニット。
【請求項5】
前記少なくとも1つの桁上げ保存加算器が、桁上げ保存加算器および多入力2出力桁上げ保存加算器を含む、請求項1または2に記載のMACユニット。
【請求項6】
前記多入力2出力桁上げ保存加算器と通信する、前記部分和をロードし、前記部分和を前記多入力2出力桁上げ保存加算器に出力するように構成された、第3のフリップ/フロップをさらに備える、請求項5に記載のMACユニット。
【請求項7】
前記第3のフリップ/フロップが、別のMACユニットから出力された部分和から前記部分和をロードするように構成されている、請求項6に記載のMACユニット。
【請求項8】
前記複数の並列分割加算器が、部分的に冗長な形式の数値のセグメントに対して並列に動作するように構成されている、請求項1または2に記載のMACユニット。
【請求項9】
前記第1のフリップ/フロップが、前記第1の数値を通常の2倍のクロック速度でラッチするように構成されている、請求項1または2に記載のMACユニット。
【請求項10】
前記MACユニットが、乗算器および加算器の融合バージョンを使用する拡張MACユニットである、請求項1または2に記載のMACユニット。
【請求項11】
前記MACユニットがシストリックアレイ内にある、請求項1または2に記載のMACユニット。
【請求項12】
少なくとも1つの積和演算の結果を計算する方法であって、
第1のフリップ/フロップを使用して、第1の数値と、前記第1の数値に基づく倍数値とをラッチすることと、
第2のフリップ/フロップを使用して第2の数値をロードすることと、
マルチプレクサを使用して、前記第1の数値、前記倍数値、および前記第2の数値に基づいて複数の部分積を生成することと、
少なくとも1つの桁上げ保存加算器を使用して、前記複数の部分積と部分和とを受け取ることと、
前記少なくとも1つの桁上げ保存加算器を使用して、前記複数の部分積と前記部分和とに基づいて少なくとも2つの部分和がとられた数値を生成することと、
複数の並列分割加算器を使用して、前記少なくとも2つの部分和がとられた数値を受け取ることと、
前記少なくとも2つの部分和がとられた数値に対して加算演算を実行して、結果を計算することと、を含む方法。
【請求項13】
前記第2の数値が、Booth符号化を用いて符号化される、請求項12に記載の方法。
【請求項14】
前記倍数値が、少なくとも1つのハード倍数計算器を用いて計算される、請求項12または13に記載の方法。
【請求項15】
前記部分和をロードすることと、
前記部分和を前記少なくとも1つの桁上げ保存加算器に出力することと、をさらに含む、請求項12または13に記載の方法。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0010
【補正方法】変更
【補正の内容】
【0010】
主題のさらに別の態様は、少なくとも1つの積和演算の結果を計算する方法を含む。第1のフリップ/フロップを使用して、第1の数値および第1の数値に基づく倍数値をラッチすることができる。第2のフリップ/フロップを使用して、第2の数値をロードすることができる。マルチプレクサを使用して、第1の数値、倍数値、および第2の数値に基づいて複数の部分積を生成することができる。マルチプレクサから、複数の部分積を受け取ることができる。少なくとも1つの桁上げ保存加算器を使用して、部分和を受け取ることができる。少なくとも1つの桁上げ保存加算器を使用して、複数の部分積と部分和とに基づいて少なくとも2つの部分和がとられた数値を生成することができる。複数の並列分割加算器を使用して、少なくとも2つの部分和がとられた数値を受け取ることができる。少なくとも2つの部分和がとられた数値に対して加算演算を実行して、結果を計算することができる。第2の数値は、Booth符号化を用いて符号化することができる。倍数値は、少なくとも1つのハード倍数計算器を用いて計算することができる。本プロセスは、部分和をロードすることと、部分和を少なくとも1つの桁上げ保存加算器に出力することとを含むことができる。
【手続補正3】
【補正対象書類名】明細書
【補正対象項目名】0061
【補正方法】変更
【補正の内容】
【0061】
所望の構成に応じて、プロセッサ810は、限定されないが、テンソルプロセッシングユニット(TPU:tensor processing unit)、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、またはそれらの任意の組み合わせを含む任意のタイプのものであり得る。プロセッサ810は、図4Aおよび/または図5に関連して説明したシストリックアレイなどのシストリックアレイを含むことができる。プロセッサ810は、レベル1キャッシュ811およびレベル2キャッシュ812などの1または複数のレベルのキャッシングと、プロセッサコア813と、1つまたは複数のMACユニット850と、レジスタ814とを含むことができる。プロセッサコア813は、1つまたは複数の算術論理演算装置(ALU)、1つまたは複数の浮動小数点演算装置(FPU)、1つまたは複数のDSPコア、またはそれらの任意の組み合わせを含むことができる。いくつかの例では、1つまたは複数のMACユニット850は、プロセッサコア813内に実装することができる。プロセッサ810とともにメモリコントローラ815も使用することができ、またはいくつかの実施態様では、メモリコントローラ815は、プロセッサ810の内部部品であり得る。
【手続補正4】
【補正対象書類名】明細書
【補正対象項目名】0067
【補正方法】変更
【補正の内容】
【0067】
MACユニット850は、本明細書で説明した融合された乗算器および加算器または他の拡張機能を含むものなど、拡張MACユニットであるとみなすことができる。こうした拡張MACユニットは、従来のMACユニットと比較した場合、より効率的であり、実用的であり、行列乗算を実行するために最適化されたものとすることができ、ハードウェアをより少なくすることができ、よりエネルギー効率的であり得る。拡張MACユニットは、DNN用のアクセラレータに使用されるようなシストリックアレイにおける行列乗算に使用される場合、これらおよび他の利点を含むことができる。
【国際調査報告】