JP2021528764A - ニューラルプロセッサ - Google Patents

ニューラルプロセッサ Download PDF

Info

Publication number
JP2021528764A
JP2021528764A JP2020571552A JP2020571552A JP2021528764A JP 2021528764 A JP2021528764 A JP 2021528764A JP 2020571552 A JP2020571552 A JP 2020571552A JP 2020571552 A JP2020571552 A JP 2020571552A JP 2021528764 A JP2021528764 A JP 2021528764A
Authority
JP
Japan
Prior art keywords
ifm
register
tile
multiplier
activation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2020571552A
Other languages
English (en)
Other versions
JP7337103B2 (ja
Inventor
イリア オフシアンニコフ,
アレデスタニ, アリ シャフィ
ジョゼフ ハッソン,
レイ ワァン,
セフォン リ,
ジュンホ ソン,
ジュンウ ジャン,
イビン ミシェル ワン,
ユエチョン リ,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of JP2021528764A publication Critical patent/JP2021528764A/ja
Application granted granted Critical
Publication of JP7337103B2 publication Critical patent/JP7337103B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/002Image coding using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Neurology (AREA)
  • Multimedia (AREA)
  • Complex Calculations (AREA)
  • Testing Of Coins (AREA)

Abstract

ニューラルプロセッサ。いくつかの実施形態では、プロセッサは第1のタイル(tile)、第2のタイル、メモリ、及びバスを含む。バスはメモリ、第1のタイル、及び第2のタイルに接続される。第1のタイルは、第1のウェイト(weight)レジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含み得る。活性化バッファは、第1の乗算器と接続された第1のキュー(queue)、及び第2の乗算器と接続された第2のキューを含むように構成される。第1のキューは、第1のレジスタ及び前記第1のレジスタと隣接した第2のレジスタを含み、第1のレジスタは、第1のキューの出力レジスタであり得る。第1のタイルは、第1の状態では、第1の乗算器で、第1のウェイトに第1のキューの前記出力レジスタからの活性化を乗じ、そして第2の状態では、第1の乗算器で、第1のウェイトに第1のキューの第2のレジスタからの活性化を乗じるように構成される。
【選択図】 図1A

Description

本開示の実施形態の1つ以上の態様は、プロセッシング回路に関し、特に、乗算及び加算の組み合わせを実行するためのプロセッシング回路に関する。
ニューラルネットワークは、演算上、多くの乗算及び加算を伴うテンソル演算(例えば、テンソル乗算及びコンボリューションの)を実行され得る。
汎用中央プロセッシング装置、あるいは、その上にグラフィックスプロセッシング装置(このようなタスクに適してもよい)により実行される、これらの演算の実行は、比較的遅く、演算当たりのエネルギーコストが比較的高くなる可能性がある。
特に、電力予算を厳しく制限する小型装置(例えば、携帯電話、ハンドヘルド装置)において、汎用中央プロセッシング装置やグラフィックスプロセッシング装置の使用に関連する消費電力が重大な欠点になる可能性がある。
したがって、ニューラルネットワーク計算のための改善されたプロセッシング回路の開発が課題となっている。
米国特許出願公開第2017316312号明細書 米国特許出願公開第2017357891号明細書 米国特許出願公開第2018032859号明細書 米国特許出願公開第2018046906号明細書 米国特許出願公開第2018046913号明細書
本発明は、上記従来のニューラルネットワーク計算技術に鑑みてなされたものであって、本発明の目的は、向上したテンソル演算の速度と減少した消費電力を有するニューラルプロセッサを提供することにある。
上記目的を達成するためになされた本発明の一実施形態によれば、プロセッサが提供される。プロセッサは、第1のタイル(tile)、第2のタイル、メモリ、及びバスを含む。前記バスは、前記メモリ、前記第1のタイル、及び前記第2のタイルに接続される。前記バスは、前記メモリ、前記第1のタイル、及び前記第2のタイルに接続される。前記第1のタイルは、第1のウェイト(weight、重み)レジスタ及び第2のウェイトレジスタ、第1の乗算器及び第2の乗算器、並びに活性化バッファを含む。前記第1のタイルは、ウェイトカーネルにより、活性化配列のコンボリューションを実行するように構成される。
前記コンボリューションを実行する方法は、活性化配列の第1のサブアレイと前記カーネルとのテンソル積を形成する段階と、活性化アレイの第2のサブアレイと前記カーネルとのテンソル積(Tensor Product)を形成する段階と、活性化アレイの第3のサブアレイと前記カーネルとのテンソル積を形成する段階とを順に備える。前記第2のサブアレイは、第1の方向にn個の要素により前記第1のサブアレイからオフセットされ、nは正の整数である。前記第3のサブアレイは、前記第1の方向に垂直である第2の方向に1つの要素により前記第2のサブアレイからオフセットされる。
いくつかの一実施形態によれば、前記第3のサブアレイを用いて前記カーネルのテンソル積を形成した後、前記コンボリューションを実行する方法は、前記活性化アレイの第4のサブアレイと前記カーネルとのテンソル積を形成する段階と、活性化アレイの第5のサブアレイと前記カーネルとのテンソル積を形成する段階とを順に備える。第4のサブアレイは、第1の方向に反対である第3の方向にm個のアレイ要素により第3のサブアレイからオフセットされる。mは正の整数である。第5のサブアレイは、第2の方向に1つのアレイ要素により第4のサブアレイからオフセットされる。
いくつかの実施形態によれば、mはnと同じである。
いくつかの実施形態によれば、nは1と同じである。
いくつかの実施形態によれば、前記第1のサブアレイと前記カーネルとの積を形成する段階後に、前記コンボリューションを実行する方法は、活性化アレイの(n−1)個のそれぞれのサブアレイとカーネルとの(n−1)積(products)を形成する段階を順にさらに備える。(n−1)積の中のk番目の積のサブアレイは、1番目の方向で(k+1)アレイ要素により1番目のサブアレイからオフセットされる。
いくつかの実施形態によれば、前記プロセッサは、前記活性化バッファに接続されて、活性化バッファに活性化を供給するように構成されるキャッシュをさらに含む。前記キャッシュは、「H+(H+n)×(W−1)−1」の活性化を格納するのに十分なサイズを有する。Hは、第1の方向のカーネルのサイズであり、Wは、第2の方向のカーネルのサイズである。
いくつかの実施形態によれば、前記活性化バッファは、第1の乗算器に接続される第1のキュー(queue)、及び第2の乗算器に接続される第2のキューを含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態において、第1の乗算器により第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態において、第1の乗算器により第1のウェイトと第1のキューの第2のレジスタからの活性化とを乗じるように、さらに構成される。
いくつかの実施形態によれば、前記第2の状態では、前記第1のキューの出力レジスタは、ゼロ(zero)を含む。
いくつかの実施形態によれば、前記プロセッサは、第1の加算器をさらに含む。前記第1の加算器は、前記第1の状態では、前記第1の乗算器の出力、及び前記第2の乗算器の出力に接続され、前記第1の乗算器の出力から受信された積と前記第2の乗算器の出力から受信された積とを加算する。
いくつかの実施形態によれば、前記プロセッサは、第2の加算器をさらに含む。前記第2の加算器は、前記第2の状態では、前記第1の乗算器の出力に接続されるように構成される。
上記目的を達成するためになされた本発明の実施形態によれば、プロセッシング回路を用いて計算するための方法が提供される。前記プロセッシング回路は、第1のタイルと、第2のタイルと、メモリと、バスとを備える。前記バスは、前記メモリ、前記第1のタイル、及び前記第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記方法は、ウェイトカーネル使用して活性化配列のコンボリューションを実行する方法を含む。前記コンボリューションを実行する方法は、活性化アレイの第1のサブアレイと前記カーネルとの前記テンソル積を形成する段階と、活性化アレイの第2のサブアレイと前記カーネルとの前記テンソル積を形成する段階と、活性化アレイの第3のサブアレイと前記カーネルの前記テンソル積を形成する段階とを順に含む。前記第2のサブアレイは、第1の方向にn個の要素により前記第1のサブアレイからオフセットされ、nは正の整数である。前記第3のサブアレイは、前記第1の方向に垂直である第2の方向へ1つの要素により前記第2のサブアレイからオフセットされる。
いくつかの実施形態によれば、前記第3のサブアレイと前記カーネルとのテンソル積を形成した後、前記コンボリューションを実行する方法は、前記活性化アレイの第4のサブアレイと前記カーネルとのテンソル積を形成する段階と、活性化アレイの第5のサブアレイと前記カーネルのテンソル積を形成する段階とを順に含む。第4のサブアレイは、第1の方向に反対である第3の方向へm個のアレイ要素だけ第3のサブアレイからオフセットされる。mは正の整数である。第5のサブアレイは、第2の方向に1つのアレイ要素だけ第4のサブアレイからオフセットされる。
いくつかの実施形態によれば、mはnと同じである。
いくつかの実施形態によれば、nは1と同じである。
いくつかの実施形態によれば、前記第1のサブアレイと前記カーネルとの積を形成する段階後に、前記コンボリューションを実行する方法は、活性化アレイの(n−1)個のそれぞれのサブアレイと前記カーネルとの(n−1)個の積(products)を形成する段階を順にさらに含む。(n−1)個の積の中のk番目の積のサブアレイは、1番目の方向で(k+1)個のアレイ要素だけ1番目のサブアレイからオフセットされる。
いくつかの実施形態によれば、前記プロセッシング回路は、前記活性化バッファに接続されて、活性化バッファに活性化を供給するように構成されるキャッシュをさらに含む。前記キャッシュは、「H+(H+n)×(W−1)−1」個の活性化を格納するのに十分なサイズを有する。Hは、第1の方向のカーネルのサイズであり、Wは、第2の方向のカーネルのサイズである。
いくつかの実施形態によれば、前記活性化バッファは、第1の乗算器に接続される第1のキュー(queue)、及び第2の乗算器に接続される第2のキューを含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態において、第1の乗算器により第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態において、第1の乗算器により第1のウェイトを第1のキューの第2のレジスタからの活性化とを乗じるように、さらに構成される。
いくつかの実施形態によれば、前記第2の状態では、前記第1のキューの出力レジスタは0(zero)含む。
いくつかの実施形態によれば、前記プロセッシング回路は、第1の加算器をさらに含む。前記方法は、前記第1の状態で、前記第1の加算器を前記第1の乗算器の出力、及び前記第2の乗算器の出力に接続し、前記第1の加算器が前記第1の乗算器の出力から受信した結果と、前記第2の乗算器の出力から受信した結果とを加算する段階をさらに含む。
上記目的を達成するためになされた本発明の実施形態によれば、プロセッシングのための手段として計算するための方法が提供される。プロセッシングのための前記手段は、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、前記メモリ、前記第1のタイル及び前記第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記方法は、ウェイトカーネルと活性化配列とのコンボリューションを実行する方法を含む。前記コンボリューションを実行する方法は、活性化アレイの第1のサブアレイと前記カーネルとの前記テンソル積を形成する段階と、活性化アレイの第2のサブアレイと前記カーネルとのテンソル積を形成する段階と、活性化アレイの第3のサブアレイと前記カーネルとのテンソル積を形成する段階とを順に含む。前記第2のサブアレイは、第1の方向にn個の要素だけ前記第1のサブアレイからオフセットされ、nは正の整数である。前記第3のサブアレイは、前記第1の方向に垂直である第2の方向へ1つの要素だけ前記第2のサブアレイからオフセットされる。
上記目的を達成するためになされた本発明の実施形態によれば、プロセッサが提供される。前記プロセッサは、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、前記メモリ、前記第1のタイル、及び前記第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記プロセッサは、第1のカーネルウェイトと活性化アレイとの第1のコンボリューションを実行するように構成される。前記第1のコンボリューションを実行する方法は、前記活性化アレイの第1のサブアレイを前記第1のタイル及び前記第2のタイルにブロードキャストする段階と、第1のテンソル積形成する段階と、前記メモリ内に前記第1のテンソル積を格納する段階と、前記活性化アレイの第2のサブアレイを前記第1のタイル、及び前記第2のタイルにブロードキャストする段階と、第2のテンソル積を形成する段階とを備える。前記第1のテンソル積は、前記活性化アレイの前記第1のサブアレイと前記第1のカーネルウェイトの第1のサブアレイとのテンソル積である。前記第2のテンソル積は、前記活性化アレイの前記第2のサブアレイと前記第1のカーネルウェイトの第2のサブアレイとのテンソル積である。
いくつかの実施形態によれば、前記第1のタイルは、複数のウェイトが圧縮された形態でエンコードされたデータワードを圧縮解除して、第1のウェイト及び第2のウェイトを抽出し、第1のウェイトを第1のウェイトレジスタにフィード(feed)し、そして第2のウェイトを第2のウェイトレジスタにフィードするように構成されたウェイト圧縮解除ユニットをさらに含む。
いくつかの実施形態によれば、第1のタイルは、第2のカーネルウェイトと活性化アレイとの第2のコンボリューションを実行するように、さらに構成される。前記第2のコンボリューションを実行する方法は、活性化アレイの第1のサブアレイと第2のカーネルの第1の部分とのテンソル積を形成する段階と、活性化アレイの第1のサブアレイと第2のカーネルの第2の部分とのテンソル積形成する段階と、活性化アレイの第2のサブアレイと第2のカーネルの第1の部分とのテンソル積を形成する段階とを順に含む。第2のカーネルの第1の部分は、第1のウェイトレジスタに格納されたウェイトを含み、第2のカーネルの第2の部分は、第2のウェイトレジスタに格納されたウェイトを含み、前記第2のカーネルの第1の部分は、第1のウェイトレジスタに格納されたウェイトを含む。
いくつかの実施形態によれば、前記活性化バッファは、第1の乗算器に接続される第1のキュー(queue)と、第2の乗算器に接続される第2のキューとを含む。第1のキューは、第1のレジスタと、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態において、第1の乗算器により第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態において第1の乗算器により第1のウェイトに第1のキューの第2のレジスタからの活性化を乗じるように、さらに構成される。
いくつかの実施形態によれば、前記第2の状態では、前記第1のキューの出力レジスタは、0(ゼロ)を含む。
いくつかの実施形態によれば、前記プロセッサは、第1の加算器をさらに含む。前記第1の加算器は、前記第1の状態において、前記第1の乗算器の出力及び前記第2の乗算器の出力に接続され、前記第1の乗算器の出力から受信した結果と前記第2の乗算器の出力から受信した結果を加算する。
いくつかの実施形態によれば、前記プロセッサは、第2の加算器をさらに含む。前記第2の加算器は、前記第2の状態では、前記第1の乗算器の出力に接続されるように構成される。
いくつかの実施形態によれば、前記プロセッサは、第1の加算器に接続される第1のアキュムレータ(accumulator)と、第2の加算器に接続される第2のアキュムレータとをさらに含む。第1のアキュムレータは、レジスタを含む。第1の状態では、前記第1のアキュムレータは、前記第1の加算器から受信した合計を前記第1のアキュムレータのレジスタの値に加えて、第1のアキュムレータの累積された値を形成し、そして第1のアキュムレータのレジスタに第1のアキュムレータの累積された値を格納する。
いくつかの実施形態によると、第2のアキュムレータは、レジスタを含む。第2の状態では、前記第2のアキュムレータは、前記第2の加算器から受信した合計を前記第2のアキュムレータのレジスタの値に加えて、第2のアキュムレータの累積された値を形成し、そして第2のアキュムレータのレジスタに第2のアキュムレータの累積された値を格納する。
いくつかの実施形態によれば、前記プロセッサは、第1のキューの出力レジスタがゼロを含むか否かを決定し、第1のキューの出力レジスタがゼロを含むとの決定に応答して、第1のタイルが、第2の状態で、演算されるようにする活性化ゼロのスキップ制御回路をさらに含む。
上記目的を達成するためになされた本発明の実施形態によれば、プロセッシング回路を使用して計算する方法が提供される。前記プロセッシング回路は、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、前記メモリ、前記第1のタイル、及び前記第2のタイルに接続される。前記第1のタイルは、第1のバッファモジュールは、第2のバッファモジュールは、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記方法は、第1のカーネルウェイトと活性化アレイとの第1のコンボリューションを実行するように構成される。前記第1のコンボリューションを実行する方法は、前記活性化アレイの第1のサブアレイを前記第1のタイル、及び前記第2のタイルにブロードキャストする段階と、第1のテンソル積を形成する段階と、前記メモリ内に前記第1のテンソル積を格納する段階と、前記活性化アレイの第2のサブアレイを前記第1のタイル、及び前記第2のタイルにブロードキャストする段階と、第2のテンソル積を形成する段階と、第1のテンソル積と第2のテンソル積を加算する段階とを含む。前記第1のテンソル積は、前記活性化アレイの前記第1のサブアレイと第1のカーネルウェイトの第1のサブアレイとのテンソル積である。前記第2のテンソル積は、前記活性化アレイの前記第2のサブアレイと第1のカーネルウェイトの第2のサブアレイとのテンソル積である。
いくつかの実施形態によれば、前記第1のタイルは、ウェイトの圧縮解除ユニットをさらに含む。前記方法は、前記ウェイトの圧縮解除ユニットにより圧縮された複数のウェイトの形態でエンコードされたデータワードを圧縮解除して、第1のウェイト及び第2のウェイトを抽出する段階と、第1のウェイトを第1のウェイトレジスタにフィードする段階と、第2のウェイトを第2のウェイトレジスタにフィードする段階とをさらに含む。
いくつかの実施形態によれば、前記方法は、ウェイトの第2のカーネルと活性化アレイとの第2のコンボリューションを実行する段階をさらに含む。前記第2のコンボリューションを実行する方法は、活性化アレイの第1のサブアレイと第2のカーネルの第1の部分とのテンソル積を形成する段階と、活性化アレイの第1のサブアレイと第2のカーネルの第2の部分とのテンソル積形成する段階と、活性化アレイの第2のサブアレイと第2のカーネルの第1の部分とのテンソル積を形成する段階とを順に含む。第2のカーネルの第1の部分は、第1のウェイトレジスタに格納されるウェイトを含み、第2のカーネルの第2の部分は、第2のウェイトレジスタに格納されるウェイトを含み、前記第2のカーネルの第1の部分は、第1のウェイトレジスタに格納されるウェイトを含む。
いくつかの実施形態によれば、前記活性化バッファは、第1の乗算器に接続された第1のキュー(queue)、及び第2の乗算器に接続された第2のキューを含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態では、第1の乗算器により第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態では、第1の乗算器により第1のウェイトと第1のキューの第2のレジスタからの活性化とを乗算するように、さらに構成される。
いくつかの実施形態によれば、前記第2の状態では、前記第1のキューの出力レジスタは、ゼロを含む。
いくつかの実施形態によれば、前記プロセッシング回路は、第1の加算器をさらに含む。前記方法は、前記第1の状態では、前記第1の加算器を前記第1の乗算器の出力、及び前記第2の乗算器の出力に接続する段階と、前記第1の加算器が前記第1の乗算器の出力から受信した結果、及び前記第2の乗算器の出力から受信した結果を加算する段階とをさらに含む。
いくつかの実施形態によれば、前記プロセッシング回路は、第2の加算器をさらに含む。前記方法は、前記第2の状態では、前記第2の加算器を前記第1の乗算器の出力に接続する段階をさらに含む。
いくつかの実施形態によれば、前記プロセッシング回路は、第1の加算器に接続される第1のアキュムレータ(accumulator)と、第2の加算器に接続される第2のアキュムレータとをさらに含む。第1のアキュムレータはレジスタを含む。前記方法は、第1の状態では、前記第1のアキュムレータにより前記第1の加算器から受信した合計を前記第1のアキュムレータのレジスタの値に加算する段階と、第1のアキュムレータの累積された値を形成する段階と、前記第1のアキュムレータにより第1のアキュムレータのレジスタに第1のアキュムレータの累積された値を格納する段階とをさらに含む。
いくつかの実施形態によれば、第2のアキュムレータはレジスタを含む。前記方法は、第2の状態では、前記第2のアキュムレータにより前記第2の加算器から受信した合計を前記第2のアキュムレータのレジスタの値に加算する段階と、第2のアキュムレータの累積された値を形成する段階と、前記第2のアキュムレータにより第2のアキュムレータのレジスタに第2のアキュムレータの累積された値を格納する段階とをさらに含む。
上記目的を達成するためになされた本発明の実施形態によれば、プロセッシングのための手段を用いて計算する方法が提供される。前記プロセッシングのための手段は、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、前記メモリ、前記第1のタイル、及び前記第2のタイルに接続される。前記第1のタイルは、第1のバッファモジュール、第2のバッファモジュール、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記方法は、第1のカーネルウェイトと活性化アレイとの第1のコンボリューションを実行するように構成される。前記第1のコンボリューションを実行する方法は、前記活性化アレイの第1のサブアレイを前記第1のタイル及び前記第2のタイルにブロードキャストする段階と、第1のテンソル積を形成する段階と、前記メモリ内に前記第1のテンソル積を格納する段階と、前記活性化アレイの第2のサブアレイを前記第1のタイル及び前記第2のタイルにブロードキャストする段階と、第2のテンソル積を形成する段階と、前記第1のテンソル積と前記第2のテンソル積を加算する段階とを含む。前記第1のテンソル積は、前記活性化アレイの前記第1のサブアレイと第1のカーネルウェイトの第1のサブアレイとのテンソル積である。前記第2のテンソル積は、前記活性化アレイの前記第2のサブアレイと第1のカーネルウェイトの第2のサブアレイとのテンソル積である。
上記目的を達成するためになされた本発明の実施形態によれば、プロセッサが提供される。前記プロセッサは、第1のタイル、第2のタイル、メモリ、入力バス、及び出力バスを含む。前記入力バスはメモリ、第1のタイル及び第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器及び第2の乗算器を含む。前記第1のタイルは、ウェイトのカーネルと活性化アレイとの第1のコンボリューションを実行するように構成される。前記メモリは、第1のメモリバンクのセット、及び第2のメモリバンクのセットを含む。前記入力バスは、第1の方向にデータを伝播するための第1のセグメントバスと、第1の方向と反対方向である第2の方向にデータを伝播するための第2のセグメントバスとを含む。前記第1のセグメントバスは、第1のスイッチブロック及び第2のスイッチブロックを含む。前記第1のスイッチブロックは、第1のタイルと、第1のメモリバンクのセットとに接続される。前記第2のスイッチブロックは、第2のタイルと、第2のメモリバンクのセットとに接続される。前記第2のセグメントバスは、第3のスイッチブロック、及び第4のスイッチブロックを含む。前記第3のスイッチブロックは、第1のタイルと、第1のメモリバンクのセットとに接続される。前記第4のスイッチブロックは、第2のタイルと、第2のメモリバンクのセットとに接続される。前記第1のスイッチブロックの入力は、第2のスイッチブロックの出力に接続される。前記第3のスイッチブロックの出力は、第4のスイッチブロックの入力に接続される。
いくつかの実施形態によれば、第1のバス状態では、第1のセグメントバスは、第1のメモリバンクのセットを、第1のスイッチブロックを介して第1のタイルに接続し、第2のスイッチブロックを介して第2のメモリバンクのセットを第2のタイルに接続するように構成される。
いくつかの実施形態によれば、第2のバスの状態では、第1のセグメントバスは、第2のメモリバンクのセットを第1のスイッチブロック、及び第2のスイッチブロックを介して、第1のタイルに接続し、第2のスイッチブロックを介して第2のメモリバンクのセットを第2のタイルに接続するように、さらに構成される。
いくつかの実施形態によれば、前記活性化バッファは、第1の乗算器に接続される第1のキュー(queue)及び第2の乗算器に接続される第2のキューを含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態では、第1の乗算器により第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態では、第1の乗算器により第1のウェイトを第1のキューの第2のレジスタからの活性化に乗算するように、さらに構成される。
いくつかの実施形態によれば、前記第2の状態では、前記第1のキューの出力レジスタは、ゼロを含む。
いくつかの実施形態によれば、前記プロセッサは、第1の加算器をさらに含む。前記第1の加算器は、第1の状態では、前記第1の乗算器の出力及び前記第2の乗算器の出力に接続され、前記第1の乗算器の出力から受信した積と、前記第2の乗算器の出力から受信した積とを加算する。
いくつかの実施形態によれば、前記プロセッサは、第2の加算器をさらに含む。前記第2の加算器は、前記第2の状態では前記第1の乗算器の出力に接続されるように構成される。
いくつかの実施形態によれば、前記プロセッサは、第1の加算器に接続される第1のアキュムレータ(accumulator)と、第2の加算器に接続される第2のアキュムレータとをさらに含む。第1のアキュムレータはレジスタを含む。第1の状態では、前記第1のアキュムレータは、前記第1の加算器から受信した合計を前記第1のアキュムレータのレジスタの値に加えて、第1のアキュムレータの累積された値を形成し、そして第1のアキュムレータのレジスタに第1のアキュムレータの累積された値を格納する。
いくつかの実施形態によれば、第2のアキュムレータはレジスタを含む。第2の状態では、前記第2のアキュムレータは、前記第2の加算器から受信した合計を前記第2のアキュムレータのレジスタの値に加えて、第2のアキュムレータの累積された値を形成し、そして第2のアキュムレータのレジスタに第2のアキュムレータの累積された値を格納する。
いくつかの実施形態によれば、前記プロセッサは、第1のキューの出力レジスタがゼロを含むか否かを決定し、第1のキューの出力レジスタがゼロを含むとの決定に応答して、第1のタイルが第2の状態で演算されるようにする活性化ゼロのスキップ制御回路をさらに含む。
いくつかの実施形態によれば、前記プロセッサは、マルチプレクサ(multiplexer)をさらに含む。前記マルチプレクサは、マルチプレクサのシングルポート側から第1の乗算器に接続される入力を有し、マルチプレクサのマルチポート側から第1の加算器に接続される第1の出力を有し、そしてマルチプレクサのマルチポート側から第2の加算器に接続される第2の出力を有する。
上記目的を達成するためになされた本発明の実施形態によれば、プロセッシング回路を用いて計算する方法が提供される。前記プロセッシング回路は、第1のタイル、第2のタイル、メモリ、入力バス及び出力バスを含む。前記入力バスはメモリ、第1のタイル及び第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器及び第2の乗算器を含む。前記第1のタイルは、ウェイトのカーネルと活性化のアレイとの第1のコンボリューションを実行するように構成される。前記メモリは、第1のメモリバンクのセット及び第2のメモリバンクのセットを含む。前記入力バスは、第1の方向にデータを伝播するための第1のセグメントバスと、第1の方向とは反対方向である第2の方向にデータを伝播するための第2のセグメントバスとを含む。前記第1のセグメントバスは、第1のスイッチブロック、及び第2のスイッチブロックを含む。前記第1のスイッチブロックは、第1のタイルと、第1のメモリバンクのセッとに接続される。前記第2のスイッチブロックは、第2のタイルと、第2のメモリバンクのセットとに接続される。前記第2のセグメントバスは、第3のスイッチブロック、及び第4のスイッチブロックを含む。前記第3のスイッチブロックは、第1のタイルと、第1のメモリバンクのセットとに接続される。前記第4のスイッチブロックは、第2のタイルと、第2のメモリバンクのセットとに接続される。前記第1のスイッチブロックの入力は、第2のスイッチブロックの出力に接続される。前記第1のスイッチブロックの入力は、第2のスイッチブロックの出力に接続される。前記第3のスイッチブロックの出力は、第4のスイッチブロックの入力に接続される。前記方法は、第1のバスの状態では、第1のスイッチブロックにより、第1のタイルに第1のメモリバンクのセットを接続する段階と、第2のスイッチブロックにより第2のメモリバンクのセットを第2のタイルに接続する段階とを含む。
いくつかの実施形態によれば、前記方法は、第2のバスの状態では、第1のスイッチブロック及び第2のスイッチブロックにより、第1のタイルに第2のメモリバンクのセットを接続する段階と、第2のスイッチブロックにより第2のメモリバンクのセットを第2のタイルに接続する段階をさらに含む。
いくつかの実施形態によれば、前記活性化バッファは、第1の乗算器に接続される第1のキュー(queue)及び第2の乗算器に接続される第2のキューを含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態では、第1の乗算器により第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態では、第1の乗算器により第1のウェイトと第1のキューの第2のレジスタからの活性化とを乗じるように、さらに構成される。
いくつかの実施形態によれば、前記第2のキューでは、前記第1のキューの出力はゼロを含む。
いくつかの実施形態によれば、前記プロセッシング回路は、第1の加算器をさらに含む。前記方法は、第1の状態では、前記第1の加算器を前記第1の乗算器の出力及び前記第2の乗算器の出力に接続する段階と、前記第1の加算器が前記第1の乗算器の出力から受信した結果と前記第2の乗算器の出力から受信した結果とを加算する段階と、をさらに含む。
いくつかの実施形態によれば、前記プロセッシング回路は、第2の加算器をさらに含む。前記方法は、前記第2の状態では、前記第2の加算器を前記第1の乗算器の出力に接続する段階をさらに含む。
いくつかの実施形態によれば、前記プロセッシング回路は、第1の加算器に接続される第1のアキュムレータ(accumulator)と、第2の加算器に接続される第2のアキュムレータとをさらに含む。第1のアキュムレータはレジスタを含む。前記方法は、第1の状態では、前記第1のアキュムレータが前記第1の加算器から受信した合計を前記第1のアキュムレータのレジスタの値に加算する段階と、第1のアキュムレータの累積された値を形成する段階と、前記第1のアキュムレータが第1のアキュムレータのレジスタに第1のアキュムレータの累積された値を格納する段階と、をさらに含む。
いくつかの実施形態によれば、第2のアキュムレータはレジスタを含む。前記方法は、第2の状態では、前記第2のアキュムレータにより前記第2の加算器から受信した合計を前記第2のアキュムレータのレジスタの値に加算する段階と、第2のアキュムレータの累積された値を形成する段階と、前記第2のアキュムレータにより第2のアキュムレータのレジスタに第2のアキュムレータの累積された値を格納する段階と、をさらに含む。
上記目的を達成するためになされた本発明の実施形態によれば、プロセッシングのための手段を用いて計算する方法が提供される。前記プロセッシングのための手段は、第1のタイル、第2のタイル、メモリ、入力バス、及び出力バスを含む。前記入力バスはメモリ、第1のタイル及び第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記第1のタイルは、ウェイトのカーネルと活性化のアレイとの第1のコンボリューションを実行するように構成される。前記メモリは、第1のメモリバンクのセット、及び第2のメモリバンクのセットを含む。前記入力バスは、第1の方向にデータを伝播するための第1のセグメントバスと、第1の方向とは反対方向である第2の方向にデータを伝播するための第2のセグメントバスと、を含む。前記第1のセグメントバスは、第1のスイッチブロック及び第2のスイッチブロックを含む。前記第1のスイッチブロックは、第1のタイルと第1のメモリバンクのセットとに接続される。前記第2のスイッチブロックは、第2のタイルと、第2のメモリバンクのセットと、に接続される。前記第2のセグメントバスは、第3のスイッチブロック及び第4のスイッチブロックを含む。前記第3のスイッチブロックは、第1のタイルと、第1のメモリバンクのセットと、に接続される。前記第4のスイッチブロックは、第2のタイルと、第2のメモリバンクのセットと、に接続される。前記第1のスイッチブロックの入力は、第2のスイッチブロックの出力に接続される。前記第3のスイッチブロックの出力は、第4のスイッチブロックの入力に接続される。前記方法は、第1のバス状態では、第1のスイッチブロックにより第1のタイルに設定された第1のメモリバンクを接続する段階と、第2のスイッチブロックにより第2のメモリバンクを第2のタイルに接続する段階と、を含む。
上記目的を達成するためになされたいくつかの実施形態によれば、プロセッサが提供される。前記プロセッサは、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、メモリ、第1のタイル及び第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記活性化バッファは、第1の乗算器に接続される第1のキュー(queue)と、第2の乗算器に接続される第2のキューと、を含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態では、第1の乗算器により第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態では、第1の乗算器により第1のウェイトと、第1のキューの第2のレジスタからの活性化と、を乗じるように構成される。
いくつかの実施形態によれば、前記第2のキューでは、前記第1のキューの出力はゼロを含む。
いくつかの実施形態によれば、前記プロセッサは、第1の加算器をさらに含む。前記第1の加算器は、第1の状態では、前記第1の乗算器の出力、及び前記第2の乗算器の出力に接続され、前記第1の乗算器の出力から受信した結果と、前記第2の乗算器の出力から受信した結果と、を加算する。
いくつかの実施形態によれば、前記プロセッサは、第2の加算器をさらに含む。前記第2の加算器は、前記第2の状態では前記第1の乗算器の出力に接続されるように構成される。
いくつかの実施形態によれば、前記プロセッサは、第1の加算器に接続される第1のアキュムレータ(accumulator)と、第2の加算器に接続される第2のアキュムレータと、をさらに含む。第1のアキュムレータはレジスタを含む。第1の状態では、前記第1のアキュムレータは、前記第1の加算器から受信した合計を前記第1のアキュムレータのレジスタの値に加えて、第1のアキュムレータの累積された値を形成し、そして第1のアキュムレータのレジスタに第1のアキュムレータの累積された値を格納する。
いくつかの実施形態によれば、第2のアキュムレータレジスタを含む。第2の状態では、前記第2のアキュムレータは、前記第2の加算器から受信した合計を前記第2のアキュムレータのレジスタの値に加えて、第2のアキュムレータの累積された値を形成し、そして第2のアキュムレータのレジスタに第2のアキュムレータの累積された値を格納する。
いくつかの実施形態によれば、前記プロセッサは、第1のキューの出力レジスタがゼロを含むか否かを決定し、第1のキューの出力レジスタがゼロを含むとの決定に応答して、第1のタイルが第2の状態で演算されるようにする活性化ゼロのスキップ制御回路をさらに含む。
いくつかの実施形態によれば、前記プロセッサは、マルチプレクサ(multiplexer)をさらに含む。前記マルチプレクサは、マルチプレクサのシングルポート側から第1の乗算器に接続される入力を有し、マルチプレクサのマルチポート側から第1の加算器に接続される第1の出力を有し、そしてマルチプレクサのマルチポート側から第2の加算器に接続される第2の出力を有している。
いくつかの実施形態によれば、前記活性化ゼロスキップ制御回路は、第1の状態では、マルチプレクサを制御して前記入力を第1の出力に接続し、第2の状態では、前記入力を第2の出力に接続するように構成される。
いくつかの実施形態によれば、前記第2のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第2のキューの出力レジスタである。前記第1のタイルは、第3の状態では、第1の乗算器により第1のウェイトと、第2のキューの第2のレジスタからの活性化と、を乗じるように、さらに構成される。
上記目的を達成するためになされた実施形態によれば、プロセッシング回路を用いて計算する方法が提供される。前記プロセッシング回路は、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、メモリは、第1のタイル及び第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記活性化バッファは、第1の乗算器に接続される第1のキュー(queue)と、第2の乗算器に接続される第2のキューをと、を含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。前記方法は、第1の状態では、第1の乗算器により第1のキューの出力レジスタからの活性化と第1のウェイトとを乗算する段階と、第2の状態では第1の乗算器により第1のウェイトと第1のキューの第2のレジスタからの活性化とを乗じる段階と、を含む。
いくつかの実施形態によれば、前記第2のキューでは、前記第1のキューの出力はゼロを含む。
いくつかの実施形態によれば、前記プロセッシング回路は、第1の加算器をさらに含む。前記方法は、第1の状態で、前記第1の加算器を前記第1の乗算器の出力及び前記第2の乗算器の出力に接続する段階と、前記第1の加算器により前記第1の乗算器の出力から受信した結果と前記第2の乗算器の出力から受信した結果とを加算する段階と、をさらに含む。
いくつかの実施形態によれば、前記プロセッシング回路は、第2の加算器をさらに含む。前記方法は、前記第2の状態では、前記第2の加算器を前記第1の乗算器の出力に接続する段階をさらに含む。
いくつかの実施形態によれば、前記プロセッシング回路は、第1の加算器に接続される第1のアキュムレータ(accumulator)と、第2の加算器に接続される第2のアキュムレータとをさらに含む。第1のアキュムレータはレジスタを含む。前記方法は、第1の状態では、前記第1のアキュムレータにより前記第1の加算器から受信した合計を前記第1のアキュムレータのレジスタの値に加算する段階と、第1のアキュムレータの累積された値を形成する段階と、前記第1のアキュムレータにより第1のアキュムレータのレジスタに第1のアキュムレータの累積された値を格納する段階と、をさらに含む。
いくつかの実施形態によれば、第2のアキュムレータレジスタを含む。前記方法は、第2の状態では、前記第2のアキュムレータが前記第2の加算器から受信した合計を前記第2のアキュムレータのレジスタの値に加算する段階と、第2のアキュムレータの累積された値を形成する段階と、前記第2のアキュムレータにより第2のアキュムレータのレジスタに第2のアキュムレータの累積された値を格納する段階と、をさらに含む。
いくつかの実施形態によれば、前記プロセッシング回路は、活性化ゼロのスキップ制御回路をさらに含む。前記方法は、活性化ゼロのスキップ制御回路により、第1のキューの出力レジスタがゼロを含むか否かを決定する段階と、第1のキューの出力レジスタがゼロを含むという決定に応答して、第1のタイルが第2の状態で演算されるようにする段階と、をさらに含む。
いくつかの実施形態によれば、前記プロセッシング回路は、マルチプレクサをさらに含む。前記マルチプレクサは、マルチプレクサのシングルポート側から第1の乗算器に接続される入力を有し、マルチプレクサのマルチポート側から第1の加算器に接続される第1の出力を有し、そしてマルチプレクサのマルチポート側から第2の加算器に接続される第2の出力を有する。
いくつかの実施形態によれば、前記方法は、前記活性化ゼロのスキップ制御回路によりマルチプレクサを制御する段階と、第1の状態では、前記入力を第1の出力に接続する段階と、第2の状態では前記入力を第2の出力に接続する段階と、をさらに含む。
上記目的を達成するためになされた実施形態によれば、プロセッシングのための手段を用いて計算する方法が提供される。前記プロセッシングのための手段は、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、メモリは、第1のタイル及び第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記活性化バッファは、第1の乗算器に接続される第1のキュー(queue)と、第2の乗算器に接続される第2のキューと、を含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。前記方法は、第1の状態では、第1の乗算器により第1のキューの出力レジスタからの活性化と第1のウェイトとを乗算する段階と、第2の状態では、第1の乗算器により第1のウェイトを第1のキューの第2のレジスタからの活性化に乗じる段階と、を含む。
本発明に係るニューラルプロセッサによれば、テンソル演算の速度が向上し、減少された消費電力を有するニューラルプロセッサが提供される。
本明細書の特徴及び利点は、下記の明細書、特許請求の範囲及び添付された図面を参照して理解されるだろう。前記添付された図面は、以下の通りである。
本発明の実施形態によるニューラルプロセッサの概略構成を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフロー(data flow)を示す図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフローを示す。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態による3つの場合に関するニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部の概略図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサを示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるサイズテーブルの表である。 本発明の実施形態によるテンソル図(tensor diagram)である。 本発明の実施形態によるテンソル図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフロー図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部のデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるコンボリューション図(convolution diagram)である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるリードテーブル(read table)である。 本発明の実施形態によるリードテーブルである。 本発明の実施形態によるコンボリューション図である。 図2GBは、本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるコンボリューション図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部のブロック図を示す。 本発明の実施形態によるデータ図(data diagram)である。 本発明の実施形態によるデータ図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 図3CBは、本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるデータ図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるデータ図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるデータ図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるデータ図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるデータ図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるデータ図である。 本発明の実施形態によるデータ図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるデータフローを示す図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるデータ図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。 本発明の実施形態によるニューラルプロセッサの一部を示すブロック図である。
添付された図面と関連して、以下に説明される詳細な説明は、本開示に基づいて提供されるニューラルプロセッサの例としての実施形態の説明として意図され、本開示が構成されたり利用されたりできる唯一の形態を表すようには意図しない。
本説明は、図に示した実施形態に関連して、本開示の特徴を説明する。
しかし、同一又は同等の機能と構造は、本開示の範囲内に含まれるように意図した異なる実施形態による、生み出されるよう意図され得る。
本明細書の他の部分で引用されたように、類似のコンポーネントの符号は、類似のコンポーネント又は特徴を示すように意図する。
図1Aは、本発明の実施形態によるニューラルプロセッサ100の概略構成を示すブロック図である。
出力の特徴マップ(output feature map:OFM)を形成するために、ニューラルプロセッサは、ウェイト(weight)の多次元的アレイ(又はテンソル)と入力特徴マップ(Input Feature Map:IFM)(又は、「活性化」のテンソル)とのコンボリューション、又はテンソル積を効率的に計算するように構成される。
ニューラルプロセッサは、また、特徴マッププーリング(pooling)及び/又は活性化関数を計算するように構成されてもよいが、明確性と簡潔性のために、プーリングと活性化関数は、本開示では多くは議論しない。
複数のSRAMバンクセット109(それぞれは、複数の、例えば、図4AB及び4ACでの4つのSRAMバンク108を含む)は、後続の計算のためにSRAMバンクセット109に格納された入力活性化マップをタイル102に持ってくるIFM(input feature map)伝達ファブリック104を介してマルティプライ・アンド・リデュース(Multiply−and−Reduce、乗算−そして−縮小、又は「MR」)のタイル102(以下で、より詳細に説明される)に接続する。
以下で、より詳細に議論するように、タイル102は、乗算器ユニット(Multiplier Unit:MU)103のアレイを含む。
また、タイル102は、格納のためにタイル102からSRAMバンクセット109へ計算された結果を伝送するOFM(output feature map)伝達ファブリック106を介して、SRAMバンクセット109に接続される。
IFM伝達ファブリック104は、セグメント(segment、分割)されたバスであり、(以下で、議論するように)、結果的には、SRAMバンクセット109のそれぞれは、以下で、より詳細に議論するように、タイル102の中のいずれか1つと関連付けられる。
中央コントローラ110は、ユーティリティバス112を介してシステム内のレジスタを制御する制御ワードを供給する。
データは、AXI(Advanced Extensible Interconnect by ARM Ltd)インターコネクト114を介してニューラルプロセッサに伝送される。
ニューラルプロセッサにより実行されたプロセッシング演算の結果は、AXIインターコネクト114を介して同様に回収(retrieve)される。
マイクロコントローラ(micro−controller:MCU)116は、DMAコントローラ118を使用してニューラルプロセッサと外部メモリ120との間のデータ伝送を調整及び実行するだけではなく、中央コントローラを適切にタイミング良く構成することにより、計算を調整するのに使用され得る。
各タイル102は、MR(multiply−and−reduce)列133のMR(multiply−and−reduce)アレイ122を含む。
図1Bは、いくつかの実施形態での、MRアレイ122を示す。
それぞれのMRアレイは、8つのMR列133を含む。
それぞれのMR列133は、16個の乗算器ユニット(MU:multiplier unit)103を含み、2つの加算器ツリー(128A及び128B)をさらに含む。
明確性のために図1Bは、16個のMU103の内の4つだけを図示したことに留意しなければならない。
各MU103は、複数のレジスタ、例えば「ウェイト(重み)レジスタ(weigh register)」と呼ばれる18個の9ビットのレジスタを含むレジスタファイル127、及び乗算器126を含む。
乗算器126は、入力活性化(input activation)にウェイトを乗じる。
続いて、それぞれのMR列133での加算器ツリー(128A及び128B)は、列(column)内で16個のMUからの結果の積を合算することにより、ドット積(dot product)を形成する。
合算(要約)は、以下で、より詳細に説明する特定の方式により実行される。
また、それぞれのタイル102は、IFMキャッシュ139、及び活性化ブロードキャストユニット(Activation Broadcast Unit:ABU)141を含む。
IFMキャッシュ139は、SRAMから受信したIFM値をキャッシュ(caching)することにより、入力特徴マップのSRAMリード(read)を減少させることを目的とする。
それぞれのMR列133が16個のMU103を含むように、IFMキャッシュ139は、16個の並列「活性化レーン(active lanes)」を含む。
各活性化レーン137は、MRアレイ122で乗算器ユニットの「行(row)」に効果的に対応する。
活性化ブロードキャストユニットは、入力活性化の準備を担当する。
準備プロセスでは、第1の段階は、必要なコンボリューションシーケンスにしたがって、IFMキャッシュ139からIFM活性化バッファ124へ入力活性化をフェッチすると同時に、スパース活性化計算機能(sparse activation computation functionality)を実装できるとき、ゼロ値の活性化(zero−valued activation)を省略する段階を含む。
スパース活性化計算の特徴は、選択的に非活性化されることにあり、それにより「デンス(dense)」テンソルの計算モードになる。
準備プロセスでは、第2の段階は、数字タイプの活性化を「サイン・アンド・8ビット・マグニチュード」(sign−and−8bit−magnitude)のフォーマット(format)に変換する段階を含む。
これは、タイプ変換器135を用いて、8ビットを超えるビット幅を有するデータタイプを一連の「サイン・アンド・8ビット・マグニチュード」の値に分割(partitioning)する段階を含む。
活性化が、グーグルテンソルフロー(Google TensorFlow)によりサポートされる「ゼロポイント(zero point)」を使用してエンコードされると、活性化が、「サイン・アンド・8ビット・マグニチュード」のフォーマットに変換される前に、ゼロポイントの定数値Zが活性化に追加され得る。
それぞれのMR列133が16個のMU103を含むように、ABU141、IFMバッファ124、及びタイプ変換器135は、それぞれ16個のレーンを含む。
結果的に変換された16個の活性化値は、MRアレイ122と並列にブロードキャスト(broadcast)され、それぞれの活性化レーンは8つの乗算器ユニットの対応する行に入力の活性化値を持ってくる。
また、それぞれのMR列は、加算器ツリー(128A及び128B)のそれぞれについて、1つずつアキュムレータ(130A及び130B)を含む。
本明細書で使用するように、「アキュムレータ(accumulator)」は、レジスタのコンテンツ(content)に入力値を合算して、レジスタのコンテンツを合算した合計によってオーバーライト(overwrite)するように構成された加算器とレジスタの組合せである。
上述したように、MRアレイ122内の乗算器ユニットは、複数の行、例えば、16個の行に配列される。
図1Bは、明確性のために、16個の内の4つの行だけを図に示し、列(又は「OFMチャンネル」)、例えば、図1Bに示した8つの列(この中で2つのラベルされた(labeled)「0」及び「0」が示される)に配列される。
16の長さを有するIFMベクトルは「IFMスライス」と呼ばれる。
IFMスライスは、関連するIFMテンソル、例えば、IFM[x,y,d:d+15]のインデックスとしてのそれと関連するデプス(深さ、depth)チャンネルインデックス(d)と、関連付けられた平面座標(x,y)と、を有する。
一般的な場合では、タイル102は、3DのIFMテンソルを含むオン・チップSRAMから一度に1つのIFMスライスを受信する。
それぞれの入力IFMスライスは、入力レイヤー(input layer)の平面位置(x,y)でのインデックス(d)からインデックス(d+15)までの16個のデプスチャンネルに対する値を含む。
同様に、8の長さを有するOFMベクトルは「OFMスライス」と呼ばれる。
OFMスライスは、関連付けられOFMテンソル(例えば、OFM[x,y,d:d+7])に対するインデックスとして関連付けられたデプスチャンネルインデックス(d)と、平面座標(x,y)を有する。
一般的な場合では、タイル102は、OFMスライスを出力として生成する。
以下で見られるように、タイルが停止され(stalled)ない場合は、いくつかの実施形態では、出力レートは、クロックあたり1つのOFMスライスから、例えば、クロックあたり最大2つのOFMスライスにまで変化する。
SRAMに格納するためにOFM伝達ファブリック106を介してエンドOFMベクトルの結果を伝送する前に、OFMベクトル計算を完了するためにタイル102からのタイル102のOFM出力ベクトル(OFMスライス)は、減少ファブリック111によって、さらに減少される必要があることに留意しなければならない。
IFM及びOFMのテンソルは、全て第4の「バッチ(batch)」のディメンションを有し得ることもあることに留意しなければならないものの、ニューラルプロセッサの目的は、ニューラルネットワークモデルのリアルタイム推論を加速化することであり、ニューラルネットワークモデルのトレーニングとは異なり、リアルタイム推論は、一般的に、1のバッチサイズ(batch size)に対して実行される。
説明の便宜のために、配置ディメンション(次元)(batch dimension)は、以下の説明では、ほとんど省略するものであり、配置ディメンションの詳細に対しては、後で個別に説明するものである。
ニューラルプロセッサ100は、同期ロジック内で実装され得、それぞれのMR列133は、全体的に1つのクロックドメイン内にある。
いくつかの実施形態では、演算のときに、それぞれの演算サイクル(cycle)の間(例えば、それぞれのクロックサイクルの間)、16個の乗算器126のそれぞれは、それの入力での2つの要素からそれぞれの積(product)を形成する。
加算器128のそれぞれは、その入力において、これら16個の積の一部の合算を形成する(図1Bにおいて4つのレーンにについて示しているように)。
それぞれのアキュムレータ130の加算器は、
(i)アキュムレータ130のレジスタの現在値に
(ii)対応する加算器128の出力を加えた合計を形成する。
次のクロックサイクルの開始のときに、各アキュムレータ130の各加算器の出力は、アキュムレータ130のレジスタにライト(write)される。
いくつかの実施形態では、計算は、パイプラインでプロセッシングされ得る。
追加のレジスタ(つまり、フリップフロップのアレイ)は、例えば、回路が動作するクロック速度で適切なタイミングマージンを提供するために、図1Bに示した要素の間に存在する。
これらの実施形態では、スループットは、同一であり得るが(つまり、追加のレジスタがない場合と同一であるが、例えば、クロックサイクルあたり1つの乗算及び加算)、
(i)乗算器126にフィード(feed)される入力データと
(ii)アキュムレータ130のレジスタにライト(write)される乗算及び加算の最終的な結果との間のレイテンシは、さらに大きい可能性がある(例えば、複数のクロックサイクル)。
図1C〜図1Hは、演算の例を示す。
上記演算では、ニューラルプロセッサは、IFMの要素がゼロのとき、ゼロにより乗算を別の方法で実行する乗算器を利用するためには、特定の乗算と加算の演算を、順序を変えて先に進行させることにより、IFMでのスパーシティ(sparsity)を活用して計算の完了を加速化させ得る。
IFMは、SRAMバンクセット109に格納される。
SRAMバンクセット109からのデータのフェッチ(fetching)は、活性化バッファ124が複数のキューとして動作するようにスケジュールする。
それぞれのキューは、図1Bに示したデータの1つの行に対応し、MRアレイ122のそれぞれのレーンをフィーディング(feeding)する。
説明の明確性のために、SRAMと活性化バッファ124との間のIFMキャッシュ139は、ディセーブル(disable)及びバイパス(bypass)したものと仮定する。
活性化データタイプは、unit8であり、ウェイト(重み)データタイプは、int8である。
この場合、タイプの変換器135は、変更されずに活性化値を通過させるように動作し、MU103での乗算は、1クロック(つまり、1クロックサイクル)を取ると仮定する。
SRAMバンクセット109は、例としての演算の開始から図1Bに示したいくつかのサンプルのIFM値を含み、ひたすら1つのタイルを使用すると仮定する。
また、16個のIFMレーンに、8つのOFM列、及び10個の(a〜j)のIFM入力ベクトルに対応するウェイトテンソルW[0…15,0…7,a…j]が対応するMUレジスタファイルにプリロード(pre−load)されたと仮定する。
いったん例としての演算がスタートすると、図1Cに示したように、例としての実施形態では、2つのIFMベクトルのa[]及びb[](図1Cの右端にある2つの列)は活性化バッファ124内にフェッチされる。
したがって活性化バッファ124の第1の列(すなわち、図示された右側の列a[])は、IFMの第1のベクトル(要素のa0〜a3で構成される)を含み、活性化バッファ124の第2の列(つまり、図示された左の列b[])は、IFMの第2のベクトル(要素b0〜b3で構成され、IFMを形成するアレイを識別するために用いられる表記法でb1=0)を含む。
図1Cにおいて、第2のキューは、第1の要素(MRアレイ122に最も近い)としてa1を含み、第2の要素(つまり、b1=0)としてゼロ0を含む。
活性化バッファ124の前面にあるIFMベクトルのa[0…3]は、MRアレイ122にブロードキャスト(broadcast)され、つまり、IFM値(a0)は、最上位行の8つの乗算器126のそれぞれの入力として、最上位の活性化レーンを介してブロードキャストされる。
同時に、0〜7列の最上段の行の乗算器は、それぞれの乗算器126に対する第2の入力として、それぞれのローカルレジスタファイルからウェイトのW[0,00…7,a]を受信する。
同様に、値(a1)は、上から2番目の活性化レーンを介して乗算器の上段から2番目の行に対する入力としてブロードキャストされる。
同時に、(0〜7)列の上段から2番目の行の乗算器は、それぞれの乗算器に対する第2の入力として、それらのそれぞれのローカルレジスタファイルからのウェイトW[1,0…7,a]をそれぞれ受信する。
演算では、それぞれのウェイトとIFMの第1のベクトル(要素a0〜a3で構成される)の積は、乗算器126の(16×8)アレイのそれぞれで形成される。
必要なドット積に対応する乗算の合計は、第1の加算器と128Aに形成され、第1のアキュムレータに130Aに格納される。
所望のドット積に対応する乗算は、次の通りである。
(数1)
ΣA,0=a0×W0,0,a+a1×W1,0,a+a2×W2,0,a+a3×W3,0,a
...
ΣA,7=a0×W0,7,a+a1×W1,7,a+a2×W2,7,a+a3×W3,7,a
このとき、IFMa[]に対応するOFM出力ベクトルの計算が、アキュムレータ130Aで利用可能な結果(図1CにおいてΣA,0...7で示される)とともに完了され、OFM伝達ファブリック106に出力されるように備えられる(その次に、それぞれの列のアキュムレータ130Aは、クリア(clear)され得る)。
図1Dでは、IFMの第1のベクトルがプロセッシングされた後、IFMの第3のベクトル(要素c0〜c3で構成され、c2=0)は、活性化バッファ124内にリード(read)される。
IFMの第2のベクトル(要素b0〜b3で構成され、b1=0)のすべての要素とウェイトとの積を形成する代わりに、(これは第2のレーンのそれぞれの乗算器126で、ゼロ0とそれぞれのウェイトとの積を形成することを伴う)、IFMの第3のベクトルの第2の要素(つまり、要素c1)は、順序を変えて、先に行われて第2のレーンのそれぞれの乗算器126でのそれぞれのウェイトによりかけられる。
同時に、レーン0、レーン2、及びレーン3での乗算器は、それらのそれぞれのローカルレジスタファイルから対応するウェイトのW[0,0…7,b]、W[2,0…7,b]、及びW[3,0…7,b]を受信する。
しかし、活性化b1=0はスキップ(skip)されてレーン1は順序を変えて演算するため、レーン1の乗算器は、IFMベクトル(「ピクセル」)bに関連したものではなく、IFMベクトル(「ピクセル」)cに関連したウェイトW[0,0…7,c]を受信する。
タイル122は、今、2つのピクセルを同時にプロセッシングするため(ピクセルb及びピクセルcの一部)、列で乗算の積を加算することは、誤った結果を誘導する可能性がある。
正確な結果を得るために、2つの加算器ツリーの1つは、ピクセルbに対するドット積を計算するのに使用される一方で、他の加算器ツリーをピクセルcに対するドット積の計算を開始するために使用する。
第2のレーンの各乗算器126により形成された積は、各第2の加算器128B(図1Cにおいて、B,0…7で示される)にフィードされる一方、他のレーンの乗算器126により形成された積は、それぞれの第1の加算器128Aにフィードされる。
事前に要素(c1)の順序を変えた移動は、活性化バッファ124で「ホール(hole)」を形成する。
このことは、後続のクロックサイクルで事前に他の要素の順序を変えて進行できるという利点がある(図1Eに示したように、要素(d1)が予め順序を変えて進行される)。
したがって、それぞれのウェイトとIFMの第2のベクトルの非ゼロ(nonzero)の要素の積が計算される。
それらの合計が、各列の第1のアキュムレータ130Aにあれば、各列の第1のアキュムレータ130Aは、列のウェイトベクトルとIFMの第2のベクトル(b[])とのドット積を含み、OFM伝達ファブリック106に出力する(その次に、各列の第1のアキュムレータ130Aは、クリアされることがある)。
(数2)
ΣA,0=b0×W0,0,b+b2×W2,0,b+b3×W3,0,b
...
ΣA,7=b0×W0,7,b+b2×W2,7,b+b3×W3,7,b
このとき、各列の第2のアキュムレータ130Bは、それぞれのウェイトベクトルとIFMの第3のベクトル(c1)とのドット積の1つの項(term)だけを含む。
(数3)
ΣB,0=c1×W1,0,c
...
ΣB,7=c1×W1,7,c
図1Eを参照すると、後続の演算で(例えば、次のクロックサイクルの間)、ウェイトベクトルとIFMの第3のベクトルの要素(c0、c3)との残りの積が形成される(MRアレイ122の各列の第1及び第4の乗算器126により)。
そして第2のアキュムレータ130Bにおいて、第2のアキュムレータ130Bに既に格納された1つの積に加えられ、それぞれのウェイトベクトルとIFMの第3のベクトル(c[])とのドット積が完成する。
(数4)
ΣB,0=c0×W0,0,c+c2×W1,0,c+c3×W3,0,c
...
ΣB,7=c0×W0,7,c+c2×W1,7,c+c3×W3,7,c
ウェイトベクトルとIFMの第4のベクトル(要素d0〜d3で構成され、d0=d4=0)とのドット積は、d1(c1に関連付けられた積が、以前のサイクルに対して実行されたため、活性化バッファ124に「ホール(hole)」を残す)、及びd2(c2=0であるため)の両方の順序をあらかじめ変えて進行することにより、同時に計算される。
(数5)
ΣA,0=d1×W1,0,d+d2×W2,0,d
...
ΣA,7=d1×W1,7,d+d2×W2,7,d
この時点で、IFMベクトルc[]及びIFMベクトルd[]の両方に対するOFMの計算が完了する。
同様に、図1Fに示したように、活性化バッファが相補的スパーシティ(complementary sparsity)を有する2つのベクトルのe[]及びf[]を含むと、MR列122の各列は、同時に2つのドット積を形成する。
図1Fの例では、例えば、各重み(ウェイト)ベクトルとIFMの第5のベクトル(要素e0〜e3で構成され、e0=e1=0)とのドット積は、各重みベクトルとIFMの第6のベクトル(要素f0〜f3で構成され、f2=f3=0)とのドット積と共に形成されてもよいし、第6のベクトルの非ゼロ(non−zero)の要素は、すべて順序を変えて、先に進行させてもよい。
図1Gは、IFMの第7のベクトルg[](要素g0〜g3で構成され、g1=g2=g3=0)が活性化バッファ124の第1の列にあり、IFMの第8のベクトル(要素h0〜h3で構成され、h2=h3=0)が活性化バッファ124の第2の列にある状態を示す。
図1Gは、IFMの第8のベクトルの(非ゼロ)要素の順序を変えて先に進めすることにより、それぞれの対応するウェイトとIFMの第8のベクトルh[]とのドット積がそれぞれの対応するウェイトとIFMの第7ベクトルのドット積と同時に形成され、IFMの第7のベクトルの(非ゼロ)の要素と共に、それらがプロセッシングされる方法を示す。
IFMの第8のベクトルの(非ゼロ)要素のいずれか1つ(h0)が、IFMの第7のベクトルの(非ゼロ)要素(g0)と同じレーンにあるため、IFMの第8のベクトルの(非ゼロ)要素のそれぞれは、このような要素が先に順序を変えて進行するようにMR列122の隣接のレーンにシフト(shift)される。
このように、各列の上段から2番目の乗算器126(これは、この位置には、ゼロ要素を有するため、IFMの第7のベクトルg[]には、使用されずに)にIFMの第8のベクトルh[]の第1の要素(h0)がフィードされる。
そして各列の第3の乗算器126(これは、また、IFMの第7のベクトルg[]にも使用されずに)にIFMの第8のベクトルh[]の第2の要素(h1)をフィードするのは、IFMの第8のベクトルの(非ゼロ)要素がIFMの第7のベクトルの(非ゼロ)の要素と共にプロセッシングされるようにする。
また、ウェイトベクトルの対応する要素もシフトされる。
具体的には、最上段レーンと関連付けられている各乗算器ユニットは、2つのウェイトをフェッチし、1つのウェイトは、図1Gで(w0,0…7,g)とラベル付けされたg0と関連付けられ、ここで、(0…7)は、対応する列を指し、そして他のウェイトは、図1Gで(w0,0…7,h)でラベリングされたh0と関連付けられる。
各ウェイト(w0,0…7,g)は、g0を受信する最上段レーン内に、それのそれぞれの乗算器126にフィードされる。
しかし、各ウェイト(w0,0…7,h)は、1つのレーンの下にシフトされ、そしてh0を受信する上段から2番目のレーンの関連付けられた乗算器126にフィードされる。
最後に、上段から2番目のレーンでの乗算器ユニットは、それぞれh1に関連付けられたウェイト(w1,0…7,h)をフェッチし、このようなウェイトを1つのレーンの下に、h1を受信する上段から三番目のレーンにずらす。
図1Gに示した状態で、下段レーン内の各MR列122の各乗算器126は、1サイクルの間に使用されない。
各活性化レーンが同じチャネルから選択できる、より多くの(例えば、3)値を有し得るようになり、より深い(例えば、3−デプス(depth))活性化バッファ124を有するようにMRタイル102を構成する。
これにより、いくつかの実施形態では、すべての乗算器126を完全に利用できない、このような失敗の可能性を減少させることができる。
レーンから1つよりもっと遠い距離から非ゼロ活性化を持ってくること(シフトすること)は、またゼロ値の活性化を非ゼロ値の活性化に代替するのにより多くの柔軟性を提供する。
2つのセット以上の加算器ツリー及び関連付けられたアキュムレータがあれば乗算器の活用度を増加させることができる。
図1Hは、図1Gに示したものに対する後続のサイクルを示し、後続のサイクルの内、活性化バッファ124の第1の列は、IFMの第9のベクトル(完全にゼロで構成される)を含み、活性化バッファ124の第2の列は、IFMの第10のベクトル(要素j0〜j3で構成される)を含む。
図1Hに示した状態では、IFMの第10のベクトルのすべての要素は、順序を変えて、先に進行され得る。
それぞれのウェイトベクトルとIFMの第10のベクトルj[]のドット積は、IFMの第9のベクトルのプロセッシングのための1サイクルの遅延を発生させずに計算されてもよい。
上述した例で示したように、乗算器ユニット126の出力は、一部のクロックサイクルの間に、加算器ツリー128Aにフィードされてもよいし、他のクロックサイクルの間に加算ツリー128Bにフィードされてもよい。
乗算器ユニット126の出力が加算器ツリー(128A又は128B)にフィードされないとき、対応する加算器ツリー入力はゼロに設定される。
図1Iは、例えば、図1D〜図1Hの演算をサポートするために、任意の乗算器126の出力を第1の加算器128A又は第2の加算器128Bに伝送するためにマルチプレクサ132を使用する構成を示す。
ここで、以下のようなことを含むマルチプレクサの制御信号(sel_adder_tree[0…15])は、タイル内で計算を調整するタイル制御ロジック144から来る。
1.キャッシュからIFMベクトルをフェッチすること。
2.活性化バッファから活性化レーンへの非ゼロ活性化の選択、及び多重化を行うこと。
3.各IFMベクトルと共に使用する加算器ツリーの選択、及び正しい加算器ツリーに乗算器ユニットの出力を多重化すること。
4.列アキュムレータをクリア(clear)すること。
乗算器出力は、常に加算器ツリー128A又は加算器ツリー128Bにフィードされるが、同時に加算器ツリー(128A及び128B)の両方にフィードされないため、より少ないロジックにより加算器ツリー(128A及び128B)の両方を実装することが可能である。
図1Jは、第1の加算器128A及び第2の加算器128Bの両方が1つの物理的加算器ツリーと適切なマルチプレクサ(図示せず)を使用して実装される論理概念であり得る方法を示す。
説明の明確性のために、それぞれが4つの入力を有する2つの加算器ツリーを構成することを考慮する。
4入力加算器ツリーは、3つの加算器を使用して実装され得る。
簡単(単純)な場合には、各加算器ツリーは、3つの加算器の要素を必要とするため、2つの4入力加算器ツリーを構成するには、6つの加算器の下位要素(sub−element)が必要である。
少ない追加のマルチプレクサとともに3つの加算器の要素だけを使用して、2つの4入力加算器ツリーを構成する。
考慮すべき重要な3つの場合がある。
(i)第1の場合では、4つの入力のすべては、第1の論理加算器128Aにより合算される(そして第2の論理加算器128Bの出力はゼロである)。
(ii)第2の場合では、3つの入力は、第1の論理加算器128Aにより合算される(そして第2の論理加算器128Bの出力は、残りの入力と同じである)。
(iii)第3の場合では、2つの入力は、第1の論理加算器128Aにより合算され、そして2つの入力は、第2の論理加算128Bにより合算される。
2つの追加の場合(図示せず)で、第2の論理加算器128Bは、3つ又は4つの入力を合算し、そして第1の論理加算器128Aは、それぞれ、残りの入力又はゼロと同じである。
本明細書で使用するように、「加算器(adder)」は、図1Jの例示のように物理的加算器及びマルチプレクサの組み合わせで形成された複数の論理加算器の1つであるか、又は合計を形成する少なくとも2つの数字を加えるための物理的な回路である。
図1Jに示したように、6個ではなく、もっぱら3つの加算器要素(一部の追加的なマルチプレクサとともに、図示せず)は、すべての可能な場合を実装するのに十分である。
図1Kは、いくつかの実施形態での乗算器ユニット103の内部回路図を示す。
乗算器ユニット103は、符号なし8ビット×符号なし8ビットの乗算器126と、ローカルウェイトを保有(hold)するレジスタファイル127と、乗算器126に対する入力ウェイトを選択するロジック143と、ローカルウェイトを隣接したレーンに「シフト(shift)」するロジック(149、151)と、動的(dynamic)消費電力を低減させるためにマルティプライ・バイ・ゼロ(multiply−by−zero)の状況を検出し、乗算器をアイドルダウン(idle down)するロジック(145、136、157、155、159)及びウェイトローディングロジック157と、を備える。
レジスタファイル127は、ウェイトを保有する。
1つのレジスタは、単一のint8又はuint8ウェイトに対応する。
大きなビット幅を有するウェイトは、1つ以上のレジスタを占有し、例えば、int16又はuint16ウェイトは2つのレジスタを占有する。
レジスタファイル127は、18個のint8又はuint8重み値を保有するか、又は対応する9つのint16又はuint16の重み値を保有する。
後述するように、レジスタの数は、部分結果の生成に依存せずに16ビットのウェイトを使用する3−バイ−3(3−by−3)のコンボリューションを計算できるように選択され得る。
レジスタファイル127は、バーティカルウェイトロードバス(vertical weight load bus)101{swt_in[C]、wt_abs_ld_in[7:0][C]}を介してウェイトをロードするための単一の入力ポートを含む。
それぞれのMR列133のCは、Cが0(ゼロ)から7までの範囲である独自のウェイトロードバスを受信する。
バーティカルウェイトロードバス101{swt_in[C]、wt_abs_ld_in[7:0][C]}上でウェイト値を設定し、ウェイトレジスタインデックスバス(weight register index bus)(wt_ld_idx[4:0])上でデスティネーションレジスタのインデックス(ゼロから17まで)を指定する。
そしてウェイトをレーン(L)にロードするためにレーンウェイトロードイネーブル(lane weight load enable)(wt_ld_en_lane[L])をアサート(assert)することにより、ウェイトはウェイトデコンプレッションユニット(Weight Decompression Unit)138(図1Kを参照)から、一度に1つの全体のレーンにロードされる。
図1Kに示すように、単一のレーン内ですべてのウェイトをロードするために18サイクルがかかり、全体のMUアレイ122内ですべてのウェイトをロードするために18×16=288クロックサイクルがかかる。
一部の状況では、特に完全接続された(fully−connected:FC)レイヤー(layer)を計算する際、ウェイトのロードの速度が十分でないことが有り得る。
コンボリューションレイヤー計算とは異なり、FCレイヤーの計算中に、各ウェイトは一度だけ使用された後に廃棄される。
したがって、FCレイヤーを計算する際に、乗算器126の最大活用を維持するためには、すべてのクロックごとにそれぞれの乗算器ユニット103で1つのウェイトをロードする必要があり、これは、図1Kに示したものよりも16倍速い。
この場合での実施形態は、例えば、ウェイトのロードを高速化するために追加のウェイトロードバス101{swt_in[C0]、wt_abs_ld_in[7:0][C0]}、{swt_in[C1]、wt_abs_ld_in[7:0][C1]}などを含むように修正されてもよい。
図1Kで、ウェイトの中のいずれかが1つのレーン上にシフトされているうちに、第2のウェイトが1つのレーンの下にシフトされる。
第3のウェイトが地域的(ローカル)に(locally)に消費される場合には、ウェイトレジスタファイル127は、3つのウェイトを同時にフェッチさせる3つの出力ポートを含む。
ローカル(局部)消費(local consumption)のために、ローカルレジスタファイル(local register file)からウェイトをフェッチすることは、マルチプレクサ147を使用して達成される。
例えば、図1Cにおいて、マルチプレクサ147は、IFM値(a0)と乗じられるローカルに格納されたウェイト(W0,0,a)を選択する。
また、図1Dにおいて、マルチプレクサ147は、IFM値(c1)と乗じられるローカルに格納されたウェイト(W1,0,c)を選択する。
ローカルレジスタファイル127からウェイトをフェッチすること、並びに、そのウェイトを下位レーンにシフトさせることは、マルチプレクサ149を使用して達成される。
例えば、図1Gでは、ローカルに格納されたウェイト(W0,0,h)は、h0と乗じられるように1つのレーンの下にシフトされる。
最後に、ローカルレジスタファイル127からウェイトをフェッチすること、並びに、該当するウェイトを上位レーンにシフトさせることは、マルチプレクサ151を使用して達成される。
ABU(活性化ブロードキャストユニット)141は、各活性化レーンのシフト及びブロードキャストされる(活性化レーンに)各IFM値に関連付けられた活性化バッファへのオフセット(offset)に関する完全な情報を有する。
そのため、活性化ブロードキャストユニット141は、信号(sel_wt_self[4:0]、sel_wt_dn1[4:0])、及び信号(sel_wt_up1[4:0])をそれぞれ使用してすべての3つのレジスタファイルフェッチマルチプレクサ(147、149、及び151)を制御する。
MR列133の領域を減少させるために、例えば、同じレジスタファイルからウェイトを、同時に上及び下にシフトすることを許容しないことにより、レジスタファイル127からの出力ポートの数は、3個から2個に減らせる。
たとえば、すべてのウェイトのシフトを許容しないか、又は1つのシフトを許容するかして、ローカルにウェイトを消費することで、レジスタファイル127内の出力ポートの数は、さらに1つに減らせる。
しかし、シフト、及び最大のシフト距離を限定することは、乗算器の利用率を多少減らすことができる。
MR列と活性化ブロードキャストユニットの複雑性、面積、及び消費電力を低減させながらも、活性化バッファデプス(activation buffer depth)を有するシフトターゲットレーン選択の多様な変形及び組み合わせが、乗算器の利用率を最適化するように考案され得る。
関連付けられた開始で記述されたように、これを達成するための、特に効果的な方法及び装置は、擬似ランダム(pseudo−random)方式で活性化レーンをシャッフリング(shuffling)又はパーミューティング(permuting)すること(関連付けられたウェイトをそれに応じてロードしながら)を含む。
図1Kでは、マルチプレクサ143は、乗算器126により乗算に使用される入力ウェイトを選択する。
前述したように、入力ウェイトは、ローカルウェイトレジスタファイル127から来ることができるか、隣接した上部レーン(そして、いくつかの実施形態で同じ列)でのウェイトレジスタファイルから「ダウンシフト(shifted down)」されるか、又は隣接した下部レーン(そして、いくつかの実施形態で同じ列)でのウェイトレジスタファイルから「アップシフト(shifted up)」される。
これにより、信号の「{swt_self、wt_abs_self[7:0]}、{swt_dn1、wt_abs_dn1[7:0]}、及び{swt_up1、wt_abs_up1[7:0]}」により表示される。
ABU141は、各活性化レーンのシフト及びブロードキャストされる(活性化レーンに)各IFM値に関連付けられた活性化バッファのオフセットに関する完全な情報を有するため、活性化ブロードキャストユニット141は、信号の(sel_mult_wt[1:0])を用いて、マルチプレクサ143を制御する。
例えば、図1Cにおいて、マルチプレクサ143は、IFMの値(a1)と乗算されるウェイト(W0,0,a)を伴う(伝達する、運ぶ)「{swt_self、wt_abs_self[7:0]}」を選ぶだろう。
図1Dにおいて、マルチプレクサ143は、IFM値(c1)と乗算されるウェイト(W1,0,c)を伴う「{swt_self、wt_abs_self[7:0]}」を選ぶだろう。
図1Gでは、マルチプレクサ143は、列ゼロ0内の上段から第2の乗算器によりIFM値(h0)と乗算されるウェイト(W0,0,h)を伴う「{swt_dn、wt_abs_dn[7:0]}」を選ぶだろう。
図1Kに示すように、それぞれのレジスタファイル127は、9ビット幅を有する。
ここで8つのビットは、ウェイトのサイズを保有し、1つのビットはウェイト符号を保有する。
適用可能な場合は、「ゼロ点(zero−point)」の定数Zが事前に追加された(pre−added)、サイン・アンド・8ビット・マグニチュードのフォーマットで格納される。
レジスタファイル127からウェイトがフェッチされるとき、符号付きint8タイプをサイン・アンド・8ビット・マグニチュードの表現(適用可能な場合ゼロポイントの追加を含む)にオン・ザ・フライ(on−the−fly、即時)変換するロジックを追加することで、レジスタファイル127のビット幅は、8ビットに減らせる。
レジスタファイル134のサイズが、記述された領域の節約をもたらすのに十分に大きく選択されると、このようなオン・ザ・フライ変換は重要であり得る。
活性化ブロードキャストユニット(ABU)141は、乗算器126への入力として使用される活性化「{sact、act_abs[7:0]}」をブロードキャスト(broadcast)する。
ロジックゲート(145及び159)は、信号(wt_zero及びact_zero)(ABUからの補助信号)を使用してウェイト(乗算に使用される)がゼロであるか、活性化(乗算に使用される)はゼロであるか、又は両方であるマルティプライ・バイ・ゼロ(multiply−by−zero)の状況であるかをチェックする。
マルティプライ・バイ・ゼロの状況が発生すれば、結果信号(mult_by_zero)がアサート(assert)され、「mult_in_ce」の信号を使用してウェイトと活性化乗算器入力レジスタに対するクロックがゲート(gate)されるようにする。
入力乗算器レジスタのクロックをゲートすることは、乗算器入力及び乗算器の内部信号が、それの以前の状態を維持する(固定)させるようにし、これにより、スイッチング活動を防止することにより、動的消費電力を低減させる。
このような活動と並行して、フリップフロップのゲート157は、1サイクルだけ(mult_in_ce)信号を遅延させて(mult_out_zero)の信号を生成する。
これは論理ゲート155がゼロとの乗算に対応する乗算器出力の(mult_result[15:0])をゼロ化(zero out)させる。
後述するように、全体のタイルの計算が中断(stall)する必要があるたびに、ABUはまた、すべての乗算器をアイドル(idle)するために、信号(en_mult)を伝送することに留意しなければならない。
図1Kの信号名は、次の規則に従うことに留意しなければならない。
「act」は、活性化を示す。
「wt」は、ウェイトを示す。
「sact」、「swt」、「mult_out_s」、「s_in_a」などでの「s」は、「sign」を示す。
そして「wt_abs」、「act_abs」などの「abs」は、絶対値(大きさ)を示す。
ABUは、サイン・アンド・8ビット・マグニチュード(sign−and−8bit−magnitude)のフォーマットで活性化「{sact、act_abs[7:0]}」をブロードキャストする。
同様に、選択された(乗算のための)ウェイト「{mult_swt、mult_wt_abs[7:0]}」は、またサイン・アンド・8ビット・マグニチュードのフォーマットで提供される。
乗算器126に対する入力信号「{s_in_a、mult_in_a[7:0]}、{s_in_b、mult_in_b[7:0]}」を作成するために、レジスタ136は、乗算されるウェイトと活性化をラッチ(latch)する。
いくつかの実施形態では、乗算器は2つの8ビットの絶対値を乗算し、そして2つの符号の排他的論理和(exclusive−or−ing)を実行することにより、積を計算し、結果的にサイン・アンド・16ビット・マグニチュード(sign− and−16bit−magnitude)の出力「{mult_out_s、mult_out_abs[15:0]}」が生成される。
信号(mult_out[15:0])を生成するために、積の符号がアサート(assert)されるとき、積の絶対値(mult_out_abs[15:0])を負数化することにより(つまり、積の結果が負数)、ロジック153は、サイン・アンド・16ビット・マグニチュードの結果を加算器ツリーにフィードされる16ビットの符号付き出力に変換する。
最後に、すでに述べたように、ロジック155は、マルティプライ・バイ・ゼロの場合において、「mult_out[15:0]」をゼロ化する。
乗算制御において、ABUの役割を要約すると、ABU141は、サイン・アンド・8ビット・マグニチュードのフォーマットの入力IFM、レーンアップ及びレーンダウンのシフトを含むウェイト選択制御、並びにブロードキャストされる現在の活性化がゼロであることを示す補助信号(act−zero)を提供する。
「act_zero」信号がアサートされると、「{sact、act_abs[7:0]}」の実際の値は、活性化レーンのスイッチング活動を低減させるために変更されないことがあることに留意しなければならない。
ゼロ値の活性化(zero−valued activation)がブロードキャストされる場合が発生することがあるにもかかわらず、いくつかの実施形態は、このような発生を最小限に抑えることを目的とする。
図1B〜図1Hは、いつでも可能な限り、ABU141の内部のIFMバッファ124から非ゼロ値の(non−zero−valued)活性化をフェッチする。
正しいドット積を獲得するために、関連付けられたウェイトを乗算器に多重化することにより、スパース活性化(sparse activations)をサポートする計算を示す。
IFMバッファ124は、キャッシュ139からIFMをフェッチし、活性化ステージング(activation staging)FIFO165でフェッチされたIFM値をステージングする(図1L及び図1MAを参照)。
その後、複数の活性化マルチプレクサ163は、IFMステージングFIFO165から非ゼロ活性化をフェッチするために動作し(可能であれば)、その結果、活性化は、順序を変えて活性化をフェッチするだけでなく、隣接したレーンから上又は下に「シフト(shift)」され得る。
図1MAと図1MBでは(以下で説明される)、「ルックアヘッド(look−ahead)」の距離(h)は、同じチャネルに応じた検索(search)の距離であり、「ルックアサイド(look−aside)」の距離(d)は、側面への検索距離であり、そしてFIFOのデプス(F)は、活性化FIFO165のデプスを示す。
用語の明確性のために、複数の活性化マルチプレクサ163は、IFMステージングFIFO165からの入力としてIFMチャンネルを受け入れ、ルックアヘッド及びルックアサイドを適用して活性化をフェッチし、そして結果である値を活性化「レーン」(チャンネルではない)に出力する。
このような用語は、テンソル内のデプス「チャンネル」の論理的インデックス対(vs.)物理的ハードウェアの「レーン」に沿って流れる活性化概念を区別することを助ける。
IFMステージングFIFO165の内部のレジスタ161は、選択的であってもよいし、説明の明確性のために示されるものであることに留意しなければならない。
ある場合では、活性化ステージングFIFOレジスタ161が除去され、IFMマルチプレクサ163が多重ポートのキャッシュ出力に直接接続される。
そしてキャッシュ139からIFMを、正しい順序でマルチプレクサ163に直接フェッチするために、IFMキャッシュのリードロジック(read logic)を修正することにより、面積と消費電力の低減が可能である。
図1MAは、同じレーンの値と他のレーンの値を含む、活性化FIFO165に格納された、いくつかの可能な値のいずれか1つから、タイルの複数のレーン(例えば、タイルで総16個のレーン)のいずれか1つにおいて乗算器126にフィードされ、そして(タイプ変換器135を介して)MRアレイ122にブロードキャストされる活性化ステージングFIFOレジスタ161から活性化を選択するのに使用されるマルチプレクサ163の構成を示す。
より一般的な場合には、各セルは、2×dのマルチプレクサに行くことができ、そして末端(end)にあるため、h×(d+1)のソース(source)を有する第1のレーン及び第16のレーンを除いては、各デスティネーションは、ソースの同一の数(2×h×d)を有し得る。
図1Nで示したそれぞれのMR列のARU(Accumulate and Return Unit)167に常駐する出力キャッシュのサイズとしては、出力キャッシュサイズ(C)をさらに定義する。
そして入力帯域幅(I)は、IFMストリーミング帯域幅(クロックサイクル当たり16バイト長さのIFMベクトルの数)であり、出力帯域幅(O)はOFM伝達ファブリック帯域幅(クロックサイクル当たり8バイト長さのOFMベクトル結果の数)である。
なお、生のスパーシティ(raw sparsity)(s%)は、活性化テンソルでゼロ要素をカウントすることに基づいて、観察されたスパーシティである(活性化テンソルでの総活性化の数に比例して)。
実際のスパーシティ(actual sparsity)(s%)は、コンボリューションストライド(convolution stride)を考慮し(例えば、コンボリューションストライディング(striding)は、特定のゼロ値の活性化を使用しないか、又は特定のゼロ値の活性化を複数回含むことがある)、コンボリューションパディング(convolution padding)を考慮する、活性化テンソルに対する2次元コンボリューション(conv2d)のプロセス中に適用されたゼロ要素の実際の数である(活性化テンソルでの総活性化の数に比例して)。
そして乗算器の利用率(UM)は、乗算器が有効な乗算の(非ゼロ活性化を乗じる)を実行している間のサイクルのパーセンテージとして定義され得る。
例えば、1×1のコンボリューションについて、活性化テンソルがs%の生のスパーシティを有すれば、「ナイーブ(naive、単純)」アプローチ(ゼロスキップがない「密度が高い(dense)」の計算モード)を使用する場合の乗算器の利用率は(1−s%)であり、そしてノン(non)1×1コンボリューションに対し、ナイーブ(密度が高い)計算を使用すると、乗算器の利用率は(1−s%)である。
図1MBは、
(i)図1MAで示された第1の構成で図1MAの回路の4つの行の拡大図、
(ii)第2の構成で図1MAの回路の4つの行の拡大図、及び
(iii)第3の構成で図1MAの回路の4つの行の拡大図を示す。
第1の構成では、マルチプレクサの入力は上及び下の行からからくるが、同じ行からは来ない。
第1の構成は、より少ないワイヤ(wire)を有し、検索を他のチャンネル(つまり、より少ない行)に分散させるため、これは1つのチャネルが連続的なゼロを有する傾向がある場合に有利であり得る。
なお、2倍のスピードアップを目標とすれば、2つの位置は十分であり、チャネル(1及び16)は、構成(h=2、d=1)で、同じ数の候補を有する。
第2の構成は、「フルマルチプレックススキーム(full multiplex scheme)」と呼ばれることがある。
このような構成では、マルチプレクサの入力は、上及び下のチャンネルから来るし、次のデプスの同じチャネルから来る。
第3の構成では、マルチプレクサの入力は、同じチャネルからのみ来る(つまり、ルックアサイド(look−aside)d=0)。
第3の構成は、低い複雑度を有し(つまり、マルチプレクサ及びワイヤの半分より少なく要求される)、そしてやや減少した乗算器の利用率の犠牲を払って、単純なウェイトスキップ(スキップ)のサポートを許容する。
図1Nは、8つのMR列133及び16個の行からなる乗算器ユニット126のグリッド(grid)を含むMRアレイ122を有するタイル102の最上位レベルを示す図である。
MUとラベルされた、それぞれの乗算器ユニット126の要素は、MRアレイ122内で乗算器ユニットの行及び列の座標に対応する添字(MUrow、col)を含む。
ウェイト圧縮解除ユニット(weight decompression unit)138は、タイルに対しローカル(local)に位置したSRAMバンクセット109から圧縮されたウェイトを受信するために使用され、ウェイトレジスタ134にウェイトを記録するプロセス中にウェイトを圧縮解除する。
ウェイトはウェイトのスパーシティを利用するために圧縮されることがあり、これらを格納するために必要とされるメモリ及び乗算器ユニット126にこれらを伝送するのに必要なバス帯域幅を減少させる。
代替的に、ウェイトは圧縮されず、SRAMに格納されてもよい。
IFM伝達ファブリック104のボトルネックを減少させるために、IFMキャッシュ139は、データをキャッシュ(cache)するために使用され得る。
そして例えば、図1D〜図1Hのコンテキスト(context)で説明したように、ゼロ値の活性化スキップ(又は「活性化スキップ(activation skipping)」)を実装するために、活性化ブロードキャストユニット(ABU:activation broadcast unit)141が使用され得る。
図1Oは、ニューラルプロセッサ制御のヒエラルキー(hierarchy)を示す。
ニューラルプロセッサは、図1Aに示した多様な要素を制御できる状態マシン(state machine)、「制御有限状態マシン(control finite state machine)」(制御FSM)、又は「制御ロジック(control logic) 」を含み得る。
制御ヒエラルキーは、「グローバル(global)」及び「ローカル(local)」を有する2つのレベルを含み得る。
演算では、グローバル制御(global control:GC)FSM140は、ウェイトロード段階(weight load phase)を開始すること、及び計算段階(computation phase)を開始・制御することを含むローカル制御ステートマシン(local control state machine)(142、144)の演算を調整(orchestrate)する。
タイル102は、ゼロ値の活性化スキップをサポートするため、タイル102の出力レートは、それぞれのタイル102により受信されるIFMスライスの実際のスパーシティに依存して多少変化することができる。
従って、タイル102での計算は、いくつかのクロックの前又は後で実行され得る。
したがって、グローバル制御ロジック140は、ローカルタイルの制御ロジック144の動作を調整し、複数のタイル102からの出力を再び同期化し、減少ファブリック111を使用して減少を完了し、そしてOFM伝達ファブリック106を介して最終のOFM結果をSRAMバンクセット109に伝送する。
複数のタイルの出力の同期化は、例えば、ARU内部で小さな出力FIFO198(又は、179)を使用し、そしてタイルの出力FIFO198がフル(full)になる極端な場合には、出力FIFOがフルのタイルをスロットリング(throttling)(又は中止(stalling))して、他のタイルが追いつくことができるようにすることで達成される。
複数のSRAM制御(SC)FSMの142のそれぞれは、SRAMバンクセット109内のそれぞれのSRAMバンクに対するSRAMアドレス及びリード/ライト(read/write)信号を生成することができる。
複数のタイル制御(tile control:TC)FSMの144のそれぞれは、活性化をスキップ(skip)することができる(例えば、それらがゼロの値を有するとき)。
演算を準備するためには、ホストCPUは、それぞれのIFM及びOFMのテンソルの開始アドレス、並びにサイズ(高さ、幅、深さ、又はバッチサイズ(batch size))をSRAM制御FSM142にロードし、そして演算タイプ(完全接続された(FC:fully connected)又はコンボリューション)、IFM、OFM、及びウェイトデータタイプをグローバル制御FSM140にロードする。
ホストCPUは、IFM及びOFMのウェイトサイクリングの設定、IFMトラバーサル(traversal)の順序、IFM通過回数(後で詳細に説明される)、他の計算マッピングの設定、活性化関数、並びにプーリングの選択(もしあれば)をロードし、部分結果の生成を活性化又は非活性化にし、ウェイトテンソルサイズ(高さ、幅、又は入力及び出力のデプスチャンネルの数)をロードする。
ホストCPUは、ジグザグZの高さをロードし(以下で、より詳細に説明する)、そしてコンボリューションパディング及びコンボリューションストライドに対するオプションをロードする。
それぞれのSRAMバンクセット109内のIFM及びOFMのテンソルのアドレスを含む演算パラメータにより要求される接続性を構成するために、ホストCPUは、IFM伝達ファブリック、OFM伝達ファブリック、及び減少ファブリック(RF)に関連付けられたレジスタにさらにライト(write)する。
演算を開始するためには、ホストCPUは、グローバル制御FSM140のレジスタにライトする。
その後、グローバル制御FSM140は、開始するためにSRAM制御FSM142及びタイル制御FSM144に信号を送る。
いくつかの実施形態では、グローバル制御FSM140は、コンボリューションウィンドウ内でスキャンを制御し、コンボリューションウィンドウを変換し、そしてIFMテンソルをトラバース(traverse)して(横切りながら)IFMスライスのストリームを生成する。
グローバル制御FSM140は、平面ピクセル(x、y)の座標、デプスチャンネルインデックス(d)、IFMスライス、及びリード信号をSRAM制御FSM142に伝送する。
それぞれのSRAM制御FSM142は、開始アドレスを追加し、適切なIFMデータをフェッチし、そしてデータをIFM伝達ファブリック104に出力する。
一般的に、IFM(及びOFM)テンソルのサイズが大きすぎて、単一のSRAMバンクセット109に適合しないため、IFM(及びOFM)テンソルが部分で小さく分けられて複数のSRAMバンクセット109に格納されるようにする。
計算中に、正しいSRAMバンクセット109からIFMをフェッチしてOFMをライトするためにIFM及びOFMの伝達ファブリックのオン・ザ・フライの再構成にも影響をまた与えながら、グローバル制御FSM140は、トラバースされる(特定の順序でフェッチされたり、格納されたりする)IFM及び(該当する)OFMのテンソルを調節する。
すべてのタイルキャッシュ139は、実質的に同時に該当するデータを受信することができる。
グローバル制御FSM140は、
(i)入ってくるデータを格納するIFMキャッシュ139のレジスタファイルに対するアドレスと、
(ii)IFM伝達ファブリック104からキャッシュ139にデータをライトするためのライトイネーブル(write enable)信号と、を用いて、すべてのタイル制御FSM144を計算して提供する。
IFMスライスがIFM伝達ファブリック104を介してSRAMバンクセット109から来る場合には、ライトイネーブル信号は活性化され、IFMスライスがすでにキャッシュ(cache)された場合には、ライトイネーブル信号は非活性化される。
グローバル制御FSM140が特定の順序でIFMレイヤー(テンソル)をトラバース(traverse)するにつれ、グローバル制御FSM140は、また計算のために必要なIFMスライスがキャッシュされたかを追跡し、IFMキャッシュ139にすでに存在しないデータをリードするときに、SRAM制御FSM142に信号を送る。
データがタイルキャッシュ139に既にキャッシュされた場合は、グローバル制御FSM140は、SRAM制御FSM142がSRAMリードをスキップするようにリード信号を非活性化に維持する。
IFMキャッシュの管理を単純化するためには、IFM伝達ファブリックからの各IFMスライスは、すべての関連付けられたデスティネーショタイル(後で説明し、マッピングにより規定される)とデスティネーショタイルの数に関係なく、IFMキャッシュに139内の同じアドレスにおいてそれら(すべての関連付けられたデスティネーショタイル)のそれぞれのIFMキャッシュにライトされることに留意しなければならない。
しかし、不均一な活性化のスパーシティにより、タイルの計算は、多少異なる速度(レート)で実行されるため、各タイルの制御ロジックは、他のタイルとは独立してIFMキャッシュ139リーディング(reading)をローカルに管理する。
いくつかの実施形態では、OFM結果をライトするプロセスは類似している。
しかし、活性化スキップのために、計算の遅延は変化し得る。
各タイル制御FSM144は、そのタイル内のすべての列が計算を完了した時点を指す情報を含む。
各タイルのタイル制御FSM144は、「ofm_ready」の信号をグローバル制御FSM140に伝送し、このグローバル制御FSM140は、SRAM制御FSM142をしてOFM伝達ファブリック106からのOFMスライスをOFMテンソルに適切な(x、y、d)インデックスでSRAMバンクにライトするように指示する。
OFMテンソルトラバーサルのうち、グローバル制御FSM140は、IFMテンソルトラバーサルのうち、IFM(x、y、d)スライス座標の生成と類似した方法でOFM(x、y、d)のOFMスライス座標を生成する。
計算が完了すると、グローバル制御FSM140は、ホストCPUに割り込みを伝送する。
上述したように、活性化スキップにより、例えば、タイルはクロックあたり最大2つの出力結果を生成することができる。
したがって、乗算器の利用率の減少を避けるためにIFM伝達ファブリック104は、クロック当たり最大2つのIFMスライスを供給できなければならない。
したがって、ローカルタイル制御FSM102は、キャッシュ内のプロセッシングされる残りのデータの量に対しグローバル制御FSM140に知らせることで、グローバル制御FSM140は、IFMキャッシュアンダーフロー(IFM caches underflow)を避けるためにSRAM制御ロジック140がIFMデータのフェッチを再開(resume)するように指示することができる。
タイルIFMキャッシュの中のいずれかがフル(full)になると、グローバル制御FSM140は、SRAM制御FSM142に指示して、SRAMからIFMスライスをリードすることと、タイルキャッシュにIFMスライスをライトすることと、を含むIFMテンソルトラバーサルを一時停止(pause)させる。
図1Pを参照すると、いくつかの実施形態では、IFMキャッシュ139は、16個のレーン170を含む。
各レーンは、デュアル入力ポート及びデュアル出力ポートを有するレジスタファイル169を含む。
活性化スキップ(そしてMU列当たり2つの加算器ツリーを含む)により、システムタイル102がクロック当たり最大2つの活性化をプロセッシングすることができるため(ゼロ活性化が十分であるとき)デュアルポートが使用されてもよい。
活性化をより迅速にプロセッシングするために、例えば、クロック当たり3つのIFMスライス、3つの入力ポート、3つの出力ポート、3つのIFM伝達ファブリック帯域幅、3つのOFM伝達ファブリック帯域幅、及びMU列当たり3つの加算器ツリーが使用され得る。
活性化は、最大2倍の速度でIFM伝達ファブリックを介してSRAMから入って来る。
タイル制御FSM144は、それぞれのキャッシュレーン146でプロセッシングされる残りのIFMデータの量を追跡する。
キャッシュレーンの中のいずれかがフル(full)になろうとすると、タイル制御FSM144は、少なくとも1つのレーンキャッシュがすぐにフル(full)になることをグローバル制御FSM140に知らせる。
そしてキャッシュ空間が確保されるまで、タイルキャッシュレーンのオーバーフロー(overflow)を防止するために、グローバル制御FSM140は、SRAM制御FSM142により制御されるIFMリード(read)をスロットル(throttle)(又は中止(stall))することができる。
コンボリューションウィンドウスキャンが完了し(及びウィンドウは、次の位置に移される)、そしてIFMサイクリングが完了すると、グローバル制御FSM140は、また、タイル制御FSM144に知らせる。
これにより、タイルは、列アキュムレータを正しくリセットし、ある位置のコンボリューションの実行と、次の位置でのコンボリューションの実行とを混合しない。
IFMサイクリングの概念は、後でより詳細に定義・説明する。
タイル制御FSM144は、それぞれのレジスタファイルの出力ポートに対するリードアドレス(read address)及びリードイネーブル(read enable)を含む各キャッシュレーンレジスタファイル169からIFMデータをリードために必要な信号を生成する。
各クロックサイクルでは、タイルがプロセッシングを完了し、他のタイルがそれらのプロセッシングの完了を待っていない限り、タイル制御FSM144は、1つ又は2つのデータ値(対応する1つのポート又は2つのキャッシュのポートから)をリードする(これにより、結果は、減少ファブリックにより減少するように利用可能になる)。
単一のクロック当たり1つ又は2つのバイトが読み取られるか否かは、活性化スパーシティに依存する。
活性化ブロードキャストユニット141内のIFMバッファ124は、活性化がスパースであるか否かをチェックし、タイル制御FSM144に知らせる。
この知らせにより、タイル制御FSM144は、「ABU IFMステージングFIFO」165が1つのスロットを空ける場合に、1つのバイトをロードし、そして「ABU IFMステージングFIFO」165が2つのスロットを空ける場合には、2バイトをロードする。
図1Qの表は、コンボリューションウィンドウが、ある位置(x、y)から、次の位置まで平面方向(planar−wise)にスライディングすることにより、SRAM109から重複されるリード(read)を避けるために、1×1、2×2、3×3、及び4×4のコンボリューションウィンドウサイズでコンボリューション演算を実行する間、すべてのIFMスライスを保持するのに十分なキャッシュサイズを示す。
SRAMからのシングル読み取り(リード)は、一般的に、ローカルレジスタファイル169からのシングル読み出しに比べてかなり多くの電力を消費する。
このことから「ジグザグ(zig−zag)」のスキャンシーケンスは、IFMのキャッシュの使用を最大化してSRAMからのリードと消費電力を最小限に抑えるように働くことができる。
そのため、以下でより詳細に議論するように、表のデータは、乗算器ユニットのレジスタファイル134が18個のウェイトレジスタが含み、そしてそのコンボリューションウィンドウが入力テンソルを「ジグザグ」のシーケンスでスキャンすると仮定する。
例えば、ジグザグのスキャンパラメータZ(以下でより詳細に説明される)を「2」に設定し、そしてMUが18個のウェイトを保有すれば(2つの3×3の8ビットコンボリューションカーネル又は1つの3×3の16ビットコンボリューションカーネルを保持するのに十分であること)、レジスタファイル169は、20バイトのサイズを含むべきである。
ニューラルネットワークは、少なくとも1つの乗算引数(活性化及び/又はウェイト)がゼロである乗算器を50%と90%との間で有し得る。
たとえば、これはウェイトプルーニング(weight pruning)を適用した後、Inception(インセプション)v3ニューラルネットワークの場合であり得る。
MR102がマルティプライ・バイ・ゼロ(multiply−by−zero)の発生を効率的にスキップすることができれば、MR102は、例えば、スキップのない時間の(100%−80%=20%)内にデータをプロセッシングすることができ、これは5倍以上速い。
これに対応して、前述したように、いくつかの実施形態では、MR実装は、キャッシュが2つ以上の入力を使用して十分に速くデータ(乗算される、又はスキップされる)を伝送するように構成されてもよい。
本明細書の一部のブロック図において、説明の簡潔性及び明確性のためにダブル入力帯域幅(そして、対応する、ただ2つの深さである活性化バッファ124)のみ示す。
しかし、IFM活性化バッファ124のデプスは、2よりも大きい可能性があり、対応する速度の増加(ゼロにより乗算をスキップしない構成に比べる)は、十分なスパースデータについて、2倍よりも大きい可能性があることが理解されるだろう。
図1B〜図1Hのところの記載で上述したように、そして次のパラグラフにおいてより詳細に説明するように、IFMキャッシュとABUの適切な演算により、データスパーシティはプロセッシングのスループット(throughput)を大幅に向上させるために使用され得る。
図1Rは、入力レイヤーコンボリューションを開始するために、SRAMに格納された、IFMテンソル内の開始位置にポジションされた3×3のコンボリューションウィンドウを示す。
レイヤーコンボリューション演算を開始するために、9つのIFMスライスの(a0[0…15]〜i0[0…15])がSRAMからリードされ、IFMファブリックを介してデスティネーショタイルに伝達され、そしてそれぞれのデスティネーショタイルのIFMキャッシュ139にライトされる。
図1Sは、いくつかの要素がゼロである、このようなデータの他の例を示す。
図1Tは、レイヤーコンボリューション演算が開始する直前に、(SRAMから)到着順にソートされた値を用いて、データがIFMキャッシュ139に論理的に格納される方法を示し、そして値の実際の格納アドレスによりそれらの配列を必ずしも示すものではない。
本例では、3×3のコンボリューションが行われ、たとえキャッシュは、コンボリューションウィンドウの動きを収容するため、より格納することができるにもかかわらず、明確性のために図では9つ(3×3=9)の8ビット活性化値を示す。
同様に、図1Uは、ゼロ値を有するいくつかの活性化を明示的に含む図1Tからの本例示を示す。
図1Vは、いくつかの実施形態による活性化ブロードキャストユニット141の単一レーン171を示す。
それぞれのABUレーン171は、レジスタファイルを使用して実装され得るIFMレーンステージングFIFO173、レーンマルチプレクサ163、レーン制御ロジックモジュール146、及び活性化レーン数字タイプの変換回路148を含む。
それぞれのABUレーン171は、(タイル制御FSM144と、他のABUレーンとともに)該当するレーンで活性化スキップ、すなわち、ゼロ値を有する活性化要素のスキップを制御する。
乗算器回路のuint8、int8、uint16、int16、uint24、int24、uint32、int32などを含む多様なビット幅の符号付き及び符号なしのデータプロセッシングを単純化するために、それ(それぞれのABUレーン171)は、符号付きの2の補数の数字エンコーディングからサイン・アンド・8ビット・マグニチュードのフォーマットで活性化をさらに変換する。
また、信号の活性化レーン137のセットの一部として、それぞれのABUレーン171は、MR列133内の乗算器ユニット126の関連付けられた行に活性化をブロードキャストする。
IFMレーンステージングのFIFO173は、2つの入力ポート及び2つの出力ポートを有し、ツー・バリューディープ(two−value deep、2値の深さ(デプス))であり得る。
2つの入力ポートは、クロックサイクル当たり最大2つの活性化(バイト)の速度で、IFMキャッシュから活性化をフェッチするのに使用される。
このように、ゼロ活性化が十分であれば、MUの列内で、2つの加算器ツリー、2つの入力ポート、及び2つの出力ポートを有するレーンキャッシュ、並びに2のデプスを有するステージングバッファ173を含む結果として、クロックサイクル当たり最大2つの活性化をプロセッシングすることができる。
いくつかの実施形態では、クロック当たり、より多くの数の活性化、例えば、クロック当たり3つの活性化を正当化(justify)するのに十分にスパース(sparse)であると予想される場合には、MU列当たり3つの加算器ツリー、3つのレーンのキャッシュ入力/出力ポート、3つのステージングFIFO入力ポート、及び3つのステージングFIFOデプス(ここで「ステージングFIFO」は、明細書内容から、IFMレーンステージングFIFO173を指す)を有する回路を使用して活性化がプロセッシングされ得る。
活性化がゼロか否か、そして活性化がゼロであれば、どのようなレーンから、ステージングFIFOでどのくらい深いか(深さの中へのオフセット)を含む、ゼロを置き換えるために、どのような非ゼロの活性化が多重化されるかを乗算器ユニット126に知らせるために、レーン制御ロジック146は、信号の活性化レーン137のセットの一部として、乗算器ユニット126の関連付けられた行に制御信号のセットをブロードキャストすることができ、その結果、それぞれの乗算器は、乗算に使用する適切なウェイト及び加算器ツリーを選択することができる。
同様に、正しい隣接のIFMチャンネルに位置され、正しいステージングFIFO173のデプスオフセットから活性化レーン137に活性化を多重化するために、レーン制御ロジック146は、また、レーンマルチプレクサ163を制御する。
図1Vは、2つのバッファ(buffer)された活性化の中のいずれかを、隣接したレーンの上に提供し、2つのバッファされた活性化の中のいずれかを、隣接したレーンの下に提供し、そして2つのバッファされた活性化をレーン活性化マルチプレクサ163に提供するのに十分な、4つの出力の論理的接続を含むIFMレーンステージングFIFO173を示す。
たとえば、図1Vは、4つの出力の論理的接続を含むステージングFIFO173を示しているが、図に示した実施形態では、FIFO173は、単に2値の深さ(two−value−deep)であり、したがって、同時出力をするために利用可能な2つの値だけを保持するため、FIFO173は、2つの物理的出力ポートだけを有する。
図1WAは、IFMの最初の2つのベクトルがリードされた後(図1Cでも示しているように)、4つの個別のIFMレーンステージングFIFO173(説明の明確性のために、16ではない)を有する、IFMステージングFIFO165のコンテンツを示す。
この状態では、FIFOは、どんな活性化値がゼロであるか、どんな活性化値がゼロではないかをチェックすることができる。
いくつかの実施形態では、各FIFOレジスタはゼロ検出器(例えば、8入力NORロジック)を含む。
各レーンステージングFIFO173は、該当するレーンでどのような活性化が使い果たされたか(例えば、ボロー(borrow)されて、図1Dに示すように、「ホール(hole)」を生成するようになる)を追跡する、各レーン制御ロジック146にどのような活性化がゼロであるかを報告する。
各レーン制御ロジック146は、どんな活性化がゼロであるかを含む、レーンステージングFIFOの占有に対する情報をタイル制御FSM144に伝達する。
活性化(a0、a1、a2、a3)は、数字のフォーマット変換(活性化がint8又はint16のような符号付き活性化の場合)を経て、8ビットの値(活性化ビット幅が8を超える場合には、例えば、uint16、int16、uint24、int24、uint32、int32、など)に細分化され、そして乗算器ユニット126のそれぞれの行にブロードキャストされる。
次のクロックサイクルでは、IFMステージングFIFO165は、図1WB(及び図1D)で示した値を含み得る。
この時点では、活性化(a0…a3)がプロセッシングされており、b0、b2、及びb3は、乗算器ユニット126のそれぞれの行にブロードキャストされている。
b1が「0」なので、b1のレーンは使用されない。
各レーン制御ロジック146は、このような情報(どんな活性化がゼロ又は「ホール(hole)」であるか)をタイル制御FSM144に伝達する。
その後、タイル制御FSM144は、
(i)多重化して出力するデータ(図1WB及び図1Dでは、レーン0のb0、レーン1のc1、レーン2のb2、レーン3のb3等)、及び
(ii)すべてのレーン制御ロジック146からの入力を使用して、全体のFIFO列がホール及び/又はゼロで構成されたかを検出し、したがってスキップできるものに関して決定する。
後者が発生すると、タイル制御FSM144は、
(i)2つの値(1つの代わりに)をフェッチするキャッシュ
(ii)これらの2つの値(1つの代わりに)を収容するFIFOを引き起こすことにより、全体のホール及び/又はゼロ(hole−and/or−zero)のFIFO列をスキップすることができる。
また、当該するレーン(全体の列と対照的に)に関連付けられたIFMレーンステージングFIFO173内の複数の値がゼロ及び/又はホールを含む場合には、レーン制御ロジックは、また、キャッシュが2つの値をフェッチするようにする。
例えば、レーン1(c1出力する)は、出力する6つの選択を有し得る。
つまり、c0、c1、c2(c2はゼロ)、b0、b1(b1はまた、ゼロ)、及びb2である。
マルチプレクサ163は、これらの6つの選択肢の中のいずれかを出力する。
出力する選択は、タイル制御FSM144により決定される。
これを達成するため、マルチプレクサ163は、1つのレーンの上の2つのFIFO列は、1つのレーンの下の2つのFIFO列、及びマルチプレクサ163と同じレーン内の2つのFIFO列からデータを回収(retrieve)できるように構成される。
この能力は、例えば、図1MA及び図1MBに示したものと類似した回路を使用して実装してもよい。
これらの図での説明で上述したように、上及び下のレーンからデータを回収(および多重化)する能力を「「1」のルックアサイド(look−aside of 1)」と呼ばれ、そして右から2番目のFIFOの列までのデータを回収(および多重化)する能力を「「2」のルックアヘッド(look−ahead of 2)」と呼ばれる。
それぞれのIFMステージングFIFO165の列とレーンの組み合わせは、これと関連付けられた別のルックアヘッド及び/又はルックアサイド値を有し得るが、説明の明確性のためにIFMステージングFIFO165内のすべての列とレーンは、同じ関連のルックアサイド値及び同じルックアヘッド値を有すると仮定する。
また、ルックアヘッド及びルックアサイドの概念によりカバーされておらず、例えば、ステージングFIFOからの入力を同じ活性化レーンに伝達することと、レーン(0及び15)は、2つの隣接したレーンの中のいずれかを有さないこと、とが補償される。
その補償のため、レーン(0及び15)をより柔軟な方法で接続することを防止することを含み、それぞれのマルチプレクサ163がどのように多くの入力を有しているかと、その入力がどこに接続されているかと、に対する他の変形が採用され得る。
ルックアサイド及び/又はルックアヘッドは、「2」よりも大きくしてもよい。
より大きい数は、より良い性能を引き出す−−ゼロ活性化をより最適にスキップすることにより、タイルの計算時間が減少される。
ルックアサイド及び/又はルックアヘッドの数がより大きくなるとき、各レーンは、非ゼロの活性化を回収する位置に関するより多くの選択肢を有するため、この利点は、達成され得る。
非ゼロ活性化のより多くの選択は、すべてのレーンにおいて非ゼロ活性化をより均等に分散させることである。
最大の活性化を有するレーンが計算を完了するまでタイルプロセッシングの完了を待たせることを潜在的に引き起こし、いくつかのレーンは多く、かつ他のレーンは少ないのとは対照的に、各レーンは、ほぼ同じ数の非ゼロ活性化を有する。
前述したように、非ゼロ活性化の拡散は、別の関連した開示で説明したように、活性化レーン及び関連ウェイトを擬似ランダムにシャッフリング(shuffling)することにより達成され得る。
図1WCでは、ルックアヘッドは「2」であり、ルックアサイドは「2」であり、それぞれのFIFO列に対して、マルチプレクサ163は、10個の入力を有する構成を示す。
このような実施形態では、FIFOは、「2」の深さ(two−deep)であり得るし、これにより、2つの出力ポートを有し得る。
図1WDでは、ルックアヘッドが「3」であり、ルックアサイドが「1」であり、マルチプレクサ163が9つの入力を有する構成を示す。
このような実施形態では、FIFOは、「3」の深さであり得、3つの出力ポートを有し得る。
図1WEでは、ルックアヘッド及びルックアサイドの両方が「3」であり、マルチプレクサ163は15個の入力を有する構成を示す。
このような実施形態では、FIFOは、「3」の深さであり得、3つの出力ポートを有し得る。
活性化ブロードキャストユニット141及びタイル制御FSM144は、図1E〜図1Gに示した動作と同様に関連付けされ得る。
例えば、図1Eは、以前のクロックサイクルでc1をボロー(borrow)した(最も右で2番目の列から多重化される)場合には、レーン制御ロジック146(c1が元来あったレーンで)が追跡する「ホール(hole)」の生成を示す。
それぞれのレーン制御ロジック146は、タイル制御FSM144に、IFMステージングFIFO165内のどんなデータセルがゼロであるか、又は空であるか(empty)を知らせることで、タイル制御FSM144は、活性化マルチプレクサ163を適切に制御することができる。
タイル制御FSM144は、マルチプレクサの制御を決定して活性化を拡散させることで、スループットを増加させたり最適化したりする。
他のレーン(同じタイルで)は、主にゼロを有しながら、いくつかのレーンは、多くの非ゼロ活性化を有するように不均衡にするのとは対照的に、すべてのレーンが同じ数の非ゼロ活性化を有していれば、最適なスループットが達成される。
このような不均衡な場合には、主にゼロを有するレーンは、多くの非ゼロ活性化を有するレーンよりも早く(つまり、すべての非ゼロ活性化をより迅速に出力することができる)計算を完了することができ、これは、そのタイルの計算の終了を遅延させることができ、ゼロリッチ(zero−rich)レーンでの乗算器の利用率を減少させることができる。
他の例示として、図1Gに示した状態では、レーン制御ロジック146は、また、タイル制御FSM144からマルチプレクサ選択信号を受信して、
(i)生成されたホール、及び
(ii)任意の活性化がどこから多重化されたかを追跡する。
その後、レーン制御ロジック146は、このような情報を乗算器ユニット126の関連付けられた行にブロードキャストする。
活性化が非順次的に(例えば、図1Gでは、「順序に(in order)」は、活性化バッファからg0がg0にマークされた活性化レーンに出力されることを意味する)多重化されるとき、その行のそれぞれの乗算器ユニット126は、該当する非順次的(out−of−order)活性化に、それの対応するウェイトを乗じることができる。
例えば、活性化が、最も右から2番目のステージングFIFO列から、1つのレーンの上から多重された場合には、このような活性化を乗算のための対応するウェイトは、図に示したように、(各列に対して)1つのレーンの上の乗算器ユニットに位置する。
ルックアヘッドが「2」より大きく(例えば、「3」)、最も右から3番目の列から活性化が回収されると、回収される対応するウェイトは、「3−1=2」アヘッドであり、もし順次的活性化がウェイト「w[row、col、i]」と乗じられると、乗算に適切なウェイトは、「w[row、col、i+2]」であることを意味する。
図1Hは、活性化が多重化されたとき(非順次に前進されたとき)、全体のFIFO列(16レーンのすべて)が空くようになる(ゼロ又はホールだけを含む)(スループットの観点から有利な)状況を図に示す。
タイル制御FSM144は、このような条件を検出し、そしてIFMキャッシュ139に指示して2つの値をFIFOにロードする。
これは2つのFIFO列が同時に消費されるからである−−最も右にあるすべてのゼロ列はスキップ(削除)され、そして最も右から2番目の列は、計算のためにブロードキャストされて使い果たされる。
これはタイル内で計算遅延を1クロックサイクルだけ減少させる。
図1Xは、アキュムレート・アンド・リターン(accumulate−and−return)ユニット(ARU)167を示す。ARUの役割は、ドット積の計算を完了し、活性化関数を適用して(適用可能な場合)を格納のためのSRAMに再びOFM伝達ファブリックを介して、伝送を準備する完了された出力特徴マップ(OFM)を生成する。図1Nで示されるように、それぞれのMR列133は、加算器ツリー(128A及び128B)当たり1つずつ、2つのARU167を含む。
ARU167は2つの入力を含み、1つは、ローカル加算ツリー(128A又は128B)からの入力であり、1つは減少ファブリック111からの入力である。
それぞれのARUの中央には、加算器181及びアキュムレータレジスタ130Aがあり、後述するように、これは累積(時間とともに)に基づいてドット積の計算を完了することができる。
OFM計算を完了するには、完全に減少されたドット積は、ユニット187を使用して(選択的に)切断されることがあり(ラウンドを通して)、乗算器189を使用するファクター(factor)191によりスケーリングされ、加算器193を用いてOFMバイアス項(OFM bias term)195と合算されることがあり、そして活性化関数197を通過することができる。
活性化関数モジュール197は、整流された線形ユニット(rectified linear unit:ReLU)、シグモイド(sigmoid)、双曲線タンジェント(hyperbolic tangent)などのような活性化関数をサポートすることができる。
ドット積の減少を完了できない場合(この理由は、後で詳しく説明する)、アキュムレータ130A(又は130B)からの部分ドット積、又は単に「部分積」は、マルチプレクサ199と出力FIFO198を介してOFM伝達ファブリックに向かう途中で、スケーリング、バイアス、及び活性化関数をバイパスすることができる。
加算器181をバイパスするマルチプレクサ183は、例えば、累積を開始するためには、加算器ツリーの値をアキュムレータ130Aに直接ローディングできるようにする。
マルチプレクサ174は、
(i)ARU167が位置した、同じ(ローカル)タイル内の加算器ツリー、そして
(ii)ローカル(「イントラタイル(intra−tile)」)加算器ツリー(128A及び128B)を複数のタイルから(例えば、32、64、128、256の乗算器ユニットから)乗算器ユニットの積を減少させることができる、より大きな(「インタータイル(inter−tile)」)加算器ツリーに結合する構成可能な加算器ツリーを含む減少ファブリックの間の(適用可能な場合には、部分的パスとともにスケール、バイアス、及び活性化アプリケーション)「変換(return)」のためにARUに対する入力ソースを選択する。
タイル制御FSM144は、それぞれのMR列133でのどのようなレーンと加算器ツリーが、それぞれの部分IFM減少を得るために使用されたかを追跡するため、タイルARUに167は、タイル制御FSM144により制御される。
ARU167は、2つの出力を含み、2つの出力は、FIFO198とオン・ザ・フライのプーリングロジック196を介してOFM伝達ファブリック106(図1A)を接続する1つを含み、FIFO179を介して減少ファブリック111に接続される1つを含む。
また、タイル制御FSM144は、出力FIFO(198、179)の状態を追跡する。
それぞれのタイル102は、わずかに異なる速度で計算を実行するため(ゼロ活性化スキップの予測不可能性により)、他のタイルより先に(高速)実行されるようになるタイルからの出力を遅延させることで、出力FIFO(198及び179)のそれぞれは、タイルの出力の同期化を復元する役割をする。
FIFO179によりタイル出力を同期化されるようにするのは、タイルの出力は減少ファブリック111により追加の減少を経ることができるからであり、これは追加の加算器ツリーステージのセットと見なされることがあり、したがって、(タイルから)それ(追加の加算器ツリーステージのセット)の入力が並列に同期化されて到着することを要求することができる。
同様に、OFMスライスのすべてのチャンネルを同時にOFM伝達ファブリックに出力するために、FIFO179により同期化されたタイルの出力になるようにすることが要求され得る。
多くの場合では、4つ以下のエントリの出力FIFO(198、179)のサイズは、それぞれ十分であり得る。
出力FIFO(198、又は179)が、1つ以上のタイル内でほぼオーバーフローされる場合には、タイル制御FSM144は、出力FIFO(198、又は179)が空になるまで計算を中断することができる。
出力FIFO(198、又は179)は、2つの加算器ツリー(A及びB)のパスからの結果を併合するために2つの入力ポートを含み得る。
最後に、タイル制御FSM144及びSRAM制御142は、出力FIFO198からデータを読み取り、減少ファブリックプロセッシングを実行し、OFM伝達ファブリックを介して結果を伝送し、そしてSRAMに格納するために共に動作する。
以下で、「混合データタイプの」と呼ばれる、活性化のために1つのデータタイプとウェイトのために、他のデータタイプを任意に使用できることを含め、多様なビット幅の符号付き及び符号なしの入力及び出力データタイプをサポートするために、活性化数字タイプの変換器(Activation Numeric Type Converter)135がアキュムレート・アンド・リターンユニット167とともに作動する方法を検討する。
いくつかの実施形態では、次のデータタイプが使用される。
つまり、IFM、OFM、及びウェイトのためのint8、uint8、int16、uint16、int24、uint24、int32、及びuint32である。
以下で詳細に説明するように、IFMとウェイトのデータタイプは、自由に混合してもよい。
たとえば、uint8活性化及びint8ウェイト、又はint8活性化及びint8ウェイト、又はint16活性化及びint8ウェイト、又はint16活性化及びint16ウェイトなどを使用してコンボリューション又は完全に接続された(fully−connected)レイヤーの計算を行うことができる。
スケーリング、ラウンディング、及び活性化関数の選択の組み合わせを適用することにより、uint8、int8、uint16、int16、uint24、int24、uint32、int32などを含め、OFMデータタイプは、自由に選択され得る。
活性化は、次のように演算のために準備され得る。
活性化は、例えば、ユーザにより指定されたように、int8、uint8、int16又はuint16で、SRAM内に格納される。
図1Lに示したように、これらのIFMデータは、キャッシュ(つまり、IFMキャッシュ139)にフェッチされた後、活性化数値タイプの変換器135を含む活性化ブロードキャストユニット141を介して通過する。
第1の段階として、グーグルテンソルフロー(Google TensorFlow)で使用したように、活性化が「ゼロポイント(zero point)」のオフセットを使用して量子化されれば、タイプ変換器135は、「ゼロポイント」のオフセットを活性化に追加する。
その後、数タイプの変換器135は、適切な変換(transform又はtransformation)を適用することにより、活性化を準備し、これは8ビットの符号なし乗算器126を用いて実行される、例えば、符号付き又は符号なしの16ビットウェイト及び/又は16ビット活性化のような、8ビットよりも広いデータタイプを使用する乗算を可能にする。
図1Kに示すように、各レーン、活性化ブロードキャストユニット141は、1ビットの符号サクト(sact)が伴われる活性化の8ビット絶対値(act_abs[7:0])をブロードキャストする。
活性化数字タイプの変換器135により適用された変換は、int8/uint8を「符号及び8ビットの絶対値(sign and 8−bit absolute value)」に変換する。
入力の活性化がuint8であれば、タイプ変換器135は、出力ブロードキャスト8ビットの絶対値を入力uint8値と同一に設定し(つまり、変換なし)、ブロードキャスト符号をゼロに設定する(これは、負数ではない(non−negative)の値が表示されることを意味する)。
入力活性化データタイプがint8であれば、活性化数字タイプの変換器135は、出力の絶対値を活性化の絶対値に設定し、活性化が負数であれば、出力符号を1に設定し、そうではなければ出力符号を0に設定する。
ウェイトは、演算のためには、次のように備えられる。
ユーザにより指定されたように、ウェイトは、int8、uint8、int16、又はuint16でSRAMに格納される。
ウェイトがMUレジスタにロードされるにつれて、ウェイトはウェイト圧縮解除ユニット138内で変換される(活性化を変換するために活性化数字タイプの変換器141により使用されたのと同じ変換を使用する)。
ウェイトは、8ビットの絶対値と1ビットの符号で格納される。
図1K及び図1Nを参照すると、ウェイトがSRAMからMUレジスタにロードされ、バーティカルウェイトロードバス(vertical weight load buses)101を介して乗算器ユニットにフィードされるにつれて、int8とuint8で表示された値は、8ビット絶対値(wt_abs_ld_in[7:0][C])と1ビットの符号表現(swt_in[C])に変換される。
8ビット乗算は、次のように実行されてもよい。
乗算器は、符号なしの8ビット乗算(X)符号なしの8ビットの乗算器であり得る。
乗算の演算は、活性化及びウェイトの両方を8ビット絶対値と1ビット符号表現である入力として受け取る。
この後、乗算器は、2つの8ビット絶対値を乗じ、2つの符号に対し排他的論理和(exclusive−or)を行う。
2つの8ビット絶対値の積がゼロであれば、出力符号はゼロに設定される。
以後、乗算器結果(それの符号を伴う16ビットの絶対値)は、int17に変換され加算器ツリーに伝達される。
続いて、加算器ツリーは、列の乗算器ユニットから受信された符号付きint17値を減少させ、加算器ツリーと関連付けられたARU167に符号付きの合計を伝達する。
いくつかの実施形態では、16ビット及び8ビットの入力データタイプは、次のように混合されてもよい。
8ビットウェイト及び8ビットの活性化は、1つのサイクル内で乗じられる。
いくつかの実施形態では、例えば、uint8活性化×int8ウェイト、int8活性化×int8ウェイト、uint8活性化×uint8ウェイト、及びint8活性化×int8ウェイトのような、8ビットの数値データタイプのすべての可能な組み合わせがサポートされる。
(i)16ビットウェイトと8ビットの活性化との積、又は
(ii)16ビット活性化と8ビットウェイトとの積は、2つのサイクルを使用して計算され得る。
16ビットの活性化と16ビットウェイトとの積は、4つのサイクルを使用して計算される。
たとえば、uint16活性化×int8ウェイト、int16活性化×int8ウェイト、uint16活性化×int16ウェイト、uint8活性化×int16ウェイト、及びint16活性化×int16ウェイトのような8ビット及び16ビットの数値のデータタイプのすべての可能な組み合わせがサポートされ得る。
いくつかの実施形態では、16ビット活性化は、次のようにプロセッシングされる。
活性化がuint16又はint16であれば、タイプの変換器135は、変換(上述された8ビットの変換と類似する)を適用してデータを準備する。
uint16又はint16のフォーマットでの値は、16ビットの絶対値と符号のフォーマットに変換される。
8ビット(uint8又はint8)のウェイトが使用される場合は、活性化ブロードキャストユニット141の第1のサイクルの出力は、変換により発生した符号と16ビット絶対値の最下位バイト(least significant byte:LSB)であり得(8ビットウェイトとの乗算のための)、そして活性化ブロードキャストユニット141の第2のサイクルの出力は、変換により発生した符号と16ビット絶対値の最上位バイト(MSB:most significant byte)で有り得る(また、8ビットウェイトとの乗算のための)。
それぞれ符号付きのint17に変換される2つの部分積の結果は、以後、列のアキュムレータ(130A又は130B)に伝送され得(通常、列の加算器ツリー(128A、又は128B)を介して列のアキュムレート・アンド・リターンユニット167に)、そしてアキュムレータ130A(又は130B)により共に加算され得る(ただし、加算される前に、最上位バイト積が符号拡張シフト(sign extended shift)175(及び、マルチプレクサ177)を用いて、8ビットのシフトアップも、また可能であることを除いてから)。
ウェイトが16ビット(uint16、又はint16)であれば、その後、4つのクロックサイクルが(16ビット)活性化とウェイトとの乗算を実行するために使用される。
活性化ブロードキャストユニット141の第1のサイクルの出力は、活性化の変換から発生する符号と16ビットの絶対値の最下位バイト(least significant byte)であり得、乗算器にウェイトの16ビットの絶対値の最下位バイトが同時にフィードされることがあり得、そして第1の乗算が実行され得る。
第2のサイクルの間に、活性化の同じ部分の積(つまり、活性化の変換から発生した符号と16ビット絶対値の最下位バイト)がウェイトの16ビットの絶対値の最上位バイトとともに、乗算器に再びフィードされることがあり得、そして第2の乗算が実行され得る。
活性化ブロードキャストユニット141の第3のサイクルの出力は、活性化の変換から発生する符号と16ビットの絶対値の最上位バイト(most significant byte)であり、乗算器にウェイトの16ビットの絶対値の最下位バイト(least significant byte)が同時にフィードされ、そして第3の乗算が実行される。
第4のサイクルの間に、活性化の同じ部分の積(つまり、活性化の変換から発生した符号と16ビット絶対値の最上位バイト)がウェイトの16ビット絶対値の最上位バイトとともに、乗算器に再びフィードされ、そして第4の乗算が実行される。
符号拡張されたアップシフター175とマルチプレクサ177を使用して第4の部分積に対して8ビットほど、そして16ビットほど加算前の第2の及び第3の部分積がそれぞれプレシフト(pre−shift)されることがあることを除き、すべての4つの部分積の結果は、それぞれ列のアキュムレータ130A(又は130B)に伝送され得(通常、関連付けられている列の加算器ツリー(128A、又は128B)を介して、その列のアキュムレート・アンド・リターンユニットに)、そして共に加算され得る。
コンボリューション演算を実行するのは、SRAM109に格納されたIFMテンソルをトラバース(traverse、横切る)すること、IFM伝達ファブリック104を介して伝達される一連のIFMスライスとしてIFMテンソルのコンテンツを1つ以上のタイル102にストリームすることと関連する。
IFMテンソルは、(x、y、z)(そして、説明の明確性のために、今は省略するバッチインデックス(batch index))で表現された座標を有する3次元を含み、ここで、xとyのインデックスは、活性化の平面座標に対応し、インデックスdは、デプスチャンネルに対応する。
ニューラルプロセッサは、特定のシーケンス内で(x、y、d)インデックス値を介してサイクリング(cycling)することにより、IFMテンソルをトラバースする(x、y)座標を介したサイクリングを「平面(planar)」トラバーサル(traversal)と呼び、d座標を介したサイクリングを「デプス方向(depth−wise)」のトラバーサルと称することにする。
以下のいくつかのパラグラフは、IFMキャッシュ139の使用を含む平面トラバーサルを説明する。
図1Nを参照すると、IFM伝達ファブリック104は、IFMキャッシュ139を介してIFMタイル102に接続され得る。
それぞれのタイル当たり1つのIFMキャッシュ139があり、関連したタイルにローカルにそれぞれ位置する。
IFMキャッシュ139を(各タイルごとに)利用することは、SRAM109からのリード(read)の数を減少させるのに役に立つ。
SRAM109からのリードの数を減らすのは、
(i)ニューラルプロセッサの全体の消費電力に対するSRAMの寄与を減少させること、
(ii)SRAMの読み取りや書き込みの中断の機会を減少させること、及び
(iii)IFM伝達ファブリック104を介して流れるトラフィックの量を減少させること、を含む3つの側面で有利であり得る。
実際に発生し得る、フリップフロップレジスタの消費電力と比較してSRAM109がかなり高い電力を消費すると、SRAMの消費電力の減少側面は重要であり得る。
各SRAMユニット109に位置された、SRAMバンクの数が、実行される入出力(I/O、リード又はライト)動作の数に比べて小さい場合には、SRAM中断(stall)の側面が特に重要であり得る。
例えば、後述するように、それぞれのSRAMバンクセットユニット109は、4つのSRAMバンクを含み得るため、最大4つのI/Oの動作を(各クロックサイクルごとに)同時に実行することができる。
このようなI/Oの動作は、IFMスライスリード、1つ又は2つのOFMスライスのライト、部分結果リード又はライト、及びAXIインターコネクト114により要請されたスライスリード又はライトであり得る。
4つ以上の、このようなI/O動作が同じSRAMバンクに在住する(residing)データに同時にアクセスしなければならないか、又は1つ以上のI/O演算が同じバンク内のデータに必ずアクセスしなければならないときに、バンクアクセスの衝突が発生する可能性がある。
これは、SRAMバンク調停ロジック(SRAM bank arbitration logic)がAXIアクセス、IFMフェッチ、OFMライト、又は部分結果のI/Oを停止させることがあり得、潜在的に計算中断を引き起こす可能性がある。
したがって、SRAMユニット109からIFMリードを減少させるIFMキャッシュ139は、このようなタイプの中断(stall)を含む機会を減少させる役割をする。
後で、より詳細に説明するはずであるが、ウェイトカーネルのサイズが特に大きい場合において、計算は、いくつかの部分に分けられるか、又は分けるべきであり、そして部分的に完了された計算結果(「部分結果(partial results )」又は「部分(partials)」)は、SRAMに格納される。
収容可能な計算精度を維持するためには、部分結果は、一般的にIFM及びOFMと比較してかなり長いビット幅(例えば、4又は6バイト)を有する。
SRAMへの(又は、SRAMからの)長いビット幅を有する部分結果をライトすること及びリードすることは、対応する高いSRAM帯域幅を消費し、これはSRAMバンクのアクセス衝突の機会を増加させることができるため、AXI又は計算が中断され得る。
したがって、IFMキャッシュ139を含むことは、部分結果を使用する計算に対して、特にSRAMのI/Oのボトルネックを緩和するのに役立つことができる。
通信バス領域がプレミアムで来ると、IFM伝達ファブリックのトラフィックを減らすことは重要であり得る。
図1Pに示すように、IFM伝達ファブリックは、クロックあたり最大2つのIFMスライスをIFMキャッシュ139に伝達できることを想起できる。
IFM伝達ファブリックが、同時に、例えば、すべての単一のクロッごとに、N個のスライスをIFMキャッシュ139に伝達できれば、IFM伝達ファブリックは「N個のスライスの幅」を有すると称される。
IFMスライスを(各タイルに)ローカルにキャッシュすることで、計算に要求されるIFMスライスが、すでにタイルによりローカルにキャッシュされており、プロセッシングのために容易に利用可能になると、IFM伝達ファブリック104は、アイドル(idle)を維持することができる。
アイドルサイクルを含むIFM伝達ファブリック104(100%よりも少ない利用率を有する)は、アイドルサイクルを使用して、余分のIFMスライスを伝送することを可能にし、したがって、全体の「効果的な」IFM伝達帯域幅が2倍を超えるようにする。
従って、IFM伝達ファブリック領域が重要であれば、全体のIFM伝達帯域幅を1倍以上に、時には2倍以上に達するように相変わらずに維持しながらも、IFM伝達ファブリック104の幅は、例えば、2つのスライスから1つに減少され得る。
以下に示すように、IFMキャッシュ139は、「1」よりも大きいカーネル平面幅及び/又は高さを有するコンボリューション演算に対して最大の利点を提供する。
「デプス方向(depth−wise)」のコンボリューション(カーネル幅と高さがすべて「1」であるもの)、及び完全に接続された計算は、またIFMキャッシュから利点を得ることができるが、一般的にまれな状況でしかメリットを得ることができない。
IFMキャッシュヒット率を増加させるために設計された、「ジグザグ」プラナートラバーサルと呼ばれる一実施形態の解決策を理解する(認識)するために、図2AA〜図2ADで示すように、2×2×16×1のウェイトカーネルを使用する、「ナイーブ」方式でIFMテンソルプラナー方向(planar−wise)をトラバースすることをまず考慮する。
ここで、2×2は、ウェイトカーネルの平面の高さ及び幅を指し、16はIFMデプス(つまり、1つのスライス)を指し、そして「1」は、OFMデプスを指す。
しかし、説明の明確性のために、我らはコンボリューションを、純粋な平面、すなわち、2×2×1×1として扱うことができる。
図2AAは、IFMテンソルの左上隅に位置したコンボリューション(カーネルウェイト)ウィンドウとともに開始するコンボリューション演算を示す。
該当する場所で2×2コンボリューションを計算した後、ウィンドウは、右に1ピクセルほどスライディングする。
ウィンドウがIFMテンソルの右上隅に到達するまで、スライド過程が続く計算が繰り返される。
右上隅で、一度コンボリューションが計算され、図2ABで示すように、コンボリューションウィンドウは、現在1行の下に(右の代わりに)スライディングする。
続いて、コンボリューションウィンドウがIFMテンソルの左側エッジ(edge)(図2ADに示すように、ここでウィンドウは、1行の下に再びスライディングする)に到達するまで、コンボリューションウィンドウが現在、左側に継続的にスライディングすることを除いて、図2ACに示すように、同一のコンピュート・アンド・スライド(compute−and−slide)の段階がさらに繰り返される。
このような段階を繰り返すと、最終的にはIFMテンソルの完全な平面スキャン(トラバーサル)が発生する。
ウィンドウは、主に水平的に(horizontally)スライディングするため、つまり、内部ループのサイクルは、x座標を介してスライディングするため、このようなスキャンは、水平的(垂直的(vertical)の反対)と称する。
図2BA〜図2BLに示すように、ナイーブ「水平的」スキャンとともにIFMキャッシュ139を使用することを考慮する。
コンボリューション演算の開始からIFMキャッシュ139がクリアされ、2×2コンボリューションウィンドウは、IFMテンソルの左上隅に位置した後、該当する開始位置でコンボリューション計算に要求される4つのIFM値を回収する。
図2BAに示すように、4つのIFM値の中の1番目は、IFMセンサー内で最も左上の位置から回収される。
該当する位置は、行0、列0にあると称する。
キャッシュがクリアされたため、行0、列0でIFM値は、IFMキャッシュではなく、SRAMから回収されるべきで、図2BAで「M」とマークしたように、キャッシュミスが発生する。
いったん回収されると、IFM値がキャッシュされる。
図2BBは、行0、列1から回収された第2のIFM値(上記4つのIFM値の中からの)を示す。
キャッシュは、その位置に関連した値が含んでいないため、「M」でマークされた他のキャッシュミスが発生する。
行0、列0にある位置の列は、薄い陰影(light shading)は、以前の段階から回収されたIFM値がキャッシュされたことを指す。
図2BC及び図2BDは、それぞれキャッシュミスを発生させる、残りの2つのIFM値の回収を示す。
この時点では、すべての4つのIFM値は回収されており、現在の位置でのコンボリューション計算が完了され、すべての4つのIFM値は、またキャッシュされ、そしてコンボリューションウィンドウは1つの列ほど右にスライディングすることができる。
図2BE〜図2BHは、新しい位置でのコンボリューションを計算するための4つの追加IFM値の回収を示す。
図2BEでは、行0、列1でのIFM値を回収することは、キャッシュヒットを発生させるため、SRAMのリードを排除する。
同様に、図2BGは、行1、列2での他のキャッシュヒットを示しており、一方、他の2つのIFM値を回収することは、キャッシュミスを誘発する。
コンボリューションウィンドウが、スライディングし続けるにつれて、図2BI〜図2BL(及び図2BE〜図2BH)での暗い陰影(dark shading)で表示したように、コンボリューションウィンドウがIFMテンソルの一番右のエッジまでずっとスライディングし、1つの行の下にスライディングする。
そしてキャッシュされた値に戻り、最後までスライディングするまで、一番左の最近キャッシュされたIFM値は、長い期間又はまったく計算に参加していない。
従って、コンボリューションウィンドウがスライディングすると、このような値は、キャッシュサイズを小さく維持するために、キャッシュから除去され得る。
図2BI〜図2BLは、2つのキャッシュヒット及び2つのキャッシュミスを発生させる、次の位置(右にした段階)でのコンボリューションを計算するための次の4つのIFM値を回収することを示す。
図2BMに示すように、コンボリューションウィンドウが右に一段階ずつスライディングするたびに、4つのIFM値のうち2つ(淡い陰影としてマーク)が一度再び使用されるため、2×2コンボリューション中に、IFM値を水平的にキャッシュするのは、大略、50%のキャッシュヒット率(割合)を発生させる。
より一般的には、水平キャッシュとともにH×W平面カーネルサイズを使用し、十分なサイズのキャッシュを仮定するコンボリューションは、H×(W−1)/(H×W)のキャッシュヒット率を発生させる。
このようなコンボリューションに十分なキャッシュのサイズは、タイル当たり、レーン当たり、(W−1)のバイトであり得る。
しかし、後述するように、ニューラルプロセッサは、また「IFMウェイトサイクリング」(乗算器ユニットのウェイトを順次サイクリングすることにより、複数のIFMチャンネルをドット積に累積させるため)をドット積の計算中に使用することができる。
したがって、後で明確になるだろうが、最も一般的な場合では、最大キャッシュのサイズは、タイル当たり、レーン当たり、MUウェイトレジスタファイル127に格納されたウェイトの数(8ビットウェイトのデータタイプの場合、18と同じ)と同じである。
図2BA〜図2BMでは、キャッシュのサイズを比較的小さく維持するには、キャッシュの値を積極的に除去しなければならない。
図2BMを参照すると、コンボリューションウィンドウが行R(行2)を介してスライディングするため、以前の行R−1(行1)からのIFM値は、キャッシュから長い間除去されていた(行1、列2でキャッシュミス「M」として表示される)。
キャッシュヒット率を、H×(W−1)/(H×W)以上で高めるために、例えば、IFMテンソルの1つ以上の行の値をキャッシュすることを考慮することができる。
しかし、全体のIFMテンソル行をキャッシュするには、キャッシュのサイズを増加させなければならないため、一般的には、キャッシュのサイズは、IFMテンソル幅の関数である。
IFMテンソル幅は、通常、ASIC設計時に知ることができず、IFMテンソル幅は比較的大きい可能性があるため、IFM行をキャッシュすることは、シリコン面積の側面からコストがかかるから好ましくない。
コンボリューションウィンドウが水平の代わりに垂直に(平面座標の内部ループは、行番号に沿って繰り返し)主にスキャンする対称的な場合では、同じ推論が適用される。
ナイーブ平面スキャンとは対照的に、いくつかの実施形態は、コンボリューション演算中に「ジグザグ」の形でIFMテンソルの平面トラバーサルを実行する。
キャッシュサイズを小さく維持しながらも、ジグザグの平面トラバーサルは、キャッシュヒット率を高めるのに役に立つ。
このような実施形態では、図2Cは、コンボリューションウィンドウが変位(displace)(又はスライド)されるダウン・ライト・アップ・ライトのジグザグのパスを示す。
ナイーブ水平トラバーサルとは異なり、1つではない、2つのコンボリューション(垂直に隣接した位置での)を計算した後、図2Cのコンボリューションウィンドウは、右にスライディングする。
従って、ナイーブ水平トラバーサルにより結果の1つの行(1つの行の結果)とは対照的に、コンボリューションウィンドウによりIFMテンソルの単一の完全なレフト・ツー・ライト(left−to−right)エッジ・ツー・エッジ(edge−to−edge)のスイープ(sweep)は、コンボリューション結果の2つの行(2つの行のコンボリューション結果)を生成する。
より一般的な場合では、ジグザグのトラバーサルは、単一の水平IFMテンソルのスイープでプロセッシングされた出力行の数に対応する「Z番号」を使用してパラメータ化され得る。
例えば、図2CでZ番号は2と同じである。
後述するように、高いZ番号は高いキャッシュヒット率をもたらす。
図2Cでは、単一の水平スイープあたりの結果の2つの行を生成するジグザグのトラバーサルは、幅は2倍であるが、高さは半分であるIFMテンソルで上のナイーブ水平トラバーサルを実行することとして考えられる。
より一般的には、IFMテンソルコンボリューションを完了するために、総H/Zスイープを要求する、H×Z列の長さの単一の(水平)スイープで「アンロール(unrolled)」されている(広がった)ジグザグのトラバーサルパスを見ることができ、ここでH及びWは、それぞれIFMテンソルの高さ及び幅である。
例えば、図2Cで、Z=2である場合には、ナイーブスキャンにより、(H×W)IFMのレイヤーをトラバースする代わりに、矢印のパスの長さは約H×Z=W×2であるため、論理IFMレイヤーの高さがH/Z=H/2となる一方で、論理的IFMレイヤーの幅はW×Z=2Wとなる。
ナイーブ水平は、Z=1であるジグザグのトラバーサルと同じである。
図2DA〜図2DDは、コンボリューションウィンドウの第1の位置については、キャッシュミスをもたらす全ての4つのIFM値を回収すること、及び4つのSRAMリードを発生させることを示す。
コンボリューションウィンドウの次の位置については、2つのIFM値をさらにフェッチすると、キャッシュミスが発生する反面、他の2つのIFMのフェッチ位置がコンボリューションウィンドウの以前の位置とオーバーラップ(overlap)するため、図2DE〜図2DHに示したように、2つのキャッシュのヒットを発生させる。
図2DI〜図2DLに示すように、コンボリューションウィンドウの次の位置については、2つのIFMの値はキャッシュミスであり、2つのIFMの値は、コンボリューションウィンドウの以前の位置と重なり、それぞれはキャッシュヒットを発生させる。
コンボリューションウィンドウの次の位置に対し、1つのIFM値はキャッシュミスであり、3つのIFMの値は、コンボリューションウィンドウの以前の位置と重なり、図2DM〜図2DPに示すように、キャッシュヒットである。
このように、図2DQ〜図2DXをより参照すると、ジグザグパスの使用は、キャッシュミスに対するキャッシュヒット率を大幅に向上させる。
図2Eは、ジグザグトラバーサル効率の尺度である理想的なキャッシュ内でSRAMリードの数を参照して、ジグザグトラバーサルと関連付けられているSRAMリードの実際の数を示すテーブルである。
テーブルは、単一のスイープを実行するうちに与えられたZに対してキャッシュサイズが十分であると仮定し、すなわち、以前スイープからの値は除去される。
テーブルで、より低い数字は、より高い効率に対応し、「1.0」は理想的な場合である。
コンボリューションのサイズは、正方形ウェイトカーネルの平面ディメンション(planar dimensions)を示す。
たとえば、Z=2であるジグザグトラバーサルを有する3×3コンボリューションは、理想的なキャッシュ(つまり、無限の容量を有し、いかなる値も除去しない)を使用している3×3コンボリューションに比べて2倍のSRAMリードを発生させる。
しかし、Z=1であるジグザグトラバーサルを使用する3×3コンボリューション、すなわち、ナイーブ(例えば、水平)トラバーサルは、理想的なキャッシュを使用する場合に比べ、3倍以上のSRAMリードを発生させる。
したがって、この場合では、Z=2であるジグザグトラバーサルは、ナイーブトラバーサルに比べてSRAMリード回数を、(3/2)=1.5倍に減少させる一方で、以下で説明する公式により計算されるように、両方のジグザグZ=2、及びZ=1ナイーブトラバーサルに対するキャッシュサイズはほとんど変更されない。
Zの数が大きいほど、SRAMリード回数が大幅に節約される。
たとえば、キャッシュZを「4」に増加させると、3×3コンボリューションについて(3/1.5)=2倍のSRAMリードが節約される。
図2Fは、各クロック当たり1つのIFMスライスがプロセッシングされると仮定するとき、IFMキャッシュを提供するのに必要な、クロック当たり、平均的に予想されるIFM SRAMリードのテーブルを示す。
たとえば、キャッシュのない100%(つまり、すべてのクロック)と比較すれば、そしてキャッシュZ=1(すなわち、ナイーブトラバーサル方式)を使用する時間の20%と比較すれば、キャッシュZ=4を使用する5×5コンボリューションは、平均的に、時間の8%だけのSRAMリードを実行する。
図2GA〜図2GBは、キャッシュのヒット/ミスカウント及びキャッシュサイズの導出を示す。
ジグザグトラバーサルは、コンボリューションウィンドウ(Z−1)行だけ垂直にスライディングした後、1つの列だけ横にスライディングする、2つの段階(two−step)のシーケンスの繰り返しを含む。
単純化のためIFMテンソルエッジでの特別な場合を無視すれば、1つの列だけ横に(図2GAで、右に)スライディングする平面サイズのW×Hのコンボリューションウィンドウは、Hのキャッシュミス(「m」でマーク)とH×(W−1)個のヒットを発生させる。
(Z−1)個の行を垂直に(図2GBで、下へ)スライディングする次の段階は、(Z−1)個のキャッシュミス及び(Z−1)*(H×W−1)個のキャッシュヒットを発生させる。
これにより、コンボリューションウィンドウが水平的に1列だけスライディングすると、コンボリューションウィンドウは、現在の計算のためのカーネルのウィンドウ内で、以前にキャッシュされた値(図2GAで「c」でマークされ、以前の垂直変換中にキャッシュされた)を使用することができる。
ウィンドウが(下の図2GAで)垂直にスライディングし始めるため、カーネルのウィンドウの外部(下の図2GAで)で、「c」でマークされた、以前のキャッシュされた値は、また使用されるよう、キャッシュに残っている必要がある。
また、SRAMからフェッチされた値(「m」としてマーク)は、キャッシュに追加される必要がある。
それは、現在の位置だけでなく、コンボリューションウィンドウが(Z−1)行の下にスライディングし、1列だけ右にスライディングし、そして再び上に行った後に、計算に使用されるためである。
次に、コンボリューションウィンドウが1行の下にスライディングするたびに、1つのキャッシュ値(左上)は、除去され得、そしてSRAMからの1つの値は、追加され得る(「m」でマークされる)。
したがって、図2GBで「c」マークの数をカウントするには、要求されるキャッシュサイズは、「(H+(H+Z−1)×(W−1))」である。
後述するように、ウェイトサイクリング(weight cycling)が使用されると、キャッシュサイズは、任意のタイルに同時に格納されたカーネルの数と同じ因子(factor)だけ増加され得る。
上述したように、コンボリューションカーネルが小さければ、システムは、複数の平面カーネルを各MUに格納される。
例えば、MUが18個のウェイトレジスタを含み、コンボリューションが2×2であれば、4つの2×2のカーネルがMUウェイトレジスタに格納され得る。
例えば、64個のチャンネル(0…63)を含むIFMのドット積は、時間に応じて、4つの格納されたカーネルをサイクリングすることにより、OFM…7に計算される。
システムは、チャネル(0…15)を保有するIFMスライスをフェッチし、(4つのうち)第1のカーネルを乗じ、そしてタイルのアキュムレータ内に結果を格納することができ、チャンネル(16…31)を含むIFMスライスをフェッチし、(4つのうち)第2の2×2カーネルを乗じ、そして結果をすでに格納されたアキュムレータ値に加え、そして第3の及び第4のカーネルについて繰り返す。
これらのIFMは、またキャッシュされることがあり、これにより、キャッシュサイズを増加させる。
しかし、平面変換する方法(ナイーブ、ジグザグ又は他の)の選択にかかわらず、IFMキャッシュサイズは上限を有し、これ(上限)は、乗算器ユニットウェイトレジスタファイルのサイズの関数である。
これは、それぞれのキャッシュされたIFMが乗算されるウェイトレジスタファイル内で対応するウェイトを有しなければならないためであり、ウェイトレジスタファイルそのものは、例えば、18ウェイトに限定される。
同じ理由により、またウェイトレジスタファイルサイズと同じ下限(lower bound)を有するIFMキャッシュサイズに変換されることに留意しなければならない。
したがって、IFMキャッシュサイズは、すべての可能なサポートされるH及びWの組み合わせを引き継ぎ、最大の「(H+(H+Z−1)×(W−1)−1)」及び「MU_WEIGHTS」に設定されるべきであり、ここで「MU_WEIGHTS」は、乗算器ユニットウェイトレジスタファイルサイズ、例えば、18と同じである。
例えば、ニューラルプロセッサが乗算器ユニットあたり18個のウェイトを含み、Z=2であるジグザグトラバーサル及び「H×W<=18」、例えば、1×1、1×2、2×1、…4×4,9×2,2×9となるように、カーネルウェイト平面サイズに対するすべての自然数H及びWをサポートすれば、IFMキャッシュサイズは、(1+(1+2−1)×(1−1)−1)=0、(1+(1+2−1)×(2−1)−1)=2、(2+(2+2−1)×(1−1)−1)=1、…(4+(4+2−1)×(4−1)−1)=18、(2+(2+2−1)×(9−1)−1)=25、(9+(2+2−1)×(2−1)−1)=11、及び18で、最大、すなわち、「25」である。
いくつかの実施形態では、MUウェイトレジスタファイルの容量は、18個の8ビットウェイト(uint8又はint8)と同一であるか、又は、同等に、9つの16ビットウェイト(uint16又はint16)と同一である。
IFMデータが16ビット(uint16又はint16)であれば、IFMキャッシュは、1つの16ビットIFM当たり2バイトを割り当てることにより、16ビットIFMデータを格納することができる。
従って、MUウェイトレジスタが9つの16ビットウェイトを格納できるのと同様に、IFMキャッシュは、9つの16ビットIFM値を格納することができる。
ジグザグ(ナイーブだけでなく)プラナー(平面)トラバーサルは、8ビット値に適用される方法と同様に、16ビットのIFM値に適用され得る。
このような場合において、上述されたキャッシュサイズは、また「(H+(H+Z−1)×(W−1)−1)×size_of(IFM_DATA_TYPE)」のような、最大の関数内での追加的なW及びHの項を含まなければならず、ここで「size_of」(IFM_DATA_TYPE)は、IFM値のデータタイプのサイズ(バイトのサイズで)を示す(例えば、24ビットIFM値の場合は3バイト、32ビットIFM値の場合は4バイト)。
IFMデータタイプが24ビット、32ビット、又はそれ以上の場合においてジグザグ(及び、ナイーブ)キャッシュが使用されることがあるが、MUウェイトレジスタファイル127サイズ(そして、IFMキャッシュサイズ)を3×3×「size_of」(IFM_DATA_TYPE)に増加させることが推奨される。
後で詳細に説明するように、これは、望ましくない可能性がある、部分結果の使用に頼ることなく、頻繁に使用される3×3平面サイズのウェイトカーネルがコンボリューションされるようにできる。
先に説明したように、SRAM IFMフェッチ、IFM伝達ファブリックを介したIFMスライスの伝送、ローカルタイル内でIFM値をキャッシュすること、(一般的には、各活性化レーンごとに多少異なる割合に)キャッシュされたIFM値を回収すること、並びにタイルの間でOFM結果を再同期化(re−synchronizing)することに対する適切な制御を実行するためには、グローバル、SRAM、タイル、及びレーン制御ロジックユニット(140、142、144、146)が共に動作する。
IFM及びOFMプラナートラバーサルを構成するために、ホストCPUは、ジグザグの高さZを含んで、計算パラメータをグローバル制御FSM140及びSRAM制御ロジック142にロードする。
その後、グローバル制御FSM140は、SRAM制御FSMの142及びタイル制御FSM144を調整して計算を開始・実行する。
コンボリューションウィンドウが、ジグザグプラナー方向方式で入力及び出力レイヤーをトラバースすれば、それぞれのアキュムレート・アンド・リターン(accumulate−and−return)ユニット167は、フリプーリング(pre−pooling)結果をSRAMに格納せずに、そしてプーリング(pooling)を適用するために、後でそれらをリードすることなく有利に、オン・ザ・フライでプーリングを計算するために必要なOFM値を受信する。
ARUは、図2HA〜図2HDに示すように、各コンボリューションOFM結果を伝送しない代わりに、各プーリングの出力が完了されるまでARUのプーリングロジック196のレジスタでコンボリューション結果を維持することで、プーリングウィンドウが重ならない場合においてプーリングを実行する。
各プーリングの出力が完了された後にのみ、ARUはプーリングの出力をSRAM109にライトする。
最大プーリングの場合は、ARU出力レジスタは最大値を維持することができ、この値はコンボリューションの出力と比較され、最新のOFM出力が現在の最大値を超えるときにアップデートされる。
プーリングウィンドウがスライディングすると、ARU出力レジスタは、最大の動作を新たに開始するためにリセットされる。
平均プーリングの場合、ARUアキュムレータは、プーリングウィンドウがスライディングしようとしているまでOFM出力を追加することを維持する。
その後、平均を計算するためにアキュムレータに「1/(POOLING_WIDTH×POOLING_HEIGHT)」が乗じられ、平均がラウンド(round)されてSRAMにライトされる。
プーリングウィンドウがスライドされると、アキュムレータは、再び平均化を開始するためにリセットされる。
例えば、図2HAは、2×2プラナープーリングとともに実行されたZ=2であるジグザ平面トラバーサルを示し、ここでIFMレイヤーは、OFM値(それぞれのプーリングウィンドウで)が順次計算されるようにする、このような方式でトラバースされる。
ARU出力は、それぞれの4つのOFM値(それぞれのプーリングを計算するために必要)を順番に生成するため、ARUプーリングロジック196は、最大のプーリングを計算するために、4つの連続の結果のうち、最大値をとる。
図2HBは、3×3プラナープーリングと「Z=3」を有するジグザグ平面トラバーサルを示す。
Z値がプーリングのカーネルの高さと同一であるため、ジグザグの方法でIFMレイヤーをトラバースすれば、最大及び平均ポーリングに適した順序で生成された各プーリングウィンドウでのOFMが自然に発生する。
図2HCは、「Z=H=4」の追加の例示を提供し、ここで、Hはプーリングカーネルの高さを示す。
図2HDは、Z=4で、プーリングのカーネルの高さが「2」になるように、Z値がプーリングのカーネルの高さと一致しない場合を示す。
この場合には、プーリングロジック196は、プーリングを2つの領域(図に示したように、上位2×2及び下位2×2)に細分化し、追加のレジスタを使用して、2つのプーリング領域のいずれか(図2HDで、下位2×2)からの未完了の結果を一時的に格納する。
より一般的には、ジグザグプーリングウィンドウの高さは、ジグザグのトラバーサルの高さの自然数の倍数であり得る。
合理的な数字は「2」、「3」、及び「4」を含み得る。
前に述べたように、ジグザグプーリング垂直ストライド(stride)は、ジグザグトラバーサルの高さと同一ではなければならず、これはオン・ザ・フライプーリングをこのような場合にのみ可能となるように限定する。
しかし、出力プーリングロジック196がプーリングのロジックの十分なコピー(copy)を有する限りプーリングウィンドウは、水平的に重なることができ、プーリングロジックの十分なコピー(copy)のそれぞれは、すべてのこのような水平的に重なるプーリングウィンドウに対して並列的にそれぞれの水平的に重複されるプーリングウィンドウをプロセッシングすることができる。
ジグザグプーリングウィンドウの幅及びストライドは、例えば、「2」、「3」、及び「4」を含む、合理的なプーリングのウィンドウ幅の数値のように、一般的に任意であり得る。
プーリングウィンドウが垂直に重なる場合において、それに応じてオン・ザ・フライプーリングの問題が発生し、そして/又はカスタムプーリング(custom pooling、最大値及び平均ではない)が必要な場合には、プーリングは、
(i)SRAMバンクの近くにリード・モディファイ・ライト(read−modify−write)のロジックを配置すること(現在の発明で開示されずに)、及び/又は
(ii)AXIを介して外部CPU、GPU、DSP、又はコンピューティングコアの他のタイプでSRAMを読み出す(read out)こと、プーリングを実行すること、及びAXIを介してNPU SRAMに再び結果をライトすることにより実行され得る。
また、SRAMバンクに近くのカスタムリード・モディファイ・ライトのロジックは、部分結果をタイルに再び伝送せず、部分結果を効率的に合算するために再使用されてもよい。
ニューラルプロセッサが、特定の演算(例えば、コンボリューション又は完全接続されたレイヤーの計算)を実行するように構成するためには、IFM及びOFMのテンソルサイズを考慮する必要があり、そして演算のパラメータ(例えば、演算タイプ、ストライド、など)とともに利用可能なハードウェアに計算を「マッピング(mapping)」する必要がある。
個々のタイルは、単に固定された数字の16個のIFMデプスチャンネル入力、及び8つのOFMデプスチャンネル出力を有し得る反面、ディープラーニングニューラルネットワークモデルのレイヤーでのデプスチャンネルの数は、多様で一般的に「16」及び「8」をはるかに超えている。
「マッピングアルゴリズム(mapping algorithm)」は、オフラインで実行されて(ランタイムとは対照的に、コンパイル時間の間)このような大規模なIFM及びOFMのテンソルを部分(下位テンソルS)に細分化し、このような部分を計算のための利用可能なタイルに割り当て、そして利用可能なタイルからの出力がどのように計算を完了するために再組立(re−assemble)されるかについての説明(構成)を生成する。
以下で、より詳細に説明するように、マッピングアルゴリズムは、またIFM(及び対応するOFM)テンソルトラバーサルの順序をプラナー方向と特にデプス方向の両方に決定することができる。
特定のマッピングの問題、つまり、与えられたIFM、OFM、ウェイトテンソルサイズ、並びに演算パラメータに対する多様なソリューションが有り得る。
そのため、マッピングアルゴリズムは、また、最低電力、最低SRAMサイズ、(乗算器の利用率を最大化することにより達成された)最低計算レイテンシ、又はそれらの組み合わせ(例えば、使用可能な固定されたSRAMのサイズが指定された低消費電力)に対するソリューションを最適化するかを示すパラメータを収容する。
些細なことから、より高度の場合への進行としては、いくつかの実施形態のマッピング演算の実施態様は、例示のセットから理解され得る。
活性化スキップは、マッピングに大きく影響を与えないため、説明の明確性のために、ゼロ活性化スキップに関連付けられた特徴を無視することにし、それぞれのOFM列は1つの加算器ツリー及びアキュムレータのみ(つまり、計算が「デンス(dense、密集した)」である)を含むと仮定する。
キャッシュは、マッピングに大きく影響を与えないため、ジグザグ平面変換方法を含むキャッシュを無視することにし、そしてコンボリューションウィンドウは、ラスタ(raster)方式で移動(プラナー方向にスライド)すると仮定する。
図3AA〜図3AKで示した、第1の例示では、単一のタイルを使用して、3×3×16×8のコンボリューションが計算される。
図3AAは、入力として16個のデプスチャンネルを有するIFM(1つのIFMスライス)を収容し、そして8つのデプスチャンネルを有するOFM(1つのOFMスライス)を生成するためにタイルを示す。
図3ABで示すように、IFMテンソル304のサイズは、64×64×16であり、OFMテンソルのサイズは、64×64×8であり、そしてウェイトテンソルのサイズは、3×3×16×8である。
最初は、図3ACに示すように、ウェイトは、SRAMからMUウェイトレジスタファイル127にプリロード(preload)される。
ウェイトカーネル302のサイズは、3×3×16×8である。
3×3の平面サイズを有すれば、ウェイトカーネルは「3×3=0」プラナー「位置」を有して、図3ACでは、A〜Iに表示される。
それぞれの平面位置は、単一のOFMチャンネルに対して16長さのIFM値ベクトルを有するドット積を計算するのに使用される16長さのウェイトベクトルと関連付けられる。
8つのOFMチャンネルがあるため、図3ACで示すように、ウェイトカーネルは、それぞれのOFMに対して1つの3Dテンソルを有すると考えられる。
具体的には、ウェイトは、次のようにMUウェイトレジスタファイル127にロードされる。
全体のMRアレイ122内の複数のMUウェイトレジスタファイルは、ディメンション18×16×8(MU当たり18個のウェイト、16個のMU行及び8つのMU列)を含むテンソルとして考えられ、テンソルは、サイズ3×3×16×8の全体ウェイトカーネルを保有するのに十分である。
18×16×8のウェイトレジスタファイルテンソルのサイズは、また(3×3)×16×8としてリライト(re−write)されることがあり、ここで行(R)、列(C)でそれぞれのMUウェイトレジスタファイルは、ウェイトテンソル(W×H×R×C)での3×3=9平面の位置(x、y)のすべての9つのウェイトを格納することができ、ここで、W及びHはウェイトカーネル平面の幅と高さ、すなわち、W=3及びH=3である。
例えば、図3ACを参照すると、行0、列0でウェイトレジスタファイルは、ウェイト「{A0[0]、B0[0]、C0[0]、D0[0]、E0[0]、F0[0]、G0[0]、H0[0]、I0[0]}」を格納し、ここでの表記法は、「A…I」の次にOFM列「0…7」及びIFM行「[0…15]」である。
これにより、行15、列0でウェイトレジスタファイルは、ウェイト「{A0[15]、B0[15]、C0[15]、D0[15]、E0[15]、F0[15]、G0[15]、H0[15]、I0[15]}」を格納し、行15、列7でウェイトレジスタファイルは、ウェイト「{A7[15]、B7[15]、C7[15]、D7[15]、E7[15]、F7[15]、G7[15]、H7[15]、I7[15]}」を格納する(その他等々である)。
タイルは、ドット積を「垂直に」計算するため(列ワイズ(方向)(column−wise)の加算器ツリーを使用して)、ロードされウェイトの記述された順序は、それぞれの平面位置(A…I)でIFM入力のドット積計算を許容することを見ることができる。
図3ADを参照すると、以後のコンボリューションウィンドウは、開始位置に位置され得、そして8つのアキュムレータ(前述されたように、マッピングの説明の明確性のために、8つのOFMチャネルのそれぞれに対して1つずつ存在)がクリアされ得る。
図3AEを参照すると、以後のタイルは、SRAMからIFM a[0…15](ここで、「a…z」は、IFMの平面位置を示し、「0…15」は、IFMデプスチャンネルを表す)をリード(read)し、そして、このような値をタイルの8つの列にブロードキャストする。
第1の列は、「a[0…15]」を要素別(element−wise)でプリロードされたウェイト「A0[0]…A0[15]」に乗じ、第2の列は「a[0…15]」を要素別にプリロードされたウェイト「A1[0]…A1[15]」に乗じ得る(等々)。
結果積は、垂直的に(それぞれの列の加算器ツリーを使用して)加算(又は減算)され得、そしてそのアキュムレータに加わり得る。
単一の位置で3×3コンボリューションを完了するためには、8個以上(3×3=9の中で)の平面位置がプロセッシングされるために残っているため、結果のドット積はまだ完成された結果ではない。
図3AFを参照すると、その後のタイルは、SRAMからIFM b[0…15]をリードすることができ、そしてこのような値をタイルの8つの列々にブロードキャストすることができる。
第1の列は、「b[0…15]」を要素別にプリロードされたウェイトの「B0[0]…B0[15]」に乗じ、第2の列は、「b[0…15]」を要素別にプリロードされたウェイトの「B1[0]…B1[15]」に乗じ得る(等々)。
結果積は、垂直的に合算され得、そしてそのアキュムレータに加わり得る。
図3AGを参照すると、その後のタイルは、SRAMからIFMc[0…15]をリードし、そして、このような値をタイルの8つの列々にブロードキャストする。
第1の列は、「c[0…15]」を要素別にプリロードされたウェイトの「C0[0]…C0[15]」に乗じ、第2の列は、「c[0…15]」を要素別にプリロードされたウェイトの「C1[0]…C1[15]」に乗じ得る(等々)。
結果積は、垂直的に合算され得、そしてそのアキュムレータに加わり得る。
図3AHを参照すると、その後のタイルは、SRAMからIFMg[0…15]をリードし、そして、このような値をタイルの8つの列々にブロードキャストする。
第1の列は、「g[0…15]」を要素別にプリロードされたウェイトの「D0[0]…D0[15]」に乗じ、第2の列は、「g[0…15]」を要素別にプリロードされたウェイトの「D1[0]…D1[15]」に乗じ得る(等々)。
結果積、は垂直的に合算され得、そしてそのアキュムレータに加わり得る。
図3AIを参照すると、その後のタイルは、SRAMからIFM h[0…15]をリードし、そしてこれらの値をタイルの8つの列々にブロードキャストする。
第1の列は、「h[0…15]」を要素別にプリロードされたウェイトの「E0[0]…E0[15]」に乗じ、第2の列は、「h[0…15]」を要素別にプリロードされたウェイトの「E1[0]…E1[15]」に乗じ得る(等々)。
結果積は、垂直的に合算され得、そしてそのアキュムレータに加わり得る。
図3AJを参照すると、「a」〜「o」にラベルされた、カーネルの9つの位置のうち残りの位置に対して類似の動作が実行され得る。
以後、アキュムレータに格納された値は、8ビットの出力のOFMを形成するためにラウンドされ得、すべての8つのOFM結果は、SRAMにライトされ得る。
これは1つのコンボリューションの計算を完了する。
図3AKに示すように、以後、コンボリューションウィンドウは、1つの列ごとにプラナーワイズに移され得、そしてその動作は繰り返され得る。
図3BA〜図3BCに示した、第2の例では、3×3×16×128コンボリューションは、単一のタイルを使用して計算される。
前述したように、利便性のために、図3BAで示すように、用語「IFMスライス」は、16個のIFMデプスチャンネル、IFMリードの単位(そしてタイル入力)を意味するように定義され、用語の「OFMスライス」は、8つのIFMデプスチャンネル、OFMタイル出力の単位を意味するように定義され得る。
動作マッピングを長方形で説明することが便利な場合があり、ここで図3BBに示すように、長方形の高さはIFMチャンネルの数に対応し、そして長方形の幅は、OFMチャンネルの数を示す。
3×3×16×128コンボリューションは、それを16個の3×3×16×8コンボリューションに分割することにより、実行されることがあるため、3×3×16×8コンボリューションを実行する以前の例が16回繰り返されてもよい。
第1の段階では、OFM[0…7]に対する3×3×16×8コンボリューションが計算され得、第2の段階では、OFM[8…15]に対する3×3×16×8コンボリューションが計算され得、等々続いて、第16の段階では、OFM[120…127]に対する3×3×16×8コンボリューションまで計算され得る。
OFMチャンネルの次の下位セットをプロセッシングするのは、「OFMをステッピングすること(stepping the OFM)」と称され得る。
16個の段階は、16個の長方形に対応され得、長方形の中で第1の、第2の、及び第16の長方形は、図3BCに示され、そして16段階が完了されると、3×3×16×128コンボリューションが計算されることを図3BB及び図3BCから見ることができる。
仮説的に、OFMを十分に小さいピース(piece、断片)に簡単に分割することにより、このような方法で無限定のOFMのチャネルは、プロセッシングされ得る。
システムが「OFMのステップ(steps the OFM)」を実行するたびに、IFMは、全体的に再びリードされる(この例では、16回)。
(全体)IFMのそれぞれのリードは、「IFMパス(pass)」と呼ばれ、そして、このようなそれぞれのIFMパスはかなりの量のエネルギー(又は、パワー、演算が繰り返し実行される場合)を消費する可能性がある。
特にモバイルのスマートフォンのようなバッテリー駆動(battery−powered)装置の場合には、消費電力を低減させることが非常に望ましい。
次の例は、このようなエネルギーコストの中の一部を回避するためのアプローチを示す。
図3CA及び図3CBに示した、第3の例では、3×3×16×128コンボリューションが計算され、この場合、16個のタイル(1つのタイルとは対照的)を使用する。
それぞれのタイルは「16×8=28」の乗算器を含んでいるため、16個のタイルは、総「129×16=2048」の乗算器を含む。
IFM[0…15]は、すべての16個のタイルにブロードキャストされることがあるため、タイル1は、OFM[0…7]を計算するはずであり、タイル2は、OFM[8…15]を計算するはずであり、等々続いて、タイル16は、OFM[120…127]を計算するはずである。
本明細書で使用するように、ブロードキャストは、単一のタイルを有するすべてのMU列々にABU出力をフィードすることを意味するタイル102の説明とは対照的に、IFM「ブロードキャスト」は、複数のMRタイル102に同時にIFMをフィードすることを意味することに留意しなければならない。
ニューラルプロセッサは、複数のSRAMバンクセット109(図1A及び図3AC)を含む。
このように、図3CBを参照すると、入力「IFM[0…15]」は、SRAMバンクセット0からフィードされ得る。
タイル1の出力(OFM[0…7])は、タイル2の出力(OFM[8…15])とともに16チャンネル「OFM[0…15]」に接続されてSRAMバンクセット1に格納され得る。
同様に、タイル2の出力は、タイル3の出力と接続されてSRAMバンクセット2に格納され得、等々続いて、タイル15の出力は、タイル16の出力と接続されてSRAMバンクセット8に格納される。
第3の例では、IFMブロードキャストを使用した結果として、IFMデータが一度だけリードされるため、すべてのOFMが単一の「パス」内で計算され(すなわち、全体のIFMを一度リードする)、そして複数のIFMパスを実行することにより、第2の例で発生した大部分のエネルギー消費を避けることを見ることができる。
図3DAに示した、第4の例示では、3×3×16×256コンボリューションが計算され、16個のタイルを使用する。
16個のタイルは、シングルパスで最大「16×8=128」のOFMチャンネルだけ生成し得、このような例では、256個のOFMチャンネルが生成され得る。
従って、OFM[0…127]を計算するために使用される第1の段階と、OFM[128…255]を計算するのに使用される第2の段階とを有する、2つのOFM段階が実行され得る。
2つのIFMパスが使用され得る(IFMを完全に2回リードする)。
2つの段階でOFMを形成することは、図3DAで示す。
図3EA及び図3EBに示した、第5の例では、3×3×32×64コンボリューションが計算され、16個のタイルを使用する。
16個のIFMチャンネルを有していた先立つ例示とは異なり、この例示は、32個のIFMチャンネルを含む。
すべての32個のIFMチャンネル(2つのスライス)は、SRAMから同時にリードされ得る。
ニューラルプロセッサは、複数のSRAMバンクセットを含み得る。
それぞれのバンクセットは(マッピング例示において)クロックサイクル当たり1つのスライスをストリーム(stram)することができる。
したがって、2つのスライス(32個のIFMチャンネル)を同時にリード(又はストリーム)するためには、2つのバンクセットが使用され得、この中で、第1のバンクセットはIFM[0…15]をストリームすることができ、そして、この中で、第2のバンクセットはIFM[16…31]をストリームすることができる。
図3EBを参照すると、OFM[0…7]の計算は、タイル1とタイル9にかけて分割(split)され得る。
タイル1は、IFM[0…15]を未完了OFM[0…7]へ減少させる(又は増加させる)。
タイル2は、IFM[16…31]を未完了OFM[0…7]に減少させる。
以後、OFM[0…7]の計算は、タイル1及びタイル2の出力を合算することにより(そしてバイアス、活性化関数などを適用することにより)、完了され得る。
このような合計を実行するために、タイル1及びタイル2の加算器ツリーは、1つ以上の追加のハードウェア加算器ステージを使用して、「結合(join)」され得る。
減少ファブリック111は、このような追加のハードウェア加算器ステージを提供する。
OFM[8…15](タイル2及びタイル10の追加)、…OFM[56…63](タイル8とタイル16の追加)について類似の動作が使用され得る。
図3EBを参照すると、この例では、タイル(1…8)からSRAMへの出力がなく、後述されるように、タイル(9…16)だけがOFMをSRAMに格納する。
図3FA〜図3FCに示した、第6の例では、3×3×32×512コンボリューションが計算され、16個のタイルを使用する。
図3FAを参照すると、第5の例のように、2つのIFMスライス(IFM[0…31])が2つのSRAMバンクからリードされ得、そして2つのIFMスライスの各々は、8つのタイルにブロードキャストされ得る。
2つのこのような8つのタイルのセットは、共にOFM[0…63]を計算することができ、このような結果は、4つのSRAMバンクセットに格納され得る。
図3FBを参照すると、IFMパスあたり64個のOFMが計算され得る(つまり、64個のOFMを計算するために、全体のIFMがリードされる)。
このように、第4の例示の方式と類似した方法で、512個のOFMが8つのIFMパス(そして、同等に、8つのOFMの「段階」)で計算され得る。
OFM[0…63]は、第1のIFMパスのうち計算され得、OFM[64…127]は、第2のIFMパスのうち計算され得、等々続いて、OFM[448…511]は、第8のIFMパスのうちに計算し得る。
このような例示では、「64個のOFMスライスにより2つのIFMスライス(2つのIFMスライス×64個のOFMスライス)」の演算が8つのOFMの段階に分割(split)された。
各OFM段階は、「8つのOFMスライスにより2つのIFMスライス(2つのIFMスライスに×8つのOFMスライス)」をコンボリューションする。
図3FCを参照すると、いくつかの実施形態では、仮想SRAMバンクは、SRAMバンク(約32KBの容量を有し得る)にIFMデータが使い果たされるか、又はOFMデータがいっぱいになる場合をプロセッシングするために使用され得る。
このような場合では、ニューラルプロセッサのデータファブリックは、透明な(IFMストリームを受信するタイルに)切り替え(switch)て、他のSRAMバンクのセットを接続することができる。
前述されたように、IFM及びOFMのテンソルは、単一のSRAMバンクセットに格納されるには大きすぎることがあり、したがって、格納のためのSRAMバンクのセットに適合するように十分に小さい下位テンソルに分割される必要がある。
グローバル制御ロジック140は、各下位テンソルが関連付けられているSRAMバンクセット内に格納されるアドレスだけでなく、IFM及びOFMの下位テンソルインデックス、サイズ、各下位テンソルを格納するSRAMバンクのセットのインデックスを含み、IFM及びOFMのテンソルが分割されてSRAMバンクセットに格納される方法を指定する構成レジスタを含む。
計算が行われてIFM(OFM)トラバーサルが1つのSRAMバンクセット109に格納された下位テンソルから、他のSRAMバンクセット109に格納された他の下位テンソルに移動するにつれ、グローバル制御FSM140は、IFM及びOFMの伝達ファブリックのオン・ザ・フライの再構成を調整し、IFMソース(及びOFMデスティネーション)SRAMバンクセットを現在のものから次のものに転換する。
いくつかの実施形態では、再構成は、IFMを消費するタイル(及び出力を生成するタイル)に透明な方式で実行され、そしてバススイッチオーバー(bus switch−over)のうちに計算を停止(stall)したり、スローダウンしたりしない。
先に記載したように、「マッパー(mapper)」と呼ばれる、ソフトウェアの一部は、ウェイトのカーネルを格納(ストレージ)と部分結果だけでなく、SRAMバンクセット及び物理的SRAMバンクに渡って全体のIFM及びOFMのストレージを分割する方法を静的に(コンパイル時に)決定することができる。
マッピングの説明の明確性のために、複数のSRAMバンクセットにおいて、物理的IFM及びOFMのストレージの詳細は無視し、そして図3FCで示すように、SRAMバンクセットは、IFM及びOFMに対する「仮想」又は「論理的」ビュー(view)306であるものとしてみなす。
図3GA〜図3GDに示した、第7の例では、3×3×32×512コンボリューションが計算され、16個のタイルが使用される。
このような例では、エネルギーを節約するために、より少ないIFMパスを使用して、第6の例示と同じコンボリューションが計算される。
図3GAを参照すると、それぞれの乗算器ユニットウェイトレジスタファイル127は、18個のウェイトを有することができ、3×3コンボリューションに対して、これらの中の9つのウェイトが第6の例で使用された。
このように、3×3ウェイトの2つのセット(1つとは対照的)が格納され得、そして時間が経つにつれて「サイクル(cycle)」され得る。
特に、3×3×32×512コンボリューションは、時間的にインターリーブ(interleave)された2つの3×3×16×512コンボリューションに分割され得る。
図3GBを参照すると、第3の例の方式と類似した方法で、3×3×16×512コンボリューションが16個の物理タイルにマッピングされ得る。
それぞれのIFMパスについては、1つのIFMスライスはリード(SRAMバンクセットから)され、そして(8つのSRAMバンクセットに)128個のOFMチャンネルを出力する16個の物理的タイルにブロードキャストする。
このような例では、OFM計算を完了するために、4つのIFMのパス(そして4つのOFM段階)が必要である。
図3GCを参照すると、いくつかの実施形態では、第1の段階では、OFM位置(x、y)でOFM[0…127]に対するコンボリューションを計算するためにIFM[0…15]がフィードされ得るが、OFM結果がSRAMにライトされる代わりに、アキュムレータに格納され得る。
図3GDを参照すると、第2の段階では、以後、各乗算器ユニットウェイトレジスタファイル127は、OFM[0…127]の計算を完了するために3×3ウェイトの第2のセットに切り替え、そしてIFM[16…31]にフィード(提供)する。
このようなプロセスは、「IFMウェイトサイクリング」と称される。
以後、第3の段階では、OFM[0…127]は、SRAMに格納され得、そしてアキュムレータはクリアされ得る。
このような3つの段階は、計算が完了するまで繰り返される。
図3GAを参照すると、いくつかの実施形態では、論理的なタイルは、複数のウェイトのセットを格納する物理的タイルとして定義される。
本例示(第7の例示)で、ウェイトの3×3セットの2つを格納することにより、16個のこのような論理タイル(時間に応じてインターリーブされた)のセットの2つ(つまり、32個の論理タイル)が形成されるのを見ることができる。
第7の例では、32個の論理タイルは、それぞれのIFMのパスで、より多くの(例えば、より広い)OFMを物理的に計算することができるので、IFMパスの数(そしてSRAM IFMリードエネルギー)は、第6の例に比べて2倍減少される。
図3HA〜図3HCに示した、第8の例では、3×3×512×256コンボリューションが先に計算され、16個の物理タイルが使用される。
この例では、IFM及びOFMのチャンネルの数(それぞれ512及び256)は、すべて非常に大きいということに留意しなければならない。
以下で、より詳細に説明するように、コンボリューションカーネルが大きすぎて計算できない場合の部分結果、又は「部分」が使用される。
しかし、この例は、部分を使用せずに大きなウェイトカーネルを使用してコンボリューションを実行し続けることができる方法を示す。
3×3×512×256コンボリューションは、図3HBで示したように計算される。
3×3の8ビットコンボリューションの場合、3×3の8ビットウェイトのセットの2つは、各乗算器ユニットに格納されるため、(ウェイトの2個セットに)×(16個の物理的タイル=32個の論理タイルがある。
32個の論理タイルは、32個のIFMスライスを減少させることができるので、部分を使用せずにプロセッシングすることができるIFMチャンネルの最大数は、(32個のスライスに)×(スライス当たり16個のIFMチャンネル)=512個のIFMチャンネルである。
したがって、部分を使用せずに、3×3×512×Nコンボリューションを計算することが可能であり、ここでNは、任意の正の整数である。
図3HB及び図3HCを参照すると、クロックあたり256個のIFMチャンネルが、減少ファブリックと結合されたタイルの加算器ツリーを使用して減らされる。
すべての512個のIFMチャンネルを減少させるために(そして8つのOFMチャンネルを生成するために)、2つのウェイトサイクルを実行する。
ウェイトサイクル1で、図3HBに示すように、IFM[0…15]は、タイル1にフィードされ得、IFM[16…31]は、タイル2にフィードされ得、等々続いて、IFM[240…255]は、タイル16にフィードされ得る。
ハードウェアツリーは、減少ファブリックにより提供されるハードウェアの加算器ステージを使用して、すべての16個のタイル(各列当たり)に渡って結合され得る。
加算器ツリーのルート(root)は、タイル16で終了されるため、(後で、より詳細に議論するように、減少ファブリック、OFM伝達ファブリック、及び加算器ツリーのコンテキストで)、タイル16だけが結果を生成する一方、タイル(1…15)のアキュムレータは、この構成では使用されない。
図3HCに示した、ウェイトサイクル2において、IFM[256…271]は、タイル1にフィードされ得、IFM[272…287]は、タイル2にフィードされ得、等々続いて、IFM[496…511]は、タイル16にフィードされ得る。
以後、タイル16は、完了したOFM[0…7](x、y)の結果をSRAMバンク16にライトする。
最後に、OFM[0…7]、次にOFM[8…15]、等々続いて、OFM[248…・255]を計算するためには、32個のIFMパス(32個のOFMの段階)が実行され得る。
これらの特定の例では、IFMパス及びOFM段階の個数は同じであるが、以後の例においてIFMパスとOFM段階との間の差は、より明確になることに留意しなければならない。
図3HDは、32個のIFMパス(32個のOFM段階)の代わりに、64個のIFMパス(64個のOFM段階)を実行することにより、図3HA〜図3HCに示した3×3×512×256コンボリューションが3×3×512×512コンボリューションに簡単に変更される方法をさらに示す。
図3IA〜図3IFに示した、第9の例では、3×3×512×256コンボリューションは、16個のタイルを使用し、そして部分結果を使用して計算される。
一部の場合において、SRAMの読み取りの数を減少させることで(例えば、第8の例と比較して)、部分を使用することは、省エネルギーを可能にできる。
部分を使用すれば、マッピングアルゴリズムは、ウェイトテンソルを複数の部分に分割することができ、特にデプスチャンネルワイズ(channel−wise)で、単一のコンボリューション演算(ウェイトテンソルをロードすること、IFMをトラバースすること、OFMをライトすることを含む。)を2つ以上に変換することができる。
これらの2つ以上の結果コンボリューションの出力は、最終的な結果を生成するために後で結合される。
まず、部分なしで計算された3×3×512×256コンボリューションを示す図3HB〜図3HCを想起する。
図3IA〜図3IB、及び図3IC〜図3IDは、ウェイトテンソル(そして対応するIFM及びOFM)512IFMチャンネルが、それぞれ3×3×256×256サイズの、2つの個別のコンボリューションに対応する256と256に分割された後、関連したハードウェアリソースのマッピングを示す。
図3IA〜図3IBは、2つの3×3×256×256コンボリューションの内の1番目を示す。
ウェイトカーネル平面サイズが3×3=9であるため、18個の8ビットウェイトを保有できる個々のMUウェイトレジスタファイルは、3×3ウェイトの2個セットを格納するのに十分な容量を有するため、32個の論理タイルが計算に使用される。
以後、8つのIFMスライスがロードされ得る。
以後、それぞれのIFMスライスは、2つの物理タイルにブロードキャストされ得る。
16個のOFM段階(16個のIFMパスに)が実行され得る。
図3IAに示すように、第1のウェイトサイクルの間に、3×3IFM[0…127]がフィードされ、3×3ウェイトの第1のセットとコンボリューションされ、加算器ツリーを使用して減少され、そしてタイル(8及び16)のアキュムレータレジスタに累積され得る。
図3IBを参照すると、第2のウェイトサイクルの間に、3×3IFM[128…255]がフィードされ、3×3ウェイトの第2のセットとコンボリューションされ、加算器ツリーを使用して減少され、そしてタイル(8及び16)内のアキュムレータレジスタにさらに累積され得る。
この時点で、対応する3×3×256×16ウェイトカーネルと3×3IFM[0…255]とのコンボリューションがOFMチャンネル(0…15)に対して完了され、そして部分結果として、仮想SRAMバンクセット(8及び9)ライトされる。
これは部分結果であるため、完了された結果とは対照的に、アキュムレータ130の値は、SRAMに向かう途中で活性化関数モジュール197をバイパスする。
選択的に、SRAMサイズの要件と消費電力を低減させるため、ビット範囲選択モジュール187は、例えば、8ビット活性化及びウェイトを使用するとき4バイトまで、又は16ビットの活性化及びウェイトを使用するとき6バイトまでラウンディングすることにより、部分結果のビット幅を減少させることができる。
全体のIFM[0…255]がプロセッシングされるまで、すなわち、すべての必要な平面(x、y)の位置に対して、上の段階は繰り返され、IFM[0…255]を介した1つのパス(経路)に対応して、OFM[0…15]に対し計算された部分結果の対応するセットを発生させる。
残りのOFMチャンネル[16…255]の部分結果は、IFM[0…255]を介した15個以上のパスに(15個以上のOFM段階に対応する)を実行することにより、計算される。
このマッピングの例では、2つの部分パスの使用は、物理的に、かつ同時に生成されるOFMが、1つのパスで、2倍に(1つのOFMスライスから2つに)、広くなるように(又は拡張されるように)する。
また、各部分のパスの間にプロセッシングされたIFMテンソルのサイズは、H×W×512からH×W×256に、2倍に減少される。
図3IC及び図3IDにそれぞれ示しているように、IFM[256…383]が第1のウェイトサイクルの間にフィードすることがあり、そしてIFM[384…511]が第2のウェイトサイクルの間にフィードされることを除いては、第2の部分のIFMパスは、1番目と同一であり得る。
オリジナル3×3×512×256コンボリューションを完了するのは、部分結果(要素別に、2つの3×3×256×256コンボリューションからの)を加えること、及びARUと同様にスケーリング、バイアス及び活性化関数を適用することを要求する。
このような最後の段階を達成するためのいくつかの方法があるが、次のものを含む。
つまり、
(i)ARUが第2の部分コンボリューション中、最終の結果を生成するように、第1の部分コンボリューションにより生成された部分結果をリードし、要素別に、部分結果の第2のセットと合算されるように、IFM伝達ファブリックを介してタイルARUに部分を伝送すること、及び
(ii)両部分のコンボリューション中、ARUが部分結果を出力するようにする一方、部分を追加し、そして活性化関数を適用するためにSRAMバンクセットに追加のロジックがリード・モディファイ・ライトを実行するようにすることである。
より具体的には、部分を完了するための追加のロジックは、第2の部分コンボリューション中に部分結果を受信し、第1の部分コンボリューションの結果をSRAMからリードし、このような結果を合算して活性化関数をオン・ザ・フライに適用して、最終的な結果をSRAMに再びライトし、そして
(iii)活性化関数を適用することなく、要素別に、2つ以上の部分演算から部分結果を追加し続けるために、部分に対するリード・アド・ライト(read−add−write)演算が可能なSRAMバンクセット内で追加のロジックを含み、続いて最後の部分演算ラウンドのうちに完了されるため、部分結果をタイルARUへ読み込まれ、かつ伝送する。
部分が使用されていない場合とは異なり、部分が使用されると、コンボリューション演算を配列するとき、OFMの高さ及び幅が考慮される必要が有り得る。
図3IEを参照すると、4つのバイトがそれぞれの部分結果を格納するために使用され得る(IFM及びOFMの両方が8ビットであると仮定)。
この場合では部分結果に対するSRAMストレージサイズは、「(OFM高さ)×(OFM幅)×(OFMデプス)×(4バイト)」と同じである。
部分結果のためのSRAM(オン・チップ(on−chip))ストレージ容量が不足すると、図に示したように、OFMは、下位ウィンドウに分割され得、一度に1つずつプロセッシングされる。
しかし、下位−ウィンドウがプロセッシングされるたびに、カーネルウェイトの全体のセットをロード(又はリロード(re−load))する必要が有り得るし、これは、エネルギー消費を増加させる可能性がある。
例えば、OFM平面サイズが10×10に設定され、IFM平面サイズがOFM平面サイズと同一に設定されると仮定する。
この場合では、カーネルウェイトサイズは、「3×3×512×256=1.2MB」であり、比較的大きい。
全体の部分結果(全体の部分結果をプラナー(平面)下位ウィンドウに細分化せずに、全体のIFM平面サイズについて)を格納するためのSRAMのサイズは、「10×10×256×4=102,400バイト」である。
単純化のために、下位ウィンドウの使用が必要としないように、SRAMは、十分な容量を有するとさらに仮定する。
図3IFは、この例では、コンボリューションを計算するプロセスを要約するが、IFM[0…255]及びすべてのOFM部分[0…255]に対する部分の第1のセットは、計算・格納され、IFM[0…255]及びすべてのOFM[0…255]に対する部分の第2のセットは、計算され(ただし、これが最後の部分のラウンドであるため、SRAMにライトされずに)、そして第2の部分コンボリューションが計算されることにより要素別に部分が加えられ、活性化関数がすぐに(on−the−fly)適用され、SRAMにライトされる。
先に述べたように、活性化関数の適用と要素別部分の追加のためにMRを使用するのは、選択的である。
代わりに、要素別、プラナー(チャンネルを通じた減少なし)演算専用のAPAP(Auxiliary Planar and Activation Processing)ユニットが使用され得る。
このようなユニットは、SRAMバンクセットに内に配置することができ、SRAMバンクセットに到達する部分だけでなく、SRAMにローカルに格納されたこのような部分へのアクセスを行うことができる。
以後、APAPユニットは、完了された結果をSRAMにライトする。
このような第9の例に基づいて実行された計算は、2つのパスを実行することにより、かなりの量のエネルギーを節約することができる。
IFMパスの数が「32」から「16」に減少したため、IFMデータリードの量「(IFM高さ)*(IFM幅)*(IFMチャンネル)*(IFMパス)=10×10×512×(32−16)=819,200バイト」(キャッシュ無視)であり、SRAMにライトされた部分データの量は、「(OFM高さ)×(OFM幅)×(OFMチャンネル)×(部分コンボリューションの数−1)×(4バイト)=10×10×256×(2−1)×4=102,400バイト」である。
言い換えると、第2の部分パスが、結果をプラナー(平面)/活性化ユニットに直接フィードする代わりに、結果をSRAMに格納した場合、2倍の量が発生するはずである。
なお、SRAMからリードされた部分データの量は、「(OFM高さ)×(OFM幅)×(部分コンボリューションの数−1)×(4バイト)=10×10×256×(2−1)×4=102,400バイト」である。
言い換えると、第2の部分パスが結果をプラナー/活性化ユニットに直接フィードする代わりに結果をSRAMに格納した場合、2倍の量が発生するはずである。
このように、本例では部分対(vs.)部分なしを使用する3×3×512×256(8ビット)コンボリューションを実行するのは、SRAMからリードされた、少ない819,000IFMバイトが発生する一方で、SRAMに部分をライトするために、追加の102,400バイトが発生し、SRAMから部分をリードするために、別の102,400バイトが発生する。
1つのSRAMライトのエネルギーが、1つのSRAMリードのエネルギーの約2倍であると仮定すると、全体に節約されたSRAMのエネルギーは、「819,000−2×102,400−102,400=511,800×(SRAMリードあたりのエネルギー)」と同一である。
図3JA〜図3JDに示した、第10の例では、8×8×16×64コンボリューションが計算され、4つのタイルが使用される。
8×8コンボリューションは、「8×8=64」ウェイトを有し、これは、単一の乗算器ユニットに適していない可能性があり、例えば、18個のウェイトだけ格納することができる。
したがって、図3JAに示すように、64個のウェイトは、4つのタイルに分割され得るため、タイル1は、「W[0…1,0…7,*,*]」を格納し、タイル2は、「W[2…3,0…7,*,*]」を格納し、タイル3は、「W[4…5,0…7,*,*]」を格納し、そしてタイル4は、「W[6…7,0…7,*,*]」を格納する。
ここで、ウェイトカーネルの表記法は、「W[行、列、IFMチャンネル、OFMチャンネル]」であり、「*」は、全体の適用可能な範囲を示す。
この後、OFM[0…7]を計算するためには、システムがタイルを追加(又は減少)でき、したがって、効果的に、各タイルは2×8×16×64コンボリューションを行い、そして4つのタイルを使用して、同時に実行される、4つの2×8×16×64コンボリューションは、1つの8×8×16×64コンボリューションに集計(aggregate)される。
各2×8×16×64コンボリューションは、IFMウェイトサイクリング(IFM weight cycling)を使用して共に結合された、2つの1×8×16×64コンボリューションとしてさらに構成される。
図3JBは、IFMウェイトサイクリングの第1の段階を示し、ここでコンボリューションウィンドウ内の偶数(まだ奇数ではなく)行がコンボリューションされる。
ここでタイル1は、IFM値「a0、b0、c0、d0、e0、f0、g0、h0」とコンボリューションウィンドウの行0「W[0、*、*、*]」をコンボリューションする一方、タイル2は、IFM値「a2、b2、c2、d2、e2、f2、g2、h2」とコンボリューションウィンドウの行2「W[2、*、*、*]」をコンソリューションし、タイル3は、IFM値「a4、b4、c4、d4、e4、f4、g4、h4」とコンボリューションウィンドウの行4「W[4、*、*、*]」をコンソリューションし、タイル4は、IFM値「a6、b6、c6、d6、e6、f6、g6、h6」とコンボリューションウィンドウの行6「W[6、*、*、*]」をコンボリューションする。
乗算器ユニットの積は、リダクション(減少)ファブリックにより提供される追加の加算器ツリーステージを使用し、また、タイル内のタイル加算器ツリーを使用して減少され、また、タイル4のアキュムレータレジスタ130内に累積(IFM値「a*、b*、…h*」)が、IFM伝達ファブリックを介して4つのタイルにストリームされる。
図3JCは、IFMウェイトサイクリングの第2の段階を示し、ここでコンボリューションウィンドウ内の奇数行がコンボリューションされる。
ここでタイル1は、IFM値「a1、b1、c1、d1、e1、f1、g1、h1」とコンボリューションウィンドウの行1「W[1、*、*、*]」をコンボリューションする一方、タイル2は、IFM値「a3、b3、c3、d3、e3、f3、g3、h3」とコンボリューションウィンドウの行3「W[3、*、*、*]」をコンソリューションし、タイル3は、IFM値「a5、b5、c5、d5、e5、f5、g5、h5」とコンボリューションウィンドウの行5「W[5、*、*、*]」をコンソリューションし、タイル4は、IFM値「a7、b7、c7、d7、e7、f7、g7、h7」とコンボリューションウィンドウの行7「W[7、*、*、*]」をコンボリューションする。
第1のIFMウェイトサイクリング段階と同様に、乗算器ユニットの積はリダクション(減少)ファブリックにより提供された追加の加算器ツリーステージを使用し、またタイル内のタイル加算器ツリーを使用して減少され、タイル4のアキュムレータレジスタ130内累積(IFM値「a*、b*、…h*」は、IFM伝達ファブリック104を介して4つのタイルにストリームされることにより)される。
しかし、第1のIFMウェイトサイクリング段階の間と異なり、アキュムレータレジスタ130は、第2のIFMウェイトサイクル段階のスタートでクリアされないため、一応、両IFMウェイトサイクリング段階が完了すると、アキュムレータレジスタ130は、偶数及び奇数の行全体に対するドット積を含む。
以後、結果OFM[0…7]は、SRAM109にライトするため、1つのOFM位置に対する8×8×16×8ウィンドウのコンボリューションすること(convolving)を完了する。
図3JDに示すように、計算を継続するためには、以後のコンボリューションウィンドウは、次の8×8コンボリューションを計算するように変換され得、そしてOFM全体が完了されるまでプロセスが繰り返され得る。
図3KA〜図3KBに示した、第11の例では、8×8×64×64コンボリューションが計算され、16個のタイルが使用される。
8×8コンボリューションが16個のタイルに適用され得、より多くのIFM及びOFMのチャンネルが使用され得る。
8×8コンボリューションを4つの物理的タイルに分割すると、図3KAに示すように、「論理的」タイルの数が4倍減少(例えば、(16個の物理的タイル)/(演算当たり4つの物理的タイル)=4つの論理タイル)する。
本明細書で使用しているように、物理的タイルの「物理的グループ化(physical grouping)」は、単一の物理的タイルについて大きすぎる演算を実行するためにタイルの加算器ツリーを単一の加算器ツリー(列(column)当たり)に接続することにより、定義される。
図3KAを参照すると、8×8コンボリューションが、大きすぎて単一のタイル102に合わないことがあるため、8×8コンボリューションは、4つのタイルに分割され得る。
4つのタイルから加算器ツリーを単一の加算器ツリーに接続することで、4つのタイルは、単一の論理タイルとして物理的にグループ化され得る。
図3KBを参照すると、「8×8×64×64」を16個の物理的なタイルにマッピングするのは、「8×8×64×64」を4つの論理タイルにマッピングすることに論理的に変換され、ここで、各論理タイルは、「8×8=64」コンボリューションウェイトに十分適した、「18×4=72」ウェイトを含む。
図3KBは「8×8×64×64「コンボリューション演算を4つの論理(したがって、16個の物理的)タイルにマッピングすることを示す。
変換された演算は、次のように実行される。
1番目に、4つのIFMスライスがリードされ、そして部分を避けるために、すべてのIFMのチャネルが一度にリードされる。
2番目に、各IFMスライスは、単一の論理タイルに「ブロードキャスト」される。
3番目に、8つのOFM(1つのOFMスライス)は、1つのIFMのパスで計算される。
これは繰り返されることがあるため、すべてのOFMチャンネルを計算するために、「(64個のOFM)/(パス当たり8つのOFM)=8個のIFMパス(8つのOFM段階)」が実行され得る。
いくつかの状況において、例えば、「8×8×64×1024」コンボリューションを計算するためには、より多くのOFMチャンネルが必要であり得る。
IFMを再びリード(re−read)するために、より多くのIFMパスを実行することにより、より多くのOFMの段階を追加することで、部分を使用せずに、これは可能である。
いくつかの状況において、例えば、「8×8×128×64」コンボリューションを計算するために、より多くのIFMチャンネルが必要になり得る。
このような場合では、
(i)物理的タイルの数が増加しないか、又は
(ii)の乗算器あたりウェイトの数が増加していなければ、部分を使用する必要が有り得る。
しかし、いくつかのアプリケーションでは、8×8のような大きなサイズのコンボリューションが、IFMチャンネルが少ないイメージ又はRGBイメージのみに適用され得る。
N個のウェイトを保有しているMUウェイトレジスタファイルは、最大「H×W<N」までコンボリューションカーネルを収容することができ、ここで、H及びWは、ウェイトカーネルの平面の高さ及び幅を示す。
例えば、18個の8ビットウェイトの容量を有するMUは、「4×4、5×3、3×5、6×2、2×6、7×2、2×7、8×2、2×8、9×2、2×9、18×1、及び1×18」を含むコンボリューションカーネルを保有し得る。
実際には、「8×8×128×64」コンボリューションを計算する必要性は低い可能性があるため、ニューラルプロセッサの代わりにCPUにより実行されることがあり得、したがって、関連したニューラルプロセッサの追加のハードウェアロジックは選択的になされる。
明確性のために、この例で説明したように、IFM、OFM、及び減少ファブリックの説明は、「H×W>N」の接続が要求される場合を省略する。
図3LA〜図3LDに示した、第12の例では、1×1×1024×64コンボリューションが計算され、16個のタイルが使用される。
各MUは、18個のウェイトを含み得る。
1×1コンボリューションは、わずか「1×1=1」ウェイトを要求するため、「(乗算器あたり18個のウェイト)/(コンボリューションウィンドウあたり1つのウェイト)=1×1コンボリューションウェイトの18個のセット」は、各タイルに適合することができる。
論理タイルの数は、「(16個の物理タイル)×(乗算器あたり18個のコンボリューションウェイトセットに)=288個の論理タイル」として計算される。
16個の物理的タイルを使用する1×1×1024×16コンボリューションの計算は、288個の論理タイルを使用する1×1×1024×16コンボリューションの計算に変換される。
部分を避けるために、すべての(1,024)IFMチャンネルは、1つのIFMのパスでリードされる。
288個の論理タイルを使用して、「(IFMスライスあたり16個のIFMチャンネル)×(288個の論理タイル)=4,608個のチャンネル」のサイズまでのIFMを収容することが可能である。
1×1×1024×64コンボリューションは、部分を使用せずに利用可能な4,608個の中から1,024個のIFMチャンネルだけを要求する。
従って、IFMパスあたり計算されるOFMスライスの数は、「floor((4,608個の最大IFMチャンネル)/(1,024個のIFMチャンネル))=4つのOFMスライス」である。
計算は、次のように実行され得る。
最初に、1×1ウェイトの16個のセットは、各MUに格納される。
各OFM段階(IFMパス)の間に、64個のスライス(すべて1,024個のIFMチャンネル)がリードされる。
物理的には、これは、「(64個のIFMスライス)/(MU当たり1×1ウェイトの16個のセット)=4つのIFMスライス」を一度にリードすることに対応する。
1つのOFM段階(1つのIFMパス)で、4つのOFMスライスを計算するためには、4つのIFMスライスのそれぞれは、「(16の物理的タイル)/(4つのIFMスライス)=4つのタイル」にブロードキャストされ得る。
OFMは「(8つのOFMスライス)/(4つのタイルを介したブロードキャスト)=2つのOFM段階(そして2つのIFMのパス)」を使用して計算され得る。
IFMウェイトは、16回循環(cycle)され得る。
具体的には、図3LAを参照すると、コンボリューションの計算は、以下の手順に従って行われる。
第1の段階では、アキュムレータはクリアされる。
第2の段階では、IFM[0…15]、IFM[16…31]、IFM[32…47]、及びIFM[48…63]は、フェッチされ、それぞれのタイル(1、5、9、13)、タイル(2、6、10、14)、タイル(3、7、11、15)、及びタイル(4、8、12、16)にブロードキャストされる。
第3の段階では、タイル(4、8、12、16)のアキュムレータレジスタ内に中間(未完了の)結果として、システムはタイル(1…4)により計算されたドット積をOFM[0…7]に、タイル(5…8)により計算されたドット積をOFM[8…15]に、タイル(9…12)により計算されたドット積をOFM[16…23]に、及びタイル(13…16)により計算されたドット積をOFM[24…31]にそれぞれ累積する。
図3LBを参照すると、第4の段階では、アキュムレータはクリアされず、そしてMUは、IFMウェイトサイクリングでの段階に対応する1×1ウェイトの次のセットを使用するように転換される。
第5の段階では、IFM[64…79]、IFM[80…95]、IFM[96…111]、及びIFM[112…127]はフェッチされて、タイル(1、5、9、13)、タイル(2、6、10、14)、タイル(3、7、11、15)、及びタイル(4、8、12、16)にそれぞれブロードキャストされる。
第12段階で、タイル(4、8、12、16)のアキュムレータレジスタ内に中間(未完了の)結果として、システムはタイル(1…4)により計算されたドット積をOFM[0…7]に、タイル(5…8)により計算されたドット積をOFM[8…15]に、タイル(9…12)により計算されたドット積をOFM[16…23]に、及びタイル(13…16)により計算されたドット積をOFM[24…31]にそれぞれ累積する。
図3LCを参照すると、計算が行われ、IFMウェイトを循環し続け(総計16個のIFMウェイトサイクリング段階について)、IFMをフェッチ及びブロードキャストし、最後のIFMのスライス(チャンネル960〜1023)に到達するまでドット積を計算及び累積する。
この段階では、アキュムレータがクリアされず、MUは、IFMウェイトサイクリング内の最後の段階に対応する1×1ウェイトの次(最後の第16)のセットに転換される。
次の段階では、IFM[960…975]、IFM[976…991]、IFM[992…1007]、及びIFM[1008…1023]は、タイル(1、5、9、13)、タイル(2、6、10、14)、タイル(3、7、11、15)は、タイル(4、8、12、16)にそれぞれフェッチされてブロードキャストされる。
次の段階では、システムは、完了したドット積結果をそれぞれ獲得するために、タイル(1…4)により計算されたドット積をOFM[0…7]に、タイル(5…8)により計算されたドット積をOFM[8…15]に、タイル(9…12)により計算されたドット積をOFM[16…23]に、そしてタイル(13…16)により計算されたドット積をOFM[24…31]に、タイル(4、8、12、16)のアキュムレータレジスタ内にそれぞれ累積する。
次の段階では、活性化がタイル(4、8、12、16)のアキュムレータレジスタに累積されたドット積の結果に適用され、4つの結果OFMスライスは、SRAMにライトされる。
これでOFM[0…31]の計算が完了する。
図3LDを参照すると、以後、システムは、次のOFMの段階を進行し(他のIFMのパスを実行することにより)、計算を繰り返し、今度はOFM[32…63]に関する。
システムは、次のOFMの段階のためにウェイトのスライスをロードする。
つまり、(W[0,0,0…1023,32…63])である。
ウェイトのロード(Weight loading)は、図1K及び図1Nに示すように、垂直ウェイトロードバス(vertical weight loading buses)101を使用して計算と同時に発生することができ、この場合、ウェイトのロードプロセスにより発生される追加の遅延はない。
システムは、アキュムレータをクリアし、そしてMUを1×1ウェイトの第1のセットに切り替える。
以後、システムは、OFM[32…63]を計算するために図3LA〜図3LCのコンテキストで説明したように演算(動作)を繰り返す。
図3LDに示すように(図3LCの場合と同様)、システムが16個のIFMウェイトサイクルの中で15個を通過し、対応するIFMスライスをフェッチし、中間ドット積の結果を計算及び累積すると、システムはIFMウェイトサイクリングの最後(第16の)ラウンドに到達する。
このラウンドでは、アキュムレータがクリアされず、MUは、1×1ウェイトの次(最後の第16の)のセット(最後の、第16のIFMウェイトサイクリング段階)に転換される。
システムは、IFM[960…975]、IFM[976…991]、IFM[992…1007]、及びIFM[1008…1023]をフェッチしてタイル(1、5、9、13)、タイル(2、6、10、14)、タイル(3、7、11、15)、及びタイル(4、8、12、16)にそれぞれブロードキャストする。
次に、システムは、タイル(1…4)により計算されたドット積をOFM[32…39]に、タイル(5…8)により計算されたドット積をOFM[40…47]に、タイル(9…12)により計算されたドット積をOFM[48…55]に、そしてタイル(13…16)により計算されたドット積をOFM[56…63]に累積する。
このプロセスの終わりで、システムは、活性化関数197(タイル(4、8、12、16)内で)をアキュムレータ130(タイル(4、8、12、16)内で)に格納された完了されたドット積に適用し、そしてコンボリューション演算を完了するために、最終のOFM[32…63]の結果をSRAMにライトする。
今、完全接続された(FC)レイヤーの計算(コンボリューションとは対照的)を考慮する。
まず、単一のタイル、単一のIFMのサンプルを使用する16×8FC計算の些細な場合を考慮する。
ウェイトがIFMと乗じられた後に捨てられることを除いて、FCレイヤーの計算は、1×1コンボリューション(以前の例で説明された)と類似していることに留意しなければならない。
1つのウェイトを各MUにロードし、シングルIFM[0…15]スライスをフェッチし、タイルの加算器ツリーを使用してドット積を計算し、結果ドット積に活性化関数を適用し、そして完了されたOFM[0…7]の結果をSRAMにライトすることにより、単一の16×8FC計算が達成され得る。
単一のタイル、及び単一のIFMサンプルにより16×16FCを計算する場合を考える。
2つのウェイトを各MUにロードし、シングルIFM[0…15]をフェッチし、乗算のための2つの事前ロードされたウェイトの内の最初のをMUが選択することにし、上述したようにOFM[0…7]を計算し、乗算のための2つの事前ロードされたウェイトのうちの2番目のMUが選択することにし、そしてOFM[8…15]を計算することにより、単一の16×16FC計算が達成される。
同じIFMから複数のOFMを計算するための、MUウェイトを介したサイクリングのこのようなプロセスを「OFMウェイトサイクリング」という。
16×16FC計算は、単一のIFMパスを使用するが、2つのOFM段階(2つのOFMウェイトサイクルに対応)を使用して実行されたことに留意しなければならない。
従って、他の例において観察されたように、OFM段階の数は、OFMウェイトサイクリングが使用されない限り、一般的にIFMパスの数と同じである。
単一のタイル、及び単一のIFMのサンプルを使用する16×128FCを計算する他の簡単な場合を考える。
16個のウェイトを各MUにロードし、単一のIFMスライスをフェッチし、OFMウェイトサイクリングを介して、すなわち、OFM[0…7]、OFM[8…15]、…OFM[120…127]の順に計算するためにMUウェイトを介してサイクリングすることにより、16個のOFMの段階を実行することで、これが達成され得る。
18個のIFMのサンプルのバッチ(batch)に対して単一のタイルを使用する16×8FCを計算する簡単な場合を考慮する(つまり、IFMテンソルの形状は1×16×18として表現されることがある)。
ちなみに、ニューラルプロセッサが推論(訓練ではなく)を実行するため、マッピング例は、推論アプリケーションに対して一般的な、「1」のIFMバッチサイズを暗黙的に仮定する。
「1」よりも大きいIFMバッチサイズを有する計算もまた、ハードウェアにマッピングされることがある。
たとえば、IFM配置でそれぞれのサンプルについて、すでに説明したように、計算が繰り返される。
しかし、18個のIFMのサンプルのバッチ(batch)の16×8FCシングルタイルの計算は、MUウェイトレジスタファイルの容量を活用して、それぞれのIFMサンプルに対して1つのウェイトずつ、それぞれのMUに18個のウェイトを事前ロードすることができる。
以後、1番目の(18の配置(batch)から)IFM[0…15][0]のサンプルをフェッチし、それぞれのMUで18個のウェイトのうち1番目とフェッチされたIFMサンプルとのドット積を計算し、活性化関数を適用し、そして結果のOFM[0…7][0]をSRAMにライトすることで、計算が達成される。
次に、活性化関数を適用した後、OFM[0…7][1]を得るために、IFM[0…15][1]サンプルはフェッチされ、そして各MUで18個のウェイトのうち2番目と乗じられる。
IFM[0…15][0…17]サンプル(総18個)の全体配置がプロセッシングされるまで、この手順は継続されてOFM[0…7][0…17]サンプルの配置を生成する。
IFM[0…15][0…17]サンプル(合計18個)の全体バッチがプロセッシングされるまでは、このような順序は、続いて、OFM[0…7][0…17]サンプルのバッチを生成する。
IFMサンプルのバッチ(batch)をプロセッシングするために、MUウェイトを介したサイクリングを「IFMバッチ配置サイクリング」と呼ばれる。
MUウェイトレジスタファイルの容量が十分であれば、IFMウェイトサイクリング、OFMサイクリング、及びIFM配置サイクリングは、計算を実行するために結合され得る。
図3MA及び図3MBに示した、第13例では、288×8完全接続された(fully connected)の計算は、単一のタイルを使用して実行される。
図3MAを参照すると、前に述べたように、完全接続された計算は、1×1コンボリューションと類似し、ここでコンボリューションウィンドウは変換されず、そしてウェイトは再利用されず、一度の使用後に廃棄されるべきである。
1つのタイルは、8つのOFMチャンネルを並列に(つまり、1つのOFMスライス)計算する。
288個のIFMのチャネルは、「288/(MRあたり16個の行)=18個のスライス」に対応する。
システムは、各MUで18個のウェイトを使用してFCウェイトのすべての18個のスライスを格納する。
完全接続された計算を実行するためには、システムは、次の段階(これは、ある程度、同時に実行できること、つまり、時間的に重なることがある)を実行する。
第1の段階では、ウェイトはSRAMからロードされ得る。
例えば、図1K及び図1Nに示した垂直ウェイトロードバス101を使用して、ウェイトは計算と同時にロードされ得る。
このように、システムは、FCウェイトがSRAMに位置するようになることを保障することができる。
第2の段階では、OFM[0…7]に対するアキュムレータがクリアされることがあり得る。
第3の段階では、IFM[0…15]の1つのサンプルがタイルにフィードされ得、そして結果は、中間(未完了)の結果を形成するために、OFM[0…7]アキュムレータ130に加わり得る。
第4の段階では、OFM[0…7]アキュムレータは、クリアされずに残り得、そしてシステムは、FCウェイトの次のセット(IFMウェイトを循環する(サイクリング))に転換され得る。
第5の段階では、IFM[16…31]がタイルにフィードされ得、その結果は、OFM[0…7]アキュムレータに加えられる。
図3MBを参照すると、すべてのIFMチャンネル(及び関連ウェイト)がサイクルされるまで、このような手順は、最後のスライスであるIFM[280…287]まで繰り返される。
最後に、活性化関数は、累積されたドット積に適用されることがあり、そして、最終のOFM[0…7]の結果は、SRAMにライトされ得る。
これで完全に接続された計算が完了する。
図3NAに示した、第14例では、288×64完全接続された計算が行われる。
この例では、OFMチャンネルカウントは、「8」(第13の例で)から「64」に増加させる。
システムが、FC288×64計算を288×8サイズの8つのより小さいFC計算に分割し、分割された計算を1つずつ実行すると(例えば、8つのOFM段階で)、これは第13例と同じである。
これは8つのIFMパスを発生させる。
図3OA〜図3OCに示した、第15例では、1024×32完全接続された計算は、単一のIFMサンプル(すなわち、1のバッチサイズ)に対して実行される。
図3OAを参照すると、FCは1×1コンボリューションと類似するため、それぞれ1×1コンボリューションを実行する「(MU当たり18個のウェイト)×(16個の物理的タイル)=最大288個の論理タイル」が存在し得る。
このように、システムは、部分を避けるために、単一のラウンドですべての1024個のIFMチャンネル(1024/16=32個のIFMスライス)をリードし得る。
すべての32個のIFMスライスをリードするためには、32個の論理タイルが使用される。
この計算は、32個のOFM(4つのOFMスライス)の計算を含み得る。
1つのパスでこれを行うために(一度にすべてのOFMを計算)、「(32個のIFMスライス)×(4つのOFMスライス)=128個の論理タイル」が使用され得る。
このように、利用可能な論理タイルの数(288)は、十分である。
各MUで8つのウェイトを格納することにより、(MU当たり最大18個のウェイトを格納する代わりに)、論理タイルの数は、必要な128個に減少され得る。
計算は、次のように進行され得る。
システムは、MU当たりIFM FCウェイトの8つのセットを格納し、128個の論理タイルを使用(上述されたように)する。
4つのOFMスライスを計算することにより、全体の計算は、単一のIFMのパスで完了され得る。
4つのIFMスライスの各々は、フェッチされ得、4つのタイルにブロードキャストされ得る。
各MUの8つのIFMウェイトセットが格納されるため、ウェイトは8回サイクルされ得る。
シーケンスは、次の段階を含み得る。
第1の段階では、OFMアキュムレータがクリアされ得る。
第2の段階では、IFM[0…63](4つのIFMスライス)がフェッチされ得、各スライスは、4つのタイルにブロードキャストされ得る。
第3の段階では、まだ完了していないOFM[0…31](4つのOFMスライス)が計算され、OFMアキュムレータに加えられる。
図3OBを参照すると、第4の段階では、OFMアキュムレータはクリアされずに残り、そしてウェイトの次のセットが使用され得る。
第5の段階では、IFM[64…127](4つのIFMスライス)がフェッチされ得る。
第6の段階では、サム・オブ・プロダクト(sum−of−products、積和)をOFMアキュムレータに加えることにより、システムは、OFM[0…31](4つのOFMスライス)計算を続け得る(まだ完了されていない)。
図3OCを参照すると、すべてのIFMがプロセッシングされるまで、システムは、ウェイトのサイクリング及びOFM結果の累積を継続する。
最後の段階では、システムは、IFM[960…1023]をフェッチしてOFM[0…31]に累積した後、活性化関数を累積されたOFM[0…31]に適用し、そして結果をSRAMにライトする。
図3PA〜図3PCに示した、第16例では、4096×1024完全接続された計算が行われ、16個のタイル及び1のバッチサイズが使用される。
この計算は、「(タイルあたり4096/16 IFMチャンネル)=256個のIFMスライス」、及び「(タイルあたり1024/8 OFMチャンネル)=128個のOFMスライス」を使用する。
上述した他の例示の中の一部のように、部分を避けるために、全体のIFMをリードすることが有利であり得る。
最大「(MU当たり18個のウェイト)×(16個の物理的タイル)=288個の論理タイル」が計算の実行時に利用可能である。
全体のIFMをリードするためには、256個の論理タイルが使用され得る。
このように、利用可能な論理タイルの数(288)は、十分である。
システムは、各MUへウェイトの16個のセットをロードすることにより、256個の論理タイルを使用するように構成され得る。
1つのラウンドで(部分なしで)256IFMスライスをリードするためには、すべての256の論理タイルが使用され得る。
したがって、「(256個の論理タイル/256 IFMスライス)=1つのOFMスライス」がIFMパスあたり生成されるはずであり、そして計算を完了するために、「(128 OFMスライス)/(IFMパスあたり1つのOFMスライス)=128個のOFM段階(つまり、128個のIFMパス)」が実行される。
物理的構成を図3PAに示す。
減少ファブリックは、すべての16個のタイルの出力を単一のOFMスライスに減少させるように構成され得る。
16個のIFMスライス(16個の仮想SRAMバンクからの)がフェッチされ、そしてそれぞれは、単に1つのタイルのみに「ブロードキャスト」する。
計算は、次のように、いくつかの段階で行われる。
第1の段階では、OFM[0…7]アキュムレータがクリアされる。
第2の段階では、16個のIFMスライス(IFM[0…255])がフェッチされ、そして中間(未完了)の結果としてOFM[0…7]アキュムレータに減少される。
第3の段階では、OFM[0…7]アキュムレータはクリアされずに残り、そしてシステムはMUの内に設定された、次のIFMウェイトに転換される。
第4の段階では、次の16個のIFMスライス(IFM[256…511])がフェッチされ、OFM[0…7]アキュムレータに減少し、追加される。
図3PBに示すように、すべてのIFM(IFM[4080…4095]までを含む)がプロセッシングされるまで、このような段階は、続けられる。
活性化関数は、累積されたドット積(タイル16内での)に適用され得、そして最終的な結果は、SRAMにライトされ得る。
これは、OFM[0…7]の計算を完了する。
図3PCを参照すると、次のOFMの段階を実行するためには、システムは、ウェイト「W[0…4095,8…15]」をロードするOFM[8…15]に対する以前の計算を繰り返すことができ、そして全体のFC計算を完了するためには、OFM[1016…1023]までに、すべてのOFMが計算されるまでOFMをステッピング(stepping)し続ける。
IFMが「(18個のウェイト)×(IFMスライスあたり16個のIFMチャンネル)×(16個の物理タイル)=4,608個のチャンネル」を超えるFC計算の場合がありうる。
この場合には、IFMのチャンネルを部分(既存の物理的ハードウェアにマッピングされるのに十分なサイズの)に分割し、各部分に対するFCを個別に計算し、前述したように、要素別に部分結果(SRAMに格納された)を追加(合算)し続け、そして活性化関数を適用して計算を完了することで、部分を使用するように強制される。
ウェイトが16ビットである場合には、MUウェイトレジスタファイルの容量は、18(8ビットウェイト)の代わりに9(16ビットウェイト)になり、そして計算は先に説明したように、多重サイクリング(multi−cycling)を使用して実行される。
より大きなウェイトビットの長さ、例えば、24ビット又は32ビットについても、類似した推論が適用され、ここで、例えば、MUウェイトレジスタファイルは、6つの24ビットウェイトを保有するか、又は4つの32ビットウェイトを保有するのに十分な容量を有する。
選択的に、演算をすべての使用可能な物理的タイルにマッピングすることに加えて、ニューラルプロセッサは、それぞれ、より少ない数のタイルを有する複数のニューラルプロセッサに論理的に細分化される。
例えば、16個の物理的なタイルを含むニューラルプロセッサは、論理的に2つのニューラルプロセッサとして見えることがあり、それぞれは、元のタイルの数の半分、例えば、それぞれ8つのタイルを含み、あるいは4つのニューラルプロセッサとして見えることがあり、それぞれは、元のタイルの数の4分の1、例えば、それぞれ4つのタイルを含み得る(その他等々)。
分割後に残った物理的タイルの数を考慮するとき、このような細分化により各ニューラルプロセッサは、上述したものと実質的に同じマッピング原理に従う。
ニューラルプロセッサを複数のより小さな複数のニューラルプロセッサに細分化するのは、比較的少ないIFM減少及び比較的少ない生成されたOFMチャネル(より具体的に、それの積)を要求する演算に望ましい可能性がある。
たとえば、1×1×32×32コンボリューションマッピングは、4つのタイルだけを要求する。
もし16個のタイルにマッピングされると、1×1×32×32コンボリューションにより、16個のタイルのうち12個が使用されないため、乗算器の利用率が大幅に低減される。
このような場合において、16個の物理的なタイルを含むニューラルプロセッサは、4つのニューラルプロセッサに細分化され得、それぞれは4つのタイルを含み、1×1×32×32コンボリューションを4つの結果ニューラルプロセッサのそれぞれにマッピングし、IFMテンソル(例えば、H×W×32サイズの)を4つのオーバーラップしない(non−overlapping)サイズ(H/2×W/2×32)のIFMテンソルに細分化し、このようなクォーターサイズ(1/4サイズ)IFMテンソルを4つの小さなニューラルプロセッサのいずれか1つに割り当て、そして並列的にすべての4つのIFMの下位テンソルに対するコンボリューションを計算する。
このような小さなウェイトテンソルサイズは、比較的に稀なことであり、このような演算モードは、IFM、OFM、及び減少ファブリックにより適切なサポートを必要とすることに留意しなければならない。
利用可能なハードウェアへのニューラルネットワークレイヤーの演算の多様なマッピングは、IFM伝達ファブリック104、OFM伝達ファブリック106、及び減少ファブリック111のサポートを必要とする。
図4AAは、16個のハードウェアタイル102、及び16個のSRAMバンクセット109を含むニューラルプロセッサの物理的なレイアウトスケッチを示す。
一実施形態では、SRAMバンクセット109のメモリは、分散方式で配置され得、ここで、各SRAMバンクセット109は、タイル・アンド・エスラム・バンク・セットのユニット(tile−and−SRAM−bank−set unit)401を形成する正確に1つのタイル102に隣接する(ローカル的である)。
これは、すべてのタイルとそのローカルSRAM109との間でのIFM及びOFMデータを非常に並列的な方法で(つまり、最大16個のIFM及び/又はストリーミングが並列的に実行されるようにする)ストリーミングすることを許容する。
これは、もしSRAMがより大きなストレージアレイに集計(aggregate)されて(合算されて)タイルから更に遠くに離れる場合(つまり、メモリが分散されていない場合)に存在するコンピューティングタイルとSRAMとの間の帯域幅のボトルネックを避けるためである。
図4AB及び図4ACは、SRAMバンクセット109のコンテンツだけではなく、タイル102とそれのローカルSRAMバンクセット109との間の接続を示す。
IFM、OFM伝達ファブリック、AXIポートを介したCPUアクセス(図示せず)、部分結果のリード及びライト、並びにウェイトグロードを提供するために同時リード・ライト演算のための十分な帯域幅を提供するために、各SRAMバンクセット109は、4つのSRAMバンク(B0、B1、B2、B3)を含み得る。
図4ABは、マルチプレクサ403を介したバンク(B0、B1、B2、B3)とIFM伝達ファブリック104との間の経路を示す。
ゼロスキップを活性化することができるタイルに十分なIFMデータを供給するために、このパスは、計算クロック当たり最大2つのIFMスライスを伝達することができる。
IFM伝達ファブリック104は、タイル102に接続されて他の15個のSRAMバンクセットだけではなく、ローカルSRAMバンクセットからIFMデータを持って来る。
また、各SRAMバンクセット109は、それのローカルタイル102に、特にローカルタイル139の内部のウェイト圧縮解除ユニット138にウェイトを直接供給する。
ウェイトのロードを高速化するためには、すべての4つのSRAMバンク(B0〜B3)は、WDU139にウェイトを並列にフェッチ及びフィードすることができる。
コンボリューションとは異なり、FCウェイトは、各乗算後に廃棄されなけばならないため、完全接続されたレイヤーの計算のうちに、可能なかぎり速くタイルにウェイトをロードすることが特に重要である。
各MR102内の複数のMUウェイトレジスタファイルは、「18×16×8=2,304バイト=144個のワード」サイズのウェイトカーネルを収容することができ、ここで、各ワードは、128ビットを有する。
例えば、もしニューラルプロセッサに利用可能な総SRAM容量が2MBであれば、各SRAMバンクセットは「(2MB)/(16個のSRAMバンクセット)=128KB」を有する。
また、もし各SRAMバンクセットが4つのSRAMバンクを含めると、各SRAMバンクのサイズは、「(SRAMバンクセットサイズ)/(SRAMバンクセットあたりSRAMバンク)=128KB/4=32KB」である。
従って、4つのローカルSRAMバンクの各々は、「144/4=36個のワード(利用可能な2048個のうち)」を格納することができる。
図4ACは、タイルとそれのローカルSRAMバンクセットとの間のローカルOFM接続を示す。
タイル102は、完了された結果又は部分結果をOFM伝達ファブリックに出力し、OFM伝達ファブリックは、そのデータをその他の他のSRAMバンクセットだけでなく、ローカルSRAMバンクセットに伝送し、そのデータをデマルチプレクサ(de−multiplexer)405を介してSRAMバンクに(B0〜B3)に利用可能にする。
次のいくつかのパラグラフは、IFM及びOFMのデータ伝送ファブリックを議論する。
IFM伝達ファブリックは、SRAMバンクセット109からタイル102に接続を形成してデータを伝送する一方で、OFM伝達ファブリック106は、タイル102から逆にSRAMバンクセット109に接続を形成してデータを伝送する。
IFMをSRAMバンクセットからタイルに持って来て、OFMをタイルからSRAMに再び持ってくる作業を考慮すると、SRAMバンクセットとタイルとの間の接続は、オール・ツー・オール(all−to−all)でなければならず、タイルとSRAMバンクセットとの間の接続も、またオール・ツー・オール(all−to−all)である必要がある。
オール・ツー・オールの接続を行うには、クロスバー(cross−bar)スイッチ(例えば、16・ツー・16)の使用が必要になり、これは、このような場合では非常に大きなシリコン面積を消費する可能性があり、したがって、かなり望ましくない。
より具体的には、完全(full)クロスバースイッチの面積は、O(NM)に比例し、ここで、Nはスイッチ入力の数であり、Mはスイッチ出力の数である。
N=M=T=16の場合では、ここで、Tは、物理的タイルの数であり、したがってタイルの数で、2次(quadratic)である「O(NM)=O(T)」を作り、シリコン面積については特に高額なタイルの数を増加(又はスケーリングアップ)させる(例えば、32から32に又は64に)。
しかし、以下で、より詳細に説明するように、タイルとSRAMバンクセットとの間のオール・ツー・オールの接続は必要ない。
通信ファブリックのサイズと複雑さを低減させるため、いくつかの実施形態は、SRAMをオーバーラップしない(non−overlapping)ストレージに分割することで、OFMが生成される位置に(それぞれの物理的なタイルにより)OFMをローカルに格納することを目標とする。
IFMデータは、多様なSRAMバンクセットから各タイルに相変わらず伝達されるが、IFM伝達ファブリック構成は、タイル間の減少の5つの主要なパターンに対応する5つの必須パターンに減らされる。
OFMをローカルに格納して分散された(グローバル)方式でIFMをフェッチする代わりに、OFM結果を分散された(グローバル)方式でライトしながら、IFMをローカルにフェッチするようにIFM及びOFMの伝達ファブリックを構成することが可能であることに留意しなければならない。
一般的に、コンボリューション又は完全に接続されたレイヤーの計算は、インタータイル(inter−tile)の減少について、このような5つの構成のいずれか1つに分解され得る。
つまり、
(1)図4ADに示すように、16個のOFMスライスをすべて共に生成するすべての16個のタイルにIFMスライスをブロードキャストすることにより、1つのIFMスライスをフィードし、
(2)図4AEに示すように、2つのIFMスライスのそれぞれを8つのタイルにブロードキャストすることにより、2つのIFMスライスを並列的にフィードし、
(3)図4AGに示すように、4つのIFMスライスのそれぞれを4つのタイルにブロードキャストすることで、4つのIFMスライスを並列的にフィードし、
(4)図4AJに示すように、4つのIFMスライスのそれぞれを2つのタイルにブロードキャストすることで、8つのIFMスライスを並列的にフィードし、
(5)図4ALに示すように、16個のIFMスライスのそれぞれを1つのタイルにブロードキャストすることで、16個のIFMスライスを並列的にフィードする。
完成された(又は部分)結果を得るために、それぞれのIFMスライスが8つのタイルにブロードキャストされ、2つのタイルの出力が減少(減少ファブリック111により)されるため、場合(2)を「ブロードキャスト8減少2」の場合と称する。
同様に、それぞれのIFMスライスが4つのタイルにブロードキャストされ、4つのタイルの出力が減少されるため、場合(3)を「ブロードキャスト4減少4」の場合と称し、それぞれのIFMスライスが2つのタイルにブロードキャストされ、8つのタイルの出力が減少されるため、場合(4)を「ブロードキャスト2減少8」の場合と称し、それぞれのIFMスライスが1つのタイルにブロードキャストされ(つまり、ブロードキャストなし)、16個のタイルの出力が減少されるため、場合(5)を「ブロードキャスト1減少16」の場合と称し、そしてIFMスライスが16個のタイルにブロードキャストされ、1つのタイルの出力が減少されるため、(つまり、減少なし)、場合(1)は、「ブロードキャスト16減少1」の場合と称される。
5つのインタータイルの減少の構成をより詳細に考慮し、5つの減少の構成の場合のそれぞれでIFM及びOFMの伝達ファブリックがサポートすべきな接続パターンが正確に何であるかを考える。
より明確にするために、「イントラタイル(intra−tile)」の減少が、タイルの内部に加算器ツリー(128A及び128B)を使用して乗算器ユニットの積の減少を指定すると称したのと対照的に、「インタータイル(inter−tile)」の減少は、タイルの出力の減少(減少ファブリック111により提供される再構成可能な加算器ツリーを使用)を指定すると称する。
インターコネクトファブリック(interconnect fabric)が使用される場合を識別するために、次の表記法が使用され得る。
表記法「Bm−Rn−」は、各IFMスライスがm個のタイルにブロードキャストされ、結果を得るために、n個のタイルの出力が減少する(インタータイル減少ファブリック111により)場合を示す。
16個の物理的なタイルが利用可能になることから、5つのインタータイルの減少の場合は、図4ADに示したB16−R1、図4AFに示したB8−R2、図4AHに示したB4−R4、図4AKに示したB2−R8、及び図4AMに示したB1−R16を含む。
インタータイルの減少の場合の最大数は、LOG2(N)と同一であり、ここで、Nはニューラルプロセッサ内での物理的なタイルの個数である。
N個のタイルを有するニューラルプロセッサにおいて使用可能なインタータイルの減少の構成は、構成(BN−R1)(m=N及びn=1)から開始して、次いで、mが1に達するまで、次の各構成ごとにmを「2」で割り、そしてnに「2」を乗じることにより構成される。
例えば、もしニューラルプロセッサが8つのタイルだけを有する場合には、B8−R1、B4−R2、B2−R4、及びB1−R8を含む、4つのインタータイルの構成が利用可能である。
32個のタイルを有するニューラルプロセッサは、B32−R1、B16−R2、B8−R4、B4−R8、B2−R16、及びB1−R32を含む最大6つのインタータイル構成を提供することができる。
計算は、部分結果だけでなく、最終的な結果(例えば、活性化関数が適用される)を生成することができるため、各インタータイルの構成は、OFM伝達経路について考慮すべき2つの場合を有し得る。
最終的な結果を生成する場合を「Bm−Rn−F」と称し、そして部分結果を生成する場合を「Bm−Rn−P」と称する。
図4AE、図4AG、図4AJ、図4AL、及び図4ANは、5つの減少の構成の各々において減少ファブリック111により共に加えられたタイル出力をさらに示す。
例えば、図4ALは、1つの加算器ツリー(図4AKで左の加算器ツリー)により合算された8つのタイル(T0、T8、T4、T12、T10、T2、T14、T6)の出力を有するB2−R8構成を示しているが、8つのタイル(T7、T15、T3、T11、T13、T5、T9、T1)の出力は、他の加算器ツリー(図4AKで右の加算器ツリー)により合算される。
互いに離れて広がったタイルの出力を追加するのと対照的に、減少ファブリック111の構成可能な加算器ツリーは、隣接したタイルの出力を加えるように設計されているため、減少ファブリックの構成可能な加算器ツリー配線を簡潔に作成してツリー自体を「分散(distribute)」されるようにする。
また、前の例示での場合と違って、16個のタイルは、ここでT0〜T15として識別され、そして以下の例示において表記法を単純化するために、識別子の順序が変更(マッピング例において使用した表記法と比較して)した。
各々のインタータイルの減少の構成が1つずつ詳しく検討される。
第1の例の場合は、B16−R1演算を含む。
「(任意のSRAMバンクセットから)IFMをグローバルに(globally、全域的に)フェッチする一方、ストア・オーエフエム・アズ・ローカリー・アズ・ポッシブル(store−OFM−as−locally−as−possible、可能な限りローカルにOFMを貯蔵)の原則)」により、この構成では、入力IFMは、任意のSRAMバンクセット(S0…S15)からストリームする。
図4BAに示すように、SRAMバンクセットS10は、IFM伝達ファブリック104を介してすべての16個のタイル(T0〜T15)にIFMスライスのストリームを提供(図4ADに示すように、すべての16個のタイルに1つのIFMスライスをブロードキャスト)する。
例えば、1つのSRAMバンクセット(例えば、S10)がIFMデータを使い果たした場合、他のSRAMバンクセット(例えば、S11)がデータソースになってIFMデータをタイルにストリームすし続けることができる。このような段階は、全体IFMテンソルがストリームされるまで続けられる。複数のIFMパスが要求される場合には、IFMテンソルストリーミングシーケンスは必要に応じて繰り返される。
B16−R1の構成でインタータイルの減少がなく、これにより、各タイルの加算器ユニットは、該当するタイルの結果だけを累積し、そしてOFM完了又は部分結果は、後述するように、近くのSRAMにライトされる。
したがって、B16−R1で16個のタイルの各々は、「部分結果のストリーム」又は結果が「最終のときには、OFMスライスのストリーム」を生成する。
特に、部分の場合では、各値は、8ビットIFM及びOFMで作業する場合、32ビット幅(32−bits−wide)又は16ビットIFM及びOFMを仮定すると、48ビット幅まである可能性あり、そして図4BBで、矢印106により表示したように、各部分の結果は、ローカルに格納される。
この場合、各SRAMバンクセットは、部分結果を格納するデスティネーションとして作用する。
なお、各SRAMバンクセット109は、それ(各SRAMバンクセット109)のローカルタイルからデータを受信し、例えば、SRAMバンクセットS8は、タイルT8からデータを受信し、SRAMバンクセットS0は、タイルT0からデータを受信する。
そしてそれぞれのSRAMバンクセット109は、4つのSRAMバンク108を含むため、それぞれのSRAMバンクセット109は、一般的にクロックあたり16個の4バイトの部分の結果を格納することができる。
しかし、現在のソースSRAMバンクセットは、部分結果をまたライトしつつ、IFMを同時にフェッチしなければならないが、これは一部の場合においてSRAMバンクセットの利用可能な総帯域幅を超過する可能性がある。
このような場合において、コンボリューションプラナーカーネルサイズが1×1よりも大きいとき、ソースSRAMバンクセットからIFMリードを減少させるIFMキャッシュ139が役に立つ。
また、1×1よりも大きいコンボリューションプラナーカーネルサイズ及び/又はIFMウェイトサイクリングを使用する演算は、複数のクロックにおいて一度出力を生成するので、(毎クロック当たり1つの結果とは対照的に)、OFM帯域幅に対する要求を減少させてSRAMアクセスのボトルネックを防止する。
最終結果を生成するときには、それぞれの最終値は、8ビット(又は16ビットなど)に量子化されるものであり、そして、その値はSRAMバンクセット「[S0…S7]又は[S8…S15]」にライトされ得る。
図4BC及び図4BDは、OFM伝達ファブリック接続及び設定の選択を示す。
OFMスライス幅は、IFMスライス幅の半分であるため(8つのデプスチャンネル対16)、2つの垂直に隣接したタイル(「タイル列」)の出力は、短いローカル接続を介して上位SRAMバンクセット又は下位SRAMバンクセットに伝送され得る。
各SRAMバンクセットは、16個のチャンネルを含むスライスをプロセッシングすることができるため(16個のチャンネルを含むIFMスライスにより)、それぞれのSRAMバンクセットは、また2つのOFMスライスを収容することができる。
たとえば、タイルの列を共に含む(構成する)タイル(T0及びT8)の出力は、共にグループ化され得、短いローカル接続106を介して、図4BCに示したT8のすぐ下に位置したSRAMバンクセットS8、又は図4BDに示したT0のすぐ下に位置したSRAMバンクセットS0に伝送され得る。
同様に、タイル列(T4又はT12)の出力は、グループ化されてSRAMバンクセット(S4又はS12)にローカルに伝送され得、タイル列(T10又はT2)の出力は、SRAMバンクセット(S10又はS2)に、タイル列(T14又はT6)の出力は、SRAMバンクセット(S14又はS6)に、タイル列(T7又はT15)の出力は、SRAMバンクセット(S7又はS15)に、タイル列(T3又はT11)の出力は、SRAMバンクセット(S3又はS11)に、タイル列(T13又はT5)の出力は、SRAMバンクセット(S13又はS5)に、そしてタイル列(T9又はT1)の出力は、SRAMバンクセット(S9又はS1)にグループ化されてローカルに伝送され得る。
第2の例の場合は、B8−R2の演算を示す。
図4CAに示すように、1つのIFMスライスは、上位SRAMバンクセットに109から供給され、ここで「上位(upper)」は、「S0、S4、S10、S14、S7、S3、S13、S9」を含むように定義され、1つのIFMスライスは、下位SRAMバンクセット109から供給され、ここで「下位(lower)」は、「S8、S12、S2、S6、S15、S11、S5、S1」を含むように定義される。
より具体的には、任意の上位SRAMバンクセット109は、すべての上位タイル(T0、T4、T10、T14、T7、T3、T13、T9)にIFMスライスを伝送(ブロードキャスト)するソースとして作用する。
たとえば、IFM伝達ファブリックは、S10からIFMスライスをリードし、そして対応するIFMスライスを、T0、T4、T10、T14、T7、T3、T13、T9にブロードキャストするように構成される。
代替的には、例えば、IFM伝達ファブリックは、S3からIFMスライスをリードし、そして該当するIFMスライスを、T0、T4、T10、T14、T7、T3、T13、T9にブロードキャストするように構成される。
同様に、任意の下位SRAMバンクセット109は、すべての下位タイル(T8、T12、T2、T6、T15、T11、T5、T1)にIFMスライスを伝送(ブロードキャスト)するソースとして作用する。
たとえば、IFM伝達ファブリックは、S11からIFMスライスをリードし、そして該当するIFMスライスを、T8、T12、T2、T6、T15、T11、T5、T1にブロードキャストするように構成される。
代替的には、例えば、IFM伝達ファブリックは、S8からIFMスライスをリードし、そして該当するIFMスライスを、T8、T12、T2、T6、T15、T11、T5、T1にブロードキャストするように構成される。
追加的に、図4CAを参照すると、1つの(クロック)サイクルでデータが、次のペア(pairs)「[S0、S1]、[S2、S3]、[S4,S5,]、[S6,S7]、[S8,S9]、[S10,S11]、[S12,S13]、及び[S14、S15]」のいずれかから受信されるように、SRAMバンクセットはIFMスライスを伝送するためにペア(pair)され得る。
例えば、図4CAでは、IFMスライスは、SRAMバンクセットのペア「[S10、S11]」から供給される。
図4CBは、2つのIFMスライスをフィードすること示し、各IFMスライスは、8つのタイルにブロードキャストされ、そして2つのタイルの出力が列ワイズ(方向)方式で減少する。
例えば、図4AFに沿って行ってみると、T0の出力は、T8の出力とともに減少されて1つの結果を生成し、T4及びT12の出力が減少されて他の結果を生成し、T10及びT2の出力が減少されてまた他の結果を生成し、T14及びT6の出力が減少されてまた他の結果を生成し、T7及びT15の出力が減少されてまた他の結果を生成し、そしてT3及びT11の出力が減少されてまた他の結果を生成する。
部分結果の場合では、8つの減少結果は、SRAMバンクセット([S0…S7]及び[S8…S15])の2つのグループのいずれかに格納される。
例えば、図4CBは、SRAMバンクセット([S0…S7])に格納された8つの部分結果を示す。
最終的結果の場合に、OFM伝達ファブリック106は、「[S0…S3]、[S4…S7]、[S8…S11]、及び[S12…S15]」を含む、4つのSRAMバンクセットグループのいずれかに格納された、2つの隣接したタイル列の結果をマージすることができる。
例えば、図4CCは、SRAMバンクセット([S4…S7])に格納された8つの最終的な結果を示す。
第3の例の場合は、B4−R4の演算を示す。
図4DAに示すように、1つのIFMスライスが平面図(floorplan)の各クォーター(quarter)から供給される。
図4DBを参照すると、演算は、4つのIFMスライスをブロードキャストすること、及び減少後に4つの結果を生成することを含み得る。
IFM伝達ファブリック及びOFM伝達ファブリックは、次の場合が満足される限り、1つの(クロック)サイクル内で入力を伝送し、そして出力を受信するように管理することができる。
i)IFMスライスが、「[S0…S3]、[S4…S7]、[S8…S11]、及び[S12…S15]」を含む、4つのグループのいずれかから来た場合、そして
ii)出力が、図4DBに示すように、結果が部分であれば、4つのグループ「[S0…S3]、[S4…S7]、[S8…S11]、及び[S12…S15]」のいずれか1つに、図4DCに示すように、結果が最終であれば、8つのグループ「[S0S1]、[S2S3]、[S4S5]、[S6S7]、[S8S9]、[S10S11]、[S12S13]、及び[S14S15]」のいずれか1つにライトされる場合である。
図4AJを参照すると、それぞれの減少グループ407は、1つの出力を生成することに留意しなければならない。
2つの結果が上部(top part)に格納されるはずであり、そして2つの結果が下部(bottom part)に格納されるはずである。
最終的結果を含むOFMスライスは、8バイトのサイズを有するため、OFM伝達ファブリックは、2つの隣接した列の結果をマージする。
図4AH、減少後、4つの出力結果を形成するためにブロードキャストされる4つのIFMスライスを示す。
第4の例示の場合は、B2−R8の演算を示す。
図4EAに示すように、1つのIFMスライスは、平面図のそれぞれの8分の1から供給され得る。
図4EBを参照すると、演算は、減少後に2つの結果を生成するために、8つのIFMスライスをブロードキャストすることを含み得る。
i)入力が、[S0…S7]及び[S8…S15]を含む2つのグループのいずれかから来る限り、そして
ii)出力が、結果が部分的であれば、8つのグループ「[S0S1]、[S2S3]、[S4S5]、[S6S7]、[S8S9]、[S10S11]、[S12S13]、及び[S14S15]」のいずれか1つに、その結果が最終的であれば、任意のSRAMバンクセットにライトされる限り、IFM伝達ファブリック及びOFM伝達ファブリックは、単一の(クロック)サイクルで入力を伝送し、そして出力を受信するように管理することができる。
第4の例示の場合について、図4EAはブロードキャストされるソースデータを示し、図4EBは形成される部分の結果を示し、そして図4ECは形成される最終的な結果を示す。
図4AJを参照すると、各セクション407は、減少後の1つの結果を生成する。
2つの結果の中の1つは、上部に格納され得、一方で、他の結果は、下部に格納され得る。
最終的な結果を含むOFMスライスは、8バイトのサイズを有するため、OFM伝達ファブリックは、2つの隣接した列の結果をマージする。
また、図4AKは減少後に、2つの出力結果を形成するためにブロードキャストされる4つのIFMスライスを示す。
第5の例の場合は、B1−R16の演算を示す。
図4FAに示すように、1つのブロードキャストB1に対応して、1つのIFMスライスがそれぞれのSRAMバンクセットから供給される。
図4FBを参照すると、演算はすべての16個のタイルの出力を減少させて1つの結果を生成することを含み、1つの結果は、その結果が部分的場合及び最終的場合の両方で、任意のSRAMバンクセットに格納され得る。
最終的な結果を含むOFMスライスは、8バイトのサイズを有するため、OFM伝達ファブリックは、2つの隣接した列の結果をマージする。
また、図4AMは減少後に、単一の出力を形成するためにフィードされた16個のIFMスライスを示す。
現在及び後続の演算の減少構成のすべての順列(permutation)に対して、後続の演算(以前の演算の結果を消費する)が、該当する結果をフェッチすることが可能なこのような方法では、1つの演算で計算とSRAMへの格納が常に可能にする、上述された例を含む方法でIFM及びOFMの伝達ファブリックが設計され得る。
たとえば、現在の演算は、B4−R4を使用し、B4−R4と関連付けられているOFM伝達ファブリック接続の選択に応じて、それ(現在の演算)の結果をSRAMバンクセットに格納する。
以前のB4−R4の演算により計算されて格納されたデータを成功的にフェッチすることができながらも、後続の(又は次の)演算は、IFM伝達ファブリック接続のための関連付けられた選択とともにB2−R8の減少構成を使用することができる。
図4Gは、先に説明した、すべての減少構成に対するすべてのIFM伝達ファブリック接続のオプションをサポートするIFM伝達ファブリック104の1つの可能な実装を示す。
このファブリックは、4つのツーウェイ(two−way)のマルチドロップ(multi−drop)バスで構成され、ツーウェイバスの中の2つは、上位(upper)SRAMバンクセットと上位タイルとの間に位置し、そして他の2つのツーウェイバスは、下位(lower)SRAMバンクセットと下位タイルとの間に位置する。
バスは、レジスタ411により円形方式(circular fashion)で接続されるため、上位バスからのデータは、下位バスに流れることができ、再びリターンすることができる。
説明の明確性のために、IFM伝達ファブリック104内に存在できる追加のパイプライン(pipelining)レジスタが、図4Gでは省略したことに留意しなければならない。
図4Hは、先に説明した、すべての減少構成に対するすべてのOFM伝達ファブリック接続のオプションをサポートするOFM伝達ファブリック106の1つの可能な実装を示す。
ファブリックは、減少構成(B2−R8及びB1−R16)をサポートするために、4つのツーウェイ16バイト・ワイドマルチ・ドロップ(16−byte−wide multi−drop)のバスで構成される。
説明の明確性のために、OFM伝達ファブリック106内に存在できるパイプラインレジスタが、図4Hでは省略したことに留意しなければならない。
減少ファブリック111は、R1(インタータイルの減少がない場合)を除くすべての構成は、例えば、B8−R2、B4−R4、B2−R8、及びB1−R16について「インタータイル(inter−tile)」の減少(加算器ツリー(128A及び128B)により達成されたイントラタイルの減少とは対照的に)を実行することができる。
減少ファブリック111は、図5Aに示したRAA(reduce−and−accumulate)ノード520で構成された再構成可能な加算器ツリーで構成される。
各RAAノードは、部分的に減少された結果、すなわち、活性化関数のアプリケーション(適用)前の線形結果上で動作(演算)する。
RAAノードは、そのRAAノードが位置した、同じタイル列ARU167からの入力又は他のRAAノードからの入力を受信する。
RAAは、加算器ツリー内で、より上のRAAノードに、又は再びARUに出力を伝送する。
その後、結果が最終的であれば、ARUは活性化関数を適用し、そして最終的な結果をOFM伝達ファブリックに伝送する。
代替的に、結果が部分であれば、ARUは活性化関数をバイパスしながら、部分結果をOFM伝達ファブリックに伝送する。
図5Bは、R16の構成のために構成された減少ファブリック111を示す。
ここで、ARUモジュール167は、部分的に減少された結果(イントラタイル加算器ツリー(128A及び128B)からの)を生成し、図1Xに示すように、「減少ファブリックに(To reduction fabric)」出力を介してこのような部分的に減少された結果をRAAノード502の第1のレベルにストリームする。
RAAノード502は、部分的に減少されたデータの16個のARUストリームを部分的に減少されたデータの8つのストリームにペア別に(pairwise)減少させる。
RAAの第2のレベルのノード504は、RAAノード502により生成された8つのストリームを部分的に減少されたデータの4つのストリームにペア別にさらに減少させる。
第3及び第4のレベルのRAAノードは、(最終的な結果を生成するときに)活性化関数アプリケーションのためにタイル(T14)のARUに伝達される、完全に減少されたデータの1つのストリームを生成する減少プロセスを完了し、そしてOFM伝達ファブリックに出力する。
タイル(T14)は、物理的にツリールート(tree root)のRAAノード508の近くに位置し、そして図4FBでのタイル(T14)のARU167に対応することを留意しなければならない。
図5Cは、R8の構成のために構成された減少ファブリック111を示す。
R16の構成とは異なり、R8の構成は、2つの加算器ツリー(1つではなく)を含み、各加算器ツリーは、3つのレベル(4つではない)を含む。
第1の加算器ツリーは、タイル(T0,T8,T4,T12,T10,T2,T14及びT6)のARUからの部分的に減少されたデータを減少させ、そして完全に減少された結果をタイル(T12)のARUに伝達してデータのリターンを完了する。第2の加算器ツリータイル(T7,T15,T2,T11,T13,T5,T9及びT1)のARUからの部分的に減ら減少されたデータを減少させ、そして完全に減少された結果をタイル(T13)のARUに伝達してデータのリターンを完了する。タイル(T12及びT13)は、それぞれ物理的にそれぞれのツリールートのRAAノード506の近くに位置し、そして図4FBでのタイル(T12及びT13)のARU167にそれぞれ対応することに留意しなければならない。
図5Dは、4つの加算器ツリーを含む構成R4を示し、各加算器ツリーの4つのタイルからの部分的に減少された出力を減少させる。
図4DBは、4つのツリールートのノードと関連付けられているARUの物理的位置を示す。
図5Eは、8つの加算器ツリーを含む構成R2を示し、各加算器ツリー2つのタイルからの部分的に減少された出力を減少させる。
図4CBは、8つのツリールートのノードと関連付けられているARUの物理的位置を示す。
最後に、図5Fは、減少ファブリック111を必要とせず、OFM伝達ファブリックに直接に結果を出力するタイルARUを含んでいるが、どのような加算器ツリーも含めていない構成R1を示す。
図4BBは、この場合では、ARUの物理的位置を示す。
図4BB、図4BC、図4BD、図4CB、図4CC、図4DB、図4DC、図4EB、図4EC、及び図4DBでは、ARU167の内部の数字は、図5B〜図5Fに示したように、RAAツリーノードのレベルを示し、ここでレベル0は、構成R1に対応する(減少ファブリックを使用せずに)。
アキュムレータ130A(又は130B)から活性化関数と部分パスに(ビットの範囲の選択ユニット187とともに開始)にデータを直接伝送するARUにおいてARUマルチプレクサ174により構成R1が実装されるため、図1Xに示すように、減少ファブリックをバイパスする。
スパース活性化サポート(sparse activation support)の場合で、減少ファブリックを適切にバイパスするために要求される、いくつかの補助ロジックが一般的な説明の明確性のために図に示していなかったことに留意しなければならない。
図5Gは、RAAノード(502、504、506、508)で構成された減少ファブリック111を示す。
それぞれのRAAノードは、物理的に正確に1つのタイルの近くに位置することに再び留意しなければならない。
それぞれのRAAノード502は、ノード502が位置したタイル列の両タイルから入力を受信する。
タイル列当たり正確に1つのRAAノード502がある。
RAAノード508は、ノード506からそれの入力を受信し、ノード506は、順番にノード504からそれの入力を受信し、ノード504は順番にノード502から入力を受信する。
物理的タイルの数は、「16」である一方で、15個のツリーノードがあるため、タイル(T12)は、これに関連付けられたRAAノードを含んでいないことに留意しなければならない。
図5Aに示すように、各RAAノードは、アキュムレータ518及び加算器514を使用して減少された結果を累積することだけでなく、加算器512を使用して、2つの入力(A及びB)を減少させることを含む2つの機能を有する。
たとえばIFMウェイトサイクリングを開始するために、マルチプレクサ516は、累積の開始のときに加算器512から減少された結果をアキュムレータ518に直接ロードさせる。
マルチプレクサ516は、また、例えば、IFMウェイトサイクリングが、時間に応じて進行するにつれて減少した結果を累積できるようにする。
圧縮されたフォーマットでのウェイトを格納するのは、特に完全に接続されたレイヤーの計算の間に、ウェイトを格納するのに必要なSRAM(及びオフチップDDR)ストレージの量を減少させ、ウェイトをフェッチすることと関連付けられたSRAM(及びオフチップDDR)の消費電力を低減させ、そしてウェイトローディングの速度を高めるのに役に立つ。
いくつかの実施形態では、アイドル(idle)サイクルは、乗算器ユニットウェイトをロードするために使用され得る。
また、一部の実施形態では、MR列当たりただ1つのウェイトロードバスを示す図1Kとは対照的に、複数の垂直ウェイトロードバス101は、ウェイトロードを加速化するために使用され得る。
より具体的には、図4ABで以前に示したように、ウェイトは、各タイル102にローカルである4つのSRAMバンク108に格納され、各タイルはすべての4つのバンクを並列的にリードする。
各SRAMバンクは、16個の8ビットウェイトをフェッチする。
各タイルは、8つのMR列を有するため、ウェイトが圧縮されていない場合で活性化レーン当たり1つの8ビットウェイトをロードするために、「(タイル当たり8つのMR列々)/(タイル当たり4つのローカルSRAMバンク)=2つのクロックの」が必要である。
各タイルは、また、タイル当たりウェイト圧縮解除ユニット138を含み、これは、FC及びコンボリューションウェイトを圧縮解除するために使用され得る。
例えば、各乗算器ユニットは、18個のウェイトを含み得、すべてのMUウェイトをロードするために、「(MU当たり18個のウェイト)×(ウェイトロード当たり2つのクロック)=36個のクロックサイクルの」が必要であり得る。
18個のウェイトをすべて使用していない、より小さなカーネルは、より迅速にロードされ得る。
FC計算と同時に行われるウェイトストリーミングは、完全に接続された計算において、スループットを向上させるのに使用されることがあるため、大規模なFCの計算中、乗算器の利用率を高く維持することができる。
前述したように、FC計算は、ウェイトを再使用しない。
従って、このように、FCの計算中、ウェイトを速くストリームする必要がある。
具体的には、すべての乗算器を完全に利用するためには、1のIFMウェイトサイクリングを有するFC計算は、各MUにクロック当たり1つのウェイトを提供することを要求する。
すべての乗算器を完全に利用するためには、2のIFMウェイトサイクリングは、各MUに2つのクロック当たり1つのウェイトを提供することを要求する。
より一般的には、すべての乗算器を完全に利用するためには、NのIFMウェイトサイクリングは、各MU当たりNクロック当たり1つのウェイトを提供することを要求する。
多様なディープラーニング研究刊行物によると、完全に接続されたレイヤーのウェイトは、時には2倍以上に圧縮され得る。
このような場合において、2つのクロックに当たり、各MUに1つの圧縮されていないウェイトをロードすることとは対照的に、1つの圧縮されていないウェイトは、単一のクロック当たり、各MUにロードされ得る。
しかし、追加的に、IFMデータは、また、ウェイトとともにSRAMからフェッチされなければならないため、ウェイトをフェッチするのに利用可能なSRAMの帯域幅を減少させる。
SRAMからフェッチされるIFMデータの量は、結局、マッピング減少構成に依存する。
大きな減少数字は、例えば、R16は、小さな減少の構成には、例えば、R1に比べて、より多くのチャンネルを用いてIFMをフェッチすることを要求する。
すべての64個のSRAMバンクが、FCウェイトをフェッチするのに忙しいため、SRAMからIFMを同時にリードすることは不可能である。
乗算器の利用率を増加させるためには、IFMは、すべての64個のバンクに渡ってスプライス(splice、継がれて)されて格納され得る。
いくつかの実施形態では、IFMをフェッチするためには、1つのクロックサイクルの間にウェイトリードが停止され、すべての64個のバンクは、1つのIFMをSRAM出力の隣に位置したワンディープ(1−deep)キャッシュレジスタ(cache register)にリードさせる。
この後、IFMは、キャッシュされた64個の16バイトのラインからストリームする。
より具体的には、64個のすべてのバンクから並列に1つのIFMをフェッチすると、IFMリードの数「R=(64個のSRAMバンク)×(ブロードキャスト構成番号B)/(物理的タイルの数)」と同一になるように、一度に十分なデータがフェッチされる。
したがって、図6に示したように、いくつかの実施形態については、完全に接続されたレイヤーの計算のための最大の乗算器の利用率は、ブロードキャスト構成番号Bの関数として「R/(1+R)」に基づいて計算される。
先に述べたように、ローカル制御ユニット(142、144)だけではなく、グローバル制御140は、多様な構成レジスタを含み得る。
いくつかの実施形態では、例えば、ニューラルプロセッサが1つの演算から他の演算に遷移(transition)するか、又は1つのSRAMバンクのセットがデータを消尽し、そしてIFM伝達ファブリックが、他のSRAMバンクセットからIFMデータをオン・ザ・フライ(遅延なし)ストリームするように切り替えなければならないように、このような構成レジスタの中の一部のコンテンツは、ニューラルプロセッサ構成を即時に変更するためにオン・ザ・フライに切り替えることができる。
一般的に知られているデザインの慣行(実務)に応じて、このようなオン・ザ・フライの再構成は、構成レジスタをダブルバッファ(double−buffered)されるようにすることにより、達成されることがあり、2つのバッファの間を切り替えることで、新しい構成を適用することができる。
図1Aに示したように、中央制御110は、AXIバスを介してCPUから構成データを受信することができ、その構成データをユーティリティバス112に伝達することができ、ユーティリティバス112は、ARUバイアスレジスタ195、スケールレジスタ191、活性化関数197の構成レジスタなどを含む多様な他のレジスタだけでなく、制御ロジック(140、142、及び144のような)の構成レジスタにCPUからの構成値を伝送及びロードすることができる。
必要に応じて、多様な時間で多数のダブルバッファ(double−buffer)されたレジスタの切り替えを伴うオン・ザ・フライ構成の変更を調整するために、ユーティリティバス112は、構成レジスタの値だけでなく、ダブルバッファされたレジスタが、その構成を有効に転換しなければならない時間(クロックカウント)をロードすることができる。
図1Aは、AXIスレーブインターフェースをそれぞれ含むSRAMバンクセット109を示し、AXIスレーブインターフェースは、CPUがIFM及びウェイトテンソルをライトさせ、そしてOFM結果を再びリードできるようにする。
SRAMバンクセットは、ローカルウェイトロードの接続だけでなく、IFM及びOFMの伝達ファブリックから来るI/O要請をプロセッシングするため、CPUが結果を待っている間に、遅延なくニューラルネットワークの計算が持続されるようにするためには、AXIインターフェースを介してCPU I/O要請は、調停され(arbitrated)、そしてより低い優先順位に割り当てられる。
本明細書で使用するように、用語「マルチプレクサ(multiplexer)」及び「デマルチプレクサ(demultiplexer)」は、相互交換的に使用される。
各用語は、一側(「マルチポート(multi−port)」側)上で複数のデータ端子(例えば、データ入力又はデータ出力)、及び他側(「シングルポート(single−port)」側)上で、単一のデータ端子(例えば、データ出力又はデータ入力)を有する切替可能な装置を意味し、その装置は、その装置の制御入力で受信された制御信号に応じて選択された、一側に複数のデータ端子を接続し、他側に単一のデータ端子を接続するように構成される。
用語「プロセッシングユニット」は、本明細書では、データ又はデジタル信号をプロセッシングするのに使用されるハードウェア、ファームウェア、及びソフトウェアの任意の組み合わせを含むように使用される。
プロセッシングユニットのハードウェアは、例えば、ASIC(application specific integrated circuit)、一般的な、又は特別な目的の中央処理装置(CPU)、デジタル信号プロセッサ(DSP)、グラフィックスプロセッシングユニット(GPU)、及びフィールドプログラマブルゲートアレイ(FPGA)のようなプログラム可能なロジック装置を含み得る。
本明細書で使用する、プロセッシングユニットでは、それぞれの機能は、その機能を実行するように構成、すなわち、ハードワイヤ(hard−wire)されたハードウェア、又は非一時記憶媒体に格納された命令語を実行するように構成されたCPUのような、より一般的な目的のハードウェアにより実行される。
プロセッシングユニットは、単一のプリント回路基板(PCB)上に製造されるか、又は複数の相互接続されたPCBにわたって分散され得る。
プロセッシングユニットは、他のプロセッシングユニットを含み得る。
例えば、プロセッシングユニットは、PCB上で互いに接続された2つのプロセッシングユニット、FPGA、及びCPUを含み得る。
たとえば、用語である「第1の」、「第2の」、「第3の」などは、本明細書で多様な要素、コンポーネント、領域、レイヤー、及び/又はセクションを説明するために使用するとしても、このような要素、コンポーネント、領域、レイヤー、及び/又はセクションは、このような用語により限定されてはいけないと理解されるだろう。
このような用語は、1つの要素、コンポーネント、領域、レイヤー又はセクションを他の要素、コンポーネント、領域、レイヤー、又はセクションと区別するためにだけに使用する。
したがって、本発明の思想及び範囲を逸脱せずに、本明細書で議論されている第1の要素、コンポーネント、領域、レイヤー、又はセクションは、第2の要素、コンポーネント、領域、レイヤー、又はセクションと称され得る。
図面に示すように、1つの要素又は特徴と他の要素又は特徴との関係を説明するために「下(beneath)」、「以下(below)」、「低(lower)」、「真下(under)」、「上(above)」、「上部(upper)」などのような空間的に相対的な用語は、本明細書で説明の便宜のために使用する。
図面に示した方向に加えて、このような空間的に相対的な用語は、使用中又は演算中の装置の他の方向を含むように意図されたものと理解されるだろう。
たとえば、図面内の装置が裏返されたら、他の要素又は特徴の「下」又は「以下」又は「真下」に記述された要素は、他の要素又は特徴の「上」に指向されるだろう。
つまり、「以下」及び「下」という例としての用語は、上及び下の方向の両方を含み得る。
装置は、別の方法で配向(例えば、90度回転又は他の方向に回転)され得る。
したがって、本明細書で使用される空間的に相対的な説明は、それに応じて解釈されるべきである。
さらに、1つのレイヤーが2つのレイヤー「の間」と言及されるとき、それは2つのレイヤーの間のレイヤーであり得るか、又は1つ以上の介在する(intervening)レイヤーが存在できることを、また理解するだろう。
本明細書で使用する用語は、単に特定の実施形態を説明するために使用したものであり、本発明の概念を限定することは意図されない。
本明細書で使用したように、用語の「実質的に(substantially)」、「約(about)」、及びこれに類似した用語は、程度の用語ではなく、推定(approximation)の用語として使用する。
用語は、本発明が属する技術分野における通常の技術者により認識される測定又は計算された値の固有のばらつきを説明するためのものである。
文脈上明らかに別の方法で指示していると認定されない限り、単数の表現は、複数の表現を含む。
本明細書で使用するとき、「含む(comprises)」及び/又は「含む(comprising)」という用語は、言及された特徴、整数、段階、演算、要素、及び/又はコンポーネントの存在を特定するが、1つ以上の他の特徴、整数、段階、演算、要素、コンポーネント、及び/又はこれらのグループの存在若しくは追加を排除しない。
本明細書で使用した、用語の「及び/又は」は、1つ以上の関連・列挙された項目の任意かつすべての組み合わせを含む。
要素のリストの前にあるときに、「少なくとも1つ」のような表現は、全要素のリストを修正し、リストの個々の要素を変更しない。
なお、本発明の要旨の実施形態を説明するとき、「できる(may)」の使用は、「本開示の1つ以上の実施形態」を意味する。
また、「例としての(exemplary)」という用語は、例示又は図示を意味するものと意図される。
本明細書で使用したように、用語の「使用する(use)」、「使用している(using)」、及び「使用された(used)」は、それぞれ用語の「利用する(utilize)」、「利用している(utilizing )」、及び「利用された(utilized)」と同義語であるとそれぞれみなされる。
要素又はレイヤーが、他の要素又はレイヤーの「上に」、「に接続された」、「に結合された」又は「に隣接した」と述べられるとき、他の要素又はレイヤーに直接接続されたり、接続されたり、結合されたり、又は隣接することができたりして、1つ以上の介在要素又はレイヤーが存在しているものと理解され得る。
対照的に、要素又はレイヤーが他の要素又はレイヤーの「上に直接」、「に直接接続されて」、「に直接結合されて」又は「に直接隣接した」ものとして言及されるとき、介在要素又はレイヤーが存在しない。
本明細書で引用した任意の数値範囲は、引用した範囲内に含まれている同じ数値精度のすべてのサブ範囲(sub−range)を含むものと意図される。
たとえば、「1.0〜10.0」の範囲は、記載された最小値1.0と記載されて最大値10.0との間の、すなわち、最小値が1.0以上であり、最大値が10.0以下である、例えば、2.4〜7.6のすべてのサブ範囲を含むように意図される。
ここで引用した任意の最大値の限定は、その中に含まれているすべての下位数値限定を含むように意図され、本明細書に引用された任意の最小の数値の制限は、それに含まれているすべてのより高い数値限定を含むように意図される。
いくつかの実施形態は、次のナンバリングされた条項(clause)の第1セットの特徴を含む。
第1セットの第1の条項)プロセッサが提供される。前記プロセッサは第1のタイル(tile)、第2のタイル、メモリ、及びバスを含む。前記バスは前記メモリ、前記第1のタイルと前記第2のタイルに接続される。前記第1のタイルは第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記第1のタイルはウェイトカーネルを用いて活性化配列のコンボリューションを実行するように構成される。前記コンボリューションを実行する方法は、活性化配列の第1のサブアレイと前記カーネルとのテンソル積を形成する段階と、活性化アレイの第2のサブアレイと前記カーネルとのテンソル積(tensor product)を形成する段階と、活性化アレイの第3のサブアレイと前記カーネルとのテンソル積を形成する段階と、を順に備える。前記第2のサブアレイは、第1の方向にn個の要素により前記第1のサブアレイからオフセットされ、nは正の整数である。前記第3のサブアレイは、前記第1の方向と垂直である第2の方向に1つの要素により前記第2のサブアレイからオフセットされる。
第1セットの第2の条項)前記第1の条項の前記プロセッサで、前記第3のサブアレイを用いて前記カーネルのテンソル積を形成した後、前記コンボリューションを実行する方法は、前記活性化アレイの第4のサブアレイと前記カーネルとのテンソル積を形成する段階と、活性化アレイの第5のサブアレイと前記カーネルとのテンソル積を形成する段階と、を順に備える。第4のサブアレイは、第1の方向と反対である第3の方向にm個のアレイ要素により第3のサブアレイからオフセットされる。mは正の整数である。第5のサブアレイは、第2の方向に1つのアレイ要素により第4のサブアレイからオフセットされる。
第1セットの第3の条項)前記第2の条項の前記プロセッサで、mはnと同じである。
第1セットの第4の条項)前記第3の条項の前記プロセッサで、nは1と同じである。
第1セットの第5の条項)前記第1の条項の前記プロセッサで、前記第1のサブアレイと前記カーネルとの積を形成する段階後、前記コンボリューションを実行する方法は、活性化アレイの(n−1)個それぞれのサブアレイを用いてカーネルの(n−1)積(products)を形成する段階と、を順に含む。(n−1)積の中でk番目の積のサブアレイは、1番目の方向で(k+1)アレイ要素により1番目のサブアレイからオフセットされる。
第1セットの第6の条項)前記第5の条項の前記プロセッサで、前記プロセッサは、前記活性化バッファに接続され、そして活性化バッファに活性化を供給するように構成されたキャッシュをさらに含む。前記キャッシュは活性化「H+(H+n)×(W−1)−1」を格納するのに十分なサイズを有する。Hは第1の方向のカーネルのサイズであり、Wは第2の方向のカーネルのサイズである。
第1セットの第7の条項)前記第1の条項の前記プロセッサで、前記活性化バッファは、第1の乗算器に接続された第1のキュー(queue)及び第2の乗算器に接続された第2のキューを含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態において、第1の乗算器で第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態において、第1の乗算器で第1のウェイトを第1のキューの第2のレジスタからの活性化により乗じるように、さらに構成される。
第1セットの第8の条項)前記第7の条項の前記プロセッサにおいて、前記第2の状態では、前記第1のキューの出力レジスタは、ゼロ(zero)を含む。
第1セットの第9の条項)前記第7の条項の前記プロセッサにおいて、前記プロセッサは、第1の加算器をさらに含む。前記第1の加算器は、前記第1の状態で、前記第1の乗算器の出力及び前記第2の乗算器の出力に接続され、前記第1の乗算器の出力から受信した積及び前記第2の乗算器の出力から受信した積を加算する。
第1セットの第10の条項)前記第9の条項の前記プロセッサにおいて、前記プロセッサは、第2の加算器をさらに含む。前記第2の加算器は、前記第2の状態で前記第1の乗算器の出力に接続されるように構成される。
第1セットの第11の条項)プロセッシング回路を用いて計算するための方法が提供される。前記プロセッシング回路は、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、前記メモリ、前記第1のタイル及び前記第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記方法は、ウェイトカーネルと活性化配列とのコンボリューションを実行する方法を含む。前記コンボリューションを実行する方法は、活性化アレイの第1のサブアレイと前記カーネルとの前記テンソル積を形成する段階と、活性化アレイの第2のサブアレイと前記カーネルとのテンソル積を形成する段階と、活性化アレイの第3のサブアレイと前記カーネルとのテンソル積を形成する段階と、を順に備える。前記第2のサブアレイは、第1の方向にn個の要素により前記第1のサブアレイからオフセットされ、nは正の整数である。前記第3のサブアレイは、前記第1の方向と垂直である第2の方向に1つの要素により前記第2のサブアレイからオフセットされる。
第1セットの第12の条項)前記第11条項の前記方法では、前記第3のサブアレイと前記カーネルとのテンソル積を形成した後、前記コンボリューションを実行する方法は、前記活性化アレイの第4のサブアレイと前記カーネルとのテンソル積を形成する段階と、活性化アレイの第5のサブアレイとカーネルとのテンソル積を形成する段階と、を順に備える。第4のサブアレイは、第1の方向と反対である第3の方向にm個のアレイ要素だけ第3のサブアレイからオフセットされる。mは正の整数である。第5のサブアレイは、第2の方向に1つのアレイ要素だけ第4のサブアレイからオフセットされる。
第1セットの第13の条項)前記第12の条項の前記方法では、mはnと同じである。
第1セットの第14の条項)前記第13の条項の前記方法では、nは1と同じである。
第1セットの第15の条項)前記第11の条項の前記方法では、前記第1のサブアレイと前記カーネルとの積を形成する段階後、前記コンボリューションを実行する方法は、活性化アレイの(n−1)個のそれぞれのサブアレイと前記カーネルとの(n−1)個の積(products)を形成する段階と、を順に含む。(n−1)積の中でk番目の積のサブアレイは、1番目の方向で(k+1)アレイ要素だけ1番目のサブアレイからオフセットされる。
第1セットの第16の条項)前記第15の条項の前記方法では、前記プロセッシング回路は、前記活性化バッファに接続され、そして活性化バッファに活性化を供給するように構成されたキャッシュをさらに含む。前記キャッシュは活性化「H+(H+n)×(W−1)−1」を格納するのに十分なサイズを有する。Hは第1の方向のカーネルのサイズであり、Wは第2の方向のカーネルのサイズである。
第1セットの第17の条項)前記第11の条項の前記方法では、前記活性化バッファは、第1の乗算器に接続された第1のキュー(queue)及び第2の乗算器に接続された第2のキューを含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態において、第1の乗算器で第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態において第1の乗算器で第1のウェイトを第1のキューの第2のレジスタからの活性化に乗じるように、さらに構成される。
第1セットの第18の条項)前記第17の条項の前記方法において、前記第2の状態では、前記第1のキューの出力レジスタはゼロ(zero)を含む。
第1セットの第19の条項)前記第17の条項の前記方法では、前記プロセッシング回路は、第1の加算器をさらに含む。前記方法は、前記第1の状態で、前記第1の加算器を前記第1の乗算器の出力及び前記第2の乗算器の出力に接続し、前記第1の加算器が前記第1の乗算器の出力から受信した結果と、前記第2の乗算器の出力から受信した結果と、を加算する段階をさらに含む。
第1セットの第20の条項)プロセッシングのための手段として計算するための方法が提供される。プロセッシングのための前記手段は、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、前記メモリ、前記第1のタイル及び前記第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記方法は、ウェイトカーネルと活性化アレイとのコンボリューションを実行する方法を含む。前記コンボリューションを実行する方法は、活性化アレイの第1のサブアレイと前記カーネルとの前記テンソル積を形成する段階と、活性化アレイの第2のサブアレイと前記カーネルとのテンソル積を形成する段階と、活性化アレイの第3のサブアレイと前記カーネルとのテンソル積を形成する段階と、を順に備える。前記第2のサブアレイは、第1の方向にn個の要素だけ前記第1のサブアレイからオフセットされ、nは正の整数である。前記第3のサブアレイは、前記第1の方向と垂直である第2の方向に1つの要素だけ前記第2のサブアレイからオフセットされる。
いくつかの実施形態は、次のナンバリングされた条項(clause)の第2セットの特徴を含む。
第2セットの第1の条項)プロセッサが提供される。前記プロセッサは、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、前記メモリ、前記第1のタイル、及び前記第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記プロセッサは、第1のカーネルウェイトと活性化アレイとの第1のコンボリューションを実行するように構成される。前記第1のコンボリューションを実行する方法は、前記活性化アレイの第1のサブアレイを前記第1のタイル及び前記第2のタイルにブロードキャストする段階と、第1のテンソル積を形成する段階と、前記メモリ内に前記第1のテンソル積を格納する段階と、前記活性化アレイの第2のサブアレイを前記第1のタイル及び前記第2のタイルにブロードキャストする段階と、第2のテンソル積を形成する段階と、を備える。前記第1のテンソル積は前記活性化アレイの前記第1のサブアレイと前記第1のカーネルウェイトの第1のサブアレイとのテンソル積である。前記第2のテンソル積は前記活性化アレイの前記第2のサブアレイと前記第1のカーネルウェイトの第2のサブアレイとのテンソル積である。
第2セットの第2の条項)前記第1の条項の前記プロセッサにおいて、前記第1のタイルは、複数のウェイトが圧縮された形でエンコードされたデータワードを圧縮解除して、第1のウェイト及び第2のウェイトを抽出し、第1のウェイトを第1のウェイトレジスタにフィード(feed)し、そして第2のウェイトを第2のウェイトレジスタにフィードするように構成されたウェイト圧縮解除ユニットと、をさらに含む。
第2セットの第3の条項)前記第1の条項の前記プロセッサにおいて、第1のタイルはまた、第2のカーネルウェイトと活性化アレイとの第2のコンボリューションを実行するように、さらに構成される。前記第2のコンボリューションを実行する方法は、活性化アレイの第1のサブアレイと第2のカーネルの第1の部分とのテンソル積を形成する段階と、活性化アレイの第1のサブアレイと第2のカーネルの第2の部分とのテンソル積を形成する段階と、活性化アレイの第2のサブアレイと第2のカーネルの第1の部分とのテンソル積を形成する段階と、を順に備える。第2のカーネルの第1の部分は、第1のウェイトレジスタに格納されたウェイトを含み、第2のカーネルの第2の部分は、第2のウェイトレジスタに格納されたウェイトを含み、そして前記第2のカーネルの第1の部分は、第1のウェイトレジスタに格納されたウェイトを含む。
第2セットの第4の条項)前記第1の条項の前記プロセッサにおいて、前記活性化バッファは、第1の乗算器に接続された第1のキュー(queue)及び第2の乗算器に接続された第2のキューを含む。第1のキューは、第1のレジスタ及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態において、第1の乗算器で第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態において第1の乗算器で第1のウェイトを第1のキューの第2のレジスタからの活性化に乗じるように、さらに構成される。
第2セットの第5の条項)前記第4の条項の前記プロセッサにおいて、前記第2の状態では、前記第1のキューの出力レジスタは、ゼロを含む。
第2セットの第6の条項)前記第4の条項の前記プロセッサにおいて、前記プロセッサは、第1の加算器をさらに含む。前記第1の加算器は、前記第1の状態で、前記第1の乗算器の出力及び前記第2の乗算器の出力に接続され、前記第1の乗算器の出力から受信した結果と前記第2の乗算器の出力から受信した結果とを加算する。
第2セットの第7の条項)前記第6の条項の前記プロセッサにおいて、前記プロセッサは、第2の加算器をさらに含む。前記第2の加算器は、前記第2の状態で前記第1の乗算器の出力に接続されるように構成される。
第2セットの第8の条項)前記第7の条項の前記プロセッサにおいて、前記プロセッサは、第1の加算器に接続された第1のアキュムレータ(accumulator)と、第2の加算器に接続された第2のアキュムレータと、をさらに備える。第1のアキュムレータはレジスタを含む。第1の状態では、前記第1のアキュムレータは、前記第1の加算器から受信した合計を前記第1のアキュムレータのレジスタの値に加えて、第1のアキュムレータの累積された値を形成し、そして第1のアキュムレータのレジスタに第1のアキュムレータの累積された値を格納する。
第2セットの第9の条項)前記第8の条項の前記プロセッサにおいて、第2のアキュムレータはレジスタを含む。第2の状態では、前記第2のアキュムレータは、前記第2の加算器から受信した合計を前記第2のアキュムレータのレジスタの値に加えて、第2のアキュムレータの累積された値を形成し、そして第2のアキュムレータのレジスタに第2のアキュムレータの累積された値を格納する。
第2セットの第10の条項)前記第8の条項の前記プロセッサにおいて、前記プロセッサは、第1のキューの出力レジスタがゼロを含むか否かを決定し、第1のキューの出力レジスタがゼロを含むという決定に応答して、第1のタイルが第2の状態で演算するようにする活性化ゼロスキップ制御回路をさらに含む。
第2セットの第11の条項)プロセッシング回路で計算する方法が提供される。前記プロセッシング回路は、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、前記メモリ、前記第1のタイル、及び前記第2のタイルに接続される。前記第1のタイルは、第1のバッファモジュール、第2のバッファモジュール、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記方法は、第1のカーネルウェイトと活性化アレイとの第1のコンボリューションを実行するように構成される。前記第1のコンボリューションを実行する方法は、前記活性化アレイの第1のサブアレイを前記第1のタイル及び前記第2のタイルにブロードキャストする段階と、第1のテンソル積を形成する段階と、前記メモリ内に前記第1のテンソル積を格納する段階と、前記活性化アレイの第2のサブアレイを前記第1のタイル及び前記第2のタイルにブロードキャストする段階と、第2のテンソル積を形成する段階と、第1のテンソル積と第2のテンソル積と加算する段階と、を備える。前記第1のテンソル積は前記活性化アレイの前記第1のサブアレイと、第1のカーネルウェイトの第1のサブアレイとのテンソル積である。前記第2のテンソル積は前記活性化アレイの前記第2のサブアレイと、第1のカーネルウェイトの第2のサブアレイとのテンソル積である。
第2セットの第12の条項)前記第11の条項の前記方法では、前記第1のタイルは、ウェイトの圧縮解除ユニットをさらに含む。前記方法は、前記ウェイト圧縮解除ユニットは、複数のウェイトが圧縮された形でエンコードされたデータワードを圧縮解除して、第1のウェイト及び第2のウェイトを抽出する段階と、第1のウェイトを第1のウェイトレジスタにフィードする段階と、第2のウェイトを第2のウェイトレジスタにフィードする段階と、をさらに備える。
第2セットの第13の条項)前記第11の条項の前記方法では、前記方法は、ウェイトの第2のカーネルと活性化アレイとの第2のコンボリューションを実行する方法をさらに含む。前記第2のコンボリューションを実行する方法は、活性化アレイの第1のサブアレイと第2のカーネルの第1の部分とのテンソル積を形成する段階と、活性化アレイの第1のサブアレイと第2のカーネルの第2の部分とのテンソル積形成する段階と、活性化アレイの第2のサブアレイと第2のカーネルの第1の部分とのテンソル積を形成する段階と、を順に備える。第2のカーネルの第1の部分は、第1のウェイトレジスタに格納されたウェイトを含み、第2のカーネルの第2の部分は、第2のウェイトレジスタに格納されたウェイトを含み、そして前記第2のカーネルの第1の部分は、第1のウェイトレジスタに格納されたウェイトを含む。
第2セットの第14の条項)前記第11の条項の前記方法では、前記活性化バッファは、第1の乗算器に接続された第1のキュー(queue)及び第2の乗算器に接続された第2のキューを含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態で、第1の乗算器で第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態で第1の乗算器で第1のウェイトと、第1のキューの第2のレジスタからの活性化とを乗じるように、さらに構成される。
第2セットの第15の条項)前記第14の条項の前記方法において、前記第2の状態では、前記第1のキューの出力レジスタは、ゼロを含む。
第2セットの第16の条項)前記第14の条項の前記方法では、前記プロセッシング回路は、第1の加算器をさらに含む。前記方法は、前記第1の状態で、前記第1の加算器を前記第1の乗算器の出力及び前記第2の乗算器の出力に前記第1のキューから接続する段階と、前記第1の加算器が前記第1の乗算器の出力から受信した結果及び前記第2の乗算器の出力から受信した結果を加算する段階と、をさらに備える。
第2セットの第17の条項)前記第16の条項の前記方法では、前記プロセッシング回路は、第2の加算器をさらに含む。前記方法は、前記第2の状態で前記第2の加算器を前記第1の乗算器の出力に接続する段階とをさらに含む。
第2セットの第18の条項)前記第17の条項の前記方法では、前記プロセッシング回路は、第1の加算器に接続された第1のアキュムレータ(accumulator)、及び第2の加算器に接続された第2のアキュムレータをさらに含む。第1のアキュムレータはレジスタを含む。前記方法は、第1の状態では、前記第1のアキュムレータが前記第1の加算器から受信した合計を前記第1のアキュムレータのレジスタの値に加算する段階と、第1のアキュムレータの累積された値を形成する段階と、前記第1のアキュムレータが第1のアキュムレータのレジスタに第1のアキュムレータの累積された値を格納する段階と、をさらに備える。
第2セットの第19の条項)前記第18の条項の前記方法では、第2のアキュムレータはレジスタを含む。前記方法は、第2の状態では、前記第2のアキュムレータが前記第2の加算器から受信した合計を前記第2のアキュムレータのレジスタの値に加算する段階と、第2のアキュムレータの累積された値を形成する段階と、前記第2のアキュムレータが第2のアキュムレータのレジスタに第2のアキュムレータの累積された値を格納する段階と、をさらに備える。
第2セットの第20の条項)プロセッシングのための手段を用いて計算する方法が提供される。前記プロセッシングのための手段は、第1のタイル、第2のタイル、メモリ、及びバスを含む。前記バスは、前記メモリ、前記第1のタイル、及び前記第2のタイルに接続される。前記第1のタイルは、第1のバッファモジュール、第2のバッファモジュール、活性化バッファ、第1の乗算器、及び第2の乗算器を含む。前記方法は、第1のカーネルウェイトと活性化アレイとの第1のコンボリューションを実行するように構成される。前記第1のコンボリューションを実行する方法は、前記活性化アレイの第1のサブアレイを前記第1のタイル及び前記第2のタイルにブロードキャストする段階と、第1のテンソル積を形成する段階と、前記メモリ内に前記第1のテンソル積を格納する段階と、前記活性化アレイの第2のサブアレイを前記第1のタイル及び前記第2のタイルにブロードキャストする段階と、第2のテンソル積を形成する段階と、前記第1のテンソル積と前記第2のテンソル積を加算する段階と、を備える。前記第1のテンソル積は前記活性化アレイの前記第1のサブアレイと第1のカーネルウェイトの第1のサブアレイとのテンソル積である。前記第2のテンソル積は前記活性化アレイの前記第2のサブアレイと第1のカーネルウェイトの第2のサブアレイとのテンソル積である。
いくつかの実施形態は、次のナンバリングされた条項(clause)の第3セットの特徴を含む。
第3セットの第1の条項)プロセッサが提供される。前記プロセッサは、第1のタイル、第2のタイル、メモリ、入力バス及び出力バスを含む。前記入力バスはメモリ、第1のタイル及び第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器及び第2の乗算器を含む。前記第1のタイルは、ウェイトのカーネルで活性化アレイの第1のコンボリューションを実行するように構成される。前記メモリは、第1のメモリバンクのセット及び第2のメモリバンクのセットを含む。前記入力バスは、第1の方向にデータを伝播するための第1のセグメントバスと、第1の方向とは反対方向である第2の方向にデータを伝播するための第2のセグメントバスと、を備える。前記第1のセグメントバスは、第1のスイッチブロック及び第2のスイッチブロックを含む。前記第1のスイッチブロックは、第1のタイル及び第1のメモリバンクのセットに接続される。前記第2のスイッチブロックは、第2のタイル及び第2のメモリバンクのセットに接続される。前記第2のセグメントバスは、第3のスイッチブロック及び第4のスイッチブロックを含む。前記第3のスイッチブロックは、第1のタイル及び第1のメモリバンクのセットに接続される。前記第4のスイッチブロックは、第2のタイル及び第2のメモリバンクのセットに接続される。前記第1のスイッチブロックの入力は、第2のスイッチブロックの出力に接続される。前記第3のスイッチブロックの出力は、第4のスイッチブロックの入力に接続される。
第3セットの第2の条項)前記第1の条項の前記プロセッサにおいて、第1のバスの状態では、第1のセグメントバスは、第1のメモリバンクのセットを、第1のスイッチブロックを介して、第1のタイルに接続し、第2のスイッチブロックを介して第2のメモリバンクのセットを第2のタイルに接続するように構成される。
第3セットの第3の条項)前記第2の条項の前記プロセッサにおいて、第2のバスの状態では、第1のセグメントバスは、第2のメモリバンクのセットを第1のスイッチブロック及び第2のスイッチブロックを介して、第1のタイルに接続し、第2のスイッチブロックを介して、第2のメモリバンクのセットを第2のタイルに接続するようにさらに構成される。
第3セットの第4の条項)前記第1の条項の前記プロセッサにおいて、前記活性化バッファは、第1の乗算器に接続された第1のキュー(queue)及び第2の乗算器に接続された第2のキューを含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態で、第1の乗算器で第1のキューの出力レジスタからの活性化と第1のウェイトとを乗じ、第2の状態において第1の乗算器で第1のウェイトを第1のキューの第2のレジスタからの活性化と乗じるように、さらに構成される。
第3セットの第5の条項)前記第4の条項の前記プロセッサにおいて、前記第2の状態では、前記第1のキューの出力レジスタは、ゼロを含む。
第3セットの第6の条項)前記第4の条項の前記プロセッサにおいて、前記プロセッサは、第1の加算器をさらに含む。前記第1の加算器は、第1の状態で、前記第1の乗算器の出力及び前記第2の乗算器の出力に接続され、前記第1の乗算器の出力から受信した積、及び前記第2の乗算器の出力から受信した積を加算する。
第3セットの第7の条項)前記第6の条項の前記プロセッサにおいて、前記プロセッサは、第2の加算器をさらに含む。前記第2の加算器は、前記第2の状態で前記第1の乗算器の出力に接続されるように構成される。
第3セットの第8の条項)前記第7の条項の前記プロセッサにおいて、前記プロセッサは、第1の加算器に接続された第1のアキュムレータ(accumulator)、及び第2の加算器に接続された第2のアキュムレータをさらに含む。第1のアキュムレータレジスタを含む。第1の状態では、前記第1のアキュムレータは、前記第1の加算器から受信した合計を前記第1のアキュムレータのレジスタの値に加えて、第1のアキュムレータの累積された値を形成し、そして第1のアキュムレータのレジスタに第1のアキュムレータの累積された値を格納する。
第3セットの第9の条項)前記第8の条項の前記プロセッサにおいて、第2のアキュムレータはレジスタを含む。第2の状態では、前記第2のアキュムレータは、前記第2の加算器から受信した合計を前記第2のアキュムレータのレジスタの値に加えて、第2のアキュムレータの累積された値を形成し、そして第2のアキュムレータのレジスタに第2のアキュムレータの累積された値を格納する。
第3セットの第10の条項)前記第8の条項の前記プロセッサにおいて、前記プロセッサは、第1のキューの出力レジスタがゼロを含むか否かを決定し、第1のキューの出力レジスタがゼロを含むという決定に応答して、第1のタイルが第2の状態で演算するようにする活性化ゼロスキップ制御回路をさらに含む。
第3セットの第11の条項)前記第10の条項の前記プロセッサにおいて、前記プロセッサは、マルチプレクサ(multiplexer)をさらに含む。前記マルチプレクサは、マルチプレクサのシングルポート側で第1の乗算器に接続された入力を有し、マルチプレクサのマルチポート側で第1の加算器に接続された第1の出力を有し、そしてマルチプレクサのマルチポート側で第2の加算器に接続された第2の出力を有する。
第3セットの第12の条項)プロセッシング回路でを用いて計算する方法が提供される。前記プロセッシング回路は、第1のタイル、第2のタイル、メモリ、入力バス及び出力バスを含む。前記入力バスはメモリ、第1のタイル及び第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器及び第2の乗算器を含む。前記第1のタイルは、ウェイトのカーネルで活性化アレイの第1のコンボリューションを実行するように構成される。前記メモリは、第1のメモリバンクのセット及び第2のメモリバンクのセットを含む。前記入力バスは、第1の方向にデータを伝播するための第1のセグメントバスと、第1の方向とは反対方向である第2の方向にデータを伝播するための第2のセグメントバスと、を備える。前記第1のセグメントバスは、第1のスイッチブロック及び第2のスイッチブロックを含む。前記第1のスイッチブロックは、第1のタイル及び第1のメモリバンクのセットに接続される。前記第2のスイッチブロックは、第2のタイル及び第2のメモリバンクのセットに接続される。前記第2のセグメントバスは、第3のスイッチブロック及び第4のスイッチブロックを含む。前記第3のスイッチブロックは、第1のタイル及び第1のメモリバンクのセットに接続される。前記第4のスイッチブロックは、第2のタイル及び第2のメモリバンクのセットに接続される。前記第1のスイッチブロックの入力は、第2のスイッチブロックの出力に接続される。前記第3のスイッチブロックの出力は、第4のスイッチブロックの入力に接続される。前記方法は、第1のバスの状態では、第1のスイッチブロックにより、第1のタイルに第1のメモリバンクのセットを接続する段階と、第2のスイッチブロックにより第2のメモリバンクのセットを第2のタイルに接続する段階と、を備える。
第3セットの第13の条項)前記第12の条項の前記方法では、第2のバスの状態では、第1のスイッチブロック及び第2のスイッチブロックにより、第1のタイルに第2のメモリバンクのセットを接続する段階と、第2のスイッチブロックにより第2のメモリバンクセットを第2のタイルに接続する段階と、をさらに備える。
第3セットの第14の条項)前記第12の条項の前記方法では、前記活性化バッファは、第1の乗算器に接続された第1のキュー(queue)及び第2の乗算器に接続された第2のキューを含む。第1のキューは、第1のレジスタ、及び第1のレジスタに隣接した第2のレジスタを含む。第1のレジスタは、第1のキューの出力レジスタである。第1のタイルは、第1の状態で、第1の乗算器で第1のキューの出力レジスタからの活性化により第1のウェイトを乗じ、第2の状態において第1の乗算器で第1のウェイトを第1のキューの第2のレジスタからの活性化により乗じるように、さらに構成される。
第3セットの第15の条項)前記第14の条項の前記方法では、前記第2のキューでは、前記第1のキューの出力はゼロを含む。
第3セットの第16の条項)前記第14の条項の前記方法では、前記プロセッシング回路は、第1の加算器をさらに含む。前記方法は、前記第1の加算器を前記第1の乗算器の出力及び前記第2の乗算器の出力に前記第1のキューから接続する段階と、前記第1の加算器が前記第1の乗算器の出力から受信した結果及び前記第2の乗算器の出力から受信した結果を加算する段階と、をさらに備える。
第3セットの第17の条項)前記第16の条項の前記方法では、前記プロセッシング回路は、第2の加算器をさらに含む。前記方法は、前記第2の状態で前記第2の加算器を前記第1の乗算器の出力に接続する段階と、をさらに含む。
第3セットの第18の条項)前記第17の条項の前記方法では、前記プロセッシング回路は、第1の加算器に接続された第1のアキュムレータ(accumulator)、及び第2の加算器に接続された第2のアキュムレータをさらに含む。第1のアキュムレータはレジスタを含む。前記方法は、第1の状態では、前記第1のアキュムレータが前記第1の加算器から受信した合計を前記第1のアキュムレータのレジスタの値に加算する段階と、第1のアキュムレータの累積された値を形成する段階と、前記第1のアキュムレータが第1のアキュムレータのレジスタに第1のアキュムレータの累積された値を格納する段階と、をさらに備える。
第3セットの第19の条項)前記第18の条項の前記方法では、第2のアキュムレータはレジスタを含む。前記方法は、第2の状態では、前記第2のアキュムレータが前記第2の加算器から受信した合計を前記第2のアキュムレータのレジスタの値に加算する段階と、第2のアキュムレータの累積された値を形成する段階と、前記第2のアキュムレータが第2のアキュムレータのレジスタに第2のアキュムレータの累積された値を格納する段階と、をさらに備える。
第3セットの第20の条項)プロセッシングのための手段を用いて計算する方法が提供される。前記プロセッシングのための手段は、第1のタイル、第2のタイル、メモリ、入力バス及び出力バスを含む。前記入力バスはメモリ、第1のタイル及び第2のタイルに接続される。前記第1のタイルは、第1のウェイトレジスタ、第2のウェイトレジスタ、活性化バッファ、第1の乗算器及び第2の乗算器を含む。前記第1のタイルは、ウェイトのカーネルで活性化アレイの第1のコンボリューションを実行するように構成される。前記メモリは、第1のメモリバンクのセット及び第2のメモリバンクのセットを含む。前記入力バスは、第1の方向にデータを伝播するための第1のセグメントバス、及び第1の方向とは反対方向である第2の方向にデータを伝播するための第2のセグメントバスを含む。前記第1のセグメントバスは、第1のスイッチブロック及び第2のスイッチブロックを含む。前記第1のスイッチブロックは、第1のタイル及び第1のメモリバンクのセットに接続される。前記第2のスイッチブロックは、第2のタイル及び第2のメモリバンクのセットに接続される。前記第2のセグメントバスは、第3のスイッチブロック及び第4のスイッチブロックを含む。前記第3のスイッチブロックは、第1のタイルと第1のメモリバンクのセットに接続される。前記第4のスイッチブロックは、第2のタイル及び第2のメモリバンクのセットに接続される。前記第1のスイッチブロックの入力は、第2のスイッチブロックの出力に接続される。前記第3のスイッチブロックの出力は、第4のスイッチブロックの入力に接続される。前記方法は、第1のバス状態では、第1のスイッチブロックにより第1のタイルに設定された第1のメモリバンクを接続する段階と、第2のスイッチブロックにより第2のメモリバンクを第2のタイルに接続する段階と、を備える。
ニューラルプロセッサの例としての実施形態が本明細書で具体的に説明し例示したが、多くの修正及び変形が、本発明が属する技術分野における通常の技術者(当業者)にとっては明らかになるだろう。
したがって、本開示の原理に基づいて構成されたニューラルプロセッサは、本明細書で具体的に説明されたものとは異なるように実現されることがあることを理解しなければならない。
また、本発明は、特許請求の範囲、及びそれらの均等な範囲内で定義される。
102 タイル
103 乗算器ユニット(MU)
104 IFM伝達ファブリック
106 OFM伝達ファブリック
109 SRAMバンクセット
110 中央コントローラ
111 減少ファブリック
112 ユーティリティバス
114 AXIインターコネクト
116 マイクロコントローラ(MCU)
118 DMAコントローラ
120 外部メモリ
122 MRアレイ
124 IFM活性化バッファ
126 乗算器
127 レジスタファイル
128A、128B 加算器ツリー
130A、130B アキュムレータ
133 MR列
135 タイプ変換器
137 信号の活性化レーン
139 IFMキャッシュ
140 グローバル制御ロジック、グローバル制御FSM
141 活性化ブロードキャストユニット(ABU)
142 SRAM制御FSM

Claims (20)

  1. 第1のタイル(tile)と、
    第2のタイルと、
    メモリと、
    バスと、を備え、
    前記バスは、前記メモリと、前記第1のタイルと、前記第2のタイルと、に接続され、
    前記第1のタイルは、第1のウェイト(weight)レジスタと、第2のウェイトレジスタと、活性化バッファと、第1の乗算器と、第2の乗算器と、を含み、
    前記活性化バッファは、前記第1の乗算器に接続される第1のキュー(queue)と、前記第2の乗算器に接続される第2のキューと、を含むように構成され、
    前記第1のキューは、第1のレジスタ、及び前記第1のレジスタに隣接した第2のレジスタを含み、
    前記第1のレジスタは、前記第1のキューの出力レジスタであり、
    前記第1のタイルは、第1の状態では、前記第1の乗算器で、第1のウェイトに前記第1のキューの前記出力レジスタからの活性化を乗じ、
    第2の状態では、前記第1の乗算器で、第1のウェイトに前記第1のキューの前記第2のレジスタからの活性化を乗じるように構成されることを特徴とするプロセッサ。
  2. 前記第2の状態では、前記第1のキューの前記出力レジスタは、ゼロ(zero)を含むことを特徴とする請求項1に記載のプロセッサ。
  3. 第1の加算器をさらに備え、
    前記第1の加算器は、前記第1の状態で、前記第1の乗算器の出力及び前記第2の乗算器の出力と接続され、前記第1の乗算器の前記出力から受信した積と、前記第2の乗算器の前記出力から受信した積と、を加算するように構成されることを特徴とする請求項1に記載のプロセッサ。
  4. 前記第2の状態では、前記第1の乗算器の前記出力に接続されるように構成される第2の加算器をさらに備えることを特徴とする請求項3に記載のプロセッサ。
  5. 前記第1の加算器に接続される第1のアキュムレータ(accumulator)と、
    前記第2の加算器に接続される第2のアキュムレータと、をさらに備え、
    前記第1のアキュムレータは、レジスタを含み、
    前記第1の状態で、前記第1の加算器から受信した合計を前記第1のアキュムレータの前記レジスタ内の値に加えて、前記第1のアキュムレータの累積された値を形成し、前記第1のアキュムレータの前記レジスタに、前記第1のアキュムレータの前記累積された値を格納するように構成されることを特徴とする請求項4に記載のプロセッサ。
  6. 前記第2のアキュムレータは、レジスタを含み、
    前記第2の状態で、前記第2の加算器から受信した合計を前記第2のアキュムレータの前記レジスタ内の値に加えて、前記第2のアキュムレータの累積された値を形成し、前記第2のアキュムレータの前記レジスタに前記第2のアキュムレータの前記累積された値を格納するように構成されることを特徴とする請求項5に記載のプロセッサ。
  7. 活性化ゼロスキップ制御回路をさらに備え、
    前記活性化ゼロスキップ制御回路は、前記第1のキューの前記出力レジスタがゼロを含むか否かを決定し、
    前記第1のキューの前記出力レジスタがゼロを含むと決定したことに応答して、前記第1のタイルが前記第2の状態で演算するように構成される請求項5に記載のプロセッサ。
  8. マルチプレクサをさらに備え、
    前記マルチプレクサは、前記マルチプレクサの単一のポート側で、前記第1の乗算器に接続される入力と、
    前記マルチプレクサのマルチポート側で、前記第1の加算器に接続される第1の出力と、
    前記マルチプレクサの前記マルチポート側で、前記第2の加算器に接続される第2の出力と、を含むことを特徴とする請求項7に記載のプロセッサ。
  9. 前記活性化ゼロスキップ制御回路は、前記第1の状態では、前記入力を前記第1の出力に接続するように前記マルチプレクサを制御し、
    前記第2の状態では、前記入力を前記第2の出力に接続するように前記マルチプレクサを制御するように構成されることを特徴とする請求項8に記載のプロセッサ。
  10. 前記第2のキューは、第1のレジスタと、前記第1のレジスタに隣接した第2のレジスタと、を含み、
    前記第1のレジスタは、前記第2のキューの出力レジスタであり、
    前記第1のタイルは、第3の状態では、前記第1の乗算器で、第1のウェイトに前記第2のキューの前記第2のレジスタからの活性化を乗じるように構成されることを特徴とする請求項1に記載のプロセッサ。
  11. プロセッシング回路の計算方法であって、
    前記プロセッシング回路は、第1のタイル(tile)と、第2のタイルと、メモリと、バスと、を備え、
    前記バスは、前記メモリと、前記第1のタイルと、前記第2のタイルと、に接続され、
    前記第1のタイルは、第1のウェイト(weight)レジスタと、第2のウェイトレジスタと、活性化バッファと、第1の乗算器と、第2の乗算器と、を含み、
    前記活性化バッファは、前記第1の乗算器に接続される第1のキュー(queue)と、前記第2の乗算器に接続される第2のキューと、を含むように構成され、
    前記第1のキューは、第1のレジスタと、前記第1のレジスタに隣接した第2のレジスタと、を含み、前記第1のレジスタは、前記第1のキューの出力レジスタであり、
    前記計算方法は、第1の状態では、前記第1の乗算器により第1のウェイトに前記第1のキューの前記出力レジスタからの活性化を乗じる段階と、
    第2の状態では、前記第1の乗算器により第1のウェイトに前記第1のキューの前記第2のレジスタからの活性化を乗じる段階と、を有することを特徴とする方法。
  12. 前記第2の状態では、前記第1のキューの前記出力レジスタは、ゼロ(zero)を含むことを特徴とする請求項11に記載の方法。
  13. 前記プロセッシング回路は、第1の加算器をさらに備え、
    前記計算方法は、前記第1の状態で、前記第1の加算器を前記第1の乗算器の出力及び前記第2の乗算器の出力に接続する段階と、
    前記第1の加算器により、前記第1の乗算器の前記出力から受信した積と、前記第2の乗算器の前記出力から受信した積と、を加算する段階と、をさらに有することを特徴とする請求項11に記載の方法。
  14. 前記プロセッシング回路は、第2の加算器をさらに備え、
    前記計算方法は、前記第2の状態では、前記第2の加算器を前記第1の乗算器の前記出力に接続する段階をさらに有することを特徴とする請求項13に記載の方法。
  15. 前記プロセッシング回路は、前記第1の加算器に接続される第1のアキュムレータ(accumulator)と、前記第2の加算器に接続される第2のアキュムレータと、をさらに備え、
    前記第1のアキュムレータは、レジスタを含み、
    前記計算方法は、前記第1の状態で、前記第1のアキュムレータにより、前記第1の加算器から受信した合計を前記第1のアキュムレータの前記レジスタ内の値に加えて、前記第1のアキュムレータの累積された値を形成する段階と、
    前記第1のアキュムレータにより、前記第1のアキュムレータの前記レジスタに前記第1のアキュムレータの前記累積された値を格納する段階と、をさらに有することを特徴とする請求項14に記載の方法。
  16. 前記第2のアキュムレータは、レジスタを含み、
    前記計算方法は、前記第2の状態で、前記第2のアキュムレータにより、前記第2の加算器から受信した合計を前記第2のアキュムレータの前記レジスタ内の値に加えて、前記第2のアキュムレータの累積された値を形成する段階と、
    前記第2のアキュムレータにより、前記第2のアキュムレータの前記レジスタに前記第2のアキュムレータの前記累積された値を格納する段階と、をさらに有することを特徴とする請求項15に記載の方法。
  17. 前記プロセッシング回路は、活性化ゼロスキップ制御回路をさらに備え、
    前記計算方法は、前記活性化ゼロスキップ制御回路により、前記第1のキューの前記出力レジスタがゼロを含むか否かを決定する段階と、
    前記第1のキューの前記出力レジスタがゼロを含むと決定したことに応答して、前記第1のタイルが前記第2の状態で演算するようにする段階と、をさらに有することを特徴とする請求項15に記載の方法。
  18. 前記プロセッシング回路は、マルチプレクサをさらに備え、
    前記マルチプレクサは、前記マルチプレクサの単一ポート側で、前記第1の乗算器に接続される入力と、
    前記マルチプレクサのマルチポート側で、前記第1の加算器に接続される第1の出力と、
    前記マルチプレクサの前記マルチポート側で、前記第2の加算器に接続される第2の出力と、を備えることを特徴とする請求項17に記載の方法。
  19. 前記計算方法は、前記活性化ゼロスキップ制御回路により、前記マルチプレクサを制御する段階をさらに有し、
    前記マルチプレクサは、前記第1の状態では、前記入力を前記第1の出力に接続するように制御され、前記第2の状態では、前記入力を前記第2の出力に接続するように制御されることを特徴とする請求項18に記載の方法。
  20. プロセッシングのための手段の計算方法であって、
    前記プロセッシングのための手段は、第1のタイル(tile)と、第2のタイルと、メモリと、バスと、を備え、
    前記バスは、前記メモリと、前記第1のタイルと、前記第2のタイルと、に接続され、
    前記第1のタイルは、第1のウェイト(weight)レジスタと、第2のウェイトレジスタと、活性化バッファと、第1の乗算器と、第2の乗算器と、を含み、
    前記活性化バッファは、前記第1の乗算器に接続される第1のキュー(queue)と、前記第2の乗算器に接続される第2のキューと、を含むように構成され、
    前記第1のキューは、第1のレジスタと、前記第1のレジスタに隣接した第2のレジスタと、を含み、前記第1のレジスタは、前記第1のキューの出力レジスタであり、
    前記計算方法は、第1の状態では、前記第1の乗算器で第1のウェイトに前記第1のキューの前記出力レジスタからの活性化を乗じる段階と、
    第2の状態では、前記第1の乗算器で第1のウェイトに前記第1のキューの前記第2のレジスタからの活性化を乗じる段階と、を有することを特徴とする方法。
JP2020571552A 2018-06-22 2019-06-21 ニューラルプロセッサ Active JP7337103B2 (ja)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US201862689008P 2018-06-22 2018-06-22
US62/689,008 2018-06-22
US201962798297P 2019-01-29 2019-01-29
US62/798,297 2019-01-29
US201962841606P 2019-05-01 2019-05-01
US201962841590P 2019-05-01 2019-05-01
US62/841,606 2019-05-01
US62/841,590 2019-05-01
US16/446,610 US20190392287A1 (en) 2018-06-22 2019-06-19 Neural processor
US16/446,610 2019-06-19
PCT/KR2019/007557 WO2019245348A1 (en) 2018-06-22 2019-06-21 Neural processor

Publications (2)

Publication Number Publication Date
JP2021528764A true JP2021528764A (ja) 2021-10-21
JP7337103B2 JP7337103B2 (ja) 2023-09-01

Family

ID=68981979

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020571552A Active JP7337103B2 (ja) 2018-06-22 2019-06-21 ニューラルプロセッサ

Country Status (6)

Country Link
US (6) US20190392287A1 (ja)
JP (1) JP7337103B2 (ja)
KR (1) KR20210013764A (ja)
CN (1) CN112513885B (ja)
TW (1) TWI813708B (ja)
WO (1) WO2019245348A1 (ja)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6442230B2 (ja) * 2014-10-31 2018-12-19 キヤノン株式会社 情報処理装置、同期制御方法、及びプログラム
US11966835B2 (en) 2018-06-05 2024-04-23 Nvidia Corp. Deep neural network accelerator with fine-grained parallelism discovery
US11132124B2 (en) * 2018-06-12 2021-09-28 Intel Corporation Memory subsystem operations with unaligned and scatter gather feature to support convolution and dimension shuffle
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
JP2020000197A (ja) * 2018-06-29 2020-01-09 キヤノン株式会社 計数方法、濃度測定装置及び濃度測定システム
US11769040B2 (en) * 2018-09-10 2023-09-26 Nvidia Corp. Scalable multi-die deep learning system
US11263529B2 (en) * 2018-10-10 2022-03-01 Google Llc Modifying machine learning models to improve locality
JP7227769B2 (ja) * 2019-01-10 2023-02-22 キヤノン株式会社 情報処理装置及びメモリ制御方法
US10963746B1 (en) * 2019-01-14 2021-03-30 Xilinx, Inc. Average pooling in a neural network
CN109976903B (zh) * 2019-02-22 2021-06-29 华中科技大学 一种基于层宽内存分配的深度学习异构计算方法和系统
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
EP3938888A1 (en) * 2019-03-15 2022-01-19 INTEL Corporation Systolic disaggregation within a matrix accelerator architecture
PL3938894T3 (pl) 2019-03-15 2024-02-19 Intel Corporation Zarządzanie pamięcią wielokafelkową dla wykrywania dostępu krzyżowego między kafelkami, zapewnianie skalowanie wnioskowania dla wielu kafelków i zapewnianie optymalnej migracji stron
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US11211944B2 (en) 2019-04-17 2021-12-28 Samsung Electronics Co., Ltd. Mixed-precision compression with random access
US11880760B2 (en) 2019-05-01 2024-01-23 Samsung Electronics Co., Ltd. Mixed-precision NPU tile with depth-wise convolution
US11907827B2 (en) * 2019-06-28 2024-02-20 Intel Corporation Schedule-aware tensor distribution module
US11222092B2 (en) * 2019-07-16 2022-01-11 Facebook Technologies, Llc Optimization for deconvolution
US20210034956A1 (en) * 2019-07-29 2021-02-04 Hysai Inc. Minimum memory digital convolver
US20210110243A1 (en) * 2019-10-10 2021-04-15 Hewlett Packard Enterprise Development Lp Deep learning accelerator system interface
US11513799B2 (en) * 2019-11-04 2022-11-29 Apple Inc. Chained buffers in neural network processor
US11537864B2 (en) 2019-11-26 2022-12-27 Apple Inc. Reduction mode of planar engine in neural processor
RU2732201C1 (ru) * 2020-02-17 2020-09-14 Российская Федерация, от имени которой выступает ФОНД ПЕРСПЕКТИВНЫХ ИССЛЕДОВАНИЙ Метод построения процессоров для вывода в сверточных нейронных сетях, основанный на потоковых вычислениях
US11537865B2 (en) * 2020-02-18 2022-12-27 Meta Platforms, Inc. Mapping convolution to a channel convolution engine
US11797830B2 (en) 2020-03-25 2023-10-24 Western Digital Technologies, Inc. Flexible accelerator for sparse tensors in convolutional neural networks
US11462003B2 (en) * 2020-03-25 2022-10-04 Western Digital Technologies, Inc. Flexible accelerator for sparse tensors in convolutional neural networks
US11604975B2 (en) * 2020-04-09 2023-03-14 Apple Inc. Ternary mode of planar engine for neural processor
US11188778B1 (en) 2020-05-05 2021-11-30 Illumina, Inc. Equalization-based image processing and spatial crosstalk attenuator
US11301214B2 (en) * 2020-06-09 2022-04-12 Verisilicon Microelectronics (Shanghai) Co., Ltd. Device for performing multiply/accumulate operations
US20220066776A1 (en) * 2020-08-25 2022-03-03 Infineon Technologies Ag Accelerating processor based artificial neural network computation
CN112200301B (zh) * 2020-09-18 2024-04-09 星宸科技股份有限公司 卷积计算装置及方法
US11972348B2 (en) 2020-10-30 2024-04-30 Apple Inc. Texture unit circuit in neural network processor
US20220147826A1 (en) * 2020-11-06 2022-05-12 Moffett Technologies Co., Limited Method and system for convolution with workload-balanced activation sparsity
US11665363B2 (en) * 2020-11-26 2023-05-30 Electronics And Telecommunications Research Institute Method, apparatus, system and computer-readable recording medium for feature map information
KR20220078819A (ko) * 2020-12-04 2022-06-13 삼성전자주식회사 딥러닝 연산 수행 방법 및 장치
US20220244916A1 (en) * 2021-01-29 2022-08-04 Taiwan Semiconductor Manufacturing Company, Ltd. Compute in memory
KR102627800B1 (ko) * 2021-05-11 2024-01-23 포항공과대학교 산학협력단 바이너리 뉴럴 네트워크 제어 방법 및 바이너리 뉴럴 네트워크 장치
US11455487B1 (en) * 2021-10-26 2022-09-27 Illumina Software, Inc. Intensity extraction and crosstalk attenuation using interpolation and adaptation for base calling
KR20240037233A (ko) * 2021-07-27 2024-03-21 퀄컴 인코포레이티드 뉴럴 네트워크 가속기에서의 데이터-재사용을 위한 활성화 버퍼 아키텍처
US20230086802A1 (en) * 2021-09-17 2023-03-23 Qualcomm Incorporated Eliminating memory bottlenecks for depthwise convolutions
US20220012012A1 (en) * 2021-09-24 2022-01-13 Martin Langhammer Systems and Methods for Sparsity Operations in a Specialized Processing Block
US11657260B2 (en) * 2021-10-26 2023-05-23 Edgecortix Pte. Ltd. Neural network hardware accelerator data parallelism
US20230140542A1 (en) * 2021-11-01 2023-05-04 Advanced Energy Industries, Inc. Tensor non-linear signal processing random access memory
KR20230063519A (ko) 2021-11-02 2023-05-09 삼성전자주식회사 뉴럴 네트워크 연산 장치 및 방법
US20220129320A1 (en) * 2021-11-05 2022-04-28 Debabrata Mohapatra Schedule-aware dynamically reconfigurable adder tree architecture for partial sum accumulation in machine learning accelerators
US20240028556A1 (en) * 2022-07-25 2024-01-25 Xilinx, Inc. Reconfigurable neural engine with extensible instruction set architecture
US20240104280A1 (en) * 2022-09-22 2024-03-28 Apple Inc. Functional Circuit Block Harvesting in Integrated Circuits
CN115878334B (zh) * 2023-03-08 2023-05-12 深圳云豹智能有限公司 一种数据缓存处理方法及其系统、存储介质、电子设备

Family Cites Families (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5285403A (en) 1989-12-29 1994-02-08 U.S. Philips Corporation Arithmetic processing module to be associated with a microprocessor central processing unit
US5828907A (en) 1992-06-30 1998-10-27 Discovision Associates Token-based adaptive video processing arrangement
US5446916A (en) 1993-03-26 1995-08-29 Gi Corporation Variable length codeword packer
US5499382A (en) 1993-09-20 1996-03-12 Nusinov; Eugene B. Circuit and method of bit-packing and bit-unpacking using a barrel shifter
US6058473A (en) 1993-11-30 2000-05-02 Texas Instruments Incorporated Memory store from a register pair conditional upon a selected status bit
US5509129A (en) 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations
US5805913A (en) 1993-11-30 1998-09-08 Texas Instruments Incorporated Arithmetic logic unit with conditional register source selection
US6016538A (en) 1993-11-30 2000-01-18 Texas Instruments Incorporated Method, apparatus and system forming the sum of data in plural equal sections of a single data word
US6055204A (en) 1997-04-29 2000-04-25 Texas Instruments Incorporated Circuits, systems, and methods for re-mapping memory column redundancy
US6259456B1 (en) 1997-04-30 2001-07-10 Canon Kabushiki Kaisha Data normalization techniques
US5857035A (en) 1997-05-19 1999-01-05 Hewlett-Packard Company Arithmetic coding compressor for encoding multiple bit values
US6490357B1 (en) 1998-08-28 2002-12-03 Qualcomm Incorporated Method and apparatus for generating encryption stream ciphers
US6195026B1 (en) 1998-09-14 2001-02-27 Intel Corporation MMX optimized data packing methodology for zero run length and variable length entropy encoding
US7174047B2 (en) 2002-03-29 2007-02-06 Matsushita Electric Industrial Co., Ltd. Single-instruction multiple-data (SIMD)-based algorithms for processing video data
US7202872B2 (en) 2003-10-29 2007-04-10 Via Technologies, Inc. Apparatus for compressing data in a bit stream or bit pattern
US8223966B2 (en) 2006-05-10 2012-07-17 Mediatek Inc. Multiple stream decrypting and decoding systems and related methods thereof
US7898550B2 (en) 2006-06-09 2011-03-01 Via Technologies, Inc. System and method for memory bandwidth compressor
US8069377B2 (en) 2006-06-26 2011-11-29 Micron Technology, Inc. Integrated circuit having memory array including ECC and column redundancy and method of operating the same
US8285766B2 (en) 2007-05-23 2012-10-09 The Trustees Of Princeton University Microprocessor shifter circuits utilizing butterfly and inverse butterfly routing circuits, and control circuits therefor
US8638850B2 (en) * 2009-05-06 2014-01-28 Advanced Micro Devices, Inc. Execution units for context adaptive binary arithmetic coding (CABAC)
CN104252331B (zh) * 2013-06-29 2018-03-06 华为技术有限公司 乘累加器
US20150161927A1 (en) 2013-12-05 2015-06-11 Innolux Corporation Driving apparatus with 1:2 mux for 2-column inversion scheme
US9978014B2 (en) * 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US11100420B2 (en) 2014-06-30 2021-08-24 Amazon Technologies, Inc. Input processing for machine learning
US9785565B2 (en) 2014-06-30 2017-10-10 Microunity Systems Engineering, Inc. System and methods for expandably wide processor instructions
US10216520B2 (en) 2014-10-06 2019-02-26 Via Technologies, Inc. Compressing instruction queue for a microprocessor
KR102276339B1 (ko) 2014-12-09 2021-07-12 삼성전자주식회사 Cnn의 근사화를 위한 학습 장치 및 방법
US9418458B2 (en) 2015-01-05 2016-08-16 Superfish Ltd. Graph image representation from convolutional neural networks
US10049322B2 (en) * 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US10438117B1 (en) * 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US9805303B2 (en) 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US9747546B2 (en) * 2015-05-21 2017-08-29 Google Inc. Neural network processor
US20160358069A1 (en) 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
US10460230B2 (en) * 2015-06-04 2019-10-29 Samsung Electronics Co., Ltd. Reducing computations in a neural network
EP3104309B1 (en) 2015-06-10 2020-04-01 Samsung Electronics Co., Ltd. Spiking neural network with reduced memory access and reduced in-network bandwidth consumption
US11244225B2 (en) 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
US10664751B2 (en) 2016-12-01 2020-05-26 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either cache memory or neural network unit memory
US10353860B2 (en) * 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Neural network unit with neural processing units dynamically configurable to process multiple data sizes
JP6983154B2 (ja) * 2015-10-28 2021-12-17 グーグル エルエルシーGoogle LLC 計算グラフの処理
US9904874B2 (en) 2015-11-05 2018-02-27 Microsoft Technology Licensing, Llc Hardware-efficient deep convolutional neural networks
WO2017129325A1 (en) 2016-01-29 2017-08-03 Fotonation Limited A convolutional neural network
NL2016285B1 (en) 2016-02-19 2017-09-20 Scyfer B V Device and method for generating a group equivariant convolutional neural network.
FR3050846B1 (fr) 2016-04-27 2019-05-03 Commissariat A L'energie Atomique Et Aux Energies Alternatives Dispositif et procede de distribution de donnees de convolution d'un reseau de neurones convolutionnel
US11055063B2 (en) 2016-05-02 2021-07-06 Marvell Asia Pte, Ltd. Systems and methods for deep learning processor
CA3045439A1 (en) 2016-05-09 2017-11-16 Charles Howard CELLA Methods and systems for the industrial internet of things
CA2990709C (en) 2016-05-26 2018-09-04 The Governing Council Of The University Of Toronto Accelerator for deep neural networks
CN105913823A (zh) 2016-06-23 2016-08-31 武汉华星光电技术有限公司 高解析度解复用器驱动电路
KR20180012439A (ko) 2016-07-27 2018-02-06 삼성전자주식회사 회선 신경망에서 가속기 및 이의 동작 방법
US10528864B2 (en) 2016-08-11 2020-01-07 Nvidia Corporation Sparse convolutional neural network accelerator
US10621486B2 (en) 2016-08-12 2020-04-14 Beijing Deephi Intelligent Technology Co., Ltd. Method for optimizing an artificial neural network (ANN)
US10802992B2 (en) 2016-08-12 2020-10-13 Xilinx Technology Beijing Limited Combining CPU and special accelerator for implementing an artificial neural network
IL281321B (en) * 2016-10-04 2022-07-01 Magic Leap Inc Efficient data layouts for convolutional neural networks
US9940534B1 (en) 2016-10-10 2018-04-10 Gyrfalcon Technology, Inc. Digital integrated circuit for extracting features out of an input image based on cellular neural networks
US9959498B1 (en) 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10175980B2 (en) * 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US11003985B2 (en) 2016-11-07 2021-05-11 Electronics And Telecommunications Research Institute Convolutional neural network system and operation method thereof
KR20180051987A (ko) 2016-11-09 2018-05-17 삼성전자주식회사 인공 신경망의 연산 처리 경로 관리 방법
US10733505B2 (en) * 2016-11-10 2020-08-04 Google Llc Performing kernel striding in hardware
US20180150256A1 (en) 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10417560B2 (en) * 2016-12-01 2019-09-17 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs efficient 3-dimensional convolutions
US10423876B2 (en) * 2016-12-01 2019-09-24 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either victim cache or neural network unit memory
US11048997B2 (en) 2016-12-27 2021-06-29 Texas Instruments Incorporated Reduced complexity convolution for convolutional neural networks
CN106844294B (zh) 2016-12-29 2019-05-03 华为机器有限公司 卷积运算芯片和通信设备
US10521488B1 (en) * 2016-12-30 2019-12-31 X Development Llc Dynamic partitioning
US20180189641A1 (en) 2017-01-04 2018-07-05 Stmicroelectronics S.R.L. Hardware accelerator engine
US10096134B2 (en) * 2017-02-01 2018-10-09 Nvidia Corporation Data compaction and memory bandwidth reduction for sparse neural networks
JP6794854B2 (ja) 2017-02-02 2020-12-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US20180253636A1 (en) 2017-03-06 2018-09-06 Samsung Electronics Co., Ltd. Neural network apparatus, neural network processor, and method of operating neural network processor
US10067509B1 (en) 2017-03-10 2018-09-04 TuSimple System and method for occluding contour detection
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
US10860760B2 (en) * 2017-04-21 2020-12-08 Intel Corporation Systems and methods for implementing learned parameter systems on a programmable integrated circuit
US10410098B2 (en) 2017-04-24 2019-09-10 Intel Corporation Compute optimizations for neural networks
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10706147B1 (en) 2017-05-19 2020-07-07 Amazon Technologies, Inc. Mitigating side-channel attacks via shared cache
US10990648B2 (en) 2017-08-07 2021-04-27 Intel Corporation System and method for an optimized winograd convolution accelerator
US10600147B2 (en) 2017-08-22 2020-03-24 Intel Corporation Efficient memory layout for enabling smart data compression in machine learning environments
US10699160B2 (en) 2017-08-23 2020-06-30 Samsung Electronics Co., Ltd. Neural network method and apparatus
US11803377B2 (en) 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
US20190087713A1 (en) 2017-09-21 2019-03-21 Qualcomm Incorporated Compression of sparse deep convolutional network weights
US10558386B2 (en) 2017-09-22 2020-02-11 Kabushiki Kaisha Toshiba Operation device and operation system
US10366322B2 (en) 2017-10-06 2019-07-30 DeepCube LTD. System and method for compact and efficient sparse neural networks
JP6961725B2 (ja) 2017-10-16 2021-11-05 イルミナ インコーポレイテッド 深層畳み込みニューラルネットワークのアンサンブルを訓練するための半教師あり学習
GB2560600B (en) 2017-11-06 2020-03-04 Imagination Tech Ltd Nueral Network Hardware
EP3480748A1 (en) 2017-11-06 2019-05-08 Imagination Technologies Limited Neural network hardware
US10721114B2 (en) * 2017-11-23 2020-07-21 Huawei Technologies Co., Ltd. Method and system for symbol sequence generation and transmission for non-orthogonal multiple access transmission
US11010658B2 (en) * 2017-12-22 2021-05-18 Intel Corporation System and method for learning the structure of deep convolutional neural networks
EP3506084B1 (en) 2017-12-28 2020-09-23 IMEC vzw System and method for tunable precision of dot-product engine
CN108133270B (zh) * 2018-01-12 2020-08-04 清华大学 卷积神经网络加速方法及装置
US10459876B2 (en) 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element
US11341397B1 (en) 2018-04-20 2022-05-24 Perceive Corporation Computation of neural network node
CN112106078A (zh) 2018-05-08 2020-12-18 多伦多大学管理委员会 神经网络处理元件
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US20210011732A1 (en) 2019-07-09 2021-01-14 MemryX Inc. Matrix Data Reuse Techniques in Processing Systems

Also Published As

Publication number Publication date
US20200026978A1 (en) 2020-01-23
CN112513885B (zh) 2024-02-27
US11775802B2 (en) 2023-10-03
US11775801B2 (en) 2023-10-03
JP7337103B2 (ja) 2023-09-01
WO2019245348A1 (en) 2019-12-26
KR20210013764A (ko) 2021-02-05
US11620491B2 (en) 2023-04-04
US20200026979A1 (en) 2020-01-23
US20230351151A1 (en) 2023-11-02
US20200026980A1 (en) 2020-01-23
CN112513885A (zh) 2021-03-16
US20190392287A1 (en) 2019-12-26
US20200234099A1 (en) 2020-07-23
TW202014935A (zh) 2020-04-16
TWI813708B (zh) 2023-09-01

Similar Documents

Publication Publication Date Title
JP2021528764A (ja) ニューラルプロセッサ
JP7349438B2 (ja) ニューラル・ネットワーク・アクセラレータ
TWI667612B (zh) 裝置與運作裝置之方法
TWI662485B (zh) 裝置,運作裝置之方法與其電腦程式產品
Song et al. C-Brain: A deep learning accelerator that tames the diversity of CNNs through adaptive data-level parallelization
KR102655386B1 (ko) 인공 신경망에서의 분산 및 협력 계산을 위한 방법 및 장치
KR101997325B1 (ko) 라스트 레벨 캐시 성분 또는 신경망 유닛 메모리로서 동작 가능한 메모리 어레이를 가지는 프로세서
CN101055644B (zh) 绘图处理装置及其处理指令、数据和逻辑单元操作的方法
JP6373991B2 (ja) フィルタベクトル処理動作のためのタップ付き遅延線を利用するベクトル処理エンジンと、関連するベクトル処理システムおよび方法
CN1272705C (zh) 包括纯量算术逻辑单元的单指令多数据处理机
JP6339197B2 (ja) 実行ユニットとベクトルデータメモリとの間のマージング回路を備えるベクトル処理エンジンおよび関連する方法
JP2016537723A (ja) フィルタベクトル処理動作のためのタップ付き遅延線を利用するベクトル処理エンジンと、関連するベクトル処理システムおよび方法
CN110443360A (zh) 用于操作处理器的方法
CN112506567B (zh) 数据读取方法和数据读取电路
CN108805275A (zh) 可编程设备及其操作方法和计算机可用介质
CN102629238B (zh) 支持向量条件访存的方法和装置
CN116301920B (zh) 一种用于部署cnn模型至基于fpga的高性能加速器的编译系统
Wang et al. FP-AMR: A Reconfigurable Fabric Framework for Adaptive Mesh Refinement Applications
CN111832716A (zh) 处理器
WO2023065701A1 (zh) 内积处理部件、任意精度计算设备、方法及可读存储介质
CN110766150A (zh) 一种深度卷积神经网络硬件加速器中的区域并行数据载入装置及方法
Cain et al. Convolution processing unit featuring adaptive precision using dynamic reconfiguration
Wu et al. Efficient inference of large-scale and lightweight convolutional neural networks on FPGA
CN115705167A (zh) 在可重新配置计算结构中对外部存储器进行索引
CN111797585A (zh) 一种深度卷积神经网络硬件加速器中的可伸缩的并行数据载入装置及其设计方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220513

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230725

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230822

R150 Certificate of patent or registration of utility model

Ref document number: 7337103

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150