(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-09-13
(54)【発明の名称】静止再構成可能データ・プロセッサ
(51)【国際特許分類】
G06F 15/173 20060101AFI20220906BHJP
G06F 9/38 20060101ALI20220906BHJP
【FI】
G06F15/173 683Z
G06F9/38 370A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022500801
(86)(22)【出願日】2020-07-03
(85)【翻訳文提出日】2022-02-28
(86)【国際出願番号】 US2020040832
(87)【国際公開番号】W WO2021007131
(87)【国際公開日】2021-01-14
(32)【優先日】2019-07-08
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】521220493
【氏名又は名称】サンバノヴァ システムズ, インク.
【氏名又は名称原語表記】SAMBANOVA SYSTEMS, INC.
【住所又は居所原語表記】Suite 103 2100 Geng Road Palo Alto, California 94303 United States of America
(74)【代理人】
【識別番号】100114476
【氏名又は名称】政木 良文
(72)【発明者】
【氏名】プラバカール, ラグー
(72)【発明者】
【氏名】シャア, マニッシュ ケイ.
(72)【発明者】
【氏名】ナタラジャ, プラモッド
(72)【発明者】
【氏名】ジャクソン, デイヴィッド ブライアン
(72)【発明者】
【氏名】レオン, キン ヒン
(72)【発明者】
【氏名】シヴァラマクリシュナン, ラム
(72)【発明者】
【氏名】ジャイラス, サムティ
(72)【発明者】
【氏名】グロースキー, グレゴリー フレデリック
【テーマコード(参考)】
5B013
5B045
【Fターム(参考)】
5B013DD01
5B045BB15
(57)【要約】
再構成可能データプロセッサは、データ処理動作のそれぞれの実行フラグメントを実施するために、アレイ内に構成可能ユニットの複数のセットを割り当てるように構成可能な構成可能ユニットのアレイを含む。静止ロジックは、アレイ内の構成可能ユニットに結合され、静止制御信号に応答して、それぞれの実行フラグメントの静止境界上でアレイ内の構成可能ユニットのセットを静止させ、対応する処理ユニットのセットが準備状態であるときに、それぞれの実行フラグメントに対して静止準備信号を転送するように構成可能である。アレイ静止コントローラは、静止制御信号をアレイ内の構成可能ユニットに分配し、静止ロジックからそれぞれの実行フラグメントに対する静止準備信号を受信する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
データ処理動作の実行フラグメントを実施するために、アレイ内に複数のメンバを有する処理ユニットのセットを割り当てるように構成可能な処理ユニットのアレイと、
前記アレイ内の処理ユニットに結合され、制御信号に応答して、前記アレイ内の前記データ処理ユニットのセットを、前記実行フラグメントの静止境界上で静止させるように構成可能な静止ロジックと、
を備える処理システム。
【請求項2】
前記処理ユニットのアレイが、前記データ処理動作のそれぞれの実行フラグメントを実施するために、前記アレイ内の前記処理ユニットのセットを含む複数の処理ユニットのセットを割り当てるように構成可能であり、
前記静止ロジックが、前記アレイ内の処理ユニットに静止制御信号を分配し、それぞれの前記処理ユニットのセットから静止準備信号を受け取る静止コントローラを含む請求項1に記載の処理システム。
【請求項3】
前記静止ロジックが、前記実行フラグメント内に複数の静止境界を規定し、前記複数の静止境界内の共通の静止境界上で、前記処理ユニットのセット内の前記処理ユニットを静止させるように構成可能である請求項1に記載の処理システム。
【請求項4】
前記静止ロジックが、前記処理ユニットのセットにおける前記処理ユニット間の前記実行フラグメントの進行の差異を追跡するためのスキュー・カウンタを含む請求項1に記載の処理システム。
【請求項5】
前記セット内の少なくとも1つの処理ユニットが、入力のプロデューサとして構成され、前記セット内の少なくとも1つの処理ユニットが、入力のコンシューマとして構成され、前記静止ロジックが、前記静止境界上で前記プロデューサを停止させるように構成可能である請求項1に記載の処理システム。
【請求項6】
前記実行フラグメントが複数の処理ループを含み、
ループ・カウンタを含み、
静止ロジックが前記ループ・カウンタに応答して前記静止境界を検出する請求項1に記載の処理システム。
【請求項7】
前記セット内の少なくとも1つの処理ユニットが、入力のプロデューサとして構成され、前記セット内の少なくとも1つの処理ユニットが、入力のコンシューマとして構成され、前記処理システムが、前記アレイ内の処理ユニットに結合された制御バリア・ネットワークを含み、
前記制御バリア・ネットワークが、
前記制御バリア・ネットワーク内に信号ルートを形成するように構成可能な制御バス、及び、
前記制御バス及び前記処理ユニットのアレイに接続された入力及び出力を有する複数のバリア・ロジック・ユニットとを備え、
前記複数のバリア・ロジック・ユニットは、
前記処理ユニットのセットに結合され、前記処理ユニットのセットにおいて静止境界を通知する入力のプロデューサからの信号を消費し、前記プロデューサからの信号に基づいてプロデューサ・バリア・トークンを生成するように構成可能なロジック回路と、
前記処理ユニットのセットに結合され、前記静止境界に対する前記処理ユニットのセットへの前記入力の利用を通知する入力のコンシューマからの信号を消費し、前記コンシューマからの信号に基づいてコンシューマ・バリア・トークンを生成するように構成可能なロジック回路と、
前記制御バスに接続するように構成可能であり、前記プロデューサと前記コンシューマとの間の前記実行フラグメントの進行の差異を追跡するために、前記プロデューサ・バリア・トークンと前記コンシューマ・バリア・トークンを受信するように構成可能なスキュー・カウンタを含む前記静止ロジックと、を含む請求項1に記載の処理システム。
【請求項8】
前記複数のバリア・ロジック・ユニット内のロジック・ユニットが、前記プロデューサ・バリア・トークンに応じて構成可能なイネーブル回路を含む請求項7に記載の処理システム。
【請求項9】
静止ロジックが、前記アレイ内の対応する処理ユニットに関連付けられた静止準備回路を含み、前記アレイ内の処理ユニット間でデイジー・チェーンで接続される請求項1に記載の処理システム。
【請求項10】
前記制御信号を前記静止ロジックに転送するロジックを含むアレイ静止コントローラを含み、
前記静止準備ロジックが、前記デイジー・チェーンの前のメンバからの前記静止準備信号が受信されると、前記静止準備信号を前記デイジー・チェーン上に転送する請求項9に記載の処理システム。
【請求項11】
前記静止準備回路が、構成可能な静止参加フラグと、前記静止参加フラグの状態に応じて前記静止準備ロジックをオーバーライドするロジックを含む請求項10に記載の処理システム。
【請求項12】
構成ファイルを使用して構成可能な構成可能ユニットのアレイであって、データ処理動作のそれぞれの実行フラグメントを実施するために、前記アレイ内に複数の構成可能ユニットのセットを割り当てるように構成可能な前記構成可能ユニットのアレイと、
前記アレイ内の構成可能ユニットに結合され、静止制御信号に応答して、前記アレイ内の前記構成可能ユニットのセットを、前記それぞれの実行フラグメントの静止境界上で静止させるように、且つ、対応する構成可能ユニットのセットの静止が準備状態であるときは、前記それぞれの実行フラグメントに対する静止準備信号を転送するように構成可能な静止ロジックと、
前記静止制御信号を前記アレイ内の構成可能ユニットに分配し、前記静止ロジックから前記それぞれの実行フラグメントに対する静止準備信号を受信するアレイ静止コントローラと、
を備える処理システム。
【請求項13】
前記静止ロジックが、前記アレイ内に前記構成可能ユニットのセット内の構成可能ユニットに関連付けられた構成可能静止参加フラグと、前記静止参加フラグの特定の状態に応じて前記関連付けられた構成可能ユニットに対して前記静止ロジックをオーバーライドするロジックを含む請求項12に記載の処理システム。
【請求項14】
前記静止ロジックが、前記それぞれの実行フラグメントに対して複数の静止境界を規定するように、前記それぞれの実行フラグメントに対する前記複数の静止境界内の共通の静止境界上で、前記複数の構成可能ユニットのセット内の所与の構成可能ユニットのセット内の前記構成可能ユニットを静止させるように構成可能である請求項12に記載の処理システム。
【請求項15】
前記複数のセット内の所与の構成可能ユニットのセットに対して、前記所与のセット内の少なくとも1つの構成可能ユニットが入力のプロデューサとして構成され、前記所与のセット内の少なくとも1つの構成可能ユニットが入力のコンシューマとして構成され、前記処理システムが、前記アレイ内の構成可能ユニットに結合された制御バリア・ネットワークを含み、
前記制御バリア・ネットワークが、
前記制御バリア・ネットワーク内に信号ルートを形成するように構成可能な制御バス、及び、
前記制御バス及び前記構成可能ユニットのアレイに接続された入力及び出力を有する複数のバリア・ロジック・ユニットとを備え、
前記複数のバリア・ロジック・ユニットが、
前記所与の構成可能ユニットのセットに結合され、前記所与の構成可能ユニットのセットにおいて静止境界を通知する入力のプロデューサからの信号を消費し、前記プロデューサからの信号に基づいてプロデューサ・バリア・トークンを生成するように構成可能なロジック回路と、
前記所与の構成可能ユニットのセットに結合され、前記静止境界に対する前記所与の構成可能ユニットのセットにおける前記入力の使用を通知する入力のコンシューマからの信号を消費し、前記コンシューマからの信号に基づいてコンシューマ・バリア・トークンを生成するように構成可能なロジック回路と、
前記制御バスに接続するように構成可能であり、前記プロデューサと前記コンシューマとの間の前記実行フラグメントの静止境界を越える進行の差異を追跡するために、前記プロデューサ・バリア・トークン、及び、コンシューマ・バリア・トークンを受信するように構成可能な前記所与のセットに対するスキュー・カウンタを含む前記静止ロジックと、
を含む請求項12に記載の処理システム。
【請求項16】
前記複数のバリア・ロジック・ユニット内のロジック・ユニットが、前記プロデューサ・バリア・トークンに応じて構成可能なイネーブル回路を含む請求項15に記載の処理システム。
【請求項17】
構成可能な処理ユニットのアレイを含む処理システムを動作させる方法であって、
前記アレイ内の処理ユニットのセットにおけるデータ処理動作の実行フラグメントの進行を監視すること、及び、
制御信号に応答して、前記実行フラグメントの静止境界上で前記アレイ内の前記データ処理ユニットのセットを静止させることを含む方法。
【請求項18】
前記データ処理動作のそれぞれの実行フラグメントの前記アレイ内の処理ユニットのセットを含む前記アレイ内の処理ユニットの複数セットにおける進行を監視すること、及び、
前記アレイ内の処理ユニットへ静止制御信号を分配すること、及び、前記処理ユニットの各セットから静止準備信号を受信することを含む請求項17に記載の方法。
【請求項19】
前記処理システムが、前記実行フラグメント内に複数の静止境界を規定するロジックを含み、
前記複数の静止境界の内、制御信号の後の共通の静止境界上で前記処理ユニットのセット内の前記処理ユニットを静止させることを含む請求項18に記載の方法。
【請求項20】
前記処理ユニットのセット内の前記処理ユニット間の静止境界を越える前記実行フラグメントの進行の差異を追跡する請求項17に記載の方法。
【請求項21】
前記実行フラグメントが複数の処理ループを含み、
前記複数の処理ループにおける処理ループのカウントに応答して、前記静止境界を検出することを含む請求項17に記載の方法。
【請求項22】
前記セット内の少なくとも1つの処理ユニットが、入力のプロデューサとして構成され、前記セット内の少なくとも1つの処理ユニットが、入力のコンシューマとして構成され、
前記プロデューサを前記静止境界で停止させること、前記コンシューマが前記静止境界の前に生成された前記入力を消費した後に、前記処理ユニットのセットに対して静止準備信号を生成することを含む請求項17に記載の方法。
【請求項23】
前記セット内の少なくとも1つの処理ユニットが、入力のプロデューサとして構成され、前記セット内の少なくとも1つの処理ユニットが、入力のコンシューマとして構成され、前記処理システムが、前記アレイ内の処理ユニットに結合された制御バリア・ネットワークを含み、
前記制御バリア・ネットワークが、
前記制御バリア・ネットワーク内に信号ルートを形成するように構成可能な制御バス、及び、
前記制御バス及び前記処理ユニットのアレイに接続された入力及び出力を有する複数のバリア・ロジック・ユニットとを備え、
前記複数のバリア・ロジック・ユニットが、
前記処理ユニットのセットに結合され、前記処理ユニットのセットにおいて静止境界を通知する入力のプロデューサからの信号を消費し、前記プロデューサからの信号に基づいてプロデューサ・バリア・トークンを生成するように構成可能なロジック回路を構成すること、
前記処理ユニットのセットに結合され、前記静止境界に対する前記処理ユニットのセットへの前記入力の利用を通知する入力のコンシューマからの信号を消費し、前記コンシューマからの信号に基づいてコンシューマ・バリア・トークンを生成するように構成可能なロジック回路を構成すること、及び、
前記プロデューサ・バリア・トークンと前記コンシューマ・バリア・トークンを使用して前記プロデューサと前記コンシューマとの間の前記実行フラグメントの進行の差異を追跡することを含む請求項17に記載の方法。
【請求項24】
前記プロデューサ・バリア・トークンに応答していることを含む請求項23に記載の方法。
【請求項25】
前記アレイ内の前記処理ユニットのセットに対して静止準備を生成すること、及び、前記アレイ内の前記処理ユニット間のデイジー・チェーン制御バスを使用して前記静止準備信号をコントローラに配信することを含む請求項17に記載の方法。
【請求項26】
前記セット内の少なくとも1つの処理ユニットにおいて静止参加フラグを設定することにより前記アレイ内に前記処理ユニットを構成すること、前記静止参加フラグの状態に応じて前記静止準備信号の生成を可能または不可能にすることを含む請求項25に記載の方法。
【請求項27】
構成可能な処理ユニットのアレイを含む処理システムを動作させる方法であって、
データ処理動作のために構成データをアレイにロードし、これにより、前記アレイを、静止境界を有する対応する実行フラグメントのための複数の実行フラグメント・リソース・グループに構成すること、
静止コマンドを前記アレイ内の前記複数の実行フラグメント・リソース・グループに分配すること、及び、
前記実行フラグメント・リソース・グループにおいて、前記静止コマンドに応答して、前記対応する実行フラグメント内の前記静止コマンドに続く静止境界を検出し、前記静止境界を越える対応する前記実行フラグメントの実行を無効にし、前記対応する実行フラグメントに対する静止準備信号を立ち上げることを備える方法。
【請求項28】
前記静止境界が、前記構成データ内において、前記対応する実行フラグメントの前記実行フラグメント・リソース・グループの前記構成可能ユニットにおける実行の構成された状態のセットによって規定され、静止境界を検出するために前記静止コマンドに応答することが、前記構成された状態のセットを検出することを含む請求項27に記載の方法。
【請求項29】
前記データ処理動作を停止するために、
前記静止コマンドを分配すること、及び、
前記複数の実行フラグメント・リソース・グループから前記静止準備信号を受信した後、前記アレイから構成及び状態データをアンロードすることを含む請求項27に記載の方法。
【請求項30】
チェックポイント・データをアンロードし、前記データ処理動作を再開するために、
前記静止コマンドを分配すること、及び、
前記複数の実行フラグメント・リソース・グループから前記静止準備信号を受信した後、前記アレイから構成及び状態データをコピーし、前記データ処理動作を再開することを含む請求項27に記載の方法。
【請求項31】
異なるデータ処理動作を実施するために、
前記静止コマンドを分配すること、
前記複数の実行フラグメント・リソース・グループから前記静止準備信号を受信した後、前記アレイから構成及び状態データをアンロード及び保存し、前記異なるデータ処理動作のための構成ファイルをロードし、前記異なるデータ処理動作を実行すること、及び、
前記異なるデータ処理動作の前記構成ファイルをアンロードし、前記保存した構成及び状態データをロードし、当初の前記データ処理動作を前記静止境界で再開することを含む請求項27に記載の方法。
【請求項32】
前記アレイ内で発生する内部イベントに応答して、前記静止コマンドを分配することを含む請求項27に記載の方法。
【請求項33】
前記アレイの外部で発生する外部イベントに応答して、前記静止コマンドを分配することを含む請求項27に記載の方法。
【請求項34】
データ処理動作を実行するように構成可能な、再構成可能ユニットと相互接続とのアレイと、
制御信号に応答して前記アレイを静止させるように構成可能な、前記アレイ内の前記再構成可能ユニットに結合された静止ロジックと、
を含む処理システム。
【請求項35】
前記制御信号が、前記アレイ内で発生する内部イベントに応答して生成される請求項34に記載の処理システム。
【請求項36】
前記制御信号が、前記アレイの外部で発生する外部イベントに応答して生成される請求項34に記載の処理システム。
【請求項37】
マルチタスキングを用いてランタイム・プログラムを実行するホストプロセッサを含み、
前記制御信号がマルチタスキングをサポートして生成される請求項34に記載の処理システム。
【請求項38】
チェックポインティングを用いてランタイム・プログラムを実行するホストプロセッサを含み、
前記制御信号がチェックポインティングをサポートして生成される請求項34に記載の処理システム。
【請求項39】
マルチプログラミングを用いてランタイム・プログラムを実行するホストプロセッサを含み、
前記制御信号が前記アレイ内で発生する内部イベントに応答して生成され、前記ランタイム・プログラムが前記マルチプログラミングをサポートして静止後に前記アレイを再構成する請求項34に記載の処理システム。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は再構成可能アーキテクチャ及び、他の分散型処理アーキテクチャにおける静止に関するものであり、粗粒度再構成可能アーキテクチャ上で実行される動作の静止に特に適用することができる。
【背景技術】
【0002】
フィールド・プログラマブル・ゲートアレイFPGAを含む再構成可能プロセッサは、コンピュータ・プログラムを実行する汎用プロセッサを使用して達成され得るものよりも効率的または高速に様々な機能を実装するように構成され得る。いわゆる粗粒度再構成可能アーキテクチャ(例えば、CGRA)が開発されており、このアーキテクチャでは、アレイ内の構成可能ユニットが、典型的なより細粒度のFPGAで使用されるよりも複雑であり、様々なクラスの機能のより高速またはより効率的な実行を可能にすることができる。例えば、機械学習及び人工知能作業負荷のためのエネルギー効率のよいアクセラレータの実施態様を可能にすることができるCGRAが提案されている。Prabhakar, et al., "Plasticine: A Reconfigurable Architecture for Parallel Patterns"、ISCA '17, June 24-28, 2017, Toronto, ON, Canadaを参照されたい。
【0003】
CGRA等の分散型処理システムにおけるチェックポインティング、マルチタスキング、及び、マルチプログラミングは、複雑な問題を提示する。通常、ランタイム制御プログラムは、構成ファイルをロードし、終了するように構成されたマシンを実行するだけで、その後、ハードウェアを静止させることができる。プリエンプティブ・マルチタスキングやデバッグ等のシステム管理機能のために、実行中にマシンを中断する機能がない場合がある。動作効率を最大にし、再構成可能なプロセッサの構成可能な処理要素等の処理システム上の処理ユニット間で調整することができるようにするために、処理ユニットの静止を効率的に管理する手段が必要とされる。
【発明の概要】
【0004】
粗粒度再構成可能アレイ・プロセッサの再構成可能な処理ユニット間の静止を含む、データ処理システムの処理ユニットの効率的な静止を可能にする技術について説明される。
【0005】
データ処理動作の実行フラグメントを実施するためにアレイ内の処理ユニットのセットを割り当てるように構成可能かつ再構成可能な処理ユニットのアレイを含む処理システムが説明される。論理回路を含む静止ロジックは、アレイ内の処理ユニットの幾つかまたはすべてに結合されて提供される。静止ロジック回路は、制御信号に応答して、アレイ内のデータ処理ユニットのセットを、実行フラグメントの静止境界上で静止させるように構成可能である。本明細書で説明される実施形態では、セット内の処理ユニットがアレイ内に分散され、非同期に動作することができる。静止ロジックは、静止境界上で非同期に動作する処理ユニットのセットを同期させるように動作可能である。静止境界は、構成可能な処理ユニットのアレイにおいて構成データによって規定できる。
【0006】
幾つかの実施形態では、処理ユニットのアレイが、データ処理動作のそれぞれの実行フラグメントを実施するために、アレイ内の複数の処理ユニットのセットを指定された実行フラグメント・リソース・グループ(EFRG)に割り当てるように構成可能であり、実行フラグメントは、例えば、CGRA内に、データ処理動作の制御及び、データ・フロー・グラフ内の動作のサブセットを含む。この場合の静止ロジックは、静止制御信号を分配してアレイ内の処理ユニットに関連するロジックを静止させ、それぞれの処理ユニットのセットから静止準備信号を受け取る静止制御信号を分配する静止コントローラを含むことができる。
【0007】
静止モードを有する構成可能処理ユニットのアレイを含む処理システムを動作させるための方法が説明される。該方法は、静止境界を有する対応する実行フラグメントのためにアレイを複数のEFRGに構成するデータ処理動作のために構成データをアレイにロードするステップと、静止コマンドをアレイ内の複数のEFRGに分配するステップとを含むことができる。アレイに分配される静止コマンドは例えば、アレイがマルチタスキングをサポートするための静止コントローラに信号を送信するホストプロセッサ内のランタイム制御プログラムのような外部静止イベントに応答して、または、制御ネットワークによってアレイの静止コントローラに提供されるアレイ内のデータ処理動作によって生成される内部静止イベント(自己静止)から生成することができる。実行フラグメント・リソース・グループでは、該方法は、静止コマンドに応答して、対応する実行フラグメント内の静止コマンドに続く静止境界を検出すること、静止境界を超える対応する実行フラグメントの実行を無効にすること、及び、対応する実行フラグメントに対する静止準備信号を立ち上げることを含む。静止境界は、構成データ内で、各EFRGの処理ユニットにおける実行の構成された状態のセットによって、規定することができる。該方法は、グループ内の処理ユニットの構成された状態のセットを検出することによって、EFRG内の静止境界を検出することを含むことができる。
【0008】
静止ロジックが所与のEFRGに対して、実行フラグメント内に1または複数の静止境界を規定し、制御信号に応答して静止境界上でEFRG内の処理ユニットを静止させるように構成可能である技術が説明される。説明される例では、EFRG内の処理ユニット内の構成された状態を検出するために、処理ユニット内の実行ループまたは他のタイプの処理サイクルをカウントするループ・カウンタ等のカウンタを含めることができる。静止ロジックはカウンタに応答して、実行フラグメント内の静止境界に対応する処理ユニット内の構成された状態等のイベントを検出し、検出できなければEFRG内の実行フラグメントの進行を追跡することができる。したがって、静止ロジックは、実行フラグメントに割り当てられたEFRG内の静止境界上の静止動作を同期させることができる。説明される例では、EFRG内の処理ユニット間の実行フラグメントの進行の差異を追跡するために、スキュー・カウンタが提供される。幾つかの実施形態では、プログラム実行が次の静止境界に達することができる前に、実行フラグメントに残っている保留作業があるときに、スキュー・カウンタは非ゼロであり、或いは、スキュー・カウンタの非ゼロ値は、プログラムが静止境界にないことを反映するものと考えることもできる。他の実施形態では、スキュー・カウンタまたは様々な追跡手段の異なる値が、これらの状態を表してもよい。
【0009】
本明細書で説明されるシステムの例における実行フラグメントは、処理ユニットのセットに割り当てられ、セット内の1または複数の処理ユニットは入力のプロデューサとして構成され、セット内の1または複数の処理ユニットは入力のコンシューマとして構成される。静止ロジックが、静止境界上でプロデューサまたは各プロデューサを停止し、コンシューマまたは各コンシューマが静止境界の前に生成された入力の処理を終了した後にEFRGを静止させるように構成可能である静止技術が説明される。
【0010】
本明細書において、処理システムがアレイ内の処理ユニットに結合された制御バリア・ネットワークを含むアーキテクチャを説明する。制御バリア・ネットワークは、制御バリア・ネットワーク内に信号ルートを形成するように構成可能な制御バスと、制御バス及び処理ユニットのアレイに接続された入力及び出力を有する複数のバリア・ロジック・ユニットとを備えることができる。静止ロジックのサポートにおいて、特定の実行フラグメントに割り当てられたEFRGの第1のロジック・ユニットは、実行フラグメント内のプロデューサからトークン(P_QB)を受信するように構成可能である。この場合、トークンは、実行フラグメント内の静止境界に対応するプロデューサユニット内のイベントを通知し、プロデューサからのトークンに基づいて出力にプロデューサ・バリア・トークンを生成する。プロデューサ・バリア・トークンは、セット内のプロデューサが実行フラグメントの静止境界を超えて進むことを可能にするために使用することができる。また、特定の実行フラグメントに割り当てられたEFRGのための第2のロジック・ユニットは、プロセッサ・ユニットのセット内のコンシューマ・ユニットからトークン(C_QB)を受信して、コンシューマからのトークンに基づいて出力にコンシューマ・バリア・トークンを生成するように構成可能である。コンシューマ・バリア・トークンは、静止境界上のユニットのセットを同期させるために、プロデューサ・バリア・トークンと共に静止ロジックにおいて使用することができる。静止ロジックは、制御バスに接続するように構成可能であり、プロデューサ・バリア・トークン及びコンシューマ・バリア・トークンを受信するように構成可能なスキュー・カウンタを含むことができ、セット内の処理ユニット間の静止境界トークン(P_QB及びC_QB)のスキューを含むプロデューサ及び、コンシューマ間の実行フラグメントの進行の差異を追跡する。
【0011】
更に、イネーブル回路が、プロデューサ・バリア・トークンと他のデータ及び、制御依存性に応答して、プロデューサとして構成されたEFRG内の関連するプロセッサ・ユニットのためのイネーブル信号を生成するために提供され得る。また、データ及び、制御依存性に応答してコンシューマとして構成されたEFRG内の関連するプロセッサ・ユニットのためのイネーブル信号を生成するように構成可能なイネーブル回路を提供することができる。プロデューサ・バリア・トークン及び、コンシューマ・バリア・トークンを使用して、プロデューサとコンシューマとの間の実行フラグメントの進行の差異を追跡することができる。また、静止ロジックは、プロデューサ・バリア・トークンを無効にすることでプロデューサを停止でき、コンシューマが構成された状態に達すると、EFRGは静止する。
【0012】
本明細書で説明する静止アーキテクチャでは、アレイ内の処理ユニットのために、アレイ静止コントローラが制御信号を静止ロジックに転送するロジックを含むことができる。処理ユニットのセットに関連付けられた静止ロジックは、アレイ内の対応する処理ユニットに関連付けられた静止準備ロジックを含み、静止準備信号をアレイ静止コントローラに提供することができる。本明細書で説明される例では、処理ユニットのための静止準備ロジックがアレイ内の処理ユニット間でデイジー・チェーンで接続される。静止準備ロジックは、デイジー・チェーンの前のメンバからの静止準備信号が受信され、対応するEFRGの静止が準備状態であるとき、静止準備信号をデイジー・チェーン上のアレイ静止コントローラに転送することができる。また、アーキテクチャは、構成可能な静止参加フラグと、静止参加フラグの状態に応じて静止準備ロジックをオーバーライドするロジックを提供できる。このようにして、アレイは、静止準備ロジック内のプロデューサに関連する静止準備信号を使用するように構成することができる。
【0013】
概して、構成可能な処理ユニットのアレイを含む、処理システムを動作させるための一方法が提供され、それは、アレイ内のEFRG内のデータ処理動作の実行フラグメントの進行を監視すること、及び、制御信号に応答して、実行フラグメントの静止境界上でアレイ内のデータ処理ユニットのセットを静止させることとを含む。
【0014】
該方法は、データ処理動作のそれぞれの実行フラグメントのアレイ内の処理ユニットの複数セットにおける進行を監視すること、アレイ内の処理ユニットへ静止制御信号を分配すること、及び、処理ユニットの各セットから静止準備信号を受信することを含むことができる。
【0015】
また、実行フラグメント内に複数の静止境界を規定するロジックを含む処理システムに対して、該方法は制御信号の後の共通の静止境界上でEFRG内の処理ユニットを静止させることを含むことができる。
【0016】
EFRG内の処理ユニット間の静止境界を越える実行フラグメントの進行の差異を追跡するための技術も提供される。
【0017】
構成可能ユニットのアレイが、チェックポイント動作、ブレークポイント動作、サスペンド及び再開動作、再構成可能なシステム上のマルチプログラミング及びマルチタスキング、並びに、構成可能ユニットのアレイ上で実行されるプログラムのデバッグを補助する機能等の他の機能をサポートする静止制御信号を生成する制御プログラムを実行するホストに結合される、データ処理システムを動作させるための方法が説明される。1つの動作では、制御プログラムが静止境界上の動作を反復的に静止させ、各々の静止境界において状態データ及びメモリ・コンテンツのようなチェックポイント・データのコピーをアンロードし、動作を再開し、静止境界を越える動作の実行に関する情報を収集するために繰り返すことができる。
【0018】
また、データ処理システムを動作させるための方法であって、該方法において、時々他の処理による使用のためにリソースをもたらすことがあるマルチプログラミング環境において、及び、処理ユニットのアレイにおけるデータ処理動作が、スケジューラ、割り込み、または他の外部の力に応じてリソースをもたらすことを強制され得るマルチタスキング環境において、処理ユニットのアレイにおけるデータ処理動作が、制御プログラムを実行するホストに構成可能ユニットのアレイが結合されている場合が、説明される。制御プログラムは構成可能ユニットのアレイを使用して、実行のための複数の動作を管理することができ、これには、リソースがもたらされているマルチプログラミング・イベントまたはマルチタスキング・イベント上の動作の間の優先順位の割り当てが含まれる。本明細書に記載する技術を利用することにより、ホストは、構成可能ユニットのアレイに配置された動作よりも高い優先度を有する動作のためのトリガー・イベントによって、優先度に従って動作をスケジューリングすることができ、制御プログラムは静止境界上で実行中のプログラムを中断し、構成ファイルの全部または一部をアンロードし、静止境界で実行中のプログラムの状態及び作業メモリをアンロードし、その後、より高い優先度の動作のために構成ファイルをロードし、より高い優先度のファイルの実行を開始することができる。また、より高い優先度の動作が完了すると、中断された動作は、随意的に、その構成ファイル、状態、及び、メモリをロードし、静止境界で動作を再開することによって、再開することができる。
【0019】
本明細書で説明される技術の他の態様及び利点は、以下の図面、詳細な説明、及び特許請求の範囲を検討することによって理解することができる。
【図面の簡単な説明】
【0020】
【
図1】ホスト、メモリ、及び、静止制御ネットワークを含む再構成可能データ・プロセッサを含むシステムを示すシステム図である。
【0021】
【
図2】アレイ静止コントローラ及び分散型静止ロジックを有する構成可能ユニットのアレイを有するタイルの簡略図である。
【0022】
【
図2A】アレイ・レベル・ネットワーク内の素子を接続する例示的なスイッチ・ユニットを示す。
【0023】
【
図3】
図2のようなタイルの処理ユニットのセットの図であり、タイル内の静止ロジックに接続された構成可能相互接続を示す。
【0024】
【
図4】静止ロジックを含む例示的な構成可能ユニットを示すブロック図である。
【0025】
【
図5】静止をサポートするように構成可能なバリア・ロジック・ユニットの一実施態様を示す図である。
【0026】
【
図6】プロデューサ・バリア・トークン及び静止準備ロジックを生成するための静止ロジックの簡略化された論理図である。
【0027】
【
図7】静止境界ロジックの簡略化されたロジック図である。
【0028】
【
図8】コンシューマ・バリア・トークンを生成するための静止ロジックの簡略化された論理図である。
【0029】
【
図9】トップ・レベル・ネットワークと、複数のタイルを有する実施形態をサポートするCGRA(粗粒度再構成可能アーキテクチャ)の構成要素との簡略化されたブロック図である。
【0030】
【
図10】構成可能ユニットにおけるユニット構成ロード処理を制御するために使用することができるステート・マシン図の一例を示す。
【0031】
【
図11】構成可能ユニットにおける構成ファイルのロード及びアンロードをサポートする構造の論理表現である。
【0032】
【
図12】アレイ構成ロード処理を実行するロジックの一例を示すステート・マシン図である。
【0033】
【
図13】アレイ構成アンロード処理を実行するロジックの一例を示すステート・マシン図である。
【0034】
【
図14】構成可能な処理ユニットのアレイのためのアレイ構成及びプログラム・アンロード処理に続く静止動作の一例のフローチャートである。
【0035】
【
図15】静止を使用して構成可能なアレイにおいてデータ処理動作を変更する方法のフローチャートである。
【0036】
【
図16】静止を使用して構成可能なアレイにおいてデータ処理動作のブレークポイント・ファイルをアンロードする方法のフローチャートである。
【発明を実施するための形態】
【0037】
以下の説明は、典型的には特定の構造的な実施形態及び方法を参照して行われる。本技術を、具体的に開示された実施形態及び方法に限定する意図はないが、本技術は他の特徴、要素、方法、及び実施形態を使用して実施されてもよいことを理解されたい。好ましい実施形態は、本技術を説明するために記載されており、請求項によって規定される本技術の技術的範囲を限定するものではない。当業者であれば、以下の説明に対して様々な同等の変形を認識するであろう。
【0038】
図1は、ホスト120、メモリ140、及び、再構成可能データ・プロセッサ110を含むシステムを示すシステム図である。
図1の例に示すように、再構成可能データ・プロセッサ110は、本明細書で説明する静止制御ネットワークを含む処理ユニットのアレイ190を含む。処理ユニットは、この例の構成可能ユニットであり、構成ファイルまたはビットファイルを使用して構成可能であり、データフロー・フォームまたはデータフロー・フォームの一部におけるデータ処理動作を実施する。他の実施形態では、処理ユニットのアレイがノイマン型または制御フロー動作のため、またはハイブリッド動作のために構成することができる。
【0039】
アレイの処理ユニットは非同期的に実行することができ、これは、静止するための安全なプログラム・ポイントにおける保証の邪魔にはならない。
【0040】
データ処理動作の実行のために構成された処理ユニットのアレイを備えるCGRA及び、他の処理システムでは、アレイ内で本明細書で「実行フラグメント・リソース・グループ、EFRG」と呼ばれる処理ユニットのセットを割り当てて、本明細書でデータ処理動作の「実行フラグメントEF」と呼ばれるデータ処理動作の様々な部分を実施するように、アレイを構成することができる。アレイは、アレイの処理ユニットの様々なセットにおいて、複数の実行フラグメントを実行するように構成することができる。これらの処理ユニットの様々なセットは、これらが非同期的に構成された実行フラグメントを実行できる。また、単一の実行フラグメントに割り当てられた所与の処理ユニットのセット内の処理ユニットは、非同期に動作することができ、これは、例えば、アレイ内の処理ユニットの分散性をサポートする。このため、データ処理動作を停止し、安全に再開できるようにアレイ内の処理ユニットを静止させなければならない場合に問題が生じる。
【0041】
この説明のために、実行フラグメント(EF)は一般に、データ処理動作を実施するプログラムの一部であり、同様の制御フロー・シーケンスに従うプログラム内の動作のシーケンス等の動作のセットを含む。EFは、ループ本体、または、if-elseまたはswitchステートメント等の条件構文に基づいて実行される動作とすることができる。EFは階層構造にすることができ、他のループネストを完全に含むことができる。1つの具体例は、深層学習トレーニング及び推論作業負荷のようなループ・ヘビー・プログラムにおいて最も外側のループレベルで定義されるEFである。幾つかの実施態様に適した制御フロー・グラフ表現を使用して、プログラム制御フロー・グラフGがエッジE及び、頂点Vの集合によって表される場合、それぞれの固有EFは、GをGの別個のエッジe及び、頂点vに分割するGの別個のサブグラフgである。
【0042】
この説明において、実行フラグメント・リソース・グループ(EFRG)は、EFを実行するために割り当てまたは構成された物理ハードウェア・リソースのセットである。EFとそのEFRGとの間には1:1の対応があり得るが、EFRGはシングル・スレッド配備におけるEFRG内の各構成要素が1つのEFのみを実行している任意の所与の時間に、複数のEFを連続して持ち得て且つ実行することができる。CGRA内の構成可能ユニット等の処理ユニットのアレイでは、EFRGがアレイ内の処理ユニットのセットを備えることができる。
【0043】
この説明において、静止境界(QB)は、QBにおいて一貫性のある状態を有するように制約されるEF内の動作のセットを記述するイベントである。例えば、ループでは、QBは、完全に実行されたループ反復に続く、または先行するものとして規定することができる。各EFは2つの自然なQBを有し、1つはEFの実行の前であり、もう1つはEFが実行を完了した直後である。追加のQBは、必要に応じてEF内で規定され、構築されることができる。
【0044】
コメントが擬似コード内のQBの位置を示す汎用ループの幾つかの単純な例を以下に示す:
// 汎用ループ
// 1つの自然なQBがループ実行の直前にある。
for (i=0; i<N; i++) {
c[i]= a[i]+ b[i];
}
// 別の自然なQBがループ実行の直後にある。
// 汎用ループ
// 各反復はQBであってもよい
for (i=0; i<N; i++) {
// 以下のif ステートメントは、コンパイラによって効果的に挿入される
if (quiesce_received())wait(); // wait()は、resume/unload等を待つHW構文である。
c[i] = a[i] + b[i];
}
// 汎用ループ
// 各4番目の反復はQBであってもよい
for (i=0; i<N; i++) {
// 以下のifステートメントは、コンパイラによって効果的に挿入される
if (!(i%4) && quiesce_received()) wait(); // wait()は、resume/unload等を待つHW構文である。
c[i] = a[i] + b[i];
}
【0045】
QBを実施するために、ユーザはコンパイラにQBを直接指定することができ、あるいは、ユーザ入力に基づくブレークポイントのような自己チェックポインティングまたは他の能力を可能にするために、コンパイラがデフォルトで適宜QBを挿入することができる。ユーザは、ユーザによってコードに挿入されたコンパイラ・ディレクティブ(プラグマ)、コンパイラのコマンド・ライン呼び出しを介してユーザによって指定されたオプション、コンパイラが使用する構成ファイル、これらの技術の組合せ、またはその他の手段を介して、QBを指定できる。次に、コンパイラは、制御フローの実施形態において、静止リクエストをサンプリングし、静止リクエストがQBでアクティブである場合に実行を同期/一時停止する追加のエッジ及び、頂点を挿入することによって、元の制御フロー・グラフGをG’に変換する。EF内で、この同期/一時停止は、プロデューサ及び、コンシューマを識別し、たとえば以下の動作を実行することによって行うことができる:
a) 全ての(初期)プロデューサの論理関数(例えば、AND)であるプロデューサ・バリアを生成する。プロデューサ・バリアは、プロデューサの数が多い場合、再帰的に構築されてもよい。
b) すべての(エンド)コンシューマの論理関数(たとえば、AND)であるコンシューマ・バリアを生成する。コンシューマ・バリアは、コンシューマの数が多い場合、再帰的に構築することができる。
c) スキュー・カウンタ及び、関連する制御を含む、またはそれに関連するEFRGの1つの構成要素を示す。静止リクエスト、プロデューサ・バリア、及び、コンシューマ・バリアをこのスキュー・カウンタにルーティングする。プロデューサ・バリアをスキュー・カウンタ・インクリメント入力に接続し、コンシューマ・バリアをスキュー・カウンタ・デクリメント入力に接続する。
d) 上記のステップc)におけるEFRG内の示された構成要素内の、または該構成要素に関連するバリア・ロジックは、EFのプロデューサが次のQBまで実行を進めるべきか、またはすべてのコンシューマがプロデューサと同じQBに追いつくのを停止し、待つべきかを決定する。次のQBまでに実行を再開するために、関係する構成要素は、すべてのプロデューサに制御信号を送信する。実行を停止するために、1つのアプローチでは、この制御信号は単に送出されず、EFが進行するのを効果的に阻止する。静止リクエストが関係する構成要素によって受信された場合、プロデューサは、該制御信号を受信しない。関係する構成要素は、スキュー・カウンタを使用して、すべてのコンシューマがプロデューサと同じQBに到達するのを待つ。スキュー・カウンタがゼロに達すると、関係する構成要素は、EFが静止可能であることを示す信号を生成する。
【0046】
構成可能ユニットのアレイでは、データ処理動作の複数の実行フラグメントを規定することによって、データ処理動作を実施することができる。EFはプログラムに適合するように、固定または可変量の作業から構成されてもよい。同様に、異なるEFは、異なる量の計算を含むことができる。EFは、並列パターン、並列パターンの部分、または、プログラムの制御及び、データ・フロー・グラフ内の動作の任意の他のサブセットを表すことができる。
【0047】
データ処理動作の全部または一部は、EFのセットに分割することができる。構成可能ユニットのアレイは、データ処理動作の実行フラグメントを実施するために、アレイ内に複数のメンバを有する処理ユニットのセットを含むEFRGを割り当てるように、構成ファイルを使用して構成可能である。多くのEFRG及び、構成可能ユニットの対応するセットを、それぞれの実行フラグメントに割り当てることができる。EFは、入力のプロデューサのセットから入力データを受け取る入力を有する。入力のプロデューサのセットは、1または複数のプロデューサを含むことができる。EFは、入力データを消費し、結果を生成する、EFに割り当てられた構成可能ユニットのセットの間に分配された機能要素を有する。1つのEFによって生成された結果は、異なるEFにおける入力として利用されてもよい。
【0048】
アレイ内の構成可能ユニットに結合された静止ロジックは、制御信号に応答して、実行フラグメントの静止境界上で、特定の実行フラグメントに割り当てられたアレイ内のデータ処理ユニットのセットを静止させるように構成可能である。実行フラグメントは、特定の実施態様に応じて、1つの静止境界、または複数の静止境界を含むように構成することができる。
【0049】
同期時には、EFに割り当てられたEFRG内の静止境界までの動作に対応するサイクルが完全に実行されるか、または全く実行されないかの何れかである。
【0050】
処理ユニットのアレイは、アレイ内の全てのユニットがそれらが割り当てられるEFRGのためのEF内の静止境界に達した後、静止したと考えることができ、特定の実施態様に対して、アレイ内の実行は安全な方法で停止することができる。
【0051】
例えば、静止したEFRGまたは静止したアレイは、以下の特徴を有することができる:
1. 新しい計算は実行されておらず、新しいトランザクションは作成されていない。
2. すべての関連する進行中のトランザクション(データ及び、制御ビット)が完了し、それらの宛先に到達している。
3. すべての関連するプログラム状態及び、中間データは、プログラム・アンロード動作中にアンロードすることができる構成可能な処理ユニット内の状態素子及び、メモリに格納される。
【0052】
図1の例に示すように、再構成可能データ・プロセッサ110は、構成可能ユニット(処理ユニット)のアレイ190と、チェックポイント及び、復元動作、ブレークポイント動作、及び、他の動作で使用可能なアレイ静止コントローラ195とを含む。静止コントローラは、構成ロード/アンロード・コントローラを含むことができ、または構成ロード/アンロード・コントローラと結合することができ、構成ロード/アンロード・コントローラは、構成ロード・コントローラ及び、構成アンロード・コントローラの組合せを含むことができる。構成ロード・コントローラ及び、構成アンロード・コントローラは、別個のロジック及び、データ・パス・リソースを使用して実装されてもよく、または特定の実施形態に適合するように、共用のロジック及び、データ・パス・リソースを使用して実装されてもよい。
【0053】
プロセッサ110は、ライン125によりホスト120に接続された外部I/Oインタフェース130と、ライン145によりメモリ140に接続された外部I/Oインタフェース150とを含む。I/Oインタフェース130,150は、バス・システム115を介して、構成可能ユニットのアレイ190に接続する。バス・システム115は、データの1つのチャンクを搬送するバス幅を有してもよく、本例ではバス幅は128ビットとすることができる(全体を通した128ビットへの言及は、より一般的にはチャンク・サイズの一例と見なすことができる)。
【0054】
構成ファイルを用いて構成可能ユニットのアレイ190内の構成可能ユニットを構成するために、ホスト120は、再構成可能データ・プロセッサ110内のインタフェース130、バス・システム115、及びインタフェース150を介して、構成ファイルをメモリ140に送信することができる。構成ファイルは、再構成可能プロセッサ110外のデータパス内を含む特定のアーキテクチャに適するように、多くの方法でロードされ得る。構成ファイルは、メモリ・インタフェース150を介してメモリ140から検索することができる。次いで、構成ファイルのチャンクは、分配シーケンスで、再構成可能データ・プロセッサ110における構成可能ユニットのアレイ190内の構成可能ユニットに送信することができる。
【0055】
外部クロック発生器170または他のクロック信号源は、構成可能ユニットのアレイ190、バス・システム115、及び外部データI/Oインタフェースを含む、再構成可能データ・プロセッサ110内の素子にクロック信号175またはクロック信号を供給することができる。
【0056】
実行フラグメントの調整に使用可能な構成可能ユニット間に制御信号ルートを確立するように構成可能な静止制御ネットワークを含むことができる。静止制御ネットワークは、例えば、CGRAプロセッサの構成可能ユニットを含む構成可能ユニットのアレイにおいて、複雑なデータ処理動作をサポートするのに適した信号ルーティングを提供するように、構成可能及び再構成可能なアーキテクチャにおいて構成可能である。
【0057】
静止制御ネットワークは、構成データ・ストア内で定義することができるCGRA上の幾つかの別個のソースからのインバウンド・トークン及びステータス信号を登録または記録する能力を提供し、インバウンド・トークン及びステータス信号の指定された組合せに基づいて、出力バリア・トークン及び他の信号を生成することができる。本明細書に記載される例は、バリア・ロジックを複数のレベルに分解することによって、任意の数のソースにわたる制御バリアをサポートするのに十分に柔軟である。
【0058】
本明細書で説明する静止制御ネットワークは、より広いデータ処理動作のために連携を必要とすることがある実行フラグメントを実行する処理ユニットのアレイを含む他のタイプのデータ・プロセッサと共に利用することができる。
【0059】
図1は、データ処理動作を実行するように構成可能な、再構成可能ユニットと相互接続とのアレイと、制御信号に応答してアレイを静止させるように構成可能な、アレイ内の再構成可能ユニットに結合された静止ロジックとを含む、処理システムを示す。制御信号は、アレイ内で発生する内部イベントに応答して生成され得る。制御信号は、アレイの外部で生じる外部イベントに応答して生成され得る。
【0060】
図1に示すホストプロセッサは、マルチタスキングを用いてランタイム・プログラムを実行することができ、静止を引き起こす制御信号は、マルチタスキングをサポートして生成され得る。
【0061】
図1に示すように、ホストプロセッサは、マルチタスキングを用いてランタイム・プログラムを実行することができ、静止を引き起こす制御信号は、チェックポインティングをサポートして生成され得る。
【0062】
図1に示すように、ホストプロセッサはマルチタスキングを用いてランタイム・プログラムを実行でき、静止を引き起こす制御信号は、アレイ内部で発生したイベントに応答して生成され得て、ランタイム・プログラムは、マルチプログラミングをサポートして静止後にアレイを再構成できる。
【0063】
図2は、構成可能ユニットのアレイを備えるタイルの簡略図であり、アレイ内の構成可能ユニットは、データ・バス・システム上のノードであり、データ・バス・システムは、複数タイルの実施態様におけるアレイ・レベル・ネットワークとして構成可能であり、タイル間の通信及びデバイス上の外部インターフェースとの通信のために構成された高位レベル・ネットワークまたはトップ・レベル・ネットワークと接続可能である(
図9参照)。
【0064】
この例では、構成可能ユニット200のアレイが複数のタイプの構成可能処理ユニットを含む。この例における構成可能処理ユニットのタイプは、パターン計算ユニット(PCU)、パターン・メモリ・ユニット(PMU)、スイッチ・ユニット(S)、及びアドレス生成及び結合ユニット(AGCU)(それぞれ2つのアドレス生成器AG及び共用CUを含む)を含む。これらのタイプの構成可能ユニットの機能の例については、「Prabhakar et al., "Plasticine: A Reconfigurable Architecture For Parallel Patterns", ISCA '17, June 24-28, 2017, Toronto, ON, Canada」を参照されたく、また、上記文献は本明細書に完全に記載されているかのように参照により組み込まれる。
図2に示すアーキテクチャでは、マスタAGCU250が、タイル内の構成可能ユニットのアレイのための静止動作を制御するアレイ静止コントローラ251を含む。
【0065】
タイルの構成によって実施されるデータ処理動作(「マシン」と呼ばれることもある)は、構成可能ユニット(この例ではAG、CU、PMU、PCU)の対応するセット間で分散され、該セットによって実行されるデータ処理動作の複数の実行フラグメントを含む。
【0066】
静止処理に参加するアレイの構成要素は、EF静止境界におけるマスタAGCU250(MAGCU)内のアレイ静止コントローラ251からの静止リクエストに従う。以下で説明する例では、各EF静止境界におけるプロデューサとコンシューマとの間の同期が、制御バリア・ネットワークを使用して構成可能ユニットにリンクすることができるプロデューサ・バリア(p_barrier)及び、コンシューマ・バリア(c_barrier)という2つの構成を使用して達成される。アレイ内の静止ロジックは、制御バリア・ネットワークの構成、別個の専用ロジック及び、通信リンク、または制御バリア・ネットワークと専用ロジック及び、リンクの組合せによって実現することができる。
【0067】
静止制御ネットワークとして使用可能な制御バリア・ネットワークは、この例では、アレイ内の構成可能ユニットに結合された複数の構成可能静止ロジック・ユニット(バリア・ロジック・ユニットを含む)を備える。この例では、複数の静止ロジック・ユニットが、アドレス発生器AG内の、または、アドレス発生器AGと動作可能に結合したロジック・ユニット(例えば、201)、PMU内のロジック・ユニット(例えば、202)、及び、PCU内のロジック・ユニット(例えば、203)を含む。所与のデータ処理動作のための制御バリア・ネットワークは、実行フラグメント間の関係を強制し、タイルにわたって分散された実行フラグメントの遂行の終了及び、開始のタイミングを調整し、本明細書で説明する静止処理をサポートするように構成することができる。
【0068】
静止ロジック・ユニットは、この例では、構成可能な相互接続(図示せず、
図3参照)を使用して実施される制御バスに接続される。制御バスは、構成データを使用して、それぞれの実行フラグメントに割り当てられた構成可能ユニットの複数のセットを含む、データ処理動作を実行するように設計されたタイルの特定の構成をサポートするタイル内の静止/バリア・ロジック・ユニット間の信号経路を形成するように、構成することができる。
【0069】
これらの構成可能ユニットのそれぞれは、それが割り当てられた実行フラグメントを実行するためのセットアップまたはシーケンスの何れかを表す構成データを格納するレジスタまたはフリップフロップのセットを含む構成ストアを含み、ネスト化されたループの数、各ループ・イテレータの限界、各ステージに対して実行される命令、オペランドのソース、及び、入力及び出力インタフェースのネットワーク・パラメータを含むことができる。構成データには、さまざまな実行フラグメントにおいて静止境界を規定するデータを含めることもできる。
【0070】
更に、これらの構成可能ユニットのそれぞれは、ネスト化されたループまたは他のものにおける進行を追跡するために使用可能な状態を記憶するレジスタまたはフリップフロップのセットを備える構成ストアを含む。構成ファイルは、プログラムを実行する各構成要素の初期構成または開始状態を表すビットストリームを含む。このビットストリームは、ビットファイルと呼ばれる。
【0071】
バス・システムは、アレイ内の構成可能ユニットを相互接続するリンクを含む。アレイ・レベル・ネットワーク内のリンクは、1以上の物理バスを含み、この場合では、チャンクレベル・ベクトル・バス(例えば、128ビットのデータ)、ワードレベル・スカラバス(例えば、32ビットのデータ)の2種類の物理データ・バスを含む。例えば、スイッチ・ユニット211と212との間の相互接続221は、128ビットのベクトル・バス幅を有するベクトル・バス相互接続と、32ビットのスカラ・バス幅を有するスカラ・バス相互接続とを含む。また、構成可能相互接続、或いは専用相互接続と構成可能相互接続の組みあわせを備えることができる制御バス(
図3参照)が含まれ、タイルの構成ファイル内の構成ビットによって指定される信号ルート上の複数の制御ビットを搬送する。幾つかの実施形態では、制御バスは、データ・バスとは別個の物理ラインを備えることができる。他の実施形態では、制御バスは、別個のプロトコルを有する同じ物理ラインを使用して、または、時分割手順で実装することができ、且つ、データ・バスを備えた共用ハードウェア上で実行する仮想バスとして実装することができる。
【0072】
バスは、転送されるデータの粒度が異なる。一実施形態では、ベクトル・バスがそのペイロードとして16バイト(=128ビット)のデータを含むチャンクを搬送することができる。スカラ・バスは32ビットのペイロードを持つことができ、スカラ・オペランドまたは制御情報を搬送することができる。制御バスは、トークン及び他の信号等の制御ハンドシェイクを搬送することができる。ベクトル・バスとスカラ・バスはパケット交換が可能であり、各パケットの宛先を示すヘッダと、パケットが順不同で受信されたときにファイルを再構成するために使用できるシーケンス番号等のその他の情報を含む。各パケットヘッダには、宛先スイッチ・ユニットの地理的座標(例:アレイ内の行と列)を識別する宛先識別子と、宛先ユニットに到達するために使用される宛先スイッチ上のインタフェースを識別するインタフェース識別子(例:北、南、東、西等)を含めることができる。制御ネットワークは、例えば、デバイス内のタイミング回路に基づいて回路を切り替えることができる。構成ロード/アンロード・コントローラは、128ビットの構成データのチャンクごとにヘッダを生成できる。ヘッダは、ヘッダバス上で、構成可能ユニットのアレイ内の各構成可能ユニットに送信される。
【0073】
一例では、128ビットのデータのチャンクが構成可能ユニットへのベクトル入力としてチャンクを提供するベクトル・バス上で送信される。ベクトル・バスには、128本のペイロードラインと、一組のヘッダラインを含めることができる。ヘッダには、チャンクごとに、シーケンスIDを含めることができ、それは、以下を含み得る:
・ チャンクがスクラッチパッド・メモリか構成ストアデータかを示すビット。
・ チャンク番号を形成するビット。
・ 列識別子を示すビット。
・ 行識別子を示すビット。
・ 構成要素識別子を示すビット。
【0074】
ロード動作の場合、構成ロード・コントローラは、N-1から0までの順序で、N個のチャンクを構成可能ユニットに送信することができる。この例では、6つのチャンクが、チャンク5->チャンク4->チャンク3->チャンク2->チャンク1->チャンク0の最上位ビット・ファーストの順序で送信される(この最上位ビット・ファーストの順序は、チャンク5がアレイ構成ロード・コントローラからの分配シーケンスのラウンド0に分配されることに注意する)。アンロード動作の場合、構成アンロード・コントローラは、静止した構成可能ユニット内の構成データ、状態レジスタ・データ、及び、作業メモリの1つ以上を順にメモリに書き出すことができる。ロード動作及びアンロード動作の両方について、構成可能ユニット内の構成データ・ストア内の構成シリアル・チェーン内のシフトは、LSB(最下位ビット)からMSB(最上位ビット)へ、またはMSBアウト・ファーストである。
【0075】
図2Aは、アレイ・レベル・ネットワーク内の素子を接続する例示的なスイッチ・ユニットを示す。
図2Aの例に示すように、スイッチ・ユニットは、8つのインタフェースを有することができる。スイッチ・ユニットの北、南、東、及び西インタフェースは、スイッチ・ユニット間の接続に使用される。スイッチ・ユニットの北東、南東、北西、及び南西インタフェースはそれぞれ、PCUまたはPMUインスタンスへの接続を行うために使用される。各タイル象限内の2つのスイッチ・ユニットは、複数のアドレス生成(AG)ユニットと、複数のアドレス生成ユニットに接続された結合ユニット(CU)とを含むアドレス生成ユニット及び結合ユニット(AGCU)への接続を有する。結合ユニット(CU)はAG間を調停し、メモリ・リクエストを処理する。スイッチ・ユニットの8つのインタフェースのそれぞれは、ベクトル・インタフェース、スカラ・インタフェース、及び、ベクトル・ネットワーク、スカラ・ネットワーク、及び制御ネットワークと通信するための制御インタフェースを含むことができる。
【0076】
構成後のマシンの実行フラグメントの実行中に、データは、アレイ・レベル・ネットワーク上の1以上のスイッチ・ユニットのベクトル・バス及びベクトル・インタフェースを使用して、1以上のユニットスイッチ及びユニットスイッチ間の1以上のリンクを介して構成可能ユニットに送信することができる。
【0077】
一実施形態では、構成可能ユニットは、構成ロード処理でロードされるか、または構成アンロード処理でアンロードされるユニット構成ファイルを保持する構成レジスタ及びステータス・レジスタを含む。レジスタは、シリアル・チェーンで接続でき、シリアル・チェーンを介してビットをシフトする処理を通じてロードできる。幾つかの実施形態では、並列または直列に配置された2以上のシリアル・チェーンがあってもよい。構成可能ユニットが、例えば、1つのバス・サイクルで128ビットの構成データを受信すると、構成可能ユニットは、このデータを、1サイクル当たり1ビットのレートで、そのシリアル・チェーンを介してシフトする。ここで、シフト・サイクルは、バス・サイクルと同じレートで実行することができる。構成可能ユニットが、ベクトル・インタフェースを介して受信された128ビットのデータを有する128の構成ビットをロードするのに、128シフト・サイクルを要する。
【0078】
タイルの構成前に、構成ファイルまたはビットファイルを、同じベクトル・バスを使用して、アレイ・レベル・ネットワーク上の1以上のスイッチ・ユニットのベクトル・バス及びベクトル・インタフェースを使用して、1以上のユニットスイッチと、ユニットスイッチ間の1以上のリンクとを介して、構成可能ユニットに送信することができる。例えば、構成可能ユニットPMU241に特有のユニットファイル内の構成データのチャンクは、PMU241に、アドレス生成AG内のロード・コントローラとスイッチ・ユニット211の西(W)ベクトル・インタフェースとの間のリンク220、及びスイッチ・ユニット211の南東(SE)ベクトル・インタフェースとPMU241との間のリンク231を介して、送信することができる。制御バリア・ネットワークのための構成データは、関連する構成可能ユニットのための構成データに含めることができ、または他の構成データ構造を介して提供することができる。
【0079】
構成可能ユニットは、複数のメモリ・インタフェースを介してメモリとインタフェースする。メモリ・インタフェースのそれぞれには、幾つかのAGCUを使用してアクセスできる。各AGCUは、オフチップ・メモリのリクエストを生成するための再構成可能スカラ・データパスを含む。各AGCUには、送信するコマンド、データ、及び、オフチップ・メモリからの受信応答をバッファするためのFIFO(データを編成するための先入先出バッファ)が含まれている。
【0080】
構成ファイルは、構成可能ユニット内の実行フラグメント、相互接続構成、及び制御バリア・ネットワーク構成を含む特定のデータ処理動作の目的のために、EFRG、静止/バリア・ロジック・ユニット及び制御バスを含むタイルの構成を指定するためにロードすることができる。構成ファイルのロード及びアンロードを調整するための技術は、シャア他による、2018年11月21日出願の米国特許出願第16/197,826号「再構成可能データ・プロセッサの構成ロード」に記載されており、当該出願は、参照により本明細書に完全に組み込まれる。
【0081】
図3は、データ・ネットワークが除去されたタイルの一部(
図2の右上の部分)を示し、静止/バリア・ロジック・ユニット間の信号ルートを形成するために使用可能な構成可能相互接続を含む制御バスの一部を示す。アレイの図示された部分における複数の構成可能なユニットは、スイッチS(例えば、350)、PMU(例えば、351)、PCU(例えば、352)、AG(354)及びCU(355)を含む。静止/バリア・ロジック・ユニット(例えば、370)は、アレイ内の構成可能ユニットに含まれる。この例では、スイッチS及び結合ユニットCUを除くすべての構成可能ユニットが静止/バリア・ロジック・ユニットを含む。他の例では、静止/バリア・ロジック・ユニットがアレイ内の2以上の構成可能ユニットに接続される例、及び制御バリア・ロジック・ユニットがすべての構成可能ユニットに接続される例(例えば、図示の例ではS型及びCU型ユニットを含む)を含む、制御バリア・ロジック・ユニットの様々な分配を利用することができる。静止/バリア・ロジック・ユニットは、制御信号及びトークンの交換のために接続されているか、または、構成可能ユニットが割り当てられる実行フラグメントの動作中に構成ファイルによって構成可能ユニットにそのように接続されるように構成可能である場合、アレイ内の構成可能ユニットに関連付けられる。
【0082】
構成可能相互接続は、水平導体(例えば、361)が交差する垂直導体(例えば、360)のグリッドによって示される。スイッチボックス(例えば、362)は、各交差部で垂直導体と水平導体内の特定の線または線の組を相互接続するように構成データによって設定される。同様に、構成可能ユニットの各々は、水平及び垂直導体内の特定のラインに接続するように構成することができる構成可能相互接続を使用してルーティングされる制御信号のための入力及び出力(図示せず)を含むことができる。
【0083】
この実施形態では、静止/バリア・ロジック・ユニット(例えば、370)のそれぞれは、相互接続の水平導体内の特定のラインへの接続のために構成可能である複数の入力及び出力(例えば、371)を含む。図では、構成可能相互接続内の静止/バリア・ロジック・ユニット間の接続が、構成可能相互接続内の水平導体で行われる。この図は、構成可能相互接続、及び静止/バリア・ロジック・ユニット内の制御ネットワーク或いは静止/バリア・ロジック・ユニットと関連している制御ネットワークを用いて作成できる構成可能な接続の実施態様及び分配について、如何なる限定も示唆していない。
【0084】
構成可能なスイッチは、一般に、静止/バリア・ロジック・ユニットのための構成ファイルのビットを記憶するレジスタに接続された制御入力を有するパス・ゲートを使用して実施することができる。幾つかの実施形態では、構成が、静止と他の特定データ処理動作をサポートするために実装された制御バリア・ネットワークを確立し、データ処理動作をサポートするタイルの構成可能ユニット間に分散される実行フラグメントの制御をサポートするために、静止/バリア・ロジック・ユニットの入出力間におけるデータ処理動作、或いは実行フラグメントの実行を通して持続的な静的ルートを形成する。他の実施形態では、構成が、プログラムの実行フェーズに従って、または、制御フロー述部(if-then-else構成)の結果として、または実行フラグメントの制御フロー依存シーケンスを表す他の動的入力依存動作の結果として、変化する動的ルートを形成することができる。
【0085】
構成可能ユニットのセットを規定する1または複数の構成可能ユニットを含むEFRGに、実行フラグメントを割り当てることができ、該セットは、タイル全体に空間的に分散された多数のメンバを有することができる。空間的な分散は、バリアント待ち時間、各ユニットにおけるバリアント・ジョブ、バリアント依存性等のために、EFRG内のユニット間の非同期動作という結果になり得る。
【0086】
例えば、実行フラグメントは、1または複数のPMU及び1または複数のPCUを含む構成可能ユニットのセット(例えば、380)に割り当てることができる。また、実行フラグメントは、1または複数のAGまたはAGCU、1または複数のPMU及び、1または複数のPCUを含む構成可能ユニットのセットに割り当てることができる。構成可能ユニットのセット内の構成可能ユニットのうち、幾つかのユニットは入力のプロデューサとして構成され、他のユニットはコンシューマとして構成される。例えば、実行フラグメントに割り当てられた構成可能ユニットの1つのセットは、コンシューマとして作用する1つのPCUに入力を提供するプロデューサとして作用する2つのPMUを含むことができ、その出力は、第3のPMUまたはPCU上のメモリに格納することができる。静止ロジック及び、制御バリア・ネットワークは、静止のために、特定の実行フラグメントに割り当てられた各セット内の構成可能ユニットをリンクするように構成することができる。
【0087】
図4は、パターン計算ユニット(PCU)等の例示的な構成可能ユニット400を示すブロック図である。構成可能ユニットのアレイ内の構成可能ユニットは、対応する構成可能ユニットと関連する静止/バリア・ロジック・ユニット475に特有の構成データの複数のチャンク(または他のサイズのサブファイル)を含むユニットファイルを格納するための構成データ・ストア420(例えば、シリアル・チェーン)を含む。構成可能ユニットのアレイ内の構成可能ユニットはそれぞれ、ユニット構成ロード処理を実行するために、ライン422を介して構成データ・ストア420に接続されたユニット構成ロード/アンロード・ロジック440を含む。ユニット構成ロード処理は、バス・システム(例えば、ベクトル入力)を介して、構成可能ユニットに特有のユニットファイルのチャンクを受信することと、受信したチャンクを構成可能ユニットの構成データ・ストア420にロードすることとを含む。ユニット構成ロード処理は、
図5を参照して更に説明される。
【0088】
この例での複数の構成可能ユニット内の構成可能ユニットにおける構成データ・ストア420は、ラッチのシリアル・チェーンを備え、ラッチは構成可能ユニット内のリソースの構成を制御するビットを格納する。構成データ・ストアのシリアル・チェーンには、構成データ用のシフト・レジスタ・チェーンと、直列に接続された状態情報及びカウンタ値用の第2のシフト・レジスタ・チェーンを含めることができる。
【0089】
構成可能ユニットは、スカラ入力/出力、ベクトル入力/出力、及び制御入力/出力の3つの対応する入力及び出力(I/O)のセットを使用して、スカラ・バス、ベクトル・バス、及び制御バスとインタフェースすることができる。スカラI/Oは、データの単一ワード(32ビット等)の通信に使用できる。ベクトルI/Oは、ユニット構成ロード処理において構成データを受信し、構成後の動作中に複数のPCU間の長いパイプラインを介してデータを送受信するような場合に、データのチャンク(例えば、128ビット)を通信するために使用することができる。制御I/Oを使用して、構成可能ユニットの実行の開始または終了等の制御信号を通信することができる。制御入力は制御ブロック470によって受信され、制御出力は制御ブロック470によって供給される。
【0090】
各ベクトル入力は、1以上のベクトルFIFOを含むことのできるベクトルFIFOブロック460内のベクトルFIFOを使用してバッファリングされる。各スカラ入力は、スカラFIFO450を使用してバッファリングされる。入力FIFOを使用することで、データのプロデューサとコンシューマ間のタイミングを切り離し、入力遅延不整合に対してロバストにすることによって、構成可能ユニット間の制御ロジックを単純化する。
【0091】
入力構成データ410は、ベクトル入力としてベクトルFIFOに供給され、次いで構成データ・ストア420に転送される。出力構成データ430は、ベクトル出力を使用して構成データ・ストア420からアンロードすることができる。
【0092】
アレイは、ロード/アンロード・コマンドが完了した時を示すためと、以下に説明する静止準備信号を通信するためにデイジー・チェーン接続された完了/静止準備バスを使用する。マスタAGCUは、デイジー・チェーン接続されたコマンド・バスを介して、構成可能ユニットのアレイ内の構成可能ユニットにプログラム・ロード及びアンロード・コマンドと静止を送信する(
図10のS0からS1への遷移)。
図4の例に示すように、デイジー・チェーン接続された完了/静止準備バス491及びデイジー・チェーン接続されたコマンド・バス492がデイジー・チェーン・ロジック493に接続されており、これはユニット構成ロード/アンロード・ロジック440と通信する。デイジー・チェーン・ロジック493は、以下に説明するように、ロード/アンロード完了、及び、静止準備状態ロジックを含むことができる。デイジー・チェーン接続された完了バスについては、以下で更に説明する。コマンド・バス及び完了/静止準備バスの他のトポロジも明らかに可能であるが、ここでは説明しない。
【0093】
本例での構成可能ユニットは、ブロック480内に複数の再構成可能データパスを含む。構成可能ユニット内のデータパスは、マルチステージ(ステージ1・・・ステージN)、再構成可能SIMD(単一命令、マルチデータ)パイプラインとして編成することができる。構成可能ユニットの構成シリアル・チェーンにプッシュされるデータのチャンクには、構成可能ユニットの各データパスの各ステージの構成データが含まれる。構成データ・ストア420内の構成シリアル・チェーンは、ライン421を介してブロック480内の複数のデータパスに接続される。
【0094】
図示された例におけるPCUは、データ処理動作の実行フラグメントの部分を実行するように設計され、データ処理動作はアプリケーションにおける単一の最も内側の並列パターン、または静止及び制御バリア・ネットワークを使用する制御に適した他のパターンを備えることができる。PCUデータパスは、マルチステージ再構成可能SIMDパイプラインとして編成することができる。この設計は、各PCUが高い計算密度を達成することを可能にし、レーンにわたるループレベル並列性とステージにわたるパイプライン並列性の両方を利用する。各SIMDレーンの各ステージ(ステージ1・・・ステージN)は、機能ユニット(FU)及び関連するパイプライン・レジスタで構成することができる。FUは、例えば、浮動小数点演算や整数演算のサポートを含み、32ビットワードレベルの算術演算やバイナリ演算を実行可能である。単一のパイプライン・ステージ内のFUは、SIMDで動作するので、各ステージは、例示的な実施形態では単一の構成レジスタのみを必要とする。各FUからの結果は、その関連するレジスタに書き込まれる。
【0095】
各レーンのパイプライン・レジスタは、同じレーン内のステージ間でライブ値が伝播することを可能にするために、パイプライン・ステージにわたって一緒に連鎖することができる。FU間のクロス・レーン通信は、2つのタイプのPCU内ネットワークを使用して捕捉することができる。これらは、複数のレーンからの値を単一のスカラに低減することを可能にする縮小ツリーネットワークと、ステンシル・アプリケーションでの再利用を活用するために、ステージにわたるスライディング・ウィンドウとしてPRを使用することを可能にするシフト・ネットワークである。どちらのネットワークも、ハードウェアのオーバーヘッドを最小限に抑えるために、PR 内で専用レジスタを使用する。
【0096】
各ベクトルI/O(例えば、ベクトルFIFO460)は、PCU内のレーン当たり1ワードの通信を可能にし、PMU内のスクラッチパッドへの読取り及び書込み、及び複数のPCU間の長いパイプラインを介した中間データの伝送等の場合に使用される。入力FIFOを使用することは、データのプロデューサとコンシューマとを切り離し、入力遅延不整合に対してロバストにすることによってPCU間制御ロジックを単純化する。FIFO450、460は、制御ブロック470及びユニット内の他の回路に接続され、必要な入力データがFIFO内で利用可能であるかどうか等、実行フラグメントの状態を示すために使用可能な、FIFO空信号またはFIFO非空信号等のステータス信号を生成することができる。
【0097】
制御I/O(制御入力、制御出力)は、制御ブロック470に接続され、PCUの実行の開始または終了等の制御信号を通信するために、または背圧を示すために使用される。
【0098】
カウンタ471の再構成可能チェーンは、実行フラグメントの状態を示すために使用することができ、構成可能ユニットの要素間の実行を調整するために使用することができるパターン反復インデックスとステータス信号及び制御信号を生成する。カウンタ・チェーン471は、例えば、ループまたは幾つかの反復数を含むループ内の反復等の実行フラグメントのサイクル数、静止境界、及び、実行フラグメント内のループが完了したかどうか(ループの全サイクルが実行された)等の実行フラグメントの状態を示すために使用することができるカウンタ完了信号を生成することができる。
【0099】
PCU内の実行フラグメントの実行は、制御ブロック470がカウンタの内の1つをイネーブルにするときに有効にできる。アプリケーションの制御及びデータ依存性に基づいて、制御ブロックは、PCU実行をトリガするために、ローカルFIFO及びグローバル制御入力の両方からの複数のステータス信号を結合するように構成することができる。制御ブロック470は、ステート・マシンのための再構成可能な組合せ論理及びプログラミング可能なアップダウン・カウンタを使用して実装される。
【0100】
静止/バリア・ロジック475は、構成可能ユニットのこの例に含まれる。静止/バリア・ロジック475は、制御ブロック470の一部であってもよいし、デバイス上の別個のブロックとして実装されてもよい。静止/バリア・ロジック475は、制御入力及び制御出力に連結される。また、静止/バリア・ロジック475は、制御ブロック470及びカウンタ・チェーン471に連結され、上述したように構成されたアレイ・ワイド静止ロジックと制御バリア・ネットワークをサポートしてステータス信号及び制御信号を交換する。
【0101】
パターン・メモリ・ユニット(例えば、PMU)は、PCUで使用されるバス・インタフェースと共に、アドレス計算と他のスカラ計算用の再構成可能スカラ・データパスに連結されたスクラッチパッド・メモリを含むことができる。PMUは、再構成可能ユニットのアレイ全体にオンチップメモリを分配するために使用することができる。一実施形態では、PMU内のメモリ内のアドレス計算がPMUデータパス上で実行され、コア計算がPCU内で実行される。PMUは、また、PMUの要素とステータス信号及び制御信号を交換するように構成された静止/バリア・ロジック・ユニットを含むことができ、静止のため、及び、PMU内の実行フラグメントを有効にするために使用可能である。更に、この例におけるアドレス生成器AGは、AGの要素とステータス信号及び制御信号を交換するように構成された静止/バリア・ロジック・ユニットを含むことができ、静止のため、及び、AG内の実行フラグメントを有効にするために使用可能である。
【0102】
図5は、本明細書で説明されるような構成可能な静止/バリア・ネットワークを形成するために構成可能ユニットのアレイにおいて使用可能な静止/バリア・ロジック・ユニットの一例を示す。
図5のような複数のロジック・ユニットを使用して、アレイ内の構成可能ユニット内に、またはそれに関連して、制御バリア・ネットワークを再帰的に構築して、複雑なEFRGをサポートすることができる。
図5の例は、例えば、
図4の静止/バリア・ロジック475として使用可能であり、
図5の静止/バリア・ロジック・ユニットは、制御バス(
図3の構成可能相互接続)に接続される入力(例えば、501,551,557)及び出力(例えば、502,561)と、上述の例のPCU、PMU、AG等の関連する構成可能ユニットとを含む。
【0103】
静止/バリア・ロジック・ユニットは、この例では、複数のアップ/ダウン・カウンタUDC(例えば、510)を備えるトークン・ストアを含む。他の実施形態では、セット/リセットSRラッチ等の様々なタイプのラッチを使用して、トークン・ストアを実装することができる。更に他の実施形態では、FIFOバッファの様々な実施態様を使用して、トークン・ストアを実装することができる。UDCの各々は、インクリメント入力(例えば、511)及びデクリメント入力(例えば、512)を有する。インクリメント入力を使用すると、UDCに格納されているロジック0をロジック1に変更すること、または換言すると、トークン・ストアに値を設定することができる。デクリメント入力を使用すると、UDCに格納されているロジック1をロジック0に変更すること、または換言すると、トークン・ストアの値をリセットすることができる。UDCは、1ビットカウンタとして構成することも、複数ビットカウンタとして構成することもできる。
【0104】
トークン・ストアは、この例では複数の構成可能クロスバー・スイッチを含む構成可能入力回路に連結される。構成可能入力回路のステータス・クロスバー550は、アレイ内の構成可能ユニット内の実行フラグメントの状態を示すために使用可能な信号に接続された入力551を有する。この例では、ステータス信号は、実行フラグメントの状態を示すために使用することができる、関連する構成可能ユニット内の複数のカウンタからの静止境界カウンタ完了信号を含むことができる。ステータス・クロスバー550は、インクリメント・クロスバー530及びデクリメント・クロスバー540に接続可能な出力552,553を含む。
【0105】
構成可能入力回路のインクリメント・クロスバー530は、トークン・ストア内のUDCの各々にインクリメント信号を供給し、制御バスの構成可能相互接続に接続された入力557と、ステータス・クロスバー550の出力に接続された入力とを有する。従って、各UDCは、ステータス・クロスバー550及び構成可能相互接続の入力557からの出力の構成可能な選択に基づくインクリメント信号を有する。インクリメント・クロスバーは、また、後述するように、バリア・ロジック520によって生成されたライン552上のバリア・トークンを受信するように接続された入力を有する。
【0106】
構成可能入力回路のデクリメント・クロスバー540は、トークン・ストア内の各UDCにデクリメント信号を供給し、制御バスの構成可能相互接続に接続された入力558(または複数の入力)と、ステータス・クロスバー550の出力552,553に接続された入力とを有する。従って、各UDCは、ステータス・クロスバー550及び構成可能相互接続の入力558からの出力の構成可能な選択に基づくデクリメント信号を有する。デクリメント・クロスバーは、また、後述するように、バリア・ロジック520によって生成されたライン552上のバリア・トークンを受信するように接続された入力を有する。
【0107】
静止/バリア・ロジック・ユニットは、トークン・ストア内の信号と、関連する構成可能ロジック・ユニットからのステータス信号との構成可能な組合せに基づいて、関連する構成可能ロジック・ユニットへの接続のために、ライン502上にイネーブル信号を生成する構成可能イネーブル・マスク503を含むイネーブル・ロジック500(ANDツリー)を含む。例えば、ライン502上のイネーブル信号は、実行フラグメントを開始及び停止するためにライン502上のイネーブル信号を利用するPCUのための制御信号を生成するロジックを含み得る、
図4の制御ブロック470に供給することができる。イネーブル・ロジック500への入力は、FIFO非空信号等の、関連する構成可能ユニットからのライン501上のステータス信号を含む。また、イネーブル・ロジック500への入力は、トークン・ストアの出力(例えば、513)を含むことができる。従って、ライン502上のイネーブル信号は、トークン・ストアの出力の構成可能な組合せに基づいて生成することができる。また、ライン502上のイネーブル信号は、トークン・ストアの出力と、関連する構成可能ユニットからのステータス信号との構成可能な組合せに基づいて生成することができる。
【0108】
静止/バリア・ロジック・ユニットは、トークン・ストアに記憶されたライン513上の信号の構成可能な組合せに基づいてライン522上にバリア・トークンを生成する構成可能なバリア・マスク521を含むバリアトークン・ロジック520を含む。ライン522上のバリア・トークンは、例えば、トークン・ストアをリセットするために使用可能な、デクリメント・クロスバー540へのフィードバック信号としてフィードバックされる。また、ライン522上のバリア・トークンは、この例では、インクリメント・クロスバー530への入力として利用され、トークン・ストアに値を設定するための条件として使用可能である。バリア・トークンは、構成ファイルに従って、プロデューサ・バリア(p_barrier)トークンまたはコンシューマ・バリア(c_barrier)トークンとして作用し得る。
【0109】
静止/バリア・ロジック・ユニットは、出力クロスバー560を含む。この例における出力クロスバーへの入力は、ライン522上のバリア・トークンと、PバリアまたはCバリアと、ステータス・クロスバー550によって出力されるステータス信号とを含む。他の入力は、他の実施態様と同様に、出力クロスバー560に提供することができる。出力クロスバーは、ライン522からのバリア・トークン及び他の信号を、構成可能相互接続上の選択されたライン561に印加するように構成可能である。構成可能相互接続上の選択されたライン561は、構成可能ロジック・アレイの制御バリア・ネットワーク内の別の静止/バリア・ロジック・ユニットの入力(例えば、入力557)として、バリア・トークンを供給する信号ルート内に構成され得る。構成可能相互接続上の選択されたライン561は、構成可能ロジック・アレイの制御バリア・ネットワーク内の別の静止/バリア・ロジック・ユニットの入力(例えば、入力557)として、構成可能ユニットの1つからステータス信号(例えば、信号552,553)を供給する信号ルート内に構成され得る。
【0110】
図5のような静止/バリア・ロジック・ユニットを利用すると、バリア動作は以下のように動作する。各ユニットは、UDCをインクリメントできる全ての信号にわたるバリアを実装するように構成することができる。これは、関連する構成可能ユニットの外部から供給される制御バスからの外部制御入力と、関連する構成可能ユニットの内部から供給されるカウンタ完了信号のような内部ステータス信号とを含む。これらの信号のサブセットにわたるバリアを実施するために、構成ファイルは、サブセット内の各信号についてトークン・ストア内に1つのゼロ初期化UDCを確保する。クロスバーは、必要な信号を、インクリメント・クロスバー530を介して入力をインクリメントするそれらの各UDCにルーティングするように構成されている。次に、バリア・マスクが、確保されたUDCを選択するように構成される。マスクは、ANDツリーに関係するUDCを選択する。ANDツリーの出力は、1ビットのバリア・トークンで、例えば、マスク内のすべてのUDCの値がゼロより大きい場合にハイになる。バリア・トークンは、デクリメント・クロスバー540においてライン522を選択することにより、バリアに関係しているすべてのUDCをデクリメントするように構成することができる。これは、バリア信号が入力トークンのすべてのセットに対して1サイクルだけハイであり、従って、1つの出力トークンを生成することを保証するために使用することができる。他の実施形態では、その目的のために異なる信号を使用することができる。また、バリア・トークンは、すべてのビットではなく、トークン・ストア内の1ビットのみ、または一部のビットのみをリセットするために使用することができる。結果として生成されたバリア・トークンは、「出力」クロスバー560をプログラミングすることによって、制御出力上に送出される。次いで、このトークンは、プログラムによって必要とされるように、例えば、次の計算ステージへの入力、または、次のバリア・ノードへの入力等に使用することができる。場合によっては、バリア・トークンもローカルにノードに送信する必要がある。この使用事例を促進するために、バリア・トークンは、他のUDCをインクリメントできるインクリメント・クロスバー530への入口でもある。この構成では、バリア・トークンは、トークン・ストアをリセットする目的で使用される。
【0111】
これは、リソースをより良く利用するためにバリア・トークンのコンシューマに近いバリアを実装するソフトウェアに最大限の柔軟性を提供する。
【0112】
構成可能ユニットのアレイ内の複数のソースからの制御トークンは、しばしば、バリアで同期される必要があり、そこでは、単一のトークン(制御パルス)が各ソースから1つのトークンを受信した後に生成され、再帰的で階層的な制御ネットワークを可能にする。
【0113】
図6は、アレイ内の構成可能ユニット(またはより一般的には処理ユニット)のうちの1つの一部であり得るか、または、論理的シグナリングの意味で、それに関連し得る静止ロジックを示す。一例では、静止ロジックが、
図4に示されるバリア・ロジック、制御コマンド・デイジー・チェーン、及び、完了/静止デイジー・チェーン回路に結合される。
図6に示される静止ロジックは、スキュー・カウンタを含む。スキュー・カウンタは、プロデューサとコンシューマとの間のループ反復スキューまたは静止境界スキューを追跡するために使用される専用カウンタとすることができる。深いパイプラインを有するループでは、またはプロデューサとコンシューマが物理的に離れているとき、プロデューサはコンシューマより先に実行または作動し、スキューを生成する可能性がある。
【0114】
複数の構成可能ユニットを含むEFRGでは、QBがEFRG内の構成可能ユニットの幾つかの間で分散された構成可能状態等のイベントの組合せによって規定され得る。所与の実施態様では、EFRGの構成可能ユニットの幾つかをプロデューサとして構成でき、幾つかをコンシューマとして構成できる。実行フラグメントのQBは、EFRG内のプロデューサにおける異なるイベントの関数であるイベントを含むことができる。EFRG内のコンシューマは非同期に動作し、プロデューサによって提供される信号及び、データに応答するか、またはそれを使用することができる。コンシューマにおけるイベントは、プロデューサからの信号またはデータの消費を信号で送信する。
【0115】
図6では、QBに対するプロデューサにおけるイベントを示す信号がP_QB_xで示され、ここで、xはイベント信号のソースの指示子であり、図示された例では0からNに進む。P_QB_x信号は、
図7 に示すように生成できる。この例では、P_QB_x 信号の構成可能な組合せを使用して、EFRG内のQBの検出を示す信号EF_QBを生成し、静止制御信号と組み合わせて信号を生成する。したがって、静止ロジックは、EFRG内の少なくとも1つの処理ユニット内のループ・カウンタに応答して、静止境界を検出する。信号C_BARRIERは、以下の
図8によって示されるように、C_QB_xで示されるQBに対するコンシューマにおけるイベントの組合せに基づいて、EFRG内のコンシューマに関連付けられた静止/バリア・ロジックにおいて生成される。ここで、xはイベント信号のソースの指示子であり、図示の例では0からMに進む。M及びNは、EFRGの特定の構成に応じて、同じであっても異なっていてもよい。
【0116】
P_BARRIER信号は、この実施態様では、EFRG中のプロデューサがQBを超えて継続することを可能にするために使用される。該信号がアサートされていない場合、プロデューサはQBを超えて進むことができない。コンシューマは、プロデューサが次のQBを開始する前に、所与のQBに対して完了することができず、EFRG内にスキューの可能性を生じさせる。
【0117】
基本動作では、
図6のスキュー・カウンタがP_BARRIER信号によってインクリメントされ、C_BARRIER信号によってデクリメントされる。したがって、スキュー・カウンタは、EFRGのプロデューサとコンシューマとの間の静止境界(P_BARRIERによって表される)の数を追跡する。スキュー・カウンタは、プロデューサからコンシューマへの進行中のデータ・パケットまたはトランザクションを検出するメカニズムとしても機能する。
【0118】
図示されたロジックでは、アレイ内のマスタAGCUからのコマンドAGCU_CMDが、コマンド・デイジー・チェーンを介してデコーダ601に配信される。マスタAGCUは、実行時に外部プロセッサ上のホスト制御プログラムから受信した信号によって示されるように、アレイの外部で起った外部イベントに応答して、デイジー・チェーンを使用してこのコマンドを分配することができる。また、マスタAGCUは、アレイの現構成によって実施され、制御バス上、または、別の方法でマスタAGCUに配信されるマシンによって生成される信号等によって示されるような、アレイ内で発生する内部イベントに応答して、デイジー・チェーンを使用してこのコマンドを分配することができる。静止コマンドの場合、フリップフロップ602は、静止動作を開始するためにフラグQ_RCVを記憶するように設定される。このフラグは、例えば、マスタAGCUからの静止コマンドではない任意の後に受信されるコマンドに応答して、または制御バリア・ロジック内のトークンを使用して、リセット信号を生成することを含む、多くの方法でリセットされ得る。フリップフロップ602の出力は、マルチプレクサ604及び、構成ストア605を備える静止準備デイジー・チェーン・ロジックを可能にするゲート603に接続される。構成ストア605は、静止参加Q_PCPTフラグを格納する。静止参加フラグは、静止動作に参加するために必要な静止ロジックに関連付けられた構成可能ユニットに対して設定される。例えば、静止動作では、プロデューサとして作用する構成可能ユニットのみが参加することを要求され得る。静止参加フラグを使用すると、静止ために構成リソースを効率的に使用できる。
【0119】
ゲート603への第2の入力は、構成可能ユニットの対応するセットに割り当てられた静止境界を越える実行フラグメントの進行を追跡する論理回路から提供される。この例では、素子633によって示されるように、スキュー・カウンタSKEW UDC 632の出力がゼロに等しいとき、第2の入力が提供される。
【0120】
また、フリップフロップ602は、ゲート630への反転入力として提供され、ロジックが実行フラグメントの実行の進行を追跡することを可能にする。ゲート630への第2の入力は、バリア・マスク及び、ANDツリーpの出力EF_QBであり、バリア・マスク及び、ANDツリー610は、
図5に示す素子520及び、521を使用して実施できる。バリア・マスク及び、ANDツリー610はEF_QB信号を生成するように構成することができる。
図6の簡略化された図では、バリア・マスク及び、ANDツリー610への入力は、UDC620~622において信号P_QB_0~P_QB_Nを受信するように構成されたトークン・ストアの素子を含み、これはプロデューサ構成可能ユニットの関連するセットに対し実行フラグメント静止境界を信号で知らせる。更に、トークン・ストアは、例えばマスタAGCU内のマスタ・ステート・マシンによってアレイ内の構成可能ユニットに配信されるUDC611内のスタート・トークンと、他のトークン及び、制御信号とを含むことができる。バリア・マスク及び、ANDツリー610は、特定の実行フラグメントに必要なプロデューサのための構成静止ロジックに応答して、ゲート630への入力としてEF_QBを生成するように構成することができる。
【0121】
ゲート630の出力は、ゲート631への入力として提供され、ゲート631の出力は、SKEW・UDC632の増分入力に印加される。SKEW・UDC632のデクリメント入力は、制御入力クロスバー640によって提供され、制御入力クロスバー640は、静止する目的で、制御バリア・ネットワークのライン641上でコンシューマ・バリア・トークンC_BARRIERを受信するように構成される。
【0122】
SKEW・UDC632がフル(満状態)になると、ゲート631を無効にする信号がアサートされる。SKEW・UDC632のサイズは、様々な実施形態で固定または構成可能であり、実行フラグメントの静止境界のユニットにおいて最大スキューを設定する。ユニット間のスキューは、このタイプのロジックを使用して、幾つかの構成では静止境界以外のスキュー・ユニット上で制御することができる。
【0123】
ゲート631の出力は、記憶された値をクリアまたはデクリメントするために、トークン・ストアUDC620~622及び、611へのフィードバックとしても提供される。また、ゲート631の出力は、関連する構成可能ユニットのセットに割り当てられた実行フラグメントのために、制御バリア・ネットワークのライン651上のP_BARRIERとして信号を出力するように構成することができる制御出力クロスバー650に提供される。
【0124】
動作において、プロデューサとして作用する構成可能ユニットが実行フラグメント内の静止境界に到達すると、P_QB_x信号がトークン・ストアに印加される。すべてのプロデューサがP_QB_xを印加したとき、フリップフロップ602の出力がローである限り、プロデューサ・バリア信号P_BARRIERがライン651に印加され、SKEW・UDC632は、フルでない限りインクリメントされる。C_BARRIERがライン641上で受信されると、SKEW・UDC632がデクリメントされる。したがって、SKEW・UDC632を使用して、非同期に作動する構成可能ユニットのセットの間の静止境界を越える実行フラグメントの進行を追跡することができる。
【0125】
SKEW・UDC632がフルでなく、フリップフロップ602の出力がローである限り、ゲート631の出力はEF_QB信号に等しく、P_BARRIER信号が生成される。この信号は、プロデューサがEF_QB信号によって通知されたQBを超えて次のセグメントのルートに進むことを可能にする。フリップフロップ602の出力がハイである場合、ゲート631の出力は論理0にセットされ、P_BARRIERはアサートされない。これにより、プロデューサがEF_QBによって通知されたQBを超えて進むのが阻止され、静止の発生が可能となる。
【0126】
フリップフロップ602の出力がハイであるとき、ロジックはライン651上のP_BARRIERのアサートを停止し、SKEW・UDC632のインクリメントを停止する。ゲート603がフリップフロップ602の出力によって有効になり、Q_PCPTビットがセットされている間にSKEW・UDCがゼロにデクリメントされる(633)とすぐに、静止準備Q_RDY信号がライン652上で論理0から論理1にフリップする。実行フラグメントのQ_RDY信号は、この実施形態では、デイジー・チェーン内のアレイ内の前のユニットからの静止準備Q_RDY信号の論理的組合せに基づいて、完了/静止デイジー・チェーン上のアレイ静止コントローラに配信することができる。Q_PCPTビットがセットされていない場合、Q_RDY信号は論理1のままであり、デイジー・チェーンを参加及び、非参加構成可能ユニットにわたって接続されたままにする。
【0127】
図7は、ライン651からP_BARRIERトークンを消費し、関連する構成可能ユニット上で実行される実行フラグメントの部分のためにライン741上にプロデューサ静止境界信号P_QB_xを生成するプロデューサとして構成された構成可能ユニットに関連するロジックを示す。P_QB_x信号は、ORツリー及び、マスク750、並びに
図7のカウンタ760~762の構成によって表される各実行フラグメント・リソース・グループ内のプロデューサとして使用される構成可能ユニットの構成状態のセットを検出すると生成される。ロジックは、実行フラグメントの静止境界を越えてEFの次のセグメントのルートに進むか、またはEF内の最後のQBである場合にはEFの開始ルートにラップするために、ライン712上にイネーブル信号を生成する。したがって、QB後のEFのセグメントのルートは、EFの静止点となる。
【0128】
P_BARRIERは、この例では実行フラグメントに対するEFRGのプロデューサ構成要素間の同期バリアである。特定のプロデューサにおけるEFのどのループも、少なくとも1つのP_QB_xを含むことができる。プロデューサ信号P_QB_xは、
図6に示すように、互いに接続されて制御フロー・バリアを形成する。P_QB_x信号を使用してP_BARRIERSの生成に参加するクライアント構成要素は、コンパイル時に静止処理に参加するように構成される。
【0129】
図示の実施形態では、構成可能ユニットは、構成要素の状態を示すことができるカウンタCNTR_0~CNTR_N(760~762)を備えるカウンタ・チェーンを含むか、またはそれに接続するように構成することができる。カウンタ・チェーン内のカウンタは、デバイス上のどこにでも配置することができ、そこから出力を
図7のロジックに配信することができる。幾つかの実施形態では、カウンタ・チェーンは、構成可能ユニットの一部として実装される。カウンタ・チェーン出力は、カウンタ・チェーン内のカウンタの状態の任意の組合せ上で実行フラグメント静止境界信号P_QBを生成するように、構成ファイルによって設定され得るORツリー及び、マスク750に印加される。ORツリー及び、マスク750は、静止境界に対応する状態を信号で送信するために、互いにOR演算されるか、または、別の方法で論理的に結合されるカウンタ及び、カウンタ状態の組合せを選択するように構成可能である。静止境界信号P_QBは、例えば、ループの完了時、または、ループの分割可能な部分で、設定することができる。例えば、多数のN回の反復を有するループは、それぞれM回までの反復のN/Mの静止境界に分割されてもよい。該技術は、MがNの約数であることを要しない。最後の静止境界は、M未満の反復の剰余数を有することができる。この分割及び、剰余ループ反復の操作は、構成可能なORツリーまたは他のタイプのロジックを使用して実施することができる。
【0130】
境界信号P_QBは、QB・UDCトークン・ストア711に結合されたデクリメント・クロスバー730への入力として使用される。QB・UDCトークン・ストア711のインクリメント入力は、インクリメント・クロスバー720によって印加され、該クロスバーは、構成可能ユニットがメンバであるEFRGのためのP_BARRIERを受信する。QB・UDCトークン・ストア711は、制御バリア・ネットワーク内の制御信号及び、バリア信号によってイネーブル・マスク及び、ANDツリー710へ供給される多くのトークン・ストアの1つであり、イネーブル・マスク及び、ANDツリー710は、
図5の素子500及び、503を使用して実施され得る。イネーブル・マスク及び、ANDツリー710の出力は、関連する構成可能ユニットが次の静止境界の前にセグメントのルートでの実行の再開を可能にするためのイネーブル信号である。EFRG内のすべてのプロデューサは、メンバ構成可能ユニットにわたるEFRGの同期を管理するために、同じP_BARRIER信号によって有効にすることができる。
【0131】
境界信号P_QBはまた、制御出力クロスバー740への入力として印加され、P_QB_x信号の1つとしてP_QB_x信号を
図6に記載されたロジックに提供する。
【0132】
図8は、EFRGでコンシューマとして作用する構成可能ユニットに関連する静止ロジックにおいてC_BARRIERトークンを生成するバリア・ロジックの実施態様を示している。C_BARRIERトークンは、実行フラグメント内のコンシューマ構成要素間の同期バリアである。コンシューマとして作用する各構成可能ユニットは、ユニット内で実行されるEFのループまたはループの区分等の各セグメントが、セグメントの出口点に対応する静止境界上に単一のC_QB_xを含むことができるように構成することができる。C_QB_x信号は、
図7に示されるP_QB_x信号を参照して説明された方法で、またはコンシューマ機能に適合された同等の方法で、各実行フラグメント・リソース・グループにおいてコンシューマとして使用される構成可能ユニットのための構成ステータスのセットの検出時に生成され得る。
【0133】
この例では、トークン・ストア810~9のセットが、実行フラグメント内のコンシューマとして作用する構成可能ユニットに関連する静止ロジックからC_QB_x静止境界信号を受信する。
【0134】
マスク及び、ANDツリー800(
図5の素子520及び、521を使用して実施することができる)はC_QB_x信号の構成された組合せの検出時に、ライン801上のEFRGに対してC_BARRIERトークンを生成するように構成される。ライン801上のC_BARRIERトークンは、
図6に示す静止ロジックの部分に提供される。
【0135】
トークン・ストア810~812は、ライン801からのC_BARRIER信号等のライン820上の信号、または他の構成可能な信号に応答して、デクリメントまたはリセットされる。
【0136】
図6~
図8に示す回路は、ロジック・ユニット間の制御バリア・ネットワーク内に信号ルートを形成するように構成可能な制御バスに結合された静止ロジックのロジック・ユニットである。制御バリア・ネットワークは、制御バス及び処理ユニットのアレイに接続された入力及び出力を有する複数のバリア・ロジック・ユニットを備える。バリア・ロジック・ユニットは、EFRGに結合され、EFRGにおいて静止境界を通知する入力のプロデューサからの信号を消費し、プロデューサからの信号に基づいてプロデューサ・バリア・トークンを生成するように構成可能な第1のロジック・ユニット(例えば、
図6~
図7)と、EFRGに結合され、EFRGにおいて静止境界に対するEFRGへの入力の利用を通知する入力のコンシューマからの信号を消費し、コンシューマからの信号に基づいてコンシューマ・バリア・トークンを生成するように構成可能な第2のロジック・ユニット(例えば、
図8)とを含む。静止ロジックは、制御バスに接続するように構成可能な回路を含み、プロデューサとコンシューマとの間の実行フラグメントの進行の差異を追跡するために、プロデューサ・バリア・トークンとコンシューマ・バリア・トークンを受信するように構成可能なスキュー・カウンタを含む。
【0137】
図9は、CGRAプロセッサが2つのタイル(Tile1、Tile2)を有するCGRA(粗粒度再構成可能アーキテクチャ)プロセッサの構成要素の簡略化されたブロック図である。タイルは、バス・システムに接続された構成可能ユニットのアレイを含み、
図2及び
図3に示されるような本例では、アレイ・レベル・ネットワークを含む。バス・システムはまた、タイルを外部I/Oインタフェース905(または任意の数のインタフェース)に接続するトップ・レベル・ネットワークを含む。他の実施形態では、異なるバス・システム構成を利用することができる。各タイル内の構成可能ユニットは、この実施形態におけるアレイ・レベル・ネットワーク上のノードである。
【0138】
2つのタイルの各々は、4つのAGCU(アドレス生成及び合体ユニット)(例えば、MAGCU1、AGCU12、AGCU13、AGCU14)を有する。AGCUは、トップ・レベル・ネットワーク上のノードとアレイ・レベル・ネットワーク上のノードであり、トップ・レベル・ネットワーク上のノードと各タイル内のアレイ・レベル・ネットワーク上のノード間でデータをルーティングするためのリソースを含む。
【0139】
この例でのトップ・レベル・ネットワーク上のノードには、インタフェース905を含む1または複数の外部I/Oインタフェースが含まれる。外部デバイスへのインタフェースは、トップ・レベル・ネットワーク上のノードと、インタフェースに接続された大容量メモリ、ホストプロセッサ、他のCGRAプロセッサ、FPGAデバイス等の外部デバイスとの間でデータをルーティングするためのリソースを含む。
【0140】
タイル内のAGCUのうちの1つは、本例では、マスタAGCUであるように構成され、該マスタAGCUは、アレイ静止コントローラ351と、タイルのための構成ロード/アンロード・コントローラとを含む。他の実施形態では、1つのタイル当たり2以上のアレイ静止コントローラ351を実施することができ、1つのアレイ静止コントローラ351は2以上のAGCUに分散されたロジックによって実施することができる。
【0141】
MAGCU1は、Tile1のためのアレイ静止コントローラ351を含み、MAGCU2は、Tile2のためのアレイ静止コントローラ351を含む。他の実施形態では、アレイ静止コントローラ351は、2以上のタイルの静止制御用に設計し得る。他の実施形態では、単一のタイルの構成のために、2以上のアレイ静止コントローラを設計し得る。また、アレイ静止コントローラ351は、トップ・レベル・ネットワーク及び、アレイ・レベル・ネットワーク上のスタンドアロン・ノードとしてのものを含めて、システムの他の部分に実装することができる。
【0142】
トップ・レベル・ネットワークは、AGCU及び、I/Oインタフェース905を含むトップ・レベル・ネットワーク上の他のノードと同様に、互いに接続するトップ・レベル・スイッチ(911~916)を使用して構築される。トップ・レベル・ネットワークは、トップ・レベル・スイッチを接続するリンク(例えば、L11、L12、L21、L22)を含む。データは、リンク上のトップ・レベル・スイッチ間、及び、該スイッチから該スイッチに接続されているネットワーク上のノードへ、パケット単位で移動する。例えば、トップ・レベル・スイッチ911及び、912はリンクL11によって接続され、トップ・レベル・スイッチ914及び、915はリンクL12によって接続され、トップ・レベル・スイッチ911及び、914はリンクL13によって接続され、トップ・レベル・スイッチ912及び、913はリンクL21によって接続される。リンクは、1または複数のバスと、例えばチャンク・ワイド・バス(ベクトル・バス)を含むサポート制御ラインとを含むことができる。例えば、トップ・レベル・ネットワークは、AXI互換プロトコルに類似した方法で、データの転送のために協調して動作可能なデータ、リクエスト、及び、応答チャネルを含むことができる。AMBA(登録商標) AXI and ACE Protocol Specification, ARM,2017を参照されたい。
【0143】
トップ・レベル・スイッチは、AGCUに接続することができる。例えば、トップ・レベル・スイッチ911、912、914及び915は、タイルTile1内のMAGCU1、AGCU12、AGCU13及びAGCU14に、それぞれ接続される。トップ・レベル・スイッチ912、913、915、及び、916は、タイルTile2内のMAGCU2、AGCU22、AGCU23、及び、AGCU24に、それぞれ接続される。
【0144】
トップ・レベル・スイッチは1または複数の外部I/Oインタフェース(例えば、インタフェース905)に接続され得る。ランタイム・プログラムを実行するホストは、トップ・レベル・ネットワークを介してアレイ静止コントローラ及び、構成ロード/アンロード・コントローラと通信できる。
【0145】
図10は、構成可能ユニットにおけるユニット構成ロード処理を制御するために使用され得るステート・マシンの一例を示す。構成ロード処理は、例えば、マスタAGCU内の構成ロードロジックによって制御することができ、アレイ静止コントローラと結合することができる。一般に、ユニット構成ロード処理は、1つのバス・サイクルにおいてバス・システムから構成可能ユニットに特有のユニットファイルの第1のチャンク(またはサブファイル)を受信し、次に、ユニットファイルの第2のチャンクが受信される前に、バス・サイクルと同じレートで発生する後続のシフト・サイクル中に、受信された第1のチャンクをシリアル・チェーンにプッシュし始める。後のバス・サイクルにおいて、構成可能ユニットに特有のユニットファイルの第2のチャンクをバス・システムから受信すると、処理は先に受信したチャンクをシリアル・チェーンにプッシュした後のサイクル中に、受信した第2のチャンクをシリアル・チェーンにプッシュし始める。構成ロード処理の幾つかのまたは全てのラウンドでは、複数の順序付けられたチャンク内の第2のチャンク(ユニットファイルのチャンクの順序で次に)が構成可能ユニットによって受信される前に、構成可能ユニット内でユニット構成ロード処理によって第1のチャンクを消費することができる。
【0146】
図10のステート・マシンは、6つの状態S0~S5を含む。状態S0(アイドル)では、ユニット構成ロード処理がマスタAGCU内の構成ロード/アンロード・コントローラからの構成ロード/アンロード・コマンドを待つ。構成ロード/アンロード・コントローラは、オフチップメモリ(
図1の140)からの/への、及び、構成可能ユニットのアレイ(
図1の190)への/からの、構成データのロード/アンロードを行う。構成ロード/アンロード・コントローラでロード・コマンドが受信されると、ユニット構成ロード処理は状態S1に入る。
【0147】
状態S1(静止待ち)では、ステート・マシンは、ロードまたはアンロード・コマンドの後、静止状態を待つ。状態S1では、ステート・マシンは、静止コマンドを分配することを含み、本明細書で説明するように、静止処理を実行できる。静止状態が達成すると、複数のデータパス内の機能的フロップは無効化され、機能的フロップは循環せず、スカラ出力、ベクトル出力、及び制御出力はオフにされ、出力は如何なる負荷も駆動しない。アレイの静止状態は、上述のアレイ静止コントローラ及び静止ロジックを用いて引き起こすことができる。ロード・コマンドが受信された場合、次に、静止状態に到達した後、ユニット構成ロード処理は状態S2に入る。アンロード・コマンドが受信されると、次に、静止状態に到達した後、ユニット構成ロード処理は状態S4に入る。
【0148】
状態S2(入力有効待ち)では、ユニット構成ロード処理は入力FIFO(
図11の1110)が有効になるまで待機する。入力FIFOが有効になると、入力FIFOはバス・システム経由で構成ファイルの構成データのチャンクを受信した。例えば、構成データのチャンクは、128ビットのロードデータを含むことができ、これはバス・システムのベクトル・ネットワークで受信され、ベクトル・ネットワークのベクトル・バス幅は128ビットである。入力FIFOが有効になると、ユニット構成ロード処理は状態S3に入る。
【0149】
状態S3(ロードシフト)では、128ビットの構成データのチャンクが最初に入力FIFOから1クロックサイクルでデキューされ、128ビットの構成データのチャンクが128クロックサイクルで入力シフト・レジスタ(
図11の1120)にシフトされる。入力シフト・レジスタは構成データのチャンクと同じ長さ(例えば、128ビット)を有することができ、構成データのチャンクを入力シフト・レジスタ内にシフトするのに、構成データのチャンクの長さと同じ数のシフト・クロックサイクル(例えば、128)を要する。上述のように、幾つかの実施形態では、シフト・クロック及びバスクロック(またはバス・サイクル)は同じレートで動作することができる。
【0150】
図11は、構成可能ユニット内の構成ストアの論理的表示である。構成可能ユニット内の構成データ・ストア(
図4の420)は、本実施形態では第1のシフト・レジスタ・チェーン1130及び第2のシフト・レジスタ・チェーン1140を含む構成シリアル・チェーンを備える。第1のシフト・レジスタ・チェーン1130は、1組のレジスタまたはラッチを含む。第2のシフト・レジスタ・チェーン1140は、別の1組のレジスタまたはラッチ(フリップフロップ)を含む。第1のシフト・レジスタ・チェーン及び第2のシフト・レジスタ・チェーンは、本実施形態では直列に接続されて単一のチェーンを形成する。
【0151】
構成ファイルは、構成可能ユニットのアレイ内の複数の構成可能ユニット内の構成可能ユニットごとに、構成データの複数のチャンクを含む。構成データのチャンクは、それぞれの構成可能ユニットの初期構成または開始状態を表す。本システムにおける構成ロード操作は、構成可能ユニットのアレイに構成データのユニットファイルを設定して、全ての構成可能ユニットがプログラムを実行できるようにする処理である。
【0152】
第1のシフト・レジスタ・チェーン1130内のレジスタのセットは、レジスタを含む構成可能ユニットの動作の定義を含む、プログラムを実行するためのセットアップまたはシーケンスの何れかを表すことができる。これらのレジスタは、ネスト化されたループの数、各ループ・イテレータの限界、静止境界、各ステージに対して実行される命令、オペランドのソース、及び入力及び出力インタフェースのネットワーク・パラメータを登録できる。第2のシフト・レジスタ・チェーンのレジスタのセットには、アレイに割り当てられた実行フラグメントの静止境界上の構成可能ユニットにロードされたプログラムの実行状態に関するデータを含めることができる。
【0153】
図11の例に示されるように、第1のシフト・レジスタ・チェーン1130及び第2のシフト・レジスタ・チェーン1140は直列に接続され、その結果、第1のシフト・レジスタ・チェーンのMSB(最上位ビット)は第2のシフト・レジスタ・チェーンのLSB(最下位ビット)に接続される。ロード信号またはアンロード信号は第1のシフト・レジスタ・チェーンのLSB及び第2のシフト・レジスタ・チェーンのLSBに結合されたシフトイネーブル信号として作用し、第1のシフト・レジスタ・チェーン及び第2のシフト・レジスタ・チェーン上のロード/アンロード動作を制御することができる。入力FIFO1110は、セレクタ1170を介して入力シフト・レジスタ1120に結合される。セレクタ1170はロード信号がアクティブであるとき、入力シフト・レジスタ1120を構成データ・ストア(第1のシフト・レジスタ・チェーン1130のLSB)の入力に接続する。
【0154】
ロード信号がアクティブであるとき、入力シフト・レジスタ1120内の構成データは、構成シリアル・チェーン内の第1のシフト・レジスタ・チェーン1130及び第2のシフト・レジスタ・チェーン1140にシフトされ得る。ここで、ロード信号は、入力シフト・レジスタ、第1シフト・レジスタ・チェーン、及び第2シフト・レジスタ・チェーンのイネーブル信号として作用し得る。構成可能ユニットの構成データの全てのチャンクが構成可能ユニットの構成データ・ストアにロードされるまで、ロード操作を繰り返すことができる。シリアル・チェーンの長さが整数個のチャンク(またはサブファイル)の長さと異なる場合、直列状の最初のチャンクに差分を埋め込むことができ、最後のチャンクがシフトインされると、パッドビットがチェーンの最後にシフトアウトされる。例えば、構成可能ユニット内の構成データ・ストアは、1400ビットのサイズを有するユニットファイルを記憶することができる。ユニット構成ロード処理は、整数N個のチャンクをロードすることができる。この例では、N=11であり、N個のチャンクは、チャンク5、チャンク4、チャンク3、チャンク2、チャンク1及びチャンク0を含む。ベクトル・バスのベクトル幅は128ビット、構成データのチャンクは128ビットで、チャンクは1つのバスクロックサイクルで構成可能ユニットに送信できる。N個のチャンクのサイズは、N×128=11×128=1408ビットで、これには1408ビットのユニットファイルサイズに一致させるための8パッドビットが含まれる。
【0155】
エラーから回復するために、アンロード操作は、各構成可能ユニットの状態をチェックポイントすることができる。アンロード操作では、再起動に必要な静止境界上の各構成可能ユニットの実行状態を保存し、エラーが発生した場合にアプリケーションを再起動できるようにすることができる。また、構成可能ユニットの状態を保存したり、デバッグ目的で転送したりすることもできる。保存する必要がある状態は、少なくとも第1または第2のシフト・レジスタの一部の内容と、オプションでPMUメモリの内容が含まれる。プログラム・アンロードは、第1及び第2のシフト・レジスタの全ての状態をアンロードすることも必要とすることがある。
【0156】
出力FIFO1160は、出力シフト・レジスタ1150に結合され、このシフト・レジスタは次に、構成データ・ストアの出力(第2のシフト・レジスタ・チェーン1140のMSB)に結合される。アンロード操作の場合、アンロード信号がアクティブであるとき、第2のシフト・レジスタ・チェーン1140及び第1のシフト・レジスタ・チェーン1130内の構成データを出力シフト・レジスタ1150にシフトすることができる。出力FIFO1160が有効であるとき、出力シフト・レジスタ1150内の構成データ(例えば128ビット)を、1クロックサイクルで出力FIFO1160に挿入することができる。アンロード操作は、構成可能ユニットの構成データ・ストア内の構成データの全てのチャンクが出力FIFOにアンロードされるまで繰り返すことができる。静止を伴うプログラム・アンロードは、マルチプログラミング環境を実現するために、また、高優先順位のプログラムが低優先順位のプログラムの静止境界上で低優先順位のプログラムを中断し、低優先順位のプログラムが静止してアンロードされ、高優先順位のプログラムがロードされて実行されるマルチタスキング環境を実現するために使用することもできる。
【0157】
MAGCU内の構成ロード・コントローラによって発行された構成ロード・コマンドの完了と同期して、通信するために、一例では、チェーンの各構成要素内のデイジー・チェーン・ロジック(例えば、
図4のデイジー・チェーン・ロジック493)に含まれるロジックによってサポートされる単一ワイヤ・デイジー・チェーン方式が実装される。このスキームでは、全ての構成要素が次の2つのポートを持つ必要がある:
1. PROGRAM_LOAD_DONE_INという入力ポート
2. PROGRAM_LOAD_DONE_OUTという出力ポート
【0158】
構成要素は、MAGCUによって発行されたコマンドの実行を完了し、そのPROGRAM_LOAD_DONE_IN入力がhighに駆動されると、そのPROGRAM_LOAD_DONE_OUT信号を駆動する。MAGCUは、コマンドの実行に必要な全てのステップが完了すると、PROGRAM_LOAD_DONE_OUTを駆動してデイジー・チェーンを開始する。チェーンの最後の構成要素は、MAGCUのPROGRAM_LOAD_DONE_INに接続されるPROGRAM_LOAD_DONE_OUTを駆動する。MAGCUのPROGRAM_LOAD_DONE_INがhighになると、コマンドの完了を示す。全ての構成要素の全てのチャンクに対応するデータを配信した後、MAGCUはそのPROGRAM_LOAD_DONE_OUTポートをhighに駆動する。全ての構成要素は、全ての構成ビットのロードを完了すると、それぞれのPROGRAM_LOAD_DONE_OUTポートをhighに駆動する。この動作は、静止準備シグナリングと同じデイジー・チェーン上で実行することができる。
【0159】
MAGCUの入力ポートPROGRAM_LOAD_DONE_INがアサートされると、構成ファイルのロードが完了する。上述したように、Q_RDY信号に対して同じまたは類似のロジックを使用することができる。
【0160】
図12は、
図3及び
図10のようなシステムに対して、アレイ構成ロード処理を実行するロジックの一例を示すステート・マシン図である。アレイ構成ロード処理は、複数の構成可能ユニット用のユニットファイルであって、それぞれが複数の順序付けられたチャンク(または、サブファイル)を有するユニットファイルを備える構成ファイルをアレイに分配することを含み、その構成ファイルの分配は、順序(i)の1ユニットチャンクを、バス・システムを介してN個のサブファイルまでを含む全ての構成可能ユニットに、構成ファイル内のユニットファイルが複数の構成可能ユニットに分配されるまで、Nラウンド(R(i)、i=0~N-1)のシーケンスで送信することにより実行される。
【0161】
この例では、ステート・マシンは6つの状態S1~S6を含む。状態S1(アイドル)では、構成ロード・コントローラはホストからの構成ロード・コマンドを待機する。構成ロード・コマンドが受信されると、ロード処理は状態S2に入り、分配シーケンスの第1ラウンドR(0)の実行を開始する。各ラウンドは、状態S2~S6を横切る。本明細書で説明する例では、アレイ内の構成可能ユニットに分配されるチャンクの最大数が6であるため、6ラウンドが存在する。
【0162】
状態S2(スイッチ・リクエスト)では、構成ロード・コントローラは、トップ・レベル・ネットワークを介してメモリ・アクセス・リクエストを生成し、各スイッチ・ユニットの構成ユニットファイルのラウンドR(i)の状態S2のチャンクを取得し、取得したチャンクを各スイッチ・ユニットに分配する。i=0の場合、ラウンドR(0)では、構成ロード・コントローラは、各スイッチ・ユニットの複数のチャンク内のチャンク(0)に対するメモリ・アクセス・リクエストを生成し、チャンク(0)を各スイッチ・ユニットに送信する。i=1の場合、ラウンドR(1)では、構成ロード・コントローラは、各スイッチ・ユニットの複数のチャンク内のチャンク(1)に対するメモリ・アクセス・リクエストを生成し、該チャンクを各スイッチ・ユニットに送信する。ラウンドR(i)において、構成ロード・コントローラは、各スイッチ・ユニットの複数のチャンク内のチャンク(i)に対するメモリ・アクセス・リクエストを生成し、全てのスイッチ・ユニットに対してチャンクを分配したとき、ロード処理は状態S3に入る。
【0163】
状態S3(PCUリクエスト)では、構成ロード・コントローラは、トップ・レベル・ネットワークを介してメモリ・アクセス・リクエストを生成し、各PCUユニット(パターン計算ユニット)の構成ユニットファイルのラウンドR(i)のチャンクを取得し、取得したチャンクを各PCUユニットに分配する。ラウンドR(i)の状態S3では、構成ロード・コントローラは、各PCUユニットの複数チャンク(i)に対するメモリ・アクセス・リクエストを生成し、チャンク(i)を各PCUユニットに送信する。ラウンドR(i)では、構成ロード・コントローラは、各PCUユニットの複数チャンク内のチャンク(i)に対するメモリ・アクセス・リクエストを生成し、チャンクを分配したとき、ロード処理は状態S4に入る。
【0164】
状態S4(PMUリクエスト)では、構成ロード・コントローラは、トップ・レベル・ネットワークを介してメモリ・アクセス・リクエストを生成し、構成可能ユニットのアレイ内の各PMUユニット(パターンメモリユニット)の構成ユニットファイルのチャンクと、幾つかの実施形態におけるメモリ・ファイルを取得し、取得したチャンクを各PMUユニットに送信する。ラウンドR(i)の状態S4では、構成ロード・コントローラは、各PMUユニットの複数のチャンク内のチャンク(i)に対するメモリ・アクセス・リクエストを生成し、チャンク(i)を各PMUユニットに送信する。例えば、i=0の場合、ラウンドR(0)では、構成ロード・コントローラは、各PMUユニットの複数のチャンク内のチャンク(0)に対するメモリ・アクセス・リクエストを生成し、チャンク(0)を各PMUユニットに送信する。i=1の場合、ラウンドR(1)では、構成ロード・コントローラは、各PMUユニットの複数のチャンク内のチャンク(1)に対するメモリ・アクセス・リクエストを生成し、チャンク(1)を各PMUユニットに送信する。ラウンドR(i)において、構成ロード・コントローラが、各PMUユニットの複数のチャンク内のチャンク(i)に対するメモリ・アクセス・リクエストを生成し、チャンクを分配したとき、ロード処理は状態S5に入る。
【0165】
状態S5(AGCUリクエスト)では、構成ロード・コントローラは、トップ・レベル・ネットワークを介してメモリ・アクセス・リクエストを生成し、構成可能ユニットのアレイ内の各AGCU(アドレス生成及び結合ユニット)の構成ユニットファイルのチャンクを取得し、取得したチャンクを各AGCUユニットに送信する。ラウンドR(i)の状態S5において、構成ロード・コントローラは、各AGCUユニットの複数のチャンク内のチャンク(i)に対するメモリ・アクセス・リクエストを生成し、チャンク(i)を各AGCUユニットに送信する。ラウンドR(i)の状態S5において、構成ロード・コントローラが、各AGCUユニットの複数のチャンク内のチャンク(i)に対するメモリ・アクセス・リクエストを生成し、チャンクを分配したとき、ロード処理はラウンドR(i)の状態S6に入る。
【0166】
状態S6(応答待ち)では、構成ロード・コントローラは、アレイ内の構成可能ユニット(スイッチ、PCU、PMU、AGCUユニット)が次のラウンドで構成データのより多くのチャンクを受信する準備状態であることを保証するために待機する。スイッチ・ユニットに対する全てのチャンクが送信されない場合、ロード処理は(i)をインクリメントし、状態S2に進み、次のラウンドR(i+1)を開始する。スイッチ・ユニットの全てのチャンクは送信されるが、PCUチャンクの全てのチャンクは送信されない場合、ロード処理は(i)をインクリメントし、状態S3に進み、次のラウンドR(i+1)を開始する。スイッチ・ユニット及びPCUユニットに対する全てのチャンクは送信されるが、PMUチャンクの全てのチャンクは送信されない場合、ロード処理は(i)をインクリメントし、状態S4に進み、次のラウンドR(i+1)を開始する。スイッチ・ユニット、PCUユニット、及びPMUユニットの全てのチャンクは送信されるが、AGCUチャンクの全てのチャンクは送信されない場合、ロード処理は(i)をインクリメントし、状態S5に進み、次のラウンドR(i+1)を開始する。全ての構成可能ユニット(スイッチ、PCU、PMU、AGCUユニット)の全てのチャンクが送信される(即ち、全てのラウンドが完了する)と、ロード処理は状態S1に進む。
【0167】
図13は、アレイ構成アンロード処理を実行するためのロジックの一例のためのステート・マシン図である。
【0168】
この例では、ステート・マシンは3つの状態S1~S3を含む。状態S1(アイドル)では、構成アンロード・コントローラはホストからの構成アンロード・コマンドを待機する。構成アンロード・コントローラは、アレイ構成アンロード処理に対して、“next_unld_req_count”と“next_unld_resp_count”の2つのカウントを実施し、カウント“next_unld_req_count”は次のアンロード・リクエスト・カウントを追跡する。カウント“next_unld_resp_count”は次のアンロード応答カウントを追跡する。状態S1において、両方のカウントは、0のような初期値にリセットされる。構成アンロード・コマンドを受信すると、アンロード処理は状態S2に入る。
【0169】
状態S2(Genリクエスト)で、構成アンロード・コントローラは、構成可能ユニットのアレイ内のスイッチ・ユニット、PCU、PMU、及びAGCUを含むアレイ内の構成可能ユニットそれぞれについてのアンロード・リクエストを生成する。各アンロード・リクエストが生成されるたびに、カウント“next_unld_req_count”がインクリメントされる。カウント“next_unld_req_count”は、所定の数PROGRAM_UNLOAD_REQ_COUNTと比較される。これは構成可能ユニットのアレイ内の構成可能ユニットの総数を表す。カウント“next_unld_req_count”がPROGRAM_UNLOAD_REQ_COUNT未満である限り、アンロード処理は状態S2のままである。カウント“next_unld_req_count”がPROGRAM_UNLOAD_REQ_COUNTと等しい場合、アレイ内の構成可能ユニットそれぞれに対しアンロード・リクエストが生成され、アンロード処理は状態S3に入る。
【0170】
状態S3(応答待ち)では、構成アンロード・コントローラがアレイ内の構成可能ユニットから受信した各応答に対するカウント“next_unld_resp_count”をインクリメントする。応答は、構成可能ユニットの構成データのユニットファイル内のチャンク(サブファイル)を含む。応答はまた、幾つかの例では、PMUスクラッチパッドデータを含むことができる。アンロード処理中に、応答が構成可能ユニットのベクトル出力に提供され、ベクトル・バス上で構成ロード・コントローラに送信される。カウント“next_unld_resp_count”がPROGRAM_UNLOAD_REQ_COUNT未満である限り、アンロード処理は状態S3のままである。
【0171】
状態S3では、アンロード処理は受信した各応答に対しメモリ・アドレスを生成し、受信した各応答をトップ・レベル・ネットワークで生成されたメモリ・アドレスとともに挿入する。各応答は、アンロード・チャンクとシーケンスIDを含む。メモリ・アドレスは、シーケンスID内のチャンク番号、列識別子、行識別子、及び構成要素識別子を含む、アレイ・レベル・ネットワーク内のチャンクを搬送するパケットに付随するヘッダから生成される。構成要素識別子は、構成可能ユニットが、スイッチ・ユニット、PCUユニット、PMUユニット、またはAGCUユニットであるかを示すことができる。シーケンス識別子は、
図3を参照して更に説明される。
【0172】
カウント“next_unld_resp_count”がPROGRAM_UNLOAD_REQ_COUNTに等しい場合、応答はアレイ内の構成可能ユニットそれぞれから受信され、トップ・レベル・ネットワーク上に挿入され、アンロード処理は状態S1に戻る。
【0173】
一実施形態では、スイッチ・ユニット内の構成データに対する線形メモリ・アドレスの順序は、スイッチ・ユニットの1列目の各行の第1のチャンクと、それに続くスイッチ・ユニットの2列目の各行の第1のチャンクと、それに続くスイッチ・ユニットの3列目の各行の第1のチャンクと、以下同様、最終列の各行の第1のチャンクまで続く。これにより、線形アドレス空間内の全てのスイッチ・ユニットの第1のチャンクがグループ化される。他のタイプの構成可能ユニットの第1のチャンクは、隣接するアドレス空間のグループ内にロードされる。次に、順番の後には、スイッチ・ユニットの1列目の各行の第2のチャンクと、それに続くスイッチ・ユニットの2列目の各行の第2のチャンクと、それに続くスイッチ・ユニットの3列目の各行の第2のチャンクと、以下同様、スイッチ・ユニットの最終列の最終行の最後のチャンクまでが続き、そして、全てのタイプの構成可能ユニットの第2のチャンクについて、同様に続く。
【0174】
幾つかの実施形態では、EFRGから構成、状態、及び、メモリ・データをアンロードまたはコピーする、または、状態情報及び、メモリ・コンテンツのみをアンロードまたはコピーする、または、状態情報のみをアンロードまたはコピーするめに、デバッグ等の目的で使用可能な構成データは使用せずに、アンロード処理を静止境界で使用することができる。
【0175】
図14は、マスタAGCUにおけるアレイ静止コントローラによる静止動作の実行を示す簡略化されたフローチャートである。この例では、静止動作は、例えば、アレイ静止コントローラ内の静止制御レジスタ内のビットをセットするホスト内のランタイム・プログラムからの外部リクエストに応じて開始される(1400)。幾つかの実施形態では、静止動作は、デバッグを補助するために、構成されたブレークポイントに到達する実行によって検出された例外条件または実行イベント等、CGRA内で検出されたイベントに応答して開始することができる。これに応じて、MAGCUはアレイ内 の構成可能ユニットに静止AGCU_CMDコマンドを送信する(1401)。アレイ内のそれぞれのEFRGに関連付けられたアレイ内の静止ロジックは、コマンドに応答してQ_RCV_FFフラグをセットする。ユニットのQ_PCPTフラグがローである場合、静止ロジックは、その関連する構成可能ユニットのデイジー・チェーン上のQ_RDY信号を立ち上げる(1402)。構成可能ユニットに対してQ_PCPTフラグがハイである場合、静止ロジックはEFRG内のユニットがQBを超えて進むのを停止し、関連する構成可能ユニットに対するQ_RCV_FFフラグのセッティングの直後に、そのスキューUDCがゼロに等しくなることによって示されるローカル実行フラグメントの静止境界上のデイジー・チェーン上のQ_RDY信号を立ち上げる(1403)。MAGCUは、デイジー・チェーン上のQ_RDY信号を受信するのを待つか、さもなければ、参加している構成可能ユニットのすべてから受信するのを待つ(1404)。参加する構成可能ユニットに対してQ_RDY信号が受信されると、アレイは静止され、MAGCUはブレークポイントまたはチェックポイントに対するアンロード動作のような次の動作に移行することができ、ここで、構成可能ユニットのアレイのプログラム・リソース及び、データ・リソースは、静止状態の間にアンロードされる(1405)。或いは、例えば、再開コマンドを待つ、後続のブレークポイントを設定する、続行する前に他の外部情報やイベントを設定するために、タイルをアンロードせずに静止したままにしておくことができる。
【0176】
チェックポイントでアンロードした後、複数の実行フラグメントを含む別のマシンを、新しい構成ファイルをロードすることによってアレイを使用して実装することができ、または、他の動作を実行することができる。チェックポイントでアンロードされた静止マシンは、チェックポイントの構成、状態、及び、データ・リソースを再ロードすることで、後で復元できる。したがって、静止は、CGRAにプリエンプティブ・マルチタスキング能力及び、マルチプログラミング能力を提供する。
【0177】
分散型CGRAを静止させる能力はまた、デバッグ能力を強化する。例えば、内部ループの各反復のような微細な静止境界、または、エラー若しくは例外のようなイベントの発生時にトリガされ得る静止境界、または他のブレークポイント条件を規定することによって、CGRA実行は停止され、結果はユーザによって検査され、次いで、場合によっては状態を変更した後に再開され、または必要に応じて終了され得る。
【0178】
本明細書で説明される静止ロジックと制御バリア・ネットワーク技術は、CGRAデバイスを用いた実施態様に適している。また、本発明は、アレイ間に分配された実行フラグメント間の調整から利益を得ることができる処理ユニットのアレイを備える他のタイプの処理システムと共に利用することができる。
【0179】
データ処理動作を安全かつ再現可能な方法で静止境界上で停止することを可能にする、データ処理動作または「マシン」を実施するように構成可能な構成可能処理ユニットのアレイを含む、処理システムを動作させるための方法が記載される。該方法は、アレイ間に分散され、静止境界を設定するように構成された静止ロジック回路によってサポートされ得る。
【0180】
該方法は、データ処理動作のために構成データをアレイにロードすることを含むことができ、該ロードにより、アレイを、静止境界を有する対応する実行フラグメントのための複数の実行フラグメント・リソース・グループに構成する。データ処理動作の実行中に、該方法は、例えば、静止ロジック回路を使用して、静止コマンドをアレイ内の複数の実行フラグメント・リソース・グループに分配することを含むことができる。実行フラグメント・リソース・グループでは、静止ロジックが静止コマンドに応答して、対応する実行フラグメント内の静止コマンドに続く静止境界を検出し、静止境界を越える対応する実行フラグメントの実行を無効にし、対応する実行フラグメントに対する静止準備信号を立ち上げる。
【0181】
静止境界は、構成データ内において、実行フラグメント・リソース・グループの構成可能ユニットにおける実行の構成された状態のセットによって、規定され得る。該方法は、各実行フラグメント・リソース・グループ内の構成可能ユニットに対して構成された状態のセットを検出することによって、静止境界を検出するための静止コマンドに応答することを含み得る。
【0182】
この静止機能は、マルチコア・アレイ、CGRA、またはFPGA等の構成可能な処理ユニットのアレイを含む、処理システムのための固有の動作シナリオを有効にする。例えば、動作方法は、ホストからのリクエストに応答して、またはCGRA内で検出されたイベントに応答して、静止コマンドを分配して、データ処理動作を停止することを含み得る。複数の実行フラグメント・リソース・グループから静止準備信号を受信した後、該方法は、デバッグまたは他の目的で使用するために、アレイから構成及び状態をアンロードすることを含み得る。
【0183】
図15は、マルチタスキング及び、マルチプログラミング環境において実行され得る動作方法を示しており、ここで、ホストまたはランタイム・プログラムは、異なるレベルの優先順位を有する複数のデータ処理動作を管理することができる。例えば、1つのデータ処理動作は、より高い優先順位の動作が必要でない場合にのみ実行されるバックグラウンド動作と考えることができる。
【0184】
図15を参照すると、方法は、バックグラウンド動作であり得る動作1(1500)を開始することを含むことができる。ホストが優先順位の高い動作を検出した場合(1501)、該方法は、好ましくは、上述したような技術を使用して、静止境界上のアレイ内の実行フラグメントを静止することによって(1502)、アレイを静止することができる。静止後、ホストは、静止点で動作1のための構成、状態、及び/またはメモリ・データをアンロードすることができる(1503)。この情報は、後の再開動作のために保存することができる。アンロード動作1の後、動作2のための構成ファイルがロードされる(1504)。動作2のロードに成功した後、動作を開始することができる(1505)。動作2は、完了するまで実行されるか、または別のイベントが動作を停止できることを示す(1506)。幾つかの例では、動作2は、本明細書で説明されるような静止動作を使用して停止することができる。動作2を停止した後、動作2の構成ファイルをアンロードすることができる(1507)。その後、静止時に動作1のためにアンロードされた構成、状態、及び/またはメモリ・データをアレイに再ロードすることができる(1508)。場合によっては、再ロードされたデータに、アンロードされたデータに対する状態の変化等の変更が含まれることがある。次に、再ロードされたデータによって表される静止境界で動作1を再開することができる(1509)。
【0185】
他の動作では、本明細書で説明する静止機能を、例えばデバッグ中に有用なブレークポイント処理に使用することができる。
図16は、このタイプの動作のための簡略化されたフローチャートである。
図16において、動作1は、構成可能なアレイにおいて開始される(1600)。ブレークポイント・リクエストが(1601)で受信されると、静止動作が実行され、静止コマンドに従って静止境界QB(i)上でEFRGが静止する(1602)。静止後、QB(i)での動作1に対する構成、状態及び/またはメモリ・データを保持メモリにコピーすることができる(1603)。次に、動作1を再開することができる(1604)。次に、ホストは、QB(i)がコピーされる最後のブレークポイント((i)=N?)であるかどうかを判定することによって、そのブレークポイント動作を完了したかどうかを判定することができる(1605)。ホストがステップ1605で終了していない場合、ホストは、インデックス(i)をインクリメントし、次の静止境界に対して新しい静止コマンドを発行して、処理をステップ(1602) に戻すことができる。ホストがステップ(1605)で終了すると、ブレークポイント処理が終了し(1607)、ホストは静止境界のシーケンスでダウンロードされたブレークポイント・データを分析することができる。
【0186】
処理ユニットの構成可能なアレイのチェックポイント、ブレークポイント、マルチタスキング、マルチプログラミング、及び、他の利用を可能にする静止技術が提供される。静止技術は、対応するマシンの静止境界を規定するように構成可能な静止回路によってサポートされるものとして説明される。
【0187】
静止技術は、データ処理動作の命令シーケンスに挿入された命令の使用を必要とせず、静止機能のためのデータ・バス・リソースを必要としない。
【0188】
本明細書で説明される実施形態では、処理ユニットのアレイは、命令のストリーム上で動作するCPU及び、GPUで利用されるような命令プロセッサを備えることができ、命令はステートフル動作を実行する。このタイプの命令プロセッサは、ビットにエンコードされた命令を使用してプログラムされる。タスクは、ソフトウェアによって順序付きリストとして指定される。これらのユニットには、「プログラム状態」を追跡するメカニズムを備えたハードウェア・アーキテクチャがある。プログラム状態は、数ある中で、メモリからフェッチされる次の命令を追跡するために、グローバル「プログラム・カウンタ」レジスタの形式を含む。更に、ハードウェア・アーキテクチャには、フェッチされたこれらの命令をデコードして実行するためのパイプラインもある。換言すると、これらのアーキテクチャは、実行中に命令のストリームが流れるパイプラインを含み、そこでは、各命令が動作を実行し、ハードウェア状態を更新する。このようなアーキテクチャのチェックポインティングには、プログラム・カウンタやレジスタ・ファイル等、アーキテクチャのステートフル素子の保存が含まれる。GPUは、例えば、一般にメモリの共有プールに依存するコア内の分散型演算ユニットのアレイから構成することができる。分散型演算ユニットは、通常のプロセッサのように、フェッチされ、デコードされ、実行される命令を書き込むことによってプログラム可能なプログラム内蔵式プロセッサである。同期と通信は、共有メモリ上で動作する命令のシーケンスを実行することによって実現される。
【0189】
本明細書で説明される技術の他の実施形態では、処理ユニットのアレイは、構成可能ユニットの海を通って流れるデータ及び、制御メッセージのストリーム(命令とは対照的に)に対して動作するCGRAの意味で、構成可能ユニットを含み、該構成可能ユニットは、ビットファイル等の構成データを使用してプログラムされる。構成可能ユニットに基づく実施形態は、様々な方法で実行を管理しなければならないので、記憶されたプログラム命令ベースのプロセッサとは異なって見え且つ動作するアーキテクチャを有する。
【0190】
CGRA 及びFPGA の場合のように、構成可能ユニットのアレイは、構成ビットという異なるプログラミング規約を有する。これらのアーキテクチャは、命令をフェッチして処理するハードウェアを有しない。これらは、命令プロセッサの意味で、グローバルな「プログラム・カウンタ」レジスタを持たず、命令ストリームをフェッチ、デコード、及び、実行するために構築されたパイプラインを持たない。その代わりに、構成可能な実行ユニット及び、ステートフル素子は、チップ上に物理的に分散され、プログラム可能相互接続を使用して共に接続される。プログラムは命令のストリームではない。構成ビットは、アプリケーション対してカスタム制御及び、データパスを構築するために、構成可能な実行ユニットをプログラムする。命令のストリームの代わりに、構成可能ユニットは、他のデータ及び、制御メッセージを生成するために、データ及び、制御メッセージのストリーム上で動作するようにプログラムされる。これにより、斯かるアーキテクチャは、本質的に分散され、単一のグローバル・プログラム状態を必要としない。
【0191】
構成可能ユニットのアレイ内の構成可能ユニットは、構成データまたはビットファイルをロード及び、アンロードする能力のため、再構成可能である。本明細書で説明される構成可能ユニットのすべての実施形態は、好ましい代替形態では再構成可能ユニットを使用して実施される。
【0192】
CGRA及び同等のアーキテクチャでの実行の分散性により、ハードウェアの構築とスケーリングが容易になるが、チェックポインティング等のグローバル同期動作を実行するのは困難になる。
【0193】
これらのアーキテクチャのチェックポインティング・スキームは、分散型プロトコルを使用し、単一のグローバル・プログラム状態に依存しない構成可能なロジックをサポートして、本明細書で説明したように、実施することができる。
【0194】
CGRAは、再構成可能な構成要素のアレイを含む。構成要素は、いくらか専門化された演算ユニット及び、メモリ・ユニットを備えることができる。これらのユニットは、ユニット間通信及び、同期を可能にするために、ファブリックによって接続される。構成要素は、幾つかの方法で再構成することができるが、多くの場合、FPGAと同様に、ビットファイルからロードされた構成ビットの制御下で、それらの行動を変更することによって、直接ハードウェア再構成に依存する。命令はフェッチ、デコード、または実行されない。代わりに、ステート・マシンは、動作のシーケンスを開始するためにビットファイル・コンテンツによって構成される。
【0195】
その結果、CGRAのユニットは、命令を実行することによって同期(静止を含む)することができない。CGRAのユニットは、別の手段を使用しなければならない。この好ましい実施形態では、CGRAは変わりとなるメカニズムを使用することができるが、CGRAのユニットは、制御ネットワーク内の制御ワイヤ上のパルスとして表されるトークンを交換する。
【0196】
本発明は、上記で詳述された好ましい実施形態及び実施例を参照することによって開示されるが、これらの実施例は限定的な意味ではなく、例示的な意味で意図されたものと理解されるべきである。当業者であれば、本発明の精神及び以下の特許請求の範囲の技術的範囲内における修正及び組合せを容易に想到すると予期される。
【国際調査報告】