JP7476299B2 - 同期プロセッサのためのコンパイル - Google Patents

同期プロセッサのためのコンパイル Download PDF

Info

Publication number
JP7476299B2
JP7476299B2 JP2022511312A JP2022511312A JP7476299B2 JP 7476299 B2 JP7476299 B2 JP 7476299B2 JP 2022511312 A JP2022511312 A JP 2022511312A JP 2022511312 A JP2022511312 A JP 2022511312A JP 7476299 B2 JP7476299 B2 JP 7476299B2
Authority
JP
Japan
Prior art keywords
configuration
update
program
configuration update
operations
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.)
Active
Application number
JP2022511312A
Other languages
English (en)
Other versions
JP2022544843A (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.)
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 JP2022544843A publication Critical patent/JP2022544843A/ja
Priority to JP2024066659A priority Critical patent/JP2024105295A/ja
Application granted granted Critical
Publication of JP7476299B2 publication Critical patent/JP7476299B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/458Synchronisation, e.g. post-wait, barriers, locks
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Hardware Redundancy (AREA)
  • Multi Processors (AREA)
  • Executing Machine-Instructions (AREA)

Description

本明細書は、同期集積回路アクセラレータのためのコンパイラ技法に関する。
同期集積回路アクセラレータは、高度に並列な同期動作を実行するために設計される特定用途向け集積回路(ASIC)である。この並列性は、同時に実行することができる多くの異なる独立した処理要素を統合することによって達成される。そのようなデバイスは、ニューラルネットワークを通じて推論パスを加速させるのによく適しており、たとえば、独立の処理要素の各々が、重みを用いて層入力の異なる乗算または加算を実行する。
簡潔にするために、本明細書では、そのようなデバイスは、同期プロセッサまたは同期チップと呼ばれる。実際には、そのようなデバイスは、複数のシリコンウェハを使用して、たとえばダイ積層またはシリコンインターポーザを使用して実装され得る。
本明細書では、プロセッサが同期しているとは、独立の処理ユニットによって実施される動作が、たとえば命令プログラムのif/elseステートメントのように、分岐した実行を実施しないことを意味する。むしろ、動作は、部分的にまたは完全にのいずれかで、事前にスケジューリングされ得る。たとえば、一部の同期プロセッサの動作は、個々のサイクルレベルでスケジューリングされなければならず、あらゆる処理要素のあらゆる動作が実行サイクルの中の特定のスロットに割り当てられることを意味する。
この複雑さにより、同期プロセッサのプログラミングは、大いにエラーが生じやすくなる。たとえば、単一のサイクルの予想しない遅延をもたらすユーザのバグにより、得られる計算結果が不正確または未定義になることがあり、これは、同じプログラムの複数のパスが異なる結果を生成し得ることを意味し得る。
本明細書は、同期プロセッサのために書かれたプログラムをコンパイルするための技法を説明する。以下で説明される技法は、プロセッサに流れるデータを操作するデータ命令をスケジューリングすることに関する。以下で説明される技法はまた、プロセッサの制御ハードウェアによって実行される構成更新命令を自動的に生成してスケジューリングすることに関する。
本明細書において説明される主題の特定の実施形態は、以下の利点のうちの1つまたは複数を実現するために実装され得る。システムは、レイテンシの影響を受けない入力プログラムから、同期プロセッサのための完全にスケジューリングされた中間表現を自動的に生成することができる。これは、同期プロセッサをプログラムする際の人の過誤を大きく減らす。加えて、レイテンシの影響を受けないプログラムは、書き直されることなく、異なるハードウェア構成のために再使用され得る。中間表現は、構成更新命令が完全にスケジューリングされることを可能にし、出力プログラムが存在し得ないときにエラーを出す能力をコンパイラに与える。
本明細書の主題の1つまたは複数の実施形態の詳細は、以下の添付の図面および説明に記載される。主題の他の特徴、態様、および利点は、説明、図面、および特許請求の範囲から明らかになるだろう。
入力プログラムの中間表現を生成するための例示的なプロセスのフローチャートである。 例示的なプログラムのグラフ表現の図である。 中間表現のための構成更新命令を出すための例示的なプロセスのフローチャートである。 同期プロセッサの制約のもとで構成更新命令をスケジューリングすることを示す図である。 専用論理回路の例を示す概略図である。 タイルの例を示す図である。
様々な図面における同様の参照番号および指定は、同様の要素を示す。
図1は、入力プログラムの中間表現を生成するための例示的なプロセスのフローチャートである。便宜的に、プロセスは、1つまたは複数のコンピュータのシステムによって実行され、1つまたは複数の位置に位置し、本明細書に従って適切にプログラムされるものとして説明される。
システムは、同期プロセッサの構成要素によって実行されるべき動作を規定するプログラムを受け取る(110)。一般に、プログラムの各ステートメントは、1つまたは複数の入力変数、出力変数、および動作を規定することができる。プログラムは、動作がいつ実行されるかについてのレイテンシまたはタイミング情報を規定する必要はない。代わりに、システムは次いで、同期プロセッサ上でプログラムを実行するためのタイミング制約を決定するために、変数名を使用することができる。
TABLE 1(表1)は、RAMから読み取られた2つの値を乗算し、RAMから読み取られた第3の値に結果を加算し、結果をRAMに書き込む例示的なプログラムを列挙する。
Figure 0007476299000001
矢印シンタックス、たとえば("<-name-<")は、右からの供給されるオンチップパラメータであるサブプログラムを特定し、それらのオンチップ結果を左にある名前に割り当てる。同期プロセッサの場合、矢印シンタックスは、プロセッサ上の特定のハードウェア構成要素を指すために使用され得る。この例では、「addr」が、行1の「proc addr->…」により宣言されるような全体の合成プログラムへの入力として使用されている。この場合、「addr」は、3つの読み取り動作の各々においてどのプロセッサ構成要素のRAMから読み取るべきかを特定する。たとえば、「addr」により表されるRAMは、プログラムの次の段階によって使用されるべき部分和を計算して記憶することができる。
特に、例示的なプログラムはレイテンシの影響を受けず、これは、それが構成要素のレイテンシについてのどのような情報も規定せず、各動作を実行するために必要とされるタイミングを規定しないことを意味する。これは、従来のプログラムと異なり、ステートメントが逐次実行されることをTABLE 1(表1)のプログラムが必要としないことを意味する。実際には、ステートメントはしばしば、同期プロセッサの性質に応じて異なる順序で、または並列に実行されることが予想される。
システムは、同期プロセッサの構成要素の各々のためのそれぞれのクロックレイテンシ値を取得する(120)。システムは、(1)プログラムの中のキーワードまたは関数によって認識される各動作と、(2)各動作が同期プロセッサ上で要するクロックサイクルの数を表すそれぞれのクロックレイテンシ値との間のマッピング、たとえばテーブルを維持することができる。この構成は、レイテンシの影響を受けない同じプログラムが、様々な基本ハードウェア設計に対してコンパイルされることを可能にする。これは、基本ハードウェアの設計が構成要素レイテンシ値の一部を変化させる場合に、ハードウェアの新しい設計のためにも同じプログラムをコンパイルすることができるので、有利である。
システムは、プログラムを実行するためのクロックタイミング制約を生成する(130)。クロックタイミング制約は、特定の動作が他の動作に対していつ起こらなければならないかを規定する。一般に、値の読み取りは、値が使用されるより少なくとも1クロックサイクル前に起こらなければならない。たとえば、2つの入力を必要とする乗算演算は、乗算演算が始まるより少なくとも1クロックサイクル前に2つの入力が読み取られなければならないという制約を有する。したがって、たとえば、TABLE 1(表1)の行5の乗算演算は、行3および4の読み取り動作の各々より少なくとも1クロックサイクル後に開始しなければならない。加えて、連続する動作は時間的に重複すべきではない。システムは、どの動作が他の動作の後に起こらなければならないかを決定するために、プログラムの中の変数名を使用することによって制約を生成することができる。
図2は、例示的なプログラムのグラフ表現200である。グラフ表現200は、TABLE 1(表1)に列挙される例示的なプログラムに対応する。グラフ表現200は、プログラムの中の動作のうちの1つに各々対応するノードを有する。したがって、グラフは、行2の読み取りコマンドを表す読み取りノード205と、行3の読み取りコマンドを表す読み取りノード210と、行4の読み取りコマンドを表す読み取りノード215と、行5の乗算コマンドを表す乗算ノード220と、行6の加算コマンドを表す加算ノード225と、行7の書き込みコマンドを表す書き込みノード230とを有する。
クロックタイミング制約を生成するために、システムは、プログラムを、または等価的にグラフ表現の中のエッジを走査して、変数名に基づいて依存性を決定することができる。システムは次いで、動作間の発見された依存性のために、必要とされるクロックレイテンシ値を計算することができる。たとえば、行4の乗算演算に4サイクルかかる場合、システムは、行5の加算演算が、乗算演算の出力に依存し、かつ乗算演算が開始してから4サイクル以内に開始すべきではないという制約を、生成することができる。
別の例として、行6の加算演算は変数xに依存し、これは行2から読み取られる。したがって、行6の演算と行2の演算との間に依存性がある。
図2に示されるように、2つの読み取りノード205および210は1サイクルのレイテンシを有する。読み取りノード215は2サイクルのレイテンシを有する。乗算ノード220は4サイクルのレイテンシを有し、加算ノード225は3サイクルのレイテンシを有し、書き込みノード230は1サイクルのレイテンシを有する。
図1に示されるように、システムは、複数の動作の各動作にそれぞれのクロックサイクル値を割り当てるプログラムの中間表現を生成する(140)。中間表現は、ユーザプログラムより低水準のコードであるが、一般に同期プロセッサにより直接実行できるほど低水準ではないという意味で、中間である。
システムは、プログラムの中の任意の恣意的な動作を開始することによって中間表現を生成し、次いで依存性およびレイテンシを走査することができる。たとえば、システムは、読み取りノード210において開始し、恣意的な開始サイクル番号、たとえばサイクル0において実行されるものとしてその読み取り動作を割り当てることができる。
システムは次いで、ノード210とノード220との間の依存性、ならびにノード210の1サイクルのレイテンシを使用して、サイクル1において実行されるものとして後続の乗算演算を割り当てることができる。
システムは次いで、乗算ノード220の他の依存関係を調査することができ、これは読み取りノード215である。読み取りノード215は、読み取りノード210のために使用されるRAMとは異なる特性を有するスケーリングRAMからの読み取りを表す。したがって、レイテンシは異なり、1サイクルではなく2サイクルである。したがって、システムは、乗算演算220の乗算演算より2サイクル前に実行されるものとして、読み取りノード215の読み取り演算を割り当てる。
これは、-1という負のサイクル値をもたらす。しかしながら、中間表現における値は、相対的なサイクル時間のみを表し、したがって、負の値が許容され、場合によっては予想され、または不可避ですらある。
システムは次いで、加算演算に対応する加算ノード225の依存関係を調査することができる。乗算ノード220と加算ノード225との間のレイテンシは4サイクルであるので、システムは、乗算演算より4サイクル後、たとえばサイクル5において実行されるものとして、加算演算を割り当てる。
システムは次いで、加算ノード225への他の依存関係を調査することができ、これは読み取りノード205である。読み取りノード205の1サイクルのレイテンシにより、システムは、加算ノード225より1サイクル前に実行されるものとして読み取り動作を割り当てることができる。したがって、システムは、読み取り動作に4というサイクル値を割り当てる。
最後に、システムは加算ノード225の依存関係を調査し、これはこの例では、書き込み動作に対応する書き込みノード230である。加算ノード225の3サイクルのレイテンシにより、システムは、8というサイクル値を書き込み動作に割り当てる。
したがって、中間表現は、それぞれのサイクル時間値をプログラムの中の各動作と関連付ける。システムは、任意の適切なデータ構造を使用して、中間表現を記憶することができる。たとえば、システムは、(1)サイクル時間値と(2)命令識別子との間のマッピングを、グラフの中のノード、命令テキスト、または動作の何らかの他の表現に記憶することができる。
図2の値に示されるグラフを処理することから生じる例示的な中間表現が、TABLE 2(表2)に示されている。
Figure 0007476299000002
元の入力プログラムとは異なり、TABLE 2(表2)のステートメントは、同期プロセッサによって実行される動作の時間順序を規定しない。この動作の順序は、実際のハードウェアでは成功する可能性が非常に高く、それは、スケジューリングのすべてレイテンシ情報がサイクルレベルで自動的に生成されているからである。
場合によっては、正しい中間表現が入力プログラムに対して存在しない。そのような場合、システムは、プログラムを正しくコンパイルすることができないことを示すエラーを出すことができる。これは、たとえば、入力プログラムにおける依存性がサイクルを形成するときに起こり得る。これはまた、ある値が必要であるときに利用可能になるように、その値を十分に早くハードウェアによって生成できないときにも起こり得る。
別の例として、同じ中間値から導出された複数の入力を有するあらゆる種類の動作が、誤って形成されることがある。値「a」がサイクル0において生み出され、値「b」が3サイクルで「a」から計算され、値「c」が2サイクルで値「a」から計算され、プログラムがレイテンシの差に対処することなく「b」および「c」を乗じることを試みる場合、それらの動作をスケジューリングするための正しい方法はない。代わりに、ユーザは、たとえばRAMまたは遅延レジスタを使用することによって、「c」を次のサイクルへと通信するためのコードを追加しなくてもよいことがある。
中間表現は、同期プロセッサによって実行されるべき動作のサイクルレベルのスケジュールを規定するが、コンパイラは、同期プロセッサの構成要素上でプログラムを実際に実行するために、追加の命令を出すことができる。具体的には、コンパイラは、同期プロセッサの処理構成要素間のデータ経路の変化を規定する、構成更新命令を生成する必要があり得る。これは特に、命令が多面体ループセマンティクスを有するときに当てはまり、命令の各シーケンスが複数回実行される可能性があることを意味する。したがって、たとえば、プログラムセマンティクスは、特定の読み取り動作が10回の連続する反復で特定のレジスタから読み取られるべきであり、次いで、次の10回の反復で異なる特定のレジスタから読み取られるべきであることを規定することができる。
ある構成から別の構成に切り替えるために、プロセッサは、プロセッサ構成要素間のデータ経路の中のマルチプレクサへの入力を変更する、構成更新命令を出すことができる。
図3は、中間表現のための構成更新命令を出すための例示的なプロセスのフローチャートである。便宜的に、プロセスは、1つまたは複数のコンピュータのシステムによって実行され、1つまたは複数の位置に位置し、本明細書に従って適切にプログラムされるものとして説明される。
システムは、中間表現を処理して、各動作のためのそれぞれの更新ウィンドウを生成する(310)。システムは、中間表現の中の命令を処理し、構成更新を要求する各命令に対して、対応する構成更新命令がその間に実行される必要がある時間範囲を表すそれぞれの更新ウィンドウを生成する。いくつかの実装形態では、受信されている構成更新命令がないと、プロセッサは、次に動作が実行されるとき同じ構成を使用する。
システムは、同期プロセッサのための1つまたは複数の構成制約を取得する(320)。同期プロセッサの制御ハードウェアのための自然の構成制約のうちの1つは、単一のサイクルでどれだけ多くの構成更新命令が実行され得るかである。たとえば、一部の同期プロセッサは、1つ、2つ、4つ、または8つだけの構成更新命令を同時に実行することをサポートし得る。
他の構成制約は、どのサイクルで構成命令が実行され得るかを含み得る。たとえば、いくつかの実装形態では、構成更新命令を、Nサイクルごとにのみ実行することができ、たとえばNは2、4、または8である。
他の構成制約は、プロセッサの電力領域当たりどれだけの構成更新が実行され得るかを規定する、電力領域制約を含み得る。
システムは、更新ウィンドウおよび構成制約から構成更新命令を生成してスケジューリングする(330)。各構成更新命令は、異なるループ反復に対してどのように命令が振る舞うかを変えることができる。たとえば、構成更新命令は、レジスタ読み取り動作のレジスタを変えることができる。別の例として、構成更新命令は、同期プロセッサのデータ経路の中のマルチプレクサの引数を変えることができる。これにより、下流の動作が、後続のループ反復で異なる引数を使用するようになり得る。一般に、各構成更新命令は、中間表現の処理から生成される更新ウィンドウのうちの1つの中で発生するようにスケジューリングされる。システムは、利用可能な更新ウィンドウ内のすべての必要とされる構成更新命令をスケジューリングするために、任意の適切な制約解決手順を使用することができる。例示的な制約解決の例がここで説明される。
図4は、同期プロセッサの制約のもとで、構成更新命令をスケジューリングすることを示す図である。図4は水平時間軸を有し、これに沿って、構成ウィンドウおよび更新ウィンドウが示されている。これは、上で説明されたようにプログラムの中間表現を処理した後でコンパイラが生成できる情報である。
構成ウィンドウは、特定の命令が特定の構成を有するプロセッサによって実行される時間範囲を表す。更新ウィンドウは、特定の命令に対して、構成が重要ではない、または無視されるような時間範囲を表す。
したがって、RegFile0Read命令452は、命令452がC1という名称の構成を使用して実行されるような第1の更新ウィンドウ412および構成ウィンドウ415を有するものとして示される。構成ウィンドウ415の間、プロセッサは、構成C1を使用して繰り返しサイクルごとに一度命令452を実行する。
同様に、RegFile1Read命令454は、命令454がC2という名称の構成を使用して実行される第2の更新ウィンドウ422および構成ウィンドウ425を有するものとして示される。構成ウィンドウ415の間に、プロセッサは、構成C2を使用して繰り返しサイクルごとに一度命令452を実行する。特に、第2の更新ウィンドウ422は第1の更新ウィンドウ412よりはるかに長く、これは、RegFile1Read命令454のための構成更新命令を出すためのさらなるフレキシビリティがあることを意味する。
乗算命令456は、第1の構成ウィンドウ432および第2の構成ウィンドウ434を有するものとして示されている。これらの構成ウィンドウの各々の間、プロセッサは、上で説明されたレジスタ読み取り命令の場合のように動作を繰り返すこととは対照的に、乗算演算の複数のサイクルを実行することができる。乗算命令は更新ウィンドウ435を有する。たとえば、更新ウィンドウ435は、乗算演算のオペランドを変更するために、データ経路を変更することができる。
加算命令458はまた、その間に加算演算の複数のサイクルが実行される2つの構成ウィンドウ442および444、ならびに、その間に加算命令の1つまたは複数のオペランドが変更され得る2つの更新ウィンドウ443および445を有するものとして示される。
コンパイラは、プロセッサの制約を満たす構成更新命令のスケジュールを決定するために、更新ウィンドウを使用することができる。この例では、制約は、プロセッサがサイクルX、サイクルY、およびサイクルZでのみ構成更新命令を実行できるというものであると仮定される。加えて、プロセッサは、2つの構成更新命令だけが単一のサイクルで実行され得るという追加の制約を有する。
サイクルXは3つの更新ウィンドウと重複する。サイクルYは1つの更新ウィンドウと重複する。サイクルZはまた3つの更新ウィンドウと重複する。したがって、コンパイラは、サイクルXおよびサイクルZ上の3つの重複する更新ウィンドウのうちの最大で2つを選択することができる。
コンパイラは、5つの構成更新をどのようにスケジューリングするかを決定するために、任意の適切な制約解決手順を選ぶことができる。たとえば、コンパイラは、最も制約される更新ウィンドウで開始し、最も制約されない更新ウィンドウに向かって動作することができる。解を見つけられない場合、コンパイラは、プログラムをプロセッサ上で実行できないというエラーを出すことができる。
図4に示されるように、最も制約される更新ウィンドウは、サイクルX、サイクルY、またはサイクルZのうちの1つのみと重複する更新ウィンドウである。単一のサイクルのみと重複する4つのそのようなウィンドウ、すなわち、UW412、UW435、UW443、およびUW445がある。
したがって、コンパイラは、それらの更新ウィンドウの間に対応する構成更新命令をスケジューリングすることができる。言い換えると、コンパイラは、サイクルXの間にCU0 401およびCU3 404をスケジューリングすることができ、サイクルZの間にCU2 403およびCU4 404をスケジューリングすることができる。
コンパイラは次いで、残りの更新ウィンドウのための検討事項から、すでに2つの構成更新を有するあらゆるサイクルを取り除くことができる。したがって、コンパイラは、さらなる検討事項からサイクルXおよびサイクルZを除去することができ、それは、それらの両方のサイクルが構成更新命令によって完全に占有されるからである。
唯一の残りの割り当てられていない更新ウィンドウはUW422であり、これは依然としてサイクルYと重複する。したがって、コンパイラはサイクルYの間にCU1 402をスケジューリングすることができ、すべての構成更新命令のスケジューリングが成功したので、プロセスは終了することができる。
しかしながら、第2の更新ウィンドウ422が第1の更新ウィンドウ412に等しかった場合を考える。その場合、少なくとも3つの構成更新命令がサイクルXのためにスケジューリングされるので、スケジューリング問題に対する解はない。その事例では、コンパイラは、構成更新のスケジューリングに成功できないというエラーを出すことができる。
図5は、専用論理回路、具体的にはASIC500の例を示す概略図である。ASIC500は、簡潔にするためにタイルと呼ばれる複数の同期プロセッサを含む。たとえば、ASIC500はタイル502を含み、タイル502のうちの1つまたは複数は、たとえば乗算演算および加算演算などの同期計算を実行するように構成される専用回路を含む。具体的には、各タイル502はセルの計算アレイを含んでもよく、その中の各セルは、数学的演算を実行するように構成される(たとえば、図6に示され、本明細書において説明される例示的なタイル200参照)。いくつかの実装形態では、タイル502は格子パターンで並べられ、タイル502は第1の次元501(たとえば、行)および第2の次元503(たとえば、列)に沿って並べられる。たとえば、図5に示される例では、タイル502は4つの異なるセクション(510a、510b、510c、510d)へと分割され、各セクションは、上下18タイル掛ける左右16タイルの格子に並べられる288個のタイルを含む。いくつかの実装形態では、図5に示されるASIC500は、別々のタイルへと再分割される/並べられるセルの単一のシストリックアレイを含むものとして理解されてもよく、各タイルは、セル、ローカルメモリ、およびバスラインのサブセット/サブアレイを含む(たとえば、図6参照)。
ASIC500はまた、ベクトル処理ユニット504を含む。ベクトル処理ユニット504は、タイル502から出力を受け取りタイル502から受け取られた出力に基づいてベクトル計算出力値を計算するように構成される回路を含む。たとえば、いくつかの実装形態では、ベクトル処理ユニット504は、タイル502から受け取られた出力に対して累算演算を実行するように構成される回路(たとえば、乗算回路、加算回路、シフタ、および/またはメモリ)を含む。代替または追加として、ベクトル処理ユニット504は、タイル502の出力に非線形関数を適用するように構成される回路を含む。代替または追加として、ベクトル処理ユニット504は、正規化された値、プールされた値、または両方を生成する。ベクトル処理ユニットのベクトル計算出力は、1つまたは複数のタイルに記憶され得る。たとえば、ベクトル計算出力は、タイル502と一意に関連付けられるメモリに記憶され得る。代替または追加として、ベクトル処理ユニット504のベクトル計算出力は、たとえば計算の出力として、ASIC500の外部の回路に転送され得る。いくつかの実装形態では、ベクトル処理ユニット504は、タイル502の対応する集合体から出力を受け取り受け取られた出力に基づいてベクトル計算出力を計算するように構成される回路を各区分が含むように、区分される。たとえば、図5に示される例では、ベクトル処理ユニット504は、第1の次元501にまたがる2つの行を含み、行の各々が32列に並べられた32個の区分506を含む。各区分506は、タイル502の対応する列からの出力(たとえば、累算された合計)に基づいて、本明細書において説明されるようにベクトル計算を実行するように構成される回路(たとえば、乗算回路、加算回路、シフタ、および/またはメモリ)を含む。ベクトル処理ユニット504は、図5に示されるようにタイル502の格子の中央に配置され得る。ベクトル処理ユニット504の他の位置的な構成も可能である。
ASIC500はまた、通信インターフェース508(たとえば、インターフェース508a、508b)を含む。通信インターフェース508は、シリアライザ/デシリアライザ(SerDes)インターフェースおよび汎用入力/出力(GPIO)インターフェースの1つまたは複数のセットを含む。SerDesインターフェースは、ASIC500のための命令(たとえば、以下で説明される制御可能なバスラインを動作させるための命令)および/または入力データを受け取り、ASIC500から外部回路にデータを出力するように構成される。たとえば、SerDesインターフェースは、通信インターフェース508内に含まれるSerDesインターフェースのセットを介して、32Gbpsというレート、56Gbpsというレート、または任意の適切なデータレートで、命令を送信し、かつ/またはデータを入力するように構成され得る。GPIOインターフェースは、デバッグおよび/またはブートストラップのためのインターフェースを提供するように構成される。たとえば、ASIC500は、オンにされるとブートプログラムを実行し得る。プログラムが機能しない場合、管理者はGPIOインターフェースを使用して失敗の原因をデバッグし得る。
ASIC500はさらに、通信インターフェース508と、ベクトル処理ユニット504と、複数のタイル502との間でデータを搬送するように構成される、複数の制御可能なバスライン(たとえば、図6参照)を含む。制御可能なバスラインは、たとえば、格子の第1の次元501(たとえば、行)と格子の第2の次元503(たとえば、列)の両方に沿って延びるワイヤーを含む。第1の次元501に沿って延びる制御可能なバスラインの第1のサブセットは、第1の向きに(たとえば、図5の右に)データを転送するように構成され得る。第1の次元501に沿って延びる制御可能なバスラインの第2のサブセットは、第2の向きに(たとえば、図5の左に)データを転送するように構成され得る。第2の次元503に沿って延びる制御可能なバスラインの第1のサブセットは、第3の向きに(たとえば、図5の上に)データを転送するように構成され得る。第2の次元503に沿って延びる制御可能なバスラインの第2のサブセットは、第4の方向に(たとえば、図5の下に)データを転送するように構成され得る。
各々の制御可能なバスラインは、クロック信号に従ってラインに沿ってデータを搬送するために使用される、フリップフロップなどの複数の搬送要素を含む。制御可能なバスラインを介してデータを転送することは、各クロックサイクルにおいて、制御可能なバスラインの第1の搬送要素から制御可能なバスラインの第2の隣接する搬送要素にデータを移すことを含み得る。いくつかの実装形態では、データは、クロックサイクルの立ち上がりまたは立ち下がりのエッジにおいて、制御可能なバスラインを介して搬送される。たとえば、第1のクロックサイクルで、制御可能なバスラインの第1の搬送要素(たとえば、フリップフロップ)に存在するデータは、第2のクロックサイクルで、制御可能なバスラインの第2の搬送要素(たとえば、フリップフロップ)に転送され得る。いくつかの実装形態では、搬送要素は、互いに固定された距離だけ周期的に離されてもよい。たとえば、いくつかの場合、各々の制御可能なバスラインは複数の搬送要素を含み、各搬送要素は対応するタイル502内に位置し、またはそれに近接している。
各々の制御可能なバスラインはまた、複数のマルチプレクサおよび/またはデマルチプレクサを含む。制御可能なバスラインのマルチプレクサ/デマルチプレクサは、バスラインとASCIチップ500の構成要素との間でデータを転送するように構成される。たとえば、制御可能なバスラインのマルチプレクサ/デマルチプレクサは、タイル502に、および/もしくはタイル502から、ベクトル処理ユニット504に、および/もしくはベクトル処理ユニット504から、または通信インターフェース508に、および/もしくは通信インターフェース508からデータを転送するように構成され得る。タイル502と、ベクトル処理ユニット504と、通信インターフェースとの間でデータを転送することは、起こるべき所望のデータ転送に基づいて、制御信号をマルチプレクサに送信することを含み得る。制御信号は、マルチプレクサおよび/またはデマルチプレクサに直接結合されるレジスタに記憶され得る。そして、制御信号の値は、たとえば、どのデータがソース(たとえば、タイル502またはベクトル処理ユニット504内のメモリ)から制御可能なバスラインに転送されるか、または代替として、どのデータが制御可能なバスラインからシンク(たとえば、タイル502またはベクトル処理ユニット504内のメモリ)に転送されるかを決定し得る。
制御可能なバスラインはローカルレベルで制御されるように構成されるので、各タイル、ベクトル処理ユニット、および/または通信インターフェースは、そのタイル、ベクトル処理ユニット、および/または通信インターフェースを通過する制御可能なバスラインを操作するための、制御要素の固有のセットを含む。たとえば、各タイル、1Dベクトル処理ユニット、および通信インターフェースは、そのタイル、1Dベクトル処理ユニット、および通信インターフェースとの間でのデータ転送を制御するための、搬送要素、マルチプレクサ、および/またはデマルチプレクサの対応するセットを含み得る。
ASICチップ500の動作と関連付けられるレイテンシを最小にするために、タイル502およびベクトル処理ユニット504は、様々な構成要素間でデータが移動する距離を減らすように配置され得る。ある特定の実装形態では、タイル502と通信インターフェース508の両方が複数のセクションへと分離されてもよく、タイルセクションと通信インターフェースセクションの両方が、タイルと通信インターフェースとの間でデータが移動する最大の距離が減るように並べられる。たとえば、いくつかの実装形態では、タイル502の第1のグループは、通信インターフェース508の第1の側の第1のセクションに並べられてもよく、タイル502の第2のグループは、通信インターフェースの第2の側の第2のセクションに並べられてもよい。結果として、通信インターフェースから最も遠いタイルまでの距離は、タイル502のすべてが通信インターフェースの一方の側の単一のセクションに並べられる構成と比較して、半分になり得る。
代替として、タイルは、4つのセクションなどの異なる数のセクションに並べられてもよい。たとえば、図5に示される例では、ASIC500の複数のタイル502は、複数のセクション510(510a、510b、510c、510d)に並べられる。各セクション510は、格子パターンで並べられる同様の数のタイル502を含む(たとえば、各セクション510は、16行および16列に並べられた256個のタイルを含み得る)。通信インターフェース508は、タイル502のセクション510の両側に並べられた第1の通信インターフェース508aおよび第2の通信インターフェース508bという、複数のセクションへと分割される。第1の通信インターフェース508aは、制御可能なバスラインを通じて、ASICチップ500の左側の2つのタイルセクション510a、510cに結合され得る。第2の通信インターフェース508bは、制御可能なバスラインを通じて、ASICチップ500の右側の2つのタイルセクション510b、510dに結合され得る。結果として、通信インターフェース508へ、および/または通信インターフェースからデータが移動する最大の距離(およびしたがってデータ伝播と関連付けられるレイテンシ)は、単一の通信インターフェースしか利用可能ではない様式と比較して半分になり得る。データレイテンシを減らすために、タイル502および通信インターフェース508の他の結合様式も可能である。タイル502および通信インターフェース508の結合様式は、制御信号を搬送要素および制御可能なバスラインのマルチプレクサに提供することによってプログラムされ得る。
いくつかの実装形態では、1つまたは複数のタイル502は、ASIC500内の制御可能なバスラインおよび/または他のタイル(本明細書では「制御タイル」と呼ばれる)に関して、読み取りおよび書き込み動作を開始するように構成される。ASIC500内の残りのタイルは、入力データに基づいて計算を実行する(たとえば、層推論を計算する)ように構成され得る。いくつかの実装形態では、制御タイルは、ASIC500内の他のタイルと同じ構成要素および構成を含む。制御タイルは、ASIC500の1つまたは複数の余剰のタイル、1つまたは複数の余剰の行、または1つまたは複数の余剰の列として追加され得る。たとえば、各タイル502が入力データに対する計算を実行するように構成される、タイル502の対称的な格子では、制御タイルの1つまたは複数の追加の行が、入力データに対して計算を実行するタイル502のための読み取りおよび書き込み動作を扱うために含まれ得る。たとえば、各セクション510は18行のタイルを含み、タイルの最後の2行は制御タイルを含み得る。いくつかの実装形態では、別々の制御タイルを提供することは、計算を実行するために使用される他のタイルにおいて利用可能なメモリの量を増やす。しかしながら、本明細書において説明されるような制御を提供することに専用の別々のタイルは必須ではなく、場合によっては、別々の制御タイルは提供されない。むしろ、各タイルは、そのタイルのための読み取りおよび書き込み動作を開始するためのローカルメモリ命令において記憶し得る。
さらに、図5に示される各セクション510は18行掛ける16列に並べられたタイルを含むが、タイル502の数およびセクションにおけるタイルの配列は異なっていてもよい。たとえば、場合によっては、セクション510は等しい数の行および列を含んでもよい。
さらに、図5では4つのセクションへと分割されるものとして示されるが、タイル502は他の異なるグループへと分割されてもよい。たとえば、いくつかの実装形態では、タイル502は、ベクトル処理ユニット504の上の(たとえば、図5に示されるページの一番上により近い)第1のセクションおよびベクトル処理ユニット504の下の(たとえば、図5に示されるページの一番下により近い)第2のセクションなどの、2つの異なるセクションへとグループ化される。そのような配列では、各セクションは、たとえば、上下18タイル(方向503に沿った)掛ける左右32タイル(方向501に沿った)の格子に並べられた576個のタイルを含み得る。セクションは、他の総数のタイルを含んでもよく、異なるサイズのアレイに並べられてもよい。場合によっては、セクション間の分割は、ASIC500のハードウェアの特徴により描写される。たとえば、図5に示されるように、セクション510a、510bは、ベクトル処理ユニット504によってセクション510c、510dから分離され得る。
レイテンシはまた、ベクトル処理ユニット504をタイルセクション510に対して相対的に中央に配置することによって減らされ得る。いくつかの実装形態では、タイル502の第1の半分はベクトル処理ユニット504の第1の側に並べられ、タイル502の第2の半分はベクトル処理ユニット504の第2の側に並べられる。
たとえば、図5に示されるASICチップ500において、ベクトル処理ユニット504は2つのセクション(たとえば、2つの行)を含み、それらの各々が、タイル502の列の数と一致する数のセグメント506を含む。各セグメント506は、タイルのセクション510内のタイル502の対応する列から、累算された合計などの出力を受け取るように配置され構成され得る。図5に示される例では、ベクトル処理ユニット504の第1の側(たとえば、ベクトル処理ユニット504の上)に配置されたタイルセクション510a、510bは、制御可能なバスラインを通じて、セグメント506の上の行に結合され得る。ベクトル処理ユニット504の第2の側(たとえば、ベクトル処理ユニット504の下)に配置されたタイルセクション510c、510dは、制御可能なバスラインを通じて、セグメント506の下の行に結合され得る。さらに、処理ユニット504の上の第1の半分内の各タイル502は、処理ユニット504の下の第2の半分内のそれぞれのタイル502と、ベクトル処理ユニット504から同じ距離に配置され得るので、これらの2つの半分の間に全体のレイテンシの差はない。たとえば、第1のセクション510aの行iの中のタイル502(ここで変数iは行の位置に対応する)は、タイルの第2のセクション(たとえば、セクション510c)の行m-1-iの中のタイル502と、ベクトル処理ユニット504から同じ距離に配置され得る(ここで、mは各セクションの中の行の総数を表し、行が両方のセクションにおいて同じ方向に沿ってインクリメントされると仮定する)。
この方式でタイルセクション510を構成することは、ベクトル処理ユニット504がすべてのタイル502の端(たとえば、下)に配置される配列と比較して、ベクトル処理ユニット504へ、および/またはそれからデータが移動する距離(およびしたがって、データ伝播と関連付けられるレイテンシ)を半分にすることができる。たとえば、セクション510aからタイル502の列の累算された合計を受け取ることと関連付けられるレイテンシは、セクション510aおよび510cからタイル502の列の累算された合計を受け取ることと関連付けられるレイテンシを半分にすることができる。タイル502およびベクトル処理ユニット504の結合様式は、搬送要素および制御可能なバスラインのマルチプレクサに制御信号を提供することによってプログラムされ得る。
ASICチップ500の動作の間に、アクティベーション入力はタイル間でシフトされ得る。たとえば、アクティベーション入力は、第1の次元501に沿ってシフトされ得る。加えて、タイル502によって実行される計算からの出力(たとえば、タイル502内の計算アレイによって実行される計算の出力)は、タイル間の第2の次元503に沿ってシフトされ得る。
いくつかの実装形態では、制御可能なバスラインは、ASICチップ500の動作と関連付けられるレイテンシを減らすために、データにタイル502をスキップさせるように物理的にハードワイヤリングされ得る。たとえば、第1のタイル502によって実行される計算の出力は、第1のタイル502から少なくとも1つのタイルだけ離れて配置される第2のタイル502に、格子の第2の次元503に沿ってシフトされ得るので、それらの間にあるタイルをスキップする。別の例では、第1のタイル502からのアクティベーション入力は、第1のタイル502から少なくとも1つのタイルだけ離れて配置される第2のタイル502に、格子の第1の次元501に沿ってシフトされ得るので、それらの間にあるタイルをスキップする。アクティベーション入力または出力データをシフトするときに少なくとも1つのタイルをスキップすることによって、全体のデータパス長を減らすことができるので、データがより速く転送され(たとえば、スキップされたタイルにおいてデータを記憶するためにクロックサイクルを利用する必要はない)、レイテンシが減る。
例示的な実装形態では、セクション510aの各列内の各タイル502は、制御可能なバスラインを通じて、第2の次元503に沿って出力データをベクトル処理ユニット504へ渡すように構成され得る。各列内のタイル502はさらに、次の隣接タイルをスキップすることによって(たとえば、タイル間の制御可能なバスラインの物理ハードワイヤリングを通じて)、データをベクトル処理ユニット504に渡すように構成され得る。すなわち、第1のセクション510aの中の位置(i,j)=(0,0)におけるタイル502(変数iは行の位置に対応し、変数jは列の位置に対応する)は、位置(i,j)=(2,0)にあるタイル502に出力データを渡すようにハードワイヤリングされてもよく、同様に、第1のセクション510aの中の位置(i,j)=(2,0)にあるタイル502は、位置(i,j)=(4,0)にあるタイル502に出力データを渡すようにハードワイヤリングされてもよく、以下同様である。スキップされない最後のタイル(たとえば、位置(i,j)=(16,0)に位置するタイル502)は、出力データをベクトル処理ユニット504に渡す。図5に示される例などの、18行のタイルを有するセクション510に対して、タイルのスキップは、セクション510内のすべてのタイルがベクトル処理ユニット504から最大で9「タイルホップ」離れていることを確実にするので、データパスの長さおよび得られたデータレイテンシを半分に減らすことによってASICチップ500の性能を改善する。
別の例示的な実装形態では、セクション510a、510cの各行内の、およびセクション510b、510dの各行内の各タイル502は、制御可能なバスラインを通じて、第1の次元501に沿ってアクティベーション入力を渡すように構成され得る。たとえば、セクション510a、510b、510c、510d内のいくつかのタイルは、格子500の中心に向かって、または通信インターフェース508に向かってアクティベーション入力を渡すように構成され得る。各行内のタイル502はさらに、たとえばタイル間の制御可能なバスラインをハードワイヤリングすることによって、隣接タイルをスキップするように構成され得る。たとえば、第1のセクション510aの中の位置(i,j)=(0,0)にあるタイル502(変数iは行の位置に対応し、変数jは列の位置に対応する)は、位置(i,j)=(0,2)にあるタイル502にアクティベーション入力を渡すように構成されてもよく、同様に、第1のセクション510aの中の位置(i,j)=(0,2)にあるタイル502は、位置(i,j)=(0,4)にあるタイル502にアクティベーション入力を渡すように構成されてもよく、以下同様である。いくつかの場合、スキップされない最後のタイル(たとえば、位置(i,j)=(0,14)に位置するタイル502)は、アクティベーション入力を別のタイルに渡さない。
同様に、スキップされるタイルは、反対方向にアクティベーション入力を渡し得る。たとえば、第1のセクション510aの中の位置(i,j)=(0,15)にあるタイル502(変数iは行の位置に対応し、変数jは列の位置に対応する)は、位置(i,j)=(0,13)にあるタイル502にアクティベーション入力を渡すように構成されてもよく、同様に、第1のセクション510aの中の位置(i,j)=(0,13)にあるタイル502は、位置(i,j)=(0,11)にあるタイル502にアクティベーション入力を渡すように構成されてもよく、以下同様である。いくつかの場合、スキップされない最後のタイル(たとえば、位置(i,j)=(0,1)に位置するタイル502)は、アクティベーション入力を別のタイルに渡さない。タイルをスキップすることによって、いくつかの実装形態では、データパス長および得られるデータレイテンシを半分に減らすことによってASICチップ500の性能を改善することが可能である。
本明細書において説明されるように、いくつかの実装形態では、タイル502の1つまたは複数は、制御情報を記憶することに専用である。すなわち、制御情報を記憶することに専用のタイル502は、重み入力およびアクティベーション入力などの入力データに対して計算を実行することに関与しない。制御情報は、たとえば、ASICチップ500の周りにデータが移動され得るように、ASICチップ500の動作の間に制御可能なバスラインを構成するための制御データを含み得る。制御データは、制御可能なバスラインの搬送要素およびマルチプレクサを制御するための制御信号の形式で、制御可能なバスラインに提供され得る。制御データは、所定のスケジュールに従ってデータがタイルの間で転送されるように、制御可能なバスラインの特定の搬送要素が制御可能なバスラインの次の搬送要素にデータを渡すかどうかを規定する。制御データは追加で、データがバスラインから、またはバスラインに転送されるかどうかを規定する。たとえば、制御データは、タイル内のメモリおよび/または他の回路にバスラインからデータを転送するようにマルチプレクサに指示する制御信号を含み得る。別の例では、制御データは、タイル内のメモリおよび/または回路からバスラインにデータを転送するようにマルチプレクサに指示する制御信号を含み得る。別の例では、制御データは、バスラインと通信インターフェース508との間で、および/またはバスラインとベクトル処理ユニット504との間でデータを転送するようにマルチプレクサに指示する制御信号を含み得る。代替として、本明細書において開示されるように、専用の制御タイルは使用されない。むしろ、そのような場合、各タイルのローカルメモリは、その特定のタイルのための制御情報を記憶する。
図6は、ASICチップ500において使用するためのタイル600の例を示す。各タイル600は、ローカルメモリ602と、メモリ602に結合される計算アレイ604とを含む。ローカルメモリ602は、計算アレイ604の近くに配置される物理メモリを含む。計算アレイ604は複数のセル606を含む。計算アレイ604の各セル606は、セル606へのアクティベーション入力および重み入力などのデータ入力に基づいて、計算(たとえば、乗算および累算演算)を実行するように構成される回路を含む。各セルは、クロック信号の周期で計算(たとえば、乗算および累算演算)を実行することができる。計算アレイ604は、列より多くの行、行より多くの列、または等しい数の行および列を有し得る。たとえば、図6に示される例では、計算アレイ604は、8行および8列に並べられる64個のセルを含む。とりわけ、16個のセル、32個のセル、128個のセル、または256個のセルを有する計算アレイなどの、他の計算アレイのサイズも可能である。各タイルは、同じ数のセルおよび/または同じサイズの計算アレイを含み得る。そうすると、ASICチップのために並列に実行され得る動作の総数は、チップ内の同じサイズ計算アレイを有するタイルの総数に依存する。たとえば、約1150個のタイルを含む図5に示されるASICチップ500に対して、これは、約72000回の計算がサイクルごとに並列に実行され得ることを意味する。使用され得るクロック速度の例は、限定はされないが、225MHz、500MHz、750MHz、1GHz、1.25GHz、1.5GHz、1.75GHz、または2GHzを含む。各々の個々のタイルの計算アレイ604は、図5に示されるように、タイルのより大きいシストリックアレイのサブセットである。
タイル600に含まれるメモリ602は、たとえば、SRAMなどのランダムアクセスメモリ(RAM)を含み得る。代わりに他のメモリが使用され得る。各メモリ602は、図5に示されるASICチップのn個のタイル502と関連付けられるメモリ全体のn分の1を記憶するように構成され得る。メモリ602は、単一のチップとして、または複数のチップにおいて提供され得る。たとえば、図6に示されるメモリ602は、4つのシングルポートSRAMとして提供され、それらの各々が計算アレイ604に結合される。代替として、メモリ602は、構成の中でもとりわけ、2つのシングルポートSRAMまたは8つのシングルポートSRAMとして提供され得る。メモリの合計容量は、限定はされないが、エラー訂正コーディングの後、たとえば16kB、32kB、64kB、または128kBであり得る。計算アレイに対してローカルに物理メモリ602を設けることによって、ASIC500のためのワイヤリングの密度は、いくつかの実装形態では大きく低下し得る。本明細書において説明されるようにローカルに提供されるのとは対照的に、メモリがASIC500内に集中する代替の構成では、メモリ帯域幅の各ビットのためのワイヤーを必要とし得る。ASIC500の各タイルをカバーするために必要とされるワイヤーの総数は、ASIC100内の利用可能な空間を大きく超える。対照的に、各タイルのために提供される専用メモリを用いると、ASIC500のエリアを覆うのに必要な総数は、かなり減り得る。
タイル600は制御可能なバスラインも含む。制御可能なバスラインは、複数の異なるグループへと分類され得る。たとえば、制御可能なバスラインは、各々の主要な方向にタイル間でデータを転送するように構成される、汎用の制御可能なバスライン610の第1のグループを含み得る。すなわち、制御可能なバスライン610の第1のグループは、タイルの格子の第1の次元501に沿った第1の方向(図6では「東」と呼ばれる)に向かってデータを転送するように構成されるバスライン610aと、タイルの格子の第1の次元101に沿った第2の方向(図6では「西」と呼ばれる)に向かってデータを転送するように構成されるバスライン610bであって、第2の方向が第1の方向の反対である、バスライン610bと、タイルの格子の第2の次元103に沿った第3の方向(図6では「北」と呼ばれる)に向かってデータを転送するように構成されるバスライン610cと、タイルの格子の第2の次元103に沿った第4の方向(図6では「南」と呼ばれる)に向かってデータを転送するように構成されるバスライン610dであって、第4の方向が第3の方向の反対である、バスライン610dとを含み得る。汎用バスライン610は、制御データ、アクティベーション入力データ、通信インターフェースからのおよび/または通信インターフェースへのデータ、ベクトル処理ユニットからのおよび/またはベクトル処理ユニットへのデータ、ならびにタイル600によって記憶および/または使用されるべきデータ(たとえば、重み入力)を運ぶように構成され得る。タイル600は、制御可能なバスラインを制御するための、したがって、タイル600および/もしくはメモリ602へ、ならびに/またはそれらからデータをルーティングするための、1つまたは複数の制御要素621(たとえば、フリップフロップおよびマルチプレクサ)を含み得る。
制御可能なバスラインはまた、計算アレイ部分和バスライン620と本明細書で呼ばれる、制御可能なバスラインの第2のグループを含み得る。計算アレイ部分和バスライン620は、計算アレイ604によって実行される計算から出力されるデータを運ぶように構成され得る。たとえば、バスライン620は、図6に示されるように、計算アレイ604の中の行から得られる部分和データを運ぶように構成され得る。そのような場合、バスライン620の数は、アレイ604の中の行の数と一致する。たとえば、8×8の計算アレイに対して、計算アレイ604の中の対応する行の出力に各々が結合される、8つの部分和バスライン620がある。計算アレイ出力バスライン620はさらに、たとえばASICチップ内の別のタイルの計算アレイへの入力として、ASICチップ内の別のタイルに結合するように構成され得る。たとえば、タイル600のアレイ部分和バスライン620は、タイル600から少なくとも1タイル離れて位置する第2のタイルの計算アレイの入力(たとえば、部分和620a)を受け取るように構成され得る。計算アレイ604の出力が次いで、タイル600からの出力であり得る新しい部分和620bを生み出すために、部分和ライン620に加算される。部分和620bは次いで、別のタイルに、または代替的にベクトル処理ユニットに渡され得る。たとえば、各バスライン620は、ベクトル処理ユニットの対応するセグメント(図5のセグメント506など)に結合され得る。
図5に関して説明されるように、制御可能なバスラインは、データがバスラインに沿って搬送されることを可能にするように構成される、搬送要素(たとえば、フリップフロップ)などの回路を含み得る。いくつかの実装形態では、各々の制御可能なバスラインは、各タイルに対して、対応する搬送要素を含む。図5に関してさらに説明されるように、制御可能なバスラインは、異なるタイル、ベクトル処理ユニット、およびASICチップの通信インターフェースの間でデータが転送されることを可能にするように構成される、マルチプレクサなどの回路を含み得る。マルチプレクサは、データのソースまたはシンクがある場所にはどこでも配置され得る。たとえば、いくつかの実装形態では、図6に示されるように、マルチプレクサなどの制御回路621は、制御可能なバスラインの交点に(たとえば、汎用バスライン610aと610dの交点に、汎用バスライン610aと610cの交点に、汎用バスライン610bと610dの交点に、および/または汎用バスライン610bと610cの交点に)配置され得る。バスラインの交点におけるマルチプレクサは、交点におけるバスライン間でデータを転送するように構成され得る。したがって、マルチプレクサの適切な動作によって、制御可能なバスラインを介してデータが移動する方向を変更することが可能であり得る。たとえば、汎用バスライン610aで第1の次元101に沿って移動するデータは、汎用バスライン610dに転送され得るので、データは代わりに第2の次元103に沿って移動する。いくつかの実装形態では、マルチプレクサは、データがメモリ602へ、および/またはメモリ602から転送され得るように、タイル600のメモリ602に隣接して配置され得る。
本明細書において説明される主題および機能的な動作の実施形態は、デジタル電子回路で、有形に具現化されるコンピュータソフトウェアもしくはファームウェアで、本明細書において開示される構造およびそれらの構造的な均等物を含むコンピュータハードウェアで、またはそれらの1つまたは複数の組合せで実装され得る。本明細書において説明される主題の実施形態は、1つまたは複数のコンピュータプログラムとして、すなわち、データ処理装置による実行のための、またはデータ処理装置の動作を制御するための、有形の非一時的記憶媒体に符号化されるコンピュータプログラム命令の1つまたは複数のモジュールとして実装され得る。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらの1つもしくは複数の組合せであり得る。代替または追加として、プログラム命令は、データ処理装置による実行のために、適切な受信機装置へ送信するための情報を符号化するために生成される人工的に生成された伝播信号、たとえば機械で生成された電気信号、光信号、または電磁気信号上で符号化され得る。
「データ処理装置」という用語は、データ処理ハードウェアを指し、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを例として含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。装置はまた、専用論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)もしくはASIC(特定用途向け集積回路)であってもよく、またはそれらをさらに含んでもよい。装置は任意選択で、ハードウェアに加えて、コンピュータプログラムのための実行環境を作り出すコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つもしくは複数の組合せを構成するコードを含み得る。
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、スクリプト、もしくはコード)とも呼ばれ、またはそのように記述されることがあるコンピュータプログラムは、コンパイル型言語もしくはインタプリタ型言語、または宣言型言語もしくは手続型言語を含む、任意の形式のプログラミング言語で書かれてもよく、スタンドアロンプログラムとして、またはモジュール、コンポーネント、サブルーチン、もしくはコンピューティング環境において使用するのに適した他のユニットとしてを含めて、任意の形式で展開されてもよい。プログラムは、ファイルシステムの中のファイルに相当し得るが、その必要はない。プログラムは、他のプログラムまたはデータ、たとえば、マークアップ言語ドキュメントに記憶される1つまたは複数のスクリプトを保持するファイルの一部分に、対象のプログラムに専用の単一のファイルに、または複数の協調したファイル、たとえば1つまたは複数のモジュール、サブプログラム、もしくはコードの部分を記憶するファイルに記憶され得る。コンピュータプログラムは、1つのコンピュータ上で、または、1つの場所に位置する、もしくは複数の場所に分散しておりデータ通信ネットワークによって相互接続される複数のコンピュータ上で実行されるように、展開され得る。
1つまたは複数のコンピュータのシステムが特定の動作または活動を実行するように構成されるために、動作においてシステムに動作または活動を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せがシステムにインストールされていることを意味する。1つまたは複数のコンピュータプログラムが特定の動作または活動を実行するように構成されるために、データ処理装置によって実行されると、装置に動作または活動を実施させる命令を、1つまたは複数のプログラムが含むことを意味する。
本明細書において使用される場合、「エンジン」または「ソフトウェアエンジン」は、入力と異なる出力を提供するソフトウェアで実装される入力/出力システムを指す。エンジンは、ライブラリ、プラットフォーム、ソフトウェア開発キット(「SDK」)、またはオブジェクトなどの、機能性の符号化されたブロックであり得る。各エンジンは、任意の適切なタイプのコンピューティングデバイス、たとえば、サーバ、携帯電話、タブレットコンピュータ、ノートブックコンピュータ、音楽プレーヤ、電子書籍リーダー、ラップトップもしくはデスクトップコンピュータ、PDA、スマートフォン、または、1つもしくは複数のプロセッサおよびコンピュータ可読媒体を含む他の固定デバイスもしくはポータブルデバイス上で実装され得る。加えて、エンジンのうちの2つ以上は、同じコンピューティングデバイス上で、または異なるコンピューティングデバイス上で実装され得る。
本明細書において説明されるプロセスおよび論理フローは、入力データに対して作用して出力を生成することによって、1つまたは複数のコンピュータプログラムを実行して機能を実施する1つまたは複数のプログラム可能コンピュータによって実施され得る。プロセスおよび論理フローはまた、専用論理回路、たとえばFPGAもしくはASICによって、または専用論理回路および1つもしくは複数のプログラムされたコンピュータの組合せによって、実行され得る。
コンピュータプログラムの実行に適したコンピュータは、汎用マイクロプロセッサもしくは専用マイクロプロセッサもしくは両方、または任意の他の種類の中央処理装置に基づき得る。一般に、中央処理装置は、読取り専用メモリもしくはランダムアクセスメモリまたは両方から命令およびデータを受信する。コンピュータの不可欠な要素は、命令を実施または実行するための中央処理装置、ならびに命令およびデータを記憶するための1つまたは複数のメモリデバイスである。中央処理装置およびメモリは、専用論理回路によって補強され、またはそれに組み込まれ得る。一般に、コンピュータは、データを記憶するための1つまたは複数のマスストレージ、たとえば磁気ディスク、磁気光学ディスク、もしくは光学ディスクを含み、または、それらからデータを受け取り、もしくはそれらにデータを転送し、もしくはそれらの両方を行うために動作可能に結合される。しかしながら、コンピュータはそのようなデバイスを有する必要はない。その上、コンピュータは、別のデバイス、たとえばいくつか例を挙げると、携帯電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブルストレージデバイス、たとえばユニバーサルシリアルバス(USB)フラッシュドライブに組み込まれ得る。
コンピュータプログラム命令およびデータを記憶するのに適したコンピュータ可読媒体は、例として、半導体メモリデバイス、たとえばEPROM、EEPROM、およびフラッシュメモリデバイス、磁気ディスク、たとえば内部ハードディスクまたはリムーバブルディスク、磁気光学ディスク、ならびにCD-ROMディスクおよびDVD-ROMディスクを含む、すべての形式の不揮発性メモリ、媒体、およびメモリデバイスを含む。
ユーザとの対話を可能にするために、本明細書において説明される主題の実施形態は、情報をユーザに表示するための表示デバイス、たとえばCRT(陰極線管)またはLCD(液晶ディスプレイ)モニタ、ならびに、キーボードおよびポインティングデバイス、たとえば、マウス、トラックボール、またはユーザがそれにより入力をコンピュータに提供できる存在感知ディスプレイもしくは他の表面を有する、コンピュータ上で実装され得る。ユーザとの対話を可能にするために、他の種類のデバイスも使用され得る。たとえば、ユーザに提供されるフィードバックは、任意の形式の感覚フィードバック、たとえば視覚フィードバック、聴覚フィードバック、または触覚フィードバックであり得る。ユーザからの入力は、音響入力、発話入力、または触覚入力を含む任意の形式で受信され得る。加えて、コンピュータは、ユーザによって使用されるデバイスから文書を送信して受信することによって、たとえば、ユーザのデバイス上のウェブブラウザから受け取られた要求に応答してウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。また、コンピュータは、個人用デバイス、たとえば、メッセージングアプリケーションを実行し、返答としてユーザから応答メッセージを受信するスマートフォンに、テキストメッセージまたは他の形式のメッセージを送信することによって、ユーザと対話することができる。
本明細書において説明される主題の実施形態は、バックエンド構成要素を、たとえばデータサーバとして含む、または、ミドルウェア構成要素、たとえばアプリケーションサーバを含む、または、フロントエンド構成要素、たとえば、グラフィカルユーザインターフェース、ウェブブラウザ、もしくは本明細書において説明される主題の実装形態とユーザがそれを通じて対話できるアプリを有するクライアントコンピュータを含む、または、1つまたは複数のそのようなバックエンド構成要素、ミドルウェア構成要素、もしくはフロントエンド構成要素の任意の組合せを含む、コンピューティングシステムにおいて実装され得る。システムの構成要素は、任意の形式または媒体のデジタルデータ通信、たとえば通信ネットワークによって相互接続され得る。通信ネットワークの例は、ローカルエリアネットワーク(LAN)およびワイドエリアネットワーク(WAN)、たとえばインターネットを含む。
実施形態1は、
同期プロセッサの複数のそれぞれの構成要素によって実行されるべき複数の動作を規定するプログラムの中間表現を受け取るステップであって、中間表現が、複数の動作の各動作に、動作が同期プロセッサによって実行されるようにスケジューリングされるそれぞれのクロックサイクル値を割り当てる、ステップと、
ハードウェア構成更新を要求する中間表現の中の各動作に対して、それぞれの更新ウィンドウを生成するために中間表現を処理するステップであって、更新ウィンドウが、ハードウェア構成更新を実施するためにその間に構成更新命令が実行され得る時間範囲を規定する、ステップと、
同期プロセッサのための1つまたは複数の構成制約を取得するステップと、
同期プロセッサの構成制約に従って、更新ウィンドウのうちの1つの間に各々発生する構成更新命令を生成してスケジューリングするステップと
を備える方法である。
実施形態2は実施形態1の方法であり、構成制約は、同期プロセッサが単一のサイクルで実行できる構成更新命令の最大の数を備える。
実施形態3は実施形態2の方法であり、構成制約は、構成更新命令が実行され得る限られた数のサイクルを備える。
実施形態4は実施形態1から3のいずれか1つの方法であり、更新ウィンドウおよび構成制約から構成更新命令を生成してスケジューリングするステップは、構成更新命令を他の更新ウィンドウに割り振る前に、構成更新命令を最大限に制約された更新ウィンドウに割り振るステップを備える。
実施形態5は実施形態1から4のいずれか1つの方法であり、構成更新命令のうちの1つまたは複数は、読み取り動作のレジスタを変更する。
実施形態6は実施形態1から5のいずれか1つの方法であり、構成更新命令のうちの1つまたは複数は、同期プロセッサのデータ経路の中のマルチプレクサ引数を変更する。
実施形態7は実施形態1から6のいずれか1つの方法であり、同期プロセッサは、構成更新命令が出されていない場合、同じ構成を用いて各動作を実行するように構成される。
実施形態8は実施形態1から7のいずれか1つの方法であり、同期プロセッサを用いて動作を実行するステップと、構成更新命令に従って同期プロセッサの構成を更新するステップとをさらに備える。
実施形態9は、
同期プロセッサの複数のそれぞれの構成要素によって実行されるべき複数の動作を規定するプログラムを受け取るステップと、
複数の構成要素の各構成要素に対して、構成要素によって実行されるべきプログラムの各々のそれぞれの動作に対するそれぞれのクロックレイテンシ値を取得するステップと、
プログラムのそれぞれの動作に対するそれぞれのクロックレイテンシ値に基づいてプログラムを実行するためのクロックタイミング制約を生成するステップと、
クロックタイミング制約に基づいて、それぞれのクロックサイクル値を複数の動作の各動作に割り当てるプログラムの中間表現を生成するステップと
を備える方法である。
実施形態10は実施形態9の方法であって、動作はさらに、
ハードウェア構成更新を要求する中間表現の中の各動作に対して、それぞれの更新ウィンドウを生成するために中間表現を処理するステップであって、更新ウィンドウが、ハードウェア構成更新を実施するためにその間に構成更新命令が実行され得る時間範囲を規定する、ステップと、
同期プロセッサのための1つまたは複数の構成制約を取得するステップと、
同期プロセッサの構成制約に従って、更新ウィンドウのうちの1つの間に各々発生する構成更新命令を生成してスケジューリングするステップと
を備える。
実施形態11は実施形態10の方法であり、構成制約は、同期プロセッサが単一のサイクルで実行できる構成更新命令の最大の数を備える。
実施形態12は実施形態11の方法であり、構成制約は、構成更新命令が実行され得る限られた数のサイクルを備える。
実施形態13は実施形態10の方法であり、更新ウィンドウおよび構成制約から構成更新命令を生成してスケジューリングするステップは、構成更新命令を他の更新ウィンドウに割り振る前に、構成更新命令を最大限に制約された更新ウィンドウに割り振るステップを備える。
実施形態14は実施形態9から13のいずれか1つの方法であり、プログラムはレイテンシの影響を受けない。
実施形態15は実施形態14の方法であり、プログラムは動作の順序または動作間のタイミングを規定しない。
実施形態16は実施形態15の方法であり、プログラムは同期プロセッサの構成要素に対するレイテンシ情報を規定しない。
実施形態17は実施形態9から16のいずれか1つの方法であり、プログラムの中間表現は、複数の動作の各動作に負のクロックサイクル値を割り当てることができる。
実施形態18は実施形態9から17のいずれか1つの方法であり、動作はさらに、入力プログラムの中の変数から動作間の依存関係情報を生成するステップを備える。
実施形態19は、1つまたは複数のコンピュータと、1つまたは複数のコンピュータによって実行されると、1つまたは複数のコンピュータに先行する実施形態のいずれか1つの方法を実行させるように動作可能な命令を記憶する1つまたは複数の記憶デバイスとを備える、システムである。
実施形態20は、コンピュータプログラムが符号化されたコンピュータ記憶媒体であり、このプログラムは、データ処理装置によって実行されると、データ処理装置に実施形態1から18のいずれか1つの方法を実行させるように動作可能な命令を備える。
本明細書は多くの具体的な実装の詳細を含むが、これらは、発明の範囲または特許請求され得るものの範囲に対する制約として見なされるべきではなく、むしろ、特定の発明の特定の実施形態に特有であり得る特徴の説明として見なされるべきである。別々の実施形態の文脈で本明細書において説明されるいくつかの特徴はまた、単一の実施形態において組合せで実装され得る。逆に、単一の実施形態の文脈で説明される様々な特徴はまた、複数の実施形態で別々に、または任意の適切な部分組合せで実装されてもよい。その上、特徴は、いくつかの組合せで活動するものとして上で説明され、そのように最初に特許請求されることもあるが、特許請求される組合せからの1つまたは複数の特徴は、場合によっては組合せから削除されてもよく、特許請求される組合せは、部分組合せまたは部分組合せの変形を対象としてもよい。
同様に、動作は特定の順序で図面において示されているが、これは、望ましい結果を達成するために、そのような動作が示される特定の順序もしくは逐次的な順序で実行されること、またはすべての示される動作が実行されることを要求するものとして理解されるべきではない。いくつかの状況では、マルチタスキングおよび並列処理が有利であり得る。その上、上で説明された実施形態における様々なシステムモジュールと構成要素の分離は、すべての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されるプログラム構成要素およびシステムが一般に、単一のソフトウェア製品において一緒に統合され、または複数のソフトウェア製品へとパッケージングされ得ることを理解されたい。
本主題の具体的な実施形態が説明された。他の実施形態が以下の特許請求の範囲内にある。たとえば、特許請求の範囲に記載される活動は、異なる順序で実行されてもよく、それでも望ましい結果を達成することができる。一例として、添付の図面に示されるプロセスは、望ましい結果を達成するために、示される特定の順序または逐次的な順序を必ずしも必要としない。あるいくつかの場合には、マルチタスキングおよび並列処理が有利であり得る。
412 更新ウィンドウ
415 構成ウィンドウ
422 更新ウィンドウ
425 構成ウィンドウ
432 第1の構成ウィンドウ
434 第2の構成ウィンドウ
435 更新ウィンドウ
442 構成ウィンドウ
443 更新ウィンドウ
444 構成ウィンドウ
445 更新ウィンドウ
452 RegFile0Read命令
454 RegFile1Read命令
456 乗算命令
458 加算命令
501 第1の次元
502 タイル
503 第2の次元
504 ベクトル処理ユニット
506 区分
508 通信インターフェース
510 セクション
600 タイル
602 ローカルメモリ
604 計算アレイ
606 セル
610 バスライン
620 バスライン
621 制御要素

