(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-13
(45)【発行日】2023-10-23
(54)【発明の名称】マルチチップシステムにおける同期
(51)【国際特許分類】
G06F 15/173 20060101AFI20231016BHJP
【FI】
G06F15/173 683B
(21)【出願番号】P 2021577623
(86)(22)【出願日】2020-08-14
(86)【国際出願番号】 US2020046405
(87)【国際公開番号】W WO2021034680
(87)【国際公開日】2021-02-25
【審査請求日】2022-02-25
(32)【優先日】2019-08-16
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】100108453
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】ミシャル・アレン・ギュンター
(72)【発明者】
【氏名】デニス・ベイラー
(72)【発明者】
【氏名】クリフォード・ビッフル
(72)【発明者】
【氏名】チャールズ・ロス
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開2011-199420(JP,A)
【文献】特開2001-53792(JP,A)
【文献】特開2013-98788(JP,A)
【文献】特開2000-49836(JP,A)
【文献】特開平5-167589(JP,A)
【文献】米国特許出願公開第2003/0048754(US,A1)
【文献】米国特許出願公開第2019/0097745(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/173
(57)【特許請求の範囲】
【請求項1】
半導体デバイスの複数のチップの中のチップのペアごとに、前記複数のチップを通る伝送パスの周りの前記チップのペア間のラウンドトリップデータ伝送の対応するループ待ち時間を決定するステップと、
前記ループ待ち時間の中から、最大ループ待ち時間を特定するステップと、
前記複数のチップのうちのチップから発信されたデータ伝送が前記パスを回って伝送されて前記チップに戻るまでのフルパス待ち時間を決定するステップと、
前記最大ループ待ち時間の半分を前記フルパス待ち時間のN分の1と比較するステップであって、ただし、Nがチップの前記伝送パス内のチップの数である、ステップと、より大きい値を前記半導体デバイスのチップ間待ち時間として記憶するステップであって、前記チップ間待ち時間が、前記半導体デバイスの動作特性を表す、ステップと
を
含み、
前記ステップが1つまたは複数のプロセッサを含むシステムによって実行される、チップ間待ち時間特性評価方法。
【請求項2】
前記チップのペア間のラウンドトリップデータ伝送のループ待ち時間を決定するステップが、
前記チップのペアの第1のチップから前記チップのペアの第2のチップに第1のタイムスタンプ付きデータを伝送するステップと、
前記第1のタイムスタンプ付きデータに基づいて、前記チップのペア間の第1の相対的な一方向待ち時間を決定するステップと、
前記第2のチップから前記第1のチップに第2のタイムスタンプ付きデータを伝送するステップと、
前記第2のタイムスタンプ付きデータに基づいて、前記チップのペア間の第2の相対的な一方向待ち時間を決定するステップと、
前記第1の相対的な一方向待ち時間と前記第2の相対的な一方向待ち時間とに基づいて、前記チップのペア間の前記ラウンドトリップデータ伝送の前記ループ待ち時間を決定するステップと
を含む、請求項1に記載の方法。
【請求項3】
前記第1のタイムスタンプ付きデータが、前記第1のタイムスタンプ付きデータが伝送されたときの前記第1のチップのローカルカウンタ時間を示す、請求項2に記載の方法。
【請求項4】
前記チップのペア間の前記第1の相対的な一方向待ち時間を決定するステップが、前記タイムスタンプ付きデータにおいて示されている時間と、前記第2のチップが前記第1のタイムスタンプ付きデータを受信したときの前記第2のチップのローカルカウンタ時間との間の差を計算するステップを含む、請求項2または3に記載の方法。
【請求項5】
前記チップのペア間の前記ラウンドトリップデータ伝送の前記ループ待ち時間を決定するステップが、前記第1の相対的な一方向待ち時間と前記第2の相対的な一方向待ち時間との間の差を計算するステップを含む、請求項2から4のいずれか一項に記載の方法。
【請求項6】
前記複数のチップのうちの1つまたは複数が、ニューラルネットワーク演算を実行するように構成された特定用途向け集積回路(ASIC)チップである、請求項1から5のいずれか一項に記載の方法。
【請求項7】
半導体デバイスの複数のチップ内のチップのペアごとに、
前記ペア内の第1のチップから前記チップのペア内の第2のチップへの伝送の第1の一方向待ち時間を決定するステップと、
前記ペア内の前記第2のチップから前記チップのペア内の前記第1のチップへの伝送の第2の一方向待ち時間を決定するステップと
半導体デバイスドライバにおいて、チップのペアごとの前記第1の一方向待ち時間と前記第2の一方向待ち時間とを受信するステップと、
前記半導体デバイスドライバによって、チップのペアごとのそれぞれの前記第1の一方向待ち時間および前記第2の一方向待ち時間から、チップの各ペア間のループ待ち時間を決定するステップと、
前記半導体デバイスドライバによって、チップの少なくとも1つのペアについて、前記半導体デバイスの
チップ間待ち時間と、前記チップの少なくとも1つのペアの前記第1の一方向待ち時間とに基づいて、前記チップの少なくとも1つのペア内の前記第2のチップのローカルカウンタを調整するステップと
を
含み、
前記チップ間待ち時間が、前記ループ待ち時間のうち最大の値の半分と、前記複数のチップのうちのチップから発信されたデータ伝送が伝送パスを回って伝送されて前記チップに戻るまでのフルパス待ち時間のN分の1のうち、より大きい値であって、ただし、Nがチップの前記伝送パス内のチップの数である、チップ間タイミング同期方法。
【請求項8】
前記半導体デバイスドライバによって、各ループ待ち時間が前記半導体デバイスの
チップ間待ち時間以下であると判定するステップをさらに含む、請求項7に記載の方法。
【請求項9】
前記チップの少なくとも1つのペア内の前記第2のチップの前記ローカルカウンタを調整するステップが、前記ローカルカウンタの値を調整値だけ増加させるステップを含む、請求項7または8に記載の方法。
【請求項10】
前記調整値が、前記半導体デバイスの前記
チップ間待ち時間に、前記ペア内の前記第1のチップから前記ペア内の前記第2のチップへの伝送の前記第1の一方向待ち時間を加えたものに等しい、請求項9に記載の方法。
【請求項11】
チップの各ペア間の前記ループ待ち時間を決定するステップが、チップのペアごとに、前記チップのペアに関連する前記第1の
一方向待ち時間と、前記チップのペアに関連する前記第2の
一方向待ち時間との間の差を計算するステップを含む、請求項7から10のいずれか一項に記載の方法。
【請求項12】
前記ペア内の第1のチップから前記チップのペア内の第2のチップへの伝送の前記第1の一方向待ち時間を決定するステップが、
前記第1のチップから前記第2のチップに第1のタイムスタンプ付きデータを伝送するステップと、
前記第1のタイムスタンプ付きデータに基づいて、前記チップのペア間の前記第1の
一方向待ち時間を決定するステップと
を含む、請求項7から11のいずれか一項に記載の方法。
【請求項13】
前記第1のタイムスタンプ付きデータが、前記第1のタイムスタンプ付きデータが伝送されたときの前記第1のチップのローカルカウンタ時間を示す、請求項12に記載の方法。
【請求項14】
前記チップのペア間の前記第1の
一方向待ち時間を決定するステップが、前記タイムスタンプ付きデータにおいて示された時間と、前記第2のチップが前記第1のタイムスタンプ付きデータを受信したときの前記第2のチップのローカルカウンタ時間との間の差を計算するステップを含む、請求項12または13に記載の方法。
【請求項15】
前記複数のチップのうちの1つまたは複数が、ニューラルネットワーク演算を実行するように構成された特定用途向け集積回路(ASIC)チップである、請求項7から14のいずれか一項に記載の方法。
【請求項16】
第1の時間において、半導体デバイスのチップの直列リング配置における第1のチップから
隣接する第2のチップにデータを伝送するステップと、
前記第2のチップにおけるバッファ内に前記データを記憶するステップと、
第2の時間において前記バッファから前記データを
読み出すステップであって、前記第1の時間と前記第2の時間との間の間隔が、前記チップの直列リング配置の
チップ間待ち時間に基づく、ステップと、
前記第2のチップから第3のチップに前記データを伝送するステップであって、前記第3のチップが、前記チップの直列リング配置において前記第2のチップに隣接している、ステップと
を
含み、
前記チップ間待ち時間が、チップの各ペア間のループ待ち時間のうち最大の値の半分と、複数の前記チップのうちのチップから発信されたデータ伝送が伝送パスを回って伝送されて前記チップに戻るまでのフルパス待ち時間のN分の1のうち、より大きい値であって、ただし、Nがチップの前記伝送パス内のチップの数である、チップ間でデータを伝送するための方法。
【請求項17】
前記第2の時間が、前記第2のチップのための動作スケジュールの事前にスケジュールされた時間である、請求項
16に記載の方法。
【請求項18】
前記第2のチップの前記バッファからの前記データを、内部バイパスパスに沿って、前記第3のチップに結合された前記第2のチップの通信インターフェースに渡すステップをさらに含む、請求項16
または17に記載の方法。
【請求項19】
前記第1のチップ、前記第2のチップ、および前記第3のチップのうちの1つまたは複数が、ニューラルネットワーク演算を実行するように構成された特定用途向け集積回路(ASIC)チップである、請求項16から
18のいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、マルチチップシステムにおける同期およびデータ転送に関する。
【背景技術】
【0002】
電子デバイスは、複数の異なるチップで構成され得、複数の異なるチップは、電子デバイスが動作するために、複数の異なるチップ自体の間でデータを通信する必要がある。チップ間のデータ通信は、非決定的である場合がある。たとえば、チップ間のデータ通信は、1つのチップにおける伝送時間から別のチップにおける受信時間までの待ち時間が変動しがちである。すなわち、データが1つのチップから別のチップに移動するのにかかる時間は、一定ではなく、伝送時間における多くの異なる変動要因に左右される。
【発明の概要】
【課題を解決するための手段】
【0003】
一般に、本明細書で説明されている主題の革新的な態様は、半導体デバイスの複数のチップの中のチップのペアごとに、複数のチップを通る伝送パスの周りのチップのペア間のラウンドトリップデータ伝送の対応するループ待ち時間を決定するアクションと、
ループ待ち時間の中から、最大ループ待ち時間を特定するアクションと、
複数のチップのうちのチップから発信されたデータ伝送がパスを回って伝送されてチップに戻るまでのフルパス待ち時間を決定するアクションと、
最大ループ待ち時間の半分をフルパス待ち時間のN分の1と比較するアクションであって、ただし、Nがチップの伝送パス内のチップの数である、アクションと、より大きい値を半導体デバイスのチップ間待ち時間として記憶するアクションであって、チップ間待ち時間が半導体デバイスの動作特性を表す、アクションと
を含む、チップ間待ち時間特性評価方法において具現化され得る。
【0004】
第2の一般的な態様では、本出願で説明されている主題の革新的な特徴は、半導体デバイスの直列リング配置において接続された複数のチップにおける隣接するチップのペアごとに、チップのペア間のラウンドトリップデータ伝送の対応するループ待ち時間を決定するアクションを含む、チップ間待ち時間特性評価方法において具現化され得る。アクションは、ループ待ち時間の中から、最大ループ待ち時間を特定するアクションを含む。アクションは、複数のチップのうちのチップから発信されたデータ伝送が直列リング配置を回ってチップに戻るまでのリング待ち時間を決定するアクションを含む。アクションは、最大ループ待ち時間の半分をリング待ち時間のN分の1と比較するアクションであって、ただし、Nが、複数のチップ内のチップの数である、アクションと、より大きい値を半導体デバイスのチップ間待ち時間として記憶するアクションであって、チップ間待ち時間が、半導体デバイスの動作特性を表す、アクションとを含む。この態様の他の実装形態は、コンピュータ記憶デバイス上に符号化された方法のアクションを実行するように構成された、対応するシステム、装置、およびコンピュータプログラムを含む。
【0005】
これらおよび他の実装形態は、各々、以下の特徴のうちの1つまたは複数をオプションで含むことができる。
【0006】
いくつかの実装形態では、チップのペア間のラウンドトリップデータ伝送のループ待ち時間を決定するアクションは、チップのペアの第1のチップからチップのペアの第2のチップに第1のタイムスタンプ付きデータを伝送するステップと、第1のタイムスタンプ付きデータに基づいて、チップのペア間の第1の相対的な一方向待ち時間を決定するアクションと、第2のチップから第1のチップに第2のタイムスタンプ付きデータを伝送するアクションと、第2のタイムスタンプ付きデータに基づいて、チップのペア間の第2の相対的な一方向待ち時間を決定するアクションと、第1の相対的な一方向待ち時間と第2の相対的な一方向待ち時間とに基づいて、チップのペア間のラウンドトリップデータ伝送のループ待ち時間を決定するアクションとを含む。いくつかの実装形態では、第1のタイムスタンプ付きデータは、第1のタイムスタンプ付きデータが送信されたときの第1のチップのローカルカウンタ時間を示す。いくつかの実装形態では、チップのペア間の第1の相対的な一方向待ち時間を決定するアクションは、タイムスタンプ付きデータにおいて示されている時間と、第2のチップが第1のタイムスタンプ付きデータを受信したときの第2のチップのローカルカウンタ時間との間の差を計算するアクションを含む。いくつかの実装形態では、チップのペア間のラウンドトリップデータ伝送のループ待ち時間を決定するアクションは、第1の相対的な一方向待ち時間と第2の相対的な一方向待ち時間との間の差を計算するアクションを含む。
【0007】
いくつかの実装形態では、複数のチップのうちの1つまたは複数は、ニューラルネットワーク演算を実行するように構成された特定用途向け集積回路(ASIC)チップである。
【0008】
第3の一般的な態様では、本明細書で説明されている主題の革新的な特徴は、半導体デバイスの複数のチップ内のチップのペアごとに、ペア内の第1のチップからチップのペア内の第2のチップへの伝送の第1の一方向待ち時間を決定するアクションと、ペア内の第2のチップからチップのペア内の第1のチップへの伝送の第2の一方向待ち時間を決定するアクションとを含むチップ間タイミング同期方法において具現化され得る。アクションは、半導体デバイスドライバにおいて、チップのペアごとの第1の一方向待ち時間と第2の一方向待ち時間とを受信するアクションを含む。アクションは、半導体デバイスドライバによって、チップのペアごとのそれぞれの第1の一方向待ち時間および第2の一方向待ち時間から、チップの各ペア間のループ待ち時間を決定するアクションを含む。アクションは、半導体デバイスドライバによって、チップの少なくとも1つのペアについて、半導体デバイスの特性的チップ間待ち時間と、チップの少なくとも1つのペアの第1の一方向待ち時間とに基づいて、チップの少なくとも1つのペア内の第2のチップのローカルカウンタを調整するアクションを含む。この態様の他の実装形態は、コンピュータ記憶デバイス上に符号化された方法のアクションを実行するように構成された、対応するシステム、装置、およびコンピュータプログラムを含む。
【0009】
これらおよび他の実装形態は、各々、以下の特徴のうちの1つまたは複数をオプションで含むことができる。
【0010】
いくつかの実装形態では、アクションは、半導体デバイスドライバによって、各ループ待ち時間が半導体デバイスの特性的チップ間待ち時間以下であると判定するアクションを含む。
【0011】
いくつかの実装形態では、チップの少なくとも1つのペア内の第2のチップのローカルカウンタを調整するアクションは、ローカルカウンタの値を調整値だけ増加させるアクションを含む。いくつかの実装形態では、調整値は、半導体デバイスの特性的チップ間待ち時間に、ペア内の第1のチップからペア内の第2のチップへの伝送の第1の一方向待ち時間を加えたものに等しい。
【0012】
いくつかの実装形態では、チップの各ペア間のループ待ち時間を決定するアクションは、チップのペアごとに、チップのペアに関連する第1の相対的な一方向待ち時間と、チップのペアに関連する第2の相対的な一方向待ち時間との間の差を計算するアクションを含む。
【0013】
いくつかの実装形態では、ペア内の第1のチップからチップのペア内の第2のチップへの伝送の第1の一方向待ち時間を決定するアクションは、第1のチップから第2のチップに第1のタイムスタンプ付きデータを伝送するアクションと、第1のタイムスタンプ付きデータに基づいてチップのペア間の第1の相対的な一方向待ち時間を決定するアクションとを含む。いくつかの実装形態では、第1のタイムスタンプ付きデータは、第1のタイムスタンプ付きデータが送信されたときの第1のチップのローカルカウンタ時間を示す。いくつかの実装形態では、チップのペア間の第1の相対的な一方向待ち時間を決定するアクションは、タイムスタンプ付きデータにおいて示された時間と、第2のチップが第1のタイムスタンプ付きデータを受信したときの第2のチップのローカルカウンタ時間との間の差を計算するアクションを含む。
【0014】
いくつかの実装形態では、複数のチップのうちの1つまたは複数は、ニューラルネットワーク演算を実行するように構成された特定用途向け集積回路(ASIC)である。
【0015】
第4の一般的な態様では、本明細書で説明されている主題の革新的な態様は、第1の時間において、半導体デバイスの直列リング配置における第1のチップから第2の隣接するチップにデータを伝送するアクションを含む、チップ間でデータを伝送するための方法において具現化され得る。アクションは、第2のチップにおけるバッファ内にデータを記憶するアクションを含む。アクションは、第2の時間においてバッファからデータを解放するアクションを含み、第1の時間と第2の時間との間の間隔は、チップの直列リング配置の特性的チップ間待ち時間に基づく。アクションは、第2のチップから第3のチップにデータを伝送するアクションを含み、第3のチップは、チップの直列リング配置において第2のチップに隣接している。この態様の他の実装形態は、コンピュータ記憶デバイス上に符号化された方法のアクションを実行するように構成された、対応するシステム、装置、およびコンピュータプログラムを含む。
【0016】
これらおよび他の実装形態は、各々、以下の特徴のうちの1つまたは複数をオプションで含むことができる。
【0017】
いくつかの実装形態では、特性的チップ間待ち時間は、チップの直列リング配置内の2つのチップ間の予測される最大の一方向データ伝送待ち時間を表す。
【0018】
いくつかの実装形態では、第2の時間は、第2のチップのための動作スケジュールの事前にスケジュールされた時間である。
【0019】
いくつかの実装形態では、アクションは、第2のチップのバッファからのデータを、内部バイパスパスに沿って、第3のチップに結合された第2のチップの通信インターフェースに渡すアクションを含む。
【0020】
いくつかの実装形態では、第1、第2、および第3のチップのうちの1つまたは複数は、ニューラルネットワーク演算を実行するように構成された特定用途向け集積回路(ASIC)チップである。
【0021】
様々な実装形態が、以下の利点の1つまたは複数を提供する。たとえば、いくつかの実装形態では、本明細書で説明されているプロセスは、チップ間通信の潜在的なデータ到着時間における変動を最小化する。データ通信の変動を低減することは、システムのチップにおけるより小さい受信データバッファの使用を可能にし得る。いくつかの実装形態では、本明細書で説明されているプロセスは、チップ間の伝送動作を決定論的にする。たとえば、実装形態は、特定の時間において隣接するチップから受信チップに伝送された入力バッファからのデータに受信チップがアクセスするローカルカウンタ時間を計算するときに、プログラムコンパイラが一定の(たとえば、決定論的な)待ち時間を使用することを可能にし得る。
【0022】
本発明の1つまたは複数の実施形態の詳細は、添付図面および以下の説明において記載されている。他の特徴および利点は、説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0023】
【
図1】本開示の実装形態による例示的なマルチチップシステムを示す概略図である。
【
図2】本開示の実装形態による、マルチチップシステムにおける最大待ち時間を特性評価するための例示的なプロセスのフローチャートである。
【
図3A】本開示の実装形態による、2つのチップ間のループ待ち時間測定を示す一連のブロック図を示す。
【
図3B】本開示の実装形態による、2つのチップ間のループ待ち時間測定を示す一連のブロック図を示す。
【
図3C】本開示の実装形態による、2つのチップ間のループ待ち時間測定を示す一連のブロック図を示す。
【
図4】本開示の実装形態による、マルチチップシステムにおけるチップのローカルカウンタを同期させるための例示的なプロセスのフローチャートである。
【
図5】本開示の実装形態による、マルチチップシステムにおけるチップ間でデータ伝送を行うための例示的なプロセスのフローチャートである。
【
図6A】
図5のデータ伝送プロセスを示す一連のブロック図である。
【
図6B】
図5のデータ伝送プロセスを示す一連のブロック図である。
【
図7】
図1のマルチチップシステムにおいて使用され得る専用論理チップの例を示す概略図である。
【発明を実施するための形態】
【0024】
一般に、本開示は、マルチチップシステムにおけるチップ間時間同期およびデータ伝送に関する。より具体的には、本開示は、チップ間の、いくつかの例では、チップの直列リングトポロジの周りのデータ伝送の予測可能性を改善するチップ動作プロセスを提供する。本開示は、システム内のチップのローカルカウンタを同期させ、データ受信時間をより決定論的に、場合によっては完全に決定論的にするチップ間データ伝送の固有の変動データ到着時間を考慮した方法でデータ伝送を実行する例示的なプロセスを提供する。
【0025】
最初にチップ間時間同期について言及すると、時間同期は、2つの態様を含む。第1の態様は、処理システム上のチップのそれぞれのペア間のデータ伝送のチップ間待ち時間の特性評価である。このプロセスは、ボードが起動されるたびにローカルチップカウンタを同期させるための定数として機能するボードの動作特性(たとえば、最大チップ間待ち時間)を提供する。第2の態様は、ボードが起動されるときにローカルチップカウンタを同期させること(たとえば、「起動時同期」)である。
【0026】
より具体的には、特性評価プロセスは、ボードの再設計ごとに完了されなければならない。たとえば、最大チップ間待ち時間は、一般に、ボード上のチップのレイアウトに依存する物理的特性である。特性評価プロセスは、互いの直接通信に関わるボード上のチップのペア(たとえば、隣接するチップのペア)間の伝送の「ラウンドトリップ」ループ待ち時間を測定するステップを含む。さらに、直列リング配置において接続されたチップを含む実装形態では、特性評価プロセスは、リング全体のラウンドトリップ伝送待ち時間を測定するステップを含むこともできる。これらの測定から収集されたデータは、任意の2つのチップ間で発生する最大チップ間待ち時間を決定するために使用され得る。
【0027】
起動時の同期は、ボードが起動、リセット、またはその両方がされるたびに、チップのローカルカウンタを同期させるために実行される。各チップは、他のチップのローカルクロックと同期されたローカルクロックによってクロックされる(たとえば、各チップのクロックは、同じ周波数と位相とを有する)が、チップは、個々のチップ動作をクロックするためにローカルカウンタを使用して動作し、ボードを起動するとき、またはチップがリセットから抜け出すとき、個々のカウンタは、一般に、異なるカウント値になる。したがって、起動時の同期は、チップのローカルカウント値をほぼ同期させるために使用される。
【0028】
起動時の同期プロセスは、ボード上のチップのペア間の伝送の一方向待ち時間を測定するステップを含む。ボードドライバは、ボードについて特性評価された最大チップ間待ち時間と、ペア内のチップ間の一方向待ち時間のうちの1つとに基づいて、各ペア内の1つのチップに関するローカルカウンタ調整を決定する。たとえば、ドライバは、最大チップ間待ち時間とチップ間の一方向待ち時間のうちの1つとの合計だけカウンタ値を増加させることによって、ペア内のチップのうちの1つのローカルカウンタを調整することができる。いくつかの実装形態では、起動時プロセスは、たとえば、チップのうちの1つのFIFOバッファを調整することによって、1つまたはチップペア間のラウンドトリップ待ち時間を調整するステップを含む。
【0029】
いくつかの実装形態では、半導体チップは、機械学習演算を実行するように設計された特定用途向け集積回路(ASIC)であり得る。ASICは、特定の用途向けにカスタマイズされた集積回路(IC)である。たとえば、ASICは、たとえば、ディープニューラルネットワーク、機械翻訳、音声認識、または他の機械学習アルゴリズムの一部として画像内のオブジェクトを認識する動作を含む、機械学習モデルの動作を実行するように設計され得る。たとえば、ニューラルネットワークのためのアクセラレータとして使用される場合、ASICは、ニューラルネットワークへの入力を受信し、入力に対してニューラルネットワークの推論を計算することができる。ニューラルネットワーク層へのデータ入力、たとえば、ニューラルネットワークへの入力、またはニューラルネットワークの別の層の出力のいずれかは、アクティベーション入力と呼ばれる場合がある。推論は、ニューラルネットワークの層に関連付けられた重み入力のそれぞれのセットに従って計算され得る。たとえば、層のうちのいくつかまたはすべては、アクティベーション入力のセットを受信し、出力を生成するために層のための重み入力のセットに従ってアクティベーション入力を処理し得る。さらに、ニューラルネットワーク演算は、明示的な演算スケジュールに従って、ASICのシステムによって実行され得る。そのように、ASICチップ間の決定論的で同期されたデータ転送は、ニューラルネットワーク演算の信頼性を改善し、デバッグ動作を簡略化することができる。
【0030】
図1は、例示的なマルチチップシステム100を示す概略図である。マルチチップシステム100は、機械学習演算を実行するように構成された集積回路のネットワークであり得る。たとえば、マルチチップシステム100は、ニューラルネットワークアーキテクチャを実装するように構成され得る。マルチチップシステムは、複数の半導体チップ102を含む。チップ102は、汎用集積回路チップまたは専用集積回路チップであり得る。たとえば、チップ102のうちの1つまたは複数は、ASIC、フィールドプログラマブルゲートアレイ(FPGA)、グラフィック処理ユニット(GPU)、または任意の他の適切な集積回路チップであり得る。クロック106は、同期タイミング信号を提供するためにチップ102の各々に結合される。たとえば、クロック106は、チップ102の各々に共通タイミング信号(たとえば、1GHzクロック信号)を提供する水晶発振器を含むことができる。
【0031】
システム100は、システムドライバ104も含む。システムドライバ104は、たとえば、ラップトップコンピュータ、デスクトップコンピュータ、またはサーバシステムなどの外部コンピューティングシステムであり得る。システムドライバ104は、本明細書で説明されているチップ同期プロセスまたはその一部を実行または管理するために使用され得る。たとえば、システムドライバ104は、チップをプログラムする、システム100の起動動作を管理する、チップをデバッグする、またはそれらの組合せを行うように構成され得る。システムドライバは、通信リンクを介してチップ102に結合され得る。システムドライバ104は、構成ステータスレジスタ(たとえば、チップをプログラムおよびデバッグするための低速インターフェース)を介してチップ102に結合され得る。
【0032】
図示されている例では、マルチチップシステム100は、直列リングトポロジにおいて配置された8つのASICチップ102と1つのFPGAチップ102とを含む。より具体的には、各チップ102は、データがリングの周りでチップから隣接するチップに通信されるように、各側に1つある2つの隣接するチップと通信している。チップ102およびそれらのデータ通信リンクは、閉ループを形成する。さらに、マルチチップシステム100は、チップの各ペア間に2つのデータパス、時計回りパス108と反時計回りパス110とを含む。
【0033】
いくつかの実装形態では、各ASICチップ(P0~P7)は、ニューラルネットワークの層を実装するように構成され得る。入力アクティベーションデータは、FPGAチップ104によって受信され、P0に伝送され得る。P0は、たとえば、ニューラルネットワークの入力層を実装するように構成され得る。P0は、P1に伝送される層出力データを生成するために、アクティベーションデータに対して計算を実行する。P1は、ニューラルネットワークの第1の隠れ層を実装するように構成され得、P0からの出力に対して計算を実行し、次いで、その出力をP2によって実装された次のニューラルネットワーク層に伝送する。プロセスは、ASIC102の各々を介してリングの周りで継続し、延長として、ニューラルネットワークの各層によって処理され得る。そのようなプロセスは、ニューラルネットワークが確実かつ正確に動作するために、隣接するチップ間(およびリング全体)のデータ転送の正確なタイミングに依存する場合がある。したがって、各ASIC間のデータ伝送の同期は、チップ間の適切な動作調整を保証するために重要である場合がある。
【0034】
同期システム内の単一のチップの内部動作は、同期的かつ決定論的であり、そのような内部動作のタイミングにおいて差異がないことを意味する。しかしながら、データ伝送などのチップ間動作について、同期システムであっても、動作のタイミングにおいて本質的かつ非決定論的な変動性が存在する。タイミングの変動性の1つの原因は、2つの隣接するチップ間の物理リンクの特性であり、隣接するチップ間のデータ伝送の待ち時間に、たとえば、約0~3クロックサイクルの変動をもたらす可能性がある。タイミングの変動性の第2のより大きい原因は、内部チップ動作とマルチチップシステムによって実装された前方誤り訂正方式との間の同期の欠如である。前方誤り訂正方式では、チップ間のデータ伝送に誤り訂正データが追加されるが、追加された誤り訂正データは、必ずしもデータ伝送と同期しているとは限らない。非同期データのデータ伝送への導入は、隣接するチップ間のデータ伝送の待ち時間に、たとえば、最大16クロックサイクルの変動をもたらす可能性がある。
【0035】
データが1つのチップから別の隣接しないチップ(たとえば、P0からP7)に伝送される場合、各チップ間伝送(たとえば、P0からP1、P1からP2、など)の待ち時間の変動は、宛先チップ(P7)における累積遅延に累積する。例として前方誤り訂正による変動だけを取り上げると、単一のチップ間(たとえば、P0からP1への)伝送の待ち時間は、±16クロックサイクルの変動を有する。しかしながら、いくつかの動作は、1つのチップ102から別の隣接しないチップ102へのデータ伝送、たとえば、チップP0からチップP3へのデータ伝送、または第1のチップP0から最後のチップP7へのリングをまわるデータの伝送さえ必要とする場合がある。以下でより詳細に説明されているように、1つのチップから別の隣接しないチップに(たとえば、P0からP7に)データを伝送するために、データは、バイパス動作を使用して、介在するチップの各々を介して(たとえば、チップP1~P6を介して)伝送され得る。しかしながら、チップ間の待ち時間の変動は、8チップにわたって累積し、リング周りの待ち時間の合計変動は、±128クロックサイクルに近づく。以下で説明されているプロセスは、チップ間のデータ伝送の予測可能性を改善し、いくつかの例では、チップ間データ伝送が決定論的な方法で実行されることを可能にする。
【0036】
図2は、マルチチップシステム100における最大待ち時間を特性評価するための例示的なプロセス200のフローチャートを示す。プロセス200は、
図1、
図2、
図3A~
図3Bを参照して説明される。いくつかの実装形態では、プロセス200またはその一部は、システムドライバ104によって実行または制御される。いくつかの例では、プロセスまたはその一部は、マルチチップシステム100の個々のチップ102によって実行される。特性評価プロセス200は、マルチチップシステム設計の特性的チップ間待ち時間、たとえば、最大チップ間待ち時間(L
max)を決定するために使用される。たとえば、プロセス200は、初期チップ配置、および/または新しいシステムトポロジに対して実行され得る。
【0037】
プロセス200の第1のステップは、マルチチップシステム100内のチップの各ペア間のループ待ち時間を決定するステップを含む(ステップ202)。たとえば、
図1に示されているように、図示されているマルチチップシステム100は、独立して測定可能な待ち時間を有する10の個別のチップ間通信ループ(112、114)を有する。隣接するチップ102間に9のループ112が存在し、リング全体の周りに1つのループ114が存在する。マルチチップシステムでは、利用可能な共通の時間基準がないので、絶対待ち時間値は、これらのループ112、114においてのみ測定可能である場合がある。すなわち、チップ112、114の各々は、共通のクロック106によって駆動されるが、各チップ112、114上のローカルカウンタは、必ずしも同じカウント値に同期されるとは限らない。言い換えれば、各チップ112、114上の「ローカル時間」は、異なる場合がある。以下でより詳細に説明されているように、チップ間の個々の一方向待ち時間ではなくループ待ち時間を測定することは、各チップ上のローカルカウンタ間の差を説明するために使用され得る。
【0038】
これらのループ待ち時間は、単なる各方向における待ち時間の合計であるので、まず時計回りに進み、次いで反時計回りに進む9つの単一のチップループ112は、時計回りの最初のループと同じ待ち時間を有する。同様に、完全なシステム反時計回りループ114は、すべての9つの単一チップループ112の合計から時計回りシステムループ114の待ち時間を引いたものと同じ待ち時間を有する。2つのチップ間のループの周りの異なる方向における待ち時間の差を測定することは、これらの差が9つの小さいループ112および単一のシステムループ114から導出され得るので、より多くの情報を提供しない。
【0039】
図3A~
図3Cは、隣接するチップ102間のループ待ち時間測定を示す一連のブロック図である。
図3A~
図3Cは、2つの隣接するチップ102、チップAおよびチップBの簡略化されたブロック図を示す。各チップ102は、チップのローカル動作を制御するコントローラ304と、ローカルカウンタ306と、通信インターフェース308とを含む。説明を明確にするために、通信インターフェース308は、伝送機インターフェース(Tx)から受信機インターフェース(Rx)までとして表されている。通信インターフェース308は、先入れ先出し(FIFO)バッファを含む。
【0040】
ループ待ち時間を測定するために、各チップは、たとえば、チップ102を起動することによって、そのローカルカウンタ306を初期化する。各チップのローカルカウンタ306は、上記で論じられているように、そのローカル時間を表す。いくつかの実装形態では、チップ102は、事前にスケジュールされたカウンタ時間において、それらの個々の動作(たとえば、計算、入力バッファからデータを読み取ること、およびデータを他のチップに伝送すること)を実行する。カウンタ306は、プロセス200に対していかなる方法でも同期される必要はない。たとえば、
図3Aに示されている例では、チップAのローカルカウンタ306は、時間0に初期化され、チップBのローカルカウンタ306は、時間150に初期化され、したがって、チップAおよびチップBのローカルカウンタは、150クロックサイクルだけ同期がずれている。以下で論じられている起動同期プロセスは、チップ102内のローカルカウンタ306を同期させるために使用される。
図3A~
図3C(および
図6Aおよび
図6B)において使用されるカウンタ時間は、説明の目的のために簡略化されていることが留意されるべきである。
【0041】
図3Bおよび
図3Cを参照すると、チップAとチップBとの間のラウンドトリップ待ち時間を測定するために、チップAおよびチップCは、最初にチップAからチップBへ、次いでチップBからチップAへの一連のタイムスタンプ付きデータ伝送を実行する。たとえば、最初にチップAは、たとえば、時計回りデータパス108上のチップAからチップBへの、第1の方向における伝送の相対的な一方向待ち時間を測定するために、タイムスタンプ付きデータ309をチップBに伝送する。チップAは、データ309が送信されたときのチップAのローカルカウンタ時間(たとえば、10)を有するタイムスタンプを含むデータ309をチップBに送信する。説明を明確にするために、
図3Bは、チップBに伝送される1つのデータ伝送のみを示している。実際には、たとえば、チップAは、512サイクルの物理コーディング副層(PCS)期間の様々な時点において一連のデータ伝送309を伝送することができ、その各々には伝送の時点においてチップAのローカルカウンタ時間でタイムスタンプが付けられる。チップBは、データ309を受信し、それ自体のローカルカウンタ時間(たとえば、180)を記録する。データ309が送信されたときのチップAのローカル時間(たとえば、10)とデータ309が受信されたときのチップBのローカル時間(たとえば、180)との間の差は、チップAからチップBへの相対的な一方向相対待ち時間に等しい。たとえば、
図3Bに示されているような相対的な一方向待ち時間は、170クロックサイクルである。
【0042】
図3Cに示されているように、チップBは、たとえば、反時計回りデータパス110におけるチップBからチップAへの、第2の方向における伝送の相対的な一方向待ち時間を測定するために同じプロセスを実行する。チップBは、データ310が送信されたときのチップBのローカルカウンタ時間(たとえば、200)を有するタイムスタンプを含むデータ310をチップAに伝送する。説明を明確にするために、
図3Cは、チップAに送信される1つのデータ伝送のみを示している。実際には、たとえば、チップBは、512サイクルのPCS期間の様々な時点において一連のデータ伝送309を送信することができ、その各々には伝送の時点においてチップBのローカルカウンタ時間でタイムスタンプが付けられる。チップAは、データ310を受信し、それ自体のローカルカウンタ時間(たとえば、60)を記録する。データ310が送信されたときのチップBのローカル時間(たとえば、200)とデータ310が受信されたときのチップAのローカル時間(たとえば、60)との間の差は、チップBからチップAへの相対的な一方向相対待ち時間に等しい。たとえば、
図3Cに示されている相対的な一方向待ち時間は、-140クロックサイクルである。2つの隣接するチップ102間のローカルカウンタの差により、相対的な一方向待ち時間が負になり得ることが留意されるべきである。
【0043】
一連のデータ伝送が実行されると、各チップ102(たとえば、チップAおよびB)は、データ(たとえば、データ309およびデータ310)内に含まれるタイムスタンプ値と、データが受信されたときのそれ自体のローカルカウンタ時間とに基づいて、一方向における相対的な一方向待ち時間を計算する。各チップ102は、次いで、それが測定した最大の相対的な一方向待ち時間を識別し、それぞれの最大ループ待ち時間の計算のために、最大の相対的な一方向待ち時間をシステムドライバ104に伝送することができる。いくつかの実装形態では、各チップ102は、一連の伝送における各伝送からのタイムスタンプデータを、各伝送が受信された時間におけるそれ自体の関連するローカルカウンタ値とともにシステムドライバ104に伝送する。システムドライバ104は、次いで、チップのペアごとに、各方向における相対的な一方向待ち時間を計算し、各方向における最大の一方向待ち時間を識別し、それぞれの最大ループ待ち時間を計算する。
【0044】
各チップ102上のローカルカウンタは、未知の状態になるので、相対的な一方向待ち時間値は、それ自体では意味がない。しかし、チップ102の所与のペア間の2つの相対的な一方向待ち時間(たとえば、チップAからチップBへの相対的な一方向待ち時間と、BからAに戻る相対的な一方向待ち時間)が合計されると、ローカルカウンタの差は、チップAとチップBとの間のループの周りの絶対待ち時間のみを残してキャンセルされる。たとえば、ループ待ち時間の計算は、以下の式によって表され得る。
max(Rb-Sa)=Lab+Cba、
max(Ra-Sb)=Lba-Cba、および
Linter-chip_loop_max=max(Ra-Sb)+max(Rb-Sa)=Lab+Cba+Lba-Cba=Lab+Lba
Ra、Rbは、それぞれチップAまたはチップB上でタイムスタンプ付きデータが受信されたローカルカウンタ時間を表す(たとえば、この例では、Raは、60であり、Rbは、180である)。Sa、Sbは、それぞれチップAまたはチップBによってデータが送信されたときのカウンタ時間を表す(たとえば、この例では、Saは、10であり、Sbは、200である)。Cbaは、チップBのローカルカウンタ時間とチップAのローカルカウンタ時間との間のカウンタ時間の差であり、Cba=Cb-Caである(これは、直接観察できない)(たとえば、この例では、Cbaは、150である)。Labは、チップAからチップBへの最大ジッタ絶対待ち時間である(これは、直接観察できない)。Lbaは、チップBからチップAへの最大ジッタ絶対待ち時間である(これは、直接観察できない)。max(Rb-Sa)は、チップAからチップBまでの最大の相対的な一方向待ち時間を表す。max(Rb-Sa)は、データがチップAから受信されたときのチップBのローカルカウンタ時間と、データが送信されたときのチップAのローカルカウンタ時間との間の差である。これは、チップAからチップBへの方向における実際の待ち時間(Lab)に、チップBのカウンタとチップAのカウンタとの間の差(Cba)を加えたものにも相当する。max(Ra-Sb)は、チップBからチップAへの最大の相対的な一方向待ち時間である。max(Ra-Sb)は、データがチップBから受信されたときのチップAのローカルカウンタ時間と、データが送信されたときのチップBのローカルカウンタ時間との間の差である。これは、チップBからチップAへの方向における実際の待ち時間(Lba)から、チップBのカウンタとチップAのカウンタとの間の差(Cba)を引いたものにも相当する。この関係は、max(Ra-Sb)=Lba+Cabとも言い換えられ得、Cabは、チップAのカウンタ値からチップBからのカウンタ値を引いたものであり、たとえば、Cbaの逆である。簡単に言うと、2つのチップ上のローカルカウンタ間のオフセットは、一方向における伝送の「加算」待ち時間および反対方向における伝送の「減算」待ち時間のように見える。Linter-chip_loop_maxは、2つのチップ間の所与のループ112の最大ループ待ち時間を表す。
【0045】
隣接ループ112に対する単一のチップのいくつかの測定を実行した後、システムドライバ104は、すべてのチップペアの中で最大ループ待ち時間を識別する(ステップ204)。たとえば、システムドライバ104は、最大チップ間ループ待ち時間(Lloop_max)を識別するために、各チップペア間の伝送ループ112からの最大測定ループ待ち時間を比較することができる。
【0046】
チップ102のうちの1つまたはシステムドライバ104は、リング114全体の周りのデータ伝送のリング待ち時間を決定する(ステップ206)。たとえば、タイムスタンプ付きデータがフルリングの周りで伝送され、データを伝送したのと同じチップ102において受信されることを除いて、
図3A~
図3Cに関して説明されているものと同様の技法が、フルリングの周りの待ち時間を測定および計算するために使用される。フルリングループ114の周りで測定された最大伝送時間は、最大フルリング待ち時間(L
ring_max)となる。したがって、ローカルカウンタの差は、問題にならない。
【0047】
システムドライバ104は、マルチチップシステム100の特性的チップ間待ち時間(Lmax)を決定する(ステップ208)。たとえば、システムドライバ104は、システム100における最大一方向待ち時間を推定するために、最大チップ間ループ待ち時間の半分と、最大フルリング待ち時間のN分の1とを比較することができ、Nは、マルチチップシステム100内のチップ102の総数である。これらの2つの値のうちの大きいほうが、マルチチップシステム100の特性的チップ間待ち時間(Lmax)である。システムドライバ104は、将来の動作において使用するために、特性的チップ間待ち時間を記憶することができる。たとえば、特性的チップ間待ち時間は、以下で論じられているように、起動時同期およびデータ伝送などの他の動作で使用される定数となる。いくつかの実装形態では、特性的チップ間待ち時間は、特定のソフトウェアアプリケーション、たとえば、特定の機械学習アルゴリズムを実行するために、チップ102ごとの動作スケジュールを生成するためにコンパイラによっても使用される。たとえば、特性的チップ間待ち時間は、データが1つのチップから隣接するチップに転送されるのにかかる最長の時間を表す。コンパイラは、隣接するチップがデータを伝送した後、受信チップが入力FIFOバッファからデータを読み取るようにスケジュールし、スケジュールされた読み取り時間までにすべてのデータが到着することを保証するために、特性的チップ間待ち時間を使用することができる。
【0048】
いくつかの実装形態では、Lmaxは、特性評価プロセス中に測定されなかった可能性のある任意の変動を考慮して、設計係数によって増加され得る。たとえば、測定されたLmaxは、隣接するチップ間のデータ伝送における最大の可能な変動を考慮していない場合がある。したがって、いくつかの実装形態では、Lmaxは、マルチチップシステム100によって経験される実際のチップ間待ち時間がLmaxの値を超えないことを確実にするために、増加され得る。
【0049】
図4は、マルチチップシステム100のローカルカウンタを同期させるための例示的なプロセス400のフローチャートである。プロセス400は、
図1、
図3A~
図3B、および
図4を参照して説明される。いくつかの実装形態では、プロセスまたはその一部は、システムドライバ104によって実行または制御される。いくつかの例では、プロセス400またはその一部は、マルチチップシステム100の個々のチップ102によって実行される。同期プロセス400は、マルチチップシステム100内のチップ102のローカルカウンタ306を同期させるために使用される。プロセス400は、システム100が起動されたときに実行され得、したがって、「起動同期」プロセスと呼ばれる。しかしながら、プロセス400は、同様に他の時間において、たとえば、マルチチップシステムがリセットされた場合にも実行され得る。
【0050】
チップペアごとに、ペア内の第1のチップ(たとえば、チップA)からペア内の第2のチップ(たとえば、チップB)へのデータ伝送の第1の相対的な一方向の待ち時間が決定され(ステップ402a)、ペア内の第2のチップ(たとえば、チップB)からペア内の第1のチップ(たとえば、チップA)へのデータ伝送の第2の相対的な一方向の待ち時間が決定され(ステップ402b)。たとえば、2つのチップ間の時計回りデータパス108における相対的な一方向の待ち時間が決定され得、次いで、2つのチップ間の反時計回りデータパス108における相対的な一方向の待ち時間が決定され得る。第1および第2の相対的な一方向の待ち時間は、たとえば、
図3A~
図3Cを参照して上記で説明されている技法を使用して測定され得る。チップ102は、測定された相対的な一方向の待ち時間をシステムドライバ104に送り返す。いくつかの実装形態では、システムドライバ104は、相対的な一方向の待ち時間の測定を実行するために、個々のチップ102を制御する。いくつかの実装形態では、個々のチップ102は、システムが起動またはリセットされたときに相対的な一方向の待ち時間の測定を実行するように個々のチップ102を制御するソフトウェア(たとえば、ファームウェア)を含む。
【0051】
システムドライバ104は、チップの各ペア間のループ待ち時間を決定する(ステップ404)。たとえば、システムドライバ104は、チップのペア間で測定されたそれぞれの相対的な一方向の待ち時間に基づいて、チップのペア間のループ待ち時間を決定することができる。たとえば、システムドライバ104は、チップの所与のペア間のループ待ち時間を計算するために、式Lloop=(Ra-Sb)+(Rb-Sa)を使用することができる。システムドライバ104は、マルチチップシステム100内のチップのそれぞれのペア間のループ112ごとに計算を繰り返すことができる。
【0052】
システムドライバ104は、オプションで、各ループ待ち時間がマルチチップシステムの特性的チップ間待ち時間(Lmax)以下であることを確認する(ステップ406)。たとえば、システムドライバ104は、チップの各ペアについて計算されたループ待ち時間を、特性的チップ間待ち時間の記憶された値と比較することができる。いくつかの実装形態では、計算されたループ待ち時間のいずれかが特性的チップ間待ち時間よりも大きい場合、システムドライバ104は、ループ待ち時間測定を再実行し得る。たとえば、システムドライバ104は、ステップ402および404を再実行させ得る。いくつかの実装形態では、システムドライバ104は、計算されたループ待ち時間のいずれかが特性的チップ間待ち時間よりも大きい場合、エラー信号を生成し得る。
【0053】
システムドライバ104は、特性的チップ間待ち時間(L
max)に基づいて1つまたは複数のチップのローカルカウンタを調整することによって、チップ102を同期させる(ステップ408)。たとえば、
図1を参照すると、マルチチップシステム100の1つのチップ102が、参照チップとして選択され得る。たとえば、参照チップのカウンタ値は、チップ102を同期させるために、マルチチップシステム100内の他のチップ102のそれぞれのローカルカウンタ306を調整するためのベースとして機能することになる。この例では、FPGAチップは、参照チップとして使用される。システムドライバ104は、参照チップから開始してペアワイズ方式でローカルカウンタを調整する。システムドライバ104は、L
maxと、チップ間の測定された一方向待ち時間のうちの1つとに基づいて、隣接するチップの各ペア内の1つのチップのローカルカウンタ時間を調整する。たとえば、FPGAおよびP0から開始して、システムドライバ104は、L
maxと、FPGAからP0へのデータ伝送の測定された一方向待ち時間(たとえば、時計回りデータパス108に沿ったデータ伝送の測定された一方向待ち時間)とに基づいて、P0のローカルカウンタ時間を調整する。P0内のローカルカウンタが調整された後、システムドライバ104は、チップP1のローカルカウンタを調整する。たとえば、システムドライバ104は、L
maxと、P0からP1へのデータ伝送の測定された一方向待ち時間とに基づいて、P1のローカルカウンタ時間を調整する。システムドライバ104は、すべてのチップが同期されるまで、リングの周りの各チップ102のローカルカウンタを調整するためにこのプロセスを繰り返す。しかしながら、FPGA(たとえば、参照チップ)のローカルカウンタは、調整されない。
【0054】
より具体的には、
図3Aおよび
図3Bに示されている例を使用して、システムドライバ104は、L
maxと、2つのチップ間の測定された相対的な一方向待ち時間のうちの1つとに基づいて、チップのペア内の1つのチップのローカルカウンタ時間を調整する。システムドライバ104は、L
maxから、ペア内の1つのチップからローカルカウンタが調整されているチップまでの測定された相対的な一方向待ち時間を引いた分だけカウンタ値を増加させることによって、チップのローカルカウンタ306を調整することができる。すなわち、新しいカウンタ値(T
new)は、T
new=T
old+L
max-(R
b-S
a)によって決定され得、ここで、T
oldは、元のカウンタ値であり、(R
b-S
a)は、カウンタが調整されているチップによって測定された相対的な一方向待ち時間を表す。たとえば、
図3Bでは、チップAからチップBへの相対的な一方向待ち時間は、170であると測定された。L
maxを30とすると、チップBのカウンタへの調整は、L
max-(R
b-S
a)すなわち30-170=-140となる。したがって、システムドライバ104は、チップBのローカルカウンタを-140カウントだけ増加させる(たとえば、ローカルカウンタを140だけ減少させる)。例として最も単純なケース(たとえば、
図3Aに示されているカウンタ時間)を使用すると、システムドライバ104は、チップBのローカルカウンタを150から10に調整することになる。チップBのローカルカウンタの調整された値は、チップAのローカルカウンタの値(たとえば、0)と同一ではないが、2つのチップは、本開示の目的のために同期されていると見なされ得る。たとえば、同期プロセスは、必ずしも2つのチップのローカルカウンタを等しくする必要はないが、チップの各ペア間の最大の相対的な一方向待ち時間がL
max以下になるように、マルチチップシステム全体のチップの各ペア間のデータ伝送待ち時間を同期させる。
【0055】
いくつかの実装形態では、チップ102のRx通信インターフェース308におけるFIFOバッファも調整され得る。たとえば、システムドライバ102は、チップループ112のすべてが[2Lmax-3,2Lmax]の範囲のループ待ち時間を有するまで、受信バッファサイズを増加または減少させる(たとえば、4nsの増分で待ち時間を追加または削除する)ことによって、チップ間リンク間の知覚される待ち時間を調整することができる。その結果、フルシステムループ114は、次いで、[NLmax-3,NLmax]の範囲のループ待ち時間を有し、ここで、Nは、ループ内のチップの数である。一般に、待ち時間は、追加される必要があるだけだが、たとえば、2チップループのすべてがそれらの制限内にあるが、たとえば、全システム時計回りループ114がより多くの待ち時間を必要とする場合、いくつかの反時計回りポインティングデータパス110から待ち時間が除去される必要がある場合がある。その場合、システムドライバ104は、(たとえば、反時計回りデータパス110に結合されたチップの受信バッファのうちの1つまたは複数を減少させることによって)反時計回りデータパス110のうちのいくつかにおけるいくつかの待ち時間を除去し、(たとえば、適切なデータ受信バッファを増加させることによって)同じ量の待ち時間を時計回りリンクに追加し、それによって、時計回りシステムループ114上の待ち時間を追加しながら、各2チップループ112における待ち時間を維持することができる。いくつかの実装形態では、待ち時間は、受信機側FIFOバッファを調節するのではなく、またはそれに加えて、適切な伝送機FIFOバッファサイズを増加または減少させることによって調整され得る。
【0056】
図1を参照すると、チップ102が同期された後でも、チップ間およびデータ伝送における1つまたは複数の他の残りの変動が対処される必要がある場合がある。たとえば、前方誤り訂正(FEC)動作によって発生する待ち時間の変動は、対処される必要がある場合がある。この変動は、隣接するチップ間の伝送よりも、1つのチップから別の隣接しないチップへの伝送に大きく影響を与える。たとえば、1つのチップから別の隣接しないチップへの(たとえば、第1のチップP0から最後のチップP7までリングを回って)データを伝送するために、データは、バイパス動作を使用して、介在するチップの各々を介して(たとえば、チップP1からP6を介して)伝送され得る。隣接するチップ間の各データパスの待ち時間は、一定成分と可変成分とを有する。可変成分の正確な値は、決定することが困難または不可能である場合がある。1つのチップ(P0)から別の隣接しないチップ(P7)にデータを伝送する場合、たとえば、バイパス動作では、待ち時間の累積変動は、データが伝送される各リンクの待ち時間の変動の合計である。宛先チップ(たとえば、P7)において、待ち時間の累積変動は、大きくなる可能性があり、宛先チップ(たとえば、P7)における伝送データの到着時間における大量の変動を結果として生じる。同期システムでは、到着時間におけるこの変動性は、宛先におけるデータのかなりのバッファリングを必要とする場合がある。待ち時間の累積変動から生じる宛先チップ(たとえば、P7)における到着時間の変動を排除するために、各チップ102からのデータ伝送に遅延が課せられ得る。各チップ102における遅延の導入は、待ち時間の変動の影響を打ち消し、宛先チップにおけるデータの到着時間は、決定論的になり、同期システムと互換性があるようになる。
【0057】
いくつかの実装形態では、遅延は、プログラムコンパイラによって各チップの動作に組み込まれる。たとえば、プログラムコンパイラは、各チップに対して明示的にスケジュールされた動作としてプログラム命令を生成するために、L
maxを使用する。
図5、
図6A、および
図6Bを参照して以下でより詳細に説明されているように、各チップは、データがチップに伝送された後に、最大チップ間待ち時間(たとえば、L
max)である時間において、隣接チップから受信されたデータを再伝送するように事前にスケジュールされ得る。たとえば、チップP0の動作は、ローカルカウンタ時間tにおいてチップP1にデータを伝送するように事前にスケジュールされ得る。チップP1は、ローカルカウンタ時間t+L
maxにおいてチップP2にデータを再伝送するように事前にスケジュールされ得る。
【0058】
タイミング変動性の1つの原因は、2つの隣接するチップ間の物理リンクの特性(たとえば、PCSジッタ)であり、これは、隣接するチップ102間のデータ伝送の待ち時間に変動をもたらす可能性がある。変動性のこの原因は、上記で説明されているシステム特性評価および同期プロセス(200および400)によって対処される。しかしながら、タイミング変動性の第2の原因は、内部チップ動作と、マルチチップシステム100によって実装される前方誤り訂正方式との間の同期の欠如である。前方誤り訂正方式では、チップ102間のデータ伝送に誤り訂正データが追加されるが、追加された誤り訂正データは、必ずしもデータ伝送と同期しているとは限らない。非同期データのデータ伝送への導入は、隣接するチップ間のデータ伝送の待ち時間に、たとえば、最大16クロックサイクルの変動をもたらす可能性がある。
【0059】
データが1つのチップ102から別の隣接しないチップ102(たとえば、P0からP7)に伝送される場合、各チップ間伝送(たとえば、P0からP1、P1からP2、など)の待ち時間の変動は、宛先チップ(P7)における累積遅延に累積する。例として前方誤り訂正による変動だけを取り上げると、単一のチップ間(たとえば、P0からP1への)伝送の待ち時間は、±16クロックサイクルの変動を有する。しかしながら、いくつかの動作は、1つのチップ102から別の隣接しないチップ102へのデータ伝送、たとえば、チップP0からチップP3へのデータ伝送、または第1のチップP0から最後のチップP7へのリングをまわるデータの伝送さえ必要とする場合がある。以下でより詳細に説明されているように、1つのチップから別の隣接しないチップに(たとえば、P0からP7に)データを伝送するために、データは、バイパス動作を使用して、介在するチップの各々を介して(たとえば、チップP1~P6を介して)伝送され得る。しかしながら、チップ間の待ち時間の変動は、8チップにわたって累積し、リング周りの待ち時間の合計変動は、±128クロックサイクルに近づく。宛先チップにおける到着時間のこの大きい変動性を同期システムと両立させるために、各チップ102における受信FIFOバッファサイズを増加させることによって、データのかなりの量のバッファリングが、受信機インターフェース、たとえば、Rx通信インターフェース308において実装され得る。
【0060】
しかしながら、マルチチップデータ伝送プロセス全体での待ち時間の変動の累積を防止することによって、追加のバッファリングが回避され得る。これを達成するために、隣接するチップ102の各ペア間のデータ伝送の待ち時間が可変ではなく固定されるように、各チップ102におけるデータ伝送動作に少量の遅延が導入され得る。具体的には、最大チップ間待ち時間(Lmax)は、上記で論じられているように決定される。データ伝送中、データがバイパス動作においてチップ102で受信されたとき、データは、次のチップにすぐに伝送されるのではなく、FIFOバッファなどの受信バッファ内に記憶される。データは、データ伝送が前のチップ102において開始されてから最大チップ間待ち時間(たとえば、Lmax)が経過した後にのみバッファから解放される。データ伝送プロセスにおける各バイパス動作のタイミングを制御する際に、データ伝送プロセス全体の正確な時間は、次いで、既知の値になり、これは、宛先チップ102におけるデータの知覚される到着時間に変動がないことを意味する。
【0061】
図5は、マルチチップシステム100内のチップ間でデータ伝送を行うための例示的なプロセス500のフローチャートである。プロセス500は、
図1、
図5、および
図6A~
図6Bを参照して説明される。
図6Aおよび
図6Bは、データ伝送プロセス500を示す一連のブロック図を示す。ブロック図は、内部バイパスデータパス602および604がラベル付けされていることを除いて、
図3A~
図3Cのものと同様である。たとえば、チップ102は、チップ102がリングトポロジ内の次のチップにデータを直接ルーティングすることを可能にする2つの方向におけるバイパスデータパスを含むことができる。
【0062】
プロセス500またはその一部は、マルチチップシステム100の個々のチップ102によって実行される。データ伝送プロセス500は、チップ102間のデータ通信をより決定論的にするために、マルチチップシステム100内の宛先チップ102におけるデータ到着時間の変動性を低減するために使用される。さらに、データ伝送プロセス500は、各チップ102において必要とされるデータ入力バッファサイズを低減し得る。プロセス500は、マルチチップシステム100内の各チップ102によって実行される一連の動作が、事前にスケジュールされ、事前にスケジュールされたローカルカウンタ時間において実行されることも可能にする。
【0063】
図6Aおよび
図6Bに示されているように、データ606は、第1のチップ(たとえば、チップA)から第2のチップ(たとえば、チップB)に伝送される(ステップ502)。たとえば、データ606は、システム100内の別のチップ102を対象とするバイパスデータであり、チップBを対象とするバイパスデータではない。チップBは、データ606を受信し、データ606をバッファ内に記憶する(ステップ504)。たとえば、チップBは、データ606をFIFOバッファ内に記憶する。チップBは、チップAがデータを伝送したときから最大チップ間待ち時間が経過するまで、データを記憶する。図示されている例では、チップBは、ローカルカウンタ時間32においてデータ606を受信し、最大チップ間待ち時間は、L
max=30カウンタサイクルであると仮定されている。したがって、チップBは、たとえば、ローカルカウンタ時間40(たとえば、40=データ606がチップBに伝送されたときのチップAのローカルカウンタ時間(10)に最大チップ間待ち時間(30)を加えたもの)まで、システム100内の次のチップ(たとえば、チップC)にデータ606を伝送しない。これは、8カウンタサイクルの例示的な遅延時間を表す。
【0064】
第1のチップ(たとえば、チップA)がデータ606を伝送したときから最大チップ間待ち時間(たとえば、L
max)が経過した後、第2のチップ(たとえば、チップB)は、記憶された
データをバッファから解放し(ステップ506)、解放されたデータ608(
図6B)を第3のチップ(たとえば、チップC)に伝送する(ステップ508)。たとえば、チップAがデータ606をチップBに伝送したときからチップBのカウンタの30サイクルが経過した後、チップBは、そのFIFOバッファからデータ606を解放し、データを内部バイパスパス602に沿ってデータを渡し、(
図6Bにおいて608として示される)データをチップCに伝送することができる。
【0065】
いくつかの実装形態では、チップ動作は、所定のカウンタ値において明示的にスケジュールされる。したがって、たとえば、バイパスデータを所与のチップバッファに記憶するための遅延時間は、スケジュールされた動作において考慮される。たとえば、上記で説明されている例を参照すると、チップAのスケジュールされた動作命令は、チップAの10のローカルカウンタ時間においてデータ606をチップBに伝送するように命令する。チップBのスケジュールされた動作命令は、その入力バッファからデータ606を解放し、チップBの40のローカルカウンタ時間においてデータをチップCに再伝送するようにチップBに命令する。したがって、チップBは、データ606を再伝送するための遅延時間を内部的に計算する必要はない。
【0066】
図7は、
図1のシステム100内のチップ102のうちの1つとして、たとえば、ASICチップP0~P7として使用され得る専用論理チップ(たとえば、ASIC700)の一例を示す概略図である。ASIC700は、複数のタイル702を含み、タイル702のうちの1つまたは複数は、たとえば、乗算演算および加算演算などの演算を実行するように構成された専用回路を含む。特に、各タイル702は、(
図1の計算ユニット24と同様の)セルの計算アレイを含むことができ、各セルは、数学的演算を実行するように構成される(たとえば、
図4に示されており、本明細書で説明されている例示的なタイル200を参照されたい)。いくつかの実装形態では、タイル702は、グリッドパターンにおいて配置され、タイル702は、第1の方向701(たとえば、行)に沿って、および第2の方向703に沿って配置される。たとえば、
図7に示されている例では、タイル702は、4つの異なるセクション(710a、710b、710c、710d)に分割され、各セクションは、縦18タイル掛ける横16タイルのグリッドにおいて配置された288のタイルを含む。いくつかの実装形態では、
図7に示されているASIC700は、別個のタイルに細分/配置されたセルの単一のシストリック(systolic)アレイを含むものとして理解され得、各タイルは、セルのサブセット/サブアレイと、ローカルメモリと、バスラインとを含む(たとえば、
図4を参照)。
【0067】
ASIC700は、ベクトル処理ユニット704も含む。ベクトル処理ユニット704は、タイル702から出力を受信し、タイル702から受信した出力に基づいてベクトル計算出力値を計算するように構成された回路を含む。たとえば、いくつかの実装形態では、ベクトル処理ユニット704は、タイル702から受信した出力に対して累積演算を実行するように構成された回路(たとえば、乗算回路、加算器回路、シフタ、および/またはメモリ)を含む。代替的に、またはそれに加えて、ベクトル処理ユニット704は、タイル702の出力に非線形関数を適用するように構成された回路を含む。代替的に、またはそれに加えて、ベクトル処理ユニット704は、正規化された値、プールされた値、またはその両方を生成する。ベクトル処理ユニットのベクトル計算出力は、1つまたは複数のタイル内に記憶され得る。たとえば、ベクトル計算出力は、タイル702に一意に関連付けられたメモリ内に記憶され得る。代替的に、またはそれに加えて、ベクトル処理ユニット704のベクトル計算出力は、計算の出力として、ASIC700の外部の回路に転送され得る。
【0068】
いくつかの実装形態では、ベクトル処理ユニット704は、各セグメントが、タイル702の対応するコレクションから出力を受信し、受信した出力に基づいてベクトル計算出力を計算するように構成された回路を含むようにセグメント化される。たとえば、
図7に示されている例では、ベクトル処理ユニット704は、第1の次元701に沿って広がる2つの行を含み、行の各々は、32列に配置された32のセグメントを含む。各セグメント706は、タイル702の対応する列からの出力(たとえば、累積された合計)に基づいて、本明細書で説明されているように、ベクトル計算を実行するように構成された回路(たとえば、乗算回路、加算器回路、シフタ、および/またはメモリ)を含む。ベクトル処理ユニット704は、
図7に示されているように、タイル702のグリッドの中央に配置され得る。ベクトル処理ユニット704の他の位置配置も可能である。
【0069】
ASIC700は、通信インターフェース708(たとえば、インターフェース7010A、7010B)も含む。通信インターフェース708は、シリアライザ/デシリアライザ(SerDes)インターフェースの1つまたは複数のセットと、汎用入力/出力(GPIO)インターフェースとを含む。SerDesインターフェースは、ASIC700に関する入力データを受信し、ASIC700から外部回路にデータを出力するように構成される。たとえば、SerDesインターフェースは、通信インターフェース708内に含まれるSerDesインターフェースのセットを介して、32Gbps、56Gbps、または任意の適切なデータレートのレートにおいてデータを伝送および受信するように構成され得る。たとえば、ASIC700は、オンにされたときに起動プログラムを実行し得る。GPIOインターフェースは、起動同期プロセス(たとえば、プロセス400)を実行するために、命令(たとえば、動作スケジュール)をASIC700にロードし、システムドライバ400と通信するために使用され得る。
【0070】
ASIC700は、通信インターフェース708、ベクトル処理ユニット704、および複数のタイ702の間でデータを伝達するように構成された複数の制御可能なバスライン(たとえば、
図4を参照)をさらに含む。制御可能なバスラインは、たとえば、グリッドの第1の次元701(たとえば、行)とグリッドの第2の次元(たとえば、列)の両方に沿って延びるワイヤを含む。第1の次元701に沿って延びる制御可能なバスラインの第1のサブセットは、第1の方向において(たとえば、
図7の右の方に)データを転送するように構成され得る。第1の次元701に沿って延びる制御可能なバスラインの第2のサブセットは、第2の方向において(たとえば、
図7の左の方に)データを転送するように構成され得る。第2の次元703に沿って延びる制御可能なバスラインの第1のサブセットは、第3の方向において(たとえば、
図7の上の方に)データを転送するように構成され得る。第2の次元703に沿って延びる制御可能なバスラインの第2のサブセットは、第4の方向において(たとえば、
図7の下の方に)データを転送するように構成され得る。
【0071】
各制御可能なバスラインは、クロック信号に従ってラインに沿ってデータを伝達するために使用される、フリップフロップなどの複数の伝達要素を含む。制御可能なバスラインを介してデータを転送することは、各クロックサイクルにおいて、制御可能なバスラインの第1の伝達要素から制御可能なバスラインの第2の隣接する伝達要素にデータをシフトすることを含むことができる。いくつかの実装形態では、データは、クロックサイクルの立ち上がりエッジまたは立ち上がりエッジにおいて制御可能なバスラインを介して伝達される。たとえば、第1のクロックサイクルにおいて、制御可能なバスラインの第1の伝達要素(たとえば、フリップフロップ)上に存在するデータは、第2のクロックサイクルにおいて、制御可能なバスラインの第2の伝達要素(たとえば、フリップフロップ)に転送され得る。いくつかの実装形態では、伝達要素は、互いに一定の距離において周期的に離間され得る。たとえば、場合によっては、各制御可能なバスラインは、複数の伝達要素を含み、各伝達要素は、対応するタイル702内またはそれに近接して配置される。
【0072】
ASICチップ700の内部動作に関連する待ち時間を最小化するために、タイル702およびベクトル処理ユニット704は、様々な構成要素間のデータが移動する距離を減少させるように配置され得る。特定の実装形態では、タイル702と通信インターフェース708の両方は、複数のセクションにセグメント化され得、タイルセクションと通信インターフェースセクションの両方が、タイルと通信インターフェースとの間のデータが移動する最大距離が減少するように配置される。たとえば、いくつかの実装形態では、タイル702の第1のグループが、通信インターフェース708の第1の側の第1のセクション内に配置され得、タイル702の第2のグループが、通信インターフェースの第2の側の第2のセクション内に配置され得る。結果として、通信インターフェースから最も遠いタイルまでの距離は、タイル702のすべてが通信インターフェースの片側の単一のセクション内に配置される構成と比較して、半分にされ得る。
【0073】
代替的には、タイルは、4つのセクションなどの異なる数のセクションにおいて配置され得る。たとえば、
図7に示されている例では、ASIC700の複数のタイル702は、複数のセクション710(710a、710b、710c、710d)において配置される。各セクション710は、グリッドパターンにおいて配置された同様の数のタイル702を含む(たとえば、各セクション710は、16行および16列に配置された256のタイルを含むことができる)。通信インターフェース708も、複数のセクションに分割され、第1の通信インターフェース7010Aおよび第2の通信インターフェース7010Bが、タイル702のセクション710のいずれかの側に配置される。第1の通信インターフェース7010Aは、制御可能なバスラインを介して、ASICチップ700の左側の2つのタイルセクション710a、710cに結合され得る。第2の通信インターフェース7010Bは、制御可能なバスラインを介して、ASICチップ700の右側の2つのタイルセクション710b、710dに結合され得る。結果として、通信インターフェース708へおよび/またはからデータが移動する最大距離(および、したがって、データ伝播に関連する待ち時間)は、単一の通信インターフェースのみが利用可能である配置と比較して半分にされ得る。データ待ち時間を低減するために、タイル702および通信インターフェース708の他の結合配置も可能である。タイル702および通信インターフェース708の結合配置は、制御可能なバスラインの伝達要素およびマルチプレクサに制御信号を提供することによってプログラムされ得る。
【0074】
いくつかの実装形態では、1つまたは複数のタイル702は、制御可能なバスラインおよび/またはASIC700内の他のタイル(本明細書では「制御タイル」と呼ばれる)に関して読み取り動作および書き込み動作を開始するように構成される。ASIC700内の残りのタイルは、(たとえば、層推論を計算するために)入力データに基づいて計算を実行するように構成され得る。いくつかの実装形態では、制御タイルは、ASIC700内の他のタイルと同じ構成要素および構成を含む。制御タイルは、ASIC700の追加のタイル、追加の行、または追加の列として追加され得る。たとえば、各タイル702が入力データに対して計算を実行するように構成されているタイル702の対称グリッドの場合、入力データに対して計算を実行するタイル702のための読み取り動作および書き込み動作を処理するために、制御タイルの1つまたは複数の追加の行が含まれ得る。たとえば、各セクション710は、18行のタイルを含み、最後の2行のタイルは、制御タイルを含み得る。別個の制御タイルを提供することは、いくつかの実装形態では、計算を実行するために使用される他のタイルにおいて利用可能なメモリの量を増加させる。しかしながら、本明細書で説明されているように制御を提供するための専用の別個のタイルは、必要ではなく、場合によっては、別個の制御タイルは、提供されない。むしろ、各タイルは、そのタイルのための読み取り動作および書き込み動作を開始するための命令をそのローカルメモリ内に記憶し得る。
【0075】
さらに、
図7に示されている各セクション710は、18行掛ける16列に配置されたタイルを含むが、セクション内のタイル702の数およびそれらの配置は、異なり得る。たとえば、場合によっては、セクション710は、等しい数の行および列を含み得る。
【0076】
さらに、
図7では4つのセクションに分割されているように示されているが、タイル702は、他の異なるグループに分割され得る。たとえば、いくつかの実装形態では、タイル702は、(
図7に示されているページの上部により近い)ベクトル処理ユニット704の上の第1のセクションおよび(
図7に示されているページの下部により近い)ベクトル処理ユニット704の下の第2のセクションなどの、2つの異なるセクションにグループ化される。そのような配置では、各セクションは、たとえば、(方向703に沿って)縦18タイル掛ける(方向701に沿って)横32タイルのグリッドにおいて配置された596タイルを含み得る。セクションは、他の総数のタイルを含み得、異なるサイズのアレイにおいて配置され得る。場合によっては、セクション間の分割は、ASIC700のハードウェア機能によって線引きされる。たとえば、
図7に示されているように、セクション710a、710bは、ベクトル処理ユニット704によってセクション710c、710dから分離され得る。
【0077】
本明細書で説明されている主題の実施形態および機能的動作は、デジタル電子回路、本明細書で開示されている構造およびそれらの構造的同等物を含むコンピュータハードウェア、またはそれらのうちの1つもしくは複数の組合せにおいて実装され得る。本明細書で説明されている主題の実施形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置によって実行するために、またはデータ処理装置の動作を制御するために、有形の非一時的プログラムキャリア上に符号化されたコンピュータプログラムの1つまたは複数のモジュールとして実装され得る。代替的に、またはそれに加えて、プログラム命令は、データ処理装置による実行のために適切な受信機装置に伝送するための情報を符号化するために生成された、人工的に生成された伝播信号、たとえば、機械生成の電気、光、または電磁信号上に符号化され得る。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つまたは複数の組合せであり得る。
【0078】
「データ処理装置」という用語は、例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。装置は、専用論理回路、たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASICを含むことができる。装置は、ハードウェアに加えて、問題のコンピュータプログラムのための実行環境を作成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つもしくは複数の組合せを構成するコードを含むこともできる。
【0079】
本明細書で説明されているプロセスおよび論理フローは、入力データに対して動作し、出力を生成することによって機能を実行するために、1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラマブルコンピュータによって実行され得る。プロセスおよび論理フローは、専用論理回路、たとえば、FPGA、ASIC、またはGPGPU(汎用グラフィック処理ユニット)によっても実行され得、装置は、専用論理回路、たとえば、FPGA、ASIC、またはGPGPU(汎用グラフィック処理ユニット)としても実装され得る。
【0080】
本明細書は、多くの特定の実装形態の詳細を含んでいるが、これらは、いかなる発明または特許請求され得るものの範囲に対する制限として解釈されるべきではなく、むしろ、特定の発明の特定の実施形態に固有であり得る特徴の説明として解釈されるべきである。別個の実施形態の文脈で本明細書において説明されている特定の特徴はまた、単一の実施形態において組み合わせて実装され得る。逆に、単一の実施形態の文脈で説明されている様々な特徴はまた、複数の実施形態において別々に、または任意の適切な部分的組合せにおいて実装され得る。さらに、特徴は、特定の組合せで作用するものとして上記で説明されている場合があり、当初はそのように特許請求されている場合さえあるが、特許請求された組合せからの1つまたは複数の特徴は、場合によっては、組合せから削除され得、特許請求された組合せは、部分的組合せまたは部分的組合せの変形に向けられ得る。
【0081】
同様に、動作は、図面において特定の順序で描かれているが、これは、所望の結果を達成するために、そのような動作が示されている特定の順序もしくは連続した順番に実行されること、またはすべての図示されている動作が実行されることを必要としていると理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利である場合がある。さらに、上記で説明されている実施形態における様々なモジュールおよび構成要素の分離は、すべての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されているプログラム構成要素およびシステムは、一般に、単一のソフトウェア製品に統合され得、または複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
【0082】
主題の特定の実施形態について説明されてきた。他の実施形態は、以下の特許請求の範囲の範囲内にある。たとえば、バスラインは、「制御可能」と説明されているが、すべてのバスラインが同じレベルの制御を有する必要はない。たとえば、様々な程度の制御性が存在し得、いくつかのバスラインは、それらのバスラインにデータを供給することができるまたはそれらのバスラインからデータを伝送することができるタイルの数に関して制限されている場合にのみ、制御され得る。別の例では、いくつかのバスラインは、本明細書で説明されているように、北、東、西、または南などの単一の方向に沿ってデータを供給することに専用にされ得る。場合によっては、特許請求の範囲に列挙されているアクションは、異なる順序で実行され得、依然として所望の結果を達成することができる。一例として、添付図面に描かれているプロセスは、所望の結果を達成するために、示されている特定の順序または連続した順序を必ずしも必要としない。特定の実装形態では、マルチタスクおよび並列処理が有利である場合がある。
【符号の説明】
【0083】
24 計算ユニット
100 マルチチップシステム、システム
102 半導体チップ、チップ、ASICチップ、FPGAチップ、ASIC、宛先チップ
104 システムドライバ、FPGAチップ
106 クロック
108 時計回りパス、時計回りデータパス
110 反時計回りパス、反時計回りポインティングデータパス、反時計回りデータパス
112 チップ間通信ループ、ループ、チップループ、伝送ループ、2チップループ
114 チップ間通信ループ、ループ、リング、フルリングループ、フルシステムループ、時計回りシステムループ
200 タイル
304 コントローラ
306 ローカルカウンタ
308 通信インターフェース、Rx通信インターフェース
309 タイムスタンプ付きデータ、データ、データ伝送
310 データ
602 内部バイパスデータパス、内部バイパスパス
604 内部バイパスデータパス
606 データ
608 データ
700 ASIC、ASICチップ
701 第1の方向、第1の次元
702 タイル
703 第2の方向、第2の次元
704 ベクトル処理ユニット
706 セグメント
708 通信インターフェース
710 セクション
710a セクション
710b セクション
710c セクション
710d セクション
7010A インターフェース、第1の通信インターフェース
7010B インターフェース、第2の通信インターフェース