(57)【要約】  ニューラルネットワークにおけるビット直列計算についてのシステムが説明される。システムは、集積回路上で具体化されてもよく、ビット直列計算を実行する１つ以上のビット直列タイルを含んでもよく、各々のビット直列タイルは、入力ニューロン及びシナプスを受信し、出力ニューロンを通信する。また、含まれるのは、ニューロンを記憶する活性化メモリ、並びにディスパッチャ及び換算器である。ディスパッチャは、メモリからニューロン及びシナプスを読み込み、１つ以上のビット直列タイルにニューロン又はシナプスのいずれかをビットで直列に通信する。ニューロン又はシナプスのもう一方は、１つ以上のビット直列タイルにビットで並列に通信され、又は更なる実施形態に従って、１つ以上のビット直列タイルにビットで直列にも通信されてもよい。換算器は、１つ以上のタイルから出力ニューロンを受信し、活性化メモリに出力ニューロンを通信する。【選択図】図２
2019522271.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークにおけるビット直列計算についてのシステムであって、
ニューラルネットワークにおいてビット直列計算を実行する１つ以上のビット直列タイルであって、各々のビット直列タイルは、入力ニューロン及びシナプスを受信し、出力ニューロンを生成する、１つ以上のビット直列タイルと、
ニューロンを記憶し、ディスパッチャ及び換算器を介して前記１つ以上のビット直列タイルと通信する活性化メモリと
を備え、
前記ディスパッチャは、前記活性化メモリからニューロンを読み込み、第１のインタフェースを介して前記１つ以上のビット直列タイルに前記ニューロンを通信し、
前記ディスパッチャは、メモリからシナプスを読み込み、第２のインタフェースを介して前記１つ以上のビット直列タイルに前記シナプスを通信し、
前記換算器は、前記１つ以上のビット直列タイルから前記出力ニューロンを受信し、第３のインタフェースを介して前記活性化メモリに前記出力ニューロンを通信し、
前記第１のインタフェース及び前記第２のインタフェースのうちの１つは、前記１つ以上のビット直列タイルに前記ニューロン又は前記シナプスをビットで直列に通信し、前記第１のインタフェース及び前記第２のインタフェースのうちのもう一方は、前記１つ以上のビット直列タイルに前記ニューロン又は前記シナプスをビットで並列に通信する、
システム。
【請求項２】
前記ディスパッチャは、１つ以上のニューロンのブロックにおいて１ビットを識別する１つ以上のオフセットを送信し、それによって、前記ブロックのゼロビットをスキップする、請求項１に記載のシステム。
【請求項３】
前記ディスパッチャは、１つ以上のブリックにおいて前記ニューロンを収集するためのシャッフラ及び直列ビットストリームに前記ブリックを変換するための転移器を含む、請求項１に記載のシステム。
【請求項４】
前記ディスパッチャは、１つ以上のグループに前記１つ以上のブリックを収集する、請求項３に記載のシステム。
【請求項５】
前記ビット直列タイルの各々は更に、シナプスバッファ、前記ディスパッチャからの入力ニューロンを保持する入力ニューロンバッファ、及び前記換算器への通信を保留している出力ニューロンを保持するニューロン出力バッファを含む、請求項１に記載のシステム。
【請求項６】
前記換算器は更に、記憶する前に、前記出力ニューロンを完全な精度値から最も近くに換算された精度値に変換する、請求項１に記載のシステム。
【請求項７】
前記活性化メモリは、前記１つ以上のビット直列タイルに対する専用メモリである、請求項１に記載のシステム。
【請求項８】
前記換算器は更に、所望の精度に従って、１つ以上のブリックに前記出力ニューロンを変換する、請求項１に記載のシステム。
【請求項９】
前記ディスパッチャは、入力ニューロンの最上位ビット値又は最下位ビット値に基づいて、前記入力ニューロンの前記精度を換算する、請求項１に記載のシステム。
【請求項１０】
前記ディスパッチャは、前記入力ニューロンの前記最上位ビット値及び前記最下位ビット値に基づいて、前記入力ニューロンの前記精度を換算する、請求項９に記載のシステム。
【請求項１１】
前記１つ以上のビット直列タイルによる前記ビット直列計算についての処理時間は、前記ニューロンから処理されたビットの数に比例する、請求項１に記載のシステム。
【請求項１２】
前記１つ以上のビット直列タイルは、シナプスをビットで並列に処理する、請求項１に記載のシステム。
【請求項１３】
前記１つ以上のビット直列タイルは、重みレジスタを含む、請求項１に記載のシステム。
【請求項１４】
前記１つ以上のビット直列タイルは更に、直列重みレジスタを含む、請求項１３に記載のシステム。
【請求項１５】
前記１つ以上のビット直列タイルによる前記ビット直列計算についての処理時間は、前記ニューロン及びシナプスから処理されたビットの数の積に比例する、請求項１４に記載のシステム。
【請求項１６】
前記１つ以上のビット直列タイルは、２つ以上のウインドウを並列に処理する、請求項１に記載のシステム。
【請求項１７】
前記２つ以上のウインドウは各々、ウインドウレーンと関連付けられ、各々のウインドウレーンは、１つ以上のビット直列ニューロンレーンを含む、請求項１６に記載のシステム。
【請求項１８】
前記シナプスバッファは、１つ以上のフィルタレーンを含む、請求項５に記載のシステム。
【請求項１９】
前記１つ以上のフィルタレーンは各々、１つ以上のシナプスレーンを含む、請求項１８に記載のシステム。
【請求項２０】
前記シナプスバッファ及び前記入力ニューロンバッファは、１つ以上の直列内積サブユニットの２次元アレイと通信する、請求項１９に記載のシステム。
【請求項２１】
前記１つ以上の直列内積サブユニットの各々は、１つの出力ニューロンを産出する、請求項２０に記載のシステム。
【請求項２２】
前記シナプスバッファの前記フィルタレーンは、相互接続を介して対応する前記直列内積サブユニットと通信する、請求項２１に記載のシステム。
【請求項２３】
前記入力ニューロンバッファの前記ウインドウレーンは、相互接続を介して対応する前記直列内積サブユニットと通信する、請求項２２に記載のシステム。
【請求項２４】
前記直列内積サブユニットに１つ以上のシナプスグループを提供するシナプスレジスタを更に備える、請求項２１に記載のシステム。
【請求項２５】
各々の直列内積サブユニットは、複数の入力加算器ツリーを含む、請求項２１に記載のシステム。
【請求項２６】
各々の直列内積サブユニットは更に、１つ以上の否定ブロックを含む、請求項２５に記載のシステム。
【請求項２７】
各々の直列内積サブユニットは更に、比較器を含む、請求項２５に記載のシステム。
【請求項２８】
前記シャッフラは、１つ以上のマルチプレクサを含む、請求項３に記載のシステム。
【請求項２９】
前記システムの演算を制御するコントローラを更に備える、請求項１に記載のシステム。
【請求項３０】
第２の直列内積サブユニットの出力を入力として選択的に使用する第１の直列内積サブユニットを更に備える、請求項１に記載のシステム。
【請求項３１】
前記第１の直列内積サブユニットは、ニューラルネットワークにおける層の１つ以上の次元に基づいて出力を選択的に使用する、請求項３０に記載のシステム。
【請求項３２】
前記ディスパッチャは、前記ニューロンにおいて前記１ビットを識別するためにビットのサブグループにおける前記１つ以上のニューロンを処理する、請求項２に記載のシステム。
【請求項３３】
前記１つ以上のニューロンは、１ビットの前記オフセットを通信する前に、正の２の累乗及び負の２の累乗を使用して符号化される、請求項２に記載のシステム。
【請求項３４】
前記１つ以上のニューロンのうちの少なくとも２つ以上は、同時に処理され、サブグループにグループ化される、請求項２に記載のシステム。
【請求項３５】
前記サブグループのうちの少なくとも１つは、他の同時に処理されるサブグループが進行するのを待つことなく、ニューロン値の新たなセットを独立して処理することを進行させることができる、請求項３４に記載のシステム。
【請求項３６】
１つ以上のニューロンのブロックにおいて前記１ビットを識別する前記１つ以上のオフセットにおいて識別された少なくとも１つの最下位ビットは、ドロップされ、直列内積サブユニットによって処理されない、請求項２に記載のシステム。
【請求項３７】
前記１つ以上のビット直列タイルは、１ビットのオフセットに前記１つ以上のニューロンを符号化する、請求項２に記載のシステム。
【請求項３８】
前記ニューロン又はシナプスは、換算された精度においてメモリに記憶される、請求項１に記載のシステム。
【請求項３９】
前記ニューロン又はシナプスは、ブロックに記憶され、各々のブロックは、開始メモリアドレスを有し、前記開始メモリアドレスは、メモリ内の他の場所のアレイにおいて指定される、請求項３８に記載のシステム。
【請求項４０】
前記第２のインタフェースは、ビット並列インタフェースである、請求項１に記載のシステム。
【請求項４１】
１つ以上の直列内積サブユニットを更に備え、各々の直列内積サブユニットは、ニューロン又はシナプスのブロック、及びニューロン又はシナプスの前記ブロックにおいて１ビットを識別する１つ以上のオフセットを処理し、前記ブロックにおいて少なくとも１つのゼロビットをスキップする、請求項１に記載のシステム。
【請求項４２】
ニューラルネットワークにおけるビット直列計算についてのシステムであって、
ニューラルネットワークにおいてビット直列計算を実行する１つ以上のビット直列タイルであって、各々のビット直列タイルは、入力ニューロン及びシナプスを受信し、出力ニューロンを通信する、１つ以上のビット直列タイルと、
ニューロンを記憶し、ディスパッチャ及び換算器を介して前記１つ以上のビット直列タイルと通信する活性化メモリと
を備え、
前記ディスパッチャは、前記活性化メモリからニューロンを読み込み、第１のインタフェースを介して前記１つ以上のビット直列タイルに前記ニューロンを通信し、
前記ディスパッチャは、メモリからシナプスを読み込み、第２のインタフェースを介して前記１つ以上のビット直列タイルに前記シナプスを通信し、
前記換算器は、前記１つ以上のビット直列タイルから前記出力ニューロンを受信し、第３のインタフェースを介して前記活性化メモリに前記出力ニューロンを通信し、
前記第１のインタフェース及び前記第２のインタフェースは、前記１つ以上のビット直列タイルに前記ニューロン及び前記シナプスをビットで直列に通信する、
システム。
【請求項４３】
前記ディスパッチャは、前記入力ニューロンの最上位ビット値又は最下位ビット値に基づいて、入力シナプスの精度を換算する、請求項４２に記載のシステム。
【請求項４４】
前記ディスパッチャは、前記入力ニューロンの前記最上位ビット値及び前記最下位ビット値に基づいて、前記入力シナプスの精度を換算する、請求項４２に記載のシステム。
【請求項４５】
ビット直列ニューラルネットワーク加速器を含む集積回路であって、
ニューラルネットワークにおいてビット直列計算を実行する１つ以上のビット直列タイルであって、各々のビット直列タイルは、入力ニューロン及びシナプスを受信し、出力ニューロンを生成する、１つ以上のビット直列タイルと、
ニューロンを記憶し、ディスパッチャ及び換算器を介して前記１つ以上のビット直列タイルと通信する活性化メモリと
を備え、
前記ディスパッチャは、前記活性化メモリからニューロンを読み込み、第１のインタフェースを介して前記１つ以上のビット直列タイルに前記ニューロンを通信し、
前記ディスパッチャは、メモリからシナプスを読み込み、第２のインタフェースを介して前記１つ以上のビット直列タイルに前記シナプスを通信し、
前記換算器は、前記１つ以上のビット直列タイルから前記出力ニューロンを受信し、第３のインタフェースを介して前記活性化メモリに前記出力ニューロンを通信し、
前記第１のインタフェース及び前記第２のインタフェースのうちの１つは、前記１つ以上のビット直列タイルに前記ニューロン又は前記シナプスをビットで直列に通信し、前記第１のインタフェース及び前記第２のインタフェースのうちのもう一方は、前記１つ以上のビット直列タイルに前記ニューロン又は前記シナプスをビットで並列に通信する、
集積回路。
【請求項４６】
ビット直列ニューラルネットワーク加速器を含む集積回路であって、
ニューラルネットワークにおいてビット直列計算を実行する１つ以上のビット直列タイルであって、各々のビット直列タイルは、入力ニューロン及びシナプスを受信し、出力ニューロンを通信する、１つ以上のビット直列タイルと、
ニューロンを記憶し、ディスパッチャ及び換算器を介して前記１つ以上のビット直列タイルと通信する活性化メモリと
を備え、
前記ディスパッチャは、前記活性化メモリからニューロンを読み込み、第１のインタフェースを介して前記１つ以上のビット直列タイルに前記ニューロンを通信し、
前記ディスパッチャは、メモリからシナプスを読み込み、第２のインタフェースを介して前記１つ以上のビット直列タイルに前記シナプスを通信し、
前記換算器は、前記１つ以上のビット直列タイルから前記出力ニューロンを受信し、第３のインタフェースを介して前記活性化メモリに前記出力ニューロンを通信し、
前記第１のインタフェース及び前記第２のインタフェースは、前記１つ以上のビット直列タイルに前記ニューロン及び前記シナプスをビットで直列に通信する、
集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は概して、ニューラルネットワークに関し、特に、使用される数値表現の長さと比例して拡張可能な実行時間によるディープニューラルネットワーク（ＤＮＮ）についての加速器に関する。
【背景技術】
【０００２】
ディープニューラルネットワーク（ＤＮＮ）は、物体及び言語認識などの多くの認識タスクにおける最新技術である。ＤＮＮは、層のフィードフォワード配置を含み、各々の層は、グラフィックプロセシングユニット（ＧＰＵ）の使用により共通して利用される高計算要求及び並列処理を示す。ＤＮＮの高計算要求及びより高いエネルギー効率についての必要性は、特殊目的アーキテクチャの開発及び提案を動機付けている。しかしながら、電力がＤＮＮ設計における制限要因になり続けている。
【０００３】
したがって、本分野において改善についての必要性が残っている。
【発明の概要】
【０００４】
本発明の態様に従って、ビット直列ニューラルネットワーク加速器が提供される。
【０００５】
本発明の実施形態に従って、ニューラルネットワークにおけるビット直列計算についてのシステムが提供され、システムは、ニューラルネットワークにおいてビット直列計算を実行する１つ以上のビット直列タイルであって、各々のビット直列タイルは、入力ニューロン及びシナプスを受信し、出力ニューロンを生成する、１つ以上のビット直列タイルと、ニューロンを記憶し、ディスパッチャ及び換算器を介して１つ以上のビット直列タイルと通信する活性化メモリと、を備え、ディスパッチャは、活性化メモリからニューロンを読み込み、第１のインタフェースを介して１つ以上のビット直列タイルにニューロンを通信し、ディスパッチャは、メモリからシナプスを読み込み、第２のインタフェースを介して１つ以上のビット直列タイルにシナプスを通信し、換算器は、１つ以上のビット直列タイルから出力ニューロンを受信し、第３のインタフェースを介して活性化メモリに出力ニューロンを通信し、第１のインタフェース及び第２のインタフェースのうちの１つは、１つ以上のビット直列タイルにニューロン又はシナプスをビットで直列に通信し、第１のインタフェース及び第２のインタフェースのうちのもう一方は、１つ以上のビット直列タイルにニューロン又はシナプスをビットで並列に通信する。
【０００６】
本発明の更なる実施形態に従って、ニューラルネットワークにおけるビット直列計算についてのシステムが提供され、システムは、ニューラルネットワークにおいてビット直列計算を実行する１つ以上のビット直列タイルであって、各々のビット直列タイルは、入力ニューロン及びシナプスを受信し、出力ニューロンを通信する、１つ以上のビット直列タイルと、ニューロンを記憶し、ディスパッチャ及び換算器を介して１つ以上のビット直列タイルと通信する活性化メモリと、を備え、ディスパッチャは、活性化メモリからニューロンを読み込み、第１のインタフェースを介して１つ以上のビット直列タイルにニューロンを通信し、ディスパッチャは、メモリからシナプスを読み込み、第２のインタフェースを介して１つ以上のビット直列タイルにシナプスを通信し、換算器は、１つ以上のビット直列タイルから出力ニューロンを受信し、第３のインタフェースを介して活性化メモリに出力ニューロンを通信し、第１のインタフェース及び第２のインタフェースは、１つ以上のビット直列タイルにニューロン及びシナプスをビットで直列に通信する。
【０００７】
本発明の更なる実施形態に従って、各々のビット直列タイルは更に、シナプスバッファ、ディスパッチャからの入力ニューロンを保持する入力ニューロンバッファ、及び換算器への通信を保留している出力ニューロンを保持するニューロン出力バッファを含んでもよい。
【０００８】
本発明の更なる実施形態に従って、ビット直列ニューラルネットワーク加速器を含む集積回路が提供され、集積回路は、ニューラルネットワークにおいてビット直列計算を実行する１つ以上のビット直列タイルであって、各々のビット直列タイルは、入力ニューロン及びシナプスを受信し、出力ニューロンを生成する、１つ以上のビット直列タイルと、ニューロンを記憶し、ディスパッチャ及び換算器を介して１つ以上のビット直列タイルと通信する活性化メモリと、を備え、ディスパッチャは、活性化メモリからニューロンを読み込み、第１のインタフェースを介して１つ以上のビット直列タイルにニューロンを通信し、ディスパッチャは、メモリからシナプスを読み込み、第２のインタフェースを介して１つ以上のビット直列タイルにシナプスを通信し、換算器は、１つ以上のビット直列タイルから出力ニューロンを受信し、第３のインタフェースを介して活性化メモリに出力ニューロンを通信し、第１のインタフェース及び第２のインタフェースのうちの１つは、１つ以上のビット直列タイルにニューロン又はシナプスをビットで直列に通信し、第１のインタフェース及び第２のインタフェースのうちのもう一方は、１つ以上のビット直列タイルにニューロン又はシナプスをビットで並列に通信する。
【０００９】
本発明の更なる実施形態に従って、ビット直列ニューラルネットワーク加速器を含む集積回路が提供され、集積回路は、ニューラルネットワークにおいてビット直列計算を実行する１つ以上のビット直列タイルであって、各々のビット直列タイルは、入力ニューロン及びシナプスを受信し、出力ニューロンを通信する、１つ以上のビット直列タイルと、ニューロンを記憶し、ディスパッチャ及び換算器を介して１つ以上のビット直列タイルと通信する活性化メモリと、を備え、ディスパッチャは、活性化メモリからニューロンを読み込み、第１のインタフェースを介して１つ以上のビット直列タイルにニューロンを通信し、ディスパッチャは、メモリからシナプスを読み込み、第２のインタフェースを介して１つ以上のビット直列タイルにシナプスを通信し、換算器は、１つ以上のビット直列タイルから出力ニューロンを受信し、第３のインタフェースを介して活性化メモリに出力ニューロンを通信し、第１のインタフェース及び第２のインタフェースは、１つ以上のビット直列タイルにニューロン及びシナプスをビットで直列に通信する。
【００１０】
本出願に従った他の態様及び特徴は、添付図面と共に発明の実施形態の以下の説明をレビューするときに当業者にとって明らかになるであろう。
【００１１】
例としてのみ、本発明の実施形態を示し、それらをどのように実行することができるかを示す、添付図面への参照がここでなされる。
【図面の簡単な説明】
【００１２】
【図１】従来技術のビット並列ＤＮＮタイルである。
【図２】本発明の実施形態に従ったニューラルプロセシングユニットである。
【図３】実施形態に従ったビット直列内積ユニット（ＳＩＰ）である。
【図４】実施形態に従ったビット直列タイルとニューラルメモリ（ＮＭ）との間のデータ移動のデータフローチャートである。
【図５】実施形態に従ったディスパッチャである。
【図６】実施形態に従ったニューロンメモリマッピングのデータフローチャートである。
【図７】本発明の実施形態の実験的な加速化の結果の棒グラフである。
【図８】本発明の実施形態の実験的なエネルギー効率の結果の棒グラフである。
【図９】本発明の実施形態の性能対正確度の実験的な結果の線グラフである。
【図１０】本発明の実施形態の性能の実験的な結果の棒グラフである。
【図１１】本発明の実施形態の性能の実験的な結果の棒グラフである。
【図１２】本発明の実施形態に従ったニューラルプロセシングユニット又はタイルである。
【図１３】本発明の実施形態に従ったビット直列内積ユニット（ＳＩＰ）である。
【図１４Ａ−１４Ｃ】図１４ＡはＤａＤＮを表す従来技術のビット並列処理エンジンであり、図１４Ｂ及び図１４Ｃは２つのサイクルにわたる畳み込み層の処理を示す。
【図１５Ａ−１５Ｄ】本発明の実施形態に従った畳み込み層を処理するニューラルプロセシングユニットを示し、図１５Ａはエンジンの構造を示し、図１５Ｂ〜図１５Ｄはそれが畳み込み層をどのように処理するかを示す。
【図１６Ａ−１６Ｅ】本発明の実施形態に従った完全結合層を処理するニューラルプロセシングユニットを示す。
【図１７】本発明の実施形態に従ったニューラルプロセシングユニットによって処理される完全結合層及び畳み込み層についての層ごとの精度の結果を表示するテーブルである。
【図１８】本発明の実施形態に従ったニューラルプロセシングユニットによって処理される完全結合層及び畳み込み層についての実行時間及びエネルギー効率の改善を表示するテーブルである。
【図１９】発明の実施形態に従ったサイクルごとに２つの活性化ビットを処理するニューラルプロセシングユニットの完全結合層及び畳み込み層についての相対的性能を表示するテーブルである。
【図２０】本発明の実施形態に従った各々が８ビットの基準値精度を有する４つのニューロンのグループの同時処理を示す。
【図２１】本発明の実施形態に従ったニューラルプロセシングユニットである。
【図２２】本発明の実施形態に従ったビット直列内積ユニット（ＳＩＰ）である。
【図２３】実施形態に従った完全結合層及びニューラルプロセシングユニットのシナプス／重みについての層ごとの精度の結果を表示するテーブルである。
【図２４】本発明の実施形態に従ったサイクルごとに２つ及び４つの活性化ビットを処理するニューラルプロセシングユニットについての実行時間性能及びエネルギー効率を表示するテーブルである。
【図２５】ネットワークごとの入力ニューロンごとの１ビットカウントの累積線グラフである。
【図２６】本発明の実施形態に従ったビット直列内積ユニット（ＳＩＰ）である。
【図２７】本発明の実施形態のゼロビットの読み飛ばし（ｓｋｉｐｐｉｎｇ）性能の実験的な結果の棒グラフである。
【図２８Ａ−２８Ｆ】図２８Ａは２つのサイクルにわたる例示的な２ｂ×２ｂ層を処理する従来のビット並列処理エンジンを示し、図２８Ｂ〜図２８Ｆは本発明の実施形態が完全結合層をどのように処理するかを示す。
【発明を実施するための形態】
【００１３】
図面において同様の参照符号は、同様の又は対応する要素を示している。
【００１４】
図１は、Ｃｈｅｎ  ｅｔ  ａｌ．［Ｙ．Ｃｈｅｎ，Ｔ．Ｌｕｏ，Ｓ．Ｌｉｕ，Ｓ．Ｚｈａｎｇ，Ｌ．Ｈｅ，Ｊ．Ｗａｎｇ，Ｌ．Ｌｉ，Ｔ．Ｃｈｅｎ，Ｚ．Ｘｕ，Ｎ．Ｓｕｎ，ａｎｄ  Ｏ．Ｔｅｍａｍ，“ＤａＤｉａｎＮａｏ：Ａ  ｍａｃｈｉｎｅ−ｌｅａｒｎｉｎｇ  ｓｕｐｅｒｃｏｍｐｕｔｅｒ，”ｉｎ  Ｍｉｃｒｏａｒｃｈｉｔｅｃｔｕｒｅ（ＭＩＣＲＯ），２０１４  ４７ｔｈ  Ａｎｎｕａｌ  ＩＥＥＥ／ＡＣＭ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ，ｐｐ．６０９−６２２，Ｄｅｃ  ２０１４．］によって提案されたものなど、従来技術のビット並列ディープニューラルネットワーク（ＤＮＮ）システムを表すビット並列タイル１００である。各々の従来技術のビット並列チップは、１６のそのようなタイル１００を含む。各々のタイルは、シナプスサブレーンごとに１つの、サイクルごとに２５６のシナプスを提供する、シナプスバッファ（ＳＢ）１１０を有する。タイルはまた、ニューロンレーン１４０ごとに１つのサイクルごとに１６のニューロンを提供する、入力ニューロンバッファ（ＮＢｉｎ）１２０と、サイクルごとに１６の出力ニューロンを受け付けることができるニューロン出力バッファ（ＮＢｏｕｔ）１３０とを有する。計算ロジックは、ニューラル機能ユニット（ＮＦＵ：Ｎｅｕｒａｌ  Ｆｕｎｃｔｉｏｎａｌ  Ｕｎｉｔ）、又はユニット（ｕｎｉｔ）と称される。サイクルごとに、各々のＮＦＵは、部分出力ニューロンのブリックｏＢ（ｑ，ｗ，ｆ）を産出する。ブリックは、好ましくは第３次元、例えば、ｏ（ｑ，ｗ，ｆ）、…、ｏ（ｑ，ｗ，ｆ＋１５）に沿って隣接し、好ましくは、Ｆが１６によって割り切ることができる、１６の要素の集合として定義される。ＮＦＵは、１つの入力ニューロンブリックｎＢ（ｘ，ｙ，ｉ）及び１６のフィルタ、ｓＢｆ（ｋ，ｌ，ｉ）〜ｓＢｆ＋１５（ｋ，ｌ，ｉ）の各々からの１６のシナプスブリックの１つを処理することによってそれを行う。この目的のために、ＮＦＵは、１６のニューロンレーン１４０及び１６フィルタレーン１５０を有し、それらの各々が２５６のシナプスレーンの合計に対し１６のシナプスレーン１６０を有する。
【００１５】
各々のニューロンレーン１４０は、１６のフィルタレーン１５０の各々からの１つの、１６のシナプスサブレーン１６０に結合される。シナプスレーン１６０は、そのシナプスを入力ニューロンと乗算し、フィルタ１５０の全てのシナプスレーン１６０からの１６の積が部分和に換算される。合計で、フィルタレーン１５０の各々は、ユニットごとに合計１６の出力ニューロンについて、サイクルごとに部分和を産出する。内積ユニット（ＩＰ）１７０としての１つの出力ニューロンの産出に関連付けられたロジックを参照する。完全なウインドウが処理されると、１６の結果として生じる和は、１６の出力ニューロンを産出するために、非線形活性化関数、ｆを通じて供給される。サイクルごとの乗算及び換算は、シナプスサブレーン１６０ごとに１つの２５６の乗算器及び出力ニューロンごとに１つの１６の１７入力加算器ツリー（１６の積プラスＮＢｏｕｔ１３０からの部分和）として実施される。
【００１６】
ビット並列システムの目的は、オフチップ帯域幅を最小化すると共に、オンチップ計算の利用を最大化するとして述べられる。オフチップからシナプスをフェッチすることを回避するために、ＳＢ１１０は、最高クラスのネットワークについて処理されている層（複数可）についての全てのシナプスをそれが記憶することを可能にするＮＦＵごとに１つの、２ＭＢのチャンクに分散されて３２ＭＢのｅＤＲＡＭである。全体的に、ビット並列ノードは、ユニットごとに１６の、最大で２５６のフィルタを並列に処理することができる。初期入力及び最終出力を除く全ての内部層のニューロン出力が、４ＭＢの中央ｅＤＲＡＭ、又はニューロンメモリ（ＮＭ）に共有して記憶される。オフチップアクセスは、入力画像、層ごとに１回シナプスを読み込み、最終出力を書き込むためのみ必要とされる。
【００１７】
処理は、外部メモリから第１の層のフィルタシナプス、及び入力画像を読み込むことによって開始する。シナプスは、ＳＢにわたって分散され、入力はＮＭに記憶される。サイクルごとに、入力ニューロンブリック、ｎＢ（ｘ，ｙ，ｉ）は、全てのユニットにブロードキャストされる。層の出力ニューロンは、次の層を処理するとき、ＮＢｏｕｔ１３０を通じてＮＭに記憶され、ＮＢｉｎ１２０を通じて再度供給される。シナプスの次のセットを外部メモリからロードすることは、必要に応じて、現在の層の処理と重複され得る。
【００１８】
ビット直列処理
【００１９】
実施形態に従って、図２に示されるビット直列タイル２００は、ニューロンの発火を記憶するために活性化メモリを使用してもよい。使用される用語「活性化メモリ」及び「ニューロンメモリ」は、本分野及び文献において相互に交換可能であり、限定なしに、同様のことが以下で適用される。活性化メモリは、ビット直列加速器の所望の実装態様に従って、専用とされ、共有され、分散され、又はそれらの組み合わせであってもよい。よって、１つの実施形態では、ビット直列タイル２００は、使用される精度に関わらず、同一のＮＭ読み込み及び書き込み相互結合構造を使用してもよく、ＮＭにおける１６ビットのコンテナにニューロンを記憶してもよい。ビット直列加速器は、ＮＦＵにそれらをビットで直列に供給する間、既存のビット並列インタフェースを使用してＮＭからニューロンを読み込むためにディスパッチャユニットを導入してもよい。各々のビット直列タイルはまた、ＮＭに出力ニューロンを記憶するために換算器ユニットを使用する。
【００２０】
実施形態に従って、ビット直列ＤＮＮ加速器がニューロンについてのビット直列計算を使用することができるので、それは、ビット並列ＤＮＮよりも多くのニューロンを並列に処理することができ、それによって、それは、最大精度が使用されるときに同程度の性能を維持することができる。例えば、最悪の場合、ビット直列ＤＮＮ加速器は、１６ビットのニューロンを含む積を計算するために１６のサイクルを使用することがある。１６のニューロンブリックを並列に処理することができるビット並列タイルを比較するために、ビット直列タイルは、１６のブリック、又は２５６のニューロンを並列に処理することができる。畳み込み層の並列処理は、ニューロンを並列に処理するための多数のオプションを提供する。
【００２１】
実施形態に従って、図２に示されるビット直列タイル２００は、ニューロンブリックを使用して、各々のウインドウから１６のウインドウを並列に処理する能力を有し、それによって、１６×１６の出力ニューロンを並列に計算するために、１６のフィルタの各々からの同一の１６のシナプスを使用することができる。例えば、２つのストライドを有する層について、ビット直列タイルは、サイクルごとのニューロンごとの単一のビットの、１６のニューロンブリックｎＢ（ｘ，ｙ，ｉ）、ｎＢ（ｘ＋２，ｙ，ｉ）〜ｎＢ（ｘ＋３０，ｙ，ｉ）を並列に処理することができる。このケースでは、ビット直列タイルがフィルタｆｉ〜ｆｉ＋１５を処理すると仮定して、ｐサイクルの後、それは、以下の部分出力ニューロン、ｏＢ（ｘ／２，ｙ／２，ｆｉ）〜ｏＢ（ｘ／２＋１５，ｙ，ｆｉ）を産出し、又はｘ次元の出力ニューロンブリック上で１６の連続したパレットを産出する。ビット並列タイル１００は、１６のサイクルにわたって１６のニューロンブリックを処理することができ、ビット直列タイル２００は、ｐサイクルにわたって同時であるが、ビットで直列にそれらを処理することができ、ｐは、ビット内のニューロンの長さ又は精度である。ｐが１６未満である場合、ビット直列タイル２００は、ビット並列タイル１００よりも１６／ｐだけ性能を上回ることができ、ｐが１６であるとき、ビット直列タイルは理想的に、ビット並列タイル性能に相当することができる。
【００２２】
タイル構成
【００２３】
図２に示される実施形態に従って、ビット直列タイル２００は、以下のように構成されてもよく、タイルのＮＢｉｎ２２０は、１６ウインドウレーン２４０において論理的に構成されてもよく、各々は、２５６のニューロンレーンの合計に対し１６ビットの直列ニューロンレーン２８０グループを含んでもよい。各ウインドウレーン２４０は１６の入力ニューロンアレイウインドウの１つを処理してもよい。実施形態に従って、ＳＢ２１０は、ビット並列タイル１００と同一であってもよく、１６のフィルタレーン２５０において論理的に構成されてもよく、各々は、１６のシナプスレーン２６０を含んでもよい。ＳＢ２１０及びＮＢｉｎ２２０は、１６×１６の直列内積（ＳＩＰ）サブユニット２７０のアレイと通信し、又はアレイに結合してもよく、各々のＳＩＰ２７０は、１つの出力ニューロンを産出することができる。行ｆ及び列ｗにおけるＳＩＰ（ｆ，ｗ）２７０は、フィルタレーンｆ及びニューロンウインドウｗを処理することができる。ＳＢフィルタレーンｆは、相互結合、例えば、バスを介して、行ｆに沿って全てのＳＩＰ２７０と通信してもよく、又は全てのＳＩＰ２７０に結合してもよく、ＮＢｉｎウインドウレーンｗは、相互結合、例えば、バスを介して、列ｗに沿ってＳＩＰと通信してもよく、又はＳＩＰに結合してもよい。各々のＳＩＰ２７０は、シナプスレジスタ（ＳＲ）にラッチすることができる１６のニューロンビット及びシナプスブリックを入力として受け付けてもよい。ＳＲは、完全結合層をサポートすることができる。図２（及び、他の後続の図）は、ビット直列タイルをハードウェアとして説明し、ビット直列タイルは、ＧＰＵ（グラフィックプロセシングユニット）などのプロセッサ上でソフトウェアでエミュレートされてもよく、同様の性能強化を生じさせることができる。
【００２４】
実施形態に従って、ＳＩＰ２７０が図３に示される。各々のＳＩＰ２７０は、２５６の１７入力加算器ツリーの合計に対し１７入力加算器ツリー３１０を含んでもよく、ビット並列ＩＰは、１６のみ（ＩＰごとに１つ）を使用してもよい。ビット直列タイル２００についての領域を著しく増大させることができるように思えるが、各々のビット並列ＩＰ１７０は、２５６の２入力１６ビットの乗算器を必要とし、ビット直列ＩＰ２７０は、何ら必要とせず、或る程度の領域の増大を相殺する。
【００２５】
実施形態に従って、ビット直列タイル２００における処理は、各々のｐサイクルの段階で続行してもよく、ｐは、ビット内のニューロンの精度である。段階の第１のサイクルにおいて、ＳＢ２１０は、フィルタごとの１つのブリックの、１６ビットのシナプスの１６のブリックを提供することができる。各々のＳＩＰ２７０は、その対応するシナプスブリックをそのＳＲにラッチする。サイクルごとに、ＮＢｉｎ２２０は、２５６のニューロンビットを提供することができ、各々のニューロンビットは、同一の列に沿ったＳＩＰ２７０ごとに１つの、１６のシナプスを有するビット単位（ｂｉｔ−ｗｉｓｅ）のＡＮＤｅｄであってもよい。各ＡＮＤ演算は、１６ビットの項を産出することができる。よって、各々のＳＩＰ２７０は、１つのフィルタ２５０及び１つのウインドウ２４０に対応する１６の項を計算することができる。ＳＩＰ２７０は、専用の１６入力加算器ツリー３１０を使用して、その１６の項を部分出力ニューロンに合計してもよい。段階の残りのｐ−１サイクルについて、各々のＳＩＰ２７０は、その部分出力ニューロンを１ビットだけシフトさせてもよいと共に、別の１６項を累積し、ビット直列乗算を実施してもよい。ｐサイクルの後、２５６の１６ビットの部分出力ニューロンに等しい出力ニューロンパレットを完全に産出することができる。
【００２６】
内積ユニット
【００２７】
説明される実装態様では、ビット直列ユニット２００は、複数のサイクルにわたって２５６の出力ニューロンを同時に且つビットで直列に産出することができる。各々の出力ニューロンの計算は、内積である。ビット並列システム１００が１６の入力ニューロン及び１６のシナプスのこの内積を一度に計算し、ビット直列システム２００は、異なってこれを行ってもよい。ビット直列システム２００では、出力ニューロンごとに、及び各々のサイクルにおいて、１６のシナプスに沿った１６の入力ニューロンの各々からの１ビットが組み合わされてもよい。
【００２８】
ニューロンをビットで直列に乗算することは直接的であり、ニューロンが直列に供給され、シナプスが並列に供給される。特に、長さｐのビットの入力ニューロンｎを仮定して、ｎの二値表現は、
【数１】
2019522271.tif 000003
である。
【００２９】
ｎｂはｎのｂ番目のビットである。シナプスｓを仮定して、乗算ｓ×ｎを
【数２】
2019522271.tif 000004
として書き換えることができる。
【００３０】
これは、ｎｂ×ｓがＡＮＤであり、２ｂによる乗算がシフトであり、ｐサイクルにわたって積算器により総和が実行される回路の実装につながる。
【００３１】
これをビット並列システムに単純に適用するために、直列の１つに並列の乗算器の各々を変換することが可能である。しかしながら、この設計は、加算の可換的な性質を使用して簡易化されてもよい。正式には、上記式の内積の項は、以下のように再構成されてもよく、ｎｂは、ｎのｂ番目のビットであり、Ｎｉ＝１６は、ベクトルのサイズである。
【数３】
2019522271.tif 000005
【００３２】
ロジックの項では、これは、加算器ツリーにより積
【数４】
2019522271.tif 000006
に対して換算を最初に実行することができ、次いで、結果として生じる和についてシフト及び累積を実行することができることを示す。これは、加算器ツリーへの１６の入力の各々から出力に対するちょうど１つにシフトされた積算器を移動させることによって直接内積ユニットを簡易化する。図３は、直列内積回路（ＳＩＰ）２７０を示す。符号付きの２の補数ニューロンをサポートするために、ＳＩＰ２７０は、ＭＳＢが１であるとき、部分和からの直列入力ニューロンからＭＳＢに対応するシナプスを減算してもよい。これは、加算器ツリー３１０の前に各々のシナプスについての否定ブロック３２０により行われる。Ｎｉよりも大きい内積をサポートするために、データがＮＢｏｕｔ２３０から再度読み込まれ、積算器３３０を初期化するために使用されてもよい。各々のＳＩＰ２７０はまた、最大プーリング（ｍａｘ  ｐｏｏｌｉｎｇ）層をサポートするために比較器（最大）３４０を含んでもよい。
【００３３】
ディスパッチャ
【００３４】
ビット並列システムのニューロンメモリ４００は、サイクルごとにブリック、すなわち、１６の１６ビットニューロン、又は２５６ビットを全てのタイル２００にブロードキャストしてもよく、各々のタイル２００は、異なるフィルタにわたって同一のブリックを処理してもよい。ビット直列システムはまた、サイクルごとに２５６ビットを全てのタイル２００にブロードキャストしてもよいが、各々のビットは、異なるニューロンに対応してもよい。実施形態に従って、ビット直列システムは、１６ビットの粒度において各々のニューロンを調整する、ビット並列システムにあるような中央ニューロンメモリ（ＮＭ）４００に同一のニューロン記憶コンテナフォーマットを維持してもよい。ディスパッチャユニット５００は、図４に示される第１のインタフェースを介して、ＮＭ４００からニューロンを読み込み、ビット直列タイルにそれらをビットで直列に供給することの仕事が課されてもよい。
【００３５】
ユニットストライドを使用して層を最初に考えることによって、ＮＭ４００から必要なニューロンを読み込むことを最良に理解することができる。このケースでは、各々のサイクルにおいて、ビット直列ユニットは、ｘ次元のブリック、ｎＢ（ｘ，ｙ，ｉ）、ｎＢ（ｘ＋１，ｙ，ｉ）〜ｎＢ（ｘ＋１５，ｙ，ｉ）に沿って連続した１６からのビットを供給されてもよい。それらの１６のニューロンスライスを並列に読み込むことができると仮定して、ディスパッチャ５００は、次のｐサイクルにわたってそれらをビットで直列に供給してもよい。１６のブリックを並列に読み込むことを可能にするために、ビット直列システムは、ＮＭ４００における連続した位置上でそれらをマッピングしてもよい。多くの場合、これは、１６のブリックが同一のＮＭの行に記憶されることをもたらすことがある。このケースでは、ディスパッチャ５００は、単一のサイクルでそれらを全て読み込んでもよい（２ＭＢのＮＭがいくつかのサブアレイを含み、２５６のニューロンを並列に読み込むことが実現可能であると仮定して）。
【００３６】
入力ニューロンアレイのｙ次元と共にストライドに応じて、１６のブリックは、２つのＮＭの行にわたって広がってもよい（これは、データキャッシュから正しく調整されていないブロックを読み込むことと同様である）。このケースでは、ディスパッチャ５００は、ビット直列タイル２００を供給することができる前に、２つのサイクルにわたって最大で２つの行から適切なブリックを読み込み及び結合する必要がある場合がある。ｐが少なくとも２である限り、１６のブリックの次のセットは、ｐサイクルが経過するまで必要とされない場合がある。したがって、処理の全体は、パイプライン型であってもよく、よって、ビット直列システムは、時間のほとんど全てでビジーなままであることがある。
【００３７】
実施形態に従って、図６は、２つのウインドウ及び２つのストライドを有する例を示す。ストライドＳが１よりも多いとき、１６のブリックは、Ｒ＝ｍｉｎ［Ｓ＋１，１６］行にわたって広がってもよい。したがって、ディスパッチャ５００は、２５６のニューロンの次のセットをタイルに供給する前に、ＲサイクルにわたってＲの行を読み込んでもよい。Ｒがｐ未満である限り、全ての時間でユニットをビジーにしたままにする十分な時間がある。Ｒがｐよりも大きいとき、ユニットは、Ｒ−ｐサイクルの間に失速（ｓｔａｌｌ）してもよい。ストライドを考慮して、ディスパッチャ５００がＮＭ４００にブリックをマッピングすることによって読み込むことができる行の数を削減することが可能である。
【００３８】
上記説明されたように、層ストライドＳを仮定して、ディスパッチャは、１６のブリックを収集するためにサイクルごとに１つの、最大でｍａｘ［Ｓ＋１，１６］行を読み込んでもよい。それらの１６のブリックを仮定して、ディスパッチャ５００は次いで、ｐサイクルにわたって、サイクルごとに合計２５６のビットに対し、それらが含む２５６のニューロンの各々からの１ビットをビット直列タイル２００に送信してもよい。図５に示される実施形態に従って、ディスパッチャ５００は、２つの部分、シャッフラ５１０及び転移器５２０から構成されてもよい。シャッフラ５１０は、ＮＭから１６のブリックを読み込んでもよく、転移器５２０は、それらをビットで直列にタイル２００に通信してもよい。ディスパッチャ５００は、ｐサイクルごとに１６のブリックの新たなセットを通信してもよい。
【００３９】
図５に示される実施形態に従って、シャッフラ５１０は、ｐサイクルにわたってビット直列ユニットをビジーなままにするために１６のブリックを収集してもよい。１６のブリックの次のグループの収集は、現在のグループの処理と重なってもよい。よって、シャッフラ５１０は、ｐサイクルごとに１６のブリックグループを収集してもよい。サイクルごとに、シャッフラ５１０は、ＮＭ４００から２５６のニューロンの行を読み込んでもよい。ブリックをＮＭ４００に連続して記憶することができるので、あらゆる行は１６のブリックを含むことができる。しかしながら、それらのブリックの全てが所与の時間に必要とされないことがある。出力ブリックごとの１６対１マルチプレクサは、入力行に現れるときに適切なブリックを選択するために十分であることがある。したがって、シャッフラ５１０は、１６の１６対１の２５６ビット（１６のニューロンの１６ビットコンテナの１つのブリック）マルチプレクサを含んでもよい。入力ニューロンは、入力ブリックごとに１つ、１６のグループに構成された２５６の１６ビットレジスタに収集されてもよい。シャッフラ５１０が全ての１６のブリックを収集すると、それは、転移器５２０の入力レジスタにそれらを転移させてもよい。
【００４０】
図５に示される実施形態に従って、転移器５２０は、直列ビットストリームにシャッフラによってメモリから読み込まれたニューロンを変換してもよい。シャッフラ５１０が全ての１６のブリックを収集すると、それは、２５６の１６ビットレジスタにそれらをビットで並列に書き込んでもよい。各々のレジスタは、１６ビットのビット並列書き込みポート、及び単一ビットのビット直列読み込みポートを提供する。次のｐサイクルにわたって、転移器５２０は、サイクルごとの２５６ビットの合計に対し、ニューロンごとに１ビットを出力する。それらは、ビット並列システムと同様に、相互結合を使用して全てのＮＦＵにブロードキャストされる。
【００４１】
換算器
【００４２】
実施形態に従って、ビット直列システムのＮＦＵは、１６ビットの固定ポイントフォーマットで出力ニューロンを産出することができる。換算器ユニット６００は、１）出力層によって使用される精度に変換すること、及び２）第３のインタフェースを介してＮＭに出力ニューロンブリックを書き込むことの二重目的の役割を果たすことができる。実施形態に従って、第３のインタフェース（第１のインタフェースと同一のインタフェースであってもよい）を介してＮＭに出力ニューロンを再度書き込むことは、ビット並列システムにあるような同一のインタフェース又は相互結合を使用してもよい。相違は、ビット直列システムがビット並列システムよりも性能を上回るので、それは、より高い出力ニューロン帯域幅要求を示すことがあることである。幸いにも、出力ニューロンを計算することが完全な入力ニューロンウインドウを処理することを含むので、既存の相互結合によりこの要求を満たす十分な時間が存在する。例えば、ビット並列システムが単一の出力ニューロンブリック、又は１６の出力ニューロンを同時に（例えば、ｏＢ（ｘ，ｙ，ｆｉ））産出することができ、ビット直列システムは、ｘ次元に沿って連続した１６のブリック（例えば、ｏＢ（ｘ，ｙ，ｆｉ））〜ｏＢ（ｘ＋１５，ｙ，ｆｉ））を含む２５６の出力ニューロンのパレットを産出することができる。このパレットは、次の層を処理するとき、ディスパッチャによって予測することができるようにＮＭアドレス空間に継続的に記憶されてもよい。ビット直列タイルは、基準値にあるように一度に単一のブリックを送信してもよく、全ての１６を書き込むために複数のサイクルを要してもよい。タイルがサイクルごとに単一のブリックを書き込むことができ、ブリックがＮＭの行に及ばないことがあるので、調整されていないブリックの書き込みをサポートすることが必要とされないことがある。
【００４３】
ビット直列システムがビット並列システムよりも性能を上回る場合、その計算スループットが１６／ｐだけ増大される。層が相対的に小さい場合、原則として、全ての出力ニューロンのドレーンを行う（ｄｒａｉｎ）追加のサイクルが必要となる場合がある。しかしながら、基準値にあるときでさえ、出力ニューロンは典型的には、出力ニューロンを産出することが完全な入力ニューロンウインドウを処理することを含むことがあるので、計算される数百のサイクルを要することがある。したがって、出力ブリックを書き込む十分な時間が存在することがある。
【００４４】
実施形態に従って、ニューロンは、ビットでインタリーブされた方式でＮＭに記憶されてもよい。２５６の完全なニューロンを１つのアクセスで読み込み、次いで、ビット直列形式にそれらを転移させるのではなく、ニューロンの２５６のビットは、それらが２５６のニューロンのビット０であるビット並列インタフェースを使用して読み込まれてもよい。次のサイクルでは、全ての２５６のニューロンのビット１を読み込んでもよく、次いで、次のビットに続く。このケースでは、換算器は、適切な変換を行う。
【００４５】
完全結合層のための実行
【００４６】
ビット並列システムは、フィルタの次元が入力ニューロンアレイの次元に一致する畳み込み層として完全結合（ＦＣ）層を計算してもよい。このケースでは、ビット並列システムの性能に相当するための異なるデータアクセス及び実行スケジュールを有する１つのウインドウのみが存在してもよい。畳み込み層を処理するとき、シナプスは、ｐサイクルごとに１回のみ、第２のインタフェースを介して読み込まれてもよい。ＦＣ層を処理するために、ビット直列ユニットは、単一のＳＢ読み込みポート及びバスを介してサイクルごとに１つのＳＩＰ列にラウンドロビン形式でシナプスをロードしてもよく、ニューロンを処理する際に全てのＳＩＰをビジーのままにする。例えば、図３を参照して、ユニットは、サイクル０で２５６のシナプスをＳＩＰ（０，０）…ＳＩＰ（０，１５）にロードしてもよく、次いで、サイクル１で次の２５６のシナプスをＳＩＰ（０，０）…ＳＩＰ（０，１５）にロードしてもよい、などである。シナプスのロードは、シナプスのロードと同期するためにニューロンストリームをスタガする（ｓｔａｇｇｅｒｉｎｇ）ことによってニューロンを処理することと重なってもよい。
【００４７】
演算のこのモード（ラウンドロビンのシナプスのロード及びスタガされたニューロンストリーム）は、制御に対する修正を必要とすることがある。表１（真下）は、シナプスのロード及び計算が最初の１７のサイクルを処理するためにどのように重なるのかを例示する例を示す。
【表１】
2019522271.tif 000007
【００４８】
このアプローチは、バッチ処理（ｂａｔｃｈｉｎｇ）が使用されるときにＦＣ層についての性能を改善することができ、シナプスの帯域幅がボトルベックになるときに共通の方策を改善することができる。バッチ処理は、複数の画像にわたって各々の層を一度の計算し、それによって、シナプスを異なる画像からニューロンについて再使用することができる。このケースでは、ＳＩＰにロードされた各々のシナプスは、ｐ×ｂサイクルの間に使用されてもよく、ｂはバッチ処理のサイズである。
【００４９】
単一の画像を処理するときにビット並列システムに対する性能の改善があることがあり、又はないことがあり、ビット直列ＦＣ層においてより低い精度を使用することは、１６のサイクルごとに１６−ｐサイクルの間に各々のＳＩＰ列に対する計算を回避することによってエネルギーを削減することができる。代わりに、ｐのＳＩＰ列のみがその場合に使用されてもよく、他のＳＩＰは、トグルしないことによって電力を節約し、又は電力ゲーティング（ｐｏｗｅｒ  ｇａｔｉｎｇ）により完全にターンオフされる。実験的な結果は、平均して層のランタイムの０．１６％である、ニューロンストリームをスタガすることからの小さいオーバヘッドを示している。ＦＣ層を加速化するっことによって更に性能を改善する潜在性は、全体の実行時間のごく一部を考慮するので、非常に小さい可能性がある。更に、ＤＮＮにおける現在の傾向は、ＦＣ層の数を削減又は除去することである。
【００５０】
プーリング層
【００５１】
プーリング層について、ニューロンは、ＮＭからビットで並列に伝送され、ＳＩＰにおける加算器ツリーをバイパスする。ディスパッチャは、２５６のビット／サイクルにおいて直列データをブロードキャストするように設計され、プーリング層は、ニューロンがタイルにわたって分散されるにつれて４０９６のビット／サイクルを読み込む。最大プーリングは、ＳＩＰにおいて比較器によりサポートされる。平均プーリングは、ＳＩＰにニューロンを蓄積することによって、及び結果を拡張するために活性化ユニットを使用してサポートされる。局所的応答性正規化層は、ディスパッチャの制限された帯域幅に起因して内積ユニットを使用し、基準値性能に相当する間は直列されなくてもよい。
【００５２】
層ごとの精度の通信
【００５３】
この実施形態は、層ごとの精度が事前計算されてもよく、次元、パディング、及び各々の層のストライドなどのネットワークの他のメタデータに従って提供されてもよいことを想定する。層ごとの精度のいくつかの全プロファイルは、ランタイムにおける正確度対性能のトレードオフを可能にするためにＤＮＮに提供されてもよい。このメタデータ情報は、ビット直列コントローラによって読み込まれてもよく、ユニット、ディスパッチャ、及び換算器の演算を制御するために使用されてもよい。
【００５４】
ランタイムにおけるニューロングループごとの精度の判定
【００５５】
別の実施形態に従って、精度ｐは、同時に処理される２５６のニューロンのグループごとに動的に調節される。この判定は、処理のためにユニットにニューロンを通信する前に転移器によって実行される。ｉ＝０…２５５である、ユニット、ｎｉに送信される２５６のニューロンごとに、転移器は、１であるビットが現れる最高ビット位置ｎｉＨを判定するために、１検出器である先頭ビットを使用する。同様に、転移器は、１であるビットが現れる最低ビット位置ｎｉＬを判定するために、１検出器である最終ビットを使用する。ニューロンのこのセットについての精度ｐは、ｍａｘｉ＝０…２５５｛ｎｉＨ｝−ｍｉｎｉ＝０…２５５｛ｎｉＬ｝に効果的に設定される。それらのニューロンを処理するために、転移器はまた、追加の４つのワイヤのセットを介して、ビットに従ってそれらのオフセットを送信する。追加のワイヤは、ニューロングループを処理する最後を示す。したがって、精度を明確に計算する必要はない。実行者に公知な様々な先頭又は最終ビット１検出器回路が存在する。
【００５６】
ビット並列タイルへの比較
【００５７】
畳み込み層が高度に並列であるので、更なるタイルを追加することによる並列処理を利用することによって、ビット並列システムの性能を改善することが提案されている。以下の例に示されるように、ビット直列システムは、最大で２４％だけタイル領域を増大させることができる。理想的な性能のスケーリングを仮定して、比較のために、ビット並列システムに追加の２４％の更なるタイルを導入するためにこの追加領域を使用してもよい。実際に、全てのニューロンレーンをビジーのままにすることが可能でないことがあるように、理想的なスケーリングは可能でないことがある。例えば、ビット並列チップは、層に２５６の倍数のフィルタが存在する限り（１６のタイルの各々に１６のフィルタ）、完全に利用されてもよい。結果として、層に応じて、ユニットが十分に活用されず、更なるユニットを有することがそのようなケースをより一般的にするケースが存在する。
【００５８】
ビット並列性能がビット直列と同一の領域のオーバヘッドにより２４％だけスケーリングされてもよいことが最も起こり得る想定とするときでさえ、例は、ビット直列がなお、この代替例よりも性能を上回ることができ、よって、より良好な領域対性能のスケーリングをもたらすことができることを示す。更に、ビット直列アプローチは、ビット並列設計によっては可能でないことがある静的又はランタイムの性能対正確度のトレードオフを可能にすることができる。
【００５９】
分解可能なプロセシングユニットとの比較
【００６０】
換算された精度から性能を得るための一般的な現在のアプローチは、分解可能な乗算器及び加算器を使用することである。例えば、１６ビットの加算器は、最小のオーバヘッドにより２つの８ビットの加算器として容易に構成されてもよい。このアプローチは一般的に、汎用プロセッサのマルチメディア命令セットの拡張において使用される。これは各々の演算の待ち時間を増大させないので、それは、計算スループットを増大させるように使用されてもよい。
【００６１】
ニューラルネットワークの特性を考えると、分解可能なユニットは、それらにデメリットとなる３つの制約を有する。１）分解可能なユニットは典型的には、２の累乗に制約され、それらが変動する換算された精度の潜在的な利点のすべてを得ることができないわけではないことを意味する。例えば、９ビットのみを必要とする層は、１６ビット（２４）を使用する。２）分解可能なユニットは、両方の入力が同一の幅であることを必要とする。ニューラルネットワークのケースでは、それらは重み及びニューロンであり、重みは典型的には、８ビットよりも多いビットを必要とし、結果として、多くの層が改善を見ないことがある。３）最後に、基準値乗算器及び加算器ツリーが分解可能であった場合、データ及び重みの最大精度は、層ごとに選択される必要があることがある。例は、ビット直列が理想とされた分解可能なユニットに基づくビット並列設計よりも性能を上回ることができることを証明している。
【００６２】
例
【００６３】
このセクションは、層ごとの精度プロファイルの利用戦略及び実験的な手順を説明する。数値表現要件分析について、最良の層ごとの精度プロファイルは、Ｊｕｄｄ  ｅｔ  ａｌ．［Ｐ．Ｊｕｄｄ，Ｊ．Ａｌｂｅｒｉｃｉｏ，Ｔ．Ｈｅｔｈｅｒｉｎｇｔｏｎ，Ｔ．Ａａｍｏｄｔ，Ｎ．Ｅ．Ｊｅｒｇｅｒ，Ｒ．Ｕｒｔａｓｕｎ，ａｎｄ Ａ．Ｍｏｓｈｏｖｏｓ，“Ｒｅｄｕｃｅｄ−Ｐｒｅｃｉｓｉｏｎ  Ｓｔｒａｔｅｇｉｅｓ  ｆｏｒ  Ｂｏｕｎｄｅｄ  Ｍｅｍｏｒｙ  ｉｎ  Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｓ，ａｒＸｉｖ：１５１１．０５２３６ｖ４［ｃｓ．ＬＧ］，”  ａｒＸｉｖ．ｏｒｇ，２０１５］の手順を介して発見される。Ｃａｆｆｅは、各々の畳み込み層の精度を換算することが、５０００の画像にわたってネットワークの全体の最上位の予測の正確度にどのように影響し、すなわち、ネットワークが正確に入力をどの程度分類しているかを測定するために使用されている。ネットワーク定義及び事前に訓練されたシナプス重みは、Ｃａｆｆｅ  Ｍｏｄｅｌ  Ｚｏｏから取得される。
【００６４】
Ｊｕｄｄらは、Ｉ≧０の整数及びＦ≧０のわずかなビットを有するとして固定されたポイント数を考えており、この例は、二値ポイントに対するＭＳＢのビット位置Ｍ、及びビットの数Ｎとして数をパラメータ化することによってより下位の桁の整数ビットのいくつかをドロップさせることがある。これは、層ごと及び複数の層ごとのＭ，Ｎ∈［０，１６］による指数関数的な探索空間の問題である。ヒューリスティックな探索空間刈込みアプローチは、１）傾斜降下を使用して層ごとの最良のＭのプロファイルを発見し、一度に１つの層に１ビットだけＭを繰り返し削減し、２）固定されたＭのプロファイルを仮定して、傾斜降下を再度使用して、Ｎのプロファイルの空間を利用することであった。両方のステップでは、層ごとの分析は、良好な開始ポイントを判定するために使用される。
【００６５】
表２（真下）は、基準値（１００％）にあるのと同一の正確度を維持し、基準値（９９％）の１％内でそれを換算するために必要な畳み込み層ごとのニューロン精度プロファイルを一覧にしている。Ｃｎｖ：基準値システムにおいて畳み込み層によって要される実行時間のごく一部。Ｉｄｅａｌ：ビット直列ＤＮＮによる潜在的な加速化。
【表２】
2019522271.tif 000008
【００６６】
性能、領域、及びエネルギーについて、ビット並列システム及びビット直列システムの両方が一貫性のために同一の手順を使用してモデル化されている。カスタムサイクル正確加速シミュレータは、実行時間をモデル化する。計算は、Ｃｈｅｎらによって説明されるようにスケジュールされている。指数（ｐｏｗｅｒ）及び領域（ａｒｅａ）は、シナプス設計コンパイラ及びＴＳＭＣ  ６５ｎｍライブラリを介して合成されたＶｅｒｉｌｏｇの実装態様から抽出されている。ＮＢｉｎ及びＮＢｏｕｔ  ＳＲＡＭバッファは、ＣＡＣＴＩを使用してモデル化されている。ｅＤＲＡＭ領域及びエネルギーは、Ｄｅｓｔｉｎｙによりモデル化されている。単一の実行及びバッチ処理の実行の両方（複数の画像について同時に計算された各々の層）が実行される。バッチ処理のサイズは、他の場合、性能及びエネルギーを厳しく不利にするニューロンオフチップを漏らすことを回避するように選択される。測定はネットワーク実行全体にわたって行われる。
【００６７】
性能測定
【００６８】
図７は、表２における精度プロファイルについてのビット並列に対するビット直列性能を報告する。バッチ処理は、ビット並列又はビット直列のいずれかにおいて性能に影響を与えないので、報告される結果は、両方に適用可能である。正確度が損失しない１００％プロファイルについて、ビット直列は平均して、ビット並列にわたって２．２４×  の加速化を得る。各々の層において精度の３ビットのみを必要とする最良のケース、ＬｅＮｅｔでは、加速化は５．３３×であり、ＮｉＮ及びＶＧＧ１９は、それらの高精度の要件にほとんど起因して、最小の加速化、１．８×及び１．３５×をそれぞれ示す。概して、性能改善は、精度における換算に従い、表２における理想的な加速化に一致する。差異は、最悪なケースで７％（ＮｉＮ）である、ニューロンレーンのあまり活用されていないことに起因する。平均して、ビット直列は、理想の２％内である加速化を達成する。
【００６９】
領域のオーバヘッド
【００７０】
全チップにわたって、ビット直列は、その中から１％がディスパッチャについてのものであるビット並列よりも２２％多い領域を必要とする。各々のタイルを単独で考え、ＮＢｏｕｔのエントリ、換算器、及びＳＩＰにおいて１６×の増大を考慮すると、ビット直列は、２４％だけ領域を増大させる。ビット直列におけるタイルごとの２５６のＳＩＰは、２５６の乗算器のビット並列の組み合わせ及び１６の加算器ツリーの単独と比較して、１３９％だけ領域を増大させ、ＳＢは、タイルごとにはるかに低く、チップ領域全体のオーバヘッドをもたらすタイル領域を支配する。
【００７１】
エネルギー効率測定
【００７２】
図８は、単一及びバッチ処理モードの下でビット直列及びビット並列のエネルギー効率を比較する。エネルギー効率、又は単純に基準に対して新しいシステムについての効率は、新しいそれを通じて稼働する完全なネットワークを完了するために、基準によって必要とされるエネルギーの比率Ｅｂａｓｅ／Ｅｎｅｗとして定義される。全てのケースにわたって直接の比較を促進するために、図８で報告される全ての効率測定における分子として単一のモードにおいてビット並列のエネルギーを使用する。
【００７３】
単一のモードに焦点を当てると、１００％のプロファイルについての全てのネットワークにわたるビット直列による平均効率改善は、３×であり、最良のケース（ＬｅＮｅｔ）での６×から最悪のケース（ＶＧＧ１９）での１．９２×の範囲にわたる。二次オーバヘッドを無視して、エネルギー節約が主としてより少ないニューロンビットを処理することから導出されるので、効率は主として、層ごとの精度長における換算に依存する。第二に、エネルギー節約は、ビット直列がｐサイクルごとのみに発生するＳＢアクセスの数を削減することから来る。ビット直列において複数のウインドウにわたってシナプスの再使用によって動機付けられると、ビット直列と同様に複数のウインドウの処理をインタリーブするビット並列についての改善された処理スケジュールを評価している。「ＢＡＳＥＷＴ」の棒は、元々提案されたスケジュールよりも効率的であるが、なお、ビット直列よりも効率的でないことを証明するこのウインドウタイリングアプローチのエネルギー効率を報告する。
【００７４】
シナプスが複数の画像にわたって再使用されるにつれて、バッチ処理は、ビット並列及びビット直列の両方についてエネルギー効率を改善し、よって、ＳＢ読み込みはあまり頻繁でない。しかしながら、ビット直列においてより少ないニューロンビットを処理することからの利点は、シナプスの再使用からのそれらをはるかに上回る。バッチ処理モードにおけるビット直列についての平均エネルギー効率は、３．１９×であり、ビット並列はなお、その単一のモードにわたって１．４×の効率によりビット直列よりも効率的でない。ビット並列におけるウインドウタイリングは、２．０３×だけ効率を改善する。ウインドウタイリングがＮＭのサイズによって制限されないので、それは、ビット並列におけるバッチ処理と比較して、より大きなエネルギー節約を可能にする。
【００７５】
正確度対性能
【００７６】
いくつかの実施形態では、ビット直列ＤＮＮは更に、静的且つオンザフライのエネルギー、性能、及び正確度のトレードオフを可能にする。例えば、精度を換算することによって、アプリケーションは、改善された性能及びエネルギー効率と引き換えに正確度を換算することを選択してもよい。この能力は、例えば、１）ユーザ又はオペレーティングシステムがより長い動作時間と引き換えにわずかに換算された正確度を選ぶことができるバッテリ動作デバイス上で、又は２）アプリケーションが正確度は劣るが応答性が時機にかなっていることを選ぶことができる厳密な時間制約の下で有益である。
【００７７】
この例は、ネットワーク正確度の全体に影響を与え始めるポイントに精度を低下させることによって性能を改善するための適切な計算アプローチを考える。直列計算及び層ごとのニューロン精度を使用して、ビット直列は、能力が正確度及び性能のトレードオフを微細に調整することを可能にする。性能が、バッチ処理又は単一のモードが使用されるかどうかに依存しないので、残りのセクションにおける結果は、いずれかの処理モードに適用可能である。
【００７８】
図９は、ネットワーク正確度と加速化との間のトレードオフを示す。グラフは、ビット並列にわたって正規化するよりも明確に性能対正確度のトレードオフを示すために、図７の１００％の構成に対する性能をプロットしている。グラフにおける各々のポイントは、正確度対性能のＰａｒｅｔｏ境界上の精度プロファイルに対応する。正確度が９０％を下回って急速に降下するので、注意は、基準値に対する９０％の正確度を上回るプロファイルに制限される。全てのケースでは、追加の性能改善は、換算された正確度により可能であり、ネットワークは、急激な性能損失を引き起こす過去の正確度対性能曲線における曲がりを示す。このセクションの残りは以下で、最大で１％の正確度の損失が許容可能であるときに可能な性能改善に焦点を当てる。
【００７９】
図１０は、ビット並列に対する表２からの９９％の精度プロファイルの加速化を示す。予測誤差に対して最大で１％を許容することによって、平均加速化は２．４８×まで増大し、１１％の漸増の加速化である。個々のネットワークについての加速化は、ＶＧＧ１９についての１．５６×からＬｅＮｅｔについての７．２３×までの範囲にわたり、精度長における換算に全体的に従う。正確度の制約が緩くなるとき、ＮｉＮは、各々の層におけるはるかに小さい精度を使用することが可能なように最も有益となる。図８との比較は、９９％の精度プロファイルについての効率を示す。平均して、効率は、３．２４×まで増大する。
【００８０】
ＬｅＮｅｔについての９９％のプロファイルにより、ビット直列は、失速したディスパッチャのインスタンスのみに直面する。このケースでは、このケースでは、第１の層の精度は２ビットであり、よって、バッファは２サイクルにおいてドレーンされる。ＮＭ内のウインドウデータのいくつかのセットについて、ディスパッチャは、データを読み込むために２サイクルよりも多くのサイクルを必要とし、ディスパッチャを失速させる。しかしながら、この状況は一般的でなく、合計ランタイムの２％の間の失速を生じさせるにすぎない。全ての他のケースでは、ビット直列は、直列データを継続的に発信することが可能である。
【００８１】
分解可能な計算ユニット
【００８２】
これは、ビット直列を、上記説明され、全ての２の累乗の表現の長さを最大で１６までサポートするビット並列の理想的な分解可能な分散と比較する。この比較のために、ＮＦＵの利用がビット並列における全ての精度について同一であることが想定され、例えば、１６ビットにおいて２５６の乗算を実行する層は、８ビットにおいて５１２の乗算を実行する。実際に、利用は、ビット並列により課される調節の制約に起因していくつかの層に対して最悪である。
【００８３】
図１１は、ビット直列及び理想的なビット並列によって達成される加速化を比較する。正確度の損失がないことにより、ビット並列は、平均してビット直列について１．９９×に対して１．１３×の加速化を達成し、最大で１％の正確度の損失が許容されているとき、ビット並列の平均加速化は、ビット直列について２．１８×に対して１．２７×である。ビット並列はまた、各々の層の精度が２の累乗であり、ニューロン及びシナプスの両方に対して同一であるプロファイルに制限される。ビット並列のサイズの制約は、理想的な想定の下でさえ、ビット直列と比較してその性能の利点を厳格に制限する。
【００８４】
完全結合層の代替的な処理
【００８５】
別の実施形態では、性能及びエネルギー効率を改善すると共に、領域における追加のコストのみで、畳み込み層だけでなく、完全結合層をも処理することが可能である。
【００８６】
この実施形態では、タイル１２００内の各々のＳＩＰ２７０ａが、図１２に示される１６の１６ビットのサブレジスタのベクトルである追加の直列重みレジスタ、ＳＷＲ１２１０によりここで増補される。重みレジスタ、ＷＲ１２２０と称されるＳＩＰ２７０ａが既存のレジスタを維持するので、畳み込み層の処理がこれまでのように続行する。ＳＷＲ１２１０は、同時に処理されたシナプス及びニューロンのグループごとにｍａｘ（Ｐｓ，Ｐａ）サイクルにおける完全結合層の処理を可能にし、Ｐｓ及びＰａはそれぞれ、シナプスの精度及び活性化の精度である。したがって、１６ビットのビット並列エンジンと比較した性能改善は、１６／ｍａｘ（Ｐｓ，Ｐａ）である。元の設計では、同一の行全てに沿ったＳＩＰ２７０は、同一の２５６の線（ｗｉｒｅ）を共有し、全ての１６のＷＲへの１６の１６ビットの重みの同一のセットの並列ローディングを可能にする。この実施形態では、２５６の線の各々は、１６×１６のＳＷＲサブレジスタのうちの１つに結合される。したがって、サイクルごとに、１６×１６＝２５６のＳＷＲサブレジスタの各々に異なるビットをロードすることができる。Ｐｓサイクルにわたって、２５６のＳＷＲサブレジスタにＰｓビットの異なるシナプスをロードすることができる。それらの２５６のシナプス値は次いで、対応するＷＲサブレジスタに並列にロードされてもよく、次いで、対応するニューロンによりこれまでのようにビットで直列に処理されてもよい。よって、この実施形態は、３段階パイプラインを使用し、最初に重みがＳＷＲ１２１０にビットで直列にロードされ、次いで、ＷＲ１２２０に並列にロードされ、次いで、ニューロンとビットで直列に乗算される。
【００８７】
図１３は、この実施形態についての例示的なＳＩＰ２７０ａを示す。各々のＳＩＰ２７０ａは、出力活性化を産出するために、活性化ごとに１ビットの、１６の活性化ビットを１６の重みと乗算する。各々のＳＩＰ２７０ａは、２つのレジスタ、ＳＷＲ１２１０及びＷＲ１２２０を有し、各々は、１６の１６ビットのサブレジスタを含む。各々のＳＷＲサブレジスタ１２１２は、完全結合層について重みをビットで直列に読み込むために使用される重みバス線のうちの１つへの単一のビット結合１２１３によるシフトレジスタである。各々のＷＲサブレジスタ２２２２は、畳み込み層又は完全結合層をそれぞれ処理するために、重みバス又は対応するＳＷＲサブレジスタ１２１２のいずれから並列にロードされてもよい。各々のＳＩＰ２７０ａは、ＷＲ１２２０内の重みを入ってくる活性化ビット１３２０と乗算する２５６の２入力ＡＮＤゲート１３１０、並びに部分積を合計する１６×１６ビットの加算器ツリー１３３０を含む。最終的な加算器１３４０にシフタ１３５０を加えたものは、出力レジスタＯＲに加算器ツリーの結果を蓄積する。
【００８８】
各々のＳＩＰ２７０ａでは、加算器ツリー１３３０の第１の入力におけるマルチプレクサ１３２７は、単一の行のＳＩＰに従って出力活性化計算をスライシングすることをサポートする直列モードを実施する。符号付きの２の補数ニューロンをサポートするために、ＳＩＰ２７０ａは、最上位ビット（ＭＳＢ）が１であるときに、部分和からＭＳＢに対応する重みを減算することができる。これは、加算器ツリーの前に重みごとに否定ブロック１３２５により行われる。各々のＳＩＰ２７０ａはまた、最大プーリング層をサポートする比較器（最大）１３６０を含む。
【００８９】
以下の例は、２つの意図的な些細なケース、１）２つの出力活性化を産出する単一の入力活性化を有する完全結合層、並びに２）２つの入力活性化及び２つの出力活性化を産出する１つの単一の重みフィルタを有する畳み込み層、をそれがどのように処理するかを示すことによって、実施形態が作用する方法を高レベルにおいて例示する。層ごとの計算は、
【表３】
2019522271.tif 000009
である。
【００９０】
ｆ１、ｆ２、ｃ１、及びｃ２は、出力活性化であり、ｗ１、ｗ２、及びｗは、重みであり、ａ１、ａ２、及びａは、入力活性化である。明確にするために、全ての値は、精度の２ビットにおいて表されると仮定する。
【００９１】
従来のビット並列処理
【００９２】
図１４Ａ〜１４Ｃは、２つのサイクルにわたって畳み込み層を処理するビット並列エンジンを示す。図１４Ａは、ＤａＤＮを表す従来技術のビット並列処理エンジンを示す。サイクルごとに、エンジンは、２つの２ビット入力、ｉ（重み）及びｖ（活性化）の積を計算することができ、出力レジスタＯＲにそれを蓄積又は記憶することができる。図１４Ｂ及び１４Ｃは、このユニットが２つのサイクルにわたって例示的なＣＶＬをどのように計算することができるかを示す。図１４Ｂでは、サイクル１の間、ユニットは、ｖに沿ってａ０の入力ビット０及び１（図ではａ１／０及びａ１／１とそれぞれ表記される）を受け付け、ｉに沿ってｗの入力ビット０及び１を受け付け、出力ｃ１の両方ビットを産出する。同様に、サイクル２（図１４Ｃ）の間、ユニットは、ｃ２を産出するためにａ２及びｗを処理する。合計で、２つのサイクルにわたって、エンジンは、２つの２ｂ×２ｂの積を産出している。例示的なＦＣＬを処理することは、２つのサイクルを要する。第１のサイクルでは、ｗ１そしてｆ１を産出し、第２のサイクルでは、ｗ２そしてｆ２を産出する。
【００９３】
ビット直列処理
【００９４】
図１５Ａ〜１５Ｄは、エンジンの実施形態が例示的な畳み込み層をどのように処理するかを示す。この実施形態は、完全畳み込み層についてＤａＤＮを通じて性能を改善するように示される。図１５Ａは、２つのサブユニットを含むエンジンの構造を示す。２つのサブユニットは、入力ｖ０及びｖ１それぞれを通じてサイクルごとに活性化の各々の１ビットを受け付け、これまでのように、共通の２ビットの重み入力（ｉ１，ｉ０）が存在する。合計して、入力ビットの数は４であり、ビット並列エンジンにおけるのと同一である。各々のサブユニットは、３つの２ビットのレジスタ、シフトレジスタＡＲ、並列ロードレジスタＢＲ、及び並列ロード出力レジスタＯＲを含む。サイクルごとに、各々のサブユニットは、それがそのＯＲに書き込み又は蓄積することができるＢＲにより、その単一のビットｖｉ入力の積を計算することができる。サブユニットがサイクルごとに単一の活性化ビットを処理するので、ビット並列乗算器が存在しない。代わりに、２つのＡＮＤゲート、シフト及び加算機能ユニット、及びＯＲは、シフト及び加算乗算器／積算器を形成する。各々のＡＲは、ｉ線のうちの１つからサイクルごとに単一のビットをロードすることができ、ＢＲは、ＡＲから又はｉ線から並列にロードされてもよい。
【００９５】
図１５Ｂ〜１５Ｄは、実施形態が畳み込み層をどのように処理するかを示す。図は、レジスタの内容のみを示すユニットの詳細を要約している。図１５Ｂが示すように、サイクル１の間、ｗシナプスは、ｉ１及びｉ０入力を介して両方のサブユニットのＢＲに並列にロードされる。サイクル２の間、ａ１のビット０及びａ２のビット０は、第１のサブユニット及び第２のサブユニットにそれぞれ、ｖ０及びｖ１入力を介して送信される。サブユニットは、ａ１／０×ｗ及びａ２／０×ｗを同時に計算し、それらのＯＲにそれらの結果を蓄積する。最後に、サイクル３では、ａ１及びａ２のビット１はそれぞれ、ｖ０及びｖ１上に現れる。サブユニットは、それらのＯＲに最終的な出力活性化ｃ１及びｃ２を蓄積するａ１／１×ｗ及びａ２／１×ｗをそれぞれ計算する。
【００９６】
合計して、層を処理するために３つのサイクルを要する。しかしながら、第３のサイクルの終わりに、別のｗがＢＲにロードされていることがあり（ｉの入力がアイドルである）、出力の新たなセットがサイクル４の間に計算を開始することを可能にする。すなわち、新たな重みをロードすることは、最初の時間を除き、現在の出力活性化の処理の間に隠蔽されることがある。定常状態では、入力活性化が２つのビットで表されるとき、このエンジンは、２つのサイクルごとに２つの２ｂ×２ｂ項を産出しており、よって、ビット並列エンジンの帯域幅に相当する。
【００９７】
活性化ａ１及びａ２がちょうど１ビットで表される場合、このエンジンは次いで、サイクルごとに２つの出力活性化を産出しており、ビット並列エンジンの帯域幅の２倍である。後者は、実行時間を減少させるための換算された精度を利用することが不可能である。概して、ビット並列ハードウェアが活性化を表すためにＰｂａｓｅビットを使用しており、ＰＬａビットのみが十分であった場合、この実施形態は、Ｐｂａｓｅ／ＰＬａだけビット並列エンジンよりも性能を上回る。
【００９８】
図１６Ａ〜１６Ｅは、ユニットの実施形態が例示的な完全結合層をどのように処理するかを示す。図１６Ａは、サイクル１では、ｗ１のビット１及びｗ２のビット１がラインｉ１及びｉ０上でそれぞれ現れることを示す。左サブユニットのＡＲは、ｉ１に結合され、右サブユニットのＡＲは、ｉ０に結合される。ＡＲは、空いた位置に拡張符号化する（例では０として示される）それらの最下位ビットに対応するビットをシフトインする。サイクル２の間、図１６Ｂが示すように、ｗ１のビット０及びｗ２のビット０は、それぞれのｉライン上に現れ、それぞれのＡＲがそれらをシフトインする。サイクルの終わりに、左サブユニットのＡＲは、完全な２ビットｗ１を含み、右サブユニットのＡＲは、完全な２ビットｗ２を含む。サイクル３では、図１６Ｃは、各々のサブユニットがそのＢＲにＡＲの内容を複製することを示す。次のサイクルから、積を計算することが、ＣＶＬについて行われたのと同様にここで続行することができる。しかしながら、このケースでは、各々のＢＲは、異なる重みを含むが、前のセクションにおいてＣＶＬを処理するとき、全てのＢＲが同一のｗ値を保持している。異なるｉ線に結合する各々のサブユニットに結合されたＡＲのシフト能力は、ＴＲＴが２つのサイクルにわたって異なる重みをビットで直列にロードすることを可能にしている。図１６Ｄ及び図１６Ｅは、サイクル４及び５をそれぞれ示す。サイクル４の間、ａ１のビット０は、両方のｖ入力上で現れ、各々のサブユニットにおいてＢＲと乗算される。サイクル５では、ａ１のビット１は、両方のｖ入力上で現れ、サブユニットは、ｆ１及びｆ２の計算を完了する。正確な入力がＢＲに現れると、２つの２ｂ×２ｂの積を産出するために２つのサイクルを要する。
【００９９】
例では、追加の入力も出力も示されないが、ＢＲに記憶された現在の重みを処理している間、ＡＲに入力の新たなセットをロードすることが重なる可能性があった。すなわち、ＡＲにロードすること、ＢＲに複製すること、及び活性化とのＢＲのビット直列乗算は、各々の段階が複数のサイクルを要することがある３段階パイプラインである。概して、活性化及び重みの両方が２ビットを使用して表されると仮定して、このエンジンは、定常状態ではビット並列エンジンの性能に相当する。入力ｉ及びｖの両方のセットをより少ないビット（例では１）により表すことができるとき、エンジンは、サイクルごとに２つの項を産出し、前のセクションのビット並列エンジンの帯域幅の２倍である。
【０１００】
概して、ビット並列エンジンの精度Ｐｂａｓｅ、並びに活性化及び層Ｌについての重みについてそれぞれ使用することができる精度ＰＬａ及びＰＬｗである場合、実施形態に従ったエンジンは、理想的には、畳み込み層についてＰｂａｓｅ／ＰＬａ及び完全結合層についてＰｂａｓｅ／ｍａｘ（ＰＬａ，ＰＬｗ）だけ同等のビット並列エンジンよりも性能を上回ることができる。
【０１０１】
上記例は、最も簡易化されたエンジン構成を使用している。典型的な層が大規模な並列処理を示すので、エンジンは、畳み込み層についての重みの再使用及び完全結合層についての活性化の再使用を利用する間、更に多くのサブユニットにより構成されてもよい。
【０１０２】
同時の活性化ビット
【０１０３】
領域及び電力効率を改善するために、同時に処理される活性化ビットの数は、設計時間において調節されてもよい。そのような構成の根本的な利点は、同一のスループットを達成するためにより少ないＳＩＰが必要とされること、例えば、２つの活性化ビットを同時に処理することは、ＳＩＰ列の数を１６から８に削減し、それらの合計数を半分に削減することである。バス線の合計数が同様であるが、それらがカバーする必要がある距離は、著しく減少する。同様に、加算器の合計数は同様なままであるが、それらは、ともに近くにクラスタ化される。それらの構成の欠点は、それらがサイクルごとに処理するビットの数の倍数に活性化ビットをさせるにつれて、それらが潜在的な性能の一部を差し控えることである。設計者は、それらの領域、エネルギー効率、及び性能ターゲットを最良に満たす構成を選択することができる。それらの構成では、重みは、いくつかの活性化ビットと同時に乗算され、乗算結果がそれらの対応する加算器ツリーに挿入される前に部分的にシフトされる。
【０１０４】
重みを時間通りにロードするために、ＳＷＲサブレジスタ１２１２が修正される必要があり、よって、いくつかのビットを並列にロードすることができ、サイクルごとにその数の位置をシフトすることができる。否定ブロック１３２５（２の補数がサポートするための）は、最上位の積の結果のみに対して機能する。
【０１０５】
評価
【０１０６】
図１７は、畳み込み層及び完全結合層についての様々な画像分類ディープラーニングネットワークについての許容可能な層ごとの精度のセットを報告している。表は、正確度を維持する間（「１００％の正確度」）に使用することができる換算された精度、及び正確度における１％の関連する換算が許容可能である場合に使用することができる更なる換算された精度のセットを報告している。列「理想的な加速化」は、同等に構成されるビット並列の従来のエンジンに対して可能な性能改善を報告している。
【０１０７】
図１８は、完全結合及び畳み込み層について、並びに「１００％」及び「９９％」の関連の相対的な正確度精度構成について、ＤａＤｉａｎＮａｏに対するこの実施形態の実行時間性能（「Ｐｅｒｆ」列）及び相対的なエネルギー効率（「Ｅｆｆ」列）を報告している。図１９は、サイクルごとに２つの活性化ビットを処理する実施形態の相対的性能を報告している。測定値の２つのセットは、１）ＤａＤｉａｎＮａｏに対して、及び２）図１８の表のビット直列構成に対して報告される。結果のこのセットは、「１００％」の精度構成を使用する。
【０１０８】
ランタイムにおけるニューロングループごとの精度の判定
【０１０９】
前の説明した加速器は、性能及びエネルギー効率を改善するためにディープラーニングニューラルネットワークの可変的な精度要件を利用している。前の説明した設計では、ハードウェアは、各々の層を処理する前に、その層によって必要とされる精度がソフトウェアによって通信されることを予期する。よって、それらの層ごとの精度は、各々の層について、又はより小さい粒度においてでさえ可能となる場合がある精度におけるいずれかの追加の換算を反映するようにランタイムにおいて調節されていない。しかしながら、内在する計算ユニットは、層よりもはるかに微細な粒度で精度を利用することが可能である。説明される実装態様では、各々のチップは１６のタイルを含んでおり、各々が１６のフィルタ及びフィルタごとに１６の重み（シナプス）を処理する。２５６の活性化のセットは、サイクルごとに１ビット、全てのタイルにブロードキャストされている。層ごとに、活性化の精度、すなわち、最上位ビットの位置及び最下位ビットの位置（ＭＳＢ及びＬＳＢそれぞれ）、ｎＨ及びｎＬは、層ごとに調節されている。しかしながら、精度は、より低い粒度で容易に適合されてもよい。例えば、精度は、所望の実装態様において、同時に処理される２５６の活性化のグループごと、又はＳＩＰの同一の列にブロードキャストされる１６の活性化のグループごとに調節されてもよい。更なる実施形態に従って、両方ではなく最上位ビット又は最下位ビットのいずれかに対して精度を調節することが可能である。これは、性能及びエネルギー効率の何らかの改善をなおももたらすが、両方に対して同程度に精度を調節しない。
【０１１０】
別の実施形態に従って、精度ｐは、同時に処理される２５６のニューロンのグループごとに動的に調節される。この判定は、処理のためにユニットにニューロンを通信する前に転移器によって実行される。ｉ＝０…２５５であるユニットに送信される２５６のニューロンｎｉごとに、及び各々のビットｎｉｂｊｊ＝０…１６ごとに、且つ全てのニューロンが正であると仮定して、転移器は、同一の位置における全てのビットの論理ＯＲを最初に計算し、ＯＲｊ＝ｎ０ｂｊ＋…＋ｎ２５５ｂｊであり、次いで、１であるビットが現れる最高ビット位置ｎＨを判定するために、ＯＲｊ，ｊ＝０…１６にわたる１検出器である先頭ビットを適用する。同様に、転移器は、１であるビットが現れる最低ビット位置ｎＬを判定するために、１検出器である最終ビットを使用する。それらのニューロンを処理するために、転移器は、追加の４線のセットを介してビットに従ってそれらのオフセットも送信する。追加の線は、ニューロングループを処理する最後を示す。ｎＨのビット位置において処理が開始すると仮定して、カウンタは、ブロードキャストされている現在のビット位置を保持し、比較器は、ユニットがｎＬに到達するときにグループ信号の終わりを設定する。
【０１１１】
ｎＨ及びｎＬの検出は、１６のニューロンのグループなど、ニューロンのサブグループごとに別個に行われる。図２０は、そのような実施形態を示し、そこでは、各々が８ビットの基準値精度を有する４つのニューロングループが同時に処理される。図２０は、菱形として示される直列ＯＲゲートのセットを使用してＯＲｊを計算するネットワーク、及びｎＨ検出ブロックにオフセットエンコーダを加えたものを示す。ｎＬ検出は、予約されたＯＲｊ入力の優先度が高いｎＨブロックと同一のブロックを使用する。図は、ニューロン値のセットについてｎＨ及びｎＬを検出する例を示す。入力ニューロンが８ビットを使用するので、２つのオフセットは、各々で３ビットを使用して符号化される。ニューロンのこのグループを処理するために、ディスパッチャは、開始オフセットとしてｎＨを送信する。ユニットは、後続のサイクルごとにこのオフセットをデクリメントする。ディスパッチャは、現在のオフセットがｎＬに等しくなるときにこのグループについての処理の最後のサイクルをシグナリングする。ビット位置ｎＨにおいて処理が開始すると仮定して、カウンタは、ブロードキャストされている現在のビット位置を保持し、比較器は、ｎＬに到達するときにグループ信号の終わりを設定する。ニューロンのグループが処理されると、対応するニューロンレーンは、ニューロン値の次のグループに進む前に終了するように、全ての他のニューロンレーンを待つように作成されてもよい。代わりに、ディスパッチャ及びシナプスバッファは、追加の領域及びメモリ帯域幅を犠牲にして、ニューロングループごとのアクセスをサポートするように修正されてもよい。
【０１１２】
精度の動的検出は、電力ゲーティングが使用される場合、電力処理時間を減少させ、完全結合層についてのエネルギー効率及び畳み込み層についてのエネルギー効率を改善することができる重みにも適用されてもよい。
【０１１３】
性能の評価
【０１１４】
ＤａＤｉａｎＮａｏと比較したこの実施形態の実行時間性能は、ＡｌｅｘＮｅｔ、ＮｉＮ、ＧｏｏｇＬｅＮｅｔ、ＶＧＧ＿２、ＶＧＧＳ、ＶＧＧ１９について、及び平均して、それぞれ２．８×、２．４×、２．６×、３．２×、３．３×、１．７×、及び２．６×である。
【０１１５】
シナプス及びニューロンのビット直列処理
【０１１６】
別の実施形態は、ニューロンだけでなくシナプスをもビットで直列に処理することによって性能を改善する。この実施形態における性能は、畳み込み層について２５６／（Ｐｓ×Ｐａ）だけ、及び完全結合層について１６／Ｐｓだけ改善し、Ｐｓ及びＰａは、それぞれシナプスの精度及びニューロンの精度である。
【０１１７】
実施形態に従って、図２１は、１２８×１６のグリッドにおいて構成された２Ｋの直列内積ユニット（ＳＩＰ）２７０ｂを含むタイル２１００を示す。このタイル２１００は、少なくとも、１６のニューロン及び８のフィルタと共に、フィルタごとに１６のシナプスに対して同時にビット並列タイル処理を常に実行するように設計される。サイクルごとに、各々のＳＩＰ２７０ｂは、１６の１ビットの入力活性化を１６の１ビットの重みと乗算し、部分出力活性化にそれらの積を換算する。同一の行に沿ったＳＩＰ２７０ｂは、共通の１６ビットの重みバスを共有し、同一の列に沿ったＳＩＰ２７０ｂは、共通の１６ビットの活性化バス２１８０を共有する。各々のＳＩＰ２７０ｂは、１６ビットの重みレジスタＷＲ２１２２を有する。ＳＩＰアレイは、２Ｋビットの重みバス及び２５６ビットの活性化入力バスによってフィードされる。タイル２１００は、出力及び入力活性化（ニューロン）をそれぞれ記憶するためのＡＢｏｕｔ２１３０及びＡＢｉｎ２１２０を有する。タイル２１００は、活性化及び重みの両方をビットで直列に処理する。
【０１１８】
畳み込み層を処理することは、オフチップメモリ２１１０から２Ｋの重みビットを並列に読み込み、ＳＩＰ行ごとに全てのＷＲ２１２２に１６ビットをロードすることによって開始する。ロードされた重みは、ＰａＬサイクルわたってＳＩＰ列ごとに１６の対応する活性化ビットとビットで直列に乗算され、ＰａＬは、この層Ｌについての活性化精度である。次いで、ＰａＬサイクルの後、重みの第２のビットは、ＷＲ２１２２にロードされ、ＳＩＰ行ごとに１６の対応する活性化ビットの、第１のＰａＬサイクルにおけるものとの同一のセットと乗算される、などである。合計して、ビット直列乗算は、ＰａＬ×ＰｗＬサイクルを要し、ＰｗＬは、この層Ｌについての重み精度である。ビット並列エンジンは、２５６のサイクルにわたって１６の活性化及び１２８のフィルタの１６のセットを処理し、この実施形態は、ＰａＬ×ＰｗＬサイクルにわたってそれらを同時であるがビットで直列に処理する。ＰａＬ及び／又はＰｗＬは、１６未満である場合、この実施形態は、２５６／（ＰａＬ×ＰｗＬ）だけビット並列エンジンよりも性能を上回る。そうでない場合、この実施形態は、ビット並列エンジンの性能に相当することができる。
【０１１９】
完全結合層を処理することは、第１のＳＩＰ列のＷＲレジスタ２１２２に重みのセットのＬＳＢ（最下位ビット）をロードし、ロードされた重みを対応する活性化のＬＳＢと乗算することによって開始する。第２のサイクルでは、ＳＩＰの第１の列が、そのＷＲ２１２２のＬＳＢを活性化の第２のビットと乗算することでなおもビジーである間、重みの新たなセットのＬＳＢは、第２のＳＩＰ列のＷＲ２１２２にロードされてもよい。各々の重みビットは、入力活性化のビット０〜ビット１５と乗算する、１６のサイクルの間に再使用される。よって、この実施形態について、他の１５の列に重みの新たなセットをロードする間、ＳＩＰ２７０ｂのいずれかの単一の列をビジーなままにするために十分な時間が存在する。例えば、図２１に示されるように、エンジンは、サイクル０では、ＳＩＰ（０，０）．ＳＩＰ（０，１２７）に２Ｋの重みの単一のビットをロードすることができ、次いで、サイクル１では、ＳＩＰ（１，０）．．ＳＩＰ（１，１２７）に次の２Ｋの重みの単一のビットをロードすることができる、などである。最初の１５のサイクルの後、全てのＳＩＰが完全に利用される。この設計について、１６の活性化及び１２８のフィルタの１６のセットを処理すると共に、同等のビット並列設計が２５６のサイクルにおいてそれらを処理するためにＰｗＬ×１６サイクルを要する。よって、ＰｗＬが１６未満であるとき、この設計は、１６／ＰｗＬだけビット並列設計よりも性能を上回り、それは、他の場合にその性能に相当することができる。
【０１２０】
図２２は、この実施形態についての修正されたビット直列内積ユニット（ＳＩＰ）２７０ｂを示す。クロックサイクルごとに、各々のＳＩＰ２７０ｂは、部分出力活性化を産出するために、１６の単一のビット活性化を１６の単一のビット重みと乗算する。内部では、各々のＳＩＰは、１６の１ビットの重みレジスタ（ＷＲ）２１２２、ＷＲにおける重みを入ってくる入力活性化ビットと乗算するための１６の２入力ＡＮＤゲート、並びにそれらの部分積を合計する１６入力の１ビット加算器ツリーを有する。
【０１２１】
Ａｃｃｕ．１は、ＰａＬサイクルにわたって加算器ツリーの出力を蓄積及びシフトする。ＰａＬサイクルごとに、Ａｃｃｕ．２は、Ａｃｃｕ．１の出力をシフトし、ＯＲにそれを蓄積する。ＰａＬ×ＰｗＬサイクルの後、出力レジスタ（ＯＲ）は、活性化及び重みセットの内積を含む。各々のＳＩＰでは、Ａｃｃｕ．１の後のマルチプレクサは、直列化を実施する。符号付きの２の補数活性化をサポートするために、否定ブロック２２２５は、最上位ビット（ＭＳＢ）が１であるとき、部分和から重みのＭＳＢに対応する入力活性化の和を減算するために使用される。各々のＳＩＰ２７０ｂはまた、最大プーリング層をサポートするための比較器（最大）２２６０を含む。ｉ＿ｎｂｏｕｔ入力は、２Ｋの出力よりも少ない完全結合層についての直列モードをサポートする。
【０１２２】
この次のセクションは、２ビットの活性化及び重みを仮定して、この実施形態が畳み込み及び完全結合層をどのように処理することができるかを説明する。図２８Ａは、サイクルごとに単一の２ビットの出力活性化を生成する、２つの入力活性化を２つの重みと乗算する従来のビット並列処理エンジンを示す。エンジンは、サイクルごとに新たな２ビットの重み及び／又は活性化を処理することができ、サイクルごとに２つの２ｂ×２ｂの積のスループットを処理することができる。
【０１２３】
本発明の実施形態に従って、図２８Ｂは、４×４アレイにおいて構成された４つのサブユニットを含むエンジンを示す。各々のサブユニットは、サイクルごとに入力活性化の２ビット及び重みの２ビットを受け付ける。同一の列に沿ったサブユニットは、活性化入力を共有すると共に、同一の行に沿ったサブユニットは、それらの重み入力を共有する。合計して、このエンジンは、ビット並列エンジンの入力帯域幅に等しい４つの活性化及び４つの重みビットを受け付ける。各々のサブユニットは、２つの１ビットの重みレジスタ（ＷＲ）、１つの２ビットの出力レジスタ（ＯＲ）を有し、そのＯＲに蓄積することができる２つの１ｂ×１ｂの積を実行することができる。
【０１２４】
図２８Ｂ〜図２８Ｆは、この実施形態が完全結合層をどのように処理するかを示す。図２８Ｂが示すように、サイクル１では、左列サブユニットは、フィルタ０及び１から、活性化ａ０及びａ１の最下位ビット（ＬＳＢ）ａ０／０及びａ１／０、並びに４つの重みのＬＳＢｗ００／０、ｗ０１／０、ｗ１０／０、及びｗ１１／０を受信する。それらの２つのサブユニットの各々は、２つの１ｂ×１ｂの積を計算し、そのＯＲにそれらの和を記憶する。サイクル２では、図２８Ｃが示すように、左列サブユニットはここで、同一の重みビットを、活性化ａ０及びａ１の最上位ビット（ＭＳＢ）ａ０／１及びａ１／１のそれぞれと乗算し、それらのＯＲにそれらを蓄積する。並列して、２つの右列サブユニットは、入力活性化ａ０及びａ１のＬＳＢ、ａ０／０及びａ１／０をロードし、それらをフィルタ２及び３からの重みのＬＳＢ  ｗ２０／０、ｗ２１／０、ｗ３０／０、及びｗ３１／０と乗算する。サイクル３では、左列サブユニットはここで、ＬＳＢ  ａ０／０及びａ１／０をロードし、ａ０／０及びａ１／０をフィルタ０及び１からの４つの重みのＭＳＢ  ｗ００／１、ｗ０１／１、ｗ１０／１、及びｗ１１／１と乗算する。並列して、右サブユニットは、それらのＷＲに保持された重みｗ２０／０、ｗ２１／０、ｗ３０／０、及びｗ３１／０を再使用し、それらを活性化ａ０及びａ１の最上位ビットａ０／１及びａ１／１と乗算する（図２８Ｄ）。図２８Ｅが例示するように、サイクル４では、左列サブユニットは、それらのＷＲに保持された重みを活性化ａ０及びａ１のＭＳＢ  ａ０／１及びａ１／１と乗算し、出力活性化ｏ０及びｏ１の計算を終了する。同時に、右列サブユニットは、フィルタ２及３からの重みのＭＳＢ  ｗ２０／１、ｗ２１／１、ｗ３０／１、及びｗ３１／１をロードし、それらをａ０／０及びａ１／０と乗算する。サイクル５では、図２８Ｆが示すように、右サブユニットは、それらのＷＲに保持された重みと２つの活性化のＭＳＢ  ａ０／１及びａ１／１との乗算を完了する。このサイクルの終わりにより、出力活性化ｏ２及びｏ３も準備された状態になる。
【０１２５】
合計して、３２の１ｂ×１ｂの積を処理するために４＋１サイクルを要する（サイクル２〜５のそれぞれにおいて４、８、８、８、４の積）。５番目のサイクルの終わりでは、左列サブユニットがアイドルであり、よって、重みの別のセットがＷＲにロードされており、出力の新たなセットが計算を開始することを可能にすることに留意されたい。定常状態では、入力活性化及び重みが２つのビットで表現されるとき、このエンジンは、サイクルごとに８の１ｂ×１ｂの項を産出しており、よって、並列エンジンの２つの２ｂ×２ｂのスループットに相当する。
【０１２６】
重みが１ビットのみを使用して表される場合、この実施形態は、サイクルごとに２つの出力活性化を産出しており、ビット並列エンジンの帯域幅の２倍である。概して、ビット並列ハードウェアが重みを表すためにＰｂａｓｅビットを使用しており、Ｐｗビットのみが実際に必要とされていた場合、完全結合層について、エンジンは、Ｐｂａｓｅ／Ｐｗだけビット並列エンジンよりも性能を上回る。完全結合層では重みの再使用がないので、Ｃｎサイクルは、Ｃｎ列の各々に重みの異なるセットをロードすることが必要とされる。よって、Ｃｎビットよりも少ないビットを使用する活性化を有することは、性能を改善しないが、エネルギー効率を改善する。
【０１２７】
この実施形態は、完全結合層とほとんど同様に畳み込み層を処理するが、重み及び活性化の両方に対して精度における換算を利用するために異なるウインドウにわたって重みの再使用を利用する。特に、畳み込み層では、同一の行にわたるサブユニットは、それらが単一のサイクルにおいてそれらのＷＲに並列にロードする同一の重みビットを共有する。それらの重みビットは、Ｐａサイクルにわたって対応する活性化ビットと乗算される。重みビットの別のセットは、Ｐａサイクルごとにロードされる必要があり、Ｐａは、入力活性化精度である。ここで、この実施形態は、各々のサブユニット列に活性化の異なるセットを処理させることによって、複数のウインドウにわたって重みの再使用を利用する。ビット並列エンジンが入力活性化及び重みの両方を表すためにＰｂａｓｅビットを使用すると仮定して、この実施形態は、Ｐ２ｂａｓｅ／（Ｐｗ×Ｐａ）だけビット並列エンジンよりも性能を上回ることができ、Ｐｗ及びＰａはそれぞれ、重み精度及び活性化精度である。
【０１２８】
直列モード
【０１２９】
完全に利用される上記言及された実施形態について、完全結合層は、少なくとも２Ｋの出力ニューロンを有する必要がある。学習されたネットワークのいくつかは、１Ｋ程度の出力活性化を有する層を有する。十分に活用しないことを回避するために、各々の行に沿ったＳＩＰ２７０ｂは、デイジーチェーンに直列化され、１つの出力は、マルチプレクサを介して次の入力にフィードされてもよい。このようにして、出力活性化の計算は、同一の行に沿ってＳＩＰにわたってスライシングされてもよい。このケースでは、各々のＳＩＰは、同一の行でのＳＩＰに沿ったいくつかの部分出力活性化をもたらす入力活性化の一部のみを処理する。ＮＰが、使用されるスライスの数である次のＮＰサイクルにわたって、ＮＰ部分出力は、最終出力活性化に換算されてもよい。ユーザは、最大で１６までいずれかの数のスライスを選択することができ、それによって、エンジンは、ちょうど２５６の出力の完全結合層と同等に完全に利用されてもよい。この直列モードは、ＮｅｕｒａｌＴａｌｋ［Ａｎｄｒｅｊ  Ｋａｒｐａｔｈｙ  ａｎｄ  Ｆｅｉ−Ｆｅｉ  Ｌｉ，“Ｄｅｅｐ  Ｖｉｓｕａｌ−Ｓｅｍａｎｔｉｃ  Ａｌｉｇｎｍｅｎｔｓ  ｆｏｒ  Ｇｅｎｅｒａｔｉｎｇ  Ｉｍａｇｅ  Ｄｅｓｃｒｉｐｔｉｏｎｓ”，ＣｏＲＲ  ａｂｓ／１４１２．２３０６（２０１４）．ｈｔｔｐ：／／ａｒｘｉｖ．ｏｒｇ／ａｂｓ／１４１２．２３０６］にあるような他のディープラーニングネットワークにおいて有効である場合があり、最小の完全結合層は、６００以下の出力を有することができる。この直列モードはまた、他の上記言及された実施形態と共に使用されてもよい。
【０１３０】
サイクルごとの１つよりも多いビットの処理
【０１３１】
サイクルごとに１つよりも多いビットの活性化を処理することによって、ＳＩＰの数及びそれぞれの領域のオーバヘッドを削減する実行時間性能の利点のいくつかをトレードオフすることが可能である。この方法を使用して、実施形態は、同等に構成されたビット並列エンジンのスループットに相当するためにより少ないＳＩＰ２７０ｂを必要とする。
【０１３２】
評価性能
【０１３３】
図２３は、完全結合層及びシナプス／重みについての有効な層ごとの精度のセットを報告している。活性化についての精度は、図１７において報告されるようなものである。図２４は、同等に構成されたＤａＤｉａｎＮａｏに対する実行時間性能、並びに２つの構成、１）サイクルごとの２つの活性化ビット（「２ビット」）の第１の処理、及び２）サイクルごとの４つの活性化ビット（「４ビット」）の第２の処理、についての実行時間性能を報告している。２つの構成は、８つのＳＩＰ列及び４つのＳＩＰ列をそれぞれ必要とする。活性化がここで２又は４それぞれの倍数とされるので、それらの構成は、潜在的な性能のいくつかを断念する。例えば４ビットについて、８から５ビットにＰａＬを削減する構成は、性能の利点を生じさせず、ビット直列構成について、１．６×だけ性能を改善する。
【０１３４】
ゼロビットのスキップ
【０１３５】
よって、説明される実施形態は、活性化精度をはるかに変え、それによって、いくつかの先頭ビット及び最終ビットがゼロとして扱われる。しかしながら、処理されるゼロであるいくつかのビットがなおも存在する。別の実施形態は、ゼロであるニューロンビットをスキップすることによって、それらを取り除き、性能を改善する。ビット直列タイルでは、各々のサイクルにおいて、各々のニューロンビットは、いくつかのシナプスを有するＡＮＤｅｄである。ニューロンビットがゼロであるとき、結果はゼロでもあり、最終出力ニューロンに何ら貢献しない。それは、出力ニューロン値に貢献する１つであるニューロンビットにすぎない。したがって、ビット直列タイルは、１つであるニューロンビットのみを処理するように拡張されてもよい。
【０１３６】
図２５は、ネットワークごとに入力ニューロンについての１ビットのカウントの累積分布を示す。全てのネットワークについて、入力ニューロンの少なくとも９０％は、１つである最大で５ビットを有し、実質的に全ての入力ニューロンは、１つである最大で８ビットを有する。したがって、ゼロビットをスキップすることが可能なビット直列タイルは、ほとんどの時間（９０％）に最大で５ビットを処理し、実質的に全て時間に最大で８ビットを処理する必要がある。
【０１３７】
１つであるビットだけを処理するために、ディスパッチャは、それらのみを通信するように修正される。各々のビットの相対的な位置は、シナプスを適切に乗算するために知られる必要があるので、１つの実施形態では、ディスパッチャは、ビットのオフセットを通信する。例えば、入力ニューロンが値０ｂ１１００１を有している場合、ディスパッチャは、１つであるビットの位置に対応するオフセット（０，３，４）を通信する。基準値が１６ビットの数を使用するので、オフセットは４ビット長である必要がある。結果として、各々のニューロン線は、４線に置き換わる。１つであるビットの空間的分布を利用することによって、他のより短い線のカウントの代替が可能である。例えば、絶対的なオフセットの代わりに、ディスパッチャは、デルタを通信してもよく、そのケースでは、前の例示的な数が（０，２，１）として通信される。この例について、想定は、絶対的なオフセットの使用である。別の実施形態では、ディスパッチャは、これまでのようにではあるが、より高速なレートでニューロンを通信することができ、オフセット表現への変換は、各々の処理するタイルにおいて局所的に行われてもよい。
【０１３８】
元の例では、全てのニューロンレーンは、全てのラインにわたって同一のオフセットにおいてビットを送信するロックステップにおいて作用する。ゼロビットのスキップを可能にするために、ニューロンレーンは、分離される必要があり、それによって、それらは、異なるオフセットにおいて通信することができる。ディスパッチャにオフセットを送信させることが、これを直に可能にする。しかしながら、ニューロンが完全に処理されると、ニューロンレーンは、次の入力ニューロンを処理する必要がある。結果として、ディスパッチャは、ＮＭからそれをフェッチする必要がある。最悪のケースでは、全ての２５６のニューロンレーンは、完全に独立して動作し、各々が異なるブリックに属するニューロンを必要とする。これは、ディスパッチャにおいて２５６のブリックの入力バッファを維持することを必要とする。より悪く、最大で２５６の独立したブリックを作成することがＮＭから読み込む必要がある。帯域幅の要件は、取り除かれるビットのわずかによって必要とされるよりも多くは増大せず、ディスパッチャは、それらの要求の間で調停する必要がある。最後に、各々のＳＩＰは、異なるニューロンオフセットにおいて作用しており、よって、異なるオフセットにおいてもシナプスをフェッチする必要がある。これは、ＳＢが全てのＳＩＰにわたって分割されることを必要とし、それによって、各々のＳＩＰがその自身のＳＢのスライスを有する。
【０１３９】
ゼロビットのスキップをサポートするために必要な独立したブリック要求の数は、ニューロンレーンをグループ化し、グループ内の全てのニューロンレーンがそれらの現在のニューロンを処理することを終了した後のみに入力ニューロンの次のセットに進むことを必要とすることによって削減されてもよい。複数の設計オプションが存在する。スペクトルの１つの目的は、全てのニューロンレーンが独立して作用する設計である。これは、ディスパッチャにおいて最大で２５６の異なるニューロンブリックをフェッチする必要があり、ＳＩＰごとに別個のＳＢのスライスを提供する必要がある、潜在的に望まれる要件を有する。スペクトルのもう一方の目的は、全てのニューロンレーンが単一のグループを形成する設計である。この設計では、各々のニューロンレーンは、異なるニューロンビットオフセットにおいて作用するが、全てのニューロンレーンは、全ての現在のニューロンが処理されたときのみニューロンの次のセットに進むことが許可される。すなわち、このケースでは、全てのニューロンレーンは、１つであるビットの最大カウントを有するニューロンを処理しているニューロンレーンを待つ。この設計の潜在的な追加された利点は、ＳＢが全く分割されることを必要としないことである。ビット直列タイルは、加算器ツリー入力において導入されているシフタによるままであり、加算器は、シフトされた入力を扱うように適切に拡張される。異なる程度の要件による複数の他の選択肢が存在する。例えば、同一の行に沿ったＳＩＰがグループを形成することを必要とすることがあり、そのケースでは、ＳＢは、ＳＩＰ行ごとに１つの、１６のスライスに分割される必要があり、ディスパッチャは、異なる位置から最大で１６の入力ブリックを維持する必要がある。それは、同様に、２つ、４つ、又は８つの行ごとにグループ化されてもよい。代わりに、それは、列に沿ってグループ化してもよく、複数のＳＢスライス及び複数のブリックがディスパッチャからフェッチすることを必要とする。
【０１４０】
全てのニューロンレーンがロックステップにおいて続行しているとき、各々のＳＢ列は、１回読み込まれ、全てのニューロンレーンによって再使用される。しかしながら、ニューロンレーンがより小さいグループにおいて独立して続行するとき、それらは、相互に先行して動作し、独立して、場合によっては異なる時に同一のＳＢ列を読み込む。ＳＢの前にバッファのセットを追加することによって、より少ないエネルギーによりこの要求にサービスすることが可能である。この実施形態では、各々のＳＢ列は、バッファスロットに読み込まれ、全てのニューロンレーンがそれを読み込むまでそこに保持される。バッファの数は、各々の他のニューロンレーングループが独走してどのように動作することができるかを指示する。
【０１４１】
１つの実施形態では、ビット直列エンジンのＡＮＤゲートは、シフタに置き換わり、それによって、重みは、２の累乗を表す、入ってくるオフセットと効果的に乗算されてもよい。そのような設計は、領域及び電力に関して高価であることが認識される。理由は、各々の加算器ツリーをフィードする１６のニューロンオフセットを処理するとき、最悪のケースでは、オフセットの１つが０であり、その他が１５である可能性があることである。結果として、シフタは、１６ビットの入力シナプスを要し、３２ビットの重みにそれを変換する必要がある。更に、加算器ツリーは、１６ビットの加算器ツリーではなく、むしろ３２ビットの加算器ツリーである。潜在的な性能のいくつかを断念することによって、「２段階シフティング」アプローチを使用して領域及びエネルギーオーバヘッドを削減することが可能である。特に、別の実施形態では、入力ニューロンは、ビットのグループ、例えば、４ビットの４つのグループとして処理される。例えば、オフセット（５）及び（０）を有する２つのニューロンを仮定して、基準値設計は、１つのサイクルにおいて両方を同時に処理する。修正された設計は、０〜３の累乗を最初に処理し、次いで、別のサイクルでは、４〜８の累乗を処理する。したがって、例では、修正された設計は、１つではなく２つのサイクルにおいて２つのニューロンを処理する。この設計は、いずれかのシフト演算が２つのより小さいシフト、ａ＜＜Ｋ＝ａ＜＜（Ｋ’＋Ｃ）＝（（ａ＜＜Ｋ’）＜＜Ｃ）として２つの段階において実行されてもよいという見解を利用する。よって、異なるオフセットＫ０，…，ＫＴによってＴの重みをシフト及び加算するために、共通項Ｃとの和、例えば、Ｋｉ＝Ｋ’＋Ｃにオフセットを分解することができる。したがって、処理する内積は、第１の段階が重みごとの特有のオフセットＫ’を使用し、第２の段階が全ての重みにわたる共通のオフセットＣを使用する、２つの段階処理を使用して再配置されてもよい。この配置は、図２６が示すように、加算器ツリーの後に１つの共通シフタを共有することによって、重みシフタの幅及び加算器ツリーの幅を減少させるために使用されてもよい。設計パラメータＬは、重みシフタを制御するビットの数を定義し、それによって、設計は、単一のサイクルにおいて２Ｌ未満で異なるオフセットを処理することができる。これは、１６＋２Ｌ−１のビットの項のみをサポートするために、重みシフタのサイズを減少させ、加算器ツリーのサイズを減少させる。
【０１４２】
図２６は、この実施形態についての直列内積ユニット２６００を示す。示されるシフタは、最大で１６ビットの位置をシフトする。ｓｈｉｆｔ＿Ｂ信号は、２段階シフティングを実施するために使用されてもよい。Ｄｏｎｅ信号は、他のレーンが終了することをレーンが待っているときにシナプス値を蓄積することを禁止するために使用されてもよい。
【０１４３】
図２７は、ゼロビットのスキップ及び異なるニューロンレーンのグループ化により可能な性能を示す。特に、以下の構成、ＣＯＬ：ＳＩＰが列ごとに同期されるときのゼロビットのスキップの性能、ＲＯＷ：ＳＩＰが行ごとにロックされるときのゼロビットのスキップの性能、及びＰＡＬ：ＳＩＰがパレットごとにロックされるとき、すなわち、全てのＳＩＰが同期されるときのゼロビットのスキップの性能、が示される。
【０１４４】
列ごとの設計は、可能な最高性能を達成し、行の設計がそれに続き、最後に、パレットの設計が続く。パレットの設計は、全てのＳＩＰユニットを同期させ、よって、最も多くの制約を有する。しかしながら、それは、ディスパッチャとして実施するために最も簡易であり、ＳＢはそのままである。行の設計は、ＳＢが行に沿って１６のスライスに分割されることを必要とし、ディスパッチャは、１６の独立したブリックを保持する必要がある。
【０１４５】
改善された符号化
【０１４６】
ＳＩＰがいずれかの入力項を無効にすることができるので、Ｂｏｏｔｈ符号化を使用して符号付きオフセットを可能にすることによって、１つの連続（ｒｕｎ）を含む活性化値について処理されるオフセットを換算することが可能である。この改善されたオフセットジェネレータは、隣接するオフセットＡ…Ｂの連続を形式Ａ＋１，−Ｂのペアに換算する。連続の中の単一のオフセット又は間隔は、正のオフセット又は負のオフセットそれぞれによって表される。例えば、通常はオフセット（４，３，１，０）により符号化される１１０１１の活性化値は代わりに、（５，−３，＋２，−０）により表されてもよく、又は更に経済的にオフセット（５，−２，−０）により表されてもよい。これは、Ｒａｄｉｘ−４  Ｂｏｏｔｈ符号化と同等である。この符号化は、基準値符号化と比較して更なるオフセットを産出しない。しかしながら、２段階シフティングを理由に、この符号化は、必要とされるサイクルの数を増加させることが可能である。これは、２段階シフティングの間に共に処理されているビットグループの中でのオフセット分布が変化するときに起こる。
【０１４７】
説明されるゼロビットのスキップ設計に加えて、図１３はまた、ニューロン値が、１つであるビットの数を削減するように変更されるオプションごとの２つの拡張を示す。Ｒａ拡張では、ｎが使用される精度である形式２ｎ−１の値であるニューロン値は、２ｎに変換され、Ｒｂ拡張では、上記変換が全ての２の累乗について行われ、すなわち、いずれかの数の形式２ｋ−１が２ｋに変換される。結果は、両方の技術が追加の性能改善を提供することができることを示す。正確度への影響の分析は行われていない。別の符号化では、層ごとの閾値又はニューロンのグループごとの閾値は、処理される２の累乗の最大数を判定する。例えば、閾値が３であり、ニューロンが（４，３，０，−１）として符号化される場合、（４，３，０）のみが処理される。
【０１４８】
当業者によって認識されるように、上記言及された演算では、構成要素は、コントローラによって制御されてもよく、コントローラは、例えば、機能的ユニットとして加速器を制御することができるプログラム可能な有限状態機械又はプログラム可能なプロセッサであってもよい。実施形態に従って、プログラム可能な有限状態機械は、いくつかの制御及びデータレジスタを有してもよく、潜在的に、プログラム及びデータメモリを有してもよく、ニューラルネットワークシステムにおける本明細書で説明される他の構成要素に様々な制御信号を出力してもよい。
【０１４９】
実施形態に従って、完全層以外の層の一部に本発明の実施形態を適合させることも可能である。層ごとの計算に対するそのような代替的なアプローチは、例えば、Ｈ次元及びＷ次元における入力マトリックスをいくつかの区画に分割してもよい。次いで、フィルタは、部分出力を産出するためにそれらの区画のうちの１つ以上に適用されてもよい。それらの部分出力は、全体として処理されてもよく、又は更に分割されてもよい。部分出力は、ネットワークの終端まで処理されてもよく（完全結合層がないと仮定して）、又はいくつかのポイントにおいて停止してもよく、更なる区画を処理することを続けるために分割ポイントに進んでもよい。
【０１５０】
本発明は、その精神及びその必須の特性から逸脱することなく他の特定の形式において具体化されてもよい。本発明の特定の適合及び修正が当業者にとって明らかである。したがって、現在議論されている実施形態は、例示的であり、限定的でないものと見なされ、本発明の範囲は、上述した説明ではなく添付の特許請求の範囲によって示され、したがって、特許請求の範囲の同等物の意味及び範囲内にある全ての変更がそれに包含されると意図される。
【図１】
2019522271.tif 000010
【図２】
2019522271.tif 000011
【図３】
2019522271.tif 000012
【図４】
2019522271.tif 000013
【図５】
2019522271.tif 000014
【図６】
2019522271.tif 000015
【図７】
2019522271.tif 000016
【図８】
2019522271.tif 000017
【図９】
2019522271.tif 000018
【図１０】
2019522271.tif 000019
【図１１】
2019522271.tif 000020
【図１２】
2019522271.tif 000021
【図１３】
2019522271.tif 000022
【図１４Ａ】
2019522271.tif 000023
【図１４Ｂ】
2019522271.tif 000024
【図１４Ｃ】
2019522271.tif 000025
【図１５Ａ】
2019522271.tif 000026
【図１５Ｂ】
2019522271.tif 000027
【図１５Ｃ】
2019522271.tif 000028
【図１５Ｄ】
2019522271.tif 000029
【図１６Ａ】
2019522271.tif 000030
【図１６Ｂ】
2019522271.tif 000031
【図１６Ｃ】
2019522271.tif 000032
【図１６Ｄ】
2019522271.tif 000033
【図１６Ｅ】
2019522271.tif 000034
【図１７】
2019522271.tif 000035
【図１８】
2019522271.tif 000036
【図１９】
2019522271.tif 000037
【図２０】
2019522271.tif 000038
【図２１】
2019522271.tif 000039
【図２２】
2019522271.tif 000040
【図２３】
2019522271.tif 000041
【図２４】
2019522271.tif 000042
【図２５】
2019522271.tif 000043
【図２６】
2019522271.tif 000044
【図２７】
2019522271.tif 000045
【図２８Ａ】
2019522271.tif 000046
【図２８Ｂ】
2019522271.tif 000047
【図２８Ｃ】
2019522271.tif 000048
【図２８Ｄ】
2019522271.tif 000049
【図２８Ｅ】
2019522271.tif 000050
【図２８Ｆ】
2019522271.tif 000051
【国際調査報告】
2019522271.tif 000052
2019522271.tif 000053