Claims (20)

  1. 同期プロセッサの複数のそれぞれの構成要素によって実行されるべき複数の動作を規定するプログラムの中間表現を受け取るステップであって、前記中間表現が、前記複数の動作の各動作に、前記動作が前記同期プロセッサによって実行されるようにスケジューリングされるそれぞれのクロックサイクル値を割り当て、各動作に対する前記クロックサイクル値が、前記動作についてのそれぞれのクロックレイテンシ値に基づく、ステップと、
    ハードウェア構成更新を要求する前記中間表現の中の各動作に対して、それぞれの更新ウィンドウを生成するために前記中間表現を処理するステップであって、前記更新ウィンドウが、前記ハードウェア構成更新を実施するためにその間に構成更新命令が実行され得る時間範囲を規定する、ステップと、
    前記同期プロセッサのための1つまたは複数の構成制約を取得するステップと、
    前記同期プロセッサの前記構成制約に従って、前記更新ウィンドウのうちの1つの間に各々発生する構成更新命令を生成してスケジューリングするステップと
    前記同期プロセッサにより前記複数の動作を実行するとともに、前記構成更新命令に従って前記同期プロセッサの構成を更新するステップと
    を備える、方法。
  2. 前記構成制約のうちの1つが、前記同期プロセッサが単一のサイクルで実行できる構成更新命令の最大の数である、請求項1に記載の方法。
  3. 前記構成制約のうちの1つが、特定のサイクルにおいてのみ構成更新命令が実行可能であることである、請求項2に記載の方法。
  4. 前記更新ウィンドウおよび構成制約から構成更新命令を生成してスケジューリングするステップが、構成更新命令を他の更新ウィンドウに割り振る前に、構成更新命令を最大限に制約された更新ウィンドウに割り振るステップを備える、請求項1から3のいずれか一項に記載の方法。
  5. 前記構成更新命令のうちの1つまたは複数が読み取り動作が行われるレジスタを変更する、請求項1から4のいずれか一項に記載の方法。
  6. 前記構成更新命令のうちの1つまたは複数が、前記同期プロセッサの前記複数の構成要素間でデータを転送するように構成されるマルチプレクサの設定を変更する、請求項1から5のいずれか一項に記載の方法。
  7. 前記同期プロセッサが、構成更新命令が出されていない場合、同じ構成を用いて各動作を実行するように構成される、請求項1から6のいずれか一項に記載の方法。
  8. 前記同期プロセッサを用いて前記動作を実行するステップと、前記構成更新命令に従って前記同期プロセッサの前記構成を更新するステップとをさらに備える、請求項1から7のいずれか一項に記載の方法。
  9. 同期プロセッサの複数のそれぞれの構成要素によって実行されるべき複数の動作を規定するプログラムを受け取るステップと、
    前記複数の構成要素の各構成要素に対して、前記構成要素によって実行されるべき前記プログラムの各々のそれぞれの動作に対するそれぞれのクロックレイテンシ値を取得するステップと、
    前記プログラムのそれぞれの動作に対する前記それぞれのクロックレイテンシ値に基づいて前記プログラムを実行するためのクロックタイミング制約を生成するステップと、
    前記クロックタイミング制約に基づいて、それぞれのクロックサイクル値を前記複数の動作の各動作に割り当てる前記プログラムの中間表現を生成するステップであって、各動作に対する前記クロックサイクル値が、前記動作についてのそれぞれのクロックレイテンシ値に基づき、前記中間表現は、前記同期プロセッサが直接実行できないコードである、ステップ
    を備える、方法。
  10. 前記動作がさらに、
    ハードウェア構成更新を要求する前記中間表現の中の各動作に対して、それぞれの更新ウィンドウを生成するために前記中間表現を処理するステップであって、前記更新ウィンドウが、前記ハードウェア構成更新を実施するためにその間に構成更新命令が実行され得る時間範囲を規定する、ステップと、
    前記同期プロセッサのための1つまたは複数の構成制約を取得するステップと、
    前記同期プロセッサの前記構成制約に従って、前記更新ウィンドウのうちの1つの間に各々発生する構成更新命令を生成してスケジューリングするステップとを備える、請求項9に記載の方法。
  11. 前記構成制約のうちの1つが、前記同期プロセッサが単一のサイクルで実行できる構成更新命令の最大の数である、請求項10に記載の方法。
  12. 前記構成制約のうちの1つが、特定のサイクルでのみ構成更新命令が実行可能であることである、請求項11に記載の方法。
  13. 前記更新ウィンドウおよび構成制約から構成更新命令を生成してスケジューリングするステップが、構成更新命令を他の更新ウィンドウに割り振る前に、構成更新命令を最大限に制約された更新ウィンドウに割り振るステップを備える、請求項10に記載の方法。
  14. 前記プログラムがレイテンシの影響を受けない、請求項9から13のいずれか一項に記載の方法。
  15. 前記プログラムが動作の順序または前記動作間のタイミングを規定しない、請求項14に記載の方法。
  16. 前記プログラムが前記同期プロセッサの構成要素に対するレイテンシ情報を規定しない、請求項15に記載の方法。
  17. 前記プログラムの前記中間表現が、前記複数の動作の各動作に負のクロックサイクル値を割り当てることができる、請求項9から16のいずれか一項に記載の方法。
  18. 前記動作がさらに、入力プログラムの中の変数から動作間の依存関係情報を生成するステップを備える、請求項9から17のいずれか一項に記載の方法。
  19. 1つまたは複数のコンピュータと、前記1つまたは複数のコンピュータによって実行されると、前記1つまたは複数のコンピュータに請求項1から18のいずれか一項に記載の方法を実行させるように動作可能な命令を記憶する1つまたは複数の記憶デバイスとを備える、システム。
  20. コンピュータプログラムが符号化されたコンピュータ記憶媒体であって、前記コンピュータプログラムが、データ処理装置によって実行されると、前記データ処理装置に請求項1から18のいずれか一項に記載の方法を実行させるように動作可能な命令を備える、コンピュータ記憶媒体。
