(57)【要約】  ニューラル・ネットワーク・アクセラレータ・タイルを説明する。このタイルは、活性化表現のセットを受け取るために活性化メモリとインターフェースする活性化メモリ・インターフェースと、重み表現のセットを受け取るために重みメモリとインターフェースする重みメモリ・インターフェースと、処理要素とを含む。処理要素は、出力表現のセットを作るために活性化表現のセットおよび重み表現のセットを処理する、１ホット符号器、ヒストグラマ、アライナ、リデューサ、および累算副要素を実装するように構成される。【選択図】図４Ａ
2021524082.tif 000002
【特許請求の範囲】
【請求項１】
活性化表現のセットを受け取るために活性化メモリとインターフェースする活性化メモリ・インターフェースと、
重み表現のセットを受け取るために重みメモリとインターフェースする重みメモリ・インターフェースと、
出力表現のセットを作るために活性化表現の前記セットおよび重み表現の前記セットを処理するために１ホット符号器、ヒストグラマ、アライナ、リデューサ、および累算副要素を実施するように構成された処理要素と
を含む、ニューラル・ネットワーク・アクセラレータ・タイル。
【請求項２】
前記活性化メモリ・インターフェースは、活性化１オフセット対のセットとして前記処理要素に活性化表現の前記セットを提供するように構成され、前記重みメモリ・インターフェースは、重み１オフセット対のセットとして前記処理要素に重み表現の前記セットを提供するように構成される、請求項１に記載のアクセラレータ・タイル。
【請求項３】
前記処理要素は、指数副要素を実施するようにさらに構成される、請求項２に記載のアクセラレータ・タイル。
【請求項４】
前記指数副要素は、１オフセット対積のセットを作るために活性化１オフセット対の前記セットおよび重み１オフセット対の前記セットを組み合わせるように構成される、請求項３に記載のアクセラレータ・タイル。
【請求項５】
前記指数副要素は、大きさ加算器のセットおよび符号ゲートの対応するセットを含み、大きさ加算器および符号ゲートの１対は、１オフセット対積の前記セットの各１オフセット対積を提供するためのものである、請求項４に記載のアクセラレータ・タイル。
【請求項６】
前記１ホット符号器は、１ホット符号器入力のセットの１ホット符号化を実行する復号器のセットを含む、請求項１に記載のアクセラレータ・タイル。
【請求項７】
前記ヒストグラマは、ヒストグラマ入力のセットを値によってソートする  構成される、請求項２に記載のアクセラレータ・タイル。
【請求項８】
前記アライナは、縮小されるシフトされた入力のセットを提供するためにアライナ入力のセットをシフトするように構成される、請求項２に記載のアクセラレータ・タイル。
【請求項９】
前記リデューサは、リデューサ入力のセットを部分和に縮小するために加算器ツリーを含む、請求項２に記載のアクセラレータ・タイル。
【請求項１０】
前記累算副要素は、アキュムレータを含み、複数のサイクルにわたって積を累算するために部分和を受け取り、前記部分和を前記アキュムレータに加算するように構成される、請求項２に記載のアクセラレータ・タイル。
【請求項１１】
前記処理要素は、連結器を実装するようにさらに構成される、請求項１に記載のアクセラレータ・タイル。
【請求項１２】
前記連結器は、部分積を作るために前記アライナおよび前記リデューサによってシフトされ、縮小されるグループ化されたカウントのセットを作るために連結器入力のセットを連結するために提供される、請求項１０に記載のアクセラレータ・タイル。
【請求項１３】
請求項１に記載のニューラル・ネットワーク・アクセラレータ・タイルのセットを含むニューラル・ネットワーク。
【請求項１４】
前記ニューラル・ネットワークは、畳み込みニューラル・ネットワークとして実施される、請求項１３に記載のニューラル・ネットワーク。
【請求項１５】
ニューラル・ネットワーク・アクセラレータ・タイルの前記セットは、アクセラレータ・タイルの列を含み、アクセラレータ・タイルの前記列の前記タイルは、それぞれが活性化表現の同一のセットを受け取り、それぞれが重み表現の独自のセットを受け取るように構成される、請求項１３に記載のニューラル・ネットワーク。
【請求項１６】
前記処理要素は、複数のサイクルにわたって、重み表現の前記セットの重み表現と共に活性化表現の前記セットの活性化表現を処理するように構成される、請求項１６に記載の方法。
【請求項１７】
ニューラル・ネットワーク部分積を作る方法であって、
活性化表現のセットを受け取ることと、
重み表現のセットを受け取ることであって、各重み表現は、活性化表現の前記セットの活性化表現に対応する、受け取ることと、
部分結果のセットを作るために、各重み表現をそれに対応する活性化表現と組み合わせることによって、重み表現の前記セットを活性化表現の前記セットと組み合わせることと、
１ホット表現のセットを作るために、部分結果の前記セットを符号化することと、
１ホット表現の前記セットをヒストグラム・バケット・カウントのセットに累算することと、
ヒストグラム・バケット・カウントの前記セットのカウントをそのサイズに従って整列させることと、
前記ニューラル・ネットワーク部分積を作るためにヒストグラム・バケット・カウントの前記セットの前記整列されたカウントを縮小することと
を含む方法。
【請求項１８】
積を累算するために前記ニューラル・ネットワーク部分積をアキュムレータに出力することをさらに含む、請求項１７に記載の方法。
【請求項１９】
前記積を活性化メモリに出力することをさらに含む、請求項１８に記載の方法。
【請求項２０】
各活性化表現は、活性化大きさおよび活性化符号の活性化対として受け取られ、各重み表現は、重み大きさおよび重み符号の重み対として受け取られる、請求項１７に記載の方法。
【請求項２１】
ヒストグラム・バケット・カウントの前記セットの前記カウントを整列させる前に、ヒストグラム・バケット・カウントの前記セットの前記カウントをグループ化されたカウントのセットに再帰的にグループ化することと、ヒストグラム・バケット・カウントの前記セットの代わりに整列され縮小されるグループ化されたカウントの前記セットを提供することとをさらに含む、請求項２０に記載の方法。
【請求項２２】
重み表現の前記セットの重み表現を活性化表現の前記セットの活性化表現と組み合わせることは、複数のサイクルにわたって実行される、請求項１７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、全般的にはニューラル・ネットワークに関し、具体的には、ニューラル・ネットワークの処理要素の実施に関する。
【背景技術】
【０００２】
現代のコンピューティング・ハードウェアは、エネルギ制約されている。計算を実行するのに必要なエネルギの削減は、性能改善においてしばしば必須である。
【０００３】
たとえば、畳み込みニューラル・ネットワークによって推論中に実行される計算の多くは、２Ｄ畳み込みに起因する。２Ｄ畳み込みは、作業のほとんどが活性化および重みの乗算に起因する、多数の積和演算を含む。これらの乗算の多くが、無効である。
【０００４】
ニューラル・ネットワークのトレーニング、実行、または他の使用は、しばしば、膨大な量の計算の実行を含む。より少ない計算の実行は、通常、時間効率およびエネルギ効率などの効率をもたらす。
【発明の概要】
【０００５】
本発明の一態様では、活性化表現のセットを受け取るために活性化メモリとインターフェースする活性化メモリ・インターフェースと、重み表現のセットを受け取るために重みメモリとインターフェースする重みメモリ・インターフェースと、出力表現のセットを作るために活性化表現のセットおよび重み表現のセットを処理するために１ホット符号器、ヒストグラマ、アライナ、リデューサ、および累算副要素を実施するように構成された処理要素とを含む、ニューラル・ネットワーク・アクセラレータ・タイルが提供される。
【０００６】
本発明の一態様では、ニューラル・ネットワーク部分積を作る方法であって、活性化表現のセットを受け取ることと、重み表現のセットを受け取ることであって、各重み表現は、活性化表現のセットの活性化表現に対応する、受け取ることと、部分結果のセットを作るために、各重み表現をそれに対応する活性化表現と組み合わせることによって、重み表現のセットを活性化表現のセットと組み合わせることと、１ホット表現のセットを作るために、部分結果のセットを符号化することと、１ホット表現のセットをヒストグラム・バケット・カウントのセットに累算することと、ヒストグラム・バケット・カウントのセットのカウントをそのサイズに従って整列させることと、ニューラル・ネットワーク部分積を作るためにヒストグラム・バケット・カウントのセットの整列されたカウントを縮小することとを含む方法が提供される。
【０００７】
本願による他の態様および特徴は、添付図面に関連して本発明の実施形態の以下の説明を再検討する時に、当業者に明白になろう。
【０００８】
本発明の原理は、本発明の原理および態様を組み込んだ１つまたは複数の例示的実施形態の図示によって提供される添付図面を参照することによってよりよく理解され得る。
【図面の簡単な説明】
【０００９】
【図１】ネットワークのセットにまたがる８つの例の計算配置の平均作業削減を比較する１組の棒グラフである。
【図２】例の畳み込み層を示す概略図である。
【図３Ａ−３Ｃ】３つの例の処理エンジンを示す概略図である。
【図４Ａ】一実施形態による処理要素を示す概略図である。
【図４Ｂ】一実施形態による処理要素の一部を示す概略図である。
【図５Ａ−５Ｂ】実施形態による連結ユニットを示す概略図である。
【図６】一実施形態によるアクセラレータ・タイルを示す概略図である。
【図７Ａ−７Ｂ】例のアクセラレータ・タイル構成を示す概略図である。
【図８】複数のネットワークにまたがる例のタイル構成のセットの性能を比較する棒グラフである。
【図９】例のアクセラレータ・タイル構成を示す概略図である。
【図１０】例のアクセラレータ・タイル構成を示す概略図である。
【図１１】アキュムレータ構成を示す概略図である。
【発明を実施するための形態】
【００１０】
同様の符号は、図の同様のまたは対応する要素を示した。
【００１１】
以下の説明およびそこで説明される実施形態は、本発明の原理の特定の実施形態の１つまたは複数の例の実例として提供される。これらの例は、これらの原理のおよび本発明の、限定ではなく説明の目的で提供される。説明では、同様の部分は、本明細書および図面全体を通じて同一のそれぞれの参照番号を用いてマークされる。図面は、必ずしも原寸通りではなく、いくつかの場合に、本発明のある種の特徴をより明瞭に示すために、比率が誇張されている場合がある。
【００１２】
この説明は、画像分類モデルの推論中に実行される作業の量など、実行される作業の量を削減するために乗算をビットレベルまで分解するアクセラレータに関する。そのような削減は、実行時間を改善し、エネルギ効率を改善することができる。
【００１３】
この説明は、ディープ・ニューラル・ネットワーク（ＤＮＮ）推論の実行時間およびエネルギ効率を改善することのできるアクセラレータにさらに関する。ただし、いくつかの実施形態では、作業削減潜在能力の一部が、低コストで単純でエネルギ効率の良い設計を与えるために放棄される。
【００１４】
多くの近代コンピューティング・ハードウェアが、エネルギ制約されているので、計算を実行するのに必要なエネルギの量を削減する技法の開発は、しばしば、性能改善のために必須である。たとえば、推論中にほとんどの畳み込みニューラル・ネットワークによって実行される大量の作業は、２Ｄ畳み込みに起因する。これらの畳み込みは、大量の積和演算を伴い、この積和演算に関して、ほとんどの作業は、活性化Ａおよび重みＷの乗算に起因する。無効な演算の個数の削減が、エネルギ効率を大幅に改善する可能性がある。
【００１５】
様々な計算配置が、Ａ×Ｗ乗算をより単純な演算の集合に分解するために提案されてきた。たとえば、ＡおよびＷが、１６ｂ固定小数点数である場合に、Ａ×Ｗに、２５６個の１ｂ×１ｂ乗算または１６個の１６ｂ×１ｂ乗算としてアプローチすることができる。
【００１６】
図１は、８つの例の計算配置のセットを試験する際に使用される６つのモデルのそれぞれに１つの、６つの棒グラフを含む。各棒グラフは、８つの比較される計算配置に関する作業の潜在的な削減を比較する。
【００１７】
各棒グラフの左端の棒１１００は、活性化が０である場合に乗算を回避する第１の計算配置を表し、畳み込みニューラル・ネットワークで発生する０活性化の相対的に大きい分数によって動機を与えられた値ベースのアクセラレータの第１世代を表す（たとえば、これによって参照によって組み込まれる、Ｊ．Ａｌｂｅｒｉｃｉｏ、Ｐ．Ｊｕｄｄ、Ｔ．Ｈｅｔｈｅｒｉｎｇｔｏｎ、Ｔ．Ａａｍｏｄｔ、Ｎ．Ｅｎｒｉｇｈｔ  Ｊｅｒｇｅｒ、およびＡ．Ｍｏｓｈｏｖｏｓ、“ＣＮＶＬＵＴＩＮ：Ｉｎｅｆｆｅｃｔｕａｌ−Ｎｅｕｒｏｎ−Ｆｒｅｅ  Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ  Ｃｏｍｐｕｔｉｎｇ”、ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ、２０１６年を参照されたい）。
【００１８】
各グラフの左から２番目の棒１２００は、活性化または重みのいずれかが０である場合に乗算をスキップする第２の計算配置を表し、シナプス接続の大きい分数が枝刈りされたスパース・モデルをターゲットとするアクセラレータを表す（たとえば、これによって参照によって組み込まれる、Ａ．Ｐａｒａｓｈａｒ、Ｍ．Ｒｈｕ、Ａ．Ｍｕｋｋａｒａ、Ａ．Ｐｕｇｌｉｅｌｌｉ、Ｒ．Ｖｅｎｋａｔｅｓａｎ、Ｂ．Ｋｈａｉｌａｎｙ、Ｊ．Ｅｍｅｒ、Ｓ．Ｗ．Ｋｅｃｋｌｅｒ、およびＷ．Ｊ．Ｄａｌｌｙ、“Ｓｃｎｎ：  Ａｎ  ａｃｃｅｌｅｒａｔｏｒ  ｆｏｒ  ｃｏｍｐｒｅｓｓｅｄ−ｓｐａｒｓｅ  ｃｏｎｖｏｌｕｔｉｏｎａｌ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋｓ”、ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ４４ｔｈ  Ａｎｎｕａｌ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ、ＩＳＣＡ’１７、（米国ニューヨーク州ニューヨーク）、２７〜４０頁、ＡＣＭ、２０１７年を参照されたい）。
【００１９】
左から３番目および４番目の棒１３００および１４００は、精度をターゲットとする、それぞれ第３および第４の計算配置を表す。棒１３００によって表される３番目の計算配置は、活性化の精度をターゲットとし（たとえば、両方がこれによって参照によって組み込まれる、Ｐ．Ｊｕｄｄ、Ｊ．Ａｌｂｅｒｉｃｉｏ、Ｔ．Ｈｅｔｈｅｒｉｎｇｔｏｎ、Ｔ．Ａａｍｏｄｔ、およびＡ．Ｍｏｓｈｏｖｏｓ、“Ｓｔｒｉｐｅｓ：  Ｂｉｔ−ｓｅｒｉａｌ  Ｄｅｅｐ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ  Ｃｏｍｐｕｔｉｎｇ”、ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ４９ｔｈ  Ａｎｎｕａｌ  ＩＥＥＥ／ＡＣＭ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｍｉｃｒｏａｒｃｈｉｔｅｃｔｕｒｅ、ＭＩＣＲＯ−４９、２０１６年と、Ａ．Ｄｅｌｍａｓ、Ｐ．Ｊｕｄｄ、Ｓ．Ｓｈａｒｉｆｙ、およびＡ．Ｍｏｓｈｏｖｏｓ、“Ｄｙｎａｍｉｃ  ｓｔｒｉｐｅｓ：  Ｅｘｐｌｏｉｔｉｎｇ  ｔｈｅ  ｄｙｎａｍｉｃ  ｐｒｅｃｉｓｉｏｎ  ｒｅｑｕｉｒｅｍｅｎｔｓ  ｏｆ  ａｃｔｉｖａｔｉｏｎ  ｖａｌｕｅｓ  ｉｎ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋｓ”、ＣｏＲＲ、ｖｏｌ．ａｂｓ／１７０６．００５０４、２０１７年を参照されたい）、棒１４００によって表される４番目の計算配置は、活性化および重みの精度をターゲットとする（たとえば、これによって参照によって組み込まれる、Ｓ．Ｓｈａｒｉｆｙ、Ａ．Ｄ．Ｌａｓｃｏｒｚ、Ｐ．Ｊｕｄｄ、およびＡ．Ｍｏｓｈｏｖｏｓ、“Ｌｏｏｍ：  Ｅｘｐｌｏｉｔｉｎｇ  ｗｅｉｇｈｔ  ａｎｄ  ａｃｔｉｖａｔｉｏｎ  ｐｒｅｃｉｓｉｏｎｓ  ｔｏ  ａｃｃｅｌｅｒａｔｅ  ｃｏｎｖｏｌｕｔｉｏｎａｌ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋｓ”、ＣｏＲＲ、ｖｏｌ．ａｂｓ／１７０６．０７８５３、２０１７年を参照されたい）。
【００２０】
乗算がビットレベルで分解される場合に、作業削減のさらなる可能性が存在する。たとえば、これらの乗算が１６ｂ固定小数点値に対して動作すると仮定すると、乗算は、下の式（１）によって与えられる。
【数１】
2021524082.tif 000003
【００２１】
上の式（１）では、ＡｉおよびＷｉは、それぞれＡおよびＷのビットである。個々の２５６個の単一ビット乗算まで分解された時に、ＡｉおよびＷｉが非０である乗算だけが有効である。
【００２２】
左から５番目および６番目の棒１５００および１６００は、それぞれ、乗算を単一ビット乗算に分解する、５番目および６番目の計算配置を表す。棒１５００によって表される５番目の計算配置は、活性化ビットが０である場合に単一ビット乗算をスキップする（たとえば、これによって参照によって組み込まれる、Ｊ．Ａｌｂｅｒｉｃｉｏ、Ａ．Ｄｅｌｍaｓ、Ｐ．Ｊｕｄｄ、Ｓ．Ｓｈａｒｉｆｙ、Ｇ．Ｏ’Ｌｅａｒｙ、Ｒ．Ｇｅｎｏｖ、およびＡ．Ｍｏｓｈｏｖｏｓ、“Ｂｉｔ−ｐｒａｇｍａｔｉｃ  ｄｅｅｐ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋ  ｃｏｍｐｕｔｉｎｇ”、ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ５０ｔｈ  Ａｎｎｕａｌ  ＩＥＥＥ／ＡＣＭ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｍｉｃｒｏａｒｃｈｉｔｅｃｔｕｒｅ、ＭＩＣＲＯ−５０ ’１７、３８２〜３９４頁、２０１７年を参照されたい）。棒１６００によって表される６番目の配置は、活性化または重みビットのいずれかが０である場合に単一ビット乗算をスキップする。
【００２３】
しかし、いくつかの配置では、ＡおよびＷを、ビット・ベクトルとして表すのではなく、２またはより大きい基数項の符号付きべきとしてブース符号化することができる。左から７番目および８番目の棒１７００および１８００は、それぞれ７番目および８番目の計算配置を表し、ここで、値は、ビット・ベクトルとして表されるのではなく、２またはより大きい基数項の符号付きべきとしてブース符号化される。棒１７００によって表される７番目の配置は、活性化値をブース符号化し、棒１８００によって表される８番目の配置は、活性化値と重み値との両方をブース符号化する。重みによる活性化の乗算は、下の式（２）によって与えられる。
【数２】
2021524082.tif 000004
【００２４】
上の式（２）では、ＡｔｉおよびＷｔｊは、±２ｘの形である。位置表現に関して、ＡｔｉとＷｔｊとの両方が非０であるそれらの積だけが、有効である。したがって、図１は、ブース符号化された活性化の無効な項がスキップされる場合の作業の潜在的削減を１７００に示し（たとえば、上で参照によって組み込まれる、Ｊ．Ａｌｂｅｒｉｃｉｏ、Ａ．Ｄｅｌｍaｓ、Ｐ．Ｊｕｄｄ、Ｓ．Ｓｈａｒｉｆｙ、Ｇ．Ｏ’Ｌｅａｒｙ、Ｒ．Ｇｅｎｏｖ、およびＡ．Ｍｏｓｈｏｖｏｓ、“Ｂｉｔ−ｐｒａｇｍａｔｉｃ  ｄｅｅｐ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋ  ｃｏｍｐｕｔｉｎｇ”、ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ５０ｔｈ  Ａｎｎｕａｌ  ＩＥＥＥ／ＡＣＭ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｍｉｃｒｏａｒｃｈｉｔｅｃｔｕｒｅ、ＭＩＣＲＯ−５０’１７、３８２〜３９４頁、２０１７年を参照されたい）、ブース符号化された活性化およびブース符号化された重みの無効な項がスキップされる場合の作業の潜在的削減を１８００に示す。
【００２５】
図１によって示されるように、ブース符号化された活性化および重みの有効な項など、有効な項だけを計算するハードウェア・アクセラレータは、計算作業を大幅に削減する可能性を有する。多くの実施形態で、ブース符号化された計算をターゲットとする構成を使用して、ビット・ベクトル表現を計算することもできる。
【００２６】
計算配置を、畳み込みニューラル・ネットワーク（「ＣＮＮ」）などのニューラル・ネットワークの実施態様で使用することができる。ＣＮＮは、通常、複数の畳み込み層およびそれに続く少数の全結合層からなり、画像処理では、動作時間のほとんどは、３Ｄ畳み込み演算が入力活性化に適用され、出力活性化を作る畳み込み層の処理に費やされる。畳み込み層の例を図２に示し、図２は、ｃ×ｘ×ｙ入力活性化ブロック２１００およびＮ個のｃ×ｈ×ｋフィルタのセット２２００を示す。層は、ウィンドウ２３００などの入力活性化２４００のｃ×ｈ×ｋ部分配列（または「ウィンドウ」）によってこれらのＮ個のフィルタ（ｆ０、ｆ１、…、ｆＮ−１と表される）のそれぞれのドット積を作って、単一のｏｈ×ｏｋ出力活性化２４００を生成する。Ｎ個のフィルタおよび活性化ウィンドウの畳み込みは、Ｎ個のｏｈ×ｏｋ出力をもたらし、これが、次の層の入力に渡される。活性化ウィンドウおよびフィルタの畳み込みは、一定のストライドＳを有するスライディング・ウィンドウの形で行われる。全結合層は、フィルタおよび入力活性化が同一の次元を有する（ｘ＝ｈおよびｙ＝ｋ）畳み込み層として実施することができる。
【００２７】
１６ｂ固定小数点の活性化および重みを使用するものなどのデータ並列エンジンが、ニューラル・ネットワークの実施での使用に関して提案された（たとえば、これによって参照によって組み込まれる、Ｙ．Ｃｈｅｎ、Ｔ．Ｌｕｏ、Ｓ．Ｌｉｕ、Ｓ．Ｚｈａｎｇ、Ｌ．Ｈｅ、Ｊ．Ｗａｎｇ、Ｌ．Ｌｉ、Ｔ．Ｃｈｅｎ、Ｚ．Ｘｕ、Ｎ．Ｓｕｎ、およびＯ．Ｔｅｍａｍ、“Ｄａｄｉａｎｎａｏ：  Ａ  ｍａｃｈｉｎｅ−ｌｅａｒｎｉｎｇ  ｓｕｐｅｒｃｏｍｐｕｔｅｒ”、ｉｎ  Ｍｉｃｒｏａｒｃｈｉｔｅｃｔｕｒｅ（ＭＩＣＲＯ）、２０１４  ４７ｔｈ  Ａｎｎｕａｌ  ＩＥＥＥ／ＡＣＭ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ、６０９〜６２２頁、２０１４年１２月に開示されたＤａＤｉａｎＮａｏアクセラレータを参照されたい）。ＢＡＳＥエンジンと称するそのようなエンジンの例では、８つの内積ユニット（ＩＰ）が設けられ、そのそれぞれが、１６個の入力活性化および１６個の重みを入力として受け入れる。８個のＩＰが使用される場合に、１６個の入力活性化を、８個すべてのＩＰにブロードキャストすることができ、各ＩＰは、それ自体の１６個の重みを受け取ることができ、すべてのサイクルに、各ＩＰは、その１６個の対応する重みによって１６個の入力活性化を乗算し、これらを、１６個の３２ｂ入力加算器ツリーを使用して、単一の部分出力活性化に縮小する。部分結果を複数のサイクルにわたって累算して、最終的な出力活性化を生成することができる。活性化メモリが活性化を提供することができ、重みメモリが重みを提供することができる。
【００２８】
データ並列エンジンの変形形態を使用して、図３に示された例など、上で議論した計算配置を実施することができる。
【００２９】
図３Ａは、毎サイクルに２つの４ｂ活性化／重み対を乗算し、単一の４ｂ出力活性化を生成することを示す、ビット並列エンジン３１００の単純化された概略図である。４ｂおよび他のビット・サイズが、例としてこの説明の様々な部分で使用されるが、他の実施形態では他のサイズを使用することができる。エンジン３１００のスループットは、２つの４ｂ×４ｂ積毎サイクルである。
【００３０】
図３Ｂは、ビット直列エンジン３２００の単純化された概略図である（たとえば、上で参照によって組み込まれる、Ｓ．Ｓｈａｒｉｆｙ、Ａ．Ｄ．Ｌａｓｃｏｒｚ、Ｐ．Ｊｕｄｄ、およびＡ．Ｍｏｓｈｏｖｏｓ、“Ｌｏｏｍ：  Ｅｘｐｌｏｉｔｉｎｇ  ｗｅｉｇｈｔ  ａｎｄ  ａｃｔｉｖａｔｉｏｎ  ｐｒｅｃｉｓｉｏｎｓ  ｔｏ  ａｃｃｅｌｅｒａｔｅ  ｃｏｎｖｏｌｕｔｉｏｎａｌ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋｓ”、ＣｏＲＲ、ｖｏｌ．ａｂｓ／１７０６．０７８５３、２０１７年を参照されたい）。ビット並列エンジン３１００のスループットと一致するために、エンジン３２００は、すべてのサイクルに８つの入力活性化および８つの重みを処理し、３２個の１ｂ×１ｂ積を作る。活性化と重みとの両方がビット直列に処理されるので、エンジン３２００は、Ｐａ×Ｐｗサイクルで１６個の出力活性化をもたらし、ここで、ＰａおよびＰｗは、それぞれ活性化精度および重み精度である。その結果、エンジン３２００は、
【数３】
2021524082.tif 000005
だけエンジン３１００をしのぐ。図３Ｂに示されているように、活性化と重みとの両方を３ビットで表現できるので、図３Ａのエンジン３１００に対するエンジン３２００のスピードアップは、１．７８倍である。それでも、エンジン３２００は、いくつかの無効な項を処理し、たとえば、最初のサイクルでは、３２個の１ｂ×１ｂ積のうちの２７個は、０であり、したがって無効である。
【００３１】
図３Ｃは、活性化と重みとの両方が２の本質的なべき（または「１オフセット」）のベクトルとして表現されるエンジン３３００の単純化された概略図である。たとえば、Ａ０＝（１１０）は、その１オフセットのベクトルＡ０＝（２，１）として表現される。すべてのサイクルに、各処理要素（「ＰＥ」）は、入力活性化の４ｂ１オフセットおよび重みの４ｂ１オフセットを受け入れ、これらを加算して、出力活性化の対応する積項のべきを作る。エンジン３３００は、活性化および重みを項直列に処理するので、各ＰＥが出力活性化の積項を作るのにｔａ×ｔｗサイクルを要し、ここで、ｔａおよびｔｗは、対応する入力活性化および重みの１オフセットの個数である。このエンジンは、Ｔサイクル後に活性化および重みの１オフセットの次のセットを処理し、ここで、Ｔは、すべてのＰＥの中で最大のｔａ×ｔｗである。図３Ｃの例では、最大のＴは、ＰＥ（１，０）からのＡ０＝（２，１）およびＷ０１＝（２，１，０）の対に対応する６である。したがって、エンジン３３００は、６サイクル後に活性化および重みの次のセットを処理し始めることができ、図３Ａのビット並列エンジン３１００に対して２．６７倍のスピードアップを達成する。
【００３２】
本発明のいくつかの実施形態は、入力活性化と重みとの両方の必須のビットのみを処理することによって、入力活性化と重みとの積を作るのに必要な計算を最小化するように設計されている。いくつかの実施形態では、入力活性化および重みは、必須ビットのみを含む表現にオンザフライで変換され、各サイクルにつき必須ビットの１つの対すなわち１つの活性化ビットおよび１つの重みビットを処理する。
【００３３】
いくつかの実施形態では、ハードウェア・アクセラレータは、必須ビットが１オフセット、通常の位置表現、非固定小数点表現、または必須ビットの他の表現のどの形で処理されようと、必須ビットだけを処理するために提供され得る。
【００３４】
必須ビットが１オフセットの形で処理される実施形態では、アクセラレータは、各活性化または重みをその１オフセットのリスト（ｏｎ，…，ｏ０）として表現することができる。各１オフセットは、（符号、大きさ）対として表現される。たとえば、００１０（２）のブース符号化を有する活性化Ａ＝−２（１０）＝１１１０（２）は、（−，１）として表現され、Ａ＝７（１０）＝０１１１（２）は、（（＋，３），（−，０））として表現される。符号は、単一のビットを使用して符号化され得、たとえば、０が「＋」を表し、１が「−」を表す。
【００３５】
いくつかの実施形態では、重みＷ＝（Ｗｔｅｒｍｓ）および入力活性化Ａ＝（Ａｔｅｒｍｓ）は、それぞれ、（符号、大きさ）対、それぞれ（ｓｉ，ｔｉ）および（ｓ’ｉ，ｔ’ｉ）として表現され、積は、下の式（３）に示されているように計算される。
【数４】
2021524082.tif 000006
【００３６】
完全なＡ×Ｗ積を単一のサイクルで処理するのではなく、式（３）を実施すると、アクセラレータは、入力活性化Ａの単一のｔ’項および重みＷの単一のｔ項の各積を個別に処理する。これらの項は２のべきなので、その積も２のべきになる。したがって、式（３）を実施する実施形態は、まず対応する指数ｔ’＋ｔを加算することができる。単一の積が毎サイクルに処理される場合に、２ｔ’＋ｔ個の最終的な値を、復号器を介して計算することができる。複数の項対が毎サイクルに処理される場合に、実施形態は、例示的実施形態を参照して下でさらに説明するように、個々の２ｔ’＋ｔ個の積を計算するのに項対あたり１つの復号器を使用し、すべてを累算するのに効率的な加算器ツリーを使用することができる。
【００３７】
図４Ａは、ニューラル・ネットワークを実施するエンジンまたは計算配置内で使用され得るものなどの実施形態の例示的な処理要素（ＰＥ）４０００の概略図である。ＰＥ  ４０００は、６つのステップを実施し、各ステップは、処理副要素を使用して実施される。いくつかの実施形態では、下で説明するＰＥ  ４０００の副要素など、処理要素の様々な副要素を、様々なハードウェア実施態様およびソフトウェア実施態様を用いて合併しまたは分割することができる。処理要素４０００は、１６個の入力活性化Ａ０，…，Ａ１５によって１６個の重みＷ０，…，Ｗ１５を乗算するようにセット・アップされる。
【００３８】
第１の副要素は、指数副要素４１００であり、これは、１６個の４ｂ重み１オフセットｔ０，…，ｔ１５およびその１６個の対応する符号ビットｓ０，…，ｓ１５を、１６個の４ビット活性化１オフセットｔ’０，…，ｔ’１５およびその符号ｓ’０，…，ｓ’１５と一緒に受け入れ、１６個の１オフセット対積を計算する。すべての１オフセットが２のべきなので、その積も２のべきになる。したがって、１６個の活性化をその対応する重みによって乗算するために、ＰＥ  ４０００は、その１オフセットを加算して５ビット指数（ｔ０＋ｔ’０），…，（ｔ１５＋ｔ’１５）を生成し、１６個のＸＯＲゲートを使用して積の符号を判定する。
【００３９】
第２の副要素は、１ホット符号器４２００である。活性化および重みのｉ番目の対（ｉ∈｛０，…，１５｝）に関して、１ホット符号器４２００は、５ビット指数結果（ｔｉ＋ｔ’ｉ）をそれに対応する１ホット・フォーマット（１つの「１」ビットおよび３１個の「０」ビットを有する３２ビット数）に変換する５ｂ−３２ｂ復号器を介して
【数５】
2021524082.tif 000007
を計算する。復号器出力の第ｊ位置の単一の「１」ビットは、対応する積の符号（図４Ａに示されたＥｉｓｉｇｎ）に応じて＋２ｊまたは−２ｊのいずれかの値に対応する。
【００４０】
第３の副要素は、復号器出力値のヒストグラムの同等物を生成するヒストグラマ４３００である。ヒストグラマ４３００は、１ホット符号器４２００からの１６個の３２ｂ数を、３２個の２のべきがあるので２０，…，２３１の値に対応する３２個のバケットＮ０，…，Ｎ３１に累算する。１ホット符号器４２００からとられるこれらの数の符号Ｅｉｓｉｇｎも、考慮に入れられる。これに従って、各バケットは、対応する値を有した入力の個数のカウントを含む。各バケットが１６個の符号付き入力を有するので、結果のカウントは、−１６から１６までの範囲内であり、したがって、２の補数を使って６ビットで表現される。
【００４１】
第４および第５の副要素は、それぞれアライナ４４００およびリデューサ４５００である。図４Ａに示されているように、アライナ４４００は、カウントをその重みに従ってシフトし、すべてを３１＋６＝３７ｂに変換し、リデューサは、３２入力の加算器ツリーを使用して、３２個の６ｂカウントを最終出力に縮小する。
【００４２】
縮小の後の、第６の副要素は、累算副要素４６００である。累算副要素４６００は、リデューサ４５００から部分和を受け入れる。その後、累算副要素４６００は、アキュムレータ内に保持される任意の部分和と共に、新たに受け取った部分和を累算する。この形で、毎サイクルに１オフセットの１つの有効な対ずつ、完全なＡ×Ｗ積を複数のサイクルにわたって計算することができる。
【００４３】
いくつかの実施形態では、副要素設計は、処理される情報の構造をよりよく利用できる場合がある。たとえば、図４Ｂは、連結器、アライナ、およびリデューサ副要素４７００の概略図である。いくつかの実施形態では、ＰＥ  ４０００のアライナ４４００とリデューサ４５００との両方が、連結器４７１０、アライナ４７２０、およびリデューサ４７３０を含む連結器、アライナ、およびリデューサ副要素４７００によって置換される。
【００４４】
ＰＥ  ４０００のアライナ４４００およびリデューサ４５００を連結器、アライナ、およびリデューサ副要素４７００に置換することは、ＰＥ  ４０００に新たな連結器を追加するという効果を有し、その新たな連結器は、副要素４７１０である。新たな連結器の追加は、アライナおよびリデューサをより小さくより効率的にするなど、アライナおよびリデューサに対する変更、アライナ副要素４７２０を実施するためのアライナ４４００に対する反映する変更、およびリデューサ副要素４７３０を実施するためのリデューサ４５００に対する反映する変更をも可能にする。
【００４５】
３２個の６ｂカウントをシフトし、加算するのではなく、連結器、アライナ、およびリデューサ副要素４７００は、図４Ｂに示されているようにこれらをグループ化し、連結することによって、各カウントの相対重み付けを活用することによってコストおよびエネルギを削減することを目指す。たとえば、Ｎ０およびＮ６を加算するのではなく、これらは単純に連結される。というのは、これらが、「１」であるオーバーラップするビットを有しないことが保証されるからである。その後、連結された値は、６入力加算器ツリーを介して加算されて、累算副要素４６００に入力される３８ｂ部分和を作る。
【００４６】
連結器、アライナ、およびリデューサ副要素４７００は、アライナ４４００およびリデューサ４５００を使用して可能なものよりエネルギ効率および面積効率のよい加算器ツリーを実施し、ヒストグラマ４３００の出力が「１」であるオーバーラップするビットを有しない数のグループを含むという事実を利用する。
【００４７】
一例として、第６の６ｂ入力
【数６】
2021524082.tif 000008
を第０の６ｂ入力
【数７】
2021524082.tif 000009
と共に考慮されたい。アライナ４４００およびリデューサ４５００の加算器を使用すると、第６の入力Ｎ６は、６ビットだけシフトされなければならず、これは、結果の６つの最下位ビットとして６つの０を追加することになる。この場合に、６つシフトされたＮ６とＮ０との両方が１であるビットを有するビット位置はない。したがって、（Ｎ６  ＜＜  ６）とＮ０との加算は、図５Ａに連結ユニット５１００として概略的に示され、下の計算（４）に数値的に示されるように、Ｎ０の符号に基づいてＮ６およびＮ０または（Ｎ６−１）およびＮ０のいずれかを連結することと同等である。
【数８】
2021524082.tif 000010
１）
【数９】
2021524082.tif 000011
が０である場合には、
【数１０】
2021524082.tif 000012
２）そうではなく、
【数１１】
2021524082.tif 000013
が１である場合には、
【数１２】
2021524082.tif 000014
【００４８】
したがって、このプロセスは、（ｉ  ＭＯＤ  ６）が等しいＮｉをグループ化することによって、再帰的に適用される。すなわち、第ｉの入力は、第（ｉ＋６）、第（ｉ＋１２）などの入力と連結される。図５Ｂの例の連結ユニット５２００は、（ｉ  ＭＯＤ  ６）＝０であるＮｉのスタックとして再帰的連結を実施するが、他の実施形態では他の実施態様が可能である。上で説明した１６積ユニットに関して、積は、下の描写（５）の６つのグループ化されたカウントを作る。
【数１３】
2021524082.tif 000015
【００４９】
最終的な部分和は、下の式（６）によって与えられる。
【数１４】
2021524082.tif 000016
【００５０】
ハードウェア・アクセラレータ・タイル６０００を、図６に示す。タイル６０００は、図４のＰＥ  ４０００など、すべてのサイクルで入力活性化の１６個のウィンドウおよびＫ＝８個のフィルタを処理するＰＥの２Ｄ配列である。同一の列に沿ったＰＥは、同一の入力活性化を共有し、同一の行に沿ったＰＥは、同一の重みを受け取る。すべてのサイクルに、ＰＥ（ｉ，ｊ）は、第ｊのウィンドウからの各入力活性化から次の１オフセットを受け取り、第ｉのフィルタからの対応する重みの１オフセットによってこれを乗算する。タイル６０００は、すべてのＰＥが１６個の活性化およびそれに対応する重みの現在のセットの項の処理を終了した時に、活性化および重みの次のセットの処理を開始する。
【００５１】
タイル６０００などのタイルが、活性化と重みとの両方を項直列に処理するので、ＢＡＳＥ構成と一致するために、タイルは、より多数のフィルタまたはウィンドウを同時に処理しなければならない。ワースト・ケースで、各活性化および重みは１６個の項を有し、したがって、タイル６０００などのタイルは、ＢＡＳＥのピーク計算帯域幅と一致するために８×１６＝１２８個のフィルタを並列に処理しなければならない。しかし、図１に示されているように、１６倍多数のフィルタを用いると、タイル６０００などのタイルを使用するいくつかの例の実施態様の性能は、ＢＡＳＥ性能より２桁以上改善される。さらに、実施形態は、変更されたブース符号化を使用し、項のワースト・ケースを重みまたは活性化あたり８つに削減することができる。
【００５２】
図７Ａおよび図７Ｂは、その性能が図８で比較される複数のハードウェア・アクセラレータ構成の概略図である。図７Ｂに示されているように、ＢＡＳＥ構成７１００は、約２０００本のワイヤを使用して、１フィルタあたり１６個の重みを有する８つのフィルタを処理することができる。図７Ａに示されているように、タイル６０００などのタイルを使用して、構成７２００は、１２８本のワイヤを使用して８つのフィルタを処理することができ、構成７３００は、２５６本のワイヤを使用して１６個のフィルタを処理することができ、構成７４００は、５１２本のワイヤを使用して３２個のフィルタを処理することができ、構成７５００は、約１０００本のワイヤを使用して６４個のフィルタを処理することができる。図７の各構成で、活性化ワイヤの個数は、２５６にセットされる。他の実施形態では、フィルタおよび重みワイヤの個数を固定し、活性化ウィンドウおよび活性化ワイヤの個数を増やすなど、他の構成を使用することができる。
【００５３】
図８は、図７に示された構成７１００から７５００の性能を比較する。図８の棒グラフは、６つのモデルのそれぞれの４つの棒グラフのセットとして構成７１００に対する構成７２００から７５００の相対性能改善を示し、６つのモデルは、棒の各セットの下で識別される。構成７２００の相対改善は、各セットの左端の棒として示され、構成７３００の相対改善は、各セットの左から２番目の棒として示され、構成７４００の相対改善は、各セットの左から３番目の棒として示され、構成７５００の相対改善は、各セットの右端の棒として示されている。
【００５４】
本発明の実施形態のシミュレーションは、そのような実施形態が、実行時間、エネルギ効率、および面積効率の改善を与えることを示す。カスタム・サイクル精密シミュレータが、試験される実施形態の実行時間をモデル化するのに使用された。設計のポスト・レイアウト・シミュレーションが、エネルギ結果および面積結果を試験するのに使用された。Ｓｙｎｏｐｓｙｓ  Ｄｅｓｉｇｎ  Ｃｏｍｐｉｌｅｒ（たとえば、これによって参照によって組み込まれる、Ｓｙｎｏｐｓｙｓ、“Ｄｅｓｉｇｎ  Ｃｏｍｐｉｌｅｒ”、ｈｔｔｐ：／／ｗｗｗ．ｓｙｎｏｐｓｙｓ．ｃｏｍ／Ｔｏｏｌｓ／Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ／ＲＴＬＳｙｎｔｈｅｓｉｓ／ＤｅｓｉｇｎＣｏｍｐｉｌｅｒ／Ｐａｇｅｓを参照されたい）が、ＴＳＭＣ  ６５ｎｍライブラリを用いる設計を合成するのに使用された。レイアウトは、合成結果を使用して、Ｃａｄｅｎｃｅ  Ｉｎｎｏｖｕｓ（たとえば、これによって参照によって組み込まれる、Ｃａｄｅｎｃｅ、“Ｅｎｃｏｕｎｔｅｒ  ｒｔｌ  ｃｏｍｐｉｌｅｒ”、ｈｔｔｐｓ：／／ｗｗｗ．ｃａｄｅｎｃｅ．ｃｏｍ／ｃｏｎｔｅｎｔ／ｃａｄｅｎｃｅｗｗｗ／ｇｌｏｂａｌ／ｅｎ＿ＵＳ／ｈｏｍｅ／ｔｒａｉｎｉｎｇ／ａｌｌ−ｃｏｕｒｓｅｓ／８４４４１．ｈｔｍｌを参照されたい）を用いて作られた。Ｉｎｔｅｌ  ＰＳＧ  ＭｏｄｅｌＳｉｍが、パワー・ナンバーを報告するためにデータ駆動アクティビティ・ファクタを生成するのに使用された。すべての設計のクロック周波数は、１ＧＨｚにセットされた。ＡＢｉｎ  ＳＲＡＭバッファおよびＡｂｏｕｔ  ＳＲＡＭバッファが、ＣＡＣＴＩ（たとえば、これによって参照によって組み込まれる、Ｎ．ＭｕｒａｌｉｍａｎｏｈａｒおよびＲ．Ｂａｌａｓｕｂｒａｍｏｎｉａｎ、“Ｃａｃｔｉ  ６．０：  Ａ  ｔｏｏｌ  ｔｏ  ｕｎｄｅｒｓｔａｎｄ  ｌａｒｇｅ  ｃａｃｈｅｓ”、２０１５年を参照されたい）を用いてモデル化され、活性化メモリおよび重みメモリが、Ｄｅｓｔｉｎｙ（たとえば、これによって参照によって組み込まれる、Ｍ．Ｐｏｒｅｍｂａ、Ｓ．Ｍｉｔｔａｌ、Ｄ．Ｌｉ、Ｊ．Ｖｅｔｔｅｒ、およびＹ．Ｘｉｅ、“Ｄｅｓｔｉｎｙ：  Ａ  ｔｏｏｌ  ｆｏｒ  ｍｏｄｅｌｉｎｇ  ｅｍｅｒｇｉｎｇ  ３ｄ  ｎｖｍ  ａｎｄ  ｅｄｒａｍ  ｃａｃｈｅｓ”、ｉｎ  Ｄｅｓｉｇｎ，Ａｕｔｏｍａｔｉｏｎ  Ｔｅｓｔ  ｉｎ  Ｅｕｒｏｐｅ  Ｃｏｎｆｅｒｅｎｃｅ  Ｅｘｈｉｂｉｔｉｏｎ（ＤＡＴＥ）、２０１５、１５４３〜１５４６頁、２０１５年３月を参照されたい）を用いてｅＤＲＡＭとしてモデル化された。
【００５５】
図８は、示されたネットワーク・アーキテクチャを使用して比較された、表１の１００％相対ＴＯＰ−１正確性精度プロファイルを有する畳み込み層に関するＢＡＳＥ構成７１００に対する相対的な構成７２００から７５００の性能を示す（たとえば、これによって参照によって組み込まれる、Ｙａｎｇ、Ｔｉｅｎ−Ｊｕ、およびＣｈｅｎ、Ｙｕ−ＨｓｉｎおよびＳｚｅ、Ｖｉｖｉｅｎｎｅ、“Ｄｅｓｉｇｎｉｎｇ  Ｅｎｅｒｇｙ−Ｅｆｆｉｃｉｅｎｔ  Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ  ｕｓｉｎｇ  Ｅｎｅｒｇｙ−Ａｗａｒｅ  Ｐｒｕｎｉｎｇ”、ｉｎ  ＩＥＥＥ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ｖｉｓｉｏｎ  ａｎｄ  Ｐａｔｔｅｒｎ  Ｒｅｃｏｇｎｉｔｉｏｎ（ＣＶＰＲ）、２０１７年を参照されたい）。
【表１】
2021524082.tif 000017
【００５６】
いくつかの実施形態では、さらなる利益が、減らされた精度を有するように設計されたモデル、「１」であるビットの個数を減らす代替数値表現を使用するモデル、または増やされた重みもしくは活性化スパーシティを有するモデルなど、ある種のモデルを有する本発明の実施形態の使用から生じる。しかし、本発明の実施形態は、密ネットワークと疎ネットワークとの両方をターゲットにし、必須項だけを処理することによって性能を改善する。
【００５７】
図８に示されているように、平均して、構成７２００は、２倍を超えて構成７１００をしのぎ、疎ネットワークであるＡｌｅｘＮｅｔ−Ｓｐａｒｓｅに関して、構成７１００に対して３倍のスピードアップを達成する。図８に示されているように、構成７３００から７５００は、構成７１００に対してそれぞれ４．８倍、９．６倍、および１８．３倍のスピードアップをもたらす。
【００５８】
構成７１００に対する相対的な構成７２００から７５００のエネルギ効率を、下の表２に示す。タイル６０００などのタイルを使用する構成は、より少ないオンチップ・メモリを必要とし、重みおよび活性化ごとにより少ないビットを通信し、全体的なエネルギ効率は、一般により高い。
【表２】
2021524082.tif 000018
【００５９】
ポスト・レイアウト測定が、構成７１００から７５００の面積を測定するのに使用された。構成７２００は、構成７１００の面積の１．７８倍を必要とし、２．４倍の平均スピードアップを達成する。７３００の面積オーバーヘッドは３．５６倍であり、７４００の面積オーバーヘッドは７．０８倍であり、７５００の面積オーバーヘッドは１４．１５倍であるが、構成７１００に対する実行時間改善は、それぞれ平均して４．２倍、８．４倍、および１６倍である。したがって、タイル６０００などのタイルは、構成７１００よりよい性能対面積スケーリングを提供する。
【００６０】
タイルまたはアクセラレータによって処理される活性化／重み対の個数を変更することができる。一部のプロセッサ要素は、毎サイクルに、すべてが同一の出力活性化に寄与する１６個の活性化／重み対を処理する。一部のプロセッサ要素は、毎サイクルに１６個以外の対を処理する。一部のアクセラレータ実施形態は、同一のまたは異なる構成の複数のタイルまたはプロセッサ要素を組み合わせる。図９は、８×４グリッドに編成された３２個のプロセッサ要素９１００を含むタイル９０００の概略図である。入力スクラッチパッドすなわち小さいローカル・メモリが、活性化入力および重み入力を提供し、活性化パッド９２００が、活性化入力を提供し、重みパッド９３００が、重み入力を提供する。いくつかの層では、活性化パッド９２００が重み入力を提供し、重みパッド９３００が活性化入力を提供する。第３のスクラッチパッドであるストレージ・パッド９４００は、部分的なまたは完全な出力ニューロンを記憶するのに使用される。
【００６１】
バス９１１０が、処理要素９１００をストレージ・パッド９４００に接続するために処理要素９１００の行ごとに設けられる。部分和が、一時に処理要素の１列ずつ、プロセッサ要素グリッドから読み出され、アキュムレータ９５００内に累算され、その後、ストレージ・パッド９４００に書き込まれる。共通バス９８００を介して処理要素グリッドを排出するのに十分な時間がある。活性化／重み対入力の単一のグループの処理さえ、通常は複数のサイクルにわたって実行され、通常、部分和を読み出す必要が生じる前に、複数の活性化／重み対グループが処理され得るので、これは、処理要素の他の列がまだその対応する活性化および重みを処理している間に、処理要素の各列が、その出力を排出するために共通バス９８００に順次アクセスするのに十分な時間を提供する。
【００６２】
タイル９０００は、入力スクラッチパッドと処理要素グリッドとの間に符号器９６００を含み、１つの符号器が、各入力スクラッチパッドに対応する。符号器９６００は、値を一連の項に変換する。オプションのコンポーザ列９７００が、８ｂ処理要素を維持しながら１６ｂ算術の空間構成のサポートを提供する。タイル９０００は、空間および時間での活性化および重みの再利用を可能にし、タイル９０００にメモリ階層の残りから活性化および重みを供給するのに必要な接続またはワイヤの個数を最小化する。
【００６３】
たとえば、タイル９０００は、毎サイクルに活性化の４つのウィンドウおよび８つのフィルタを進めることができる。この場合に、重みパッド９３００は、フィルタあたり１６個の重みを供給し、活性化パッド９２００は、ウィンドウあたり１６個の対応する活性化を供給する。同一の列に沿った処理要素９１００は、同一の入力活性化を共有し、同一の行に沿った処理要素９１００は、同一の入力重みを共有する。各ＰＥが毎サイクルに活性化の単一の項および重みの単一の項を処理できるので、符号器９６００は、毎サイクルに１項の速度で入力値を項に変換する。各サイクルに、行「ｉ」列「ｊ」の処理要素は、ｊ番目のウィンドウからの入力活性化をｉ番目のフィルタからの重みによって乗算する。すべての活性化項が現在の重み項を乗算された後に、次の重み項が作られる。処理要素は、すべての対応する活性化項をもう一度サイクルして、これらに新しい重み項を乗算する。すべての重み項および活性化項が処理された後に、積が完成する。３つの活性化項および４つの重み項がある場合には、少なくとも１２サイクルが必要である。合計で、タイル９０００は、同時に４つのウィンドウ、１ウィンドウあたり１６個の活性化、および８つのフィルタすなわち、４×１６×８個の活性化／重み対を処理する。
【００６４】
実際には、項の個数は、重み値および活性化値にまたがって変化し、その結果、いくつかの処理要素が、その積を作るために他の処理要素より多数のサイクルを必要とする。タイル９０００は、すべての現在処理されている活性化／重み対を暗黙のうちにグループとして扱い、異なるグループにまたがって処理を同期化し、タイル９０００は、すべての処理要素が現在のグループのすべての項の処理を終了した時に、次のグループの処理を開始する。しかし、これは、多少のスピードアップ可能性を放棄する。
【００６５】
いくつかの実施形態では、計算は、１６個の独立のグループで進行することを許される。たとえば、第１の同期化グループは、Ａ０，Ａ１６，Ａ２４，…，Ａ４８および重みＷ０，Ｗ１６，…，Ｗ１１２を含み、第２のグループは、Ａ１，Ａ１７，Ａ２５，…，Ａ４９および重みＷ１，Ｗ１７，…，Ｗ１１３を含み、残りの１４個のグループに関しても同様である。グループがグリッドにわたって櫛様パターンを物理的に形成するので、この例を櫛同期化（ｃｏｍｂ  ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ）と称する。ブース符号器９６００の入力のバッファのセットを使用して、グループがお互いの前でスライドすることを可能にすることができる。
【００６６】
一部のニューラル・ネットワークは、いくつかの層のみに関して１６ｂのデータ幅または精度を必要とした。一部のニューラル・ネットワークは、活性化のみに関して１６ｂのデータ幅または精度を必要とし、少数の値が、８ｂより多くを必要とする。いくつかの実施形態では、タイルは、すべての層およびすべての値にまたがって要求されるワーストケース・データ幅をサポートする。しかし、いくつかの実施形態では、タイルは、空間、時間、または空間と時間との両方でのデータ型構成をサポートする。
【００６７】
たとえば、タイル設計は、活性化およびオプションで重みに関して、８ｂ処理要素を介する１６ｂ計算を可能にすることができる。ただし、他のビット幅を使用することもできる。タイル設計は、その層の一部のみに関して８ｂより多くを必要とするニューラル・ネットワークに有用である可能性がある。
【００６８】
空間構成タイルを、図１０に示す。タイル１００００は、複数のまだ変更されていない８ｂ処理要素を使用する。空間構成タイルは、１６ｂ値を有する層を処理する時には必ず、余分な処理要素を必要とする。タイル１００００は、８ｂおよび８ｂ、１６ｂおよび８ｂ、ならびに１６ｂおよび１６ｂという重みと活性化との組合せをサポートするように拡張するために、８ｂ処理要素の２×２グリッド１０１００である。正規化されたピーク計算スループットは、それぞれ１、１／２、および１／４である。１６ｂおよび８ｂの計算をサポートするために、活性化項は、下位バイトおよび上位バイトに対応する項に分割され、この下位バイトおよび上位バイトは、２つの隣接する処理要素（「ＰＥ」）列によってそれぞれ処理される。
【００６９】
図１０に示された例では、ＰＥ（０，０）およびＰＥ（０，１）は、Ａ０およびＡ１の下位バイトを処理し、ＰＥ（１，０）およびＰＥ（１，１）は、上位バイトを処理する。行０および１は、それぞれ、前と同様にフィルタ０および１を処理する。処理は、累算副要素４６００がデータ・ブロックの上位バイトおよび下位バイトの和を累算し終えるまで進行する。最後に、部分和レジスタが、一時に１列ずつ排出される。コンポーザ列１０２００が、グリッドの出力に追加される。列０の部分和が読み出される時には、その部分和は、それぞれの一時レジスタ（「ｔｍｐ」）１０３００に取り込まれる。次のサイクルに、列１の部分和が、出力バスに現れる。コンポーザ１０２００の行ごとの加算器が、２つの半分を加算し、最終的な部分和を作る。この例は、２×２グリッドを示すが、この概念は、より大きい処理要素グリッドに変更なしであてはまる。グリッドが、一時に１列ずつ部分和を出力するのに行ごとの共通バスを使用するので、単一のコンポーザ列で十分である。図示されていないが、コンポーザは、新しいセットを導入するのではなく累算列加算器を再利用することができる。一般に、１６ｂ活性化のサポートは、２つの隣接する行ごとのプロセッサ要素を必要とする。
【００７０】
タイル１００００は、重みを２つの行に沿って分割することによって、１６ｂ重みをもサポートする。これは、下位バイトおよび上位バイトの４つの組合せのうちの１つにそれぞれ割り当てられた４つの処理要素を必要とする。図１０では、ＰＥ（０，０）、ＰＥ（１，０）、ＰＥ（０，１）、およびＰＥ（１，１）が、それぞれ（ＡＬ，ＷＬ）、（ＡＨ，ＷＬ）、（ＡＬ，ＷＨ）、および（ＡＨ，ＷＤ）を計算する。コンポーザ列内の第２レベル加算器が、適当に行１を０パディングすることによって行からの結果を組み合わせる世話をする。
【００７１】
時間構成タイルを使用することもできる。時間構成タイルは、時間構成処理要素を使用する。時間構成処理要素の実施形態を、図１１に示す。処理要素１１０００は、ネイティブ１６ｂ処理要素より低い面積コストで、８ｂ演算と１６ｂ演算との両方をサポートする。時間構成タイルは、１６ｂ値を処理しなければならない時には必ず、余分なサイクルを必要とする。
【００７２】
処理要素１１０００は、上位バイトおよび下位バイトに属する項への活性化および重みの項の分割と、これらの項の時間的に別々の処理とを可能にする。前ステージ加算器からの出力は、適当に０をパディングされ、拡張精度部分和に加算される。処理される活性化項および重み項のソースに基づく３つのケースすなわち、両方が下位バイトに属する（Ｌ／Ｌ）、両方が上位バイトに属する（Ｈ／Ｈ）、または一方が上位バイトに属し、他方が下位バイトに属する（Ｈ／ＬまたはＬ／Ｈ）がある。マルチプレクサ１１１００が、適当にパディングされた値を選択する。マルチプレクサの選択信号を、タイル内のすべての処理要素の間で共有することができる。８ｂ値の処理は、オーバーヘッドをこうむらない。１６ｂ活性化および８ｂ重み（またはその逆）の処理は、１つの余分なサイクルを必要とするが、１６ｂの重みおよび活性化の処理は、３つの余分なサイクルを必要とする。しかし、この時間オーバーヘッドを支払わなければならないのは、処理要素１１０００を有するタイルに関して実際に１６ｂを必要とする値がある時に限られる。
【００７３】
時間構成タイルは、すべての層に関してリソースを予約せず、８ｂより多くを必要とする値は少数である可能性があるので、空間構成タイルより、処理要素あたりの高いスループットを達成すると期待することができる。しかし、時間構成タイルは、より大きい処理要素と、ブース符号器でのより洗練された制御とを必要とする。一実施形態では、１６ｂへの時間拡張が可能な８ｂ処理要素は、ネイティブ１６ｂ処理要素と比較して、２２％小さい。いくつかの実施形態では、重みに関する空間構成および活性化に関する時間構成など、空間設計と時間設計との組合せを使用することができる。
【００７４】
いくつかのネットワークで、いくつかの層（特に最初の層）に関して、プロファイリングによって判定される必要なデータ型は、時々８ｂをわずかに超える。たとえば、９ｂまたは１０ｂが必要であるとわかる。いくつかの実施形態では、これらの層またはネットワークの実行は、未変更の８ｂ処理要素およびブース符号器への些細な変更を用いて可能である。たとえば、第９ビットを必要とする値の処理の場合すなわち、そのビットが１である場合である。８ｂ処理要素は、＋２７までの計算だけをサポートするので、ブース符号器は、＋２７を２回送ることによって、効果的に＋２８を合成することができる。重要なことに、これは、第９ビットが１である必要がある値（９ｂではすべてが負の値）に関してのみ必要である。追加の利益として、この柔軟性は、ある種のネットワークに関して量子化をより簡単にする。
【００７５】
上で提示した実施形態は、値間ビットレベル並列性を活用する。しかし、いくつかの実施形態は、値内ビットレベル並列性を活用し、それを行うために、ビット並列ハードウェアとは異なって活用する。これが可能であるのは、値の項が時間的ではなく空間的に処理される場合であっても処理要素が正しい結果を作るからである。たとえば、２つの入力レーンが、重みごとに割り当てられ、ブース符号器が、毎サイクルに２つまでの項を出力するように変更される場合である。これは、アクセラレータが、値の中のビットレベル並列性を活用することをも可能にし、これは、同期化オーバーヘッドを削減するのに有用である可能性がある。値の中のビットレベル並列性の活用は、それぞれすべての列、行、または行と列との両方に充てんするための重み、活性化、または活性化と重みとの両方の十分な再利用がない場合に、層の利用を改善するのにも有用である可能性がある。これは、たとえば、重みの再利用がない全結合層にあてはまる。この最適化は、全結合層が通常はメモリに束縛されるので、エネルギ効率を助ける。これは、奥行き分離可能な畳み込み層にも有用である。値の中のビットレベル並列性の活用は、すべての行を充てんするのに十分なフィルタがない時にも有用である可能性がある。これは、従来のビット並列ユニットによって活用される値内ビットレベル並列性とは異なり、従来のビット並列ユニットは、値に関わりなくすべてのビットを処理するが、本アクセラレータの実施形態は、有効なビットだけを処理する。
【００７６】
空間構成可能な処理要素を有する８ｂアクセラレータの性能と、ネイティブ１６ｂ処理要素を有するアクセラレータの性能とを比較した。８ｂ空間構成可能処理要素は、８ｂおよび１６ｂの重みおよび活性化をサポートし、８ｂアクセラレータは、１６ｂアクセラレータと同一の計算面積を使用するようにスケール・アップされた。試験は、ＧｏｏｇｌｅＮｅｔ−ＳモデルおよびＲｅｓｎｅｔ５０−Ｓモデルを使用して行われた。８ｂ空間構成可能処理アクセラレータは、８ｂを越える精度を要求した層だけに関して必要とされた複数の処理要素を使用した。８ｂ空間構成可能処理アクセラレータは、ネイティブ１６ｂアクセラレータより高速であり、ＧｏｏｇｌｅＮｅｔ−Ｓに関して１．４倍、Ｒｅｓｎｅｔ５０−Ｓに関して１．２倍高速であった。
【００７７】
他の実施形態では、重みワイヤの増加した個数など、他の構成を使用することができる。いくつかの実施形態では、フィルタの個数の増加のみによるスケール・アップによって平均化されたフィルタ間アンバランスに起因するなど、性能が劣線形に改善する。いくつかの実施形態では、同時に処理される活性化の個数を、重みの個数の増加の代わりにまたはこれに加えて増やすことができる。最小限のバッファリング構成との構成設計の組合せ（たとえば、上で参照によって組み込まれた、Ｊ．Ａｌｂｅｒｉｃｉｏ、Ａ．Ｄｅｌｍaｓ、Ｐ．Ｊｕｄｄ、Ｓ．Ｓｈａｒｉｆｙ、Ｇ．Ｏ’Ｌｅａｒｙ、Ｒ．Ｇｅｎｏｖ、およびＡ．Ｍｏｓｈｏｖｏｓ、“Ｂｉｔ−ｐｒａｇｍａｔｉｃ  ｄｅｅｐ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋ  ｃｏｍｐｕｔｉｎｇ”、ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ５０ｔｈ  Ａｎｎｕａｌ  ＩＥＥＥ／ＡＣＭ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｍｉｃｒｏａｒｃｈｉｔｅｃｔｕｒｅ、ＭＩＣＲＯ−５０’１７、３８２〜３９４頁、２０１７年を参照されたい）も、活性化にまたがるアンバランスを低減することができる。他の実施形態では、活性化メモリおよび重みメモリを、タイルに沿って分散させ、またはタイルのすべてもしくはグループの間で共有することができる。
【００７８】
本発明の実施形態は、圧縮手法（たとえば、これによって参照によって組み込まれる、Ａ．Ｄｅｌｍａｓ、Ｓ．Ｓｈａｒｉｆｙ、Ｐ．Ｊｕｄｄ、Ｍ．Ｎｉｋｏｌｉｃ、およびＡ．Ｍｏｓｈｏｖｏｓ、“Ｄｐｒｅｄ：  Ｍａｋｉｎｇ  ｔｙｐｉｃａｌ  ａｃｔｉｖａｔｉｏｎ  ｖａｌｕｅｓ  ｍａｔｔｅｒ  ｉｎ  ｄｅｅｐ  ｌｅａｒｎｉｎｇ  ｃｏｍｐｕｔｉｎｇ”、ＣｏＲＲ、ｖｏｌ．ａｂｓ／１８０４．０６７３２、２０１８年を参照されたい）と互換であり、実用的なオフチップ・メモリ構成およびインターフェースと共に良好に動作すると期待することができる。
【００７９】
上の説明および関連する図面の諸部分が、ハードウェアの使用を説明しまたは暗示する場合があるが、いくつかの実施形態は、ＧＰＵ（グラフィック処理ユニット）などのプロセッサ上にソフトウェアでエミュレートされ得、同様の性能強化を生じることができることに留意されたい。さらに、様々な構成要素を、専用とし、共有し、分散させ、または他の構成要素と組み合わせることができ、たとえば、活性化表現および重み表現を供給する活性化メモリおよび重みメモリを、様々な実施形態で専用とし、共有し、分散させ、または組み合わせることができる。
【００８０】
本発明の様々な実施形態を詳細に説明した。上で説明した最良の態様の変更またはこれに対する追加を、本発明の性質、趣旨、または範囲から逸脱せずに行うことができるので、本発明は、これらの詳細に意限定されるのではなく、添付の特許請求の範囲のみによって限定される。
【図１】
2021524082.tif 000019
【図２】
2021524082.tif 000020
【図３Ａ】
2021524082.tif 000021
【図３Ｂ】
2021524082.tif 000022
【図３Ｃ】
2021524082.tif 000023
【図４Ａ】
2021524082.tif 000024
【図４Ｂ】
2021524082.tif 000025
【図５Ａ】
2021524082.tif 000026
【図５Ｂ】
2021524082.tif 000027
【図６】
2021524082.tif 000028
【図７Ａ】
2021524082.tif 000029
【図７Ｂ】
2021524082.tif 000030
【図８】
2021524082.tif 000031
【図９】
2021524082.tif 000032
【図１０】
2021524082.tif 000033
【図１１】
2021524082.tif 000034
【国際調査報告】
2021524082.tif 000035
2021524082.tif 000036
2021524082.tif 000037