JP2023107786A - オンチップ動作の初期化 - Google Patents

オンチップ動作の初期化 Download PDF

Info

Publication number
JP2023107786A
JP2023107786A JP2023081795A JP2023081795A JP2023107786A JP 2023107786 A JP2023107786 A JP 2023107786A JP 2023081795 A JP2023081795 A JP 2023081795A JP 2023081795 A JP2023081795 A JP 2023081795A JP 2023107786 A JP2023107786 A JP 2023107786A
Authority
JP
Japan
Prior art keywords
hardware
tile
tiles
data
program data
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.)
Pending
Application number
JP2023081795A
Other languages
English (en)
Other versions
JP2023107786A5 (ja
Inventor
クリフォード・ビッフル
Biffle Clifford
ミシャル・アレン・ギュンター
Allen Gunter Michial
ライナー・ポープ
Pope Reiner
パヴェル・クラチェフスキー
Krajcevski Pavel
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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of JP2023107786A publication Critical patent/JP2023107786A/ja
Publication of JP2023107786A5 publication Critical patent/JP2023107786A5/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • G06F30/347Physical level, e.g. placement or routing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/177Initialisation or configuration control
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/25Routing or path finding in a switch fabric
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/10Packet switching elements characterised by the switching fabric construction
    • H04L49/109Integrated on microchip, e.g. switch-on-chip
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2115/00Details relating to the type of the circuit
    • G06F2115/06Structured ASICs
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/25Routing or path finding in a switch fabric
    • H04L49/253Routing or path finding in a switch fabric using establishment or release of connections between ports
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/30Peripheral units, e.g. input or output ports

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Biomedical Technology (AREA)
  • Data Mining & Analysis (AREA)
  • Neurology (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Geometry (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Logic Circuits (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)

Abstract

【課題】半導体チップの構成を初期化することに関する。【解決手段】複数のハードウェアタイルを含む集積回路を構成する方法は、複数のハードウェアタイルのうちの最後のハードウェアタイルを除いて各ハードウェアタイルをデータ転送状態となるように構成することによって、複数のハードウェアタイルを通るデータ転送経路を確立することであって、最後のハードウェアタイルを除いて各ハードウェアタイルを転送状態となるように構成することが、ハードウェアタイルがデータ転送状態にある時間の対応する既定の長さを指定するそれぞれの転送状態カウンタをインストールすることを含むことと、データ転送経路に沿って、ハードウェアタイル用のプログラムデータを備えるそれぞれのプログラムデータパケットを複数のハードウェアタイルの各ハードウェアタイルに供給することと、複数のハードウェアタイルのハードウェアタイルごとにそれぞれのプログラムデータをインストールすることとを含む。【選択図】図1

Description

本開示は、集積回路動作と、様々な集積回路ハードウェアブロックの個別の動作を初期化することに関する。
プロセッサおよびマイクロコントローラチップによって送信されるデータは、データがどこに送られるべきかを指定するヘッダなどの、符号化された情報を含むことが多い。したがって、そのようなデータを受信する互いのプロセッサまたはマイクロコントローラは、ヘッダを復号するための復号論理を含まなければならず、受信データが、セーブされるべきか、プロセッサまたはマイクロコントローラを初期化するためにインストールされるべきか、それともまた別の回路に転送されるべきかという決定を行わなければならない。
一般に、本開示は、半導体チップの構成を初期化することに関し、チップ上で実行される動作は、明示的にスケジュールされる(動作は「確定的」であると言われることがある)。より具体的には、本開示は、個別のハードウェアブロックに分割された半導体チップに関し、データは、明示的なスケジュールに従ってハードウェアブロックの間で転送される。受信データをインストールすべきか、メモリにセーブすべきか、それとも別のハードウェアブロックに転送すべきかを、受信データの内容に基づいて決定する、復号論理または類似の機能を含むようにハードウェアブロックを構成するのではなく、ハードウェアブロックは、代わりに、所定のアクションに従って事前にデータに対処するように構成される。このようにして、ハードウェアブロックは、受信されるデータの最終的な宛先について「アグノスティック」として特徴づけられ得る。
一般に、いくつかの態様では、本開示の主題は、複数のハードウェアタイルを含む集積回路を構成する方法において実施され、方法は、複数のハードウェアタイルのうちの最後のハードウェアタイルを除いて各ハードウェアタイルをデータ転送状態となるように構成することによって、複数のハードウェアタイルを通るデータ転送経路を確立することであって、最後のハードウェアタイルを除いて各ハードウェアタイルを転送状態となるように構成することが、ハードウェアタイルがデータ転送状態にある時間の対応する既定の長さを指定するそれぞれの転送状態カウンタをインストールすることを含むことと、データ転送経路に沿って、ハードウェアタイル用のプログラムデータを備えるそれぞれのプログラムデータパケットを複数のハードウェアタイルの各ハードウェアタイルに供給することと、複数のハードウェアタイルのハードウェアタイルごとにそれぞれのプログラムデータをインストールすることとを含む。
本方法の実装形態は、以下の特徴のうちの1つまたは複数を含んでもよい。たとえば、いくつかの実装形態では、複数のハードウェアタイルのうちの最後のハードウェアタイルを除いて各ハードウェアタイルの転送状態カウンタは、データ転送経路を通過した最初のデータパケットを受信するとインストールされる。最初のデータパケットは、複数のハードウェアタイルのうちの最後のハードウェアタイル用のプログラムデータを含むプログラムデータパケットを含んでもよい。
いくつかの実装形態では、ハードウェアタイルごとにそれぞれの転送状態カウンタをインストールすることは、ハードウェアタイルのトリガテーブルの中で転送状態カウンタを定義することを含む。各ハードウェアタイルの転送状態カウンタが時間の対応する既定の長さに達すると、トリガテーブルは、ハードウェアタイル用のプログラムデータのインストールをトリガしてもよく、ハードウェアタイルをデータ転送状態から退出させてもよい。それぞれの転送状態カウンタを含むハードウェアタイルごとに、転送状態カウンタの時間の対応する既定の長さは、データ転送経路の中の後続のハードウェアタイルの個数の関数である。
いくつかの実装形態では、複数のハードウェアタイルの各ハードウェアタイルは、ハードウェアタイル用のそれぞれのプログラムデータをローカルメモリの中に記憶する。
いくつかの実装形態では、それぞれの転送状態カウンタを含む各ハードウェアタイルは、データ転送経路の中の少なくとも1つの他のハードウェアタイルに少なくとも1つのプログラムデータパケットを転送する。
いくつかの実装形態では、各ハードウェアタイルは、回路要素のシストリックアレイ(systolic array)を含む。
いくつかの実装形態では、複数のタイルは、1次元または2次元のアレイとして配置される。
いくつかの実装形態では、方法は、ハードウェアタイル上にインストールされるプログラムデータによって定義された動作をハードウェアタイルが開始するまでの時間の対応する既定の長さを指定する、それぞれのキックオフカウンタを、複数のハードウェアタイルのうちの少なくともいくつかにおいてインストールすることをさらに含む。複数のハードウェアタイルのうちの最後のハードウェアタイルを除いて各ハードウェアタイルのそれぞれのキックオフカウンタは、最初のデータパケットを受信するとインストールされてよい。キックオフカウンタごとの時間の既定の長さが異なってよい。キックオフカウンタごとの時間の既定の長さは、データ転送経路の中のハードウェアタイルの個数の関数であってよい。キックオフ状態カウンタごとの時間の既定の長さは、複数のハードウェアタイルがそれらのそれぞれのプログラムデータを同時に実行するように定義されてもよい。各ハードウェアタイルのそれぞれのキックオフカウンタをインストールすることは、ハードウェアタイルのトリガテーブルの中でキックオフカウンタを定義することを含んでもよい。
概して、いくつかの他の態様では、本開示の主題は、複数のハードウェアタイルを含む集積回路を構成する方法において実施されてよく、方法は、複数のタイルのうちの最後のハードウェアタイルを除いて複数のタイルのうちの各ハードウェアタイルを通るデータ転送経路を確立することを含み、データ転送経路を確立することは、(a)タイル用のプログラムデータをインストールすること、(b)転送状態となるようにタイルを構成すること、および(c)ハードウェアタイルがデータ転送状態にある時間の対応する既定の長さを指定するプログラムキックオフカウンタをインストールすることによって、データ転送経路の各ハードウェアタイルを順次構成することを含む。
これらの方法の実装形態は、以下の特徴のうちの1つまたは複数を含んでもよい。たとえば、いくつかの実装形態では、データ転送経路の特定のタイルに対して、時間の既定の長さは、プログラムデータがまだインストールされていない、複数のタイル内のタイルの個数の関数である。
いくつかの実装形態では、各プログラムキックオフカウンタが時間の対応する既定の長さに達した後、プログラムキックオフカウンタがその上にインストールされるタイルは、タイル上にインストールされたプログラムデータに従って動作を実行し始める。
様々な実装形態は、以下の利点のうちの1つまたは複数を含む。たとえば、いくつかの実装形態では、本明細書で説明するプロセスは、内部ハードウェアブロックがそれらのデータソースに直接配線されることを必要とすることなく、ハードウェアブロックのアレイ内に内部的に位置する複数のハードウェアブロックの構成が構成されることを可能にする。いくつかの実装形態では、本明細書で説明するプロセスは、データパケット内で宛先データを符号化する必要なくハードウェアブロックの構成を可能にする。いくつかの実装形態では、本明細書で説明するプロセスは、ハードウェアブロックの中に復号論理をインストールする必要なくハードウェアブロックが構成されることを可能にする。
1つまたは複数の実施形態の詳細は、添付の図面および以下の説明に示されている。他の特徴および利点は、説明、図面、および特許請求の範囲から明らかになろう。
スケジュールされた動作に従って動作するように構成された例示的な集積回路デバイスを示す概略図である。 構成データを用いてハードウェアタイルを初期化するための例示的なプロセスを示すフローチャートである。 ハードウェアタイルのグループを初期化するためのプロセスの一例を示すフロー図である。 トリガテーブルの一例を示す概略図である。 スケジュールされた動作に従って動作するように構成できる専用論理回路の例を示す概略図である。 図5のASICチップにおいて使用されるタイルの例を示す概略図である。 ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。 ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。 ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。 ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。 ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。 ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。 ASICによって実施される例示的なプロセスのそれぞれに異なる時間におけるASICによるデータフローの概要を示す概略図である。 図7Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。 図8Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。 図9Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。 図10Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。 図12Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。 図13Aに関連する時間におけるASICの単一のタイル内のデータフローの詳細を示す概略図である。
一般に、本開示は、半導体チップの構成を初期化することに関し、チップ上で実行される動作は、明示的にスケジュールされる(動作は「確定的」であると言われることがある)。一例では、半導体チップは、個別のハードウェアブロックに分割されることがあり、データは、明示的なスケジュールに従ってハードウェアブロックの間で転送される。より具体的には、個別のハードウェアブロックは、半導体チップによって実行される調整済みプログラムを全体として実行するように個別化された動作スケジュールに従って動作してもよい。言い換えると、個別のハードウェアブロックは、たとえば、制御信号に応答してまたはプロセス命令のスケジュールされない連番リストに従って動作を実行するのではなく、クロック(たとえば、カウンタ)に従ってスケジュールされた時間においてそれぞれの動作を実行する。各ハードウェアブロックは、他のハードウェアブロックによって実行されるタスクとは無関係にタスクの特定のセットを実行するように構成されたチップ上の電気回路(たとえば、論理回路)のサブセットなどの複製された論理の関連するセットを表す。これらの動作は、限定はしないが、データ転送動作、初期化動作、行列演算、ベクトル演算、スカラ演算、論理演算、メモリアクセス動作、外部通信動作、またはそれらの組合せを含む。
受信データが(たとえば、ハードウェアブロックの中でのプログラム動作を初期化するために)インストールされるべきか、メモリにセーブされるべきか、それとも別のハードウェアブロックに転送されるべきかを決定する、復号論理または類似の機能を含むようにハードウェアブロックを構成するのではなく、本開示のハードウェアブロックは、代わりに、特定の方式で事前にデータに対処するように構成される。たとえば、ハードウェアブロックは、受信データを(たとえば、ハードウェアブロックの中でのプログラム動作を初期化するために)インストールするか、受信データをメモリにセーブするか、または受信データを別のハードウェアブロックに転送するように、事前に構成されてもよい。このようにして、ハードウェアブロックは、受信されるデータとは無関係に特定のやり方でデータに対処するように事前構成されるものとして特徴づけられ得る。ハードウェアブロックは、動作のスケジュールの実行中の既定の時間において/の間に特定の方式で事前にデータに対処するように構成されてよく、すなわち、ハードウェアブロックは、既定の時間においてデータに対処するやり方を変えるように構成されてよい。
各ハードウェアブロックは、ハードウェアブロック固有の動作の個別のスケジュールを実行する。各ハードウェアブロックについての個別のスケジュールは合わせて、チップ全体によって実行される完全なプログラム(たとえば、ニューラルネットワーク動作)を表す。しかしながら、そのような動作を実行する前に、実行されるべき特定の動作を指定するプログラムデータが、各ハードウェアブロックに配信され、各ハードウェアブロック上にインストールされる。復号論理を含めることなく各ハードウェアブロックにプログラムデータを提供するために、1つのオプションは、プログラムデータのソースを各ブロックに直接配線することである。多数のハードウェアブロックの場合、その量の配線は、相当量の実装面積を必要とすることがあり、解決策として支持できなくなることがある。
代替的に、本開示で説明するように、ハードウェアブロックのうちの一部(たとえば、ブロックの2次元アレイの中の最も外側のハードウェアブロック)しかプログラムデータのソースに直接つなげられない。アレイに内部的に位置するハードウェアブロックに到達するために、ハードウェアブロックのグループは、各グループが内部ブロックへのデータ転送経路を確立するようなデータ転送状態に置かれてよい。転送状態での各ハードウェアブロックは、そのハードウェアブロックに固有の所定の時間量の後、新しい非データ転送状態に自動的に再構成してもよい。たとえば、1つまたは複数のハードウェアブロックが、ハードウェアブロックの中で受信されたデータを記憶するデータ記憶状態に自動的に再構成してもよい。代替的に、または追加として、1つまたは複数のハードウェアブロックは、ハードウェアブロックによって実行されるようにプログラムを初期化するデータ初期化状態に自動的に再構成してもよく、プログラムは受信データによって定義される。場合によっては、ハードウェアブロックは、所定のカウンタ時間においてプログラムデータによって指定される、スケジュールされた動作を実行してもよい。
いくつかの実装形態では、ハードウェアブロックを含む半導体チップは、機械学習動作を実行するように設計された特定用途向け集積回路(ASIC)である。ASICは、たとえば、特定の用途向けにカスタマイズされた集積回路(IC)を含む。たとえば、ASICは、たとえば、画像内の物体をディープニューラルネットワーク、機械翻訳、音声認識、または他の機械学習アルゴリズムの一部として認識することを含む、機械学習モデルの動作を実行するように設計されてもよい。ASICは、たとえば、ニューラルネットワーク用のアクセラレータとして使用されるとき、ニューラルネットワークへの入力を受信し、入力用のニューラルネットワーク推論を算出することができる。ニューラルネットワーク層へのデータ入力、たとえば、ニューラルネットワークへの入力またはニューラルネットワークの別の層の出力のいずれかを作動入力と呼ぶことができる。推論は、ニューラルネットワークの層に関連する重み入力のそれぞれのセットに従って算出することができる。たとえば、いくつかまたはすべての層は、作動入力のセットを受信し、層についての重み入力のセットに従って作動入力を処理して出力を生成してもよい。さらに、ニューラルネットワーク推論を算出するように実行される演算動作の反復性が、明示的にスケジュールされたチップ動作を促進する。
図1は、本開示による集積回路チップ10の簡略化された例を示す概略図である。チップ10は、汎用集積回路または専用集積回路とすることができる。たとえば、チップ10は、ASIC、フィールドプログラマブルゲートアレイ(FPGA)、グラフィックス処理ユニット(GPU)、または任意の他の適切な集積回路とすることができる。チップ10は、アレイとして配置された、本明細書では「タイル」とも呼ばれる(「A」、「B」、および「C」とラベル付けされた)複数のハードウェアブロック14を含む。ハードウェアタイル14は、データバス16を使用して互いに結合されてよい。図1には3つのハードウェアタイル14しか示されないが、チップ10は、特に、たとえば、10、20、30、40、50、100、または200個などの、他の個数のハードウェアタイルを含んでもよい。さらに、直線的なアレイとして配置されるものとしてハードウェアタイル14が示されるが、ハードウェアタイル14は、複数の行および複数の列を有する2次元アレイなどの、他の構成として同じく配置されてもよい。チップ10はまた、通信インターフェース12を含む。通信インターフェース12は、データバス17を使用して少なくとも第1のハードウェアタイル14(たとえば、タイルA)に結合される。通信インターフェース12は、たとえば、シリアライザ/デシリアライザ(SerDes)インターフェースの1つまたは複数のセット、および汎用入出力(GPIO)インターフェースを含んでもよい。SerDesインターフェースは、ASIC10のためのデータ(たとえば、本明細書で説明するようなハードウェアタイル用の構成データまたはプログラムデータ)を受信するように、かつASIC10から外部回路へデータを出力するように構成される。チップ10は、図示および説明のために簡略的に示されている。しかしながら、いくつかの実装形態では、チップ10は、メモリ、およびチップ10の目的にとって適切な他の回路などの、追加構成要素を含む。
ハードウェアタイル14は、他のハードウェアタイル14によって実行されるタスクとは無関係にタスクの特定のセットを実行するように設計されたチップ10上の電気回路(たとえば、論理回路)のサブセットなどの複製された論理のセットを表す。各ハードウェアタイル14は、同じかまたは異なるタイプの回路を表すことができ、たとえば、ハードウェアタイルA、B、およびCは、機械学習機能を実行するように設計された専用チップのタイルを表すことができる(以下でより詳細に説明する)。たとえば、ハードウェアタイルA、BおよびCは、行列演算を実行するように構成されたニューラルネットワークの計算ノードを表すことができる。
ハードウェアタイル14の動作は、チップ10上の共通クロック信号に従って所定の時間において実行されてよい。各ハードウェアタイル14は、それ自体の個別化された動作スケジュールに従って動作する。動作スケジュールは各々、チップ10全体によって実行されるべきプログラムの一部分(たとえば、「サブプログラム」)を表し、各動作スケジュールは、対応する個別のハードウェアタイル14によって実行されるべきプログラムの部分を表す。動作スケジュールは、ハードウェアタイル14によって所定のカウンタ値において実行すべきプログラム動作のセットを含む。言い換えると、動作スケジュールは、事前スケジュールされた「チップ時間」において、特定のハードウェアタイル14によって実行されるように特定の動作(たとえば、図4を参照されたい)をトリガする、タイマのリストと見なすことができる。たとえば、各スケジュールは、カウンタ値において実行すべき関連する動作を含む実行カウンタ値(たとえば、実行時間)のリストを含むことができる。いくつかの例では、各動作は、スケジュールされたカウンタ値、および特定のハードウェアタイル14によってスケジュールされたカウンタ値において実行すべき動作を特定する命令コードなどのデータによって表される。ハードウェアタイル14によって実行される動作は、他のハードウェアタイルによって実行される動作に対して調整されてよい。動作スケジュールは、以下でより詳細に説明する「トリガテーブル」を使用して各タイル上で実施されてよい。
図1に示すように、各ハードウェアタイル14は、制御回路18、ローカルメモリ20、および1つまたは複数の計算ユニット22を含むことができる。いくつかの実装形態では、動作スケジュールによって指定されるプログラムは、ハードウェアタイル14のローカルメモリ20に記憶することができる。演算ユニット22は、特定の計算、たとえば、加算、減算、乗算、論理演算などを実行するように構成された電気回路を表す。制御回路18は、メモリ20に記憶されたプログラムの動作を読み取って実行するように構成され得る。たとえば、制御回路18は、スケジュールされた動作を実行するためにメモリ20、入力バッファ、またはバス16と適切な計算ユニット22との間でデータをルーティングするマルチプレクサおよびフリップフロップなどの制御要素を含むことができる。本明細書で述べたように、プログラムの動作スケジュールは、制御回路18をトリガして特定のカウンタ値において特定の機能の実行を開始する一連のタイマとして働くことができる。したがって、動作スケジュールは、制御回路18の制御要素をトリガしてハードウェアタイル14内のデータを適切な計算ユニット22にルーティングし、スケジュールされた時間にスケジュールされた動作を実行することができる。
本明細書で説明するように、ハードウェアタイルについて動作スケジュールを定義するプログラムデータが、最初に各ハードウェアタイル14に提供されなければならず、各ハードウェアタイル14上で初期化されなければならない。通信インターフェース12に直接結合されていないタイルに到達するために、ハードウェアタイル14のグループ(たとえば、タイルAおよびB)は、データ転送経路を確立するために個別にデータ転送に置かれてよい。個別のタイル14のためのプログラムデータが、次いで、通信インターフェース12から転送経路に沿って送られてよい。各ハードウェアタイル14がその対応するプログラムデータを受信した後、タイル14は、所定の時間量の後、新しい非データ転送状態に自動的に再構成し得る。この新しい状態において、タイル14は、プログラムデータによって定義された動作を実行するか、または代替的に、いくつかの他の機能を実行するように初期化されてよい。
図2は、既定のプログラムを実行するようにハードウェアタイルをロードおよび初期化するための例示的なプロセス(30)を示すフローチャートである。プロセス(30)は、図1に示す例示的なチップ10に関して説明されるが、ハードウェアタイルのアレイを含む他のチップに適用可能である。本開示では、構成データパケットは、タイルに状態を変更させる、たとえば、タイルが受信データパケットの中のデータを読み取るように動作可能な状態から、タイルが受信データパケットを転送するように動作可能な状態に変更させるか、またはタイルが受信データパケットを転送するように動作可能な状態から、タイルが受信データパケットの中のデータを読み取るように動作可能な状態に変更させる、構成データを含む。本開示では、プログラムデータパケットは、ハードウェアタイルについての動作スケジュールを定義するプログラムデータを含む。
最初のステップ(32)では、ハードウェアタイル14のアレイの中のハードウェアタイル14のグループ(たとえば、タイルA、B、およびC)に沿って、データ転送経路が確立される。データ転送経路を確立することによって、通信インターフェース12からのデータは、通信バス16によってインターフェース12に直接結合されていない内部タイル14に到達することができる。データ転送経路を確立することは、アレイの中の最後のハードウェアタイル(たとえば、ハードウェアタイルC)を除いて各ハードウェアタイル14を、対応する既定の時間量にわたって転送状態となるように構成すること(33)を含む。転送状態にある間、タイル14は、1つまたは複数のデータリンクを介して、データ転送経路の中の他のタイル14のうちの1つまたは複数に受信データパケットを転送するように動作可能である。
アレイの中の最後のハードウェアタイルを除いて各ハードウェアタイル14を転送状態となるように構成するプロセス(33)は、転送状態となるようにタイル14を構成する対応する構成データを、最後のタイル14を除いて各ハードウェアタイル14へ連続的に送ることを含む。構成データを送ることは、複数の異なるやり方で達成され得る。たとえば、いくつかの実装形態では、構成データを送ることは、複数のヘッダを有する単一のデータパケットをアレイの中の第1のタイルへ送ることを含む。データパケットの各ヘッダは、状態を変更するようにタイルを構成するタイルアグノスティックデータを含んでもよい。データパケットを受信すると、アレイの中の第1のタイルは、データパケットの第1のヘッダを読み取り、第1のヘッダの構成データに基づいて状態を変更する。たとえば、構成データは、タイルの状態を転送状態に変更してもよい。データパケットは、次いで、第1のタイルによってアレイの中の次の(第2の)タイルに渡されてよく、ここで、第2のタイルは、データパケットの第2のヘッダを読み取り、第2のヘッダの構成データに基づいて状態を変更する。たとえば、構成データは、第2のタイルの状態を転送状態に変更してもよい。アレイの中の各タイルに対して、またはNタイルアレイの最初のN-1個のタイルのみに対して、このことが継続してよい。
いくつかの実装形態では、別個のデータパケットがタイルへ送信され、各データパケットはそれ自体の構成データを有する。たとえば、構成データを有する第1のデータパケットが第1のタイルへ送られてよく、その後、第1のタイルは、(たとえば、第1のタイル状態を転送状態に変更するために)構成データをインストールしてよい。次いで、構成データを有する第2のデータパケットが第1のタイルへ送られてよく、第1のタイルは、第2のデータパケットをアレイの中の第2のタイルに転送する。第2のデータパケットを受信すると、第2のタイルは、(たとえば、第2のタイル状態を転送状態に変更するために)構成データをインストールしてよい。アレイの中の各タイルに対して、またはNタイルアレイの最初のN-1個のタイルのみに対して、このことが継続してよい。
ハードウェアタイルA、B、およびCに沿って転送データ経路を確立する例示的なプロセスはまた、図3の時間フロー図に示される。たとえば、一例では、通信インターフェース12などのデータソースは、時間t1において、構成データを含む第1のデータパケットを図1に示す第1のハードウェアタイルAへ送ることによって開始する。構成データを含む第1のデータパケットを受信するとき、第1のハードウェアタイルAは第1のデータパケットを記憶しない。代わりに、第1のデータパケットの受信に応答して、第1のハードウェアタイルAはデータ転送状態で動作するように構成される。データ転送状態では、ハードウェアタイルAは、ローカルメモリの中に受信データを記憶するのではなく、ハードウェアタイルAが受信するデータを転送する。たとえば、構成データは、タイルBなどの、アレイの中の隣接する次のタイルにデータを転送するようにタイルAを構成させてよい。したがって、構成データは、第1のタイルAの中にインストールされると第1のタイルを転送状態に置かせるデータを含む。第1のハードウェアタイルAは、「構成パケットを求めてリッスンする」状態に設定されるので第1のデータパケットを読み取ることが可能である。すなわち、第1のハードウェアタイルAは、第1のハードウェアタイルに到着するデータパケット読み取るように、この時点においてすでに構成されている。各タイル14に対するそのような構成状態は、いくつかの実装形態では、チップ10がリセットされるリセット動作の後に設定されてよい。したがって、送られる第1のパケット、すなわち、「データ転送状態」を構成するパケットは、データを転送し「リスニング」をやめるようにタイルを単に構成するタイルアグノスティックデータを含む。
より一般的には、ハードウェアタイルのアレイの中の各ハードウェアタイルは、本明細書で「リスニング」状態とも呼ばれる、「構成パケットを求めてリッスンする」状態と呼ばれる状態に初期化されてよい。上述のように、構成状態のためのこのリッスンは、チップ10がリセットされるリセット動作の後に実施されてよい。構成状態のためのリッスンにおいてデータパケットを受信すると、リスニング状態での各タイルは、状態を変更するように、たとえば、転送状態に切り替えるようにタイルを構成する、タイルアグノスティックデータを含むヘッダを読み取るとともに「消費」し、構成データを求める「リスニング」をやめる。したがって、リスニング状態となるように構成されるタイルは、復号論理を必要としなくてよい。さらに、いくつかの実装形態では、各ブロックが1つのヘッダを消費するので、特定の状態変更動作に対して、経路に沿ってハードウェアブロックがあるのと同数の、アレイに提供されるタイル構成データを含むヘッダがあることに留意されたい。たとえば、(たとえば、N個のタイルによって構成される転送経路を作成するために)同様にN個のタイルを変更することは、その各々がタイルを異なる状態に変更させる構成データ(たとえば、タイルをリスニング状態から転送状態に変更させる構成データ)を含む、N個の連続したデータパケットの連なりを送ることを必要とする場合がある。
したがって、第1のデータパケットを送った後、データソース(たとえば、通信インターフェース12)は、時間t2において、構成データを含む第2のデータパケットを第1のハードウェアタイルAへ送る。ハードウェアタイルAは転送状態にあるので、タイルAは第2のデータパケットをアレイの中の別のタイルに転送する。たとえば、タイルAは、第2のデータパケットをハードウェアタイルBに転送してよい。構成データを含む第2のデータパケットを受信するとき、リスニング状態にある第2のハードウェアタイルBは第2のデータパケットを記憶しない。代わりに、第2のデータパケットの受信および読取りに応答して、第2のハードウェアタイルBは、データ転送状態で動作するように構成される。データ転送状態では、ハードウェアタイルBは、ローカルメモリの中に受信データを記憶するのではなく、ハードウェアタイルBが受信するデータを転送する。たとえば、第2のデータパケット内の構成データは、タイルCなどの、アレイの中の隣接する次のタイルにデータを転送するようにタイルBを構成させてよい。
上記に鑑みて、タイルAとBの両方は、ハードウェアタイルA、B、およびCに沿ってデータ転送経路を確立する転送状態にある。ハードウェアタイルCがアレイ内の最後のタイルであるので、転送状態となるようにハードウェアタイルCを構成する必要がない。むしろ、タイルCは、本明細書で説明するように、スケジュールされた動作を実行するためのプログラムデータを受信およびインストールする用意ができている「リスニング」状態に構成されたままでいることができる。
残りのハードウェアタイルの中でプログラムデータを受信およびインストールすることも望ましい場合があるので、データ転送状態に構成されたハードウェアタイルは、既定の時点においてデータ転送状態から順次退出するようにスケジュールされる。たとえば、最後のハードウェアタイル(たとえば、ハードウェアタイルC)がそのプログラムデータを受信およびインストールした後、タイルAおよびBは、それらのそれぞれのデータ転送状態から順次退出するように構成されてよい。このようにして、転送状態での各ハードウェアタイルは、そのハードウェアタイルを対象とするプログラムデータを各ハードウェアタイルが受信およびインストールできる状態に戻ってシフトする。
転送状態から退出するようにハードウェアタイルを構成することは、たとえば、転送状態に置かれた各タイル上にそれぞれの転送状態カウンタをインストールすることを含んでもよい。タイルの中での転送状態カウンタのインストールは、たとえば、タイルが構成データパケットを受信するとき、リスニング状態から転送状態へのタイルの状態の変更の一部として行われてもよい。転送状態カウンタは、既定の時間期間が過ぎるまでカウントダウン(または、アップ)するカウンタを含む。転送状態カウンタがカウントダウン(または、アップ)する間、カウンタがその上にインストールされているハードウェアタイルは、転送状態にあるままである。転送状態カウンタが既定の時間期間に達すると、カウンタは、ハードウェアタイルに転送状態から退出させるトリガを始動するように誘導してよい。たとえば、いくつかの実装形態では、タイル14において受信される任意の新しいデータパケットに対してデータパケットがタイル14上のローカルメモリ(たとえば、メモリ20)にセーブされるように、ハードウェアタイル14を再構成させるトリガが始動してよい。代替的に、または追加として、トリガは、ハードウェアタイル14が、メモリからのデータをインストールするか、またはタイル14が受信する任意の新しいデータパケットからのデータをインストールするように、ハードウェアタイル14に再構成させてよい。代替的に、または追加として、トリガは、タイルがリスニング状態に戻るようにハードウェアタイル14に再構成させてよい。タイル14上にインストールされたカウンタは、チップ10上のグローバルクロックまたはタイル14上で実行しているローカルクロックと同期されてよい。既定の時間期間は複数のクロックサイクルを含んでもよい。たとえば、既定の時間期間は、特に、2、5、10、20、50、または100クロックサイクルを含んでもよい。既定の時間期間は、範囲[2,100]のクロックサイクルに、たとえば、20クロックサイクルなどの範囲[10,50]のクロックサイクルにあってもよい。カウンタに対する既定の時間期間は、構成データパケットを受信するとタイルによって読み取られる構成データの中で定義されてよい。
転送状態に構成されたハードウェアタイル14(たとえば、タイルAおよびB)は、すべてが一度にそれらのそれぞれの転送状態から退出すべきでない。代わりに、アレイの中のハードウェアタイル14が転送データ経路を共有するので、それらは各々、異なる時間においてそれらのプログラムデータパケットを受信する。したがって、各タイルは異なる時間においてその転送状態から退出し、転送状態カウンタごとの時間の既定の長さは異なる。転送状態カウンタごとに指定される時間の既定の長さは、現在のハードウェアタイルがデータパケットを転送する先の、データ転送経路内のハードウェアタイルの個数の関数である。たとえば、図1のタイルA、B、およびCによって確立されたデータ転送経路では、第1のタイルAがデータを転送する先の2つのハードウェアタイル(BおよびC)がある。したがって、タイルA上の転送状態カウンタに関連する既定の時間期間は、プログラムデータをタイルBおよびCへ送信しタイルBおよびCにおいてプログラムデータをインストールするための時間の関数である。図3を参照すると、このことは、たとえば、(t1において)第1のハードウェアタイルAが転送状態に構成される時と(t5において)タイルA上にインストールされることが意図されるデータプログラムパケットを第1のハードウェアタイルAが受信する時との間の差分に均等な時間において、すなわち、t5-t1という時間において行われてよい。同様に、図1のタイルA、B、およびCによって確立されたデータ転送経路では、第2のタイルBがデータを転送する先の1つのハードウェアタイル(C)がある。したがって、タイルB上の転送状態カウンタに関連する既定の時間期間は、プログラムデータをタイルCへ送信しタイルCにおいてプログラムデータをインストールするための時間の関数である。図3を参照すると、このことは、たとえば、(t2において)第2のハードウェアタイルBが転送状態に構成される時と(t4において)タイルB上にインストールされることが意図されるデータプログラムパケットを第2のハードウェアタイルBが受信する時との間の差分に均等な時間において、すなわち、t4-t2という時間において行われてよい。各転送状態カウンタに関連する特定の時間が事前に計算されてよく、第1および第2のデータパケットを用いて提供される構成データの中に含められてよい。ハードウェアタイルCは転送状態に設定されず、したがって、転送状態カウンタを含むようには構成されない。
転送データ経路が確立された後、データソース(たとえば、通信インターフェース12)は、データ転送経路に沿ってハードウェアタイル14にそれらのそれぞれのプログラムデータパケットを供給する(34)。プログラムデータパケットは、ハードウェアタイルについての動作スケジュールを定義するプログラムデータを含む。プログラムデータパケットは、データ転送経路の中の最後のハードウェアタイル(たとえば、データソースから最も遠いハードウェアタイル)がそのプログラムデータを最初に受信するが、データ転送経路の中の最初のハードウェアタイル(たとえば、データソースに最も近いハードウェアタイル)がそのプログラムデータを最後に受信するように、順次供給されてよい。プログラムデータパケットが受信されると、それらはハードウェアタイル上にインストールされてよい(36)。
たとえば、図1の中のハードウェアタイルA、B、およびCによって確立されたデータ転送経路では、通信インターフェース12は、時間t3において第1のプログラムデータパケットをハードウェアタイルAへ送り、ハードウェアタイルAが、次いで、第1のプログラムデータパケットをハードウェアタイルBに転送し、ハードウェアタイルBが、次いで、第1のプログラムデータパケットをハードウェアタイルCに転送する。第1のプログラムデータパケットを受信すると、ハードウェアタイルCは、第1のプログラムデータパケットをローカルメモリ(たとえば、メモリ20)にセーブしてよく、かつ/またはパケット内に含まれるプログラムデータをインストールしてよい。
その後、通信インターフェース12は、時間t4において第2のプログラムデータパケットをハードウェアタイルBへ送る。ハードウェアタイルBが、第2のプログラムデータパケット内に含まれるプログラムデータをセーブおよび/またはインストールできる前であるが、ハードウェアタイルB上にインストールされた転送状態カウンタは、ハードウェアタイルBに、転送状態から、ハードウェアタイルBが受信するデータパケットをセーブおよび/またはインストールするように構成された新しい状態に変更させる、トリガを始動する。本明細書で説明するように、このトリガは、t4-t2という時間において行われてよい。このようにして、第2のプログラムデータパケットは、ハードウェアタイルCに転送されるのではなくハードウェアタイルBにおいて保持される。
その後、通信インターフェース12は、時間t5において第3のプログラムデータパケットをハードウェアタイルAへ送る。ハードウェアタイルAが、第2のプログラムデータパケット内に含まれるプログラムデータをセーブおよび/またはインストールできる前であるが、ハードウェアタイルA上にインストールされた転送状態カウンタは、ハードウェアタイルAに、転送状態から、ハードウェアタイルAが受信するデータパケットをセーブおよび/またはインストールするように構成された新しい状態に変更させる、トリガを始動する。本明細書で説明するように、このトリガは、t5-t1という時間において行われてよい。このようにして、第3のプログラムデータパケットは、ハードウェアタイルBに転送されるのではなくハードウェアタイルAにおいて保持される。
いくつかの実装形態では、アレイの中のすべてのハードウェアタイルがそれらのインストール/初期化済みのプログラムを同時に実行することが望ましい。そのような場合、それらのプログラムデータを最初に受信および初期化/インストールするハードウェアタイルは、アレイの中の他のハードウェアタイルがそれらのそれぞれのプログラムデータを同じく受信および初期化/インストールするまで待つ。すべてのハードウェアタイルがそれらのインストール済みのプログラムデータの実行を開始する時間は、「キックオフ」時間と呼ばれる。各ハードウェアタイルが同時にキックオフすることを保証するために、データプログラムパケットのインストール(36)は、たとえば、本明細書ではキックオフ状態カウンタとも呼ばれる対応するプログラムキックオフカウンタを含むように各ハードウェアタイルを構成すること(37)を含んでもよい。
キックオフ状態カウンタは、既定の時間期間が過ぎるまでカウントダウン(または、アップ)するカウンタを含む。ハードウェアタイルごとに指定される既定の時間期間は、プログラムデータの中で定義される動作がそのタイル内で開始するまでの時間を指定する。キックオフ状態カウンタがカウントダウン(または、アップ)する間、カウンタがその上にインストールされているハードウェアタイルは、動作がその間に実行されない保持状態にあるままである。キックオフ状態カウンタが既定の時間期間に達すると、カウンタは、タイル内のプログラムデータによって定義された動作の実行をハードウェアタイルに開始させるトリガを始動するように誘導してよい。キックオフ状態カウンタごとの既定の時間期間は、アレイ内のすべてのハードウェアタイルがそれらのインストール/初期化済みのプログラムを同時に実行する結果となる値となるように計算される。本明細書で説明するように、各キックオフ状態カウンタの既定の時間期間は異なってよい。
たとえば、いくつかの実装形態では、タイル14において前に受信されておりタイルのローカルメモリ(たとえば、メモリ20)の中に記憶されているプログラムデータの中で定義された動作の実行をハードウェアタイル14に開始させるトリガが始動してよい。既定の時間期間は複数のクロックサイクルを含んでもよい。たとえば、既定の時間期間は、特に、2、5、10、20、50、または100クロックサイクルを含んでもよい。本明細書で説明するように、タイル14上にインストールされたキックオフ状態カウンタは、グローバルクロックを基準にして他のキックオフ状態カウンタと同期される。
アレイの中のハードウェアタイル14が転送データ経路を共有するので、それらは各々、異なる時間においてそれらのプログラムデータパケットを受信およびインストールする。すなわち、各タイル14は、動作を実行し始めることができるまでの異なる時間量だけ待ち、キックオフ状態カウンタごとの時間の既定の長さは異なる。キックオフ状態カウンタごとに指定される時間の既定の長さは、たとえば、それらのプログラムデータをさらにまた受信およびインストールしなければならないハードウェアタイルの個数の関数であってよい。このことは、アレイ内のすべてのタイルがそれらのインストール/初期化済みのプログラムを同時に実行することを保証する。たとえば、図1のタイルA、B、およびCによって確立されたデータ転送経路では、ハードウェアタイルCがそのプログラムデータを受信した後、タイルCは、それ自体のプログラムデータをインストールするまで、かつ他の2つのハードウェアタイル(AおよびB)がそれらのそれぞれのプログラムデータを受信およびインストールするまで待つ。したがって、タイルC上のキックオフ状態カウンタに関連する既定の時間期間は、たとえば、プログラムデータをタイルAおよびBへ送信しタイルAおよびBにおいてプログラムデータをインストールするのに必要とされる時間、ならびにタイルCにおいてプログラムデータをインストールするための時間の関数であってよい。図3を参照すると、このことは、たとえば、(t6において)すべてのハードウェアタイルがキックオフする時と(t3において)タイルC上にインストールされることが意図されるデータプログラムパケットを最後のハードウェアタイルCが受信する時との間の差分に均等な時間において、すなわち、t6-t3という時間において行われてよい。
同様に、ハードウェアタイルBがそのプログラムデータを受信した後、タイルBは、それ自体のプログラムデータをインストールするまで、かつ他の1つのハードウェアタイル(タイルA)がそのそれぞれのプログラムデータを受信およびインストールするまで待つ。したがって、タイルB上のキックオフ状態カウンタに関連する既定の時間期間は、たとえば、プログラムデータをタイルAへ送信しタイルA上にプログラムデータをインストールするための時間、ならびにタイルB上にプログラムデータをインストールするための時間の関数であってよい。図3を参照すると、このことは、たとえば、(t6において)すべてのハードウェアタイルがキックオフする時と(t4において)タイルB上にインストールされることが意図されるデータプログラムパケットをハードウェアタイルBが受信する時との間の差分に均等な時間において、すなわち、t6-t4という時間において行われてよい。
同様に、ハードウェアタイルAがそのプログラムデータを受信した後、タイルAは、それ自体のプログラムデータをインストールしてからプログラムデータの実行をキックオフできるまで待つ。したがって、タイルA上のキックオフ状態カウンタに関連する既定の時間期間は、たとえば、タイルA上にプログラムデータをインストールするのに必要とされる時間の関数であってよい。図3を参照すると、このことは、たとえば、(t6において)すべてのハードウェアタイルがキックオフする時と(t5において)タイルA上にインストールされることが意図されるデータプログラムパケットをハードウェアタイルAが受信する時との間の差分に均等な時間において、すなわち、t6-t5という時間において行われてよい。
各キックオフ状態カウンタに関連する特定の時間が事前に計算されてよく、各プログラムデータパケットを用いて提供されるプログラムデータの中に含められてよい。本明細書で説明するように、各キックオフ状態カウンタに関連する異なる特定の時間は、すべてのタイルがそれらのインストール/初期化済みのプログラムを同時に実行するように計算および定義されてよい。いくつかの実装形態では、アレイ内の各タイルは、対応するキックオフ状態カウンタを含むように構成されてよい。たとえば、タイルA、B、およびCの各々は、その記憶済みのプログラムデータを実行することを待つべき異なる既定の時間期間を有する対応するキックオフ状態カウンタを含むように構成されてよい。
いくつかの実装形態では、アレイ内のタイルのうちの少なくともいくつかが、対応するキックオフ状態カウンタを含むように構成されてよい。たとえば、アレイの中にN個のタイルがある場合、N-1個のタイルが、対応するキックオフ状態カウンタを含むように構成されてもよい。このことは、アレイの最初のタイルを除いてアレイの中のタイルのすべてを、対応するキックオフ状態カウンタを含むように構成することを含んでもよい。本出願の例を使用すると、タイルBおよびCの各々は、その記憶済みのプログラムデータを実行することを待つべき異なる既定の時間期間を有する対応するキックオフ状態カウンタを含むように構成されてよい。しかし、タイルAは、対応するキックオフ状態カウンタを有するように構成されなくてもよい。この場合、タイルBおよびCは、それらの受信プログラムデータを実行するようにそれらのキックオフ状態カウンタがトリガされるまで待ってよいが、タイルAは、プログラムデータを受信すると、タイルA、B、およびCの各々がそれらのそれぞれのプログラムデータを同時に実行するようにプログラムデータを直ちに実行してよい。
本明細書で説明するように、本明細書で説明するチップは、命令がすべてのサイクルにおいて発行されチップの機能ユニットの様々な構成のためのソースレジスタおよび宛先レジスタを含む、従来のプロセッサとは異なる。代わりに、チップ上の各ハードウェアタイルは、構成状態として知られている状態の論理的なセットによって制御される。構成状態は、ハードウェアタイルが、機能の中でも、データを転送するように構成されるのか、メモリの中にデータを記憶するように構成されるのか、データをインストールするように構成されるのか、それともプログラムを実行するように構成されるのかを表す。ハードウェアタイルが構成される特定の状態に応じて、状態は、ハードウェアタイルの中の様々なマルチプレクサ用の制御信号、ならびにハードウェアタイル内のメモリおよびレジスタに対する読取り動作および書込み動作を指定する。ハードウェアタイルの構成状態は、トリガテーブルを通じて更新される(たとえば、転送状態または他の状態に切り替えられる)。
図4は、トリガテーブル40の一例を示す概略図である。トリガテーブル40は、構成状態更新のアドレス指定可能なセットであり、その各々は、特定の条件が満たされると適用されるようになる。たとえば、本明細書で説明するようにハードウェアタイル内に転送状態カウンタをインストールすると、条件および関連する構成がトリガテーブル40に追加されてよい。転送状態カウンタが0までカウントダウン(または、既定の時間期間までカウントアップ)するとテーブル40に追加されている条件が満たされ、そのため、トリガが始動し、その条件に関連する構成がハードウェアタイルに適用される。キックオフ状態カウンタが同様に実施されてよい。
トリガテーブル40は、複数のエントリ50を含む。各エントリ50は、たとえば、トリガID52、アドレス54、構成空間更新56、ならびに有効化フラグ58および1つまたは複数の追加のフラグ60を含んでもよい。トリガID52はトリガタイプを表し、関連する任意の状態へのポインタの働きをする。アドレス54と構成空間更新56との組合せは、ハードウェアタイルの構成状態をどのように更新すべきかを表す。有効化フラグ58は、トリガが現在アクティブであり任意の時間において始動し得るかどうかを指定する。追加のフラグ60は、最後のクロックサイクル内でトリガが始動したか否かなどの、トリガに関係する他の様相を指定してよい。トリガテーブル40は、たとえば、8、16、32、または64エントリを含む、複数個のエントリを含んでよい。トリガテーブル40は、メモリの中のトリガテーブル40の異なる構成状態をローカルに記憶すること、およびハードウェアタイル内の1つまたは複数のマルチプレクサを使用して状態を選択することによって実現されてよい。
タイルの構成状態を修正する特定の実装形態が説明されている。ただし、他の実装形態も可能である。たとえば、いくつかの実装形態では、本明細書で説明するように、転送経路を作成し、続いてプログラムデータをタイルに順次ロードするのではなく、転送状態となるようにタイルを構成すること、およびキックオフ状態カウンタをインストールしてタイル内でプログラムを開始することと同時に、プログラムデータがタイル上にインストールされてよい。図1に示すタイル構造を使用すると、たとえば、プログラムデータをロードするための代替または追加の例示的なプロセスが表される。たとえば、いくつかの実装形態では、通信インターフェース12は、(たとえば、データパケットのヘッダとしての)構成データおよび(たとえば、データパケットのペイロードとしての)プログラムデータを含む第1のデータパケットを第1のタイル(たとえば、タイルA)へ送る。構成データは、タイルAによって読み取られると、タイルAに、データパケットからのプログラムデータをローカルメモリの中に記憶させ、かつ/または動作の既定のセットを実行するように論理回路を構成させる。追加として、構成パケットは、キックオフ状態カウンタを同時に初期化しながら、転送状態に置かれるようにタイルAを構成してよい。本明細書で説明するように、キックオフ状態カウンタは、タイル上にインストールされたプログラムが実行し始める(すなわち、「キックオフする」)ように、タイルがその構成状態を変更させられるまでの所定の時間をカウントする、カウンタであってよい。タイルAの中のキックオフ状態カウンタがカウントする時間の長さは、タイルAの前に出現するタイルのために必要とされるデータの量ではなく、タイルAに後続するタイルのために必要とされるデータの量に依存する。たとえば、タイルAに後続する2つのタイルがある場合、タイルAの中のキックオフ状態カウンタの値は、構成およびプログラムデータを次の2つのタイルに転送するのにかかる時間に基づいて決定される。
追加として、同時にタイルを転送状態に置きながらプログラムデータをインストールするようにタイルを構成することが、0クロックサイクルに設定される、転送状態のための別個のタイマをセットアップすることを含んでよいことに留意されたい。
第1のタイルが転送状態になった後、通信インターフェース12が第2のデータパケットを外へ送る。この第2のデータパケットは、転送状態での第1のタイルを通過してよく、アレイの中の第2のタイル(たとえば、タイルB)に到着し得る。第2のデータパケットは第1のデータパケットと類似である。たとえば、第2のデータパケットは、(たとえば、第2のデータパケットのヘッダとしての)構成データおよび(たとえば、第2のデータパケットのペイロードとしての)プログラムデータを含む。構成データは、第2のタイルによって読み取られると、第2のタイルに、第2のデータパケットからのプログラムデータをローカルメモリの中に記憶させ、かつ/または動作の既定のセットを実行するように論理回路を構成させる。追加として、構成パケットは、キックオフ状態カウンタを同時に初期化しながら、転送状態に置かれるように第2のタイルを構成してよい。第2のタイルの中のキックオフ状態カウンタの値は、アレイの中の第2のタイルの後の、残りのタイルによって転送および構成されるべきデータの量によって決定される。
この実装形態では、経路の中の各タイルは、経路の中の最後のタイル(たとえば、タイルC)を除いて第1および第2のタイルと同様のやり方で構成される。最後のタイルについては、通信インターフェース12が最後のデータパケットを送る。最後のデータパケットは、構成データおよびプログラムデータを含む。前のデータパケットとは対照的に、最後のタイルは転送状態となるようにようには構成されない。代わりに、最後のタイルは、プログラムデータをインストールし、インストールが完了した後、プログラムデータを使用して動作を実行し始めるように、構成される。同時に、経路の中の前のタイル(たとえば、タイルAおよびB)ごとのキックオフ状態カウンタがそれらの限度に到達し、それらのタイルにローカルにセーブされたプログラムデータを使用して動作を実行することを、それらのそれぞれのタイルに開始させる。このようにして、タイルは、通信インターフェースによって直接プログラムされると言われることがあり、ここで、同じく本明細書で説明するように、転送経路を最初にセットアップし、次いで、転送経路が確立された後にタイルごとのプログラムデータを下方に送ることによって、間接的にプログラムされるのではなく、プログラムデータがタイル上にインストールされキックオフ状態カウンタが初期化されると、転送経路がセットアップされる。
図5は、本明細書で説明するように、スケジュールされた動作に従って動作するように構成することができ、かつ初期化することができる、専用論理回路の一例を示す概略図である。たとえば、専用論理回路はASIC100を含んでもよい。ASIC100は、個別の動作スケジュールに従ってASIC100の動作全体を実行するように構成できる様々な異なる種類のハードウェアブロックを含む。個別の動作スケジュールに従って動作することができる例示的なハードウェアブロックは、タイル102および(図1の中のハードウェアタイル14と類似の)ベクトル処理ユニット104および(図1の中の通信インターフェース12と類似の)通信インターフェース108を含む。
より詳細には、ASIC100は、タイル102のうちの1つまたは複数が、たとえば乗算演算および加算演算などの演算を実行するように構成された専用回路を含む。具体的には、各タイル102は、(たとえば、図1の計算ユニット22と同様の)セルの計算アレイを含むことができ、この計算アレイにおいて、各セルは、数学演算を実行するように構成される(たとえば、図6に示し、本明細書で説明する例示的なタイル200を参照されたい)。いくつかの実装形態では、タイル102は、格子パターンとして配置され、第1の次元101(たとえば、行)および第2の次元103(たとえば、列)に沿って配置される。たとえば、図5に示す例では、タイル102は4つの異なる部分(110a、110b、110c、110d)に分割され、各部分は、18x16個のタイルの格子状に配置された288個のタイルを含む。いくつかの実装形態では、図5に示すASIC100は、別個のタイルとして分割/配置されたセルの単一のシストリックアレイを含むとして理解されてもよく、この場合、各タイルは、セルのサブセット/サブアレイと、ローカルメモリと、バス線とを含む(たとえば、図6を参照されたい)。
ASIC100はまた、ベクトル処理ユニット104を含む。ベクトル処理ユニット104は、タイル102から出力を受信し、タイル102から受信された出力に基づいてベクトル計算出力値を算出するように構成された回路を含む。たとえば、いくつかの実装形態では、ベクトル処理ユニット104は、タイル102から受信された出力に対して積和演算を実行するように構成された回路(たとえば、乗算器回路、加算器回路、シフタ、および/またはメモリ)を含む。代替的に、または追加として、ベクトル処理ユニット104は、タイル102の出力に非線形関数を適用するように構成された回路を含む。代替的に、または追加として、ベクトル処理ユニット104は、正規化値、併合値、またはその両方を生成する。ベクトル処理ユニットのベクトル計算出力は、1つまたは複数のタイルに記憶することができる。たとえば、ベクトル計算出力は、一意にタイル102に関連するメモリに記憶することができる。代替的に、または追加として、ベクトル処理ユニット104のベクトル計算出力は、たとえば、計算の出力として、ASIC100の外部の回路に転送することができる。さらに、タイル102およびベクトル処理ユニット104についての個別の動作スケジュールの動作は、ベクトル処理ユニット104へのタイル出力の転送を調整する。
いくつかの実装形態では、ベクトル処理ユニット104はセグメント化され、それによって、各セグメントは、タイル102の対応する集合から出力を受信するように構成された回路を含み、受信された出力に基づいてベクトル計算出力を算出する。たとえば、図5に示す例では、ベクトル処理ユニット104は、第1の次元101に沿って広がる2つの行を含み、各行は、32個の列として配置された32個のセグメント106を含む。各セグメント106は、タイル102の対応する列からの出力(たとえば、積和)に基づいて、本明細書で説明するように、ベクトル計算を実行するように構成された回路(たとえば、乗算器回路、加算器回路、シフタ、および/またはメモリ)を含む。ベクトル処理ユニット104は、図5に示すようにタイル102の格子の中央に配置することができる。ベクトル処理ユニット104の他の配置も可能である。
ASIC100は、通信インターフェース108(たとえば、インターフェース1010A、1010B)も含む。通信インターフェース108は、シリアライザ/デシリアライザ(SerDes)インターフェースの1つまたは複数のセットと汎用入出力(GPIO)インターフェースとを含む。SerDesインターフェースは、ASIC100に対する命令(たとえば、ASIC100の個別のハードウェアブロックに対する動作スケジュール)および/または入力データを受信し、データをASIC100から外部回路に出力するように構成される。たとえば、SerDesインターフェースは、通信インターフェース108内に含まれるSerDesインターフェースのセットを介して32Gbps、56Gbps、または任意の適切なデータレートでデータ(たとえば、動作スケジュールおよび/または入出力データ)を送受信するように構成することができる。たとえば、ASIC100は、オンにされたときにブートプログラムを実行してもよい。GPIOインターフェースは、特定の種類の機械学習モデルを実行するためにASIC100上に動作スケジュールをロードするために使用されてもよい。
ASIC100は、通信インターフェース108、ベクトル処理ユニット104、および複数のタイル102間でデータを搬送するように構成された複数の制御可能バス線(たとえば、図6を参照されたい)をさらに含む。制御可能バス線は、たとえば、格子の第1の次元101(たとえば、行)と格子の第2の次元103(たとえば、列)の両方に沿って延びるワイヤを含む。第1の次元101に沿って延びる制御可能バス線の第1のサブセットは、第1の方向(たとえば、図5の右側)にデータを転送するように構成することができる。第1の次元101に沿って延びる制御可能バス線の第2のサブセットは、第2の方向(たとえば、図5の左側)にデータを転送するように構成することができる。第2の次元103に沿って延びる制御可能バス線の第1のサブセットは、第3の方向(たとえば、図5の上側)にデータを転送するように構成することができる。第2の次元103に沿って延びる制御可能バス線の第2のサブセットは、第4の方向(たとえば、図5の下側)にデータを転送するように構成することができる。上述のように、それぞれに異なるハードウェアブロックの個別の動作スケジュールは、ASIC100内の通信エラーを防止するために制御可能バス線などの共有リソースへのアクセスを調整することができる。
各々の制御可能バス線は、クロック信号に従って各線に沿ってデータを搬送するために使用されるフリップフロップなどの複数のコンベア要素を含む。制御可能バス線を介してデータを転送することは、各クロックサイクルにおいて、制御可能バス線の第1のコンベア要素から制御可能バス線の第2の隣接するコンベア要素にデータをシフトすることを含むことができる。いくつかの実装形態では、データは、クロックサイクルの立上りまたは立下り時に制御可能なバス線を介して搬送される。たとえば、第1のクロックサイクルにおいて制御可能バス線の第1のコンベア要素(たとえば、フリップフロップ)上に存在するデータを第2のクロックサイクルにおいて制御可能バス線の第2のコンベア要素(たとえば、フリップフロップ)に転送することができる。いくつかの実装形態では、コンベア要素同士を周期的に互いに一定距離離間することができる。たとえば、場合によっては、各々の制御可能バス線は、複数のコンベア要素を含み、各コンベア要素は、対応するタイル102内に配置されるかまたは対応するタイル102に近接して配置される。
各々の制御可能バス線はまた、複数のマルチプレクサおよび/またはデマルチプレクサを含む。制御可能バス線のマルチプレクサ/デマルチプレクサは、ASICチップ100のバス線と構成要素との間でデータを転送するように構成される。たとえば、制御可能バス線のマルチプレクサ/デマルチプレクサは、タイル102との間、ベクトル処理ユニット104との間、または通信インターフェース108との間でデータを転送するように構成することができる。タイル102、ベクトル処理ユニット104、および通信インターフェース間でデータを転送することは、動作スケジュールによって調整することができる。動作スケジュールは、各カウンタにおいて、どのASIC100ハードウェアブロックが制御可能バス線に送信しているか、または制御可能バス線からデータを受信しているかを調整することができる。任意の所与のカウンタ時間においてスケジュールされる動作は、たとえば、どんなデータがソース(たとえば、タイル102内のメモリもしくはベクトル処理ユニット104)から制御可能バス線に転送されるか、または代替的に、どんなデータが制御可能バス線からシンク(たとえば、タイル102内のメモリ102もしくはベクトル処理ユニット104)に転送されるかを決定してもよい。
制御可能バス線は、各タイル、ベクトル処理ユニット、および/または通信インターフェースが、そのタイル、ベクトル処理ユニット、および/または通信インターフェースを通過する制御可能バス線を操作するための制御要素のそれ自体のセットを含むようにローカルレベルで制御されるように構成される。たとえば、各タイル、1Dベクトル処理ユニット、および通信インターフェースは、そのタイル、1Dベクトル処理ユニット、および通信インターフェースとの間のデータ転送を制御するためのコンベア要素、マルチプレクサおよび/またはデマルチプレクサの対応するセットを含んでもよい。したがって、各タイル、1Dベクトル処理ユニット、および通信インターフェースについての動作スケジュールは、それぞれのハードウェアブロックをトリガして、そのコンベア要素に適切な制御信号を与え、スケジュールされた動作に従ってデータをルーティングすることができる。
ASICチップ100の動作に関連するレイテンシを最小限に抑えるために、様々な構成要素間をデータが移動する距離を短縮するようにタイル102およびベクトル処理ユニット104を配置することができる。特定の実装形態では、タイル102と通信インターフェース108の両方を複数の部分に分離することができ、タイル部分と通信インターフェース部分の両方が、タイルと通信インターフェースの間をデータが移動する最大距離が短縮されるように配置される。たとえば、いくつかの実装形態では、タイル102の第1のグループを通信インターフェース108の第1の側の第1の部分に配置することができ、タイル102の第2のグループを通信インターフェースの第2の側の第2の部分に配置することができる。その結果、すべてのタイル102が通信インターフェースの一方の側の単一の部分に配置される構成と比較して、通信インターフェースから最も遠いタイルまでの距離が2分の1になることもある。
代替的に、タイルは、4つの部分などの異なる数の部分として配置されてもよい。たとえば、図5に示す例では、ASIC100の複数のタイル102が複数の部分110として配置される(110a、110b、110c、110d)。各部分110は、格子パターンとして配置された同様の数のタイル102を含む(たとえば、各部分110は、16行および16列に配置された256個のタイルを含むことができる)。通信インターフェース108も複数の部分、すなわち、タイル102の各部分110のいずれかの側に配置された第1の通信インターフェース1010Aおよび第2の通信インターフェース1010Bに分割される。第1の通信インターフェース1010Aは、制御可能バス線を通してASICチップ100の左側の2つのタイル部分110a、110cに結合することができる。第2の通信インターフェース1010Bは、制御可能バス線を通してASICチップ100の右側の2つのタイル部分110b、110dに結合することができる。その結果、通信インターフェース108との間でデータが移動する最大距離(したがって、データ伝播に関連するレイテンシ)を単一の通信インターフェースのみが利用可能な構成と比較して2分の1にすることができる。データレイテンシを低減させるためにタイル102および通信インターフェース108の他の結合配置も可能である。制御可能バス線のコンベア要素およびマルチプレクサに制御信号を与えることによって、タイル102および通信インターフェース108の結合配置をプログラムすることができる。
いくつかの実装形態では、1つまたは複数のタイル102は、制御可能バス線および/またはASIC100内の他のタイル(本明細書では「制御タイル」と呼ぶ)に対して読取りおよび書込み動作を開始するように構成される。ASIC100内の残りのタイルは、(たとえば、層推論を算出するために)入力データに基づいて計算を実行するように構成することができる。いくつかの実装形態では、制御タイルは、ASIC100内の他のタイルと同じ構成要素および構成を含む。制御タイルは、ASIC100の追加のタイル、追加の行、または追加の列として追加することができる。たとえば、タイル102の対称格子では、各タイル102が入力データに対して計算を実行するように構成され、入力データに対して計算を実行するタイル102のための読取りおよび書込み動作に対処するために制御タイルの1つまたは複数の追加の行を含めることができる。たとえば、各部分110は、18行のタイルを含み、タイルの最後の2つの行は、制御タイルを含んでもよい。別個の制御タイルを設けると、いくつかの実装形態では、計算を実行するために使用される他のタイルで利用可能なメモリの量が増大する。別個の制御タイルを設けると、動作スケジュール間のデータ送信動作の調整の助けになることもある。たとえば、制御タイルを使用して制御可能バス線および/またはASIC100内の他のタイルに対する読取りおよび書込み動作を制御すると、スケジューリング競合について検査する必要がある個別のスケジュールの数が減ることがある。言い換えれば、制御タイルについての動作スケジュールが「ダブルブッキング」、すなわち、同じカウンタ時間での特定の制御可能バス線の使用を回避するように調整された場合、制御可能バス線上で通信エラーが生じないことが合理的に保証される。しかし、本明細書で説明する制御の実行専用の別個のタイルは必要ではなく、場合によっては、別個の制御タイルは設けられない。その代わりに、各タイルは、そのタイルについての読取りおよび書込み動作を開始するための命令をタイルのローカルメモリに記憶してもよい。
さらに、図5に示す各部分110は、18行x16列に配置されたタイルを含むが、タイル102の数およびある部分におけるタイルの配置は異なってもよい。たとえば、場合によっては、各部分110は、等しい数の行および列を含んでもよい。
さらに、タイル102は、図5には4つの部分に分割されるように示されているが、他の異なるグループに分割することができる。たとえば、いくつかの実装形態では、タイル102は、ベクトル処理ユニット104の上方の(たとえば、図5に示すページの上部により近い)第1の部分およびベクトル処理ユニット104の下方の(たとえば、図5に示すページの下部により近い)第2の部分などの、2つの異なる部分としてグループ分けされる。そのような配置では、各部分は、たとえば、(方向103に沿った)18個のタイル×(方向101に沿った)32個のタイルの格子として配置された596個のタイルを含んでもよい。各部分は、他の総数のタイルを含んでもよく、異なるサイズのアレイとして配置されてもよい。場合によっては、各部分間の区画は、ASIC100のハードウェア要素によって定められる。たとえば、図5に示すように、部分110a、110bは、ベクトル処理ユニット104によって部分110c、110dから分離されてもよい。
ASICチップ100内で使用されるタイル200の一例を示す概略図が、図6に示されている。各タイル200は、ローカルメモリ202と、メモリ202に結合された計算アレイ204とを含む。ローカルメモリ202は、計算アレイ204に近接して配置された物理メモリを含む。計算アレイ204は、複数のセル206を含む。計算アレイ204の各セル206は、セル206への、アクティブ化入力および重み入力などのデータ入力に基づいて計算(たとえば、積和演算)を実行するように構成された回路を含む。各セルは、クロック信号のサイクルに対して計算(たとえば、積和演算)を実行することができる。計算アレイ204は、列よりも多くの行を有するか、または行よりも多くの列を有するか、または等しい数の列と行を有することができる。たとえば、図6に示す例では、計算アレイ204は、8行および8列に配置された64個のセルを含む。特に、16個、32個、128個、または256個のセルを有する計算アレイなどの他の計算アレイサイズも可能である。各タイルは、同じ数のセルおよび/または同サイズ計算アレイを含むことができる。ASICチップについて並列に実行できる動作の総数は、チップ内の同サイズ計算アレイを有するタイルの総数に依存する。たとえば、約1150個のタイルを含む、図5に示すASICチップ100では、このことは、サイクルごとに約92000回の計算を並列に実行できることを意味する。使用される場合があるクロック速度の例には、限定はしないが、225MHz、500MHz、950MHz、1GHz、1.25GHz、1.5GHz、1.95GHz、または2GHzが含まれる。各々の個々のタイルの計算アレイ204は、図5に示すように、タイルのより大きいシストリックアレイのサブセットである。
タイル200に含まれるメモリ202は、たとえば、SRAMなどのランダムアクセスメモリ(RAM)を含むことができる。その代わりに他のメモリを使用することができる。各メモリ202は、ASICチップのn個のタイル102に関連する全メモリのうちの(1/n)を記憶するように構成することができる。メモリ202は、単一のチップまたは複数のチップとして設けることができる。たとえば、図6に示すメモリ202は、4つの単一ポートSRAMとして設けられ、各SRAMは、計算アレイ204に結合される。代替的に、メモリ202は、数ある構成の中で、2つの単一ポートSRAMまたは8つの単一ポートSRAMとして設けることができる。メモリの結合容量は、限定はしないが、たとえば、誤り訂正コーディング後に16kB、32kB、64kB、または128kBとすることができる。物理メモリ202を計算アレイに対してローカルに設けることによって、いくつかの実装形態では、ASIC100についての配線の密度を大幅に低下させることができる。メモリがASIC100内の中央に配置される代替構成では、本明細書で説明するようにローカルに設けられる構成とは異なり、メモリ帯域幅のビットごとに配線が必要になることがある。ASIC100の各タイルに対応するのに必要な配線の総数は、ASIC100内の利用可能な空間をかなり上回る。これに対して、タイルごとに専用メモリを設ける場合、ASIC100の面積に対応するのに必要な配線の総数を実質的に減らすことができる。
タイル200はまた、制御可能バス線を含む。制御可能バス線は、複数の異なるグループに分類されてもよい。たとえば、制御可能バス線は、データを各カーディナル方向においてタイル間で転送するように構成された汎用制御可能バス線210の第1のグループを含むことができる。すなわち、制御可能バス線210の第1のグループは、タイルの格子の第1の次元101に沿った第1の方向(図6では「東」と呼ばれる)に向かってデータを転送するように構成されたバス線210aと、タイルの格子の第1の次元101に沿った第2の方向(図6では「西」と呼ばれる)に向かってデータを転送するように構成されたバス線210bであって、第2の方向が第1の方向と逆方向であるバス線210bと、タイルの格子の第2の次元103に沿った第3の方向(図6では「北」と呼ばれる)に向かってデータを転送するように構成されたバス線210cと、タイルの格子の第2の次元103に沿った第4の方向(図6では「南」と呼ばれる)に向かってデータを転送するように構成されたバス線210dであって、第4の方向が第3の方向と逆方向であるバス線210dとを含むことができる。汎用バス線210は、制御データ、アクティブ化入力データを搬送し、通信インターフェースとの間でデータを搬送し、ベクトル処理ユニットとの間でデータを搬送し、タイル200によって記憶ならびに/または使用されるデータ(たとえば、重み入力)を搬送するように構成することができる。タイル200は、制御可能バス線を制御し、したがって、タイル200との間およびメモリ202との間でデータをルーティングするための1つまたは複数の制御要素221(たとえば、フリップフロップおよびマルチプレクサ)を含んでもよい。
制御可能バス線は、制御可能バス線の第2のグループを含むこともでき、制御可能バス線の第2のグループは、本明細書では計算アレイ部分和バス線220とも呼ばれる。計算アレイ部分和バス線220は、計算アレイ204によって実行される計算からのデータ出力を搬送するように構成することができる。たとえば、バス線220は、図6に示すように、計算アレイ204における行から得られた部分和データを搬送するように構成することができる。そのような場合、バス線220の数は、アレイ204内の行の数と一致する。たとえば、8×8計算アレイでは、8本の部分和バス線220があり、各部分和バス線220は、計算アレイ204内の対応する行の出力に結合される。計算アレイ出力バス線220は、たとえば、ASICチップ内の別のタイルの計算アレイへの入力として、ASICチップ内の別のタイルに結合するようにさらに構成することができる。たとえば、タイル200のアレイ部分和バス線220は、タイル200から少なくとも1タイル離れて位置する第2のタイルの計算アレイの入力(たとえば、部分和220a)を受信するように構成することができる。その場合、計算アレイ204の出力は、部分和線220に加算され、新しい部分和220bが作成され、部分和220bはタイル200から出力されてもよい。部分和220bは次いで、別のタイルに渡されるか、または代替的に、ベクトル処理ユニットに渡されてもよい。たとえば、各バス線220は、ベクトル処理ユニットの対応するセグメント(図5におけるセグメント106など)に結合されてもよい。
図5に関して説明するように、制御可能バス線は、データをバス線に沿って伝達するのを可能にするように構成されたコンベア要素(たとえば、フリップフロップ)などの回路を含むことができる。いくつかの実装形態では、各制御可能バス線は、タイルごとに対応するコンベア要素を含む。図5に関してさらに説明するように、制御可能バス線は、データをASICチップの様々なタイル、ベクトル処理ユニット、および通信インターフェースの間で転送するのを可能にするように構成されたマルチプレクサ、などの回路を含むことができる。マルチプレクサは、データのソースまたはシンクがあるところならどこでも位置させることができる。たとえば、いくつかの実装形態では、図6に示すように、マルチプレクサなどの制御回路221は、制御可能バス線の交差点に位置させる(たとえば、汎用バス線210aと汎用バス線210dの交差点、汎用バス線210aと汎用バス線210cの交差点、汎用バス線210bと汎用バス線210dの交差点、および/または汎用バス線210bと汎用バス線210cの交差点に位置させる)ことができる。バス線交差点に位置するマルチプレクサは、交差点に位置するバス線間でデータを転送するように構成することができる。制御回路221は、タイル102内の適切な構成要素にデータをルーティングする(たとえば、アクティブ化データまたは層重みをSRAM202との間でルーティングして計算アレイ204内の適切なセル206に送る)か、または制御可能バス線との間で出力データおよび入力データをルーティングすることによって動作スケジュールの動作を実行することができる。
図7A~図13Bは、ASIC100がニューラルネットワーク推論を算出するためのハードウェアアクセラレータとして使用される例示的なプロセスを示す概略図である。図7A、図8A、図9A、図10A、図11、図12A、および図13Aは、プロセスのそれぞれに異なる時間におけるASIC100によるデータフローの概要を示す概略図である。図7B、図8B、図9B、図10B、図12B、および図13Bは、それぞれ図7A、図8A、図9A、図10A、図12A、および図13Aに関連する時間におけるASIC100の単一のタイル(たとえば、制御タイルまたは他のタイル102)内のデータフローを示す概略図である。図7A~図13Bにおける楕円形は、図示されていない繰り返し要素の存在を示す。図7A~図13Bの各々には、データフローの向きを与えるためにコンパス300が設けられる。ラベル「N」、「W」、「S」、および「E」は、実際の地理的方向には対応せず、その代わり、データが格子内を流れることができるそれぞれに異なる相対方向を示すために使用される。ラベル「N」、「W」、「S」、および「E」によって示される方向にデータを伝達する制御可能バス線は、本明細書では北フローバス線、西フローバス線、南フローバス線、および東フローバス線と呼ばれる。
図7A~図13Aにおけるタイル102およびベクトル処理ユニット104の配置は、図5に示す配置と同様である。たとえば、タイル102の半分は、ベクトル処理ユニット104の第1の側に配置することができ、タイル102の他方の半分は、ベクトル処理ユニット104の第2の反対側に配置することができる。通信インターフェース108は、図7A~図13Aでは、全体的にタイル格子の右側に配置されるように示されているが、図5に概略的に示すようにタイル格子のいずれの側に配置することもできる。
第1のステップでは、図7Aに示すように、モデル(たとえば、ニューラルネットワークモデル)の第1の層についての入力値(たとえば、アクティブ化入力および/または重み入力)が、通信インターフェース108からASIC100内の1つまたは複数のタイル102(たとえば、すべてのタイル102)上にロードされる。すなわち、図1~図3に関して本明細書で説明するような、構成データパケットなどのデータ、またはプログラム動作パケットが、通信インターフェース108から受信される。入力値は、通信インターフェース108から、制御可能バス線(たとえば、本明細書で説明する汎用制御可能バス線など)に沿ってデータ経路を辿り、1つまたは複数の制御タイルに達する。データは、それぞれに異なるバス線が交差する位置にマルチプレクサを使用することによって(たとえば、図6におけるルーティング要素221を参照されたい)それぞれに異なるバス線間を転送することができる。たとえば、図7Aに示すように、入力データは、西フロー汎用制御可能バス線上の移動、次いで南フロー汎用制御可能バス線上の移動を伴うデータ経路に沿って流れる。西フローバス線と南フローバス線が交差する位置にマルチプレクサを使用することによって、入力データをフローバス線から南フローバス線に転送することができる。いくつかの実装形態では、前の第1の推論がASIC100によって実行されている間に、第2の推論についての重み入力を1つまたは複数の制御タイルにロードすることができる。言い換えれば、制御タイルの動作スケジュールが、推論を算出している他のタイル102の動作スケジュールと調整され、それによって、他のタイル102が第1の推論を算出しているのと同じカウンタ時間に、制御タイル102が、次の推論を算出するために他のタイル102に送られるように次の推論についての新しいアクティブ化データおよび/または重みを準備する。
図7Bは、ASIC100からタイル102の一例の詳細図を示す概略図である。図7Bに示すように、タイル102は、入力値が記憶されるメモリ302を含むことができる。メモリ302は、本明細書で図6に関して説明するように任意の適切なメモリを含むことができる。上記で説明したように、メモリ302は、(たとえば、構成データパケットからの)構成状態データ、またはタイルの個別の動作スケジュールなどのプログラムデータを記憶するために使用することができる。入力値は、タイル102の隣を通過するかまたはタイル102自体を通過する1本または複数の南フロー汎用制御可能バス線310dから得られる。南フロー制御可能バス線310dからのデータは、マルチプレクサを使用することによってメモリ302に転送することができる。他の汎用制御可能バス線(310a、310b、310c)はこのステップの間は使用されない。
タイル102はまた、メモリ302に直接結合されたセル306の計算アレイを含む。本明細書で説明するように、セル306の計算アレイは、ASICのタイルを構成するセルのより大きいシストリックアレイのサブセットであってもよい。セル306は、アレイ状に配置され、単一のセル306が、図7Bにおいて(i, j) = (0, 0)に示されており、この場合、パラメータiは、アレイ内のセル行位置を表し、jは、アレイ内のセル列位置を表す。図7Bに示す例では、計算アレイは8行および8列を有する。ただし、他のサイズも可能である。計算アレイの各セル306は、タイルで受信されたデータに基づいて計算を実行するように構成された回路を含むことができる。たとえば、各セル306は、乗算器回路と、加算器回路と、1つまたは複数のレジスタとを含むことができる。各セル306の出力は、計算アレイ内の隣接するセルまたはASIC100内の別のタイルの計算アレイ内のセルに部分和として渡すことができる。セル306の計算アレイは以後のステップにおいて使用される。
タイル102はまた、前のタイルからデータを提供するための制御可能バス線320を含む。たとえば、制御可能バス線320は、ASIC100内の前のタイルの計算アレイから得られた部分和出力データを搬送し、部分和出力データをタイル102内の計算アレイのセルへの入力として与えることができる。このステップでは、制御可能バス線320は使用されない。
タイル102はまた、アクティブ化入力値を計算アレイのセル306への入力として与えるための制御可能バス線330を含む。たとえば、アクティブ化入力値は、セル306内の乗算器回路に与えることができる。アクティブ化入力値は、通信インターフェース108またはASIC100における別のタイル内のセルから得ることができる。制御可能バス線330からのデータは、マルチプレクサを使用することによってセル306に転送することができる。制御可能バス線330は、図7Aおよび図7Bに示す例示的なステップでは使用されない。
本明細書で説明するように、いくつかの実装形態では、1つまたは複数のタイル102は、動作スケジュールなどのプログラムデータおよび/またはベクトル処理ユニット104からの出力情報を記憶するのに専用である。いくつかの実装形態では、1つまたは複数の制御タイル内の計算アレイは、計算を実行するために使用されなくてもよい。代替的に、1つまたは複数の制御タイルは、受信された重み入力およびアクティブ化値などの入力データに対して計算を実行することに加えて、動作スケジュールなどのプログラムデータを記憶するように構成することができる。いくつかの実装形態では、重み入力は、最初に1つまたは複数の制御タイルのサブセットに重み入力を記憶することなく、重み入力が使用される各タイル102のメモリにロードされる。
第2のステップでは、図8Aに示すように、スケジュールされたカウンタ値において、重み入力301がタイル102内の計算アレイの個別のセル306にロードされる。重み入力301を個別のセル306にロードすることは、1つまたは複数の制御タイルのメモリから、重み入力301が属する対応するタイル102に転送することを含むことができる。重み入力301は、汎用制御可能バス線に沿ってタイル102に伝達し、バス線およびメモリに結合されたマルチプレクサを介してメモリに転送することができる。図8Bは、タイル102の一例の詳細図である。重み入力301は、モデル実行の持続時間の間メモリ302に記憶することができ、モデル実行は、複数の推論の計算を含んでもよい。重み入力301を1つまたは複数の制御タイルからロードすることの代替として、重み入力301は、通信インターフェース108からタイル102のメモリに直接プリロードされてもよい。モデルを実行できるように準備するには、タイル102ごとの重み入力301をタイル102のメモリ302からそのタイル102内の計算アレイの各セル306にロードすることができる。たとえば、重み入力301は、セル306内のレジスタ400(「バックレジスタ」とも呼ばれる)にロードすることができる。バックレジスタを使用すると、次の重み入力がバックレジスタにロードされる間、セル306によって現在の重み入力に対して計算を実行することが可能になる。図8Bでは、重みレジスタをロードすることが1つのセル306のみについて示されているが、このステップの間に、計算アレイ内の他のセルの重みレジスタをロードすることもできる。
第3のステップでは、図9Aに示すように、スケジュールされたカウンタ値において、アクティブ化値500が、タイル102に導入され、メモリ302内に記憶されてもよい。アクティブ化値500は、複数のクロックサイクルにわたって転送することができる。その場合、計算は、各タイル102の計算アレイによって、受信されたアクティブ化値500およびタイル102内のメモリ302からの重み入力301を用いて実行される。たとえば、計算は、アクティブ化値に重み入力を掛けることと、次いでその結果に、異なる重み入力とアクティブ化値の積を加算することとを含むことができる。いくつかの実装形態では、アクティブ化値500は、制御可能バス線330上でタイル102に伝達され、タイル102間で伝達される。制御可能バス線330の各々は同じ方向に沿って延びることができる。たとえば、図9Bに示すように、制御可能バス線330は、制御可能バス線320が延びる格子次元に直交する格子次元に沿って横方向に延びる。さらに、図9Aにおける矢印501および図9Bにおける制御可能バス線330上の矢印501によって示されるように、アクティブ化入力データ500は、バス線330上を同じ(たとえば、東フロー)方向に移動する。代替的に、いくつかの実装形態では、いくつかのアクティブ化入力値500は、いくつかの制御可能バス線330上を第1の方向(たとえば、東フロー方向)に移動し、いくつかの他のアクティブ化入力値500は、いくつかの他の制御可能バス線330上を第2の逆方向(たとえば、西フロー方向)に移動する。
いくつかの実装形態では、各タイル102を通って延びる制御可能バス線330の数は、計算アレイのサイズによって決定される。たとえば、各タイル102を通って延びる制御可能バス線330の数は、計算アレイ内のセルの行の数に少なくとも等しくてもよい。図9Bに示す例では、タイル102の計算アレイ内にセル306の8つの行があるとすれば、タイル102を通過する8本の制御可能バス線330がある。いくつかの実装形態では、各々の別個の制御可能バス線330が、計算アレイの対応する行内のセル306にアクティブ化入力値500を転送する。たとえば、タイル102内のセル306の8×8計算アレイでは、第1の制御可能バス線330が、アレイの第1の行内のセル306にアクティブ化入力値500を転送し、第2の制御可能バス線330が、アレイの第2の行内のセル306にアクティブ化入力値500を転送し、他の制御可能バス線330についても同様であり、最後の制御可能バス線330は、アレイの最後の行内のセル306にアクティブ化入力値500を転送する。追加の制御可能バス線(たとえば、部分和バス線)は、各タイルを通過して別のタイルからの部分和を提供し、タイル内の計算の結果を受信して提供された部分和と組み合わせ、新しい部分和を新しいタイルまたはベクトル処理ユニットに出力してもよい。
いくつかの実装形態では、制御可能バス線330は、セル306内で計算を実行するように構成された回路にアクティブ化入力値500を転送する。たとえば、図9Bに示すように、制御可能バス線330は、アクティブ化入力値500をセル306内の乗算器回路502に転送するように構成される。アクティブ化入力値500は、制御可能バス線330上でマルチプレクサを使用することによって乗算器回路502に転送することができる。
いくつかの実装形態では、アクティブ化入力値500および重み入力値301が所定の位置にあると判定された後(たとえば、ローディング動作を実行するのに必要な所定数のカウンタサイクルの後)、タイル102内の計算アレイのセル306は、受信されたアクティブ化入力値500およびタイル102内のメモリ302からの重み入力値301を使用して計算を実行する。たとえば、図9Bに示すように、すでにレジスタ400に記憶された重み入力値301がレジスタ504(「フロントレジスタ」とも呼ばれる)に転送される。次いで、乗算器回路502を使用して重み入力値301に受信されたアクティブ化入力値500が掛けられる。
本明細書で説明するように、アクティブ化入力値500は制御可能バス線330上で伝達される。いくつかの実装形態では、制御可能バス線330は、汎用制御可能バス線である。いくつかの実装形態では、制御可能バス線330は、アクティブ化入力の提供専用に使用することができる。たとえば、図9Bに示すように、アクティブ化入力値を線330によってタイル102に(たとえば、タイル102内の計算アレイのセル306に)与えることができ、一方、他の汎用制御可能バス線310bを使用して他のデータおよび/または指示をタイル102に与えることができる。
第4のステップでは、図10Bに示すように、スケジュールされたカウンタ値において、各セル306内の、重み入力値301とアクティブ化入力値500との計算の結果が、セル306内の回路602に渡されて、出力値600が生成される。図10Bの例では、回路602は、加算回路を含む。各セル306内の加算回路602は、乗算器回路502の積にASIC100内の別のタイル102または計算アレイ内の別のセル306から得られる別の値を加算するように構成される。別のタイル102または別のセル306から得られる値は、たとえば累積値を含むことができる。したがって、加算回路602の出力値600は新しい累積値である。その場合、加算回路602は、タイル102内の計算アレイの下部の(たとえば、南フロー方向における)隣接するセル内に位置する別のセルに新しい累積値600を送ることができる。新しい累積値600は、下部の隣接するセルにおける加算についてのオペランドとして使用することができる。計算アレイ内のセルの内側に最後の行では、図10Aに示すように、新しい累積値600をASIC100内の別のタイル102に転送することができる。別の例では、新しい累積値600は、新しい累積600が生成されたタイル102から少なくとも1タイル離れた別のタイル102に転送することができる。代替的に、図10Aにも示すように、計算アレイ内のセルの最後の行からの新しい累積値600がベクトル処理ユニット104に転送される。
タイル102内に転送されるかまたはタイル102から外部に転送された累積値600は、制御可能バス線320に沿って伝達することができる。制御可能バス線320の各々は同じ方向に沿って延びている。たとえば、図10Bに示すように、制御可能バス線320は、制御可能バス線330が延びる格子次元に直交する格子次元に沿って垂直に延びる。さらに、図10Aにおける矢印604および図10Bにおける矢印604によって示されるように、累積値600は、累積値600が生成されたタイル102に対するベクトル処理ユニット104の位置に応じて制御可能バス線320上を北フロー方向または南フロー方向のいずれかに移動する。たとえば、図10Aにおいてベクトル処理ユニット104の上方に位置するタイル102では、累積値600は、制御可能バス線320上をベクトル処理ユニット104に向かって南フロー方向に移動し、一方、ベクトル処理ユニット104の下方に位置するタイル102では、累積値600は、ベクトル処理ユニット104に向かって北フロー方向に移動する。
図11に示すような第5のステップでは、スケジュールされたカウンタ値において、ベクトル処理ユニット104によって受信されたデータ(たとえば、累積値)は、ベクトル処理ユニット104によって処理され、処理後の値900が与えられる。ベクトル処理ユニット104におけるデータの処理は、ベクトル処理ユニット104において受信されたデータにバイアスを加えること、追加の累積演算を実行すること、および/または受信されたデータに非線形関数(たとえば、ニューラルネットワークシステムにおいて知られる正規化関数またはシグモイド関数)を加えることを含むことができる。ベクトル処理ユニット104によって他の演算を適用することもできる。ベクトル処理ユニット104は、複数のセグメント106に配置された回路を含むことができ、各セグメント106は、タイル102の対応する列から受信されたデータを処理し、対応する処理後の値900を生成するように構成される。
第6のステップでは、図12Aに示すように、スケジュールされたカウンタ値において、ベクトル処理ユニット104からの処理後の値900が、ASIC100の1つまたは複数のタイル、たとえば、ASIC100のタイルのサブセットに転送され記憶される。たとえば、処理後の値900は、制御タイル103に送ることができ、制御タイル103は、ベクトル処理ユニット104のすぐ隣に位置する。代替的に、または追加として、処理後の値900は、ASIC100内の他のタイル102のうちの1つまたは複数に送ることができる。処理後の値900は、制御可能バス線310cなどの汎用制御可能バス線を介して1つまたは複数のタイルに転送することができる。処理後の値900は、タイル(たとえば、制御タイルまたは他のタイル102)に到達後、タイルのメモリ202に記憶することができる。たとえば、処理後の値900は、制御可能バス線310cに関連するマルチプレクサを使用してメモリ902に転送することができる。処理後の値900を記憶するステップは、各モデル層の推論が得られた後に実施することができる。いくつかの実装形態では、処理後の値900をモデルの次の層への入力値として与えることができる。
第7のステップでは、図13Aおよび図13Bに示すように、スケジュールされたカウンタ値において、処理後の値900をASIC100にエクスポートすることができる。たとえば、処理後の値900は、1つまたは複数の制御タイルのメモリ202から通信インターフェース108に転送することができる。処理後の値900は、制御可能バス線(たとえば、制御可能バス線310cおよび/または310d)上で通信インターフェース108に伝達することができる。処理後の値900は、制御可能バス線に関連するマルチプレクサを介して制御可能バス線に転送することができる。
処理後の値900は、たとえば、モデルの最終層についての推論が得られた場合、またはモデルが複数のASIC間で区分され、ASIC100に関連する最終層についての推論が得られた場合にASIC100にエクスポートされてもよい。処理後の値900は、通信インターフェース108のSerDesインターフェースによって受信し、限定はしないが、たとえば、別のASIC100またはフィールドプログラマブルゲートアレイチップを含む別の宛先にエクスポートすることができる。
図7A~図13Bに関して説明した例示的なプロセスでは、セル計算が実行される前にアクティブ化値および重み入力が各タイルの計算アレイ全体にわたって完全に伝播されることが必要になる場合があるか、またはすべての値が完全に伝播される前にセルが計算を実行することがある。いずれの場合も、計算が適正なタイミングで行われるように個別のタイルの動作スケジュールを調整することができる。たとえば、特定の機械学習プログラムにおいて、セル計算が実行される前にアクティブ化値および重み入力を各タイルの計算アレイを介して完全に伝播する必要がある場合、動作指示では、アクティブ化値および重みが完全に伝播されるのを保証する時間において計算が実行されるようにスケジュールすることができる。さらに、ASIC100について、重み入力が計算アレイの列に送られ、アクティブ化入力が計算アレイの行に送られるように説明したが、いくつかの実装形態では、重み入力がアレイの行に送られ、アクティブ化入力がアレイの列に送られる。
さらに、計算アレイについて、本明細書では各セル内で個別の加算回路を使用するように説明したが、計算アレイ内のセルのグループ(たとえば、列内のすべてのセル)が直接単一の加算回路に結合されてもよく、この加算回路は、グループ内のセルから受信された出力を加算し、したがって、出力を記憶するのに必要な加算回路の数を減らす。
本明細書で説明する主題および機能的動作の実施形態は、デジタル電子回路、本明細書で開示した構造およびその構造上の均等物を含むコンピュータハードウェア、またはそれらのうちの1つまたは複数の組合せとして実施することができる。本明細書で説明した主題の実施形態は、1つまたは複数のコンピュータプログラムとして、すなわち、データ処理装置による実行のための、またはデータ処理装置の動作を制御するための、有形非一時プログラムキャリア上で符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実施することができる。代替的にまたは追加として、プログラム命令は、人為的に生成される伝播信号、たとえば、データ処理装置によって実行されるように適切なレシーバ装置に送信される情報を符号化するために生成される機械生成の電気信号、光信号、または電磁信号上に符号化することができる。コンピュータ記憶媒体は、機械可読ストレージデバイス、機械可読ストレージ基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つもしくは複数の組合せとすることができる。
「データ処理装置」という用語は、一例としてプログラム可能プロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。この装置は、専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASICを含むことができる。この装置は、ハードウェアに加えて、当該のコンピュータプログラム用の実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つもしくは複数の組合せを構成するコードを含むこともできる。
本明細書で説明するプロセスおよび論理フローは、1つまたは複数のプログラム可能コンピュータが、1つまたは複数のコンピュータプログラムを実行して、入力データの処理および出力の生成を行うことによって機能を実行することによって実行することができる。プロセスおよび論理フローを専用論理回路、たとえば、FPGA、ASIC、またはGPGPU(汎用グラフィックス処理ユニット)によって実行することもでき、装置をそのような専用論理回路として実装することもできる。
本明細書には多数の特定の実装上の詳細が記載されているが、これらは任意の発明または請求され得るものの範囲に対する制限として解釈すべきではなく、特定の発明の特定の実施形態に固有である場合がある特徴の説明として解釈すべきである。本明細書において別個の実装形態の文脈で説明されるいくつかの特徴はまた、組み合わせて単一の実施形態として実装することができる。反対に、単一の実施形態の文脈で説明した様々な特徴はまた、複数の実施形態において別々に実装することができ、または任意の好適な部分組合せとして実装することができる。さらに、各特徴について、上記ではいくつかの組合せとして働くように説明することがあり、最初からそのようなものとして請求することがあるが、特許請求される組合せからの1つまたは複数の特徴は、場合によっては、その組合せから削除することができ、請求される組合せが、部分組合せまたは部分組合せの変形形態を対象としてもよい。
同様に、動作は特定の順序で図面に示されるが、このことは、望ましい結果を達成するために、そのような動作が、示された特定の順序でもしくは順次に実行されること、またはすべての図示された動作が実行されることを必要とするものとして理解されるべきでない。いくつかの状況では、マルチタスキングおよび並列処理が有利な場合がある。さらに、上記で説明した実施形態における様々なシステムモジュールおよびコンポーネントの分離は、すべての実装形態においてそのような分離が必要になるものとして理解されるべきではなく、説明したプログラムコンポーネントおよびシステムが一般に、単一のソフトウェア製品として統合するか、または複数のソフトウェア製品としてパッケージ化することができることを理解されたい。
主題の特定の実施形態について説明した。他の実装形態も以下の特許請求の範囲内である。たとえば、バス線について「制御可能」として説明したが、すべてのバス線が同じレベルの制御を有する必要があるとは限らない。たとえば、様々な制御可能度があり得、いくつかのバス線は、いくつかのバス線が、データを得ることができるタイルの数またはデータを送ることができるタイルの数に関して制限される場合にのみ制御することができる。別の例では、いくつかのバス線は、本明細書で説明するように北、東、西、または南などの単一の方向に沿ったデータの提供専用に使用されてもよい。場合によっては、特許請求の範囲に記載されているアクションは、異なる順序で実行することができ、その場合も望ましい結果を達成することができる。一例として、添付の図面に示すプロセスは、所望の結果を達成するうえで、図示の特定の順序または順番を必ずしも必要としない。いくつかの状況では、マルチタスキングおよび並列処理が有利である場合がある。
10 チップ
12 通信インターフェース
14 ハードウェアタイル
16 データバス、通信バス
17 データバス
18 制御回路
20 ローカルメモリ
22 計算ユニット、演算ユニット
40 トリガテーブル
50 エントリ
52 トリガID
54 アドレス
56 構成空間更新
58 有効化フラグ
60 追加のフラグ
100 ASIC
101 第1の次元
102 タイル
103 第2の次元
104 ベクトル処理ユニット
106 セグメント
108 通信インターフェース
110、110a、110b、110c、110d 部分
200 タイル
202 ローカルメモリ
204 計算アレイ
206 セル
210 制御可能バス線
210a、210b、210c、210d バス線
220 バス線
220a、220b 部分和
221 制御回路
300 コンパス
301 重み入力
302 メモリ
306 セル
310a、310b、310c、310d 制御可能バス線
320、330 制御可能バス線
500 アクティブ化値
501 矢印
502 乗算器回路
504 レジスタ
602 回路
604 矢印
900 処理後の値
902 メモリ
1010A、1010B インターフェース

Claims (21)

  1. 複数のハードウェアタイルを備える集積回路を構成する方法であって、
    前記複数のハードウェアタイルのうちの最後のハードウェアタイルを除いて各ハードウェアタイルをデータ転送状態となるように構成することによって、前記複数のハードウェアタイルを通るデータ転送経路を確立するステップであって、
    前記最後のハードウェアタイルを除いて各ハードウェアタイルを転送状態となるように構成することが、前記ハードウェアタイルが前記データ転送状態にある時間の対応する既定の長さを指定するそれぞれの転送状態カウンタをインストールすることを備える、ステップと、
    前記データ転送経路に沿って、前記ハードウェアタイル用のプログラムデータを備えるそれぞれのプログラムデータパケットを前記複数のハードウェアタイルの各ハードウェアタイルに供給するステップと、
    前記複数のハードウェアタイルのハードウェアタイルごとに、それぞれのプログラムデータをインストールするステップと
    を備える方法。
  2. 前記複数のハードウェアタイルのうちの前記最後のハードウェアタイルを除いて各ハードウェアタイルの前記転送状態カウンタが、前記データ転送経路を通過した最初のデータパケットを受信するとインストールされる、請求項1に記載の方法。
  3. 前記最初のデータパケットが、前記複数のハードウェアタイルのうちの前記最後のハードウェアタイル用のプログラムデータを備えるプログラムデータパケットを備える、請求項2に記載の方法。
  4. ハードウェアタイルごとに前記それぞれの転送状態カウンタをインストールするステップが、前記ハードウェアタイルのトリガテーブルの中で前記転送状態カウンタを定義するステップを備える、請求項1から3のいずれか一項に記載の方法。
  5. 各ハードウェアタイルの前記転送状態カウンタが時間の前記対応する既定の長さに達すると、前記トリガテーブルが、前記ハードウェアタイル用のプログラムデータのインストールをトリガし、前記ハードウェアタイルを前記データ転送状態から退出させる、請求項4に記載の方法。
  6. それぞれの転送状態カウンタを備えるハードウェアタイルごとに、前記転送状態カウンタの時間の前記対応する既定の長さが、前記データ転送経路の中の後続のハードウェアタイルの個数の関数である、請求項1から5のいずれか一項に記載の方法。
  7. 前記複数のハードウェアタイルの各ハードウェアタイルが、前記ハードウェアタイル用の前記それぞれのプログラムデータをローカルメモリの中に記憶する、請求項1から6のいずれか一項に記載の方法。
  8. それぞれの転送状態カウンタを備える各ハードウェアタイルが、前記データ転送経路の中の少なくとも1つの他のハードウェアタイルに少なくとも1つのプログラムデータパケットを転送する、請求項1から7のいずれか一項に記載の方法。
  9. 各ハードウェアタイルが、回路要素のシストリックアレイを備える、請求項1から8のいずれか一項に記載の方法。
  10. 前記複数のハードウェアタイルが、1次元または2次元のアレイとして配置される、請求項1から9のいずれか一項に記載の方法。
  11. 前記ハードウェアタイル上にインストールされる前記プログラムデータによって定義された動作を前記ハードウェアタイルが開始するまでの時間の対応する既定の長さを指定する、それぞれのキックオフ状態カウンタを、前記複数のハードウェアタイルのうちの少なくともいくつかのハードウェアタイル上にインストールするステップをさらに備える、請求項1から10のいずれか一項に記載の方法。
  12. 前記複数のハードウェアタイルのうちの前記最後のハードウェアタイルを除いて各ハードウェアタイルの前記それぞれのキックオフ状態カウンタが、最初のデータパケットを受信するとインストールされる、請求項11に記載の方法。
  13. キックオフ状態カウンタごとの時間の前記既定の長さが異なる、請求項12に記載の方法。
  14. キックオフ状態カウンタごとの時間の前記既定の長さが、前記データ転送経路の中のハードウェアタイルの個数の関数である、請求項13に記載の方法。
  15. キックオフ状態カウンタごとの時間の前記既定の長さが、前記複数のハードウェアタイルがそれらのそれぞれのプログラムデータを同時に実行するように定義される、請求項11から14のいずれか一項に記載の方法。
  16. 各ハードウェアタイルの前記それぞれのキックオフ状態カウンタをインストールするステップが、前記ハードウェアタイルのトリガテーブルの中で前記キックオフ状態カウンタを定義するステップを備える、請求項11から15のいずれか一項に記載の方法。
  17. 複数のハードウェアタイルを備える集積回路を構成する方法であって、
    前記複数のハードウェアタイルのうちの最後のハードウェアタイルを除いて前記複数のハードウェアタイルのうちの各ハードウェアタイルを通るデータ転送経路を確立するステップ
    を備え、前記データ転送経路を確立するステップが、
    (a)前記ハードウェアタイル用のプログラムデータをインストールすること、(b)転送状態となるように前記ハードウェアタイルを構成すること、および(c)前記ハードウェアタイルがデータ転送状態にある時間の対応する既定の長さを指定するキックオフ状態カウンタをインストールすることによって、前記データ転送経路の各ハードウェアタイルを順次構成するステップを備える、方法。
  18. 前記データ転送経路の特定のタイルに対して、時間の前記既定の長さが、プログラムデータがまだインストールされていない、前記複数のハードウェアタイル内のタイルの個数の関数である、請求項17に記載の方法。
  19. 各キックオフ状態カウンタが時間の前記対応する既定の長さに達した後、前記キックオフ状態カウンタがインストールされる前記ハードウェアタイルが、前記ハードウェアタイル上にインストールされた前記プログラムデータに従って動作を実行し始める、請求項17または18のいずれか一項に記載の方法。
  20. 集積回路を備えるシステムであって、前記集積回路が、
    複数のハードウェアタイルと、
    前記複数のハードウェアタイルを結合するデータバスと
    を備え、
    前記システムが請求項1から19のいずれか一項に記載の方法を実行するように構成される、システム。
  21. データバスによって結合された複数のハードウェアタイルを備えるコンピューティングシステムによって実行されると、請求項1から19のいずれか一項に記載の方法を前記コンピューティングシステムに実行させる、コンピュータ可読コードを備えるコンピュータプログラム。
JP2023081795A 2019-08-22 2023-05-17 オンチップ動作の初期化 Pending JP2023107786A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201962890149P 2019-08-22 2019-08-22
US62/890,149 2019-08-22
JP2022512407A JP7282980B2 (ja) 2019-08-22 2020-08-20 オンチップ動作の初期化

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2022512407A Division JP7282980B2 (ja) 2019-08-22 2020-08-20 オンチップ動作の初期化

Publications (2)

Publication Number Publication Date
JP2023107786A true JP2023107786A (ja) 2023-08-03
JP2023107786A5 JP2023107786A5 (ja) 2023-09-06

Family

ID=72422232

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2022512407A Active JP7282980B2 (ja) 2019-08-22 2020-08-20 オンチップ動作の初期化
JP2023081795A Pending JP2023107786A (ja) 2019-08-22 2023-05-17 オンチップ動作の初期化

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2022512407A Active JP7282980B2 (ja) 2019-08-22 2020-08-20 オンチップ動作の初期化

Country Status (6)

Country Link
US (1) US20220277125A1 (ja)
EP (1) EP4000229A1 (ja)
JP (2) JP7282980B2 (ja)
KR (1) KR20220051367A (ja)
TW (1) TWI758833B (ja)
WO (1) WO2021035015A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4113312A1 (en) * 2021-06-28 2023-01-04 Google LLC Control of machine-learning systems
WO2023114417A2 (en) * 2021-12-16 2023-06-22 Google Llc One-dimensional computational unit for an integrated circuit

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0991262A (ja) * 1995-09-20 1997-04-04 Fuji Xerox Co Ltd マルチプロセッサシステム
US7804504B1 (en) * 2004-12-13 2010-09-28 Massachusetts Institute Of Technology Managing yield for a parallel processing integrated circuit
JP2009271724A (ja) * 2008-05-07 2009-11-19 Toshiba Corp ハードウェアエンジン制御装置
US9952831B1 (en) * 2017-02-16 2018-04-24 Google Llc Transposing in a matrix-vector processor
US10261786B2 (en) * 2017-03-09 2019-04-16 Google Llc Vector processing unit

Also Published As

Publication number Publication date
CN116057914A (zh) 2023-05-02
TW202127840A (zh) 2021-07-16
TWI758833B (zh) 2022-03-21
WO2021035015A1 (en) 2021-02-25
KR20220051367A (ko) 2022-04-26
US20220277125A1 (en) 2022-09-01
JP7282980B2 (ja) 2023-05-29
JP2022545115A (ja) 2022-10-25
EP4000229A1 (en) 2022-05-25

Similar Documents

Publication Publication Date Title
JP2023107786A (ja) オンチップ動作の初期化
US11451229B1 (en) Application specific integrated circuit accelerators
CN110100255B (zh) 区域有效、可重新配置、节能、速度有效的神经网络基板
EP3590077A1 (en) Neural network processing with model pinning
US7975068B2 (en) System and method for self configuration of reconfigurable systems
US10564929B2 (en) Communication between dataflow processing units and memories
CN111199275B (zh) 用于神经网络的片上系统
KR20220015813A (ko) 딥러닝 연산 수행 방법 및 장치
US11645225B2 (en) Partitionable networked computer
CN109564637B (zh) 用于可扩展流突触超级计算机的方法、系统和介质
CN113407479A (zh) 一种内嵌fpga的众核架构及其数据处理方法
CN115244909A (zh) 机器学习加速器中的队列分配
CN113407238A (zh) 一种具有异构处理器的众核架构及其数据处理方法
JP7342247B2 (ja) オンチップ動作の明示的なスケジューリング
CN116057914B (en) Method and system for initializing on-chip operations
US20210049125A1 (en) Methods and Systems for Computing in Memory
WO2018187487A1 (en) General-purpose parallel computing architecture
US20230058749A1 (en) Adaptive matrix multipliers
US20200311020A1 (en) Networked Computer With Embedded Rings Field
Dong A study on hardware design for high performance artificial neural network by using FPGA and NoC
CN117667836A (zh) 一种去中心化多pea架构的cgra可重构处理器

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230615

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230818

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230818