JP2022511312A 2019-08-22 2020-08-21 同期プロセッサのためのコンパイル Active JP7476299B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2024066659A JP2024105295A (ja) 2019-08-22 2024-04-17 同期プロセッサのためのコンパイル

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201962890495P 2019-08-22 2019-08-22
US62/890,495 2019-08-22
PCT/US2020/047520 WO2021035187A1 (en) 2019-08-22 2020-08-21 Compilation for synchronous processor

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2024066659A Division JP2024105295A (ja) 2019-08-22 2024-04-17 同期プロセッサのためのコンパイル

Publications (2)

Publication Number Publication Date
JP2022544843A JP2022544843A (ja) 2022-10-21
JP7476299B2 true JP7476299B2 (ja) 2024-04-30

Family

ID=72470582

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2022511312A Active JP7476299B2 (ja) 2019-08-22 2020-08-21 同期プロセッサのためのコンパイル
JP2024066659A Pending JP2024105295A (ja) 2019-08-22 2024-04-17 同期プロセッサのためのコンパイル

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2024066659A Pending JP2024105295A (ja) 2019-08-22 2024-04-17 同期プロセッサのためのコンパイル

Country Status (6)

Country Link
US (1) US20220276847A1 (ja)
EP (1) EP4004724A1 (ja)
JP (2) JP7476299B2 (ja)
CN (1) CN114270308A (ja)
TW (1) TWI767304B (ja)
WO (1) WO2021035187A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI767304B (zh) 2019-08-22 2022-06-11 美商谷歌有限責任公司 用於編譯針對同步處理器之程式之方法及系統
US11989254B2 (en) * 2020-09-10 2024-05-21 Taboola.Com Ltd. Semantic meaning association to components of digital content
WO2023069180A1 (en) * 2021-10-22 2023-04-27 ALTMAN, Daniel, E. Real-time operating system with a cpu cycle time base

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060004997A1 (en) 2001-05-04 2006-01-05 Robert Keith Mykland Method and apparatus for computing
US20100122105A1 (en) 2005-04-28 2010-05-13 The University Court Of The University Of Edinburgh Reconfigurable instruction cell array
WO2021035187A1 (en) 2019-08-22 2021-02-25 Google Llc Compilation for synchronous processor

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2001281164A1 (en) * 2000-08-07 2002-02-18 Altera Corporation Inter-device communication interface
US20030028864A1 (en) * 2001-01-29 2003-02-06 Matt Bowen System, method and article of manufacture for successive compilations using incomplete parameters
US6691301B2 (en) * 2001-01-29 2004-02-10 Celoxica Ltd. System, method and article of manufacture for signal constructs in a programming language capable of programming hardware architectures
US7849465B2 (en) * 2003-02-19 2010-12-07 Intel Corporation Programmable event driven yield mechanism which may activate service threads
US7587584B2 (en) * 2003-02-19 2009-09-08 Intel Corporation Mechanism to exploit synchronization overhead to improve multithreaded performance
US7523441B2 (en) * 2004-04-16 2009-04-21 National Instruments Corporation Implementing a synchronous reactive system in a graphical program
US7734895B1 (en) * 2005-04-28 2010-06-08 Massachusetts Institute Of Technology Configuring sets of processor cores for processing instructions
EP2399173B1 (en) * 2009-02-18 2014-04-09 Dolby Laboratories Licensing Corporation Method and system for synchronizing multiple secure clocks
CN104156055B (zh) * 2010-12-22 2017-10-13 威盛电子股份有限公司 配置在多重处理器核心之间的分散式电源管理
US9772854B2 (en) * 2012-06-15 2017-09-26 International Business Machines Corporation Selectively controlling instruction execution in transactional processing
FR2993070B1 (fr) * 2012-07-09 2014-07-18 Commissariat Energie Atomique Procede d'execution, au sein d'un systeme embarque multitaches, d'une application cadencee par plusieurs domaines de temps differents incluant une gestion d'interruptions
CN103019656B (zh) * 2012-12-04 2016-04-27 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
CN115100016A (zh) * 2015-06-10 2022-09-23 无比视视觉技术有限公司 用于处理图像的图像处理器和方法
JP7202293B2 (ja) * 2016-10-11 2023-01-11 グリーン ヒルズ ソフトウェア,エルエルシー 垂直統合インストルメント化およびトレース再構成のためのシステム、方法およびデバイス

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060004997A1 (en) 2001-05-04 2006-01-05 Robert Keith Mykland Method and apparatus for computing
US20100122105A1 (en) 2005-04-28 2010-05-13 The University Court Of The University Of Edinburgh Reconfigurable instruction cell array
WO2021035187A1 (en) 2019-08-22 2021-02-25 Google Llc Compilation for synchronous processor

