IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ グラフコアー リミテッドの特許一覧

<>
  • 特許-ハードウェアオートローダ 図1
  • 特許-ハードウェアオートローダ 図2
  • 特許-ハードウェアオートローダ 図3
  • 特許-ハードウェアオートローダ 図4
  • 特許-ハードウェアオートローダ 図5A
  • 特許-ハードウェアオートローダ 図5B
  • 特許-ハードウェアオートローダ 図6
  • 特許-ハードウェアオートローダ 図7
  • 特許-ハードウェアオートローダ 図8
  • 特許-ハードウェアオートローダ 図9
  • 特許-ハードウェアオートローダ 図10
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-11
(45)【発行日】2024-06-19
(54)【発明の名称】ハードウェアオートローダ
(51)【国際特許分類】
   G06F 21/57 20130101AFI20240612BHJP
【FI】
G06F21/57 350
【請求項の数】 17
(21)【出願番号】P 2023501865
(86)(22)【出願日】2021-05-10
(65)【公表番号】
(43)【公表日】2023-08-08
(86)【国際出願番号】 EP2021062334
(87)【国際公開番号】W WO2022012800
(87)【国際公開日】2022-01-20
【審査請求日】2023-01-12
(31)【優先権主張番号】2010816.3
(32)【優先日】2020-07-14
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】518371892
【氏名又は名称】グラフコアー リミテッド
【氏名又は名称原語表記】Graphcore Limited
【住所又は居所原語表記】11-19 Wine Street,Bristol,BS1 2PH,United Kingdom
(74)【代理人】
【識別番号】100169904
【弁理士】
【氏名又は名称】村井 康司
(74)【代理人】
【識別番号】100221372
【弁理士】
【氏名又は名称】岡崎 信治
(72)【発明者】
【氏名】ダニエル ジョン ペルハム ウィルキンソン
【審査官】宮司 卓佳
(56)【参考文献】
【文献】特開2010-073193(JP,A)
【文献】国際公開第01/027753(WO,A2)
【文献】米国特許出願公開第2017/0083707(US,A1)
【文献】米国特許出願公開第2016/0196193(US,A1)
【文献】米国特許出願公開第2010/0287424(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/57
(57)【特許請求の範囲】
【請求項1】
複数のプロセッサを含む集積回路であって、前記複数のプロセッサのそれぞれは、
アプリケーションデータと、実行可能アプリケーション命令のセットと、を記憶するための少なくとも1つのメモリと、
少なくとも1つ実行ユニットと、
を含み、
前記集積回路は、実行可能ブート命令のセットを含むメモリを含むハードウェアモジュールを含み、前記ハードウェアモジュールは、信頼されたソフトウェアによる実行時、前記実行可能ブート命令のセットを、前記集積回路の相互接続部を介して前記複数のプロセッサの少なくともいくつかに発信させるように構成されたプロセッシング回路を含み、
前記複数のプロセッサの前記少なくともいくつかにおいて、前記少なくとも1つの実行ユニットは、
受信された実行可能ブート命令のセットを実行して、前記集積回路の外部にある少なくとも1つのメモリに対して、前記実行可能アプリケーション命令のセットをフェッチするための読み取り要求を発行させることと、
前記実行可能アプリケーション命令のセットを実行して、前記アプリケーションデータを使用して演算を実行することと、
を行うように構成される、集積回路。
【請求項2】
前記複数のプロセッサの少なくともいくつかにおいて、
受信された実行可能ブート命令のセットを実行することは、前記集積回路のそれぞれのプロセッサの識別子に応じて外部メモリのアドレスを演算することを含み、
前記読み取り要求を発行させることは、前記外部メモリにおける演算されたアドレスから前記実行可能アプリケーション命令のセットをフェッチするための前記読み取り要求を発行させることを含む、請求項1に記載の集積回路。
【請求項3】
前記ハードウェアモジュールは、前記実行可能ブート命令のセットによって占有されていないメモリ空間を消去させるための1つ又は複数の書き込み要求を前記複数のプロセッサの少なくともいくつかに発信させるように構成されたプロセッシング回路を含む、請求項1又は2に記載の集積回路。
【請求項4】
前記複数のプロセッサの少なくともいくつかにおいて、少なくとも1つの実行ユニットは、前記実行可能アプリケーション命令のそれぞれのセットの実行中に生成されたチェックポイントデータを、書き込み要求において、前記集積回路の外部にあるストレージに発信させるように配置される、請求項1~3のいずれか一項に記載の集積回路。
【請求項5】
前記ハードウェアモジュールの前記プロセッシング回路は、生成されたチェックポイントデータを発信させることに続いて、前記実行可能ブート命令のセットを、前記集積回路の相互接続部を介して前記複数のプロセッサの少なくともいくつかに再び発信させるように構成され、
前記複数のプロセッサの少なくともいくつかにおいて、少なくとも1つの実行ユニットは、その後、
受信された実行可能ブート命令のセットを実行して、前記集積回路の外部にある前記メモリに対して、前記実行可能アプリケーション命令のセットと、前記チェックポイントデータを含む更なるアプリケーションデータのセットと、をフェッチするための読み取り要求を発行させることと、
前記実行可能アプリケーション命令のセットを実行して、前記チェックポイントデータの値を使用して演算を実行することと、
を行うように構成される、請求項4に記載の集積回路。
【請求項6】
更なるアプリケーションデータのセットは、インバリアントデータのセットを含み、前記インバリアントデータは、前記チェックポイントデータの発信前にフェッチされた前記アプリケーションデータの一部であり、
更なるアプリケーションデータのセットは、前記チェックポイントデータの発信前にフェッチされた前記アプリケーションデータの一部であるバリアントデータの代わりに、前記チェックポイントデータを含む、請求項5に記載の集積回路。
【請求項7】
前記複数のプロセッサの前記少なくともいくつかにおいて、少なくとも1つ実行ユニットは、前記実行可能アプリケーション命令のセットを実行して、前記集積回路の外部にある少なくとも1つのメモリから前記アプリケーションデータの少なくとも一部をロードするように構成される、請求項1~6のいずれか一項に記載の集積回路。
【請求項8】
前記複数のプロセッサの前記少なくともいくつかにおいて、少なくとも1つ実行ユニットは、受信された実行可能ブート命令のセットを実行して、前記集積回路の外部にある少なくとも1つのメモリに対して、前記アプリケーションデータの少なくとも一部をフェッチするための読み取り要求を発行させるように構成される、請求項1~7のいずれか一項に記載の集積回路。
【請求項9】
前記ハードウェアモジュールは、前記実行可能ブート命令のセットを記憶するように構成された揮発性メモリを含み、
前記ハードウェアモジュールの前記プロセッシング回路は、前記集積回路のリセットに続いて、
前記集積回路の外部にあるデバイスから前記実行可能ブート命令のセットを受信することと、
受信された実行可能ブート命令のセットを前記揮発性メモリに記憶することと、
を行うように構成される、請求項1~8のいずれか一項に記載の集積回路。
【請求項10】
前記集積回路の外部にあるデバイスから前記実行可能ブート命令のセットを受信することは、JTAGインターフェースを介して前記実行可能ブート命令のセットを受信することを含む、請求項9に記載の集積回路。
【請求項11】
前記ハードウェアモジュールは、前記実行可能ブート命令のセットを記憶するように構成された不揮発性メモリを含む、請求項1~7のいずれか一項に記載の集積回路。
【請求項12】
前記ハードウェアモジュールの前記メモリは、実行可能ブート命令の複数のセットを記憶するように構成され、
前記プロセッシング回路は、前記実行可能ブート命令の複数のセットのそれぞれを前記集積回路の前記プロセッサのサブセットに発信させるように構成される、請求項1~11のいずれか一項に記載の集積回路。
【請求項13】
請求項1~12のいずれか一項に記載の集積回路と、
前記集積回路の外部にある前記メモリを含むデータ提供システムと、
を含むデータプロセッシングシステム。
【請求項14】
前記データ提供システムは、前記データ提供システムにおいて、前記集積回路からの同期要求を受信することに応じて、プロセッサのグループのためのアプリケーションデータを、前記集積回路の外部にある前記メモリにロードさせるように構成された少なくとも1つのプロセッサを含む、請求項13に記載のデータプロセッシングシステム。
【請求項15】
前記データ提供システムの少なくとも1つのプロセッサは、前記集積回路から受信された前記プロセッサのグループの識別子に応じた配置において、前記集積回路の外部にある前記メモリに前記アプリケーションデータを配置するように構成される、請求項13に記載のデータプロセッシングシステム。
【請求項16】
複数のプロセッサを含む集積回路において実行される方法であって、
前記集積回路のハードウェアモジュールに実行可能ブート命令のセットを記憶することと、
信頼されたソフトウェアによる実行時、前記実行可能ブート命令のセットを、前記集積回路の相互接続部を介して前記複数のプロセッサの少なくともいくつかに発信させるように前記ハードウェアモジュールのプロセッシング回路を設定することと、
前記複数のプロセッサの少なくともいくつかにおいて、受信された実行可能ブート命令のセットを実行して、前記集積回路の外部にあるメモリに対して、実行可能アプリケーション命令のセットをフェッチするための読み取り要求を発行させることと、
前記実行可能アプリケーション命令のセットを実行して、アプリケーションデータを使用して演算を実行することと、
を含む方法。
【請求項17】
複数のプロセッサを含む集積回路のハードウェアモジュールのプロセッシング回路に方法を実行させるコンピュータ実行可能命令を含むコンピュータプログラムであって、前記方法は、
前記集積回路の前記ハードウェアモジュールに実行可能ブート命令のセットを記憶することと、
信頼されたソフトウェアによる実行時、前記実行可能ブート命令のセットを、前記集積回路の相互接続部を介して前記複数のプロセッサの少なくともいくつかに発信させるように前記ハードウェアモジュールのプロセッシング回路を設定することと、
を含み、
前記実行可能ブート命令は、前記複数のプロセッサの少なくともいくつかにおいて実行されると、アプリケーションデータを使用して演算を実行するために、前記集積回路の外部にあるメモリに対して、前記複数のプロセッサの少なくともいくつかにおいて実行するための実行可能アプリケーション命令のセットをフェッチするための読み取り要求を発行させるように構成される、
コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、集積回路の複数のプロセッサへのアプリケーションの提供に関する。
【背景技術】
【0002】
大規模並列演算を実行する場合、複数のプロセッサを含むプロセッシングユニットは、単一の集積回路(すなわちチップ)上に設けられ得る。プロセッサのそれぞれは、アプリケーションデータのセット、例えばアプリケーションのための入力変数を用いて実行可能アプリケーション命令のセットを実行することにより、アプリケーションのための演算を実行するように構成される。
【0003】
複数のプロセッサを含むプロセッシングユニットの使用法の一例は、機械学習アルゴリズム、例えば深層ニューラルネットワークに関連して見られる。機械知能の技術分野の当業者によく知られているように、機械知能アルゴリズムは、「知識モデル」に基づいており、知識モデルは、複数の相互に接続されたノードのグラフによって表され得る。各ノードは、そのノードの入力の関数を表す。いくつかのノードは、グラフへの入力を受け取り、いくつかのノードは、1つ又は複数の他のノードからの入力を受け取る一方、いくつかのノードの出力は、他のノードの入力を形成し、いくつかのノードの出力は、グラフの出力を提供する(及びいくつかの場合、所与のノードは、グラフへの入力、グラフからの出力及び他のノードへの接続部のすべてさえ有し得る)。更に、各ノードにおける関数は、1つ又は複数のそれぞれのパラメータ、すなわち重み及びバイアスによってパラメータ化される。
【0004】
通常、各ノードで実行される処理の少なくともいくつかは、グラフ内の他のノードのいくつか又はすべてとは独立に実行され得るため、巨大グラフは、並行処理及び/又は並列処理の優れた機会を提供する。コンピュータ内の各プロセッサは、異なるノードに関連付けられた処理を行うために使用され得る。このようにして、複数のプロセッサは、まとめて単一のニューラルネットワークの訓練又は演算を行うために使用され得る。
【0005】
機械学習モデルに関連付けられた処理は、演算フェーズと訓練フェーズとに分割され得る。訓練フェーズでは、入力データのセットは、機械学習モデルの状態を規定するデータを用いて、機械学習モデルの出力値を生成するように処理される。機械学習モデルの状態を規定するデータは、モデルのいずれのノードが連結されているかを示した情報と、追加的に訓練中に変化するモデルパラメータ(例えば、重み及びバイアスを含む)とを含む。訓練中に得られた出力値のセットがラベルのセットに対して比較され、モデルパラメータは、入力値のセットからラベルをより正確に再現するようにモデルを調整するために更新される。機械学習モデルが訓練されると、演算フェーズにおいて、入力データのセットは、訓練において取得された調整されたパラメータを用いて出力値を生成するように処理される。
【0006】
機械学習モデルの演算フェーズ及び訓練フェーズにおいて使用される様々なデータのセット、すなわち入力データ、ノード間の連結を規定する情報、モデルパラメータ及びラベルは、機械学習モデルの訓練及び/又は演算を実施するために1つ又は複数のプロセッサによって処理されるアプリケーションデータを構成する。このアプリケーションデータを用いて演算を実施するために、マルチプロセッサシステムは、実行可能命令のセットをロードされなければならない。マルチプロセッサシステムに実行可能命令のセットをロードすることは、機械学習に関連して生じる要件であるが、機械学習関連に限定されるものではなく、他のタイプのアプリケーションに関連して生じることもある。
【発明の概要】
【発明が解決しようとする課題】
【0007】
マルチプロセッサ集積回路に実行可能命令のセットをロードする場合、1つの課題は、信頼できない命令及びデータがプロセッサのそれぞれにロードされることを阻止することである。悪意のある第三者が各プロセッサのストレージにアクセスした場合、この第三者は、プロセッサにソフトウェアをインストールすることが可能になり、テナントがプロセッサに提供した真正のアプリケーションデータへのアクセスを得ることが可能になり得る。真正のアプリケーション命令及びデータは、多くの場合、機密であり、悪意のある第三者から秘匿されるべきである。したがって、信頼されたアプリケーション命令のみが外部ストレージからプロセッサのそれぞれのメモリに移動されることを確保する必要がある。
【課題を解決するための手段】
【0008】
第1の態様によれば、複数のプロセッサを含む集積回路であって、複数のプロセッサのそれぞれは、アプリケーションデータと、実行可能アプリケーション命令のセットとを記憶するための少なくとも1つのメモリと、少なくとも1つ実行ユニットとを含み、集積回路は、実行可能ブート命令のセットを含むメモリを含むハードウェアモジュールを含み、ハードウェアモジュールは、実行可能ブート命令のセットを、集積回路の相互接続部を介して複数のプロセッサの少なくともいくつかに発信(dispatch)させるように構成されたプロセッシング回路を含み、複数のプロセッサの少なくともいくつかにおいて、少なくとも1つの実行ユニットは、受信された実行可能ブート命令のセットを実行して、集積回路の外部にある少なくとも1つのメモリに対して、実行可能アプリケーション命令のセットをフェッチするための読み取り要求を発行させることと、実行可能アプリケーション命令のセットを実行して、アプリケーションデータを使用して演算を実施することとを行うように構成される、集積回路が提供される。
【0009】
マルチプロセッサ集積回路には、信頼されたソフトウェアによってプロセッサのセットのそれぞれにブートローダを提供するように構成されたハードウェアモジュールが設けられる。そうすることにより、プロセッサのそれぞれは、信頼されたブートローダを安全に提供される。信頼されたブートローダは、プロセッサのそれぞれが、正しいアプリケーション命令を記憶する外部メモリロケーションに対する読み取り要求を発行することを確保するために使用される。これにより、悪意のある第三者によって提供されたソフトウェアであり得る誤った命令をプロセッサが読み取ることが阻止される。したがって、集積回路のセキュリティが改善される。追加的に、この技法は、アプリケーションの高速ブートを実現するという利点を有する。
【0010】
いくつかの実施形態では、複数のプロセッサの少なくともいくつかにおいて、受信された実行可能ブート命令のセットを実行することは、集積回路のそれぞれのプロセッサの識別子に応じて外部メモリのアドレスを演算することを含み、読み取り要求を発行させることは、外部メモリにおける演算されたアドレスから実行可能アプリケーション命令のセットをフェッチするための読み取り要求を発行させることを含む。
【0011】
いくつかの実施形態では、ハードウェアモジュールは、実行可能ブート命令のセットによって占有されていないメモリ空間を消去させるための1つ又は複数の書き込み要求を複数のプロセッサの少なくともいくつかに発信させるように構成されたプロセッシング回路を含む。
【0012】
いくつかの実施形態では、複数のプロセッサの少なくともいくつかにおいて、少なくとも1つ実行ユニットは、実行可能命令のそれぞれのセットの実行中に生成されたチェックポイントデータを、書き込み要求において、集積回路の外部にあるストレージに発信させるように配置される。
【0013】
いくつかの実施形態では、ハードウェアモジュールのプロセッシング回路は、生成されたチェックポイントデータを発信させることに続いて、実行可能ブート命令のセットを、集積回路の相互接続部を介して複数のプロセッサの少なくともいくつかに再び発信させるように構成され、複数のプロセッサの少なくともいくつかにおいて、少なくとも1つの実行ユニットは、その後、受信された実行可能ブート命令のセットを実行して、集積回路の外部にあるメモリに対して、実行可能アプリケーション命令のセットと、チェックポイントデータを含む更なるアプリケーションデータのセットと、をフェッチするための読み取り要求を発行させることと、実行可能アプリケーション命令のセットを実行して、チェックポイントデータの値を使用して演算を実行することとを行うように構成される。
【0014】
いくつかの実施形態では、更なるアプリケーションデータのセットは、インバリアントデータのセットを含み、インバリアントデータは、チェックポイントデータの発信前にフェッチされたアプリケーションデータの一部であり、更なるアプリケーションデータのセットは、チェックポイントデータの発信前にフェッチされたアプリケーションデータの一部であるバリアントデータの代わりに、チェックポイントデータを含む。
【0015】
いくつかの実施形態では、複数のプロセッサの少なくともいくつにおいて、少なくとも1つ実行ユニットは、実行可能アプリケーション命令のそれぞれのセットを実行して、集積回路の外部にある少なくとも1つのメモリからアプリケーションデータの少なくとも一部をロードするように構成される。
【0016】
いくつかの実施形態では、複数のプロセッサの少なくともいくつかにおいて、少なくとも1つ実行ユニットは、受信された実行可能ブート命令のセットを実行して、集積回路の外部にある少なくとも1つのメモリに対して、アプリケーションデータの少なくとも一部をフェッチするための読み取り要求を発行させるように構成される。
【0017】
いくつかの実施形態では、ハードウェアモジュールは、実行可能ブート命令のセットを記憶するように構成された揮発性メモリを含み、ハードウェアモジュールのプロセッシング回路は、集積回路のリセットに続いて、集積回路の外部にあるデバイスから実行可能ブート命令のセットを受信することと、受信された実行可能ブート命令のセットを揮発性メモリに記憶することとを行うように構成される。
【0018】
いくつかの実施形態では、集積回路の外部にあるデバイスから実行可能ブート命令のセットを受信することは、JTAGインターフェースを介して実行可能ブート命令のセットを受信することを含む。
【0019】
いくつかの実施形態では、ハードウェアモジュールは、実行可能ブート命令のセットを記憶するように構成された不揮発性メモリを含む。
【0020】
いくつかの実施形態では、ハードウェアモジュールのメモリは、実行可能ブート命令の複数のセットを記憶するように構成され、プロセッシング回路は、実行可能ブート命令の複数のセットのそれぞれを集積回路のプロセッサのサブセットに発信させるように構成される。
【0021】
第2の態様によれば、第1の態様による集積回路と、集積回路の外部にあるメモリを含むデータ提供システムとを含むデータプロセッシングシステムが提供される。
【0022】
いくつかの実施形態では、データ提供システムは、データ提供システムにおいて、集積回路からの同期要求を受信することに応じて、プロセッサのグループのためのアプリケーションデータを、集積回路の外部にあるメモリにロードさせるように構成された少なくとも1つのプロセッサを含む。
【0023】
いくつかの実施形態では、データ提供システムの少なくとも1つのプロセッサは、集積回路から受信されたプロセッサのグループの識別子に応じた配置において、集積回路の外部にあるメモリにアプリケーションデータを配置するように構成される。
【0024】
第3の態様によれば、複数のプロセッサを含む集積回路において実行される方法であって、集積回路のハードウェアモジュールに実行可能ブート命令のセットを記憶することと、実行可能ブート命令のセットを、集積回路の相互接続部を介して複数のプロセッサの少なくともいくつかに発信させることと、複数のプロセッサの少なくともいくつかにおいて、受信された実行可能ブート命令のセットを実行して、集積回路の外部にあるメモリに対して、実行可能アプリケーション命令のセットをフェッチするための読み取り要求を発行させることと、実行可能アプリケーション命令のセットを実行して、アプリケーションデータを使用して演算を実行することと、を含む方法が提供される。
【0025】
第4の態様によれば、複数のプロセッサを含む集積回路のハードウェアモジュールのプロセッシング回路に方法を実行させるコンピュータ実行可能命令を含むコンピュータプログラムであって、本方法は、集積回路のハードウェアモジュールに実行可能ブート命令のセットを記憶することと、実行可能ブート命令のセットを、集積回路の相互接続部を介して複数のプロセッサの少なくともいくつかに発信させることと、複数のプロセッサの少なくともいくつかにおいて、受信された実行可能ブート命令のセットを実行して、集積回路の外部にあるメモリに対して、実行可能アプリケーション命令のセットをフェッチするための読み取り要求を発行させることと、実行可能アプリケーション命令のセットを実行して、アプリケーションデータを使用して演算を実施することとを含む、コンピュータプログラムが提供される。
【0026】
第5の態様によれば、第4の態様によるコンピュータプログラムを記憶する非一時的コンピュータ可読媒体が提供される。
【0027】
ここで、本発明をよりよく理解するために、また本発明がどのように実施され得るかを示すために添付の図面を例として参照する。
【図面の簡単な説明】
【0028】
図1】マルチタイルプロセッサの概略図である。
図2】マルチタイルプロセッサ内の演算フェーズ及び交換フェーズを示す概略図である。
図3】バルク同期並列システムにおけるデータの交換を示す。
図4】タイルからデータパケットを外部チップに送信するための構成を示す。
図5A】一実施形態によるチップのタイルへのセカンダリブートローダコードの配信を示す。
図5B】更なる実施形態によるチップのタイルへのセカンダリブートローダコードの配信を示す。
図6】プロセッサメモリにおけるデータのレイアウトの一例を示す。
図7】同期要求及び確認応答の伝播を示す。
図8】タイルによる外部メモリからのアプリケーションデータの読み取りを示す。
図9】タイルによるアプリケーションデータのチェックポインティングを示す。
図10】例示的なプロセッサの概略ブロック図である。
【発明を実施するための形態】
【0029】
本出願の実施形態は、プロセッシングユニットのプロセッサにアプリケーション命令を安全に配信するための新しい装置及び方法に関する。プロセッシングユニットは、集積回路の一部として形成され、その独自の実行ユニットと、アプリケーションデータ及び実行可能アプリケーション命令を記憶するためのストレージとをそれぞれ有する複数のプロセッサ(タイルと呼ぶ)を含む。集積回路は、タイルの少なくともいくつかにブートローダ命令のセット(本明細書ではセカンダリブートローダと呼ぶ)を配信するように構成されるハードウェアモジュール(本明細書ではオートローダと呼ぶ)を含む。タイルのそれぞれは、したがって、受信されたセカンダリブートローダの命令を実行し、それにより、各タイルは、集積回路の外部にあるメモリからアプリケーション命令を読み取るための読み取り要求を発行する。各タイルは、その後、アプリケーションを実行するために、受信されたアプリケーション命令を使用してアプリケーションデータに対して演算を実行する。アプリケーションデータは、セカンダリブートローダの実行によってロードされ得るか、又はアプリケーション命令自体の実行によってロードされ得る変数を含む。
【0030】
セカンダリブートローダ命令と、セカンダリブートローダ命令をタイルに転送するようにオートローダのプロセッシング回路を設定するために使用されるソフトウェアとの両方とも信用される。これにより、これらの両方は、セキュリティポリシーを実行するために、この場合、悪意のあるコードがタイルにロードされるのを阻止することを実行するために信頼され得ることを意味する。ロードされるアプリケーション命令を提供するシステム(説明される実施形態ではホストである)は、信用されておらず、信用されたセカンダリブートローダを使用することなしには、タイルに正しいアプリケーション命令を提供するために信頼することができない。
【0031】
本出願の実施形態は、本発明者らによる先の米国特許出願公開第15/886315号明細書に記載されたインテリジェンスプロセッシングユニット(IPU)を使用して実施され得、この米国特許出願の内容は、参照により組み込まれる。これらのIPUのそれぞれが単一の集積回路上に形成される。しかしながら、本発明は、IPUに限定されるものではなく、他のタイプのプロセッシングユニットで実施され得る。
【0032】
例示的なプロセッシングユニット2が図1に更に示され、図1は、マルチタイルプロセッシングユニット2の一例を示す。プロセッシングユニット2は、複数のプロセッサタイル4のアレイ6と、タイル4間を接続する相互接続部34とを含む。プロセッシングユニット2は、同じICパッケージにパッケージ化された複数のダイの1つとして単独で実施され得る。相互接続部34は、本明細書では、タイル4がデータを交換できるようにするためのものであるため、「交換ファブリック」34とも呼ばれ得る。各タイル4は、実行ユニット及びメモリのそれぞれのインスタンスを含む。例えば、例示として、プロセッシングユニット2は、数百のオーダー又は更に千を超えるタイル4を含み得る。完全を期するため、本明細書で言及される「アレイ」は、必ずしも特定の次元数又は物理的なレイアウトのタイル4を意味するとは限らないことにも留意されたい。
【0033】
実施形態では、各プロセッシングユニット2は、プロセッシングユニット2を1つ又は複数の他のプロセッシングユニット(例えば、同じプロセッシングユニット2の1つ又は複数の他のインスタンス)に接続できるようにする1つ又は複数の外部リンク8も含む。これらの外部リンク8は、プロセッシングユニット2をホストシステムに接続するための1つ又は複数のプロセッサ-ホスト間リンク並びに/或いは同じICパッケージ若しくはカード上又は異なるカード上のプロセッシングユニット2の1つ又は複数の他のインスタンスと一緒に接続するための1つ又は複数のプロセッサ間リンクのいずれか1つ又は複数を含み得る。プロセッシングユニット2の複数のインスタンスは、プロセッシングユニット間リンクによってカードに一緒に接続され得る。プロセッシングユニット2は、プロセッシングユニット2によって処理されるアプリケーションデータの形態において、プロセッシングユニット2に接続された外部メモリからのワークを受信する。
【0034】
相互接続部34は、アレイ6内の異なるタイル4が互いに通信することを可能にするように構成される。しかしながら、同じタイル4上のスレッド間に依存性が潜在的に存在するのと同様に、アレイ6内の異なるタイル4上で稼働するプログラムの部分間の依存性も存在し得る。したがって、依存するデータよりも先に実行中のあるタイル4上のコードが、別のタイル4上の別のコードによって利用可能になることを阻止する技法が必要とされる。
【0035】
プロセッシングユニット2上のタイル4間の通信は、時間決定論的に行われる。しかしながら、他の形態のタイル間交換も可能である。アレイ6内の異なるタイル4上で稼働するプログラムの部分間に依存性が存在し得る。すなわち、あるタイル4上の処理データは、別のタイル4からの結果に依存し得る(例えば、別のタイルに左右される結果を提供し得る)。したがって、依存するデータよりも先に実行中のあるタイル4上のコードが、別のタイル4上の別のコードによって利用可能になることを阻止する技法が必要とされる。
【0036】
AI及びデータサイエンスの並列プログラミングモデルは、通常、演算、バリア及び交換の3つのフェーズの反復実行モデルをたどる。ここで示唆されているのは、プロセッサへの及びプロセッサからのデータ転送が、通常、プロセッサ間及び各プロセッサと外部ストレージとの間のデータ一貫性を提供するためにバリアに依存することである。一般に使用されるデータ一貫性モデルは、バルク同期並列(BSP)、ステイル同期並列(SSP)及び非同期である。本明細書で説明される実施形態は、BSPモデルを使用するが、代替として他の同期モデルを利用できることが明らかであろう。
【0037】
図2及び図3を参照すると、図2及び図3は、BSP交換スキームの実装形態を示し、各タイル4は、交互サイクルで演算フェーズ33と交換フェーズ32とを行い、演算フェーズ33と交換フェーズ32とは、タイル間でバリア同期30によって相互に分離される。図2及び図3に示す場合、バリア同期は、各演算フェーズ33と、それに続く交換フェーズ32との間に配置される。演算フェーズ33では、各タイル4は、タイル上でローカルに1つ又は複数の演算タスクを行うが、他のいかなるタイル4もこれらの演算の結果を通信しない。交換フェーズ32では、各タイル4は、先行する演算フェーズからの演算の1つ又は複数の結果を1つ若しくは複数の他のタイルに及び/又は1つ若しくは複数の他のタイルから交換することができるが、そのタスクが依存性を有するデータを他のタイル4から受信するまで新しい演算を実施しない。それは、先行する演算フェーズにおいて演算されたもの以外のデータを他のタイルに送信することもしない。交換フェーズ32において、内部制御関連動作などの他の動作が実行され得ることは、排除されない。タイルグループの外部の通信は、BSPメカニズムを任意に利用できるが、代替として、BSPを利用せずに、それ自体の他の何らかの同期メカニズムを代わりに使用することができる。
【0038】
BSPの原理によれば、バリア同期30は、演算フェーズ33から交換フェーズ32に移行する接合点若しくは交換フェーズ32から演算フェーズ33に移行する接合点又はそれらの両方に配置される。すなわち、(a)グループのいずれかのタイルが次の交換フェーズ32に進めるようになる前に、すべてのタイル4がそれらのそれぞれの演算フェーズ33を完了する必要があるか、(b)グループのいずれかのタイルが次の演算フェーズ33に進めるようになる前に、グループのすべてのタイル4がそれらのそれぞれの交換フェーズ32を完了する必要があるか、又は(c)これらの条件の両方が実施されるかのいずれかである。3つのすべての変形形態では、フェーズを交互に行うのは、個々のタイルであり、同期するのは、アセンブリ全体である。次いで、交換フェーズと演算フェーズとのシーケンスは、複数回の反復にわたって繰り返され得る。BSPの用語では、交換フェーズ及び演算フェーズの各反復は、「スーパーステップ」と呼ばれる場合がある(ただし、文献上、この用語が常に一貫して使用されるとは限らないことに留意されたい。すなわち、個々の交換フェーズ及び演算フェーズのそれぞれが個別にスーパーステップと呼ばれる場合があるのに対して、本明細書で採用される用語のように、交換フェーズ及び演算フェーズが合わせてスーパーステップと呼ばれる場合もある)。
【0039】
また、同じプロセッシングユニット2又は異なるプロセッシングユニット上のタイル4の複数の異なる独立したグループは、互いに非同期的に動作する別個のBSPグループを形成でき、演算、同期及び交換のBSPサイクルは、所定の各グループ内でのみ課されるが、各グループは、他のグループとは独立にそれを行うことも排除されないことに留意されたい。すなわち、マルチタイルアレイ6は、それぞれが他のそのようなグループとは独立且つ非同期的に動作する複数の内部同期するグループを含み得る(後に詳述する)。いくつかの実施形態では、後に詳述するように、同期及び交換の階層的分類がある。
【0040】
図3は、(a)演算フェーズ33から交換フェーズ32へのバリア同期(上記を参照されたい)が課される場合における、アレイ6内のタイルのいくつか又はすべてのグループ4i、4ii、4iii間で実装されるようなBSP原理を示す。この構成では、いくつかの他のタイルが依然として交換を行っている間、いくつかのタイル4が演算33を開始できることに留意されたい。
【0041】
プロセッシングユニット2のタイル4間の通信は、時間決定論的に行われ、データパケットは、ヘッダなしで送信される。これについては、本発明者らによる先の出願である米国特許出願公開第15/886315号明細書で説明されている。
【0042】
図4は、タイルから、プロセッシングユニット2の外部にある送信先にデータパケットを送信するための例示的なメカニズムを示す。このメカニズムは、非時間決定論的なメカニズムである。メカニズムは、外部の相互接続部72における専用ハードウェアロジックで実装される。データは、パケットの形態で外部の相互接続部72を介して送信される。内部の相互接続部34を介して送信されるパケットと異なり、これらのパケットは、ヘッダを有する。これは、送信の順序が変更され得ることから、パケットヘッダに送信先アドレスが存在する必要があるためである。外部の相互接続部72は、データパケットのヘッダに応じて異なるプロセッサ間でデータパケットを静的にルーティングするためのルーティングテーブルを含む。
【0043】
物理層では、相互接続メカニズムは、損失を有するが、トランザクション層では、リンク層のアーキテクチャに起因して、メカニズムは、損失を有さない。すなわち、パケットの受信が確認応答されない場合、それは、相互接続部72のハードウェアによって自動的に再送信される。しかしながら、損失及びデータリンク層での再送信の可能性は、外部の相互接続部72を介するデータパケットの伝達が時間決定論的ではないことを意味する。更に、所与の交換のすべてのパケットは、一緒に到着する場合も、時間差がある場合もあり、またいかなる順序でもあり得るため、外部の相互接続部は、フロー制御及びキューイングを必要とする。更に、相互接続部は、ビットロックを維持するために十分なデータ信号遷移を有する受信データストリームからクロックを推論するために、クロックデータリカバリ(CDR)技術を使用することができる。この推論されるクロックは、送信側のクロックに知られていない位相関係のものであり、したがって非決定論的であることの更なる根拠を表す。
【0044】
図示のように、外部の相互接続部72は、外部の交換ブロック(XB)78を含む。コンパイラは、外部の交換要求(XREQ)を交換ブロック78に送信する(動作S1)ためにタイル4の1つを指名する。XREQは、1つ又は複数の制御パケットを含むメッセージであり、送信するためのデータパケット(コンテンツ)をいずれのタイル4が有するかを示す。これは、図4においてチェックマーク及びバツ印によって概略的に示されている。例示的なシナリオとして、チェックマークが付けられたものは、外部に送信するデータパケットを有するものであり、バツ印が付けられたものは、外部に送信するデータパケットを有さないものである。動作S2では、交換ブロック78は、交換オン(XON)制御パケットを、外部に送信するデータを有する最初のタイル4に送信する。これにより、最初のタイルは、外部の相互接続部72を介して関連送信先へのそのパケットの送信を開始する(動作S3)。外部の相互接続部で最初のタイルから受信されたデータパケットは、外部の相互接続部72内のルーティングテーブルを使用して送信先に静的にルーティングされる。XB78が相互接続部にパケットを送信し続けることができない場合には常に(例えば、相互接続部における以前のパケット損失及び再送信又は他の多くのXB及びタイルによる外部の相互接続部の過度のサブスクリプションに起因して)、XB78キューがオーバフローする前に、XB78は、交換オフ(XOFF)をそのタイル4に送信する。輻輳が解消され、XB78が再びそのキューの十分な空間を得た時点で、XB78は、XONをタイル4に送信し、そのコンテンツの送信の継続を可能にする。このタイル4がその最後のデータパケットを送信すると、動作S4において、交換ブロック78は、交換オフ(XOFF)制御パケットをこのタイル4に送信し、次いで動作S5において、別のXONを、送信するためのデータパケットを有する次のタイル4に送信するなどである。XON及びXOFFのシグナリングは、外部の交換ブロック78の形態の専用ハードウェアロジックにおいて、ハードウェアメカニズムとして実装される。
【0045】
図4では、単一の交換ブロック78のみが示されているが、複数の異なる交換ブロックが存在し、交換ブロックのそれぞれがプロセッシングユニット2のタイル4のサブセットにサービスし得る。一実装態様では、例えば、プロセッシングユニット2が形成される集積回路は、8つの交換ブロックを含み、交換ブロックのそれぞれは、プロセッシングユニット内のタイル4の8分の1に対して、図4に示す機能を行う。
【0046】
プロセッサタイル4のそれぞれは、プロセッシング回路とメモリとを含む。いくつかの例示的な実施形態では、プロセッシング回路は、マルチスレッドプロセッサ10である。図10は、本開示の実施形態によるプロセッサタイル4の一例を示す。プロセッサタイル4は、バレルスレッドプロセッサの形態のマルチスレッドプロセッサ10と、ローカルメモリ11(すなわち、マルチタイルアレイの場合には同じタイル上又は単一プロセッサチップの場合には同じチップ上)とを含む。バレルスレッドプロセッサ10は、パイプラインの実行時間が、インターリーブされた時間スロットの繰り返しシーケンス(そのそれぞれが所定のスレッドによって占有され得る)に分割されるタイプのマルチスレッドプロセッサ10である。これは、直後に詳述する。メモリ11は、命令メモリ12と、データメモリ22(異なるアドレス可能メモリユニット又は同じアドレス可能メモリユニットの異なる領域において実装され得る)とを含む。命令メモリ12は、プロセッシングユニット10によって実行される機械語を記憶し、データメモリ22は、実行コードによって処理されるデータと、実行コードによって(例えば、そのような処理の結果として)出力されたデータとの両方を記憶する。
【0047】
メモリ12は、プログラムの様々な複数の異なるスレッドを記憶し、各スレッドは、特定の1つ又は複数のタスクを行うための命令の対応するシーケンスを含む。本明細書で言及される命令は、単一のオペコード及びゼロ以上のオペランドから構成される機械語命令(すなわちプロセッサの命令セットの基本命令の1つのインスタンス)を意味することに留意されたい。
【0048】
プロセッサ10内では、命令メモリ12からのスレッドの複数の異なるスレッドは、単一の実行パイプライン13を通してインターリーブされ得る(ただし、典型的には、命令メモリに記憶された全スレッドのサブセットのみが全プログラムの任意の所与のポイントにおいてインターリーブされ得る)。マルチスレッドプロセッサ10は、それぞれが並列に実行される複数のスレッドの異なるそれぞれのスレッドの状態(コンテキスト)を表すように構成された複数のコンテキストレジスタファイル26と、並列に実行されるスレッドに共通の共有実行パイプライン13と、インターリーブ方式、好ましくはラウンドロビン方式で共有パイプラインを通して実行するための並列スレッドをスケジューリングするためのスケジューラ24とを含む。プロセッサ10は、複数のスレッドに共通の共有命令メモリ12と、これも複数のスレッドに共通の共有データメモリ22とに接続される。
【0049】
実行パイプライン13は、フェッチステージ14と、復号ステージ16と、命令セットアーキテクチャによって定義されるような算術及び論理演算、アドレス演算、ロード及びストア操作並びに他の動作を実行することができる実行ユニットを含む実行ステージ18とを含む。コンテキストレジスタファイル26のそれぞれは、それぞれのスレッドのプログラム状態を表すそれぞれのレジスタのセットを含む。
【0050】
図5Aを参照すると、図5Aは、集積回路51を示し、集積回路51では、セカンダリブートローダコードが集積回路51の複数のタイル4に配信される。集積回路51は、上で論じたプロセッシングユニット2を含む。集積回路51は、本明細書ではオートローダ52と呼ばれるハードウェアモジュール52も含む。オートローダ52は、集積回路51のためのプライマリブートローダとなるように定義される。オートローダ52は、複数のタイル4にセカンダリブートローダを提供し、タイルメモリの残りの領域を消去する機能を行う。
【0051】
オートローダ52は、外部ストレージからアプリケーション命令をフェッチするためにタイル4によって実行可能な1つ又は複数のセットの命令を記憶するメモリ53を含む。1つ又は複数のセットのブート命令のそれぞれは、セカンダリブートローダ又はセカンダリブートローダイメージと呼ばれる。同じセカンダリブートローダが複数の異なるタイル4にロードされる。いくつかの場合、プロセッシングユニット2内のすべてのタイル4に同じセカンダリブートローダがロードされ得る。他の場合、第1のセカンダリブートローダは、第1のセットのタイル4にロードされる一方、1つ又は複数の更なるブートローダは、プロセッシングユニット2内の他のタイル4にロードされ得る。いくつかの場合、いくつかのタイル4は、セカンダリブートローダを受信しない。セカンダリブートローダを受信しないタイル4は、外部メモリからアプリケーション命令をフェッチしない。
【0052】
セカンダリブートローダをタイル4の1つに送達するために、オートローダ52のプロセッシング回路54は、メモリ53からセカンダリブートローダをロードし、セカンダリブートローダを処理して、1つ又は複数のデータパケットを生成する。1つ又は複数のデータパケットは、1つ又は複数のパケットの1つ又は複数のペイロードにセカンダリブートローダコードを含む。1つ又は複数のデータパケットのそれぞれは、当該パケットのヘッダに、セカンダリブートローダの発信先である関連するタイル4の識別子を含む。ヘッダは、識別されたタイルのメモリにおけるセカンダリブートローダを書き込む位置を示す、タイルメモリにおけるアドレスも含む。プロセッシング回路54は、集積回路51の相互接続部を介して、関連する1つ又は複数のデータパケットを交換ブロック78に発信する。交換ブロック78は、プロセッシングユニット2の相互接続部を介して関連するタイル4に送信するために、適切なフォーマットにパケットを変換する。交換ブロック78は、1つ又は複数のデータパケットを、1つ又は複数のヘッダのアドレスで示されるタイル4に発信する。1つ又は複数のデータパケットを受信すると、タイル4のプロセッシング回路は、データパケットを処理してセカンダリブートローダコードを抽出し、セカンダリブートローダコードをメモリに記憶する。
【0053】
オートローダ52は、集積回路51内のタイル4の異なるサブセットにセカンダリブートローダコードを書き込むように構成可能である。例えば、タイル4は、32個の異なるサブセットに分割され、オートローダ52は、コンフィギュレーションレジスタにおいて、それがセカンダリブートローダを提供するサブセットをプログラムされ得る。タイルのサブセットにセカンダリブートローダを発信した場合、オートローダ52は、このサブセットにおける各タイル4に対して、サブセット内の各タイル4のメモリにおけるロケーションへのセカンダリブートローダの第1の部分の書き込みを発行し得る。次いで、オートローダ52は、今度はインクリメントされたタイルアドレスに書き込むことにより、タイルのサブセットにわたって再びループする。オートローダ52は、このサブセットにおける各タイル4のメモリにおける次の空きロケーションにセカンダリブートローダの第2の部分を書き込む。オートローダ52は、ブートローダがサブセットにおけるすべてのタイル4に書き込まれるまで、このように継続する。
【0054】
図6を参照すると、図6は、メモリ11内にフェッチされたデータ及び命令のタイルメモリ11におけるレイアウトの一例を示す。メモリ11は、物理的に連続したメモリ空間である必要はない。メモリ11の第1の部分は、予約領域である。セカンダリブートローダは、予約領域の一部を占有し、予約領域の残りの部分は、データ又はコードを含まず、すなわちブランクである。実施形態では、予約領域は、16KBであり、セカンダリブートローダは、予約領域の約1KBを占有する。予約領域以外では、メモリ11は、外部メモリから取得されたアプリケーション命令及びデータを記憶するために使用され得るメモリ空間を含む。
【0055】
タイル4へのセカンダリブートローダの書き込みに続いて、オートローダ52は、残りのタイルメモリ11を消去するように構成される。このようにしてタイルメモリ11をリセットすることにより、リセット又はパワーサイクル後も残存している、プロセッシングユニット2の以前のテナントに属するデータが削除される。オートローダ52は、セカンダリブートローダコードが占有する空間以外のすべてのタイルメモリの空間に書き込むための書き込みパケットを発信することにより、この消去を行う。デこの発信されるパケットは、オートローダ52によってセカンダリブートローダをタイルメモリに書き込むために発信されるパケットと同じタイプのパケットであるが、タイルメモリ11に書き込むセカンダリブートローダのコードを含む代わりに、パケットは、パケットヘッダにおいて示されるタイルメモリ11の位置に書き込むゼロのシーケンスを含む。したがって、オートローダ52は、セカンダリブートローダコードが書き込まれる複数のタイル4のそれぞれについて、タイルメモリ11におけるセカンダリブートローダを含まない他の位置にゼロを書き込むための一連のパケットを発信する。
【0056】
上述のように、セカンダリブートローダは、プロセッシングユニット2内のすべてのタイル4に書き込まれるとは限らない。したがって、セカンダリブートローダが書き込まれないタイル4について、オートローダ52は、タイルメモリ11のすべてにゼロを書き込む。メモリ11全体がブランクであるこれらのタイル4は、アプリケーションの処理中に使用されない。
【0057】
オートローダ52が行うタイルメモリ11の消去により、セカンダリブートローダを受信したタイル4のそれぞれは、そのセカンダリブートローダの実行を開始する。
【0058】
図5Aに示す実施形態では、オートローダ52は、集積回路51の外部にあるデバイス55から1つ又は複数のセカンダリブートローダを受信する。本明細書では、デバイス55は、インテリジェント暗号ユニット(ICU)と呼ばれる。ICU55は、フラッシュメモリなどの不揮発性メモリを含むか、又は不揮発性メモリに関連付けられる。一方、オートローダメモリ53は、SRAMなどの揮発性メモリである。したがって、ICU55に関連付けられた不揮発性メモリは、集積回路51のパワーダウン及び再起動後に1つ又は複数のセカンダリブートローダがタイル4で利用可能となるように、1つ又は複数のセカンダリブートローダを記憶する。集積回路51が再起動すると、ICU55は、1つ又は複数のセカンダリブートローダを集積回路51のオートローダ52に提供する。ICU55は、1つ又は複数のセカンダリブートローダを集積回路51に提供するために、インターフェースを介して連続的に書き込みを行う。ICU55は、集積回路51のJTAGインターフェースを介して1つ又は複数のセカンダリブートローダをオートローダ52に提供する。次いで、1つ又は複数のセカンダリブートローダは、タイル4に提供される前に、オートローダ52の揮発性メモリ53に記憶される。
【0059】
ICU55がメモリ53にセカンダリブートローダコードの書き込みを提供するインターフェースは、オートローダ52がタイル4のメモリに書き込むことができるオンチップ相互接続部と比較して高レイテンシである。したがって、ICU55自体がタイル4のそれぞれにブートローダコードを個別に書き込むと遅くなる。ICU55がブートローダコードをオートローダ52に書き込み、オートローダが高速オンチップ相互接続部を介してそのブートローダコードを複数の異なるタイル4に提供することにより、かなりの効率向上が実現される。
【0060】
図5Bを参照すると、図5Bは、集積回路の代替的な例51aを示す。この場合、集積回路51aは、CCU56を含む。CCU56は、オートローダとして機能し、メモリ53aとプロセッシング回路54aとを含む。メモリ53aは、メモリ53に関して上で論じたのと同じ機能を行い、すなわち、メモリ53aは、複数のタイル4に配信されるセカンダリブートローダを記憶する。プロセッシング回路54aは、セカンダリブートローダを複数のタイル4に配信させる命令を実行し、タイルメモリを消去することを含む、プロセッシング回路54について上で論じたのと同じ機能を行う。プロセッシング回路54aは、信頼されたソフトウェアにより、セカンダリブートローダをタイル4のメモリに書き込むための書き込み要求を発行するように構成される。メモリ53aは、集積回路51aがパワーダウンした場合、セカンダリブートローダコードがメモリ53aから失われないように、セカンダリブートローダを記憶するように構成された不揮発性メモリ53aを含む。したがって、本実施形態では、ICU55などの外部デバイスがセカンダリブートローダコードを記憶し、これを集積回路51aに提供することは必要でない。
【0061】
図5Bに示す他の要素は、図5Aに示す対応する要素と同じように動作する。
【0062】
図7及び図8を参照すると、図7及び図8は、セカンダリブートローダが複数のタイル4に書き込まれると、アプリケーション命令が外部メモリ70からどのように取得されるかを示す。
【0063】
外部メモリ70は、この例では、ホストシステム71の一部であるとして示されている。しかしながら、他の例では、システム71は、集積回路51をホストシステムにインターフェースさせるゲートウェイであり得る。システム71は、外部メモリ70を含む他のタイプのシステムであり得る。
【0064】
システム71は、メモリ70からアプリケーション命令をロードするための少なくとも1つのプロセッサ711を含む。少なくとも1つのプロセッサ711は、コンピュータ可読命令を実行するように構成されたプロセッサであり得る。
【0065】
セカンダリブートローダを含むタイル4は、それぞれが別個の交換フェーズにおいてそれらのそれぞれのアプリケーション命令を取得する異なる同期グループに分割される。集積回路51におけるすべてのタイル4に対して、4つの異なる同期グループが存在し得る。タイル4が自らの属する同期グループを識別し得る方法は、様々に存在する。いくつかの場合、異なるセカンダリブートローダコードは、異なる同期グループに属するタイル4に発信され得る。他の場合、同じセカンダリブートローダコードは、異なる同期グループに属するタイルに発信され得るが、セカンダリブートローダコードは、各タイル4において実行されると、タイル4のタイルIDを用いて、そのタイル4がいずれの同期グループに属しているかを判定する。
【0066】
タイル4の第1の同期グループのタイル4は、それぞれ、交換ブロック78に対する同期要求73を発行する。各同期要求73は、要求の発行元であるタイル4が属する同期グループの指示を含むか又はその前にある。交換ブロック78は、その同期グループに対して予期される同期要求73の数の指示を記憶する。交換ブロック78は、同期要求73を受信し、いつその同期グループに対する予期される同期要求73の数を受信したかを判定する。予期される同期要求73の数を受信すると、交換ブロックは、これらの同期要求を同期要求74に集約し、インターフェース75を介して送信する。インターフェース75は、集積回路51の相互接続部を介して送信するためのパケットの形態の受信された同期要求を、システム71に送信するためのPCIeパケットに変換する。
【0067】
同期要求74を受信すると、システム71は、同期要求73を発行した同期グループに属するタイル4に送達するために、アプリケーション命令をメモリ70にロードする。同期要求74は、自らが関連する同期グループの指示を含む。システム71は、同期グループの指示に応じて、その同期グループのタイル4が必要とするアプリケーション命令をメモリ70にロードする。命令は、ストレージ710からメモリ70にロードされる。ストレージ710は、データ提供システム71の一部であり得るか、又はシステム71とは別個のものであり得る。したがって、メモリ70は、関連するタイル4によってフェッチされる前に命令が予めロードされるデータ転送メモリであると理解できる。
【0068】
メモリ70は、複数の異なるアドレス空間又はバッファに配置され、そこからデータがタイルによって読み取られる。これらのアドレス空間のそれぞれは、異なるデータストリームに対応し、これがタイルによって読み取られる。アドレス空間は、連続したメモリ空間である必要はなく、仮想バッファであり得る。
【0069】
タイル4に転送するためのアプリケーション命令のメモリ70へのロードが完了すると、システム71は、同期確認応答76を発行し、これが交換ブロック78に返される。交換ブロック78は、同期確認応答76を受信することに応じて、同期グループにおけるすべてのタイル4に対して同期確認応答79を発信する。
【0070】
図8を参照すると、図8は、プロセッシングユニット2のタイル4に同期確認応答79を返した後に行われるステップを示す。同期確認応答を受信した後、各タイル4は、読み取り要求パケットを送信するために、交換ブロック78からのコントロールを受信するのを待つ。これは、図4に関連して上で述べた説明に従って行われる。同期グループにおけるタイル4のそれぞれは、読み取り要求81を交換ブロックの78に発信する。図示を簡単にするために、図8では、1つのタイル4から発信される1つの読み取り要求81のみが示されている。交換ブロック78は、読み取り要求81をインターフェース75に渡す。読み取り要求81は、インターフェース75によってPCIe読み取り要求に変換される。インターフェース75は、読み取り要求81をシステム71に渡す。各読み取り要求81は、メモリ70におけるアドレスのうち、目標としているアドレスの指示を含む。システム71のプロセッサは、読み取り要求81に応じて、読み取り要求81で指示された位置においてメモリ70から読み取られたデータを含む1つ又は複数のデータパケット82を生成する。これらの1つ又は複数の生成されたデータパケット82は、読み取りコンプリーションと呼ばれる。1つ又は複数の読み取りコンプリーション82は、システム71によって集積回路51に返される。1つ又は複数の読み取りコンプリーション82は、交換ブロック78において受信され、交換ブロック78は、読み取りコンプリーションを読み取り要求81の発信元のタイル4に提供する。次いで、コントロールは、同期グループにおける次のタイル4に渡され、次のタイル4は、メモリ70における特定のロケーションから読み取るためのその読み取り要求を発行し、それに応じて1つ又は複数のコンプリーションを受信する。
【0071】
同期グループ内の各タイル4がメモリ70からそのアプリケーション命令を読み取った後、次いで別の同期グループのタイル4が同期要求を発行し、この同期要求は、交換ブロックによって集約され、システム71に提供される。システム71は、この次の同期要求の受信に応じて、対応する同期グループのタイル4に送達するために、関連するアプリケーション命令をメモリ70にロードする。次いで、システム71は、集積回路51に同期確認応答を返し、これによりメモリ70から読み取るための読み取り要求を同期グループのタイル4に発行させる。
【0072】
同期要求/確認応答及びメモリ70からの読み取りのプロセスは、セカンダリブートローダを有するタイル4のすべてがメモリ70からそれらのアプリケーション命令をロードするまで継続される。
【0073】
メモリ70からアプリケーション命令をロードするタイル4のそれぞれは、そのタイル4におけるストレージ(メモリ11と異なる)に記憶されているそのタイル4のタイル識別子(タイルID)を用いて、読み取られるアドレスを決定する。複数のタイル4は、同じセカンダリブートローダを受信するため、セカンダリブートローダは、タイルIDに応じたメモリ70における位置から命令をロードするように構成される。セカンダリブートローダは、実行されるタイルのIDに応じて、メモリ70から読み取るアドレスを演算する。
【0074】
上述のように、アプリケーション命令は、タイルによって実行されて、アプリケーションデータ、例えば変数を使用して演算を実行する。このアプリケーションデータは、アプリケーション命令と同時に且つ同じ方法において、すなわちホスト71のメモリ70からデータをロードするための読み取り要求を発行するセカンダリブートローダ命令を実行することにより、タイル4にロードされ得る。追加的又は代替的に、アプリケーションデータは、ホスト71のメモリ70からアプリケーションデータをロードするための読み取り要求を発行するために、アプリケーション命令を実行するタイル4自体によってロードされ得る。特に、セカンダリブートローダ命令は、アプリケーションデータのインバリアント部分、例えば機械学習モデルのハイパーパラメータをロードするための読み取り要求を発行するために使用され得る一方、アプリケーション命令は、データのバリアント部分、例えば機械学習モデルの訓練データをロードするための読み取り要求を発行するために使用され得る。
【0075】
アプリケーションの実行中、プロセッシングユニット2上で実行中のアプリケーションが故障し、ある時点から再開する必要がある場合、タイル4に読み戻すことができる特定のデータをチェックポイントすることが望ましい場合がある。セカンダリブートローダは、チェックポイントデータをロードするために使用され得る。
【0076】
アプリケーションがプロセッシングユニット2で実行される場合、タイルメモリ11において保持されるアプリケーションデータの一部が変更される。タイルメモリ11において保持されているアプリケーションデータは、バリアントデータとインバリアントデータとに分割される。バリアントデータは、ニューラルネットワークの重みなど、アプリケーションの実行時に変更される変数を含む。インバリアントデータは、ニューラルネットワークのいずれのノードが連結されているかを定義するデータなど、アプリケーションの実行中に変化しないデータを含む。
【0077】
アプリケーションのチェックポイントを行うために、タイルのグループは、システム51にデータを書き込むための書き込みを発行する前に、図7に示すのと同様の方法で同期要求を発行する。プロセッシングユニット2のタイル4は、実行中に生成したバリアントデータを含む書き込みを発行する。
【0078】
図9を参照すると、図9は、集積回路51のタイル4によるシステム71がアクセス可能なストレージ70へのチェックポイントデータの書き込みを示す。書き込み91は、タイル4によって発行される1つ又は複数のデータパケット91を含む。1つ又は複数のデータパケット91は、ストレージ710に書き込まれるチェックポイントデータを含む。書き込みは、システム71に提供される。システム71の少なくとも1つのプロセッサ711は、チェックポイントデータをストレージ710に書き込ませる。チェックポイントデータは、受信された書き込みの送信元のタイル4に関連付けられていると識別される。集積回路51の他のタイル4も同様にそのバリアントデータの書き込みを提供し、それは、ストレージ710に書き込まれる。
【0079】
後の時点において、集積回路51のタイル4が、チェックポイントされたデータをロードする必要があるとき(例えば、アプリケーションの実行に失敗したため)、セカンダリブートローダは、図5A図5Bに関連して上で論じたように、オートローダによってこれらのタイル4にロードされる。タイルメモリの残りの領域は、論じたように消去される。次いで、タイル4は、同期要求を発行し、これが集約され、システム71に提供される。同期要求の受信に応じて、システム71は、アプリケーションデータをストレージ710からメモリ70にロードさせる。アプリケーションの初期起動時と異なり、この場合のストレージ710からのアプリケーションデータのロードは、タイル4によって書き込まれたチェックポイントデータのロードを含む。メモリ70にロードされたアプリケーションデータは、タイル4によってストレージ710に書き込まれたバリアントデータであるチェックポイントデータと、追加的に、先にロードされたインバリアントデータとの両方を含む。システム71は、メモリ70にロードされた最初のアプリケーションデータに用いられたレイアウトと同じレイアウトにおいて、アプリケーションデータをメモリ70に配置させる。したがって、初期のアプリケーションデータをロードするためにタイル4によって使用された同じセカンダリブートローダは、チェックポイントデータを含むアプリケーションデータをロードするためにも使用され得る。いくつかの場合、必要に応じて、チェックポイントされたアプリケーションデータのロードに使用されるセカンダリブートローダは、アプリケーション命令を初期にロードするのに使用されるセカンダリブートローダと異なり得る。
【0080】
システム71が、チェックポイントデータを含むアプリケーションデータをメモリ70にロードすると、システム71は、確認応答を送信し、これは、同期要求を発行したタイル4に送信される。次いで、タイル4は、メモリ70に対して、メモリ70からチェックポイントデータを含むアプリケーションデータを読み取るための読み取り要求を発行する。チェックポイントデータを含むアプリケーションデータのこの読み取りは、図8に関連して上で論じたようなアプリケーション命令の初回読み取りと同じメカニズムを用いて行われる。タイル4が、チェックポイントデータを含むデータを読み取ると、タイル4は、チェックポイントを取った時点からアプリケーションの実行を再び開始する。
【0081】
上記の実施形態は、単なる例として説明されたに過ぎないことを理解されたい。
図1
図2
図3
図4
図5A
図5B
図6
図7
図8
図9
図10