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

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

▶ オキュラス ブイアール,エルエルシーの特許一覧

<>
  • 特表-電力効率の良い乗累算回路類 図1A
  • 特表-電力効率の良い乗累算回路類 図1B
  • 特表-電力効率の良い乗累算回路類 図1C
  • 特表-電力効率の良い乗累算回路類 図1D
  • 特表-電力効率の良い乗累算回路類 図2
  • 特表-電力効率の良い乗累算回路類 図3
  • 特表-電力効率の良い乗累算回路類 図4
  • 特表-電力効率の良い乗累算回路類 図5
  • 特表-電力効率の良い乗累算回路類 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-09-13
(54)【発明の名称】電力効率の良い乗累算回路類
(51)【国際特許分類】
   G06N 3/063 20060101AFI20220906BHJP
   G06F 17/16 20060101ALI20220906BHJP
【FI】
G06N3/063
G06F17/16 P
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021570852
(86)(22)【出願日】2020-07-08
(85)【翻訳文提出日】2022-01-25
(86)【国際出願番号】 US2020041207
(87)【国際公開番号】W WO2021007325
(87)【国際公開日】2021-01-14
(31)【優先権主張番号】16/509,183
(32)【優先日】2019-07-11
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.ブルートゥース
(71)【出願人】
【識別番号】515046968
【氏名又は名称】メタ プラットフォームズ テクノロジーズ, リミテッド ライアビリティ カンパニー
【氏名又は名称原語表記】META PLATFORMS TECHNOLOGIES, LLC
(74)【代理人】
【識別番号】110002974
【氏名又は名称】弁理士法人World IP
(72)【発明者】
【氏名】ライ, リャンジェン
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056BB38
(57)【要約】
本明細書の開示は、乗累算のためのシステム、方法、およびデバイスを含む。一態様では、入力オペランドは制御回路類によって受信される。一態様では、制御回路類は入力オペランドのスパース性を決定し、スパース性は、入力オペランドの値が所定の値を有するか否かを示してもよい。一態様では、制御回路類は入力オペランドの定常性を決定し、定常性は、入力オペランドの値が1つまたは複数のクロックサイクルにわたって変化するかどうかを示してもよい。一態様では、入力オペランドは、入力オペランドの決定されたスパース性および定常性にしたがって、乗累算回路類に入力として提供される。
【選択図】図1A
【特許請求の範囲】
【請求項1】
制御回路類によって、入力オペランドを受信することと、
前記制御回路類によって、前記入力オペランドのスパース性を決定することであって、前記スパース性が、前記入力オペランドの値が所定の値を有するか否かを示す、スパース性を決定することと、
前記制御回路類によって、前記入力オペランドの定常性を決定することであって、前記定常性が、前記入力オペランドの前記値が1つまたは複数のクロックサイクルにわたって変化するかどうかを示す、定常性を決定することと、
前記入力オペランドの決定された前記スパース性および前記定常性にしたがって、前記入力オペランドを乗累算回路類に入力として提供することと、を含む、方法。
【請求項2】
ニューラルネットワーク計算のための第1のオペランドを受信する第1の入力と、
前記ニューラルネットワーク計算のための第2のオペランドを受信する第2の入力と、
前記ニューラルネットワーク計算のための累算データを受信する第3の入力と、
i)前記第1のオペランドおよび前記第2のオペランドの乗算と、ii)前記累算データと、の合計を提供する出力と、を含む、乗累算器(MAC)回路類と、
前記MAC回路類の前記出力からの前記合計を受信する第1の入力と、
前記第1のオペランドおよび前記第2のオペランド両方の値が非ゼロであるかどうかを示す制御信号を受信する第2の入力と、
前記第1のオペランドおよび前記第2のオペランド両方の前記値が非ゼロであることを示す前記制御信号に応答して、前記合計を前記MAC回路類の前記第3の入力に提供する出力と、を含む、累算レジスタと、を備える、デバイス。
【請求項3】
前記累算レジスタが、前記第1のオペランドの第1の値または前記第2のオペランドの第2の値のうち少なくとも1つがゼロであることを示す前記制御信号に応答して、前記MAC回路類の前記第3の入力に対する前記合計の提供を迂回するように構成された、請求項2に記載のデバイス。
【請求項4】
第1の信号および第2の信号に対してAND論理演算を実施して、前記制御信号を生成するように構成された論理回路類であって、前記第1の信号が、前記第1のオペランドの第1の値が非ゼロであるかどうかを示し、前記第2の信号が、前記第2のオペランドの第2の値が非ゼロであるかどうかを示す、論理回路類を更に備える、請求項2または3に記載のデバイス。
【請求項5】
i)前記第1のオペランドの前記第1の値が非ゼロであることを示す前記第1の信号、またはii)前記第1のオペランドの前記第1の値が変化していることを示す第3の信号、のうち少なくとも1つに応答して、前記第1のオペランドを前記MAC回路類の前記第1の入力に提供する出力を含む、第1の入力レジスタを更に備える、請求項4に記載のデバイス。
【請求項6】
i)前記第2のオペランドの前記第2の値が非ゼロであることを示す前記第2の信号、またはii)前記第2のオペランドの前記第2の値が変化していることを示す第4の信号、のうち少なくとも1つに応答して、前記第2のオペランドを前記MAC回路類の前記第2の入力に提供する出力を含む、第2の入力レジスタを更に備え、好ましくは更に、
クロックサイクルにおける前記第1のオペランドの前記第1の値と、前のクロックサイクルにおける前記第1のオペランドの第3の値とを比較し、
前記クロックサイクルにおける前記第1のオペランドの前記第1の値と、前記前のクロックサイクルにおける前記第1のオペランドの前記第3の値とが異なることに応答して、前記第1のオペランドの前記第1の値が変化していることを示す前記第3の信号を生成する
ように構成された、制御回路類を備え、好ましくは前記制御回路類が更に、
前記クロックサイクルにおける前記第2のオペランドの前記第2の値と、前記前のクロックサイクルにおける前記第2のオペランドの第4の値とを比較し、
前記クロックサイクルにおける前記第2のオペランドの前記第2の値と、前記前のクロックサイクルにおける前記第2のオペランドの前記第4の値とが異なることに応答して、前記第2のオペランドの前記第2の値が変化していることを示す前記第4の信号を生成する、ように構成された、請求項5に記載のデバイス。
【請求項7】
前記第1の信号および前記第3の信号に対してOR論理演算を実施して、別の制御信号を生成し、
前記別の制御信号が非ゼロであることに応答して、前記第1のオペランドを前記MAC回路類の前記第1の入力に提供するように構成された前記第1の入力レジスタに、前記別の制御信号を提供する
ように構成された、追加の論理回路類を更に備え、好ましくは更に、
前記追加の論理回路類に結合された制御回路類を備え、前記制御回路類が、
前記第1の信号を生成し、前記第1の信号を前記追加の論理回路類に提供するように構成された、請求項5または6に記載のデバイス。
【請求項8】
前記第1のオペランドが、前記ニューラルネットワーク計算に対する重みを含み、前記第2のオペランドが、前記ニューラルネットワーク計算に対する活性化値を含む、請求項2から7のいずれか一項に記載のデバイス。
【請求項9】
乗累算器(MAC)回路類によって、ニューラルネットワーク計算のための第1のオペランドと、前記ニューラルネットワーク計算のための第2のオペランドと、前記ニューラルネットワーク計算のための累算データとを受信することと、
前記MAC回路類によって、i)前記第1のオペランドおよび前記第2のオペランドの乗算と、ii)前記累算データと、の合計を提供することと、
累算レジスタによって、前記合計を前記MAC回路類から受信することと、
前記累算レジスタによって、前記第1のオペランドおよび前記第2のオペランド両方の値が非ゼロであるかどうかを示す制御信号を受信することと、
前記第1のオペランドおよび前記第2のオペランド両方の前記値が非ゼロであることを示す前記制御信号に応答して、前記累算レジスタによって、前記合計を前記MAC回路類に提供することと、を含む、方法。
【請求項10】
前記第1のオペランドの第1の値または前記第2のオペランドの第2の値のうち少なくとも1つがゼロであることを示す前記制御信号に応答して、前記累算レジスタによって、前記MAC回路類に対する前記合計の提供を迂回することを更に含む、請求項9に記載の方法。
【請求項11】
論理回路類によって、第1の信号および第2の信号に対してAND論理演算を実施して、前記制御信号を生成することであって、前記第1の信号が、前記第1のオペランドの第1の値が非ゼロであるかどうかを示し、前記第2の信号が、前記第2のオペランドの第2の値が非ゼロであるかどうかを示す、AND論理演算を実施することを更に含む、請求項9または10に記載の方法。
【請求項12】
i)前記第1のオペランドの前記第1の値が非ゼロであることを示す前記第1の信号、またはii)前記第1のオペランドの前記第1の値が変化していることを示す第3の信号、のうち少なくとも1つに応答して、第1の入力レジスタによって、前記第1のオペランドを前記MAC回路類に提供することを更に含む、請求項11に記載の方法。
【請求項13】
i)前記第2のオペランドの前記第2の値が非ゼロであることを示す前記第2の信号、またはii)前記第2のオペランドの前記第2の値が変化していることを示す第4の信号、のうち少なくとも1つに応答して、第2の入力レジスタによって、前記第2のオペランドを前記MAC回路類に提供することを更に含み、好ましくは更に、
制御回路類によって、クロックサイクルにおける前記第1のオペランドの前記第1の値と、前のクロックサイクルにおける前記第1のオペランドの第3の値とを比較することと、
前記クロックサイクルにおける前記第1のオペランドの前記第1の値と、前記前のクロックサイクルにおける前記第1のオペランドの前記第3の値とが異なることに応答して、前記制御回路類によって、前記第1のオペランドの前記第1の値が変化していることを示す前記第3の信号を生成することと、を含み、好ましくは更に、
前記制御回路類によって、前記クロックサイクルにおける前記第2のオペランドの前記第2の値と、前記前のクロックサイクルにおける前記第2のオペランドの第4の値とを比較することと、
前記クロックサイクルにおける前記第2のオペランドの前記第2の値と、前記前のクロックサイクルにおける前記第2のオペランドの前記第4の値とが異なることに応答して、前記制御回路類によって、前記第2のオペランドの前記第2の値が変化していることを示す前記第4の信号を生成することと、を含む、請求項12に記載の方法。
【請求項14】
追加の論理回路類によって、前記第1の信号および前記第3の信号に対してOR論理演算を実施して、別の制御信号を生成することと、
前記別の制御信号が非ゼロであることに応答して、前記追加の論理回路類によって、前記第1のオペランドを前記MAC回路類の前記第1の入力に提供するように構成された前記第1の入力レジスタに、前記別の制御信号を提供することと、を更に含み、好ましくは更に、
前記追加の論理回路類に結合された制御回路類によって、前記第1の信号を生成することと、
前記制御回路類によって、前記第1の信号を前記追加の論理回路類に提供することと、を含む、請求項12または13に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、全体として、乗累算(MAC)回路類に関し、MAC回路類の入力オペランドのスパース性および/または定常性に基づいて、MAC回路類の消費電力を低減することを含むがそれらに限定されない。
【背景技術】
【0002】
MAC回路類は、ニューラルネットワークの中央演算を実施する。一例では、MAC回路類は、ニューラルネットワークのノードまたはニューロンをモデル化し、例えば重みおよび活性化値に対応する、2つの入力ベクトルのドット積を計算する。ドット積の計算は、重みを対応する活性化値で乗算し、乗算結果を加算することを伴い、それは計算的に網羅的であってもよい。一態様では、多数のノードまたはニューロンを有するニューラルネットワークは、MAC回路類の大きいネットワークを実現するが、それには相当量の電力を要求または消費することがある。
【発明の概要】
【0003】
本明細書に開示する様々な実施形態は、乗累算のための方法に関する。いくつかの実施形態では、方法は、制御回路類によって、入力オペランドを受信することを含む。いくつかの実施形態では、方法は、制御回路類によって、入力オペランドのスパース性を決定することを含み、スパース性は、入力オペランドの値が所定の値を有するか否かを示してもよい。いくつかの実施形態では、方法は、制御回路類によって、入力オペランドの定常性を決定することを含み、定常性は、1つもしくは複数の、または所定数のクロックサイクルにわたって、入力オペランドの値が変化するかまたは不変のままかを示してもよい。いくつかの実施形態では、方法は、入力オペランドの決定されたスパース性および定常性にしたがって、入力オペランドを乗累算回路類に入力として提供することを含む。
【0004】
本明細書に開示する様々な実施形態は、乗累算のためのデバイスに関する。いくつかの実施形態では、デバイスは、ニューラルネットワーク計算のための第1のオペランドを受信する第1の入力と、ニューラルネットワーク計算のための第2のオペランドを受信する第2の入力と、ニューラルネットワーク計算のための累算データを受信する第3の入力と、i)第1のオペランドおよび第2のオペランドの乗算と、ii)累算データとの合計を提供する出力と、を含む、乗累算器(MAC)回路類を含む。いくつかの実施形態では、デバイスは、MAC回路類の出力からの合計を受信する第1の入力と、第1のオペランドおよび第2のオペランド両方の値が非ゼロであるか否かを示す制御信号を受信する第2の入力と、第1のオペランドおよび第2のオペランド両方の値が非ゼロであることを示す制御信号に応答して、合計をMAC回路類の第3の入力に提供する出力と、を含む、累算レジスタを含む。いくつかの実施形態では、累算レジスタは、第1のオペランドの第1の値または第2のオペランドの第2の値のうち少なくとも1つがゼロであることを示す制御信号に応答して、MAC回路類の第3の入力に対する合計の提供を迂回するように構成される。いくつかの実施形態では、第1のオペランドは、ニューラルネットワーク計算に対する重みを含み、第2のオペランドは、ニューラルネットワーク計算に対する活性化値を含む。
【0005】
いくつかの実施形態では、デバイスは更に、第1の信号および第2の信号に対してAND論理演算を実施して、制御信号を生成するように構成された論理回路類を含む。第1の信号は、第1のオペランドの第1の値が非ゼロであるか否かを示してもよく、第2の信号は、第2のオペランドの第2の値が非ゼロであるか否かを示してもよい。いくつかの実施形態では、デバイスは更に、i)第1のオペランドの第1の値が非ゼロであることを示す第1の信号、またはii)第1のオペランドの第1の値が変化していることを示す第3の信号のうち少なくとも1つに応答して、第1のオペランドをMAC回路類の第1の入力に提供する出力を含む、第1の入力レジスタを含む。
【0006】
いくつかの実施形態では、デバイスは更に、i)第2のオペランドの第2の値が非ゼロであることを示す第2の信号、またはii)第2のオペランドの第2の値が変化していることを示す第4の信号のうち少なくとも1つに応答して、第2のオペランドをMAC回路類の第2の入力に提供する出力を含む、第2の入力レジスタを含む。いくつかの実施形態では、デバイスは更に、クロックサイクルにおける第1のオペランドの第1の値と、前のクロックサイクルにおける第1のオペランドの第3の値とを比較し、クロックサイクルにおける第1のオペランドの第1の値と、前のクロックサイクルにおける第1のオペランドの第3の値とが異なることに応答して、第1のオペランドの第1の値が変化していることを示す第3の信号を生成するように構成された、制御回路類を含む。いくつかの実施形態では、制御回路類は更に、クロックサイクルにおける第2のオペランドの第2の値と、前のクロックサイクルにおける第2のオペランドの第4の値とを比較し、クロックサイクルにおける第2のオペランドの第2の値と、前のクロックサイクルにおける第2のオペランドの第4の値とが異なることに応答して、第2のオペランドの第2の値が変化していることを示す第4の信号を生成するように構成される。
【0007】
いくつかの実施形態では、デバイスは更に、第1の信号および第3の信号に対してOR論理演算を実施して、別の制御信号を生成し、別の制御信号を第1の入力レジスタに提供するように構成された、追加の論理回路類を含む。第1の入力レジスタは、別の制御信号が非ゼロであることに応答して、第1のオペランドをMAC回路類の第1の入力に提供するように構成されてもよい。いくつかの実施形態では、デバイスは更に、追加の論理回路類に結合された制御回路類を含む。制御回路類は、第1の信号を生成し、第1の信号を追加の論理回路類に提供するように構成されてもよい。
【0008】
本明細書に開示する様々な実施形態は、乗累算のための方法に関する。いくつかの実施形態では、方法は、乗累算器(MAC)回路類によって、ニューラルネットワーク計算のための第1のオペランドと、ニューラルネットワーク計算のための第2のオペランドと、ニューラルネットワーク計算のための累算データとを受信することを含む。いくつかの実施形態では、方法は、MAC回路類によって、i)第1のオペランドおよび第2のオペランドの乗算と、ii)累算データとの合計を提供することを含む。いくつかの実施形態では、方法は、累算レジスタによって、合計をMAC回路類から受信することを含む。いくつかの実施形態では、方法は、累算レジスタによって、第1のオペランドおよび第2のオペランド両方の値が非ゼロであることを示す制御信号を受信することを含む。いくつかの実施形態では、方法は、第1のオペランドおよび第2のオペランド両方の値が非ゼロであることを示す制御信号に応答して、累算レジスタによって、合計をMAC回路類に提供することを含む。いくつかの実施形態では、方法は、第1のオペランドの第1の値または第2のオペランドの第2の値のうち少なくとも1つがゼロであることを示す制御信号に応答して、累算レジスタによって、MAC回路類に対する合計の提供を迂回することを含む。第1のオペランドは、ニューラルネットワーク計算に対する重みを含んでもよく、第2のオペランドは、ニューラルネットワーク計算に対する活性化値を含んでもよい。
【0009】
いくつかの実施形態では、方法は、論理回路類によって、第1の信号および第2の信号に対してAND論理演算を実施して、制御信号を生成することを含む。第1の信号は、第1のオペランドの第1の値が非ゼロであるか否かを示してもよく、第2の信号は、第2のオペランドの第2の値が非ゼロであるか否かを示してもよい。いくつかの実施形態では、方法は、i)第1のオペランドの第1の値が非ゼロであることを示す第1の信号、またはii)第1のオペランドの第1の値が変化していることを示す第3の信号のうち少なくとも1つに応答して、第1の入力レジスタによって、第1のオペランドをMAC回路類に提供することを含む。いくつかの実施形態では、方法は、i)第2のオペランドの第2の値が非ゼロであることを示す第2の信号、またはii)第2のオペランドの第2の値が変化していることを示す第4の信号のうち少なくとも1つに応答して、第2の入力レジスタによって、第2のオペランドをMAC回路類に提供することを含む。いくつかの実施形態では、方法は、制御回路類によって、クロックサイクルにおける第1のオペランドの第1の値と、前のクロックサイクルにおける第1のオペランドの第3の値とを比較することを含む。いくつかの実施形態では、方法は、クロックサイクルにおける第1のオペランドの第1の値と、前のクロックサイクルにおける第1のオペランドの第3の値とが異なることに応答して、制御回路類によって、第1のオペランドの第1の値が変化していることを示す第3の信号を生成することを含む。
【0010】
いくつかの実施形態では、方法は、制御回路類によって、クロックサイクルにおける第2のオペランドの第2の値と、前のクロックサイクルにおける第2のオペランドの第4の値とを比較することを含む。いくつかの実施形態では、方法は、クロックサイクルにおける第2のオペランドの第2の値と、前のクロックサイクルにおける第2のオペランドの第4の値とが異なることに応答して、制御回路類によって、第2のオペランドの第2の値が変化していることを示す第4の信号を生成することを含む。いくつかの実施形態では、方法は、追加の論理回路類によって、第1の信号および第3の信号に対してOR論理演算を実施して、別の制御信号を生成することを含む。いくつかの実施形態では、方法は、追加の論理回路類によって、別の制御信号を第1の入力レジスタに提供することを含む。第1の入力レジスタは、別の制御信号が非ゼロであることに応答して、第1のオペランドをMAC回路類の第1の入力に提供するように構成されてもよい。いくつかの実施形態では、方法は、追加の論理回路類に結合された制御回路類によって、第1の信号を生成し、制御回路類によって、第1の信号を追加の論理回路類に提供することを含む。
【0011】
上記および他の態様ならびに実現例について、以下で詳細に考察する。本開示の態様または実施形態に組み込むのに好適なものとして、本明細書で考察される任意の特徴は、本開示のあらゆる態様または実施形態全体にわたって一般化できるものであることが意図されるものと理解されるであろう。上述の情報および以下で詳述する説明は、様々な態様および実現例の実例を含み、特許請求する態様および実現例の性質ならびに特徴を理解するための概観または枠組みを提供する。図面は、様々な態様および実現例の例示ならびに更なる理解を提供し、本明細書に組み込まれるとともに本明細書の一部を構成する。
【0012】
添付図面は縮尺通りに描かれることを意図しない。様々な図面における同様の参照番号および記号は同様の要素を示す。明瞭にするため、全ての図面において全ての構成要素に符号が付されるわけではない。
【図面の簡単な説明】
【0013】
図1A】本開示の例示の一実現例による、人工知能(AI)に関連する処理を実施するシステムの一実施形態を示すブロック図である。
図1B】本開示の例示の一実現例による、AIに関連する処理を実施するデバイスの一実施形態を示すブロック図である。
図1C】本開示の例示の一実現例による、AIに関連する処理を実施するデバイスの一実施形態を示すブロック図である。
図1D】本開示の例示の一実現例によるコンピューティング環境を示すブロック図である。
図2】本開示の例示の一実現例による、乗累算(MAC)回路類の電力効率を改善するための回路類を備えたAIアクセラレータを示すブロック図である。
図3】本開示の例示の一実現例による、電力効率を改善するMAC回路類および追加の回路類を示す例示の回路図である。
図4】本開示の例示の一実現例による、MAC回路類の入力オペランドのスパース性および定常性に基づいて制御信号を生成するプロセスを示すフローチャートである。
図5】本開示の例示の一実現例による、MAC回路類を動作させるプロセスを示すフローチャートである。
図6】本開示の例示の一実現例による、MAC回路類を動作させるプロセスを示すフローチャートである。
【発明を実施するための形態】
【0014】
特定の実施形態を詳細に示す図面に移る前に、本開示は、明細書に記載されるかまたは図面に例示される、詳細もしくは方法論に限定されないことが理解されるべきである。また、本明細書で使用する専門用語は、単に説明のためのものであって限定とみなされるべきでないことが理解されるべきである。
【0015】
以下の本発明の様々な実施形態についての説明を読むために、本明細書のセクションおよびそれらそれぞれの内容について、次の説明が有用であり得る。
セクションAは、本発明のシステム、方法、およびデバイスの一実施形態を実践または実現するのに有用な、環境、システム、構成、および/または他の態様について記載する。
セクションBは、MAC回路類の入力オペランドのスパース性および/または定常性に基づいて、MAC回路類を操作するデバイス、システム、および方法の実施形態について記載する。
【0016】
A.人工知能に関連する処理のための環境
システム、デバイス、および/または方法の実施形態の詳細についてセクションBで考察する前に、システム、デバイス、および/または方法の特定の実施形態を実践もしくは実現するのに有用な、環境、システム、構成、および/または他の態様について考察するのが有用であり得る。ここで図1Aを参照すると、人工知能(AI)に関連する処理を実施するためのシステムの一実施形態が示される。概要では、システムは、入力データ110を使用してAIに関連する処理を実施することができる、1つまたは複数のAIアクセラレータ108を含む。AIアクセラレータ108として参照しているが、場合によっては、ニューラルネットワークアクセラレータ(NNA)、ニューラルネットワークチップもしくはハードウェア、AIプロセッサ、AIチップなどと呼ばれる。AIアクセラレータ108は、入力データ110および/またはパラメータ128(例えば、重みおよび/またはバイアス情報)にしたがって、AIに関連する処理を実施して、出力データ112を出力または提供することができる。AIアクセラレータ108は、1つもしくは複数のニューラルネットワーク114(例えば、人工ニューラルネットワーク)、1つもしくは複数のプロセッサ24、および/または1つもしくは複数の記憶デバイス126を含むことができ、ならびに/あるいは実装することができる。
【0017】
上述の要素または構成要素はそれぞれ、ハードウェア、またはハードウェアとソフトウェアの組み合わせの形で実装される。例えば、これらの要素または構成要素はそれぞれ、任意のアプリケーション、プログラム、ライブラリ、スクリプト、タスク、サービス、プロセス、あるいはデジタルおよび/またはアナログ要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子)を含むことができる回路類などのハードウェア上で実行する、任意のタイプおよび形態の実行可能命令を含むことができる。
【0018】
入力データ110は、AIアクセラレータ108のニューラルネットワーク114を構成、調整、訓練、および/または活性化するための、ならびに/あるいはプロセッサ124によって処理するための、任意のタイプもしくは形態のデータを含むことができる。ニューラルネットワーク114は、場合によっては、人工ニューラルネットワーク(ANN)と呼ばれる。ニューラルネットワークの構成、調整、および/または訓練は、履歴データなど、(例えば、入力データ110としての)訓練データセットがニューラルネットワークに提供されて処理される、機械学習のプロセスを指すかあるいは含むことができる。調整または構成は、ニューラルネットワーク114を訓練または処理して、ニューラルネットワークが精度を改善するのを可能にすることを指すかまたは含むことができる。ニューラルネットワーク114の調整または構成は、例えば、ニューラルネットワーク114に関する問題のタイプもしくは所望の目標に対して成功することが証明されているアーキテクチャを使用した、ニューラルネットワークの設計、形成、構築、合成、および/または確立を含むことができる。場合によっては、1つまたは複数のニューラルネットワーク114は、同じもしくは類似のベースラインモデルで開始してもよいが、調整、訓練、または学習プロセスの間、ニューラルネットワーク114の結果は、ベースラインモデルであるかあるいは異なる目標もしくは目的のために調整または訓練された異なるニューラルネットワークよりも高いレベルの精度および信頼性で、特定のタイプの入力を処理し、特定のタイプの出力を生成するように、各ニューラルネットワーク114を調整することができるような、十分に異なるものであることができる。ニューラルネットワーク114の調整は、各ニューラルネットワーク114に対して異なるパラメータ128を設定すること、各ニューラルネットワーク114に対してパラメータ128を異なるように微調整すること、または異なる重み(例えば、ハイパーパラメータ、もしくは学習率)、テンソルフローなどを割り当てることを含むことができる。したがって、ニューラルネットワークならびに/あるいはシステムの調整または訓練プロセスおよび目標に基づいて、ニューラルネットワーク114に対して適切なパラメータ128を設定することで、システム全体の性能を改善することができる。
【0019】
AIアクセラレータ108のニューラルネットワーク114は、例えば、畳み込みニューラルネットワーク(CNN)、深層畳み込みネットワーク、順伝播型ニューラルネットワーク(例えば、多層パーセプトロン(MLP))、深層順伝播型ニューラルネットワーク、放射基底関数ニューラルネットワーク、コホネン自己組織化ニューラルネットワーク、回帰型ニューラルネットワーク、モジュール型ニューラルネットワーク、長期/短期メモリニューラルネットワークなど、任意のタイプのニューラルネットワークを含むことができる。ニューラルネットワーク114は、自然言語処理など、データ(例えば、画像、音声、映像)処理、オブジェクトもしくは特徴認識、レコメンダ機能、データもしくは画像分類、データ(例えば、画像)解析などを実施するために展開または使用することができる。
【0020】
一例として、また1つまたは複数の実施形態では、ニューラルネットワーク114は、畳み込みニューラルネットワークとして構成することができ、または畳み込みニューラルネットワークを含むことができる。畳み込みニューラルネットワークは、それぞれ異なる目的に役立ち得る、1つもしくは複数の畳み込みセル(またはプーリング層)およびカーネルを含むことができる。畳み込みニューラルネットワークは、畳み込みカーネル(場合によっては、単に「カーネル」と呼ばれる)を含み、組み込み、および/または使用することができる。畳み込みカーネルは入力データを処理することができ、プーリング層は、例えば、maxなどの非線形関数を使用して、データを単純化し、それによって不要な特徴を低減することができる。畳み込みニューラルネットワークを含むニューラルネットワーク114は、画像、音声、または任意のデータの認識もしくは他の処理を容易にすることができる。例えば、(例えば、センサからの)入力データ110を、ファンネルを形成する畳み込みニューラルネットワークの畳み込み層に渡して、入力データ110の検出された特徴を圧縮することができる。畳み込みニューラルネットワークの第1の層は第1の特性を検出することができ、第2の層は第2の特性を検出することができ、その先も同様である。
【0021】
畳み込みニューラルネットワークは、視覚心像、音声情報、および/または他の任意のタイプもしくは形態の入力データ110を解析するように構成された、深層順伝播型人工ニューラルネットワークのタイプであることができる。畳み込みニューラルネットワークは、最小限の前処理を使用するように設計された、多層パーセプトロンを含むことができる。畳み込みニューラルネットワークは、重み共有アーキテクチャおよび翻訳不変性特性に基づいて、シフト不変または空間不変人工ニューラルネットワークを含むことができ、またはそのように呼ぶことができる。畳み込みニューラルネットワークは、他のデータ分類/処理アルゴリズムと比較して相対的に少ない前処理を使用することができるので、畳み込みニューラルネットワークは、他のデータ分類/処理アルゴリズムのためにマニュアル設計されてもよいフィルタを自動的に学習して、ニューラルネットワーク114の構成、確立、またはセットアップと関連付けられた効率を改善することによって、他のデータ分類/処理技術と比べて技術的利点を提供することができる。
【0022】
ニューラルネットワーク114は、ニューロンもしくはノードの、入力層116および出力層122を含むことができる。ニューラルネットワーク114はまた、ニューロンもしくはノードの、畳み込み層、プーリング層、全結合層、および/または正規化層を含むことができる、1つまたは複数の隠れ層118、119を有することができる。ニューラルネットワーク114では、各ニューロンは、前の層におけるいくつかの位置から入力を受信することができる。全結合層では、各ニューロンは、前の層の全ての要素からの入力を受信することができる。
【0023】
ニューラルネットワーク114の各ニューロンは、前の層の受容野からの入力値に何らかの関数を適用することによって、出力値を計算することができる。入力値に適用される関数は、重みのベクトルおよびバイアス(一般的には実数)によって指定される。ニューラルネットワーク114における(例えば、訓練フェーズ中の)学習は、バイアスおよび/または重みを漸増的に調節することによって進行することができる。重みのベクトルおよびバイアスは、フィルタと呼ぶことができ、入力の何らかの特徴(例えば、特定の形状)を表すことができる。畳み込みニューラルネットワークの際立った特徴は、多くのニューロンが同じフィルタを共有できることである。これにより、各受容野が独自のバイアスおよび重みのベクトルを有するのではなく、単一のバイアスおよび重みの単一のベクトルを、該フィルタを共有する全ての受容野にわたって使用することができるので、メモリフットプリントが低減される。
【0024】
例えば、畳み込み層では、システムは、畳み込み演算を入力層116に適用して、結果を次の層に渡すことができる。畳み込みは、個々のニューロンの応答をエミュレートして刺激を入力することができる。各畳み込みニューロンは、その受容野に対してのみデータを処理することができる。畳み込み演算は、全結合順伝播型ニューラルネットワークと比較して、ニューラルネットワーク114で使用されるニューロンの数を低減することができる。したがって、畳み込み演算は、自由パラメータの数を低減して、より少ないパラメータでネットワークをより深層化することを可能にすることができる。例えば、入力データ(例えば、画像データ)サイズにかかわらず、同じ共有重みをそれぞれ有するサイズ5×5のタイリング領域は、25個のみの学習可能パラメータを使用してもよい。このように、畳み込みニューラルネットワークを有する第1のニューラルネットワーク114は、逆伝播を使用することによって多くの層を有する従来の多層ニューラルネットワークを訓練する際の、勾配消失または発散の問題を解決することができる。
【0025】
ニューラルネットワーク114(例えば、畳み込みニューラルネットワークで構成される)は、1つまたは複数のプーリング層を含むことができる。1つまたは複数のプーリング層は、ローカルプーリング層またはグローバルプーリング層を含むことができる。プーリング層は、1つの層におけるニューロンクラスタの出力を組み合わせて、次の層における単一のニューロンとすることができる。例えば、最大プーリングは、前の層におけるニューロンのクラスタそれぞれからの最大値を使用することができる。別の例は、前の層におけるニューロンのクラスタそれぞれからの平均値を使用することができる、平均プーリングである。
【0026】
ニューラルネットワーク114(例えば、畳み込みニューラルネットワークで構成される)は、全結合層を含むことができる。全結合層は、1つの層の全てのニューロンを別の層の全てのニューロンに結合することができる。ニューラルネットワーク114は、畳み込み層で重みを共有して構成することができ、それは同じフィルタが層内の各受容野に使用されることを指すことができ、それにより、メモリフットプリントが低減され、第1のニューラルネットワーク114の性能が改善される。
【0027】
隠れ層118、119は、入力データ(例えば、仮想現実システムなどからのセンサデータ)に基づいて、情報を検出するように調整または構成されるフィルタを含むことができる。システムがニューラルネットワーク114(例えば、畳み込みニューラルネットワーク)の各層を通るにつれて、システムは、第1の層からの入力を翻訳し、変換された入力を第2の層に出力することができ、その先も同様である。ニューラルネットワーク114は、検出、処理、および/または計算されるオブジェクトもしくは情報のタイプ、ならびに入力データ110のタイプに基づいて、1つまたは複数の隠れ層118、119を含むことができる。
【0028】
いくつかの実施形態では、畳み込み層は、ニューラルネットワーク114(例えば、CNNとして構成される)のコアビルディングブロックである。層のパラメータ128は、小さい受容野を有するが、入力ボリュームの深さ全体を通って延在する、学習可能なフィルタ(またはカーネル)のセットを含むことができる。順方向パスの間、各フィルタは、入力ボリュームの幅および高さにわたって畳み込まれて、フィルタのエントリと入力との間のドット積を計算し、該フィルタの二次元活性化マップを作成する。結果として、ニューラルネットワーク114は、入力のある空間位置である特定のタイプの特徴を検出すると活性化する、フィルタを学習させることができる。深さ次元に沿って全てのフィルタの活性化マップを積み重ねることで、畳み込み層の全出力ボリュームが形成される。したがって、出力ボリュームの全てのエントリは、入力の小さい領域に注目し、同じ活性化マップのニューロンとパラメータを共有する、ニューロンの出力として解釈することもできる。畳み込み層では、ニューロンは、前の層の制限されたサブエリアから入力を受信することができる。一般的に、サブエリアは正方形形状のもの(例えば、サイズ5×5)である。ニューロンの入力エリアはその受容野と呼ばれる。そのため、全結合層では、受容野は前の層全体である。畳み込み層では、受容エリアは前の層全体よりも小さいものであり得る。
【0029】
第1のニューラルネットワーク114は、(例えば、入力データ110に基づいて、オブジェクト、イベント、ワード、および/または他の特徴の確率を検出もしくは決定することによって)入力データ110を検出、分類、セグメント化、および/または翻訳するように訓練することができる。例えば、ニューラルネットワーク114の第1の入力層116は、入力データ110を受信し、入力データ110を処理してデータを第1の中間出力に変換し、第1の中間出力を第1の隠れ層118に伝達することができる。第1の隠れ層118は、第1の中間出力を受信し、第1の中間出力を処理して第1の中間出力を第2の中間出力に変換し、第2の中間出力を第2の隠れ層119に伝達することができる。第2の隠れ層119は、第2の中間出力を受信し、第2の中間出力を処理して第2の中間出力を第3の中間出力に変換し、第3の中間出力を、例えば出力層122に伝達することができる。出力層122は、第3の中間出力を受信し、第3の中間出力を処理して第3の中間出力を出力データ112に変換し、出力データ112を(例えば、場合によっては、ユーザに対するレンダリングのため、格納のためなど、後処理エンジンに)伝達することができる。出力データ112は、例として、オブジェクト検出データ、強化/翻訳/拡張されたデータ、推奨、分類、および/またはセグメント化されたデータを含むことができる。
【0030】
再び図1Aを参照すると、AIアクセラレータ108は、1つまたは複数の記憶デバイス126を含むことができる。記憶デバイス126は、AIアクセラレータ108と関連付けられた任意のタイプもしくは形態のデータを、格納、保持、または維持するように、設計または実装することができる。例えば、データは、AIアクセラレータ108によって受信される入力データ110、および/または出力データ112(例えば、次のデバイスもしくは処理段階に出力される前)を含むことができる。データは、ニューラルネットワーク114および/またはプロセッサ124の処理段階のいずれかに使用される、またはいずれかからの、中間データを含むことができる。データは、記憶デバイス126から読み取るかまたはアクセスすることができる、ニューラルネットワーク114のニューロンに入力される、また該ニューロンで処理する、1つもしくは複数のオペランドを含むことができる。例えば、データは、記憶デバイス126に格納し、そこから読み取るかまたはアクセスすることができる、入力データ、重み情報、および/またはバイアス情報、活性化関数情報、ならびに/あるいは1つもしくは複数のニューロン(またはノード)のためのパラメータ128、および/またはニューラルネットワーク114の層を含むことができる。データは、記憶デバイス126に書き込み、またそこに格納することができる、ニューラルネットワーク114のニューロンからの出力データを含むことができる。例えば、データは、記憶デバイス126に転送するかもしくは書き込み、格納することができる、ニューラルネットワーク114の1つもしくは複数のニューロン(またはノード)および/または層のための、活性化データ、改良もしくは更新されたデータ(例えば、訓練段階などからの重み情報および/またはバイアス情報、活性化関数情報、および/または他のパラメータ128)を含むことができる。
【0031】
いくつかの実施形態では、AIアクセラレータ108は1つまたは複数のプロセッサ124を含むことができる。1つまたは複数のプロセッサ124は、ニューラルネットワーク114またはAIアクセラレータ108のうち任意の1つもしくは複数に対する入力データを前処理するための、ならびに/あるいはニューラルネットワーク114またはAIアクセラレータ108のうち任意の1つもしくは複数に対する出力データを後処理するための、任意の論理、回路類、および/または処理構成要素(例えば、マイクロプロセッサ)を含むことができる。1つまたは複数のプロセッサ124は、ニューラルネットワーク114またはAIアクセラレータ108の1つもしくは複数の演算を構成、制御、および/または管理するための、論理、回路類、処理構成要素、および/または機能性を提供することができる。例えば、プロセッサ124は、ニューラルネットワーク114と関連付けられたデータまたは信号を受信して、(例えば、ニューラルネットワーク114の演算を実装する回路類に対するクロックゲート制御を介して)消費電力を制御または低減してもよい。別の例として、プロセッサ124は、(例えば、AIアクセラレータ108の様々な構成要素における、例えば並列の)別個の処理のため、(例えば、AIアクセラレータ108の同じ構成要素における、異なる時間もしくは段階での)逐次処理のため、あるいは記憶デバイスの異なるメモリスライスに、または異なる記憶デバイスに格納するため、データを区画化および/または再配置してもよい。いくつかの実施形態では、プロセッサ124は、特定の重み、活性化関数、および/またはパラメータ情報の識別、選択、ならびに/あるいはニューラルネットワーク114のニューロンおよび/または層へのロードによって、特定の文脈に対して演算を行い、特定のタイプの処理を提供し、ならびに/あるいは特定のタイプの入力データをアドレスするように、ニューラルネットワーク114を構成することができる。
【0032】
いくつかの実施形態では、AIアクセラレータ108は、ディープラーニングおよび/またはAIワークロードを扱うかもしくは処理するように、設計および/または実装される。例えば、AIアクセラレータ108は、人工ニューラルネットワーク、マシンビジョン、および機械学習を含む人工知能用途のため、ハードウェアアクセラレーションを提供することができる。AIアクセラレータ108は、ロボティックス関連、物のインターネット(IoT)関連、または他のデータ集約的もしくはセンサ駆動のタスクを扱う演算向けに構成することができる。AIアクセラレータ108は、マルチコアまたは複数の処理要素(PE)設計を含んでもよく、人工現実(例えば、仮想、拡張、もしくは混合現実)システム、スマートフォン、タブレット、およびコンピュータなど、様々なタイプおよび形態のデバイスに組み込むことができる。AIアクセラレータ108の特定の実施形態は、少なくとも1つのデジタル信号プロセッサ(DSP)、コプロセッサ、マイクロプロセッサ、コンピュータシステム、プロセッサのヘテロジニアスコンピューティング構成、グラフィックス処理装置(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、および/または特定用途向け集積回路(ASIC)を含むかあるいはそれらを使用して実装することができる。AIアクセラレータ108は、トランジスタベース、半導体ベース、および/または量子コンピューティングベースのデバイスであることができる。
【0033】
次に図1Bを参照すると、AIに関連する処理を実施するためのデバイスの例示の一実施形態が示される。概要では、デバイスは、例えば、図1Aに関連して上述した1つまたは複数の特徴を有する、AIアクセラレータ108を含むかまたはそれに対応することができる。AIアクセラレータ108は、1つまたは複数の記憶デバイス126(例えば、スタティックランダムアクセスメモリ(SRAM)デバイスなどのメモリ)、1つまたは複数のバッファ、複数の処理要素(PE)回路またはPE回路のアレイ、他の論理または回路類(例えば、加算器回路類)、ならびに/あるいは他の構造または構成(例えば、相互接続、データバス、クロック回路類、電力ネットワーク)を含むことができる。上述の要素または構成要素はそれぞれ、ハードウェア、または少なくともハードウェアとソフトウェアの組み合わせの形で実装される。ハードウェアは、例えば、回路要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子、および/またはワイヤもしくは導電性コネクタ)を含むことができる。
【0034】
AIアクセラレータ108において実装されたニューラルネットワーク114(例えば、人工ニューラルネットワーク)では、ニューロンは、様々な形態を取ることができ、処理要素(PE)またはPE回路と呼ぶことができる。ニューロンは、対応するPE回路として実装することができ、ニューロンで起こり得る処理/活性化は、PE回路で実施することができる。PEは接続されて、異なるパターンが異なる機能的目的に役立つ、特定のネットワークパターンまたはアレイとなる。人工ニューラルネットワークのPEは、(例えば、半導体の実現例の実施形態では)電気的に動作し、アナログ、デジタル、またはハイブリッドのいずれかであってもよい。生体シナプスの作用に匹敵するために、PE間の接続に、適正なシステム出力を作成するように校正または「訓練」することができる、乗法的な重みを割り当てることができる。
【0035】
PEは、(例えば、ニューロンのマッカロック-ピッツモデルを表す)次式に関して定義することができる。
ζ=Σ (1)
y=σ(ζ) (2)
式中、ζは入力の重み付き合計(例えば、入力ベクトルおよびタップ重みベクトルの内積)であり、σ(ζ)は重み付き合計の関数である。重みおよび入力要素がベクトルwおよびxを形成する場合、重み付き合計ζは単純なドット積となる。
ζ=w・x (3)
これは、活性化関数(例えば、閾値比較の場合)または伝達関数のどちらかと呼ばれることがある。いくつかの実施形態では、1つまたは複数のPEはドット積エンジンと呼ばれる場合がある。ニューラルネットワーク114に対する入力(例えば、入力データ110)xは、入力空間からのものであることができ、出力(例えば、出力データ112)は出力空間の一部である。いくつかのニューラルネットワークでは、出力空間Yは、{0,1}のように単純なものであってもよく、または複雑な多次元(例えば、複数チャネル)空間(例えば、畳み込みニューラルネットワークの場合)であってもよい。ニューラルネットワークは、入力空間の自由度ごとに1つの入力、および出力空間の自由度ごとに1つの出力を有する傾向がある。
【0036】
いくつかの実施形態では、PEは、シストリックアレイとして配置および/または実装することができる。シストリックアレイは、セルまたはノードと呼ばれる、PEなどの結合されたデータ処理装置(DPU)のネットワーク(例えば、ホモジニアスネットワーク)であることができる。各ノードまたはPEは、上流側の隣接するノードまたはPEから受信したデータの関数として、部分結果を独立して計算することができ、結果を自身に格納することができ、結果を例えば下流側に渡すことができる。シストリックアレイは、特定用途向けに構成されたハードワイヤードまたはソフトウェアであることができる。ノードまたはPEは、固定された同一のものであることができ、シストリックアレイの相互接続はプログラム可能であることができる。シストリックアレイは同期型データ転送に依存することができる。
【0037】
再び図1Bを参照すると、PE120に対する入力xは、記憶デバイス126(例えば、SRAM)から読み取られるかまたはアクセスされる、入力ストリーム132の一部であることができる。入力ストリーム132は、PEの1つの行(水平のバンクもしくはグループ)に方向付けることができ、PEのうち1つもしくは複数にわたって共有するか、またはそれぞれのPEに対する入力としてのデータ部分(重なり合うもしくは重なり合わないデータ部分)に区画化することができる。重みストリーム(例えば、記憶デバイス126から読み取られる)における重み134(もしくは重み情報)は、PEの列(垂直のバンクもしくはグループ)に方向付けるかまたは提供することができる。列のPEはそれぞれ、同じ重み134を共有するか、または対応する重み134を受信してもよい。標的のPEそれぞれに対する入力および/または重みは、(例えば、他のPEを通過せずに)標的のPEに(例えば、記憶デバイス126から)直接ルーティングすることができ、あるいは1つもしくは複数のPEを通して(例えば、PEの行もしくは列に沿って)ルーティングすることができる。各PEの出力は、PEアレイの外に(例えば、他のPEを通過せずに)直接ルーティングすることができ、あるいは1つもしくは複数のPEを通して(例えば、PEの列に沿って)PEアレイを出るようにルーティングすることができる。PEの各列の出力は、それぞれの列の加算器回路類において合算または加算し、PEのそれぞれの列に対するバッファ130に提供することができる。バッファ130は、受信した出力を記憶デバイス126に提供、転送、ルーティング、書込み、および/または格納することができる。いくつかの実施形態では、記憶デバイス126によって格納された出力(例えば、ニューラルネットワークの1つの層からの活性化データ)を、記憶デバイス126から検索するかまたは読み取り、後の時間における(ニューラルネットワークの後続層の)処理のため、PE120のアレイに対する入力として使用することができる。特定の実施形態では、記憶デバイス126によって格納された出力を、AIアクセラレータ108に対する出力データ112として、記憶デバイス126から検索するかまたは読み取ることができる。
【0038】
次に図1Cを参照すると、AIに関連する処理を実施するためのデバイスの例示の一実施形態が示される。概要では、デバイスは、例えば、図1Aおよび図1Bに関連して上述した1つまたは複数の特徴を有する、AIアクセラレータ108を含むかまたはそれに対応することができる。AIアクセラレータ108は、1つまたは複数のPE120、他の論理または回路類(例えば、加算器回路類)、ならびに/あるいは他の構造または構成(例えば、相互接続、データバス、クロック回路類、電力ネットワーク)を含むことができる。上述の要素または構成要素はそれぞれ、ハードウェア、または少なくともハードウェアとソフトウェアの組み合わせの形で実装される。ハードウェアは、例えば、回路要素(例えば、1つもしくは複数のトランジスタ、論理ゲート、レジスタ、メモリデバイス、抵抗素子、導電素子、容量素子、および/またはワイヤもしくは導電性コネクタ)を含むことができる。
【0039】
いくつかの実施形態では、PE120は、1つもしくは複数の乗累算(MAC)ユニットまたは回路類140を含むことができる。1つまたは複数のPEは、場合によっては、(単独でまたは集合的に)MACエンジンと呼ぶことができる。MACユニットは、乗累算を実施するように構成される。MACユニットは、乗算器回路、加算器回路、および/または累算器回路を含むことができる。乗累算は、2つの数字の積を計算し、その積を累算器に加える。MAC演算は、累算器オペランドa、ならびに入力bおよびcに関連して、次のように表すことができる。
a←a+(b×c) (4)
いくつかの実施形態では、MACユニット140は、組み合わせ論理に実装された乗算器とそれに続く加算器(例えば、組み合わせ論理を含むもの)、ならびに結果を格納する累算器レジスタ(例えば、順序および/または組み合わせ論理を含むもの)を含んでもよい。累算器レジスタの出力は、加算器の1つの入力にフィードバックすることができるので、各クロックサイクルにおいて、乗算器の出力を累算器レジスタに加算することができる。
【0040】
上述したように、MACユニット140は、乗算および加算両方の機能を実施することができる。MACユニット140は2つの段階で演算することができる。MACユニット140は、最初に、第1の段階で所与の数(入力)の積を計算し、結果を第2の段階の演算(例えば、加算および/または累算)のために転送することができる。nビットのMACユニット140は、nビット乗算器、2nビット加算器、および2nビット累算器を含むことができる。(例えば、PEにおける)複数のMACユニット140またはMACユニットのアレイ140は、並列積分、畳み込み、相関、行列乗算、データ分類、および/またはデータ解析タスクのため、シストリックアレイの形で配置することができる。
【0041】
本明細書に記載する様々なシステムおよび/またはデバイスを、コンピューティングシステムに実装することができる。図1Dは、代表的なコンピューティングシステム150のブロック図を示している。いくつかの実施形態では、図1Aのシステムは、コンピューティングシステム150の処理装置156(またはプロセッサ156)の少なくとも一部を形成することができる。コンピューティングシステム150は、例えば、スマートフォン、他の移動電話、タブレットコンピュータ、ウェアラブルコンピューティングデバイス(例えば、スマートウォッチ、眼鏡、ヘッドマウントディスプレイ)、デスクトップコンピュータ、ラップトップコンピュータなどのデバイス(例えばコンシューマデバイス)として実装するか、あるいは分散型コンピューティングデバイスを実装することができる。コンピューティングシステム150は、VR、AR、MR体験を提供するために実装することができる。いくつかの実施形態では、コンピューティングシステム150は、プロセッサ156、記憶デバイス158、ネットワークインターフェース151、ユーザ入力デバイス152、およびユーザ出力デバイス154など、従来の専用またはカスタムのコンピュータ構成要素を含むことができる。
【0042】
ネットワークインターフェース151は、(ローカル/リモート)サーバまたはバックエンドシステムのネットワークインターフェースも接続される、ローカル/ワイドエリアネットワーク(例えば、インターネット)に対する接続を提供することができる。ネットワークインターフェース151は、有線インターフェース(例えば、イーサネット)、ならびに/あるいはWi-Fi、ブルートゥース、またはセルラーデータネットワーク規格(例えば、3G、4G、5G、LTEなど)などの様々なRFデータ通信規格を実装する無線インターフェースを含むことができる。
【0043】
ユーザ入力デバイス152は、ユーザがコンピューティングシステム150に信号を提供するのに用いることができる、任意のデバイス(または複数のデバイス)を含むことができ、コンピューティングシステム150は、特定のユーザ要求または情報を示すものとして信号を解釈することができる。ユーザ入力デバイス152は、キーボード、タッチパッド、タッチスクリーン、マウスもしくは他のポインティングデバイス、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、マイクロフォン、センサ(例えば、モーションセンサ、視線追跡センサなど)などのいずれかまたは全てを含むことができる。
【0044】
ユーザ出力デバイス154は、コンピューティングシステム150がユーザに情報を提供するのに用いることができる、任意のデバイスを含むことができる。例えば、ユーザ出力デバイス154は、コンピューティングシステム150によって生成されるかまたは該システムに送達される画像を表示する、ディスプレイを含むことができる。ディスプレイは、例えば、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)を含む発光ダイオード(LED)、投影システム、陰極線管(CRT)などの様々な画像生成技術を、サポートしている電子部品(例えば、デジタル・アナログもしくはアナログ・デジタル変換器、信号プロセッサなど)とともに組み込むことができる。入力および出力両方のデバイスとして機能する、タッチスクリーンなどのデバイスを使用することができる。ユーザ出力デバイス154は、ディスプレイに加えてまたはディスプレイの代わりに提供することができる。例としては、インジケータ光、スピーカ、触覚「ディスプレイ」デバイス、プリンタなどが挙げられる。
【0045】
いくつかの実現例としては、コンピュータプログラム命令を非一時的なコンピュータ可読記憶媒体に格納する、マイクロプロセッサ、記憶装置、およびメモリなどの電子構成要素が挙げられる。本明細書に記載する特徴の多くは、コンピュータ可読記憶媒体として符号化されたプログラム命令のセットとして指定される、プロセスとして実現することができる。これらのプログラム命令は、1つまたは複数のプロセッサによって実行されると、プログラム命令に示されている様々な動作をプロセッサに実施させる。プログラム命令またはコンピュータコードの例としては、コンパイラによって作成されるものなどの機械コード、およびインタープリタを使用してコンピュータ、電子構成要素、またはマイクロプロセッサによって実行される、より高次のコードを含むファイルが挙げられる。好適なプログラミングを通して、プロセッサ156は、コンピューティングシステム150に対して、サーバまたはクライアントによって実施されるものとして本明細書に記載する機能性、またはメッセージ管理サービスと関連付けられた他の機能性のいずれかを含む、様々な機能性を提供することができる。
【0046】
コンピューティングシステム150は例示であり、変形および修正が可能であることが認識されるであろう。本開示と関連して使用されるコンピュータシステムは、本明細書には具体的に記載しない他の能力を有することができる。更に、コンピューティングシステム150について、特定のブロックを参照して記載しているが、該ブロックは説明の便宜上定義されているものであり、構成部品の特定の物理的配置を示唆しようとするものではないことが理解されるべきである。例えば、異なるブロックを、同じ設備に、同じサーバラックに、または同じマザーボード上に配置することができる。更に、ブロックは必ずしも物理的に別個の構成要素に対応していなくてもよい。ブロックは、例えば、プロセッサをプログラミングするか、または適切な制御回路類を提供することによって、様々な動作を実施するように構成することができ、様々なブロックは、初期の構成がどのように得られるかに応じて再構成可能であってもなくてもよい。本開示の実現例は、回路類およびソフトウェアの任意の組み合わせを使用して実装される電子デバイスを含む、様々な装置で実現することができる。
【0047】
B.入力オペランドのスパース性および定常性に基づいて、MAC回路類を動作させる方法およびデバイス
本明細書の開示は、MAC回路類の入力オペランド(または入力データ)のスパース性および/または定常性に基づいて、MAC回路類の消費電力を低減するシステム、方法、およびデバイスの実施形態を含む。一態様では、入力オペランドのスパース性は、入力オペランドの値が所定の値を有するか否か(例えば、「0」の値か否か)を示す。一態様では、入力オペランドの定常性は、入力オペランドの値がある期間にわたって(例えば、所定数のクロックサイクルの間)不変のままか否かを示してもよい。1つの方策では、入力オペランドをMAC回路類に提供するオペランドレジスタの値は、入力オペランド(例えば、整数表現もしくは小数表現で表される重みまたは活性化値)が定常ではない(例えば、入力オペランドの値が所定数のクロックサイクル内で変化する)ことに応答して、入力オペランド(例えば、重みもしくは活性化値)がスパースではない(例えば、入力オペランドの値が「0」などの所定の値ではない)ことに応答して、あるいは両方に応答して、更新されてもよい。オペランドレジスタの値は、入力オペランドが定常であり(例えば、入力オペランドの値が所定数のクロックサイクルの間変化しない)、入力オペランドがスパースである(例えば、入力オペランドの値が「0」である)場合、維持されてもよい。
【0048】
一態様では、MAC回路類のフィードバック入力に提供される累算データは、第1の入力オペランドのスパース性および第2の入力オペランドのスパース性にしたがって、累算を動作不能または動作可能にするように維持または更新される。例えば、累算データは、第1の入力オペランドおよび第2の入力オペランドの両方がスパースではない(例えば、非ゼロ値を有する)ことに応答して、MAC回路類の出力にしたがって変更または更新され、MAC回路類のフィードバック入力に提供されて、累算を動作可能にする。例えば、MAC回路類140のフィードバック入力に提供される累算データを、保持または維持し、第1の入力オペランドまたは第2の入力オペランドのうち少なくとも1つがスパースである(例えば、ゼロ値を有する)ことに応答して、累算を動作不能にする更新なしで、MAC回路類140のフィードバック入力に提供し続けることができる。
【0049】
一態様では、入力オペランドは、入力オペランドの定常性にしたがって、MAC回路類の入力に提供されて、MAC回路類に入力オペランドがロードされる。例えば、入力オペランドは、入力オペランドが定常ではない(例えば、入力オペランドが所定数のクロックサイクル内で変化する)ことに応答して、MAC回路類の入力に提供される。例えば、入力オペランドは、第1のクロックサイクルの間、MAC回路類の入力に提供され、その後、入力オペランドが定常である(例えば、入力オペランドが所定数のクロックサイクルの間変化しない)ことに応答して、提供された入力オペランドは、MAC回路類の入力において維持される。
【0050】
有利には、開示されるシステム、方法、およびデバイスにより、MAC回路類への入力におけるトグルまたは変化の数を低減することによって、乗累算による消費電力を低減することが可能になる。一態様では、入力オペランドが定常である(または入力オペランドがゼロ値を有する)場合、入力オペランドがスパースである(またはゼロ値を有する)ことがMAC回路類の出力に影響したりそれを変化させたりしないので、MAC回路類への累算データフィードバックは不変のまま維持または保持されてもよい。別の態様では、入力オペランドが定常である(または入力オペランドの値が所定数のクロックサイクルの間変化しない)場合、MAC回路類への入力は不変のまま維持または保持されてもよい。したがって、乗算または累算の場合のMAC回路類によるトグルの数を低減して、省電力を達成することができる。
【0051】
図2を参照すると、本開示の例示の一実現例による、乗累算(MAC)回路類の電力効率を改善するための回路類を備えたAIアクセラレータ108のブロック図が示されている。いくつかの実施形態では、AIアクセラレータ108は、MACコントローラ210、1つまたは複数のMACユニット140、および/または保持回路類220を含む。これらの構成要素は、ともに動作して、各入力オペランドに関して定常性およびスパース性を決定してもよく、決定された定常性および/またはスパース性にしたがって乗累算を実施することができる。いくつかの実施形態では、AIアクセラレータ108は、図2に示されるよりも多数の、より少数の、またはそれらとは異なる構成要素を含む。
【0052】
一態様では、MACユニット140は、2つの入力データまたは2つの入力オペランド(例えば、重みおよび活性化値)を入力ポートで受信し、累算データをフィードバックポートで受信し、次に2つの入力オペランドおよび累算データにしたがって乗累算を実施する。一態様では、MACユニット140は、2つの入力オペランドを乗算し、次に乗算結果を累算データと加算して、合計データを生成してもよい。MACユニット140は、合計データを累算レジスタに出力してもよく、それによって、累算データが合計データに更新され、MACユニット140のフィードバックポートに提供されてもよい。
【0053】
MACコントローラ210(本明細書では、「制御回路類」とも呼ばれる)は、各入力オペランドに関して、定常性、スパース性、または両方を検出し、(例えば、検出されたスパース性および/または定常性にしたがって)保持回路類220を構成するための1つまたは複数の制御信号を生成する、構成要素であるかあるいはそれを含むことができる。入力オペランドは、ニューラルネットワークの重みもしくは活性化値(または活性化関数)であってもよい。一態様では、スパース性は、入力オペランドの値が所定の値(例えば、「0」)を有するか否かを示す。一態様では、定常性は、入力オペランドの値が所定数のクロックサイクルの間不変のままであるか否かを示す。一方もしくは両方の入力オペランドに関するスパース性、定常性、または両方にしたがって、MACコントローラ210は、保持回路類220を構成するための1つまたは複数の制御信号を生成してもよい。制御信号を生成するプロセス例は、図5および図6に関して下記に提供される。
【0054】
保持回路類220は、MACコントローラ210からの1つまたは複数の制御信号にしたがって、MAC回路類140に提供される入力オペランドおよび/または累算データを制御する、構成要素であるかあるいはそれを含むことができる。一実現例では、保持回路類220は、入力オペランドを提供または保持する、MAC回路類140の対応する入力に結合された、オペランドレジスタを含む。保持回路類220はまた、回路類140に提供される累算データを更新、提供、または保持する、MAC回路類140の出力ポートとMAC回路類140のフィードバックポートとの間に結合された、累算レジスタを含んでもよい。
【0055】
一態様では、保持回路類220は、入力オペランド(例えば、重みもしくは活性化値)が定常ではない(例えば、入力オペランドの値が、5、10、50、もしくは他の所定数のクロックサイクルなど、所定数のクロックサイクル内で変化する)ことに応答して、入力オペランド(例えば、重みもしくは活性化値)がスパースではない(例えば、入力オペランドの値が「0」ではない)ことに応答して、あるいは両方に応答して、入力オペランドをMAC回路類140の入力に提供してもよい。保持回路類220は、第1のクロックサイクルで、入力オペランドをMAC回路類140の入力に提供し、次に、入力オペランドが定常である(例えば、入力オペランドの値が所定数のクロックサイクルの間変化しない)こと、および入力オペランドがスパースである(例えば、入力オペランドの値が「0」である)ことに応答して、提供された入力オペランドをMAC回路類140の入力で保持または維持してもよい。
【0056】
一態様では、保持回路類220は、第1の入力オペランドのスパース性および第2の入力オペランドのスパース性にしたがって、MAC回路類140のフィードバック入力に提供される累算データを更新して、累算を動作可能にしてもよい。保持回路類220は、第1の入力オペランドおよび第2の入力オペランドの両方がスパースではない(例えば、非ゼロ値を有する)ことに応答して、MAC回路類から出力される合計にしたがって累算データを更新し、更新された累算データをMAC回路類のフィードバック入力に提供して、累算を動作可能にしてもよい。保持回路類220は、第1の入力オペランドまたは第2の入力オペランドのうち少なくとも1つがスパースである(例えば、ゼロ値を有する)ことに応答して、MAC回路類140のフィードバック入力に提供される累算データを更新なしで保持または維持してもよく、それによって、MAC回路類140は累算を実施しなくてもよい。
【0057】
図3を参照すると、本開示の例示の一実現例による、電力効率を改善するMAC回路類および保持回路類の例示の回路図が示されている。いくつかの実施形態では、ANDゲート360と、ORゲート310、340と、論理ゲート315、345、365と、レジスタ320、325、350、355、370(またはフリップフロップ)とが、図2の保持回路類220を構成する。MACコントローラ210は、入力オペランドAの定常性およびスパース性にしたがって、負荷A信号およびバブルA信号を生成してもよい。同様に、MACコントローラ210は、入力オペランドBの定常性およびスパース性にしたがって、負荷B信号およびバブルB信号を生成してもよい。一態様では、ORゲート310、340、論理ゲート315、345、およびレジスタ325、350はともに動作して、負荷A信号、負荷B信号、バブルA信号、およびバブルB信号にしたがって、入力オペランドAおよび入力オペランドBをMAC回路類140に提供して、MAC回路類140による不要なトグリングを回避または低減してもよい。同様に、一態様では、ANDゲート360、レジスタ320、355、370、および論理ゲート365はともに動作して、累算データを更新し、MAC回路類140のフィードバックポートに提供するか、または累算データを維持して、MAC回路類140による不要なトグリングを回避してもよい。いくつかの実施形態では、保持回路類は、図3に示されるものに追加の、それよりも少数の、またはそれらとは異なる構成要素を含んでもよい。
【0058】
1つの構成では、ORゲート310は、負荷A信号を受信する第1の入力ポートと、バブルA信号を受信する第2の入力ポートと、論理ゲート315のイネーブルポートに結合された出力ポートとを含む。ORゲート310は、負荷A信号およびバブルA信号に対してOR論理演算を実施して、負荷A信号とバブルA信号との間のOR論理演算の結果を論理ゲート315に提供してもよい。例えば、ORゲート310の出力ポートは、負荷A信号、バブルA信号、または両方が論理値「1」を有することに応答して、論理値「1」を提供、送信、または出力する。例えば、ORゲート310の出力ポートは、負荷A信号およびバブルA信号の両方が論理値「0」を有することに応答して、論理値「0」を提供、送信、または出力する。
【0059】
1つの構成では、論理ゲート315は、ORゲート310の出力ポートに結合されたイネーブルポートと、クロック信号を受信するクロック入力ポートと、レジスタ325の制御ポートに結合されたクロック出力ポートとを含む。論理ゲート315は、統合クロックゲーティングゲートまたは送信ゲートとして実現されてもよい。この構成では、論理ゲート315は、ORゲート310からのOR論理演算の結果にしたがって、クロック信号をレジスタ325に渡すかまたは提供してもよい。例えば、論理ゲート315は、ORゲート310からのOR論理演算の結果が論理値「1」であることに応答して、クロック信号をレジスタ325に提供する。例えば、論理ゲート315は、ORゲート310によるOR論理演算の結果が論理値「0」であることに応答して、クロック信号をレジスタ325に提供しない。
【0060】
1つの構成では、レジスタ325は、論理ゲート315の出力ポートに結合された制御ポートと、入力オペランドAを受信する入力ポートと、MAC回路類140の第1の入力ポートに結合された出力ポートとを含む。一態様では、レジスタ325はDQフリップフロップとして実現される。この構成では、レジスタ325は、論理ゲート315を通して提供されるクロック信号にしたがって、入力オペランドAをMAC回路類140の第1の入力ポートに渡すかまたは提供してもよい。例えば、レジスタ325は、論理ゲート315の出力ポートにおける立ち上がりエッジに応答して、入力オペランドAをMAC回路類140の第1の入力ポートに提供する。例えば、1つまたは複数の実施形態では、レジスタ325は、レジスタ325の入力ポートにおける入力オペランドAにかかわらず、論理ゲート315の出力ポートにおける立ち上がりエッジの欠落に応答して、MAC回路類140の第1の入力ポートに提供された前の入力オペランドAを保存、保持、または維持する。
【0061】
1つの構成では、ORゲート340は、負荷B信号を受信する第1の入力ポートと、バブルB信号を受信する第2の入力ポートと、論理ゲート345のイネーブルポートに結合された出力ポートとを含む。ORゲート340は、負荷B信号およびバブルB信号に対してOR論理演算を実施して、負荷B信号とバブルB信号との間のOR論理演算の結果を論理ゲート345に提供してもよい。例えば、ORゲート340の出力ポートは、負荷B信号、バブルB信号、または両方が論理値「1」を有することに応答して、論理値「1」を提供、送信、または出力する。例えば、ORゲート340の出力ポートは、負荷B信号およびバブルB信号の両方が論理値「0」を有することに応答して、論理値「0」を提供、送信、または出力する。
【0062】
1つの構成では、論理ゲート345は、ORゲート340の出力ポートに結合されたイネーブルポートと、クロック信号を受信するクロック入力ポートと、レジスタ350の制御ポートに結合されたクロック出力ポートとを含む。論理ゲート345は、統合クロックゲーティングゲートまたは送信ゲートとして実現されてもよい。この構成では、論理ゲート345は、ORゲート340からのOR論理演算の結果にしたがって、クロック信号をレジスタ350に渡すかまたは提供してもよい。例えば、論理ゲート345は、ORゲート340からのOR論理演算の結果が論理値「1」であることに応答して、クロック信号をレジスタ350に提供する。例えば、論理ゲート345は、ORゲート340によるOR論理演算の結果が論理値「0」であることに応答して、クロック信号をレジスタ350に提供しない。
【0063】
1つの構成では、レジスタ350は、論理ゲート345の出力ポートに結合された制御ポートと、入力オペランドBを受信する入力ポートと、MAC回路類140の第2の入力ポートに結合された出力ポートとを含む。一態様では、レジスタ350はDQフリップフロップとして実現される。この構成では、レジスタ350は、論理ゲート345を通して提供されるクロック信号にしたがって、入力オペランドBをMAC回路類140の第2の入力ポートに渡すかまたは提供してもよい。例えば、レジスタ350は、送信ゲート345の出力ポートにおける立ち上がりエッジに応答して、入力オペランドBをMAC回路類140の第2の入力ポートに提供する。例えば、また1つまたは複数の実施形態では、レジスタ350は、レジスタ350の入力ポートにおける入力オペランドBにかかわらず、論理ゲート345の出力ポートにおける立ち上がりエッジの欠落に応答して、MAC回路類140の第2の入力ポートに提供された前の入力オペランドBを保存、保持、または維持する。
【0064】
1つの構成では、レジスタ320は、クロック信号を受信する制御ポートと、バブルA信号を受信する入力ポートと、ANDゲート360の第1の入力ポートに結合された出力ポートとを含む。一態様では、レジスタ320はDQフリップフロップとして実現される。この構成では、レジスタ320は、制御ポートで受信されるクロック信号にしたがって、バブルA信号をANDゲート360の第1の入力ポートに渡すかまたは提供してもよい。例えば、レジスタ320は、クロック信号の立ち上がりエッジに応答して、入力オペランドAをANDゲート360の第1の入力ポートに提供する。例えば、またいくつかの実施形態では、レジスタ320は、レジスタ320の入力ポートにおけるバブルA信号にかかわらず、クロック信号の立ち上がりエッジの欠落に応答して、ANDゲート360の第1の入力ポートに提供された前のバブルA信号を保存、保持、または維持する。
【0065】
1つの構成では、レジスタ355は、クロック信号を受信する制御ポートと、バブルB信号を受信する入力ポートと、ANDゲート360の第2の入力ポートに結合された出力ポートとを含む。一態様では、レジスタ355はDQフリップフロップとして実現される。この構成では、レジスタ355は、制御ポートで受信されるクロック信号にしたがって、バブルB信号をANDゲート360の第2の入力ポートに渡すかまたは提供してもよい。例えば、レジスタ355は、クロック信号の立ち上がりエッジに応答して、入力オペランドBをANDゲート360の第2の入力ポートに提供する。例えば、レジスタ355は、特定の実施形態では、レジスタ355の入力ポートにおけるバブルB信号にかかわらず、クロック信号の立ち上がりエッジの欠落に応答して、ANDゲート360の第2の入力ポートに提供された前のバブルB信号を保存、保持、または維持する。
【0066】
1つの構成では、ANDゲート360は、レジスタ320の出力ポートに結合された第1の入力ポートと、レジスタ355の出力ポートに結合された第2の入力ポートと、論理ゲート365のイネーブルポートに結合された出力ポートとを含む。ANDゲート360は、レジスタ320の出力およびレジスタ355の出力に対してAND論理演算を実施して、AND論理演算の結果を論理ゲート365に提供してもよい。例えば、ANDゲート360の出力ポートは、レジスタ320の出力およびレジスタ355の出力の両方が論理値「1」を有することに応答して、論理値「1」を提供、送信、または出力する。例えば、ANDゲート360の出力ポートは、レジスタ320の出力、レジスタ355の出力、または両方が論理値「0」を有することに応答して、論理値「0」を提供、送信、または出力する。
【0067】
1つの構成では、論理ゲート365は、ANDゲート360の出力ポートに結合されたイネーブルポートと、クロック信号を受信するクロック入力ポートと、レジスタ370(「累算レジスタ370」とも呼ばれる)の制御ポートに結合されたクロック出力ポートとを含む。論理ゲート365は、統合クロックゲーティングゲートまたは送信ゲートとして実現されてもよい。この構成では、論理ゲート365は、ANDゲート360からのAND論理演算の結果にしたがって、クロック信号をレジスタ370に渡すかまたは提供してもよい。例えば、論理ゲート365は、ANDゲート360からのAND論理演算の結果が論理値「1」であることに応答して、クロック信号をレジスタ370に提供する。例えば、論理ゲート365は、ANDゲート360によるAND論理演算の結果が論理値「0」であることに応答して、クロック信号をレジスタ370に提供しない。
【0068】
1つの構成では、レジスタ370(「累算レジスタ370」とも呼ばれる)は、論理ゲート365の出力ポートに結合された制御ポートと、MAC回路140の出力ポートに結合された入力ポートと、MAC回路類140のフィードバックポートに結合された出力ポートとを含む。一態様では、レジスタ370はDQフリップフロップとして実現される。この構成では、レジスタ370は、制御ポートで受信したクロック信号にしたがって、合計データをMAC回路類140の出力ポートから受信し、累算データをMAC回路類140のフィードバックポートに提供してもよい。例えば、レジスタ370は、論理ゲート365の出力における立ち上がりエッジに応答して、累算データをレジスタ370の入力ポートで受信した合計データに更新し、更新された累算データをMAC回路類140のフィードバックポートに提供して、累算を可能にする。例えば、レジスタ370は、1つまたは複数の実施形態では、レジスタ370の入力ポートにおける合計データにかかわらず、論理ゲート365の出力における立ち上がりエッジの欠落に応答して、MAC回路類140のフィードバックポートに提供される累算データを、累算データに対する更新なしで保存、保持、または維持する。
【0069】
一態様では、レジスタ325は、論理ゲート315の出力にしたがって、入力オペランドAをMAC回路類140の第1の入力に提供してもよい。例えば、レジスタ325は、入力オペランドA(例えば、重みもしくは活性化値)が定常ではない(例えば、入力オペランドの値が所定数のクロックサイクル内で変化する)ことに応答して、入力オペランドA(例えば、重みもしくは活性化値)がスパースではない(例えば、入力オペランドの値が「0」ではない)ことに応答して、あるいは両方に応答して、入力オペランドAをMAC回路類140の第1の入力に提供してもよい。
【0070】
保持回路類220は、第1のクロックサイクルで、入力オペランドをMAC回路類140の入力に提供し、次に、入力オペランドが定常である(例えば、入力オペランドの値が所定数のクロックサイクルの間変化しない)こと、および入力オペランドがスパースである(例えば、入力オペランドの値が「0」である)ことに応答して、提供された入力オペランドをMAC回路類140の入力で保持または維持してもよい。
【0071】
一態様では、保持回路類220は、第1の入力オペランドのスパース性および第2の入力オペランドのスパース性にしたがって、累算データをMAC回路類140のフィードバック入力に提供して、累算を動作可能にしてもよい。保持回路類220は、第1の入力オペランドおよび第2の入力オペランドの両方がスパースではない(例えば、非ゼロ値を有する)ことに応答して、MAC回路類140から出力される合計データを受信し、累算データを合計データに更新し、更新された累算データをMAC回路類のフィードバックポートに提供して、累算を動作可能にしてもよい。保持回路類220は、第1の入力オペランドまたは第2の入力オペランドのうち少なくとも1つがスパースである(例えば、ゼロ値を有する)ことに応答して、MAC回路類140の出力ポートからの合計データにかかわらず、MAC回路類140のフィードバック入力に提供される累算データを更新なしで保持または維持してもよく、それによって、MAC回路類140は累算を実施しなくてもよく、または累算データは不変のままであってもよい。
【0072】
MAC回路類140は、その第1の入力ポートで受信した入力オペランドAおよびその第2の入力ポートで受信した入力オペランドBに対して、乗算を実施してもよい。加えて、MAC回路類140は、フィードバックポートで受信した累算データを乗算結果に加算して、合計データを生成し、合計データを累算レジスタ370に提供してもよい。
【0073】
図4を参照すると、本開示の例示の一実現例による、MAC回路類の入力オペランドのスパース性および定常性に基づいて制御信号を生成するプロセス400を示すフローチャートが示されている。いくつかの実施形態では、MACコントローラ210は、入力オペランドに対して、負荷信号およびバブル信号を生成し、負荷信号およびバブル信号を、図3に関して上述したような回路類に提供する。
【0074】
1つの方策では、MACコントローラ210は、入力オペランドがスパースであるか否かを決定する(410)。例えば、MACコントローラ210は、入力オペランドの値が「0」であるか否かを決定する。入力オペランドの値が「0」である場合、MACコントローラ210は、入力オペランドがスパースであると決定してもよい。入力オペランドの値が「0」ではない場合、MACコントローラ210は、入力オペランドがスパースではないと決定してもよい。
【0075】
1つの方策では、MACコントローラ210は、入力オペランドが定常であるか否かを決定する(420A、420B)。例えば、MACコントローラ210は、入力オペランドの値が所定数のクロックサイクル内で変化するか否かを決定する。入力オペランドの値が所定数のクロックサイクル内で変化する場合、MACコントローラ210は、入力オペランドが定常ではないと決定してもよい。入力オペランドの値が所定数のクロックサイクルの間不変のままである場合、MACコントローラ210は、入力オペランドが定常であると決定してもよい。
【0076】
いくつかの実施形態では、入力オペランドがスパースおよび定常であるとの決定に応答して、MACコントローラ210は、第1のクロックサイクルで、論理値「0」を有するバブル信号および論理値「1」を有する負荷信号を生成し、次に、例えば定常性が終わるまで、続きのクロックサイクルで、論理値「0」を有するバブル信号および論理値「0」を有する負荷信号を生成する(430)。この場合、MAC回路類140の入力は、負荷信号が論理値「1」を有することにしたがって、第1のクロックサイクルにおける入力オペランドの値「0」をロードしてもよい。MAC回路類140の入力は、例えば定常性が終わるまで、負荷信号が論理値「0」を有するのにしたがって、続きのクロックサイクルで維持されてもよい。更に、累算レジスタ370は、いくつかの実施形態では、レジスタ370の入力ポートにおける合計データにかかわらず、バブル信号が論理値「0」を有するのに応答して、MAC回路類140のフィードバックポートに提供される累算データを更新なしで保存、保持、または維持して、MAC回路類140による累算を動作不能にするかまたは阻止してもよい。
【0077】
いくつかの実施形態では、入力オペランドがスパースであるが定常ではないとの決定に応答して、MACコントローラ210は、論理値「0」を有するバブル信号および論理値「1」を有する負荷信号を生成する(435)。この場合、MAC回路類140の入力は、負荷信号が論理値「1」を有することにしたがって、入力オペランドをロードしてもよい。更に、累算レジスタ370は、1つまたは複数の実施形態では、レジスタ370の入力ポートにおける合計データにかかわらず、バブル信号が論理値「0」を有するのに応答して、MAC回路類140のフィードバックポートに提供される累算データを更新なしで保存、保持、または維持して、MAC回路類140による累算を動作不能にするかまたは阻止してもよい。
【0078】
いくつかの実施形態では、入力オペランドがスパースではないが定常であるとの決定に応答して、MACコントローラ210は、第1のクロックサイクルで、論理値「1」を有するバブル信号および論理値「1」を有する負荷信号を生成し、次に、例えば定常性が終わるまで、続きのクロックサイクルで、論理値「1」を有するバブル信号および論理値「0」を有する負荷信号を生成する(440)。この場合、MAC回路類140の入力は、論理値「1」を有する負荷信号にしたがって、第1のクロックサイクルにおける入力オペランドの値をロードしてもよい。MAC回路類140の入力は、例えば定常性が終わるまで、負荷信号が論理値「0」を有するのにしたがって、続きのクロックサイクルで維持されてもよい。更に、累算レジスタ370は、バブル信号が論理値「1」を有することに応答して、累算データをMAC回路類140の出力からの合計データに更新することができ、更新された累算データをMAC回路類140のフィードバックポートに提供して、MAC回路類140による累算を動作可能にすることができる。
【0079】
いくつかの実施形態では、入力オペランドがスパースでも定常でもないとの決定に応答して、MACコントローラ210は、論理値「1」を有するバブル信号および論理値「1」を有する負荷信号を生成する(445)。この場合、MAC回路類140の入力は、負荷信号が論理値「1」を有することにしたがって、入力オペランドの値をロードしてもよい。更に、累算レジスタ370は、1つまたは複数の実施形態では、バブル信号が論理値「1」を有することに応答して、累算データをMAC回路類140の出力からの合計データに更新し、更新された累算データをMAC回路類140のフィードバックポートに提供して、MAC回路類140による累算を動作可能にしてもよい。
【0080】
図5を参照すると、本開示の例示の一実現例による、MAC回路類を動作させるプロセス500を示すフローチャートが示されている。いくつかの実施形態では、プロセス500は、図1CのAIアクセラレータ108によって実施される。他の実施形態では、プロセス500は、図5に示されるよりも多数の、より少数の、またはそれらとは異なるステップを含む。
【0081】
1つの方策では、制御回路類(例えば、図2のMACコントローラ210)は入力オペランドを受信する(510)。入力オペランドは、ニューラルネットワークの入力データ(例えば、重みまたは活性化値)であってもよい。入力オペランドは整数形式または小数形式で表されてもよい。
【0082】
1つの方策では、制御回路類は入力オペランドのスパース性を決定する(520)。一態様では、オペランドのスパース性は、入力オペランドの値が所定の値(例えば、論理値「0」)を有するか否かを示す。例えば、MACコントローラ210は、入力オペランドの値が「0」であるか否かを決定する。入力オペランドの値が「0」である場合、制御回路類は、入力オペランドがスパースであると決定してもよい。入力オペランドの値が「0」ではない場合、制御回路類は、入力オペランドがスパースではないと決定してもよい。
【0083】
1つの方策では、制御回路類は入力オペランドの定常性を決定する(530)。一態様では、定常性は、入力オペランドの値が所定の期間(例えば、所定数のクロックサイクル)の間不変のままであるか否かを示す。例えば、入力オペランドの値が所定数のクロックサイクル内で変化する場合、制御回路類は、入力オペランドが定常ではないと決定してもよい。入力オペランドの値が所定数のクロックサイクルの間不変のままである場合、制御回路類は、入力オペランドが定常であると決定してもよい。
【0084】
1つの方策では、制御回路類は、入力オペランドの決定されたスパース性および定常性にしたがって、追加の回路類(例えば、保持回路類220)が、入力オペランドをMAC回路類に入力として提供する(540)ように構成する。例えば、制御回路類は、入力オペランドの決定されたスパース性および定常性にしたがって、1つまたは複数の制御信号(例えば、負荷信号およびバブル信号)を生成し、図3および図4に関して上述したように、制御信号を保持回路類に提供する。制御回路類による制御信号にしたがって、MAC回路類140は、乗累算を実施しながら不要なトグリングを除去して、消費電力を低減するかまたは電力効率を改善することができる。
【0085】
図6を参照すると、本開示の例示の一実現例による、MAC回路類を動作させるプロセス600を示すフローチャートが示されている。いくつかの実施形態では、プロセス600は、図2のAIアクセラレータ108によって実施される。一実施形態では、プロセス600は他のエンティティによって実施される。いくつかの実施形態では、プロセス600は、図6に示されるよりも多数の、より少数の、またはそれらとは異なるステップを含む。
【0086】
1つの方策では、MAC回路類140は、第1のオペランド、第2のオペランド、および累算データを受信する(610)。第1のオペランドは、ニューラルネットワーク計算に対する重みを含んでもよく、第2のオペランドは、ニューラルネットワーク計算に対する活性化値を含んでもよい。第1のオペランドおよび第2のオペランドは、整数形式または小数形式で表されてもよい。1つの方策では、MAC回路類140は、i)第1のオペランドおよび第2のオペランドの乗算、ならびにii)累算データの合計を、累算レジスタ(例えば、図3の累算レジスタ370)に提供する(620)。いくつかの実施形態では、累算レジスタ370は、合計データをMAC回路類から受信する(630)。1つの方策では、累算レジスタ370は、第1のオペランドおよび第2のオペランド両方の値が非ゼロであるか否かを示す制御信号を受信する(640)。1つの方策では、累算レジスタ370は、第1のオペランドおよび第2のオペランド両方の値が非ゼロであることを示す制御信号に応答して、合計をMAC回路類に提供する。累算レジスタ370は、第1のオペランドの第1の値または第2のオペランドの第2の値のうち少なくとも1つがゼロであることを示す制御信号に応答して、MAC回路類に対する合計の提供を迂回してもよい。1つの方策では、AND論理演算が、第1のオペランドの第1の値が非ゼロであるか否かを示す第1の信号、および第2のオペランドの第2の値が非ゼロであるか否かを示す第2の信号に対して実施されて、制御信号を生成してもよい。1つの方策では、累算レジスタ370は、第1のオペランドの第1の値または第2のオペランドの第2の値のうち少なくとも1つがゼロであることを示す制御信号に応答して、MAC回路類に対する合計の提供を迂回してもよい。
【0087】
一態様では、制御回路類(例えば、MACコントローラ210)は、第1のオペランドおよび第2のオペランドのスパース性および定常性を検出し、検出されたスパース性および定常性にしたがって、制御信号を生成してもよい。1つの方策では、制御回路類は、第1のオペランドがゼロ値を有するか否かを決定して、第1のオペランドがスパースであるか否かを決定する。第1のオペランドがゼロ値を有する場合、制御回路類は、第1のオペランドがスパースであると決定してもよい。第1のオペランドが非ゼロ値を有する場合、制御回路類は、第1のオペランドがスパースではないと決定してもよい。1つの方策では、制御回路類は、2つ以上の異なるクロックサイクルにおける第1のオペランドの値を比較して、第1のオペランドが定常であるか否かを決定する。例えば、第1のオペランドの値が所定数のクロックサイクル内で変化した場合、制御回路類は、第1のオペランドが定常ではないと決定する。第1のオペランドの値が所定数のクロックサイクル内で変化しなかった場合、制御回路類は、第1のオペランドが定常であると決定する。
【0088】
1つの方策では、第1のオペランドは、i)第1のオペランドの第1の値が非ゼロであることを示す第1の信号、またはii)第1のオペランドの第1の値が変化していることを示す第3の信号のうち少なくとも1つに応答して、第1の入力レジスタによってMAC回路類に提供されてもよい。第2のオペランドは、i)第2のオペランドの第2の値が非ゼロであることを示す第2の信号、またはii)第2のオペランドの第2の値が変化していることを示す第4の信号のうち少なくとも1つに応答して、第2の入力レジスタによってMAC回路類に提供されてもよい。OR論理演算は、追加の回路類によって、第1の信号および第3の信号に対して実施されて、別の制御信号を生成してもよい。別の制御信号は、追加の論理回路類によって、第1の入力レジスタに提供されてもよい。第1の入力レジスタは、別の制御信号が非ゼロであることに応答して、第1のオペランドをMAC回路類の第1の入力に提供するように構成されてもよい。
【0089】
一態様では、累算は、累算データを合計データに更新し、更新された累算データをMAC回路類に提供することによって、MAC回路類140によって実施されてもよい。更に、累算は、累算データを更新しないことによって、動作不能にされるかまたは迂回されてもよい。累算を動作不能にするかまたは迂回することで、MAC回路類140による不要なトグリングを回避し、消費電力を低減することが可能になる。
【0090】
いくつかの例示的な実現例について記載してきたが、上記は例示であって限定ではなく、例として提示されていることが明白である。特に、本明細書に提示する例の多くには、方法行為またはシステム要素の特定の組み合わせが関与するが、それらの行為および要素は、同じ目的を遂行するために他の形で組み合わせることができる。1つの実現例に関連して考察される行為、要素、および特徴は、他の1つまたは複数の実現例における類似の役割から除外されないものとする。
【0091】
本明細書に開示する実施形態と関連して記載される、様々なプロセス、動作、例示の論理、論理ブロック、モジュール、および回路を実現するのに使用される、ハードウェアおよびデータ処理構成要素は、汎用シングルもしくはマルチチッププロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他のプログラマブル論理デバイス、離散的ゲートもしくはトランジスタ論理、離散的ハードウェア構成要素、または本明細書に記載の機能を実施するように設計された上記のものの任意の組み合わせを用いて、実現または実施されてもよい。汎用プロセッサは、マイクロプロセッサ、または任意の従来のプロセッサ、コントローラ、マイクロコントローラ、もしくは状態機械であってもよい。プロセッサはまた、DSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、DSPコアと連動した1つもしくは複数のマイクロプロセッサ、または他の任意のかかる構成など、コンピューティングデバイスの組み合わせとして実現されてもよい。いくつかの実施形態では、特定のプロセスおよび方法は、所与の機能に特異的な回路類によって実施されてもよい。メモリ(例えば、メモリ、メモリユニット、記憶デバイスなど)は、本開示に記載する様々なプロセス、層、およびモジュールを完成させるかもしくは容易にする、データおよび/またはコンピュータコードを格納する、1つまたは複数のデバイス(例えば、RAM、ROM、フラッシュメモリ、ハードディスク記憶装置など)を含んでもよい。メモリは、揮発性メモリもしくは不揮発性メモリであるかまたはそれらを含んでもよく、本開示に記載する様々なアクティビティおよび情報構造をサポートする、データベース構成要素、オブジェクトコード構成要素、スクリプト構成要素、または他の任意のタイプの情報構造を含んでもよい。例示的実施形態によれば、メモリは、処理回路を介してプロセッサに通信可能に接続され、本明細書に記載の1つもしくは複数のプロセスを(例えば、処理回路および/またはプロセッサによって)実行するためのコンピュータコードを含む。
【0092】
本開示は、様々な動作を遂行するための任意の機械可読媒体上における、方法、システム、およびプログラム製品を想到する。本開示の実施形態は、既存のコンピュータプロセッサを使用して、またはこの目的もしくは別の目的のために組み込まれる、適切なシステムのための専用コンピュータプロセッサによって、または配線接続システムによって、実現されてもよい。本開示の範囲内の実施形態は、格納された機械実行可能命令もしくはデータ構造を保持するかまたは有する、機械可読媒体を備えるプログラム製品を含む。かかる機械可読媒体は、汎用もしくは専用コンピュータ、またはプロセッサを有する他の機械によってアクセスすることができる、任意の利用可能な媒体であることができる。例として、かかる機械可読媒体は、RAM、ROM、EPROM、EEPROM、または他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、あるいは機械実行可能命令またはデータ構造の形態で所望のプログラムコードを保持または格納するのに使用することができ、汎用もしくは専用コンピュータまたはプロセッサを有する他の機械でアクセスすることができる、他の任意の媒体を含むことができる。上記のものの組み合わせはまた、機械可読媒体の範囲に含まれる。機械実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理機械に、特定の機能または機能群を実施させる、命令およびデータを含む。
【0093】
本明細書で使用する用語および専門用語は、説明のためのものであって限定とみなされるべきではない。本明細書における、「~を含む」、「~を備える」、「~を有する」、「~を含有する」、「~を伴う」、「~によって特徴付けられる」、「~を特徴とする」およびそれらの変形の使用は、該用語とともに列挙される項目、それらの等価物、および追加の項目、ならびに排他的に該用語とともに列挙される項目から成る代替実現例を網羅することを意味する。一実現例では、本明細書に記載するシステムおよび方法は、記載する要素、行為、または構成要素のうちの1つ、2つ以上の各組み合わせ、または全てから成る。
【0094】
単数形で言及される本明細書のシステムおよび方法の実現例または要素または行為に対する任意の言及は、複数のこれらの要素を含む実現例も包含することができ、本明細書の任意の実現例または要素または行為に対する複数形での任意の言及は、単一の要素のみを含む実現例も包含することができる。単数形または複数形での言及は、本明細書に開示されるシステムもしくは方法、それらの構成要素、行為、または要素を、単数または複数の構成に限定しようとするものではない。任意の情報、行為、または要素に基づいた任意の行為または要素に対する言及は、行為または要素が、任意の情報、行為、または要素に少なくとも部分的に基づく場合の実現例を含むことができる。
【0095】
本明細書に開示する任意の実現例は、他の任意の実現例または実施形態と組み合わせることができ、「ある実現例」、「いくつかの実現例」、「一実現例」などに対する言及は、必ずしも相互に排他的ではなく、実現例と関連して記載する特定の特徴、構造、または特性が、少なくとも1つの実現例または実施形態に含まれ得ることを示すものとする。かかる用語は、本明細書で使用するとき、必ずしも全てが同じ実現例を指すものではない。任意の実現例は、本明細書に開示する態様および実現例と一致する任意の手法で、他の任意の実現例と包括的または排他的に組み合わせることができる。
【0096】
図面、詳細な説明、または任意のクレームにおける技術的特徴に参照符号が付される場合、参照符号は、図面、詳細な説明、およびクレームの了解度を向上するために含まれるものである。したがって、参照符号が存在してもしなくても、任意のクレーム要素の範囲に対する限定的影響を何ら有さない。
【0097】
本明細書に記載するシステムおよび方法は、それらの特性から逸脱することなく、他の特定の形態で具体化されてもよい。「約」、「およそ」、「実質的に」、または他の程度を表す用語に対する言及は、別段の明示がない限り、所与の測定値、単位、または範囲から±10%の変動を含む。結合された要素は、直接または介在要素を用いて、互いに電気的、機械的、または物理的に結合することができる。本明細書に記載するシステムおよび方法の範囲は、したがって、上述の記載ではなく添付のクレームによって示され、クレームの等価物の意味および範囲内にある変更は包含される。
【0098】
「結合された」という用語およびその変形は、2つの部材を直接または間接的に互いに接合することを含む。かかる接合は、静的(例えば、恒久的もしくは固定)または可動(例えば、除去可能もしくは解放可能)であってもよい。かかる接合は、互いに直接結合され、または互いに対して結合された2つの部材によって、別個の介在部材および互いに結合された任意の追加の中間部材を使用して互いに結合された2つの部材によって、あるいは2つの部材の一方とともに単一の単位体として一体的に形成された介在部材を使用して互いに結合された2つの部材によって、達成されてもよい。「結合された」またはその変形が、追加の用語によって修正された場合(例えば、直接結合された)、上述の「結合された」の包括的定義は、追加の用語の平易な言葉の意味によって修正され(例えば、「直接結合された」は、任意の別個の介在部材を有さない2つの部材の接合を意味する)、それによって上述の「結合された」の包括的定義よりも狭い定義になる。かかる結合は機械的、電気的、または流体的であってもよい。
【0099】
「または」に対する言及は包括的と解釈することができるので、「または」を使用して記載されるいずれの用語も、記載される用語の単一、2つ以上、および全てのいずれかを示すことができる。「『A』および『B』のうち少なくとも1つ」は、「A」のみ、「B」のみ、ならびに「A」および「B」の両方を含むことができる。「備える」または他のオープンな用語と併せて使用されるかかる言及は、追加の項目を含むことができる。
【0100】
様々な要素のサイズ、寸法、構造、形状、および比率、パラメータの値、取付け構造、材料使用、色、向きにおける変形例など、記載される要素および行為の修正は、本明細書に開示する主題の教示および利点から実質的に逸脱することなく行うことができる。例えば、一体的に形成されるものとして示される要素は、複数の部分または要素で構築することができ、要素の位置を反転させるかまたは別の形で変動させることができ、離散的要素または位置の性質もしくは数を改変または変更することができる。他の置換、修正、変更、および省略も、本開示の範囲から逸脱することなく、開示の要素および動作の設計、動作条件、および配置に対して行うことができる。
【0101】
本明細書における要素の位置に対する言及(例えば、「上側」、「下側」、「上方」、「下方」)は単に、図面における様々な要素の向きを説明するために使用されるものである。様々な要素の向きは、他の例示的実施形態によって異なってもよく、かかる変形は本開示に包含されるものとする。
図1A
図1B
図1C
図1D
図2
図3
図4
図5
図6
【国際調査報告】