Also Published As

Publication number Publication date
KR20220032630A (ko) 2022-03-15
CN114270308A (zh) 2022-04-01
JP2022544843A (ja) 2022-10-21
WO2021035187A1 (en) 2021-02-25
US20220276847A1 (en) 2022-09-01
TW202109289A (zh) 2021-03-01
JP2024105295A (ja) 2024-08-06
TWI767304B (zh) 2022-06-11
EP4004724A1 (en) 2022-06-01

Similar Documents

Publication Publication Date Title
JP7476299B2 (ja) 同期プロセッサのためのコンパイル
TWI767310B (zh) 處理器、運算方法及電腦程式產品
TWI827792B (zh) 多路徑神經網路、資源配置的方法及多路徑神經網路分析器
EP2372587B1 (en) Apparatus and method for simulating a reconfigurable processor
US10616103B2 (en) Constructing staging trees in hierarchical circuit designs
US7831945B2 (en) Manufacturing a clock distribution network in an integrated circuit
US20240104012A1 (en) Topological scheduling
CN113906428A (zh) 异构多核心架构的编译流程
JP7541163B2 (ja) 伝搬レイテンシの短縮
US11983141B2 (en) System for executing an application on heterogeneous reconfigurable processors
US9740529B1 (en) High throughput synchronous resource-constrained scheduling for model-based design
KR102714773B1 (ko) 동기식 프로세서를 위한 컴파일
US20240338340A1 (en) Intelligent graph execution and orchestration engine for a reconfigurable data processor
US20240338297A1 (en) Debugging framework for a reconfigurable data processor
JP7423757B2 (ja) 同期プロセッサのためのシャーディング
Zhuang et al. CHARM 2.0: Composing Heterogeneous Accelerators for Deep Learning on Versal ACAP Architecture
AU2015271896A1 (en) Selection of system-on-chip component models for early design phase evaluation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220420

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230612

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20230912

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231212

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: 20240318

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240417

R150 Certificate of patent or registration of utility model

Ref document number: 7476299

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150