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

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

▶ 台湾積體電路製造股▲ふん▼有限公司の特許一覧

特開2023-26404スキップロジックを有するビット単位の積和累積
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023026404
(43)【公開日】2023-02-24
(54)【発明の名称】スキップロジックを有するビット単位の積和累積
(51)【国際特許分類】
   G06N 3/06 20060101AFI20230216BHJP
【FI】
G06N3/06
【審査請求】有
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022128737
(22)【出願日】2022-08-12
(31)【優先権主張番号】63/232,915
(32)【優先日】2021-08-13
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】63/254,574
(32)【優先日】2021-10-12
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/679,260
(32)【優先日】2022-02-24
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】500262038
【氏名又は名称】台湾積體電路製造股▲ふん▼有限公司
【氏名又は名称原語表記】Taiwan Semiconductor Manufacturing Company,Ltd.
【住所又は居所原語表記】No.8, Li-Hsin Rd.6, Hsinchu Science Park, Hsinchu, TAIWAN
(74)【代理人】
【識別番号】100102532
【弁理士】
【氏名又は名称】好宮 幹夫
(74)【代理人】
【識別番号】100194881
【弁理士】
【氏名又は名称】小林 俊弘
(74)【代理人】
【識別番号】100215142
【弁理士】
【氏名又は名称】大塚 徹
(72)【発明者】
【氏名】柯文昇
(72)【発明者】
【氏名】邱硯晟
(72)【発明者】
【氏名】洪哲民
(72)【発明者】
【氏名】張孟凡
(57)【要約】      (修正有)
【課題】ワード単位の入力及びビット単位の重みで入力ベクトルと重みベクトルの積の部分和累積を実行するための方法、装置及びシステムを提供する。
【解決手段】方法は、ワード単位の入力及びビット単位の重みで複数の入力ベクトル及び複数の重みベクトルの積に部分和累積を行って、部分累積積和を生成するステップ110と、部分累積積和をしきい値条件と比較するステップ130と、部分累積積和がしきい値条件を満たす場合、和累積の複数の残りの計算をスキップすることを指示するようにスキップインジケータをアサートするステップ140と、を含む。
【選択図】図13
【特許請求の範囲】
【請求項1】
ワード単位の入力及びビット単位の重みで複数の入力ベクトル及び複数の重みベクトルの積に部分和累積を行って、部分累積積和を生成するステップと、
前記部分累積積和をしきい値条件と比較するステップと、
前記部分累積積和が前記しきい値条件を満たす場合、和累積の複数の残りの計算をスキップすることを指示するようにスキップインジケータをアサートするステップと、
を含むデータ処理方法。
【請求項2】
前記部分累積積和が負であり、且つ1組の残りの未知の重みビットによって前記部分累積積和を正にすることができない場合、前記スキップインジケータをアサートする請求項1に記載の方法。
【請求項3】
前記部分累積積和に対して活性化関数を実行し、前記活性化関数の出力が0又は前記部分累積積和の大きい値に等しいことを記録するステップを更に含む請求項1又は2に記載の方法。
【請求項4】
前記部分累積積和が前記しきい値条件よりも小さい場合、前記ワード単位の入力及びビット単位の重みで前記入力ベクトル及び前記重みベクトルの残りの部分の積に第2の部分和累積を行って、第2の部分累積積和を生成するステップを更に含む請求項1又は2に記載の方法。
【請求項5】
それぞれ1組のM個の入力ベクトルに1組のM個の重みベクトルの複数の第1の重みビットを乗算して1組目のM個の積を計算し、前記1組目のM個の積を加算して第1の積和を計算し、且つ積和出力ピン群にて前記第1の積和を提供するための乗算累積回路ブロックと、
前記積和出力ピン群に結合される累積器入力ピン群を含み、前記累積器入力ピン群にて第1の値を受信し、前記第1の値を前記累積器回路ブロック内の累積値に加算して前記第1の値を累積して前記累積値を置き換え、且つ累積値出力ピン群にて前記累積値を提供するための累積器回路ブロックと、
前記累積値出力ピン群に結合される累積値入力ピン群を含み、前記累積値をしきい値と比較し、前記しきい値を満たす場合、スキップピンにてスキップ信号をアサートするためのスキップ回路ブロックと、
前記スキップピンに前記スキップ信号があるか否かをチェックし、前記スキップ信号がアサートされていない場合、前記乗算累積回路ブロックが前記組のM個の重みベクトルの次の重みビットを処理するようにし、前記スキップ信号がアサートされた場合、前記組のM個の重みベクトルの残りの部分の処理を停止し、出力準備完了信号をアサートし、且つ前記累積値を活性化回路に提供するための制御回路ブロックと、
を備えるデータ処理装置。
【請求項6】
前記スキップ回路ブロックは、
処理される前記組のM個の重みベクトルの重みビット位置に対して複数回シフトしたシフト入力和を入力和から減算して前記しきい値を計算し、且つ前記しきい値と前記累積値を比較するための減算回路ブロックを含む請求項5に記載の装置。
【請求項7】
前記累積器回路ブロックは、加算ピンを含み、前記加算ピンにより制御される時に前記累積値から前記第1の値を減算するために用いられ、前記制御回路ブロックは、更に前記第1の重みビットが前記組のM個の重みベクトルの複数の最上位ビットに対応する場合、前記加算ピンを介して前記累積器回路ブロックが前記第1の値を減算するように制御するために用いられる請求項5又は6に記載の装置。
【請求項8】
前記組のM個の入力ベクトルを記憶するための入力ラッチ回路ブロックと、
前記組のM個の重みビットを記憶するための重みビットラッチ回路ブロックと、を更に備え、
前記乗算累積回路ブロックは、前記第1の積和を計算するための乗算ブロック及び加算器ツリーを含む請求項5又は6に記載の装置。
【請求項9】
それぞれビット単位の重みで入力ノードと入力の複数の重みベクトルの複数の積を計算し、各積の総和を求めて各ビットの積和を計算し、各ビットに対するビット値の位置に基づいて前記積和を重み付けし、且つ前記積和を累積して累積積和とするための乗算累積装置と、
前記積和をしきい値と比較し、前記しきい値に達した場合にスキップ信号をアサートするためのスキップモジュールと、
前記スキップ信号がアサートされていない場合、前記乗算累積装置が前記重みベクトルの次のビットを処理するようにし、前記スキップ信号がアサートされた場合、前記乗算累積装置が前記重みベクトルの複数の残りの部分の処理を中止するようにするための制御ロジック装置と、
前記累積積和の値に基づいて前記入力ノードの畳み込み値を判定する活性化装置と、
を備えるデータ処理システム。
【請求項10】
前記しきい値は第1のしきい値であり、前記スキップモジュールは、更に第2のしきい値を前記積和の絶対値に加算するとともに、前記第1のしきい値と比較し、前記絶対値が前記第1のしきい値よりも大きい場合、前記スキップ信号をアサートするために用いられ、
前記第2のしきい値は、前記積和に基づく現在の値、前記入力ノードの全ての入力の入力和又は一定値の所定のしきい値である請求項9に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示内容は、データ処理方法、装置及びシステムに関する。
【背景技術】
【0002】
乗算累積器は、ワード単位及びビット単位で入力データと対応する重みデータを乗算するために利用可能である。この操作の出力は、人工知能ネットワークにおいてノードの間の接続を形成するために利用可能である。この場合に、乗算累積の出力を活性化関数に提供することができる。活性化関数は正規化線形ユニット又はReLU活性化関数である。関数の入力が0よりも小さい場合、0を返し、そうでなければ、値を返す。
【発明の概要】
【0003】
本開示内容は、ワード単位の入力及びビット単位の重みで入力ベクトルと重みベクトルの積に部分和累積を行って、部分累積積和を生成するステップと、部分累積積和をしきい値条件と比較するステップと、部分累積積和がしきい値条件を満たす場合、和累積の残りの計算をスキップすることを指示するようにスキップインジケータをアサートするステップと、を含むデータ処理方法を含有する。
【0004】
本開示内容は、それぞれ1組のM個の入力ベクトルに1組のM個の重みベクトルの第1の重みビットを乗算して1組目のM個の積を計算し、1組目のM個の積を加算して第1の積和を計算し、且つ積和出力ピン群にて第1の積和を提供するための乗算累積回路ブロックと、積和出力ピン群に結合される累積器入力ピン群を含み、累積器入力ピン群にて第1の値を受信し、第1の値を累積器回路ブロック内の累積値に加算して第1の値を累積して累積値を置き換え、且つ累積値出力ピン群にて累積値を提供するための累積器回路ブロックと、累積値出力ピン群に結合される累積値入力ピン群を含み、累積値をしきい値と比較し、しきい値を満たす場合、スキップピンにあるスキップ信号をアサートするためのスキップ回路ブロックと、スキップピンにスキップ信号があるか否かをチェックし、スキップ信号がアサートされていない場合、乗算累積回路ブロックが前記組のM個の重みベクトルの次の重みビットを処理するようにし、スキップ信号がアサートされた場合、前記組のM個の重みベクトルの残りの部分の処理を停止し、出力準備完了信号をアサートし、且つ累積値を活性化回路に提供するための制御回路ブロックと、を備えるデータ処理装置を含有する。
【0005】
本開示内容は、それぞれビット単位の重みで入力ノードと入力の複数の重みベクトルの複数の積を計算し、各積の総和を求めて各ビットの積和を計算し、各ビットに対するビット値の位置に基づいて積和を重み付けし、且つ積和を累積して累積積和とするための乗算累積装置と、積和をしきい値と比較し、前記しきい値に達した場合にスキップ信号をアサートするためのスキップモジュールと、スキップ信号がアサートされていない場合、乗算累積装置が重みベクトルの次のビットを処理するようにし、スキップ信号がアサートされた場合、乗算累積装置が重みベクトルの残りの部分の処理を中止するようにするための制御ロジック装置と、累積積和の値に基づいて入力ノードの畳み込み値を判定する活性化装置と、を備えるデータ処理システムを含有する。
【図面の簡単な説明】
【0006】
図面に合わせて、以下の詳細な記述に基づいて本開示内容の各態様を最もよく理解することができるであろう。業界における標準的な慣行に従い、各種の特徴が縮尺通りに描かれているわけではないことに留意されたい。実際には、明らかに検討するために、各種の特徴の寸法は任意に増減可能である。
図1】幾つかの実施例による機械学習において画像データを処理する時によく使用される3×3畳み込みの実例を説明する。
図2】より一般的な形態で幾つかの実施例による図1で説明された概念を説明する。
図3】幾つかの実施例によるReLU活性化関数を説明する。
図4】幾つかの実施例によるハードウェアにおいてMACをアルゴリズムで実現するための入力データ、重みベクトル及びMACのバイナリ表現を説明する。
図5】幾つかの実施例によるビット単位で入力値及び重みベクトルを処理するための数式を説明する。
図6】幾つかの実施例による入力I及び重みベクトルWのサンプル計算を説明する。
図7】幾つかの実施例によるスキップ評価及び活性化特徴を説明する。
図8】幾つかの実施例によるスキップ評価及び活性化特徴を説明する。
図9】幾つかの実施例によるスキップ評価及び活性化特徴を説明する。
図10】幾つかの実施例によるスキップ評価及び活性化特徴を説明する。
図11】幾つかの実施例によるスキップ評価及び活性化特徴を説明する。
図12】幾つかの実施例によるスキップ評価及び活性化特徴を説明する。
図13】幾つかの実施例によるスキップ評価及び活性化特徴のプロセスフローチャート100を説明する。
図14】幾つかの実施例によるMACスキップ回路の回路ブロック図を説明する各種の図面である。
図15】幾つかの実施例によるMACスキップ回路の回路ブロック図を説明する各種の図面である。
図16】幾つかの実施例によるMACスキップ回路の回路ブロック図を説明する各種の図面である。
図17】幾つかの実施例によるMACスキップ回路の回路ブロック図を説明する各種の図面である。
図18】幾つかの実施例によるMACスキップ回路の操作を説明する各種の図面である。
図19】幾つかの実施例によるMACスキップ回路の操作を説明する各種の図面である。
図20】幾つかの実施例によるMACスキップ回路の操作を説明する各種の図面である。
図21】幾つかの実施例によるMACスキップ回路の操作を説明する各種の図面である。
図22】幾つかの実施例によるMACスキップ回路の操作を説明する各種の図面である。
図23A】幾つかの実施例によるスキップモジュールにしきい値を提供することを説明するフローチャートである。
図23B】幾つかの実施例によるスキップモジュールにしきい値を提供することを説明するフローチャートである。
図24A】幾つかの実施例による状態機械モデル及び信号値を説明する。
図24B】幾つかの実施例による状態機械モデル及び信号値を説明する。
図25】幾つかの実施例による状態機械モデル及び信号値を説明する。
図26】幾つかの実施例によるMACスキップ回路を含むシステム図を説明する。
図27】幾つかの実施例によるMACスキップ回路によるエネルギー消費の低減のテストデータの結果を説明する。
【発明を実施するための形態】
【0007】
以下に開示される内容は、発明の異なる特徴の多くの異なる実施例又は実例を実現するために提供される。以下、本開示内容を簡略化するためにコンポーネント及び配置の特定の実例を記述する。勿論、これらは単なる実例であり、制限するためのものではない。例えば、以下の記述において、第2の特徴の上方又は上に第1の特徴を形成することは、第1の特徴と第2の特徴を直接接触させるように形成する実施例を含んでもよく、第1の特徴と第2の特徴が直接接触しないことを可能にするように第1の特徴と第2の特徴の間に追加の特徴を形成する実施例を含んでもよい。また、本開示内容では、各実例において素子の符号又はアルファベットを繰り返してよい。この繰り返しは、簡単且つ明瞭にするためであり、それ自身が検討される各種の実施例及び/又は構成の間の関係を指定しない。理解すべきなのは、信号は高1又は低0としてアサートされてよく、文脈又は慣例により別途規定されていない限り、本明細書に使用される「1」は「アサート」を示すと理解され、且つ、文脈又は慣例により別途規定されていない限り、本明細書に使用される「0」は「アサートされていない」を示すと理解される。装置及び設計によるが、当業者は必要に応じてこれらの信号を容易に変換することができる。
【0008】
人工ニューラルネットワーク分野では、機械学習により入力データを取得し、入力データに何らかの計算を実行してから、活性化関数を適用してデータを処理する。活性化関数の出力は、実質的に入力データを簡略化して表現したものである。入力データは、ノード層におけるデータノードであってよい。図1は、3×3畳み込みの実例を説明し、この実例は、通常、機械学習における画像データを処理するために用いられる。画像10は、単一の画素11からなる。画像は、例えば赤-緑-青(red-green-blue;RGB)又は色相-彩度-輝度(hue-saturation-luminescence;HSL)などの色空間で示されてよく、各色空間変数の1つの値は画素毎に割り当てられる。画像のノード12は、3×3の画素ブロックであり、ノード12における各画素11は、ノード12の画素11の各色空間変数の入力値I1-9を有する。3×3畳み込みにおける可能な計算の1つとしては、積和計算を使用し、各入力値I1-9にそれぞれ重みマトリックス14の重み値W1-9を乗算する。乗算を行う度に、各積の演算の総和を維持することができる。このような積和計算は、乗算累積演算/計算(multiply accumulate computation/calculation;MAC)16と呼ばれてよい。演算20に含まれるMAC16の出力は、演算20に含まれる活性化関数18に提供される。3×3畳み込みにおいて、使用される活性化関数は、通常、正規化線形活性化関数(正規化線形ユニット(rectified linear unit)又はReLU)である。ReLUは、出力y=max(0,x)の区分的関数であり、xはMAC16の結果である。従って、全ての負の値は0に設定され、非ゼロ値は入力の線形恒等式である。
【0009】
図2は、より一般的な形態で、即ち、任意の長さの入力ノードに対する形態で図1で説明された概念を説明する。各入力I~IN-1にそれぞれ重みベクトルW~WN-1を乗算する。続いて、積和計算(MAC)ではこれらの値の総和を求め、且つReLU活性化関数を実行する。出力OはReLU活性化関数の出力である。
【0010】
図3は、ReLU活性化関数のグラフ及びReLU活性化関数の区分的関数の表現を説明する。図3におけるグラフに示すように、x≦0の全ての値に対して、yの値=0であり、x>0の全ての値に対して、yの値=xである。この場合に、xの値が0に等しい場合、どの関数を使用しても、出力が「0」である(従って、関数がy={x,x≧0|0,x}であると規定された場合)ことに留意されたい。ReLU活性化関数に何らかの修正を行ってよい。
【0011】
今まで、既に一般的な意味でこれらの計算を検討した。例えば、汎用プロセッサで実行される、簡単なforループを含めたコンピュータプログラムを書き込むことができ、このループにより、INPUTアレイ及びWEIGHTアレイにMACを実行し、続いてMACの出力をReLUに伝達し、例えば以下のロジックが挙げられる。カウンタを整数で0に初期化する。蓄積変数(例えばMAC)を0に初期化する。長さがnであるとともに入力値が付いているINPUTアレイを提供する。長さがnであるとともに符号付き重み値が付いているWEIGHTアレイを提供する。カウンタ=0、カウンタ<nの場合、カウンタ++{MAC=MAC+(INPUT[カウンタ]*WEIGHT[カウンタ])。}出力=(0,MAC)の最大値である。出力値を提供する。
【0012】
大規模のデータセットについて、汎用プロセッサでの実行効率が低下する。効率を高めるには、このアルゴリズムは、例えば特定用途向け集積回路(application specific integrated circuit;ASIC)又はフィールドプログラマブルゲートアレイ(field programmable gate array;FPGA)などの専用ハードウェアで実現されてよい。しかしながら、専用ハードウェア(例えば特定用途向け集積回路(application specific integrated circuit;ASIC))でこのロジックを実現することは、デジタルロジックブロックでバイナリ数学を使用することに関わる。ここで、ハードウェアでMAC(及びReLU)を実現する文脈において記述する。ハードウェアによる実現は、MACの計算に関わり、且つバイナリフォーマットでReLUを実現する。
【0013】
図4は、ハードウェアにおいてMACをアルゴリズムで実現するための入力データ、重みベクトル及びMACのバイナリ表現を説明する。以下、スキップモジュールと組み合わせてハードウェアによる実現をより詳細に検討する。ノードにおけるデータポイントについて、入力データは、例えば振幅などの符号値のないノードとして表される。入力データの長さはNビットである。例えば、Nは、4ビット、8ビット、16ビットなどであってよい。例えば、Nが8である場合、各入力値は、0と255の間にある。重みベクトルは、2の補数形式の符号付き重み値である。従って、負の数は、最上位ビット(most significant bit;MSB)で1から始まる。各重みベクトルの長さはKビットである。Nは、Kと等しくてもよく、又は異なる値であってもよい。例えば、Kが8ビットである場合、各重み値は-128と127の間にあってよい。符号では、入力値について、i個目の入力がノードにおける入力データポイントの入力インデックスに対応する。各重みは、対応する重みベクトルのi個目の重みインデックスを有するようになる。換言すれば、i個目の入力とi個目の重みベクトルの間には、一対一の関連性が存在する。これに比べれば、各入力又は各重みベクトルの第jビットは左から右へであるため、MSBは第0ビットであり、最下位ビット(least significant bit;LSB)は入力の第N-1ビット、及び重みベクトルの第K-1ビットである。NとKは異なる値であってもよいため、入力データにおけるj個目の位置の総数は、重みベクトルのj個目の位置と異なる可能性がある。符号の実例として、i=2及びj=5のIi,jビットは、第3の入力データの第6ビットに対応する。これに類似し、i=3及びj=4のWi,jビットは、第4の重みベクトルの第5ビットに対応する。図4に示すように、MACにより生成されたビットの総数は、N+K+Mの対数(2を底とする)を最も近い整数に丸めたものに等しい。例えば、ノードにおける入力数が9であり(例えば、9ポイントの畳み込みに対応する)、且つN及びKがそれぞれ8である場合、MACの出力におけるビット数は8+8+Roundup(log9)=20となる。この値は、同じくRoundup(N+K+logM)として表されてもよい。
【0014】
図5は、ビット単位で入力値及び重みベクトルを処理するための数式を説明する。具体的には、各入力値と重みベクトルの各ビットを乗算し、且つ反復する度にその総和を求める。等式の左側は、i個の入力と対応するi個の重みベクトルの和積の一般式である。実行される数学はバイナリ数学であるため、重みベクトルの符号ビットを処理するための第1項及び残りのビットを処理するための第2項を含む等式の右側に分解可能である。
【0015】
第1項は、Nビット符号無し入力と各符号付きKビット重みベクトルの符号ビットの和積を表す。図4に示すように、重みベクトルのMSBは符号ビットを格納し、且つ、ビットj=0であるため、重みベクトルの第0ビットとして表される。第1項により入力に重みベクトルの第0ビット(符号ビットを表す)を乗算し、且つ結果に第0ビットのビット値を乗算すると、2K-1となる。続いて前記結果を負の値として記録する。実質的には、入力と符号ビットの間の積により重みベクトルの最大の負値性が確立される。例えば、重みベクトルが8ビットで負である場合、符号ビットは、2ビット値のうちの「1」を表す。これは、入力の2の補数を取り、それを7回左シフトさせたことに相当する。これは、入力Iごとに反復して実行され、第1項は、全てのこれらの積の和結果を表す。対応する重みベクトルが負でない場合、ゼロが追加される。
【0016】
第2項は、2つの入れ子総和演算を含む。内部総和は、重みベクトルWのうちの各々の残りのjビットの総和を表し、それに入力Iを乗算し、更に重みベクトルWのうちの対応する第jビットのビット値を乗算する。外部総和は、各入力I及び重みベクトルWに対して内部総和を繰り返し、且つ全てのこれらの総和を加算する。
【0017】
図6は、入力I及び重みベクトルWのサンプル計算を説明し、M=1、N=8、K=8である。I=77(0100 1101)及びW=-116(1000 1100)である。総和式
において、第1項は、-1・(0100 1101)・(1・2)=1011 0011・2=1101 1001 1000 0000に調整可能である(符号ビットは追加の先頭「1」で埋め込まれていることに留意されたい)。第2項は、77・(0・2)+77・(0・2)+77・(0・2)+77・(1・2)+77・(1・2)+77・(0・2)+77・(0・2)=77・2+77・2=616(0010 0110 1000)+308(0001 0011 0100)=924(0011 1001 1100)に調整可能である。第1項と第2項を加算して和の-8932(1101 1101 0001 1100)を得る。
【0018】
この実例から分かるように、重みベクトルが負である場合、ビット単位数学により、重みベクトルを入力の-128倍に設定し、続いて、後続のビットについて、最終結果に達するまでに正の部分を負の数に加算する(その負の数を小さくする)。
【0019】
重みベクトルが正の場合、第1項は「0」となり、第2項は、重みベクトルの残りのビットのビット単位総和となり、負の重みベクトルについて示された状況に類似する。
【0020】
図7図12について、スキップ評価及び活性化特徴(スキップモジュールとも呼ばれる)を検討し、適合する活性化関数(例えばReLU活性化関数)とともに使用される場合、入力ノードのMAC和積累積器及び対応する重みベクトルの計算複雑さが簡略化される。前述したように、例えば、ReLU活性化関数は、MAX(0,input)の出力を提供し、入力がMAC積和に等しい。重みベクトルのビットを反復して処理するため、MAC積和は一連の部分累積により判定される。従って、特定の反復の後の部分累積積和が永遠に正にならない(又は活性化関数の条件を永遠に満たすことはない)場合、残りの計算をスキップしてよいと判定することができる。
【0021】
ビット単位で重みベクトルWを反復して処理する場合、反復する度に、部分積和累積の出力を、重みベクトルWの残りのビットの各々に対して仮定された「最悪状況」のシーンと比較してよい。「最悪状況」は、最も多くの計算サイクルが発生する状況であり、即ち、スキップ条件が発生しない状況である。ここで、最悪状況は、重みベクトルWの全ての残りのビットが1であると仮定された場合である。これは、例えば、8ビットの重みベクトルWについて、Wが負である(即ち、Wi,0=1で始まる)場合、0よりも小さい最小の負の数は-1(バイナリでの全ての1)であることを意味する。また、Wが正である(即ち、Wi,0=0で始まる)場合、最大の数は127である(残りのビットはバイナリでの全ての1である)。
【0022】
図7は、任意の与えられた反復nの重みベクトルの「未知」の部分を考慮した総和公式30を説明する。図7の公式は、図5における公式と類似する公式を説明する。一般的な積和累積公式31を含み、この公式31は、符号ビット和項32及び重みベクトルの残りのビットの入れ子総和に分解される。残りのビットの入れ子総和は、重みベクトルの前のnビット(n>0)に対する第1の入れ子和項34及び重みベクトルの残りのK-1ビットに対する第2の入れ子和項36に分解される。反復nについて、第1の入れ子和項34は、第nビットを処理した後の重みベクトルの既知のnビットの和積であり、第2の入れ子和項36は、重みベクトルWからの残りのn+1ビット~残りのK-1ビットといった残りのビットを含有する。前述したように、幾つかの実施例において、未知の重みベクトルビットについて、全てのビットが1に等しいという「最悪状況」と仮定してよい。重みベクトルをMSBからLSBへビット単位で処理するにつれて、より多くの実際の重みベクトルが既知になり、且つ未知の仮定された重みベクトルのビット桁数は、反復する度に減少する。
【0023】
図8図12は、幾つかの実施例によるスキップモジュールの適用を説明する。特に、図8図12は、如何に図13のフローチャート(以下に検討)に基づいて図7の総和公式を実現するかを論証する。図8図12のそれぞれは、1組のN=8ビットを有するM=9の入力ベクトルI、及びK=8ビットを有するM=9の重みベクトルWを説明する。論証するために、各入力ベクトルの値は、ランダムに生成されたものであり、それぞれ77、138、179、76、175、159、153、212、128である。論証するために、各重みベクトルの値は、ランダムに生成されたものであり、それぞれ-116、76、90、-83、33、-8、-60、-98、-22である。これらの数のそれぞれのバイナリ表現も図8図12で説明される。
【0024】
図8及び図9は、反復n=0の総和公式30の計算を説明する。反復n=0の場合、総和公式は、第1の重みビットj=0で調整される。図8は、各入力ベクトルに各重みベクトルの符号ビットを乗算し、更に符号ビットのビット値(2)を乗算することを説明する。重みベクトルが正である場合、符号ビットのビット値は「0」であり、「0」が発生する。重みベクトルが負である場合、符号ビットのビット値は「1」であり、発生値が入力ベクトルの負の数に2を乗算したものに等しい。これらの積を加算する。図8に説明されるように、これらの積の和は、-103,040である。この値は、可能な最も小さい負の累積値である。重みベクトルの他のビットが全て「0」である場合、出力値は103,040である。重みベクトルの任意の残りのビットが「1」である場合、前記値によって、負の累積値がそれ程小さくなくなる。従って、全ての他の操作が累積値に影響を与えないか又は正の影響しか与えない。
【0025】
図9は、残りの2項の処理を説明する。第1の入れ子和項34(図7を参照)には何の操作も発生せず、j=1の場合に総和を求め始めるからである。この場合、n=1であれば、j=0であるため、第1項には何の値も発生しない。第2の入れ子和項36が「最悪状況」であると仮定すれば、前述したように、これは、最も多くの計算サイクルを招く状況である。最終の累積積和が0よりも大きい場合、最も多くの計算サイクルが発生する。従って、残りの重みベクトルの各ビットが「1」であると仮定した場合、最悪状況を採用してよい。その値は十進法による127であるため、各入力値に仮定された各重みベクトルの値127を乗算し、続いて加算し、数164,719が得られる。この最悪状況の和を累積値の-103,040と比較すれば、最終値が-103,040+164,719=61,679と高い可能性があることが分かる。この値が負ではなく、即ち活性化関数が実行された後の結果が非ゼロ値であるため、より多くのビットを処理する必要がある。
【0026】
図10は総和を説明し、n=1であり、即ち、j=0、1である。j=0の場合、-103,040であると計算された。j=1の場合、第1の入れ子和項34(図7を参照)では、各入力ベクトルIに、対応する重みベクトル(即ち、Wi,1)におけるj=1ビットを乗算し、且つこの値に1ビットのビット値を乗算する(2K-j-1->28-1-1->2)。従って、Wi,1=0の場合、発生値は0となり、Wi,1=1の場合、発生値は、対応する入力に2を乗算したものとなる。これらは、第1の入れ子和項34の外部総和に基づいて計算してから総和を求めたものである。この実例において、和が48,448に等しい。この値をj=0値に加算する場合、総和は-54,592である。
【0027】
図10の第2の入れ子和項36が「最悪状況」であると仮定し、前述したように、これは、最も多くの計算サイクルを招く状況であり、即ち、重みベクトルの残りの未知のビットがそれぞれ「1」であると仮定する。n=1の場合、この値は十進法による63であるため、各入力値に仮定された各重みベクトルの値63を乗算し、続いて加算し、数81,711が得られる。この最悪状況の和を累積値の-54,592と比較すれば、最終値が-54,592+81,711=27,119と高い可能性があることが分かる。この値が負ではなく、即ち、活性化関数が実行された後の結果が非ゼロ値であるため、より多くのビットを処理する必要がある。重みベクトルの第2のビット(j=1)が実際に最悪状況ではないため、累積値と最悪状況値の間の第2のビットを処理した後の差の-27,119は、上記第1のビットのみを処理した後の差の-61,679よりも小さいことに留意されたい。
【0028】
図11は総和を説明し、n=2であり、即ち、j=0、1、2である。j=0、1の場合、-54,592であると計算された。j=2の場合、第1の入れ子和項34(図7を参照)では、各入力ベクトルIに、対応する重みベクトル(即ち、Wi,2)におけるj=2ビットを乗算し、且つこの値に2ビットのビット値を乗算する(2K-j-1->28-2-1->2)。従って、Wi,2=0の場合、発生値は0となり、Wi,2=1の場合、発生値は、対応する入力に2を乗算したものである。これらは、第1の入れ子和項34の外部総和に基づいて計算してから総和を求めたものである。この実例において、和が17,216に等しい。この値をj=0,1の場合の値に加算した場合、総和は-37,376である。
【0029】
図11の第2の入れ子和項36が「最悪状況」であると仮定し、前述したように、これは、最も多くの計算サイクルを招く状況であり、即ち、重みベクトルの残りの未知のビットがそれぞれ「1」であると仮定する。n=2の場合、この値は十進法による31であるため、各入力値に仮定された各重みベクトルの値31を乗算し、続いて加算し、数40,207が得られる。この最悪状況の和を累積値の-37,376と比較すれば、最終値が-37,376+40,207=2,831と高い可能性があることが分かる。この値が負ではなく、即ち、活性化関数が実行された後の結果が非ゼロ値であるため、より多くのビットを処理する必要がある。
【0030】
図12は総和を説明し、n=3であり、即ち、j=0、1、2、3である。j=0の場合、-37,376であると計算された。j=1の場合、第1の入れ子和項34(図7を参照)では、各入力ベクトルIに、対応する重みベクトル(即ち、Wi,3)におけるj=3ビットを乗算し、且つこの値に3ビットのビット値を乗算する(2K-j-1->28-3-1->2)。従って、Wi,3=0の場合、発生値は0となり、Wi,3=1の場合、発生値は、対応する入力に2を乗算したものである。これらは、第1の入れ子和項34の外部総和に基づいて計算してから総和を求めたものである。この実例において、和が8,800に等しい。この値をj=0、1、2の場合の値に加算した場合、総和は-28,576である。
【0031】
図12の第2の入れ子和項36が「最悪状況」であると仮定し、前述したように、これは、最も多くの計算サイクルを招く状況であり、即ち、重みベクトルの残りの未知のビットがそれぞれ「1」であると仮定する。n=3の場合、この値は十進法による15であるため、各入力値に仮定された各重みベクトルの値15を乗算し、続いて加算し、数19,455が得られる。この最悪状況の和を累積値の-28,576と比較すれば、最終値が-28,576+19,455=-9121と高い可能性があることが分かる。この値は「最悪状況」の場合に対して負であるため、重みベクトルの任意の残りの値によっても負でない値が発生することはないと判定することができる。換言すれば、n=4、5、6、7の重みベクトルの残りのビットには何の値もなく、これによって負でない積和の累積が発生する。重みベクトルの任意の残りの未処理ビットの累積値が常に負であるため、ReLU活性化関数に伝達された場合、結果は常に0となる。従って、任意の更なるビットを処理することは、リソースの浪費を招く。この場合、スキップモジュールは、スキップ信号を活性化し、次の入力ブロックを処理する。
【0032】
図13は、スキップ評価及び活性化特徴のプロセスフローチャート100を説明する。操作110において、MAC和積累積の一部として、ワード単位の入力及びビット単位の重みで部分和累積を実行する。この方式は、前述したように、符号無し入力値(任意のビット長さ)全体にビット単位で符号付き重みベクトルを乗算する。部分和累積態様は、重みベクトルをビット単位で処理する反復プロセスを反映する。従って、操作110において、重みベクトルの1つのビットを処理する。操作120において、スキップ条件に対して部分累積積和を評価する。スキップ条件は、対応する活性化関数に基づくものであってよい。例えば、幾つかの実施例において、活性化関数はReLU活性化関数であってよく、よって、MAC和積累積の出力が負である場合、活性化関数の出力がゼロとなる。従って、スキップ条件によって、部分累積積和を評価してMAC和積が正であるか又は負であるかを予測することができる。幾つかの実施例において、スキップ条件は、予め定義されたしきい値に基づくものであってもよい(例えば図23A及び図23B及びそれに付けられた記述を参照)。他の実施例において、残りの未処理重みビットに対する予測に基づいてスキップ条件を動的に計算してもよい。
【0033】
操作130において、部分累積積和がスキップ条件を満たすと判定した場合、操作140において、後続の操作をスキップしてよいことを指示するように信号をアサートする。後続の操作は、例えばメモリアクセス読み取り操作(例えば、入力又は重み値のロードなど)又は計算操作(例えば、後続の反復)を含んでよい。操作130において部分累積積和がスキップ条件を満たしていないと判定した場合、操作150において全ての重みビットを処理したか否かを判定する。全ての重みビットを処理し終わった場合、処理が終了し、且つ、操作160において部分累積積和がMAC和積出力として累積された。操作160において出力を判定した後、操作170において活性化関数を出力に適用する。操作150において、全ての重みビットが処理されたわけではない場合、操作180において次の重みビットに進み、且つこのプロセスは操作110から繰り返される。操作140の後、スキップ条件を満たすとともに、後続の操作をスキップするように前記信号をアサートした場合、出力は選択的に累積積和とされてよく、且つ出力に操作170における活性化関数を実行してよいことに留意されたい。
【0034】
図14は、MACスキップ回路200のハードウェア実装の高度回路ブロック図を説明する。幾つかの実施例において、MACスキップ回路200は、単一の半導体基板で実現されてよい。他の実施例において、MACスキップ回路200は、複数の半導体基板で実現されてよく、且つ相互接続する必要がある。入力フリップフロップ(flip-flop;FF)210は、符号無し入力ベクトル205から入力値を取得する。重みフリップフロップ220は、符号付き重みベクトル215から入力を取得する。入力ベクトル205に、乗算器225により重みベクトル215の次のビットを乗算する。次のビットが第1のビットである場合、結果を2の補数形式に変換し、且つ加算ブロック230により左シフト部分和のビット255a(「0」に初期化)に加算し、続いて新たな部分和235aとして記憶し、そうでなければ、結果を加算ブロック230により左シフト部分和のビット255aに加算する。重みベクトル215の全てのビットが処理された場合、部分和235aを出力240とする。そうでなければ、反復する度に、スキップモジュール245により部分和235aを評価してスキップ条件が存在するか否かを判定する。スキップ条件が存在する場合、スキップ信号をアサートする。スキップ条件が存在しない場合、スキップ信号がアサートされるか又は残りのKビットが処理し終わるまでに、重みベクトルのKビットのうちの各ビットに対して前記プロセスを再度繰り返す。スキップ信号がアサートされた場合、部分和235aを出力240としてもよく、修正して出力240としてもよく、又はゼロを出力240としてもよい。
【0035】
図15は、幾つかの実施例によるMACスキップ回路200のより詳細なブロック図を説明する。類似する参照符号は、上記した図14について検討されたMACスキップ回路200と類似する素子を表すために用いられる。同じラベルを有するピンは結合される(例えば、「x」と付けられた出力ピンは、「x」と付けられた入力ピンに結合される)ことを理解されたい。INPUTベクトル205は、1組のM個のNビットベクトルを含む。INPUTベクトル205からINPUTフリップフロップ(Flip Flop;FF)210への矢印線にある斜線は、1本の線が複数の線を説明するために用いられることを表す。幾つかの実施例において、M本の線がINPUT FF210に向かい、1本の線が各入力ベクトル205に用いられる可能性がある。幾つかの実施例において、M個のベクトルのそれぞれはN本の線を有し、又はN×M本の線がINPUT FF210に向かう可能性がある。これらの実施例において、M個のベクトルの各ビットを並行して処理してよい。入力ベクトル205は、1回に1ビットずつラッチしてもよく、又はワード単位で、例えば1回に8ビットずつラッチしてもよい。
【0036】
INPUT FF210は、入力ベクトル205をMACスキップ回路200にラッチするためのフリップフロップ回路ブロックである。IN_LATピンは、INPUT FF210にラッチ信号入力を提供し、活性化時に、前記ラッチ信号入力によってINPUT FF210がINPUTベクトル205をINPUT FF210にラッチする。RSTピンは、INPUT FF210のリセット信号入力に用いられ、各種のブロックに提供可能な汎用リセット信号に対応し、MACスキップ回路200(INPUT FF210を含む)の状態を初期/リセット状態に戻す。幾つかの実施例において、INPUT FF210は、各入力ベクトル205の各ビットに対応するように、十分なフリップフロップ状態、即ちM×N個のフリップフロップ状態を含む。フリップフロップは、一連のレジスタに配置されてよく、例えば、1つのNビットレジスタは、各々のM個の入力ベクトル205に用いられる。
【0037】
WEIGHT FF220は、重みベクトル215をMACスキップ回路200にラッチするためのフリップフロップ回路ブロックである。W_LATピンは、WEIGHT FF220にラッチ信号入力を提供し、活性化時に、前記ラッチ信号入力によってWEIGHT FF220が重みベクトル215をWEIGHT FF220にラッチする。RSTピンは、WEIGHT FF220のリセット信号入力に用いられ、各種のブロックに提供可能な汎用リセット信号に対応し、MACスキップ回路200(WEIGHT FF220を含む)の状態を初期/リセット状態に戻す。幾つかの実施例において、WEIGHT FF220は、全ての重みベクトル215をラッチし、M個のKビット重みベクトル215を格納するために十分なフリップフロップ状態、即ちM×K個のフリップフロップ状態を有する。他の実施例において、WEIGHT FF220は、1回に各重みベクトル215の1ビットだけラッチし、MSBから開始し、即ちK個のフリップフロップ状態を有する。WEIGHT FF220の出力には、各重みベクトル215の同じビット値の各重みビットに対する並行出力が含まれてよい。
【0038】
乗算器225は、ビット単位でINPUT FF210にラッチされている各INPUTベクトル205とWEIGHT FF220にラッチされている対応する各重みベクトル215を乗算するための乗算器回路ブロックである。換言すれば、毎回各重みベクトル215の1ビットのみと、対応する入力ベクトル205とを乗算する。乗算器225はFlow_Thruピンも含み、活性化時に、前記Flow_Thruピンにより、WEIGHT FF220からのビット値に関係なく、乗算器225が入力ベクトル205を通過するようにする。
【0039】
図14の加算ブロック230は、加算器230aと累積器230bに分解される。加算器230aは、各ビット単位の重みによる入力ベクトル205を加算するための加算器回路ブロックである。図に説明されるように、加算器ツリー回路ブロックを使用するが、他のタイプの加算器を使用してもよい。加算器のストラテジーとしてはキャリーを保持する。加算器230aの出力ビット数は、各入力ベクトルのビット数(N)及び入力ベクトル数(M)に関連している。加算器は、N+Roundup(logM)ビットを出力する。従って、9個の8ビット入力ベクトルの例示的な畳み込みに対して、加算器は、8+4=12ビットを出力する。加算器230aの出力ピンは、累積器230bの入力ピンに結合される。
【0040】
累積器230bは、実質的に入力の和積とビットシフトの前の和積を加算する2×1加算器回路ブロックであり、且つそれを累積器230bの別の入力ピンにフィードバックする。累積器230bは、ADD(加算)ピンを含み、活性化時に、前記ADDピンは、累積器230bが2つの入力を減算せずに2つの入力を加算するように指示する。累積器230bの出力は、シフトレジスタ235の入力ピン及びスキップモジュール245の入力ピンに提供される。
【0041】
シフトレジスタ235は、シフト能力を有するレジスタに配置されている複数のフリップフロップを含む。シフトレジスタ235は、SHIFT入力ピン255を含み、活性化時に、前記SHIFT入力ピン255によってシフトレジスタ235がシフトレジスタ235におけるコンテンツを左シフトさせる。シフトレジスタ235は、累積器230bの出力をシフトレジスタ235にラッチするようにラッチ信号入力を提供するためのACC_LATピンも含む。RSTピンは、シフトレジスタ235のリセット信号入力であり、MACスキップ回路200(シフトレジスタ235を含む)の状態を初期/リセット状態に戻すように提供可能である汎用リセット信号に対応する。
【0042】
スキップモジュール245は、スキップ条件が発生したか否かを判定する回路ブロックである。スキップモジュールの細部について、後述で図17を参照してより詳細に検討する。スキップモジュール245は、累積器230bの出力を受信する入力ピン及びコントローラ260にスキップ信号を提供可能な出力ピン250(SKIPピン250)を含む。RSTピンは、スキップモジュール245のリセット信号入力に用いられ、MACスキップ回路200(スキップモジュール245を含む)の状態を初期/リセット状態に戻すように提供可能な汎用リセット信号に対応する。
【0043】
コントローラ260は、状態機械を含むとともに、上記図15の各種の回路ブロックの間のインタラクションを制御するように必要な信号を駆動する回路ブロックである。続いてコントローラ260をより詳細に検討する。
【0044】
図16は、コントローラ260回路ブロックを説明するブロック図である。コントローラ260は、有限状態機械(finite state machine;FSM)305回路ブロック、状態ロジック310回路ブロック、カウンタ(counter;CNT)315回路ブロック、カウンタロジック(CNT logic)320回路ブロック、復号化状態フリップフロップ(state flip flop;SFF)325回路ブロック、制御信号用のロジック330回路ブロック及びジャンプ(jump;JMP)ロジック335回路ブロックを含む、複数のサブ回路ブロックを含む。コントローラ260は、ピン250からのSKIP信号入力、START信号入力、NEXT信号入力及びRST信号入力を受信するためのピンを有し、各信号入力は、同名のピンにて受信される。コントローラ260は、IN_LAT信号、W_LAT信号、ACC_LAT信号、ADD信号、ピン255からのSHIFT信号、SKIPFF_LAT信号、SKIPSR_LAT信号、SkipSHIFT信号、Flow_Thru信号及びOUT_RDY信号を含む制御信号を提供するためのピンを有し、各信号は同名のピンにて提供される。これらの制御信号は、制御信号用のロジック330により提供される。
【0045】
SKIPピン250は、スキップモジュール245からの信号を受信し、後述でより詳細に検討する。NEXTピンは、コントローラ260が状態機械中の次の状態に入るべきか否かを指示するための信号を受信する。NEXTピンにより受信した信号は、状態機械が次のステップを続けるべきであることを指示するように切り替え可能である。NEXTピンにより受信した信号は、システムの外部に由来する可能性があり、且つシステムの制御に寄与する。STARTピンは、状態機械が第1の状態から第2の状態に移動すべきであることを指示する信号を受信する。ロジックによりSTARTピン信号とNEXT切り替えを組み合わせることができ、よってSTART=1及びNEXT切り替えの場合、状態機械が次の状態に入る。STARTピンにより受信した信号は、システムの外部に由来する可能性があり、且つシステムの制御に寄与する。RSTピンは、コントローラ260が全てのラッチ及び状態を初期状態にリセットすべきか否かを指示するための信号を受信する。RSTピンにより受信した信号は、システムの外部に由来する可能性があり、且つシステムの制御に寄与する。
【0046】
IN_LATピン、W_LATピン、ACC_LATピン、ADDピン、SHIFTピン255、SKIPFF_LATピン、SKIPSR_LATピン、SkipSHIFTピン及びFlow_Thruピンについて、上記で検討された各種の回路ブロックの対応するピンをもって検討する。OUT_RDYピンは信号を提供し、活性化時に、前記信号は、MACスキップ回路200の出力を、例えば活性化機能(例えばReLU活性化機能)を実現する回路により取得するか又はこの回路に提供する準備ができていることを指示する。
【0047】
FSM305は、現在の状態及び次の状態を判定する回路ブロックであり、現在の状態はSTピンにて出力され、現在の実施例において、これらのSTピンは、以下に図24A及び図24Bについて記述される状態図で代表される8種類の可能な状態の1つの3つのピン<0:2>を含んでよい。現在の状態、STARTピンの値、RSTピンの値、JMP0ピンの値、JMP1ピンの値及びNEXTピンの値の切り替えに基づき、次の状態を生成してSTピンに置く。
【0048】
STピンは、状態ロジック310回路ブロックの同名のピンに結合される。状態ロジック310ブロックは、STピン及びNEXTピンを使用してピンST_dにホットメソッドで置かれた復号化出力を判定し、8個のピンを含む。ホットメソッドによる復号化により、8種類の可能な状態のそれぞれを出力条件に変換し、1回に1つの出力ピンのみが高であり、他方が低に維持されることで、1つのピンが可能な状態のそれぞれに効果的に割り当てられる。NEXTピンは、活性化時に状態ロジック310に信号を発して新たな入力を探す。
【0049】
カウンタ(counter;CNT)315回路ブロックは、ビット単位で重み値を処理しやすくするように重みベクトルのビット位置に追跡するためのカウンタを生成する回路ブロックである。CNT315のCNTピンは、<0:K’>ピンを含み、K’はRoundup(logK)に等しい。CNT315モジュールの出力値は、CNTplusピンに応じて変化する。CNTplusピンが活性化する時、CNTピンは変化し、値を出力し、この値は前の出力に1を加算したものに等しい。RSTピンはピンであり、活性化時に、CNT315をリセットし、CNTピンの値をゼロに調整する。
【0050】
CNTロジック320回路ブロックは、状態ロジック310回路ブロックに類似する回路ブロックである。CNTロジック320回路ブロックは、CNT315回路ブロックに結合される同名のピンを有し、且つ、ピンCNT_dにおいて、ホットメソッドで復号化出力を提供する。CNT_dのピン数は、<0:K>であり、Kは、前述した通り、重みベクトル215のビット数である。NEXTピンは、活性化時にCNTロジック320に信号を発してCNTで新たな入力を探す。
【0051】
状態フリップフロップ(state flip flop;SFF)325回路ブロックは、フリップフロップを含む回路ブロックであり、このフリップフロップは、状態ロジック310回路ブロックからの復号化状態ピンに存在する各値を記憶するために用いられる。例えば、SFF325は、各復号化状態ピン用のD型フリップフロップを含んでよい。その代わりに、他のフリップフロップのタイプを使用してもよい。ST_dlatピンは、ラッチ信号を制御信号のロジック330に伝送することができる。
【0052】
制御信号回路ブロック用のロジック330は、ST_dlat用のピン、CNT_d用のピン、NEXT用のピン、RST用のピン、CNTplus用のピン及びIN_LAT、W_LAT、ACC_LAT、ADD、ピン255からのSHIFT信号、SkipFF_LAT、SkipSR_LAT、SkipSHIFT、Flow_Thru及びOUT_RDY用のピンを有する回路ブロックである。これらの同名のピンの信号は、以下に記述される状態図及び状態テーブルに基づいてロジックゲートにより生成する。
【0053】
ジャンプ(jump;JMP)ロジック335回路ブロックは、CNT又はCNT_dピンに結合されるピン、ST又はST_dピンに結合されるピン、RSTピンに結合されるピン、NEXTピンに結合されるピン及びSKIPピン250に結合されるピンを有する回路ブロックである。JMPロジック335は、FSM305のJMP0ピンに結合されるJMP0ピン及びFSM305のJMP4ピンに結合されるJMP4ピンも有する。JMPロジック335としては、以下の2つの条件のいずれかが真である場合にJMP0ピンを活性化するロジックを使用する。1つ目は、RST=0 AND NEXT切り替えAND CNT=1の場合であり、又は、2つ目は、SKIP=1の場合である。JMPロジック335は、RST=0 AND NEXT切り替えAND CNT!=7の場合にJMP4ピンを活性化するロジックを使用する。選択的に、JMP0又はJMP4ピンの活性化は、現在の状態が7である場合に限られる可能性がある。これは、ST又はST_dピンから取得されてもよく、ホットピンにより復号化したST_d<7>ピンなどの特定のST_dピンから取得されてもよい。JMPロジック335回路ブロックは、前記ロジックを実現する形態の1つに過ぎないことを理解されたい。前記ロジックは、付加状態としてロジック330又は有限状態機械に統合されてもよい。
【0054】
図17は、幾つかの実施例によるスキップモジュール245回路ブロックのブロック図を説明する。スキップモジュール245回路ブロックは、図7の数式、図8図12の実例又は図13のフローチャートに基づき、他のロジック/回路ブロックにより実現されてよい。スキップモジュール245は、入力和フリップフロップ(input sum flip flop;IS_FF)350、シフトレジスタ355、減算器360、比較器365、絶対値(absolute value;Abs)回路ブロック370及びスキップフリップフロップ(skip flip flop;SkipFF)375回路ブロックを含む、複数のサブ回路ブロックを含む。スキップモジュール245は、SkipSHIFTピン、SkipSR_LATピン、SkipFF_LATピン、RSTピン、入力和ピン群、累積積和ピン群及びSKIPピン250を含む。これらのピンは、同名の信号を提供又は受信し、且つ以上に記載のMACスキップ回路200の同名のピンに結合される。
【0055】
IS_FF350回路ブロックは、フリップフロップを利用してISピンからの入力和を記憶することができる回路ブロックである。SkipFF_LATピンは、入力和をIS_FF350にラッチするための信号を提供することができる。RSTピンは、IS_FF350を初期化状態にリセットするための信号を提供することができる。IS_FF350のビット数は、INPUTベクトル205のビット数Nに入力ベクトル数Mの対数(2を底とする)(Roundup(logM))を加算したものに等しくされてよい。IS_FF350の出力ピンは、シフトレジスタ355及び減算器360に結合されて減数とされてよい。
【0056】
シフトレジスタ355回路ブロックは、左シフトを実行可能なレジスタを利用した回路ブロックである。SkipSHIFTピンは、活性化時に左シフトをトリガする。SkipSR_LATピンにより、活性化時にIS_FF350からの入力和(Input Sum;IS)をシフトレジスタ355にラッチする。RSTピンは、シフトレジスタ355を初期化状態にリセットするための信号を提供することができる。シフトレジスタ355のビット数は、INPUTベクトル205のビット数Nに重みベクトル215のビット数Kを加算して入力ベクトル数Mの対数(2を底とする)(Roundup(logM))を加算したものに等しくされてよい。シフトレジスタ355の出力ピンは、減算器360に結合されて被減数とされてよい。
【0057】
減算器360は、IS_FF350の値を取り、且つシフトレジスタ355の値からこの値を減算して出力Bを計算する。減算器360は、出力ピンを介して出力Bを比較器365に提供する。
【0058】
絶対値(absolute value;Abs)回路ブロック370は、累積積和(accumulated product sum;APS)を取得し、絶対値を計算し且つそれを出力Aとして比較器365に提供するための回路ブロックである。Abs回路ブロック370は、これらの機能の対応するピンを含む。Abs回路ブロック370は、選択的に1組のTHピンを介してしきい値THを取得するために用いられてよく、スキップ条件の発見可能性を向上又は低下させるために、前記しきい値THをAPSの絶対値に加算してしきい値オフセットとしてよい。これらの実施例において、Abs回路ブロック370は、出力Aを比較器365に提供する前に出力Aにしきい値THを加減するための加算器を含んでよい。以下、図23A及び図23Bを参照してしきい値THをより詳細に検討する。
【0059】
比較器365回路ブロックは、出力Aと出力Bを比較する回路ブロックである。出力Aが出力Bよりも大きい場合、スキップ条件が発見される。比較器は、これらの値の対応するピンを含む。スキップ条件は、SkipFF375回路ブロックに結合されるSkip_LATピンにて提供される。SkipFF375回路ブロックは、フリップフロップを含む回路ブロックであり、Skip_LATピンにある信号により活性化する時、このフリップフロップはSKIP出力ピン250をラッチする。
【0060】
図15のMACスキップ回路200の操作は、図15図16及び図17における回路ブロック図を参照しながら、図18図22における例示的な状況により論証されてよい。図18は、上記で図8において使用される入力ベクトル及び重みベクトルと同じものを説明する。入力ベクトルは、INPUT FF210にラッチされる。重みベクトルの第1のMSBビットは、WEIGHT FF220にラッチされる。図18において、重み値に関係なく、Flow_Thruピンは乗算器225で活性化され、入力ベクトルが乗算器225を流れることを可能にする。これは、各入力ベクトルに「1」を乗算することに相当する。続いて入力ベクトルは加算器230aにより加算し、且つ入力和0101 0001 0001(1297)をスキップモジュール245に提供する。入力和は、IS_FF350にラッチされる。前述したように、IS_FF350のビット数NIS=K+Roundup(logM)である。入力和の最高位NIS-K+1ビットは、シフトレジスタ355にラッチされる。これは、入力和を2 IS -K+1で割ることに相当し、この場合に2である。このようにする理由は、入力ベクトルと重みベクトルのMSBの積の計算が完全に重み付けされていないからである。各サイクルで部分累積積和を1つの位置だけ移動させる。同様に、各サイクルでシフトレジスタを1つの位置だけ移動させる。従って、入力和の最高位NIS-K+1ビットにより同一の乗算器で比較するように確保することができる。
【0061】
例えば、重みビットのMSBの部分累積積和は、
に等しく、続いてそのビット値2を乗算する。残りの未処理の重みは、
に調整可能である。最悪の場合、各重みビットは1である。従って、上記式は、
に書き直すことができ、ISは、全ての重みビットが1である状況と同じである。ISを分解し、これはIS・127に相当する。部分累積積和のビット値がまだシフトされていないため、IS・127を128で割り、IS-IS/128を計算することで得られ、例えば、
である。
【0062】
従って、スキップしきい値STHは、入力和の最高位NIS-K+1ビットをシフトレジスタ355に代入することで計算することができ、前述したように、これは、入力和を128で割ることに相当する。続いてシフトレジスタ355を入力和から減算してSTHを得ることができる。
【0063】
図19において、第1の重みビットを処理する。各入力にそれぞれ重みベクトルのMSBのうちの対応する1つを乗算する。続いて、これらの積を加算して、0011 0010 0101(805)を得る。第1のビットが符号ビットであるため、初期化の累積積和(即ち、0)からこの値(ADD=0)を減算し、累積積和を2の補数形式に変更する。被減数としてのIS_FF 0101 0001 0001(1297)から減数としてのシフトレジスタ1010(10)を減算することでスキップしきい値(STH)を計算する。スキップ条件が現れたか否かを判定するために、STH 0101 0000 0111(1287)と累積積和の絶対値0011 0010 0101(805)を比較する。条件A>Bを満たしていないため、後続のサイクルで次の重みビットを処理する。
【0064】
図20において、累積積和が左シフトし、且つ第2の重みビットを処理する。各入力のいずれにも重みベクトルの次のビットのうちの対応する1つを乗算する。続いてこれらの積を加算して、0010 1111 0101(757)を得る。この値をシフト累積積和に加算して、1111 1111 1100 1010 1011(-853)を得る。従って、累積積和は
に等しい。シフトレジスタ355もシフトし、且つそれをIS_FF350から再度減算してスキップしきい値STH 0000 0000 0100 1111 1101(1277)を探し出す。このようにする理由は、最悪の状況が
であり、IS・63に等しいからである。シフトレジスタ355は、この前にISを128で割ったものであるが、累積積和が一回シフトしたため、シフトレジスタ355も一回シフトし、64で割るものとなる。値IS・63/64は、IS-IS/64を計算することで得られる。又は、入力和の最高位NIS-Kビットは、シフトレジスタ355にラッチされてよく、これは、ISを64で割ることに相当する。スキップ条件が発生したか否かを判定するために、STH 0000 0000 0100 1111 1101(1277)と累積積和の絶対値0011 0101 0101(853)を比較する。条件A>Bを満たしていないため、後続のサイクルで次の重みビットを処理する。
【0065】
図21において、累積積和が左シフトし、且つ第2の重みビットを処理する。各入力のいずれにも重みベクトルの次のビットのうちの対応する1つを乗算する。続いてこれらの積を加算して、0010 0001 1010(538)を得る。この値をシフト累積積和に加算して、1111 1111 1011 0111 0000(-1168)を得る。従って、累積積和は、
に等しい。シフトレジスタ355もシフトし、且つそれをIS_FF350から再度減算して、スキップしきい値STH 0000 0000 0100 1110 1001(1257)を探し出す。このようにする理由は、最悪の状況が
であり、IS・31に等しいからである。シフトレジスタ355は、この前にISを64で割ったものであるが、累積積和が一回シフトしたため、シフトレジスタも一回シフトし、32で割るものとなる。値IS・31/32は、IS-IS/32を計算することで得られる。又は、入力和の最高位NIS-K-1ビットは、シフトレジスタ355にラッチされてよく、これは、ISを32で割ることに相当する。スキップ条件が発生したか否かを判定するために、STH 0000 0000 0100 1110 1001(1257)と累積積和の絶対値0100 1001 0000(1168)を比較する。条件A>Bを満たしていないため、後続のサイクルで次の重みビットを処理する。
【0066】
図22において、累積積和が左シフトし、且つ第3の重みビットを処理する。各入力のいずれにも重みベクトルの次のビットのうちの対応する1つを乗算する。続いてこれらの積を加算して、0010 0010 0110(550)を得る。この値をシフト累積積和に加算して、1111 1111 1001 0000 0110(-1786)を得る。従って、累積積和は、
に等しい。シフトレジスタ355もシフトし、且つそれをIS_FF350から減算してスキップしきい値STH 0000 0000 0100 1100 0001(1217)を探し出す。このようにする理由は、最悪の状況が
であり、IS・15に等しいからである。シフトレジスタ355は、この前にISで32で割ったものであるが、累積積和が一回シフトしたため、シフトレジスタも一回シフトし、16で割るものとなる。値IS・15/16は、IS-IS/16を計算することで得られる。又は、入力和の最高位NIS-K-2ビットは、シフトレジスタ355にラッチされてよく、これは、ISを16で割ることに相当する。スキップ条件が発生したか否かを判定するために、STH 0000 0000 0100 1110 1001(10000 0000 0100 1100 0001(1217)と累積積和の絶対値0110 1111 1010(1786)を比較する。条件A>Bを満たすため、重みビットの残りの処理を中止し、且つ、活性化関数(例えばReLU活性化関数)を実現する回路に出力を提供することができる。
【0067】
しきい値に達していないと仮定すれば、殆ど同じ形で次のサイクルを続けて処理する。各入力に重みベクトルの次のビットを乗算する。続いてこれらの積を加算して、加算器230aの出力を得る。続いてこの値をシフト累積積和に加算して、
を得る。シフトレジスタ355もシフトし、且つそれをIS_FF350から再度減算してスキップしきい値を探し出す。このようにする理由は、最悪の状況が
であり、IS・7に等しいからである。シフトレジスタは、この前にISを16で割ったものであるが、累積積和が一回シフトしたため、シフトレジスタも一回シフトし、8で割るものとなる。IS-IS/8を計算することで値IS・7/8が得られる。又は、入力和の最高位NIS-K-3ビットは、シフトレジスタ355にラッチされてよく、これは、ISを8で割ることに相当する。スキップ条件が発生したか否かを判定するために、STHと累積積和の絶対値を比較する。
【0068】
しきい値に達していないと仮定すれば、同じ形で次のサイクルを続けて処理する。各入力に重みベクトルの次のビットを乗算する。続いてこれらの積を加算して、加算器230aの出力を得る。続いてこの値をシフト累積積和に加算して、
を得る。シフトレジスタ355もシフトし、且つそれをIS_FF350から再度減算してスキップしきい値を探し出す。このようにする理由は、最悪の状況が
であり、IS・3に等しいからである。シフトレジスタは、この前にISを8で割ったものであるが、累積積和が一回シフトしたため、シフトレジスタも一回シフトし、4で割るものとなる。IS-IS/4を計算することで値IS・3/4が得られる。又は、入力和の最高位NIS-K-4ビットは、シフトレジスタ355にラッチされてよく、これは、ISを4で割ることに相当する。スキップ条件が発生したか否かを判定するために、STHと累積積和の絶対値を比較する。
【0069】
しきい値に達していないと仮定すれば、同じ形で次のサイクルを続けて処理する。各入力に重みベクトルの次のビットを乗算する。続いてこれらの積を加算して、加算器230aの出力を得る。続いてこの値をシフト累積積和に加算して、
を得る。シフトレジスタ355もシフトし、且つそれをIS_FF350から再度減算してスキップしきい値を探し出す。このようにする理由は、最悪の状況が
であり、ISに等しいからである。シフトレジスタは、この前にISを4で割ったものであるが、累積積和が一回シフトしたため、シフトレジスタも一回シフトし、2で割るものとなる。IS-IS/2を計算することで値IS・1/2が得られる。又は、入力和の最高位NIS-K-5ビットは、シフトレジスタ355にラッチされてよく、これは、ISを2で割ることに相当する。スキップ条件が発生したか否かを判定するために、STHと累積積和の絶対値を比較する。
【0070】
しきい値に達していないと仮定すれば、同じ形で次のサイクルを続けて処理する。重みビット数Kが8に等しくなる場合、この実例に示すように、未知の重み値がなくなるため、これは最後のサイクルとなる。各入力に重みベクトルの次のビットを乗算する。続いてこれらの積を加算して、加算器230aの出力を得る。続いてこの値をシフト累積積和に加算して、
を得る。全ての重みビットが処理されたため、活性化関数(例えば、ReLU活性化関数)を実現する回路に出力を提供する。
【0071】
図23A及び図23Bを参照されたく、しきい値THの使用を説明するフローチャートを示し、図17に示す通りである。前述したように、Abs(累積積和)>STHの場合、スキップ条件を検出する。しきい値THは付加値であってよく、スキップ条件を回避するために必要とされる条件を緩和することに利用可能である。前述したように、例えば、STHの計算は、重みベクトルの最悪状況の仮定に基づくものである。重みベクトルのビットが全て「1」である可能性が殆どないため、しきい値THを加算することで要件を緩和すれば、受け入れられない誤差量(例えば、しきい値THを加算すれば、スキップすべきではない値をスキップしてしまうことになるため、誤差が発生する可能性がある)を招くことなく、計算エネルギーをより少なくする。
【0072】
図23Aにおいて、幾つかの実施例において、しきい値THは、重みベクトルの幾つかの統計的特性及び許容誤差に基づく予め定義された値であってよい。例えば、既知の許容誤差によって最悪状況の緩和が可能となる場合、しきい値THは、入力和の除算部分に等しくされてよい。例えば、しきい値は、入力和を4、8又は16で割ったものに等しくされてよい。他の実施例において、しきい値THは、累積積和(accumulated product sum;APS)に基づく予め定義された値であってよい。例えば、しきい値THは、自身のAbs(APS)の一部を加算したもの、例えばAbs(APS)+Abs(APS)/8に等しくされてよい。更に別の実施例において、しきい値THは、値128又は他の値などの定数であってよい。操作405において、しきい値THは、上記した任意の条件などの所定の条件に基づいて計算される。これらの実施例において、しきい値THは、定数であるか、又は入力和又はAPSなどの利用可能な数値の1つに基づいて計算される。操作410において、THは、比較器365に入る前にAbs(APS)に加算される。実際には、比較器365はA+TH>B?又はA>B-TH?を判定する。THは、Abs(APS)に加算されるように示されているが、減算器360に入る前に、被減数(IS_FF)からTHを減算するか、又は(シフトレジスタ355から)減数に加算してもよいことに留意されたい。
【0073】
図23Bでは、幾つかの実施例において、しきい値THは、幾つかの外部要素に基づいて計算される動的値であってもよく、又は以上に記載の所定の成分に本明細書で検討される動的成分を加算したものであってもよい。例えば、計算装置のリソース(電池、電源、メモリ、処理の利用可能性など)が低ければ、しきい値を増やしてよい。操作455において、低計算リソース、高温、失敗した冷却条件、運動などの幾つかの外部要素を含む条件を検出する。操作460において、計算エネルギーを低下させるようにTHを増やす。THが増やされると、スキップ条件をトリガする可能性も増やされる。幾つかの実施例において、THは、以上に記載の所定のTHに基づくものであってよいが、計算エネルギーを更に低下させるように後で調整される。THを増やすことによって誤差が増やされるという潜在的な悪影響を引き起こす。他の実施例において、THは0に等しくされてよい。操作465において、より多くの計算リソースを使用可能にするように条件が既に回復又は変更されたと検出した。操作470において、計算エネルギーを増やすとともに誤差を減少するようにTHを低下させる。
【0074】
図24A図24B及び図25において、状態に関する情報を提供する。この情報は、実際に使用される部材の運転パラメータ及び特性に応じて変化する可能性があることを理解されたい。例えば、シフトレジスタは、ラッチ信号が特定の形でシフト信号と相互作用するように、組み合わせロジックを使用してよい。別の実例として、幾つかのハードウェアにおいて、乗算器225及び加算器230a回路ブロックは、スタンドアローン状態がなく直ちに計算し始めることができる。図24Aは状態図を提供し、図24Bは各状態の期間中に完成した基本プロセスを記述する。簡単にするために、本明細書におけるCNTは、0と7の間の値を有する。ここの7は値K-1であり、K=8であり、各重みベクトルにおけるビット数である。Kが異なる数であれば、値「7」を適切に置き換えてよいことを理解されたい。
【0075】
状態0では、MACがアイドルであり、Skipがアイドルであり、メモリがアイドルである。状態0は準備完了状態である。他の状態に関する計算が完了した場合、戻り状態でもある。任意の他の状態でRST信号をアサートした場合も、戻り状態である。図25に示すように、状態0では、OUT_RDY信号が高であり、累積積和は活性化関数に用いることができる。&&START=1によってRST=0&&NEXTをトリガすると、状態1に入る。
【0076】
状態1では、メモリは入力ベクトル205を読み取り、且つMACスキップ回路200のピンにそれらの値を提供する。入力ベクトル205をINPUT FF210にラッチする。従って、INPUT_FF210の出力は、直ちに乗算器225回路ブロックに用いられる出力を有するようになる。Flow_Thruピンはアクティブ状態にあり、入力ベクトル205が乗算器225回路ブロックを経由して加算器230aへ流れることを可能にする。加算器230aは、入力ベクトル205を加算し、入力和(input sum;IS)を生成してスキップモジュール245に提供する。図25に示すように、状態1では、IN_LATピンはアクティブ状態にあり、Flow_Thruピンはアクティブ状態にある。RST=0&&NEXTをトリガすると、状態2に入る。
【0077】
状態2では、入力和ISをスキップモジュール245のIS_FF350にラッチする。図25に示すように、状態2では、Flow_Thruピンはアクティブ状態にあり、SkipFF_LATピンはアクティブ状態にある。RST=0&&NEXTをトリガすると、状態3に入る。
【0078】
状態3では、メモリは、WEIGHT FF220にラッチされた重みベクトル215のMSBを読み取る。スキップモジュール245において、ISの最高位NIS-K+1ビットをシフトレジスタ355にラッチする。図25に示すように、状態3では、W_LATピンはアクティブ状態にあり、SkipSR_LATピンはアクティブ状態にある。RST=0&&NEXTをトリガすると、状態4に入る。
【0079】
状態4では、入力ベクトル205は、INPUT FF210により提供され、現在の重みビットは、WEIGHT FF220により乗算器225回路ブロックに提供され、前記乗算器225回路ブロックは、入力ベクトル205に現在の重みビットを乗算して出力を加算器230aに提供する。積和を累積器230bに提供する。幾つかの実施例において、前の状態で積和を提供してもよい(例えば、ラッチ操作を行うと、直ちに入力を乗算器225に提供する)。CNT=0の場合、ADD信号は非アクティブ状態にあり、且つ積和を減算し、積和が負とすべきであるため、この積和は、重みベクトル215の符号ビットの積和を表す。CNT=0の場合、部分累積積和は0である。CNT!=0の場合、部分積和は、前の状態7から転移した。累積器がシフトレジスタ235からの部分累積積和APSと現在の積和を加算した後、累積器230bの出力ピンは準備完了となる。続いて現在のビットが処理されたことを表すようにカウンタが増える。図25に示すように、状態4では、CNT_plusピンはアクティブ状態にある。RST=0&&NEXTをトリガすると、状態5に入る。
【0080】
状態5では、新たな累積積和APSをシフトレジスタ235にラッチし、且つスキップモジュール245に提供し、スキップモジュール245は、比較器365回路ブロックを介してAbs(APS)とSTHを比較する。図25に示すように、状態5では、ACC_LATピンはアクティブ状態にあり、累積積和APSをラッチすることを表す。RST=0&&NEXTをトリガすると、状態6に入る。
【0081】
状態6では、スキップ比較の結果をSkipFF375にラッチする。図25に示すように、状態6では、SKIP_LATピンはアクティブ状態にある(CNT=7の場合、全てのビットが処理されたため、この場合を除く)。RST=0&&NEXTをトリガすると、状態7に入る。
【0082】
状態7では、CNT!=7の場合、シフトレジスタ235は、次の重みビットを処理するために準備するように左シフトし、メモリは、重みベクトルの次のビットを読み取り、且つ重みベクトルの次のビットをWEIGHT FF220にラッチする。&&CNT!=7によりRST=0&&NEXTをトリガすると、状態4に入る。これは、まだ他の重みビットを処理する必要があり、且つスキップがアサートされていないことを表す。&&CNT=7によりRST=0&&NEXTをトリガすると、状態0に入り、全ての重みビットが処理されたことを表す。CNTの値に関係なく、SKIP=1の場合も、状態0に入り、残りの重みビットに対する更なる処理を中止する。図25に示すように、状態7では、(CNT!=7)W_LAT、ACC_SHIFTピンはシフトレジスタ235のシフトを表すようにアクティブ状態にあり、SkipSHIFTピンはアクティブ状態にある。
【0083】
図26は、MACスキップ回路を使用したシステム500のシステム図である。メモリ505は、MACスキップ回路200に入力データ及び重みを提供するようにMACスキップ回路200に結合される。メモリ505は、非一時的なコンピュータ読み取り可能データを記憶するための任意の適切なメモリ装置及び媒体であってよい。コントローラ510、例えば畳み込みコントローラ510は、MACスキップ回路200及びメモリ505に結合される。コントローラ510は、MACスキップ回路200の操作を指示するように、例えばSTART及びNEXT制御信号などの制御信号及びロジックを提供する。MACスキップ回路200は、コントローラ510のOUT_READY信号などの状態信号も提供する。コントローラ510は、メモリ505がどの入力及び重みをMACスキップ回路に提供するかも指示する。活性化関数515は、MACスキップ回路200の出力を採用し、且つReLU活性化関数などの活性化関数を出力に適用する。続いて結果をメモリ505に記憶し戻すとともにコントローラ510に提供することができる。
【0084】
図27は、一連のサンプルテストの結果を説明する。この図は、累積部分和が実行される各データポイントに必要なエネルギーを説明する。楕円形の破線は、スキップモジュールがない場合に処理して生成した累積部分和を囲む。図示するように、累積部分和がゼロよりも大きい場合、スキップモジュールを使用して累積部分和を計算するためのエネルギーは、スキップモジュールを使用しない場合のエネルギーよりも大きい。しかしながら、累積部分和がただ適当に0よりも小さい場合、スキップモジュールを使用する時に必要とするエネルギーは遥かに少ない。この実例において、スキップモジュールを使用する場合に平均エネルギー節約が約12.2%である。10%~40%のエネルギー節約を実現することができる。
【0085】
上記MACプロセスの計算複雑さは、入力及び重みベクトル数Mの増加につれて高くなる。ReLU活性化関数は、MACの出力値が正の場合のみにMACの出力値を記憶し、MACの出力値が負の場合にゼロを記憶することが既知であれば、実施例により、入力データの残りの処理を選択的にスキップすることで計算能力を節約可能な処理方法、回路及びシステムを提供する。実施例において、積和を反復して計算する。反復する度に、スキップ機能ブロックは部分累積積和を評価する。部分累積積和が負であり、残りの操作によって結果を正にすることができない場合、残りの計算をスキップする。残りの計算をスキップすることで、計算サイクルの減少及びメモリ呼び出しの減少が達成される。
【0086】
一実施例は、ワード単位の入力及びビット単位の重みで入力ベクトルと重みベクトルの積に部分和累積を行って、部分累積積和を生成するステップと、部分累積積和をしきい値条件と比較するステップと、部分累積積和がしきい値条件を満たす場合、和累積の残りの計算をスキップすることを指示するようにスキップインジケータをアサートするステップと、を含むデータ処理方法である。
【0087】
実施例において、方法は、入力ベクトルと重みベクトルの少なくとも1つのビット位置の積の部分和累積をスキップするステップを更に含む。実施例において、しきい値条件は、動的に計算されたしきい値条件である。実施例において、部分累積積和が負であり、且つ残りの1組の未知の重みビットによって部分累積積和を正にすることができない場合、スキップインジケータをアサートする。実施例において、残りの1組の未知の重みビットは、1であると仮定される。実施例において、方法は、部分累積積和に対して活性化関数を実行し、活性化関数の出力が0又は部分累積積和の大きい値に等しいことを記録するステップを更に含む。実施例において、方法は、部分累積積和がしきい値条件よりも小さい場合、ワード単位の入力及びビット単位の重みで入力ベクトル及び重みベクトルの残りの部分の積に第2の部分和累積を行って、第2の部分累積積和を生成するステップを更に含む。
【0088】
別の実施例は、それぞれ1組のM個の入力ベクトルに1組のM個の重みベクトルの第1の重みビットを乗算して1組目のM個の積を計算し、1組目のM個の積を加算して第1の積和を計算し、且つ積和出力ピン群にて第1の積和を提供するための乗算累積回路ブロックと、積和出力ピン群に結合される累積器入力ピン群を含み、累積器入力ピン群にて第1の値を受信し、第1の値を累積器回路ブロック内の累積値に加算して第1の値を累積して累積値を置き換え、且つ累積値出力ピン群にて累積値を提供するための累積器回路ブロックと、累積値出力ピン群に結合される累積値入力ピン群を含み、累積値をしきい値と比較し、しきい値を満たす場合、スキップピンにあるスキップ信号をアサートするためのスキップ回路ブロックと、スキップピンにスキップ信号があるか否かをチェックし、スキップ信号がアサートされていない場合、乗算累積回路ブロックが前記組のM個の重みベクトルの次の重みビットを処理するようにし、スキップ信号がアサートされた場合、前記組のM個の重みベクトルの残りの部分の処理を停止し、出力準備完了信号をアサートし、且つ累積値を活性化回路に提供するための制御回路ブロックと、を備えるデータ処理装置である。
【0089】
実施例において、スキップ回路ブロックは、処理される前記組のM個の重みベクトルの重みビット位置に対して複数回シフトしたシフト入力和を入力和から減算してしきい値を計算し、且つしきい値と累積値を比較するための減算回路ブロックを含む。実施例において、しきい値は第1のしきい値であり、減算回路ブロックは、更に第1のしきい値と累積値を比較する前に第2のしきい値を累積値に加算して累積値を変化させるために用いられる。実施例において、第2のしきい値は、一定値、入力和又は累積値に基づく派生値又は環境変数に基づく動的値であり、前記環境変数は、パワー状態、電池状態、ハードウェア状態又はリソース状態を含む。実施例において、累積器回路ブロックは、ADDピンを含み、ADDピンにより制御される時に累積値から第1の値を減算するために用いられ、制御回路ブロックは、更に第1の重みビットが前記組のM個の重みベクトルの最上位ビットに対応する場合、ADDピンを介して累積器回路ブロックが第1の値を減算するように制御するために用いられる。実施例において、装置は、前記組のM個の入力ベクトルを記憶するための入力ラッチ回路ブロックと、前記組のM個の重みビットを記憶するための重みビットラッチ回路ブロックと、第1の積和を計算するための乗算ブロック及び加算器ツリーを含む乗算累積回路ブロックと、を更に備える。
【0090】
別の実施例は、それぞれビット単位の重みで入力ノードと入力の複数の重みベクトルの複数の積を計算し、各積の総和を求めて各ビットの積和を計算し、各ビットに対するビット値の位置に基づいて積和を重み付けし、且つ積和を累積して累積積和とするための乗算累積装置と、積和をしきい値と比較し、前記しきい値に達した場合にスキップ信号をアサートするためのスキップモジュールと、スキップ信号がアサートされていない場合、乗算累積装置が重みベクトルの次のビットを処理するようにし、スキップ信号がアサートされた場合、乗算累積装置が重みベクトルの残りの部分の処理を中止するようにするための制御ロジック装置と、累積積和の値に基づいて入力ノードの畳み込み値を判定する活性化装置と、を備えるデータ処理システムである。
【0091】
実施例において、スキップモジュールは、各重みビットを処理した後に積和を評価するために用いられる。実施例において、入力ノードの全ての入力の入力和に基づいてスキップモジュールのしきい値を計算する。実施例において、入力和からビットシフト入力和を減算することでスキップモジュールのしきい値を計算し、前記ビットシフト入力和は、現在評価される重みビットのビット位置に対応するビット数だけシフトする。実施例において、しきい値は第1のしきい値であり、スキップモジュールは、更に第2のしきい値を積和の絶対値に加算するとともに、第1のしきい値と比較し、絶対値が第1のしきい値よりも大きい場合、スキップ信号をアサートするために用いられる。実施例において、第2のしきい値は、積和に基づく現在の値、入力ノードの全ての入力の入力和又は一定値の所定のしきい値である。実施例において、第2のしきい値は、環境要素に基づく動的しきい値であり、環境要素は、パワー状態、電池容量、計算リソースの利用可能性又はハードウェア故障のうちの1つ又は複数を含む。
【0092】
当業者が本開示内容の各態様をより良く理解できるように、上記で複数の実施例の特徴を概説した。当業者であれば、本明細書で紹介された実施例と同じ目的及び/又は同じメリットを実現するように、他のプロセス及び構造を設計又は修正するための基礎として本開示内容を容易に使用することができると理解すべきである。当業者であれば、このような等価構造は、本開示内容の精神及び範疇から逸脱しておらず、且つ本開示内容の精神及び範疇から逸脱しない限り、これらの等価構造に様々な変化、代替及び変更を行うことができることも意識すべきである。
【符号の説明】
【0093】
10 画像
11 画素
12 ノード
14 重みマトリックス
16 乗算累積演算/計算
18 活性化関数
20 演算
30 総和公式
31 公式
32 符号ビット和項
34 第1の入れ子和項
36 第2の入れ子和項
100 プロセスフローチャート
110、120、130、140、150、160、170、180 操作
200 MACスキップ回路
205 ベクトル
210 フリップフロップ
215 重みベクトル
220 フリップフロップ
225 乗算器
230 加算ブロック
230a 加算器
230b 累積器
235a 部分和
235 シフトレジスタ
240 出力
245 スキップモジュール
250 ピン
255 ピン
255a ビット
260 コントローラ
305 有限状態機械
310 状態ロジック
315 カウンタ
320 カウンタロジック
325 状態フリップフロップ
330 ロジック
335 ジャンプロジック
350 入力和フリップフロップ
355 シフトレジスタ
360 減算器
365 比較器
370 回路ブロック
375 スキップフリップフロップ
405、410、455、460、465、470 操作
500 システム
505 メモリ
510 コントローラ
515 活性化関数
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23A
図23B
図24A
図24B
図25
図26
図27