(57)【特許請求の範囲】
【請求項１】
方法であって、
ファブリックとして相互接続された複数の処理要素間で複数の仮想チャネル上でファブリックパケットを選択的に交換する工程であって、各ファブリックパケットは、前記仮想チャネルの1つを識別する仮想チャネル指定子を有し、各処理要素は、ファブリックルータと、前記仮想チャネルのそれぞれに関連付けられたデータフローベースの処理及び命令ベースの処理を実行することができる計算要素とを有し、各計算要素は、前記仮想チャネルのそれぞれに関連付けられた１若しくはそれ以上の命令を記憶することができ且つさらに前記関連付けられた１若しくはそれ以上の命令の少なくとも１つを実行のために前記計算要素に提供することができるメモリを有するものである、交換する工程と、
各処理要素において、前記仮想チャネルのそれぞれの各ローカル仮想キューを管理する工程と、
各処理要素において、所定の基準に従って、関連付けられた処理に前記仮想チャネルのうちの複数の仮想チャネルを選ぶ工程であって、前記所定の基準は、前記仮想チャネルのローカルの現在アクティブな仮想チャネルのプールから選択することを有するものである、選ぶ工程と、
前記処理要素の第１の処理要素において、前記仮想チャネルの１つを指定するアクティベート演算を行う工程と、
前記第１の処理要素において、前記行う工程に応答して、前記指定された仮想チャネルをローカルにアクティベートする工程と、
前記第１の処理要素において、前記ローカルにアクティベートする工程に続けて、前記所定の基準に従って前記指定された仮想チャネルをローカルに選ぶ工程と、
前記第１の処理要素において、前記ローカルに選ぶ工程に応答して、前記指定された仮想チャネルの関連付けられた処理を開始する工程であって、前記指定された仮想チャネルの関連付けられた処理は、前記関連付けられた１若しくはそれ以上の命令の少なくとも１つを前記第１の処理要素の前記計算要素の前記メモリから取得及び実行する前記第１の処理要素を有する、開始する工程と
を有する方法。
【請求項２】
請求項１記載の方法において、さらに、
各処理要素は、前記仮想チャネルのプッシュに関連付けられた仮想チャネルの識別子を有する関連付けられたデータ構造記述子を有する循環メモリバッファをさらに有し、
前記第１の処理要素において、要素を前記循環メモリバッファにプッシュする工程を含み、
前記行う工程は、前記プッシュする工程に応答して実行され、前記指定された仮想チャネルは、前記仮想チャネルの前記プッシュに関連付けられた仮想チャネルである、方法。
【請求項３】
請求項１記載の方法において、さらに、
各処理要素は、前記仮想チャネルのポップに関連付けられた仮想チャネルの識別子を有する関連付けられたデータ構造記述子を有する循環メモリバッファをさらに有し、
前記第１の処理要素において、要素を前記循環メモリバッファからポップする工程を含み、
前記行う工程は、前記ポップする工程に応答して実行され、前記指定された仮想チャネルは、前記仮想チャネルの前記ポップに関連付けられた仮想チャネルである、方法。
【請求項４】
請求項１記載の方法において、前記第１の処理要素においてファブリックベクトル演算を完了する工程は、前記行う工程を有し、前記ファブリックベクトル演算は、前記指定された仮想チャネルの仕様を有するデータ構造記述子により指定されるものである方法。
【請求項５】
請求項４記載の方法において、前記ファブリックベクトル演算を完了する工程は、前記ファブリックを介して所定数のデータ要素を前記処理要素の第２の処理要素から受信する工程を有するものである方法。
【請求項６】
請求項５記載の方法において、前記第１の処理要素及び前記第２の処理要素は、ウェーハスケール集積を介して製造されるものである方法。
【請求項７】
請求項１記載の方法において、前記指定された仮想チャネルに関連付けられた前記１若しくはそれ以上の命令の前記少なくとも一つは、ニューラルネットワークのアクティベーションの計算、ニューラルネットワークのアクティベーションの部分和の計算、ニューラルネットワークのエラーの計算、ニューラルネットワークの勾配推定の計算、及びニューラルネットワークの重みの更新の１若しくはそれ以上の少なくとも部分を実行するものである方法。
【請求項８】
装置であって、
ファブリックとして相互接続された複数の処理要素間で複数の仮想チャネル上でファブリックパケットを選択的に交換する手段であって、各ファブリックパケットは、前記仮想チャネルの1つを識別する仮想チャネル指定子を有し、各処理要素は、ファブリックルータと、前記仮想チャネルのそれぞれに関連付けられたデータフローベースの処理及び命令ベースの処理を実行することができる計算要素とを有し、各計算要素は、前記仮想チャネルのそれぞれに関連付けられた１若しくはそれ以上の命令を記憶することができ且つさらに前記１若しくはそれ以上の命令の少なくとも１つを実行のために前記計算要素に提供することができるメモリを有するものである、交換する手段と、
各処理要素において、前記仮想チャネルのそれぞれの各ローカル仮想キューを管理する手段と、
各処理要素において、所定の基準に従って、関連付けられた処理に前記仮想チャネルのうちの複数の仮想チャネルを選ぶ手段であって、前記所定の基準は、前記仮想チャネルのローカルの現在アクティブな仮想チャネルのプールから選択することを有するものである、選ぶ手段と、
前記処理要素の第１の処理要素において、前記仮想チャネルの１つを指定するアクティベート演算を行う手段と、
前記第１の処理要素において、前記行う手段に応答して、前記指定された仮想チャネルをローカルにアクティベートする手段と、
前記第１の処理要素において、前記ローカルにアクティベートする手段の後に動作可能な、前記所定の基準に従って前記指定された仮想チャネルをローカルに選ぶ手段と、
前記第１の処理要素において、前記ローカルに選ぶ手段に応答して、前記指定された仮想チャネルの関連付けられた処理を開始する手段であって、前記指定された仮想チャネルの関連付けられた処理は、前記関連付けられた１若しくはそれ以上の命令の少なくとも１つを前記第１の処理要素の前記計算要素の前記メモリから取得及び実行する前記第１の処理要素を有する、開始する手段と
を有する装置。
【請求項９】
請求項８記載の装置において、前記取得することは、前記第１の処理要素において、前記指定された仮想チャネルの識別子を使用して、前記関連付けられた１若しくはそれ以上の命令の前記少なくとも１つの前記メモリにおけるアドレスを特定する手段を有するものである装置。
【請求項１０】
請求項８記載の装置において、前記第１の処理要素においてファブリックベクトル演算を完了する手段は、前記行う手段を有し、前記ファブリックベクトル演算は、前記指定された仮想チャネルの仕様を有するデータ構造記述子により指定されるものである装置。
【請求項１１】
請求項１０記載の装置において、前記ファブリックベクトル演算を完了する手段は、前記ファブリックを介して所定数のデータ要素を前記処理要素の第２の処理要素に送信する手段を有するものである装置。
【請求項１２】
請求項１１記載の装置において、前記第１の処理要素及び前記第２の処理要素は、ウェーハスケール集積を介して製造されるものである装置。
【請求項１３】
請求項８記載の装置において、さらに、
各処理要素は、前記仮想チャネルのそれぞれに対してローカルアクティベート状態及び非アクティベート状態の１つをそれぞれ示すことができるアクティベートインジケータをさらに有し、
前記第１の処理要素において、さらに、前記行う手段に応答して、前記指定された仮想チャネルの前記アクティベートインジケータを前記アクティベート状態に設定する手段と、
前記第１の処理要素において、前記関連付けられた処理を開始する工程に応答して、前記指定された仮想チャネルの前記アクティベートインジケータを前記非アクティベート状態に設定する手段と
を含むものである装置。
【請求項１４】
請求項８記載の装置において、さらに、
データフローグラフの複数のノードに対応する通信及び計算をそれぞれ指定する手段と、
前記データフローグラフに対応する前記通信及び計算のそれぞれの同時実行に必要な全てのパラメータ及びタスクソフトウェアで前記ファブリックを初期化する手段と、
前記データフローグラフの全ての層に対して前記同時実行を行い、１つまたは複数の推測及びトレーニングを行う手段と
を有するものである装置。
【請求項１５】
請求項１４記載の装置において、前記データフローグラフはニューラルネットワークであり、前記ノードはニューロンに対応し、前記データフローグラフのパラメータの少なくとも幾つかは、前記ニューラルネットワークの複数の重みに対応するものである装置。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願のタイプにより許される限り、本願は、全て、本願の有効出願日までに本願と同一の所有者により所有される以下の出願をあらゆる目的のためにこの参照により組み込む：
２０１８年４月１７日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＤＡＴＡ  ＳＴＲＵＣＴＵＲＥ  ＤＥＳＣＲＩＰＴＯＲＳ  ＦＯＲ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧ  ＡＣＣＥＬＥＲＡＴＩＯＮのＰＣＴ出願第ＰＣＴ／ＩＢ２０１８／０５２６４３号（代理人整理番号ＣＳ−１７−１２ＰＣＴ）、
２０１８年４月１７日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＭＩＣＲＯＴＨＲＥＡＤＩＮＧ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧのＰＣＴ出願第ＰＣＴ／ＩＢ２０１８／０５２６４０号（代理人整理番号ＣＳ−１７−０８ＰＣＴ）、
２０１８年４月１６日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＴＡＳＫ  ＳＹＮＣＨＲＯＮＩＺＡＴＩＯＮ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧのＰＣＴ出願第ＰＣＴ／ＩＢ２０１８／０５２６３８号（代理人整理番号ＣＳ−１７−０６ＰＣＴ）、
２０１８年４月１５日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＷＡＶＥＬＥＴ  ＲＥＰＲＥＳＥＮＴＡＴＩＯＮ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧのＰＣＴ出願第ＰＣＴ／ＩＢ２０１８／０５２６１０号（代理人整理番号ＣＳ−１７−０３ＰＣＴ）、
２０１８年４月１５日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＮＥＵＲＯＮ  ＳＭＥＡＲＩＮＧ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧのＰＣＴ出願第ＰＣＴ／ＩＢ２０１８／０５２６０７号（代理人整理番号ＣＳ−１７−０１ＰＣＴ）、
２０１８年４月１５日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＤＡＴＡＦＬＯＷ  ＴＲＩＧＧＥＲＥＤ  ＴＡＳＫＳ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧのＰＣＴ出願第ＰＣＴ／ＩＢ２０１８／０５２６０６号（代理人整理番号ＣＳ−１７−０２ＰＣＴ）、
２０１８年４月１３日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＦＬＯＡＴＩＮＧ−ＰＯＩＮＴ  ＵＮＩＴ  ＳＴＯＣＨＡＳＴＩＣ  ＲＯＵＮＤＩＮＧ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの国際出願第ＰＣＴ／ＩＢ２０１８／０５２６０２号（代理人整理番号ＣＳ−１７−１１ＰＣＴ）、
２０１８年４月１１日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＭＩＣＲＯＴＨＲＥＡＤＩＮＧ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／６５５，８２６号（代理人整理番号ＣＳ−１７−０８）、
２０１８年４月９日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＢＡＣＫＰＲＥＳＳＵＲＥ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／６５５，２１０号（代理人整理番号ＣＳ−１７−２１）、
２０１８年４月５日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＴＡＳＫ  ＡＣＴＩＶＡＴＩＮＧ  ＦＯＲ  ＡＣＣＥＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／６５２，９３３号（代理人整理番号ＣＳ−１７−２２）、
２０１８年２月２３日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国特許出願第１５／９０３，３４０号（代理人整理番号ＣＳ−１７−１３ＮＰ）、
２０１８年２月２３日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの国際出願第ＰＣＴ／ＩＢ２０１８／０５１１２８号（代理人整理番号ＣＳ−１７−１３ＰＣＴ）
２０１８年２月９日付で出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＦＡＢＲＩＣ  ＶＥＣＴＯＲＳ  ＦＯＲ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧ  ＡＣＣＥＬＥＲＡＴＩＯＮの米国仮特許出願第６２／６２８，７８４号（整理番号ＣＳ−１７−０５）、
２０１８年２月９日付で出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＤＡＴＡ  ＳＴＲＵＣＴＵＲＥ  ＤＥＳＣＲＩＰＴＯＲＳ  ＦＯＲ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧ  ＡＣＣＥＬＥＲＡＴＩＯＮの米国仮特許出願第６２／６２８，７７３号（整理番号ＣＳ−１７−１２）、
２０１７年１１月１日付で出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＮＥＵＲＯＮ  ＳＭＥＡＲＩＮＧ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／５８０，２０７号（整理番号ＣＳ−１７−０１）、
２０１７年８月８日付で出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＤＡＴＡＦＬＯＷ  ＴＲＩＧＧＥＲＥＤ  ＴＡＳＫＳ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／５４２，６４５号（整理番号ＣＳ−１７−０２）、
２０１７年８月８日付で出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＴＡＳＫ  ＳＹＮＣＨＲＯＮＩＺＡＴＩＯＮ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／５４２，６５７号（整理番号ＣＳ−１７−０６）、
２０１７年６月１９日付で出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＷＡＶＥＬＥＴ  ＲＥＰＲＥＳＥＮＴＡＴＩＯＮ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／５２２，０６５号（整理番号ＣＳ−１７−０３）、
２０１７年６月１９日付で出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＣＯＮＴＲＯＬ  ＷＡＶＥＬＥＴ  ＦＯＲ  ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／５２２，０８１号（整理番号ＣＳ−１７−０４）、
２０１７年６月１５日付で出願された第一発明者Ｍｉｃｈａｅｌ  Ｅｄｗｉｎ  ＪＡＭＥＳ及び名称ＩＮＣＲＥＡＳＥＤ  ＣＯＮＣＵＲＲＥＮＣＹ  ＡＮＤ  ＥＦＦＩＣＩＥＮＣＹ  ＯＦ  ＤＥＥＰ  ＮＥＴＷＯＲＫ  ＴＲＡＩＮＩＮＧ  ＶＩＡ  ＣＯＮＴＩＮＵＯＵＳ  ＰＲＯＰＡＧＡＴＩＯＮの米国仮特許出願第６２／５２０，４３３号（整理番号ＣＳ−１７−１３Ｂ）、
２０１７年６月１１日付で出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／５１７，９４９号（整理番号ＣＳ−１７−１４Ｂ）、
２０１７年４月１７日付で出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＡＣＣＥＬＥＲＡＴＥＤ  ＤＥＥＰ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／４８６，３７２号（整理番号ＣＳ−１７−１４）、
２０１７年４月１４日付けで出願された第一発明者Ｓｅａｎ  ＬＩＥ及び名称ＦＬＯＡＴＩＮＧ−ＰＯＩＮＴ  ＵＮＩＴ  ＳＴＯＣＨＡＳＴＩＣ  ＲＯＵＮＤＩＮＧ  ＦＯＲ  ＭＡＣＨＩＮＥ  ＬＥＡＲＮＩＮＧの米国仮特許出願第６２／４８５，６３８号（代理人整理番号ＣＳ−１７−１１）、並びに
２０１７年２月２３日付で出願された第一発明者Ｍｉｃｈａｅｌ  Ｅｄｗｉｎ  ＪＡＭＥＳ及び名称ＩＮＣＲＥＡＳＥＤ  ＣＯＮＣＵＲＲＥＮＣＹ  ＡＮＤ  ＥＦＦＩＣＩＥＮＣＹ  ＯＦ  ＤＥＥＰ  ＮＥＴＷＯＲＫ  ＴＲＡＩＮＩＮＧ  ＶＩＡ  ＣＯＮＴＩＮＵＯＵＳ  ＰＲＯＰＡＧＡＴＩＯＮの米国仮特許出願第６２／４６２，６４０号（整理番号ＣＳ−１７−１３）。
【背景技術】
【０００２】
分野：精度、性能、及びエネルギー効率の１若しくはそれ以上の改善を提供する加速化ディープラーニングにおける進歩が必要である。
【０００３】
関連技術：公知又は周知であるものとして明らかに識別される場合を除き、本明細書における技法及び概念の言及は、状況、定義、又は比較目的を含め、そのような技法及び概念が従来、公知されるか、又は従来技術の部分であることを認めるものとして解釈されるべきではない。本明細書に引用される全ての引用文献（存在する場合）は、特許、特許出願、及び公開物を含め、あらゆる目的のために特に組み込まれるか否かに関係なく、全体的にこの参照により本明細書に組み込まれる。
この出願の発明に関連する先行技術文献情報としては、以下のものがある（国際出願日以降国際段階で引用された文献及び他国に国内移行した際に引用された文献を含む）。
（先行技術文献）
（特許文献）
（特許文献１）  米国特許出願公開第２００４／０１６０９７０号明細書
（特許文献２）  米国特許出願公開第２０１１／０３１３９６１号明細書
（特許文献３）  米国特許出願公開第２０１６／０３７９１１５号明細書
（特許文献４）  米国特許出願公開第２００８／０１０７１０５号明細書
（非特許文献）
（非特許文献１）  ＫＡ−ＭＩＮＧ  ＫＥＵＮＧ，'Ａ  ｓｔｕｄｙ  ｏｆ  ｏｎ−ｃｈｉｐ  ＦＰＧＡ  ｓｙｓｔｅｍ  ｗｉｔｈ  ２Ｄ  ｍｅｓｈ  ｎｅｔｗｏｒｋ'，ＩＯＷＡ  ＳＴＡＴＥ  ＵＮＩＶＥＲＳＩＴＹ，Ｇｒａｄｕａｔｅ  Ｔｈｅｓｅｓ  ａｎｄ  Ｄｉｓｓｅｒｔａｔｉｏｎｓ，２０１０，ｐｐ．１−１３１  ＜ＵＲＬ：  ｈｔｔｐｓ：／／ｌｉｂ．ｄｒ．ｉａｓｔａｔｅ．ｅｄｕ／ｅｔｄ／１１２５１＞＜／ＵＲＬ：＞
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
本発明は、多くの方法で、例えば、プロセス、製品、装置、システム、複合物、及びコンピュータ可読記憶媒体（例えば、ディスク等の光学及び／又は磁気大容量記憶装置内の媒体、フラッシュ記憶装置等の不揮発性記憶装置を有する集積回路）等のコンピュータ可読媒体、又はプログラム命令が光学もしくは電子通信リンクを介して送信されるコンピュータネットワークとして実施することができる。詳細な説明は、上記識別された分野でのコスト、生産性、性能、効率、及び使用有用性の改善を可能にする本発明の１若しくはそれ以上の実施形態の説明を提供する。詳細な説明は、詳細な説明の残りの部分の理解を促進する前置きを含む。前置きは、本明細書に記載される概念によるシステム、方法、製品、及びコンピュータ可読媒体の１若しくはそれ以上の実施例を含む。結論においてより詳細に考察するように、本発明は、発行される特許請求の範囲内の可能な変更及び変形を全て包含する。
【図面の簡単な説明】
【０００５】
【図１】図１は、ディープ・ラーニング・アクセラレータを使用したニューラルネットワークのトレーニング及び推論のシステムの一実施形態の選択された細部を示すものである。
【図２】図２は、ディープ・ラーニング・アクセラレータを使用したニューラルネットワークのトレーニング及び推論に関連付けられたソフトウェア要素の一実施形態の選択された細部を示すものである。
【図３】図３は、ディープ・ラーニング・アクセラレータを使用してニューラルネットワークをトレーニングし、トレーニングされたニューラルネットワークを使用して推論を実行することに関連付けられた処理の一実施形態の選択された細部を示すものである。
【図４】図４は、ディープ・ラーニング・アクセラレータの一実施形態の選択された細部を示すものである。
【図５】図５は、ディープ・ラーニング・アクセラレータの処理要素の一実施形態の選択された細部を示すものである。
【図６】図６は、処理要素のルータの一実施形態の選択された細部を示すものである。
【図７Ａ】図７Ａは、処理要素のルータに関連付けられた処理の一実施形態の選択された細部を示すものである。
【図７Ｂ】図７Ｂは、処理要素の計算要素に関連付けられた背圧情報を生成し提供する一実施形態の選択された細部を示すものである。
【図７Ｃ】図７Ｃは、処理要素のルータに関連付けられた背圧情報を生成し提供する一実施形態の選択された細部を示すものである。
【図７Ｄ】図７Ｄは、処理要素の計算要素に関連付けられたストール処理の一実施形態の選択された細部を示すものである。
【図８】図８は、処理要素の計算要素の一実施形態の選択された細部を示すものである。
【図９Ａ】図９Ａは、タスク開始のためのウェーブレット処理の一実施形態の選択された細部を示すものである。
【図９Ｂ】図９Ｂは、タスクアクティベーションの一実施形態の選択された細部を示すものである。
【図９Ｃ】図９Ｃは、ブロック命令実行及びブロック解除命令実行の一実施形態の選択された細部を示すものである。
【図１０Ａ】図１０Ａは、プロセッサ要素の各組に１つのニューロンの複数のインスタンスをマッピングする一実施形態において生じる高レベルデータフローの選択された細部を示すものである。
【図１０Ｂ】図１０Ｂは、プロセッサ要素の各組に１つのニューロンの複数のインスタンスをマッピングする一実施形態において生じる高レベルデータフローの選択された細部を示すものである。
【図１１】図１１は、クローズアウトを介した依存性管理を含む順方向パス状態機械で使用されるタスクの一実施形態を示すものである。
【図１２】図１２は、アクティベーション累積及びクローズアウト、その後に続く部分和計算及びクローズアウトに関連付けられたフローの一実施形態の選択された細部を示すものである。
【図１３Ａ】図１３Ａは、スパースウェーブレットの一実施形態の選択された細部を示すものである。
【図１３Ｂ】図１３Ｂは、高密度ウェーブレットの一実施形態の選択された細部を示すものである。
【図１４】図１４は、ウェーブレットを作成し送信する一実施形態の選択された細部を示すものである。
【図１５】図１５は、ウェーブレットを受信する一実施形態の選択された細部を示すものである。
【図１６】図１６は、ウェーブレットを消費する一実施形態の選択された細部を示すものである。
【図１７】図１７は、ニューラルネットワークの一実施形態の選択された細部を示すものである。
【図１８Ａ】図１８Ａは、ニューロンへの処理要素の割り振りの第１の実施形態の選択された細部を示すものである。
【図１８Ｂ】図１８Ｂは、ニューロンへの処理要素の割り振りの第２の実施形態の選択された細部を示す物である。
【図１９】図１９は、複数の処理要素にわたるニューロンのスメアリングの一実施形態の選択された細部を示すものである。
【図２０】図２０は、分割ニューロンの部分間の通信の一実施形態の選択された細部を示すものである。
【図２１Ａ】図２１Ａは、ファブリック入力データ構造記述子の一実施形態の選択された細部を示すものである。
【図２１Ｂ】図２１Ｂは、ファブリック出力データ構造記述子の一実施形態の選択された細部を示すものである。
【図２１Ｃ】図２１Ｃは、１Ｄメモリ・ベクトル・データ構造記述子の一実施形態の選択された細部を示すものである。
【図２１Ｄ】図２１Ｄは、４Ｄメモリ・ベクトル・データ構造記述子の一実施形態の選択された細部を示すものである。
【図２１Ｅ】図２１Ｅは、循環メモリ・バッファ・データ構造記述子の一実施形態の選択された細部を示すものである。
【図２２Ａ】図２２Ａは、循環メモリバッファ拡張データ構造記述子の一実施形態の選択された細部を示すものである。
【図２２Ｂ】図２２Ｂは、４Ｄメモリベクトル拡張データ構造記述子の一実施形態の選択された細部を示すものである。
【図２３】図２３は、データ構造記述子によるオペランドアクセスの選択された細部を示すものである。
【図２４】図２４は、データ構造記述子を復号化する一実施形態の選択された細部を示すものである。
【図２５Ａ】図２５Ａは、複数オペランド命令の一実施形態の選択された細部を示すものである。
【図２５Ｂ】図２５Ｂは、１発信元０宛先オペランド命令の一実施形態の選択された細部を示すものである。
【図２５Ｃ】図２５Ｃは、即値命令の一実施形態の選択された細部を示すものである。
【図２６】図２６は、マイクロスレッド処理による処理の選択された細部を示すものである。
【図２７Ａ】図２７Ａは、確率勾配降下（Ｓｔｏｃｈａｓｔｉｃ  Ｇｒａｄｉｅｎｔ  Ｄｅｓｃｅｎｔ：ＳＧＤ）のパイプラインフローの一実施形態を示すものである。
【図２７Ｂ】図２７Ｂは、ミニバッチ勾配降下（Ｍｉｎｉ−Ｂａｔｃｈ  Ｇｒａｄｉｅｎｔ  Ｄｅｓｃｅｎｔ：ＭＢＧＤ）のパイプラインフローの一実施形態を示すものである。
【図２７Ｃ】図２７Ｃは、連続伝搬勾配降下（Ｃｏｎｔｉｎｕｏｕｓ  Ｐｒｏｐａｇａｔｉｏｎ  Ｇｒａｄｉｅｎｔ  Ｄｅｓｃｅｎｔ：ＣＰＧＤ）のパイプラインフローの一実施形態を示すものである。
【図２７Ｄ】図２７Ｄは、リバース・チェック・ポイント（Ｒｅｖｅｒｓｅ  Ｃｈｅｃｋ  Ｐｏｉｎｔ：ＲＣＰ）を用いる連続伝搬勾配降下（ＣＰＧＤ）のパイプラインフローの一実施形態を示すものである。
【図２８Ａ】図２８Ａ〜２８Ｅは、ＳＧＤ処理、ＭＢＧＤ処理、ＣＰＧＤ処理、及びＲＣＰ処理による順方向パス及び逆方向パス実施形態の様々な態様を示すものである。
【図２８Ｂ】図２８Ａ〜２８Ｅは、ＳＧＤ処理、ＭＢＧＤ処理、ＣＰＧＤ処理、及びＲＣＰ処理による順方向パス及び逆方向パス実施形態の様々な態様を示すものである。
【図２８Ｃ】図２８Ａ〜２８Ｅは、ＳＧＤ処理、ＭＢＧＤ処理、ＣＰＧＤ処理、及びＲＣＰ処理による順方向パス及び逆方向パス実施形態の様々な態様を示すものである。
【図２８Ｄ】図２８Ａ〜２８Ｅは、ＳＧＤ処理、ＭＢＧＤ処理、ＣＰＧＤ処理、及びＲＣＰ処理による順方向パス及び逆方向パス実施形態の様々な態様を示すものである。
【図２８Ｅ】図２８Ａ〜２８Ｅは、ＳＧＤ処理、ＭＢＧＤ処理、ＣＰＧＤ処理、及びＲＣＰ処理による順方向パス及び逆方向パス実施形態の様々な態様を示すものである。
【図２９】図２９は、浮動小数点ユニットを有し、確率的丸めが可能なプロセッサの一実施形態の選択された細部を示すものである。
【図３０Ａ】図３０Ａは、任意選択で確率的丸めを指定する浮動小数点命令の一実施形態の選択された細部を示すものである。
【図３０Ｂ】図３０Ｂは、確率的丸めの制御に関連付けられた浮動小数点制御レジスタの一実施形態の選択された細部を示すものである。
【図３０Ｃ】図３０Ｃは、正規化及び丸めを受ける浮動小数点演算の結果の仮数の一実施形態の選択された細部を示すものである。
【図３０Ｄ】図３０Ｄは、正規化後であり、丸めを受ける浮動小数点演算の結果の正規化された仮数の一実施形態の選択された細部を示すものである。
【図３１】図３１は、任意選択で確率的丸めを用いて浮動小数点命令を実行するプロセッサの一実施形態の選択された細部の流れ図を示すものである。
【発明を実施するための形態】
【０００６】
詳細な説明
本発明の１若しくはそれ以上の実施形態の詳細な説明を以下に、本発明の選択された細部を図示する添付図と共に提供する。本発明について実施形態に関連して説明する。本明細書における実施形態は、単なる例示であることが理解され、本発明は明らかに、本明細書における実施形態のいずれか又は全てに限定されず、本発明は、多くの代替、変更、及び均等物を包含する。説明での単調さを回避するために、様々な言葉のラベル（最初、最後、特定の、様々な、さらに、他の、特定の、選択、幾つか、及び顕著な等）が、別個の組の実施形態に適用されることがあり、本明細書で使用される場合、そのようなラベルは明らかに、品質又は任意の形態の嗜好又は偏見を意味するものではなく、単に別個の組を好都合に区別することが意味される。開示されるプロセスの幾つかの演算の順序は、本発明の範囲内で変更可能である。複数の実施形態がプロセス、システム、及び／又はプログラム命令特徴の変形を説明するように機能する場合は常に、所定又は動的に決定される基準に従って、複数のマルチ実施形態にそれぞれ対応する複数の動作モードの１つの静的及び／又は動的選択を実行する他の実施形態も考えられる。本発明の完全な理解を提供するために、以下の説明では、多くの特定の詳細が記載される。詳細は説明のために提供され、本発明は、詳細の幾つか又は全てなしで、特許請求の範囲に従って実施することができる。明確にするために、本発明に関連する当技術分野で既知の技術材料は、本発明が不必要に曖昧にならないように、詳細に説明しなかった。
【０００７】
導入部
導入部は、詳細な説明のより素早い理解を促進するためだけに包含され、本発明は、導入部に提示される概念（明白な例がある場合、明白な例を含む）に限定されず、任意の導入部の段落は必ずしも、趣旨全体の要約図であり、網羅的又は制限的な説明であることは意味されない。例えば、以下の導入部は、スペース及び編成により特定の実施形態のみに制限された概説情報を提供する。本明細書の残り全体を通して考察される、特許請求の範囲が最終的に描かれる実施形態を含め、多くの他の実施形態がある。
【０００８】
概念的に、加速化ディープラーニングのタスクアクティベーションに関連する一態様では、高度ディープラーニングにおける技法は、精度、性能、及びエネルギー効率の１若しくはそれ以上において改善を提供する。処理要素のアレイは、データのウェーブレットに対してフローベースの計算を実行する。各処理要素は、各計算要素及び各ルーティング要素を有する。各計算要素は処理リソースとメモリリソースを有する。各ルータは、ウェーブレットを介して、２Ｄメッシュにおける少なくとも最近傍と通信できるようにする。ルーティングは、各ウェーブレット内の各仮想チャネル指定子及び各ルータ内のルーティング構成情報により制御される。仮想チャネル指定子は、各仮想チャネルに対応する。アクティベート命令の実行又はファブリックベクトル演算の完了は、仮想チャネルの１つをアクティベートする。特定の仮想チャネルは、前にアクティベートされた仮想チャネル及び前に受信したウェーブレットに関連付けられた仮想チャネルを有するプールから選択される。選択された仮想チャネルに対応するタスクは、選択された仮想チャネルに対応する命令を実行することによりアクティベート、例えば、開始される。
【０００９】
加速化ディープラーニングの第１の例は、ディープ・ラーニング・アクセラレータを使用して、ニューラルネットワークをトレーニングすることである。加速化ディープラーニングの第２の例は、ディープ・ラーニング・アクセラレータを使用して、トレーニングされたニューラルネットワークを動作させて、推論を実行することである。加速化ディープラーニングの第３の例は、ディープ・ラーニング・アクセラレータを使用して、ニューラルネットワークをトレーニングし、続けて、トレーニングされたニューラルネットワーク、トレーニングされたニューラルネットワークからの情報、及びトレーニングされたニューラルネットワークのバリアントの任意の１若しくはそれ以上を用いて推論を実行することである。
【００１０】
ニューラルネットワークの例には、全結合ニューラルネットワーク（Ｆｕｌｌｙ  Ｃｏｎｎｅｃｔｅｄ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ：ＦＣＮＮｓ）、再帰型ニューラルネットワーク（Ｒｅｃｕｒｒｅｎｔ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ：ＲＮＮｓ）、畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ：ＣＮＮｓ）、長短期メモリ（Ｌｏｎｇ  Ｓｈｏｒｔ−Ｔｅｒｍ  Ｍｅｍｏｒｙ：ＬＳＴＭ）ネットワーク、オートエンコーダ、ディープビリーフネットワーク、及び敵対的生成ネットワークがある。
【００１１】
ニューラルネットワークをトレーニングする一例は、ディープ・ラーニング・アクセラレータを介したハードウェア加速化等により、ニューラルネットワークに関連付けられる１若しくはそれ以上の重みを決定することである。推論を行うことの一例は、トレーニングされたニューラルネットワークを使用し、トレーニングされたニューラルネットワークに関連付けられた重みに基づいて入力データを処理することにより結果を計算することである。本明細書で使用される場合、「重み」という用語は、様々な形態のニューラルネットワーク処理で使用される「パラメータ」の一例である。例えば、幾つかのニューラルネットワーク学習は、パラメータの決定に関し、パラメータは次に、パラメータを使用したニューラルネットワーク推論の実行に使用可能である。
【００１２】
ニューラルネットワークは、ニューロンのレイヤを含むデータフローグラフに従ってデータを処理する。刺激（例えば、入力データ）は、ニューロンの入力レイヤにより受信され、データフローグラフの計算結果（例えば、出力データ）は、ニューロンの出力レイヤにより提供される。ニューロンのレイヤ例には、入力レイヤ、出力レイヤ、正規化線形ユニットレイヤ、全結合レイヤ、再帰レイヤ、長短期メモリレイヤ、畳み込みレイヤ、カーネルレイヤ、ドロップアウトレイヤ、及びプーリングレイヤがある。ニューラルネットワークは、ハードウェア加速を受けて条件付きで及び／又は選択的にトレーニングされる。トレーニング後、ニューラルネットワークは、ハードウェア加速を受けて推論に条件付き及び／又は選択的に使用される。
【００１３】
ディープ・ラーニング・アクセラレータの一例は、専用性の比較的低いハードウェア要素を使用するよりも比較的効率的に、ニューラルネットワークをトレーニングし、及び／又はニューラルネットワークを用いて推論を実行する、１若しくはそれ以上のソフトウェア要素と併せて動作する１若しくはそれ以上の比較的専用のハードウェア要素である。比較的専用のハードウェア要素の幾つかの実施態様は、カスタム論理、合成論理、ＡＳＩＣ、及び／又はＦＰＧＡを介して実施される等のトランジスタ、レジスタ、インダクタ、キャパシタ、ワイヤ相互接続、結合論理（例えば、ＮＡＮＤ、ＮＯＲ）ゲート、ラッチ、レジスタファイル、メモリアレイ、メモリアレイのタグ、コンテンツアドレス指定可能メモリ、フラッシュ、ＲＯＭ、ＤＲＡＭ、ＳＲＡＭ、シリアライザ／デシリアライザ（Ｓｅｒｉａｌｉｚｅｒ／Ｄｅｓｅｒｉａｌｉｚｅｒ：ＳｅｒＤｅｓ）、Ｉ／Ｏドライバ等の１若しくはそれ以上のハードウェア論理回路要素を含む。専用性が比較的低いハードウェア要素の幾つかには、従来のＣＰＵ及び従来のＧＰＵがある。
【００１４】
ディープ・ラーニング・アクセラレータの一実施例は、ニューラルネットワークのトレーニング及び／又はニューラルネットワークを用いての推論に実行される計算に従ってデータフローを処理することができる。幾つかのディープ・ラーニング・アクセラレータは、ファブリックを介して結合された処理要素を有し、ファブリックを介して互いと通信することができる。処理要素及びファブリックはまとめて、処理要素のファブリックと呼ばれることがある。
【００１５】
処理要素の一実施例は、ウェーブレットを通信し処理することができる。様々な状況では、ウェーブレットは、通信及び／又は処理に従ったデータフロー及び／又は命令フローに対応し、ニューラルネットワークのトレーニング及び／又はニューラルネットワークを使用した推論に実行される計算を可能にする。
【００１６】
処理要素の一例は、ファブリックを介してウェーブレットを通信するルータと、ウェーブレットを処理する計算要素とを有する。ルータの一例は複数の要素に結合される：ファブリック、計算要素へのオフランプ、及び計算要素からのオンランプ。ルータとファブリックとの間の結合の一例は、ルータと、例えば、４つの論理及び／又は物理的に隣接した処理要素との間の通信を可能にする。ルータは様々に、ファブリック及びオンランプからウェーブレットを受信する。ルータは様々に、ウェーブレットをファブリック及びオフランプに送信する。
【００１７】
計算要素の一実施例は、タスクを開始し、ウェーブレットに関連付けられた命令を実行し、ウェーブレット及び／又は命令に関連付けられたデータにアクセスすることにより、ウェーブレットを処理することができる。命令は、算術命令、制御フロー命令、データ型変換命令、構成命令、ファブリック管理命令、及びロード／記憶命令を含む命令セットアーキテクチャによる。命令は、様々なデータ型、例えば、様々な幅の整数データ型及び浮動小数点データ型を含むオペランドに対して動作する。オペランドは様々に、スカラーオペランド及びベクトルオペランドを含む。様々な実施形態及び／又は使用状況では、ベクトルは様々に、例えばニューラルネットワークの重み、ニューラルネットワークの入力又は刺激、ニューラルネットワークのアクティベーション、及び／又はニューラルネットワークの部分和を表す。幾つかの状況では、ベクトルはスパースベクトル（例えば、ニューロンアクティベーションのベクトル）であり、スパースベクトル要素（例えば、非ゼロ要素のみ）を含む。幾つかの他の状況では、ベクトルは高密度ベクトル（例えば、ピクセル値）であり、高密度データ要素（例えば、ゼロ要素を含むベクトルの全ての要素）を含む。
【００１８】
計算要素の一例は、命令により指定された演算（例えば、算術演算、制御フロー演算、及びロード／記憶演算）を実行することにより、ウェーブレット二関連付けられた命令を集合的に実行するハードウェア要素を有する。ハードウェア要素の例には、ピッカーキュー、ピッカー、タスク定義テーブル、命令シーケンサ、命令デコーダ、データシーケンサ、レジスタファイル、メモリ、疑似乱数生成器、及びＡＬＵがある。ハードウェア要素の幾つかの実施態様は、本明細書の他の箇所に記載されるようなハードウェア論理回路要素に従う。計算要素は計算エンジンと呼ばれることがある。計算スケジューラはピッカーと呼ばれることがあり、計算スケジューラキューはピッカーキューと呼ばれることがある。
【００１９】
ファブリックの一例は、処理要素間及び／又は１つの処理要素内の論理及び／又は物理的結合の集まりである。ファブリックは、メッシュ、２Ｄメッシュ、３Ｄメッシュ、ハイパーキューブ、トーラス、リング、ツリー、又はそれらの任意の組合せ等の論理及び／又は物理的通信トポロジの実施に使用可能である。処理要素間の物理的な結合の一例は、物理的に結合された処理要素間の１組の物理的な相互接続（任意選択及び／又は選択的なバッファリングを含む）である。物理的に結合された処理要素の第１の例は、第２の処理要素の真横（「北」、「南」、「東」、又は「西」等）に配置された第１の処理要素等の物理的に直に隣接した処理要素である。物理的に結合された処理要素の第２の例は、比較的少数の介在処理要素内、例えば、第２の処理要素から１つ又は２つの「行」及び／又は「列」だけ離れて配置された第１の処理要素等の物理的に比較的近傍の処理要素である。物理的に結合された処理要素の第３の例は、処理要素に関連付けられたクロック・サイクル及び／又はクロックサブサイクル内のシグナル伝搬（任意選択及び／又は選択でのバッファリングあり又はなしで）により制限される距離等の第２の処理要素から物理的に比較的離れて配置された第１の処理要素等の物理的に比較的離れた処理要素である。１つの処理要素（例えば、計算要素及びルータを有する）内の物理的結合の一例は、出力情報を計算要素からルータに結合するオンランプ及び入力情報をルータから計算要素に結合するオフランプである。幾つかの状況では、ルータは、情報をオンランプからオフランプにルーティングする。
【００２０】
処理要素間の論理結合の一例は、処理要素内のルータにより実施される仮想チャネルである。第１の処理要素と第２の処理要素との間のルートは、例えば、仮想チャネル及びルーティング構成情報に従って転送されるルートに沿って処理要素内のルータにより実施される。１つの特定の処理要素（例えば、ルータを有する）内の論理結合の一例は、ルータにより実施される仮想チャネルであり、特定の処理要素が仮想チャネルを介して特定の処理要素に情報を送信できるようにする。ルータは、仮想チャネル及びルーティング構成情報に従って特定の処理要素の「内部」で転送する。
【００２１】
ウェーブレットの一例は、ファブリックを介して処理要素間で通信される一束の情報である。ウェーブレットの一例は、ウェーブレットペイロード及びカラーを有する。ウェーブレットペイロードは、データを有し、命令が関連付けられる。処理要素の計算要素により受信されたウェーブレットへの第１の応答は、ウェーブレットに関連付けられた命令の処理に対応する等のタスクを計算要素が開始することを含む。処理要素の計算要素により受信されたウェーブレットへの第２の応答は、計算要素がウェーブレットのデータを処理することを含む。ウェーブレットのタイプ例には、高密度ウェーブレット及びスパースウェーブレット並びにデータウェーブレット及び制御ウェーブレットがある。
【００２２】
ウェーブレットは、例えば、処理要素間の通信に使用される。第１の状況では、第１の処理要素はウェーブレットを第２の処理要素に送信する。第２の状況では、外部デバイス（例えば、ＦＰＧＡ）は、ウェーブレットを処理要素に送信する。第３の状況では、処理要素はウェーブレットを外部デバイス（例えば、ＦＰＧＡ）に送信する。
【００２３】
仮想チャネルの一例は、カラーにより指定された１若しくはそれ以上の通信パスウェイであり、例えば、ファブリック及び１若しくはそれ以上のルータにより可能になる。特定のカラーを有するウェーブレットは、特定のカラーに関連付けられた特定の仮想チャネルに関連付けられたものとして呼ばれることがある。カラーの第１の例は、２つの異なる処理要素間の仮想チャネルを指定するファブリックカラーである。幾つかの実施形態では、ファブリックカラーは５ビット整数である。カラーの第２の例は、処理要素から処理要素への仮想チャネルを指定するローカルカラーである。幾つかの実施形態では、カラーは６ビット整数であり、ファブリックカラー及びローカルカラーの一方を指定する。
【００２４】
タスクの一例は、ウェーブレットに応答して実行される命令の集まりを含む。命令の一例は演算を含み、任意選択で、演算に従って処理すべきデータ要素のロケーションを指定する１若しくはそれ以上のオペランドを含む。オペランドの第１の例は、メモリ内のデータ要素を指定する。オペランドの第２の例は、ファブリックを介して通信された（例えば、受信又は送信された）データ要素を指定する。データシーケンサの一例は、データ要素のロケーションを決める。命令シーケンサの一例は、ウェーブレットに関連付けられた命令のメモリ内のアドレスを決める。
【００２５】
ピッカーキューの一例は、計算要素を処理するために、ファブリックのオフランプを介して受信したウェーブレットを保持することができる。ピッカーの一例は、ピッカーキューから処理するウェーブレットを選択し、及び／又は対応するタスクを開始する処理のアクティブブロック解除カラーを選択する。
【００２６】
記憶装置の一例は、状態情報、例えば、フリップフロップ、ラッチ又はラッチのアレイ、レジスタ又はレジスタのアレイ、レジスタファイル、メモリ、メモリアレイ、磁気記憶装置、光学記憶装置、ＳＲＡＭ、ＤＲＡＭ、フラッシュ、及びＲＯＭのいずれか１若しくはそれ以上を保持することができる１若しくはそれ以上の要素である。様々な実施形態では、記憶装置は揮発性（例えば、ＳＲＡＭ又はＤＲＡＭ）及び／又は不揮発性（例えば、フラッシュ又はＲＯＭ）である。
【００２７】
集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＩＣ）の一例は、半導体材料の１つの部分に実装される回路の集まりである。特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）の一例は、特定用途に向けて設計されたＩＣである。ウェーハスケール集積の一例は、例えば、ウェーハを全体又は略全体として残すことにより、システムの要素としてウェーハの全て又は大部分を使用してシステムを実施することである。
【００２８】
幾つかの実施形態及び／又は使用状況では、ウェーハスケール集積は、チップ間相互接続を介する代わりに、シリコン製造プロセスを使用して形成されたウェーハ相互接続を介してシステム内の複数の要素を接続できるようにし、したがって、性能、コスト、信頼性、及びエネルギー効率の改善の任意の１若しくはそれ以上を改善する。特定の例として、ウェーハスケール集積技術を使用して実装されたシステムは、１つのウェーハへの３００万個のＰＥの実装を可能にし、各ＰＥは、ウェーハスケール集積技術以外を使用する同等のシステムよりも大きな、物理的最近傍への帯域幅を有する。帯域幅がより大きいことにより、ウェーハスケール集積技術を使用して実装されたシステムは、ウェーハスケール集積技術以外を使用して実装されるシステムよりも大きなニューラルネットワークで、比較的効率的にトレーニングし、及び／又は推論を実行することができる。
【００２９】
頭字語
本明細書において定義される様々な簡略略語（例えば、頭字語）の少なくとも幾つかは、本明細書で使用される特定の要素を指す。
【００３０】
【表１】
0006860694.tif 000002
【００３１】
例示的な実施形態
詳細な説明を結論付けるに当たり、以下は、本明細書に記載される概念による様々な実施形態タイプの追加説明を提供する少なくとも幾つかの、「ＥＣ」（組合せ例）として明示的に列挙されるものを含む実施例の集まりであり、これらの例は相互に排他的、網羅的、又は限定を意味せず、本発明はこれらの実施例に限定されず、発行される特許請求の範囲及びそれらの均等物内の可能な全ての変更及び変形を包含する。
【００３２】
ＥＣ１）方法であって、
ファブリックとして相互接続された複数の処理要素間で複数の仮想チャネルを介してファブリックパケットを選択で交換する工程であって、各処理要素は、ファブリックルータと、仮想チャネルのそれぞれに関連付けられたデータフローベースの処理及び命令ベースの処理を実行することができる計算エンジンとを有し、各計算要素は、仮想チャネルのそれぞれに関連付けられた１若しくはそれ以上の命令を記憶することができるメモリを有するものである、交換する工程と、
各処理要素において、仮想チャネルのそれぞれの各ローカル仮想キューを管理する工程と、
各処理要素において、所定の基準に従って、関連付けられた処理に仮想チャネルのうちの複数の仮想チャネルを選ぶ工程であって、所定の基準は、仮想チャネルのローカルの現在アクティベートな仮想チャネルのプールから選択することを含むものである、選ぶ工程と、
処理要素の第１の処理要素において、仮想チャネルの１つを指定するアクティベート演算を実行する工程と、
第１の処理要素において、実行する工程に応答して、指定された仮想チャネルをローカルにアクティベートする工程と、
第１の処理要素において、ローカルにアクティベートする工程に続けて、所定の基準に従って指定された仮想チャネルをローカルに選ぶ工程と、
第１の処理要素において、ローカルに選ぶ工程に応答して、指定された仮想チャネルの関連付けられた処理を開始する工程と
を含む方法。
【００３３】
ＥＣ２）ＥＣ１記載の方法において、開始する工程は、第１の処理要素において、指定された仮想チャネルの識別子を使用して、指定された仮想チャネルに関連付けられた１若しくはそれ以上の命令のメモリにおけるアドレスを特定することを含むものである方法。
【００３４】
ＥＣ３）ＥＣ２記載の方法において、アドレスは、所定の定数で乗算された識別子に少なくとも部分的に基づくものである方法。
【００３５】
ＥＣ４）ＥＣ１記載の方法において、第１の処理要素においてアクティベート命令を実行する工程は、少なくとも実行する工程を実行するものである方法。
【００３６】
ＥＣ５）ＥＣ４記載の方法において、命令は、指定された仮想チャネルを指定する即値フィールドを有するものである方法。
【００３７】
ＥＣ６）ＥＣ１記載の方法において、さらに、
各処理要素は、仮想チャネルのプッシュに関連付けられた仮想チャネルの識別子を有する関連付けられたデータ構造記述子を有する循環メモリバッファをさらに有し、
第１の処理要素において、要素を循環メモリバッファにプッシュする工程を含み、
実行する工程は、プッシュする工程に応答して実行され、指定された仮想チャネルは、仮想チャネルのプッシュに関連付けられた仮想チャネルである、方法。
【００３８】
ＥＣ７）ＥＣ１記載の方法において、さらに、
各処理要素は、仮想チャネルのポップに関連付けられた仮想チャネルの識別子を有する関連付けられたデータ構造記述子を有する循環メモリバッファをさらに有し、
第１の処理要素において、要素を循環メモリバッファからポップする工程を含み、
実行する工程は、ポップする工程に応答して実行され、指定された仮想チャネルは、仮想チャネルのポップに関連付けられた仮想チャネルである、方法。
【００３９】
ＥＣ８）ＥＣ１記載の方法において、第１の処理要素においてファブリックベクトル演算を完了することは、少なくとも実行する工程を実行し、ファブリックベクトル演算は、指定された仮想チャネルの仕様を有するデータ構造記述子により指定されるものである方法。
【００４０】
ＥＣ９）ＥＣ８記載の方法において、仕様は、データ構造記述子のフィールドを有するものである方法。
【００４１】
ＥＣ１０）ＥＣ８記載の方法において、ファブリックベクトル演算を完了することは、ファブリックを介して所定数のデータ要素を処理要素の第２の処理要素から受信することを含むものである方法。
【００４２】
ＥＣ１１）ＥＣ１０記載の方法において、第１の処理要素及び第２の処理要素は、ウェーハスケール集積を介して製造されるものである方法。
【００４３】
ＥＣ１２）ＥＣ１０記載の方法において、第１の処理要素及び第２の処理要素は、１つのウェーハの別個のダイでのウェーハスケール集積を介して製造されるものである方法。
【００４４】
ＥＣ１３）ＥＣ１０記載の方法において、受信することは、指定された仮想チャネル以外の仮想チャネルの１つを介するものである方法。
【００４５】
ＥＣ１４）ＥＣ８記載の方法において、ファブリックベクトル演算を完了することは、ファブリックを介して所定数のデータ要素を処理要素の第２の処理要素に送信することを含むものである方法。
【００４６】
ＥＣ１５）ＥＣ１４記載の方法において、第１の処理要素及び第２の処理要素は、ウェーハスケール集積を介して製造されるものである方法。
【００４７】
ＥＣ１６）ＥＣ１４記載の方法において、送信することは、指定された仮想チャネル以外の仮想チャネルの１つを介するものである方法。
【００４８】
ＥＣ１７）ＥＣ１６記載の方法において、指定された仮想チャネルは、ローカル仮想チャネルであり、仮想チャネルの他の１つは、ファブリック仮想チャネルである方法。
【００４９】
ＥＣ１８）ＥＣ１記載の方法において、さらに、
各処理要素は、仮想チャネルのそれぞれのローカルアクティベート／非アクティブ状態をそれぞれ示すことができるアクティベートビットを有し、
第１の処理要素において、さらに、実行する工程に応答して、指定された仮想チャネルのアクティブビットをアクティベート状態に設定する工程と、
第１の処理要素において、実行を開始する工程に応答して、指定された仮想チャネルのアクティブビットを非アクティブ状態に設定する工程と
を有するものである方法。
【００５０】
ＥＣ１９）ＥＣ１８記載の方法において、アクティブビットのそれぞれは、仮想チャネルの現在アクティベートなローカル仮想チャネルのプールでアクティベート状態にあり、ピックすることは、アクティブビットに少なくとも部分的に基づくものである方法。
【００５１】
ＥＣ２０）ＥＣ１記載の方法において、アクティベート演算は、ニューラルネットワークのアクティベーションの計算、ニューラルネットワークのアクティベーションの部分和の計算、ニューラルネットワークのエラーの計算、ニューラルネットワークの勾配推定の計算、及びニューラルネットワークの重みの更新の１若しくはそれ以上を少なくとも部分的に制御するものである方法。
【００５２】
ＥＣ２１）ＥＣ１記載の方法において、指定された仮想チャネルに関連付けられた１若しくはそれ以上の命令は、ニューラルネットワークのアクティベーションの計算、ニューラルネットワークのアクティベーションの部分和の計算、ニューラルネットワークのエラーの計算、ニューラルネットワークの勾配推定の計算、及びニューラルネットワークの重みの更新の１若しくはそれ以上の少なくとも部分を実行するものである方法。
【００５３】
ＥＣ２２）ＥＣ１記載の方法において、さらに、
データフローグラフの複数のノードに対応する通信及び計算をそれぞれ指定する工程と、
データフローグラフに対応する通信及び計算のそれぞれの同時実行に必要な全てのパラメータ及びタスクソフトウェアでファブリックを初期化する工程と、
推測及びトレーニングの１つまたは複数に全デジタル技法を使用してデータフローグラフの全ての層を同時に実行する工程と
を含むものである方法。
【００５４】
ＥＣ２３）ＥＣ２２記載の方法において、欠陥を除き、ファブリックは同種であり、複数の処理要素の数は数十万であり、各処理要素は、命令及びデータの数十ｋＢのプライベートローカル記憶装置を有し、パラメータ及びタスクソフトウェアは、推測及びトレーニングの１つまたは複数用に数十ＧＢの命令及びデータ記憶装置を有するものである方法。
【００５５】
ＥＣ２４）ＥＣ２２記載の方法において、同時に実行する工程は、データフローグラフの任意の中間状態又は追加のパラメータについて、ファブリック外部の記憶装置へのいかなるアクセスも必要としないものである方法。
【００５６】
ＥＣ２５）ＥＣ２２記載の方法において、データフローグラフはニューラルネットワークであり、ノードはニューロンに対応し、データフローグラフのパラメータの少なくとも幾つかは、ニューラルネットワークの複数の重みに対応するものである方法。
【００５７】
ＥＣ２６）ＥＣ１記載の方法において、第１の処理要素は、複数の仮想キューに関連付けられた情報を記憶することができる少なくとも１つのデジタルハードウェア論理要素を有するものである方法。
【００５８】
ＥＣ２７）ＥＣ１記載の方法において、第１の処理要素は１若しくはそれ以上の物理的構造を有し、各仮想キューには物理的構造の１つが関連付けられるものである方法。
【００５９】
ＥＣ２８）ＥＣ２７記載の方法において、物理的構造はＳＲＡＭを有するものである方法。
【００６０】
ＥＣ２９）ＥＣ２７記載の方法において、物理的構造の１つには仮想キューの１若しくはそれ以上が関連付けられるものである方法。
【００６１】
ＥＣ３０）ＥＣ１記載の方法において、仮想チャネルは、ニューラルネットワークの少なくとも部分を実施するものである方法。
【００６２】
ＥＣ３１）ＥＣ１記載の方法において、仮想チャネルの少なくとも１つは、ニューラルネットワークの複数のニューロン間の接続の少なくとも部分を実施するものである方法。
【００６３】
ＥＣ３２）ＥＣ１記載の方法において、仮想チャネルの少なくとも１つは、ニューラルネットワークの複数の層間の接続の少なくとも部分を実施するものである方法。
【００６４】
ＥＣ３３）ＥＣ１記載の方法において、仮想チャネルの少なくとも１つは、ニューラルネットワークの層の複数のニューロン間の接続の少なくとも部分を実施するものである方法。
【００６５】
ＥＣ３４）ＥＣ１記載の方法において、仮想チャネルの少なくとも１つは、ニューラルネットワークのアクティベーションの計算、ニューラルネットワークのアクティベーションの部分和の計算、ニューラルネットワークのエラーの計算、ニューラルネットワークの勾配推定の計算、及びニューラルネットワークの重みの更新の１若しくはそれ以上に関連付けられたデータ及び制御の少なくとも一方の通信に使用されるものである方法。
【００６６】
ＥＣ３５）ＥＣ１記載の方法において、第１の処理要素は、ウェーハスケール集積を介して製造される複数の処理要素の１つである方法。
【００６７】
ＥＣ３６）装置であって、
ファブリックとして相互接続された複数の処理要素間で複数の仮想チャネルを介してファブリックパケットを選択で交換する手段であって、各処理要素は、ファブリックルータと、仮想チャネルのそれぞれに関連付けられたデータフローベースの処理及び命令ベースの処理を実行することができる計算エンジンとを有し、各計算要素は、仮想チャネルのそれぞれに関連付けられた１若しくはそれ以上の命令を記憶することができるメモリを有するものである、交換する手段と、
各処理要素において、仮想チャネルのそれぞれの各ローカル仮想キューを管理する手段と、
各処理要素において、所定の基準に従って、関連付けられた処理に仮想チャネルのうちの複数の仮想チャネルを選ぶ手段であって、所定の基準は、仮想チャネルのローカルの現在アクティベートな仮想チャネルのプールから選択することを含むものである、選ぶ手段と、
処理要素の第１の処理要素において、仮想チャネルの１つを指定するアクティベート演算を実行する手段と、
第１の処理要素において、実行することに応答して、指定された仮想チャネルをローカルにアクティベートする手段と、
第１の処理要素において、ローカルにアクティベートすることに続けて、所定の基準に従って指定された仮想チャネルをローカルに選ぶ手段と、
第１の処理要素において、ローカルに選ぶことに応答して、指定された仮想チャネルの関連付けられた処理を開始する手段と
を有する装置。
【００６８】
ＥＣ３７）ＥＣ３６記載の装置において、開始する手段は、第１の処理要素において、指定された仮想チャネルの識別子を使用して、指定された仮想チャネルに関連付けられた１若しくはそれ以上の命令のメモリにおけるアドレスを特定することを含むものである装置。
【００６９】
ＥＣ３８）ＥＣ３７記載の装置において、アドレスは、所定の定数で乗算された識別子に少なくとも部分的に基づくものである装置。
【００７０】
ＥＣ３９）ＥＣ３６記載の装置において、第１の処理要素においてアクティベート命令を実行することは、少なくとも実行することを実行するものである装置。
【００７１】
ＥＣ４０）ＥＣ３９記載の装置において、命令は、指定された仮想チャネルを指定する即値フィールドを有するものである装置。
【００７２】
ＥＣ４１）ＥＣ３６記載の装置において、さらに、
各処理要素は、仮想チャネルのプッシュに関連付けられた仮想チャネルの識別子を有する関連付けられたデータ構造記述子を有する循環メモリバッファをさらに有し、
第１の処理要素において、要素を循環メモリバッファにプッシュする手段を有し、
実行することは、プッシュすることに応答して実行され、指定された仮想チャネルは、仮想チャネルのプッシュに関連付けられた仮想チャネルである装置。
【００７３】
ＥＣ４２）ＥＣ３６記載の装置において、さらに、
各処理要素は、仮想チャネルのポップに関連付けられた仮想チャネルの識別子を有する関連付けられたデータ構造記述子を有する循環メモリバッファをさらに有し、
第１の処理要素において、要素を循環メモリバッファからポップする手段を有し、
実行することは、ポップすることに応答して実行され、指定された仮想チャネルは、仮想チャネルのポップに関連付けられた仮想チャネルである装置。
【００７４】
ＥＣ４３）ＥＣ３６記載の装置において、第１の処理要素においてファブリックベクトル演算を完了することは、少なくとも実行することを実行し、ファブリックベクトル演算は、指定された仮想チャネルの仕様を有するデータ構造記述子により指定されるものである装置。
【００７５】
ＥＣ４４）ＥＣ４３記載の装置において、仕様は、データ構造記述子のフィールドを有するものである装置。
【００７６】
ＥＣ４５）ＥＣ４３記載の装置において、ファブリックベクトル演算を完了することは、ファブリックを介して所定数のデータ要素を処理要素の第２の処理要素から受信することを含むものである装置。
【００７７】
ＥＣ４６）ＥＣ４５記載の装置において、第１の処理要素及び第２の処理要素は、ウェーハスケール集積を介して製造されるものである装置。
【００７８】
ＥＣ４７）ＥＣ４５記載の装置において、第１の処理要素及び第２の処理要素は、１つのウェーハの別個のダイでのウェーハスケール集積を介して製造されるものである装置。
【００７９】
ＥＣ４８）ＥＣ４５記載の装置において、受信することは、指定された仮想チャネル以外の仮想チャネルの１つを介するものである装置。
【００８０】
ＥＣ４９）ＥＣ４３記載の装置において、ファブリックベクトル演算を完了することは、ファブリックを介して所定数のデータ要素を処理要素の第２の処理要素に送信することを含むものである装置。
【００８１】
ＥＣ５０）ＥＣ４９記載の装置において、第１の処理要素及び第２の処理要素は、ウェーハスケール集積を介して製造されるものである装置。
【００８２】
ＥＣ５１）ＥＣ４９記載の装置において、送信することは、指定された仮想チャネル以外の仮想チャネルの１つを介するものである装置。
【００８３】
ＥＣ５２）ＥＣ５１記載の装置において、指定された仮想チャネルは、ローカル仮想チャネルであり、仮想チャネルの他の１つは、ファブリック仮想チャネルである装置。
【００８４】
ＥＣ５３）ＥＣ３６記載の装置において、さらに、
各処理要素は、仮想チャネルのそれぞれのローカルアクティベート／非アクティブ状態をそれぞれ示すことができるアクティベートビットをさらに有し、
第１の処理要素において、さらに、実行する工程に応答して、指定された仮想チャネルのアクティブビットをアクティベート状態に設定する手段と、
第１の処理要素において、実行を開始する工程に応答して、指定された仮想チャネルのアクティブビットを非アクティブ状態に設定する手段と
を含むものである装置。
【００８５】
ＥＣ５４）ＥＣ５３記載の装置において、アクティブビットのそれぞれは、仮想チャネルの現在アクティベートなローカル仮想チャネルのプールでアクティベート状態にあり、ピックすることは、アクティブビットに少なくとも部分的に基づくものである装置。
【００８６】
ＥＣ５５）ＥＣ３６記載の装置において、アクティベート演算は、ニューラルネットワークのアクティベーションの計算、ニューラルネットワークのアクティベーションの部分和の計算、ニューラルネットワークのエラーの計算、ニューラルネットワークの勾配推定の計算、及びニューラルネットワークの重みの更新の１若しくはそれ以上を少なくとも部分的に制御するものである装置。
【００８７】
ＥＣ５６）ＥＣ３６記載の装置において、指定された仮想チャネルに関連付けられた１若しくはそれ以上の命令は、ニューラルネットワークのアクティベーションの計算、ニューラルネットワークのアクティベーションの部分和の計算、ニューラルネットワークのエラーの計算、ニューラルネットワークの勾配推定の計算、及びニューラルネットワークの重みの更新の１若しくはそれ以上の少なくとも部分を実施するものである装置。
【００８８】
ＥＣ５７）ＥＣ３６記載の装置において、さらに、
データフローグラフの複数のノードに対応する通信及び計算をそれぞれ指定する手段と、
データフローグラフに対応する通信及び計算のそれぞれの同時実行に必要な全てのパラメータ及びタスクソフトウェアでファブリックを初期化する手段と、
推測及びトレーニングの１つまたは複数に全デジタル技法を使用してデータフローグラフの全ての層を同時に実行する手段と
を有するものである装置。
【００８９】
ＥＣ５８）ＥＣ５７記載の装置において、欠陥を除き、ファブリックは同種であり、複数の処理要素の数は数十万であり、各処理要素は、命令及びデータの数十ｋＢのプライベートローカル記憶装置を有し、パラメータ及びタスクソフトウェアは、推測及びトレーニングの１つまたは複数用に数十ＧＢの命令及びデータ記憶装置を有するものである装置。
【００９０】
ＥＣ５９）ＥＣ５７記載の装置において、同時に実行する手段は、データフローグラフの任意の中間状態又は追加のパラメータについて、ファブリック外部の記憶装置へのいかなるアクセスも必要としないものである装置。
【００９１】
ＥＣ６０）ＥＣ５７記載の装置において、データフローグラフはニューラルネットワークであり、ノードはニューロンに対応し、データフローグラフのパラメータの少なくとも幾つかは、ニューラルネットワークの複数の重みに対応するものである装置。
【００９２】
ＥＣ６１）ＥＣ３６記載の装置において、第１の処理要素は、複数の仮想キューに関連付けられた情報を記憶することができる少なくとも１つのデジタルハードウェア論理要素を有するものである装置。
【００９３】
ＥＣ６２）ＥＣ３６記載の装置において、第１の処理要素は１若しくはそれ以上の物理的構造を有し、各仮想キューには物理的構造の１つが関連付けられるものである装置。
【００９４】
ＥＣ６３）ＥＣ６２記載の装置において、物理的構造はＳＲＡＭを有するものである装置。
【００９５】
ＥＣ６４）ＥＣ６２記載の装置において、物理的構造の１つには仮想キューの１若しくはそれ以上が関連付けられるものである装置。
【００９６】
ＥＣ６５）ＥＣ３６記載の装置において、仮想チャネルは、ニューラルネットワークの少なくとも部分を実施するものである装置。
【００９７】
ＥＣ６６）ＥＣ３６記載の装置において、仮想チャネルの少なくとも１つは、ニューラルネットワークの複数のニューロン間の接続の少なくとも部分を実施するものである装置。
【００９８】
ＥＣ６７）ＥＣ３６記載の装置において、仮想チャネルの少なくとも１つは、ニューラルネットワークの複数の層間の接続の少なくとも部分を実施するものである装置。
【００９９】
ＥＣ６８）ＥＣ３６記載の装置において、仮想チャネルの少なくとも１つは、ニューラルネットワークの層の複数のニューロン間の接続の少なくとも部分を実施するものである装置。
【０１００】
ＥＣ６９）ＥＣ３６記載の装置において、仮想チャネルの少なくとも１つは、ニューラルネットワークのアクティベーションの計算、ニューラルネットワークのアクティベーションの部分和の計算、ニューラルネットワークのエラーの計算、ニューラルネットワークの勾配推定の計算、及びニューラルネットワークの重みの更新の１若しくはそれ以上に関連付けられたデータ及び制御の少なくとも一方の通信に使用されるものである装置。
【０１０１】
ＥＣ７０）ＥＣ３６記載の装置において、第１の処理要素は、ウェーハスケール集積を介して製造される複数の処理要素の１つである装置。
【０１０２】
選択された実施形態の詳細
ディープ・ラーニング・アクセラレータ・ハードウェア要素及びソフトウェア要素を有するニューラル・ネットワーク・トレーニング及び推論に関連する実施形態について本明細書に記載する（例えば、図１〜図４及び「ディープ・ラーニング・アクセラレータ概説」セクション参照）。ディープ・ラーニング・アクセラレータは、ハードウェア処理要素を有する（例えば、図５〜図８並びに「ファブリック概説」及び「処理要素：計算要素及びルータ」セクション参照）。ディープ・ラーニング・アクセラレータは、タスク開始及びタスクブロック／ブロック解除（例えば、図９Ａ〜図９Ｃ並びに「タスク開始」及び「タスクのブロック及びブロック解除」セクション参照）、ニューロンからプロセッサ要素へのマッピング及び関連するデータフロー（例えば、図１０Ａ及び図１０Ｂ並びに「高レベルデータフロー」セクション参照）、タスク状態機械及びクローズアウト（例えば、図１１及び図１２並びに「一例の作業負荷及び例示的なタスク」セクション参照）、ウェーブレット処理（例えば、図１３Ａ〜図１６及び「ウェーブレット」セクション参照）、ニューロンスメアリング（例えば、図１７〜図２０及び「ニューロンスメアリング」セクション参照）、ファブリックベクトル、メモリベクトル、及び関連するデータ構造記述子（例えば、図２１Ａ〜図２４及び「ベクトル及びデータ構造記述子」セクション参照）、並びに命令フォーマット（例えば、図２５Ａ〜図２５Ｃ及び「命令フォーマット」セクション参照）を含むタスク等の様々な技法を実施及び／又は使用する。ディープ・ラーニング・アクセラレータのハードウェア処理要素は、ストール時、仕事を実行することができる（例えば、図２６及び「マイクロスレッド処理」セクション参照）。ディープ・ラーニング・アクセラレータは、様々なシナリオで使用可能である（例えば、図２７Ａ〜図２８Ｅ及び「ディープ・ラーニング・アクセラレータの使用例」セクション参照）。ディープ・ラーニング・アクセラレータは任意選択で、任意選択な確率的丸めを用いた浮動小数点を提供する（例えば、図２９、図３０Ａ〜図３０Ｄ、及び図３１並びに「浮動小数点演算の状況及び確率的丸め演算」セクション参照）。ディープ・ラーニング・アクセラレータは、大規模ディープ・ニューラル・ネットワークに拡張可能である（例えば、「大規模ディープ・ラーニング・ネットワークへの拡張可能性」セクション参照）。ディープ・ラーニング・アクセラレータは、様々な実施形態において意図される（例えば、「他の実施形態の詳細」セクション参照）。ディープ・ラーニング・アクセラレータは様々に実施可能である（例えば、「実施技法例」セクション参照）。
【０１０３】
ディープ・ラーニング・アクセラレータ概説
図１は、ニューラル・ネットワーク・システム１００として、ディープ・ラーニング・アクセラレータを使用するニューラル・ネットワーク・トレーニング及びインターフェースのシステムの一実施形態の選択された細部を図示する。概念的に、ニューラルネットワークは、ディープ・ラーニング・アクセラレータを使用してトレーニングされる。次に、トレーニングの１若しくはそれ以上の結果（例えば、重み）を推論に使用する。例えば、トレーニングは、ニューラルネットワークのニューロンをディープ・ラーニング・アクセラレータのＰＥにマッピングすることを含む。次に、トレーニングデータがＰＥに適用される。ＰＥはトレーニングデータを処理し（例えば、順方向パス、デルタパス、及びチェインパスを介して）、トレーニングが完了するまで、重みを更新する。次に、重みは推論に使用される。
【０１０４】
図を参照すると、ディープ・ラーニング・アクセラレータ１２０は、結合１２３によって図示されるように、ＦＰＧＡ１２１及びＰＥ１２２を有し、互いとの通信を可能にする。配置サーバ１５０（ＣＰＵ１５１及びＣＲＭ１５２を有する）は、ＬＡＮ１１１を介して接続サーバ１６０（ＣＰＵ１６１、ＣＲＭ１６２、及びＮＩＣ１６４を有する）に結合される。接続サーバ１６０は、ＮＩＣ１６４及び１００Ｇｂ１１２を介してＦＰＧＡ１２１と通信することができる。自律車両１３０はＣＰＵ１３１、ＣＲＭ１３２、ＩＥ１３３、及びカメラ１３５を有する。携帯電話１４０はＣＰＵ１４１、ＣＲＭ１４２、ＩＥ１４３、及びカメラ１４５を有する。
【０１０５】
インターネット１８０は、様々な実施形態及び／又は使用状況に従って、配置サーバ１５０、接続サーバ１６０、自律車両１３０、及び／又は携帯電話１４０の任意の組合せ間に結合（明示的に図示せず）を提供する。
【０１０６】
破線矢印配置１１３は概念的に、配置サーバ１５０からＰＥ１２２に通信される（例えば、ＬＡＮ１１１、接続サーバ１６０／ＮＩＣ１６４、１００Ｇｂ１１２、ＦＰＧＡ１２１、及び結合１２３を介して）配置情報を示す。幾つかの実施形態及び／又は使用状況では、配置１１３は暗黙的であり、ＰＥ１２２のルータ要素及びＰＥ１２２の計算要素に提供される初期化情報において反映される。幾つかの実施形態及び／又は使用状況では、配置１１３の初期化情報の一部は、ＦＰＧＡ１２１に提供され、ＰＥ１２２と動作するようにＦＰＧＡ１２１の要素を構成する。
【０１０７】
破線矢印重み１１４及び破線矢印重み１１５は概念的に、ＰＥ１２２から自律車両１３０及び携帯電話にそれぞれ通信される（例えば、結合１２３、ＦＰＧＡ１２１、１００Ｇｂ１１２、接続サーバ１６０／ＮＩＣ１６４、及びインターネット１８０を介して）重み情報を示す。幾つかの実施形態及び／又は使用状況では、重み情報は、トレーニングの結果として直接生成される重み情報の全てもしくは任意の部分、そのサブサンプリング、その量子化、及び／又はその他の変換の任意の１若しくはそれ以上である。
【０１０８】
ディープ・ラーニング・アクセラレータ１２０は、１００Ｇｂ１１２を介して受信される配置情報及びトレーニング情報に応答して重みを計算する等により、ニューラルネットワークのトレーニングを実行することができる。ディープ・ラーニング・アクセラレータ１２０はさらに、トレーニング完了後、１００Ｇｂ１１２を介して結果として重みを提供することができる。次に、重みは、自律車両１３０及び／又は携帯電話１４０等での推論に使用可能である。ＰＥ１２２は、比較的多数のＰＥ（例えば、１０，０００以上）を有し、各ＰＥは、トレーニングに関連するルーティング及び計算を独立して実行することができる。幾つかの実施形態及び／又は使用状況では、ＰＥ１２２は、各複数のＰＥが１つのウェーハの各ダイに実装される等のウェーハスケール集積を介して実施される。ＦＰＧＡ１２１は、１００Ｇｂ１１２を介して提供された情報にＰＥ１２２をインターフェースすることができる。インターフェースすることは、結合１２３で通信されるように、ウェーブレットから、変更されたイーサネット（登録商標）フレームへの変換／変更されたイーサネット（登録商標）フレームからウェーブレットへの変換を含む。
【０１０９】
配置サーバ１５０はプログラム的に、１若しくはそれ以上の配置プログラムを介してニューロンの配置を決定することができる（例えば、配置１１３で図示されるように）。配置プログラムはＣＲＭ１５２に記憶され、ＣＰＵ１５１によって実行される。配置情報は、ＬＡＮ１１１を介して接続サーバ１６０に通信される。配置の一例は、物理的メモリ及び実行ハードウェアリソース（例えば、ＰＥ１２２）へのニューラルネットワークの論理ニューロンのマッピングである。
【０１１０】
接続サーバ１６０は、ＦＰＧＡ１２１と通信し、ＰＥ１２２とＦＰＧＡ１２１／結合１２３、ＮＩＣ１６４、及びドライバプログラムを介してそのプログラムされた制御を介して間接的に通信することができる。様々な実施形態及び／又は使用状況では、通信は配置情報（例えば、配置サーバ１５０から）、トレーニング情報（例えば、図示されていないが、インターネット１８０を介してアクセス可能なソースから）、及び／又はトレーニングの結果（例えば、ＰＥ１２２からの重み）を含む。ドライバプログラムはＣＲＭ１６２に記憶され、ＣＰＵ１６１によって実行される。
【０１１１】
自律車両１３０は、プログラム的に制御され、及び／又はＣＲＭ１３２に記憶されたプログラムを実行するＣＰＵ１３１によって支援されるように、ＩＥ１３３を使用して、重み１１４を使用して推論を実行することができる。推論は任意選択及び／又は選択で、カメラ１３５から得られた情報を使用して実行される。例えば、車は自律車両として動作可能である。車は、動画を推論エンジンに提供することができるカメラを有する。推論エンジンは、交通レーン、障害物、及び他の物体等の車のナビゲートに関連する物体を認識することができる。車は、物体認識の結果を使用してナビゲートすることができる。提供、認識、及びナビゲートの任意の組合せは、少なくとも部分的に、ＣＲＭに記憶されたプログラムを実行する１若しくはそれ以上のＣＰＵを介して制御及び／又は実行される。
【０１１２】
携帯電話１４０は、ＣＲＭ１４２に記憶されたプログラムを実行するＣＰＵ１４１によってプログラム的に制御及び／又は支援されるように、ＩＥ１４３を使用して、重み１１５を使用して推論を実行することができる。推論は任意選択及び／又は選択で、カメラ１４５から得られた情報を使用して実行される。例えば、携帯電話は、ソーシャルネットワーキングウェブサイトにタグ付き写真を掲示するように動作可能である。携帯電話は、画像データを推論エンジンに提供することができるカメラを有する。推論エンジンは、画像内の物体にタグ付けすることができる（例えば、「猫」、「犬」等のタイプにより又は「ボブ」、「マリー」等の名前により）。携帯電話は、画像及びタグ付けの結果をソーシャルネットワーキングウェブサイトに掲示することができる。提供、タグ付け、及び掲示の任意の組合せは、少なくとも部分的に、ＣＲＭに記憶されたプログラムを実行する１若しくはそれ以上のＣＰＵを介して制御及び／又は実行される。
【０１１３】
様々な実施形態及び／又は使用状況では、ディープ・ラーニング・アクセラレータを介して決定された重み情報の全て又は任意の部分は、推論使用の前に、アクセラレータ外部で事後処理される。例えば、重み１１４及び／又は重み１１５によって表される情報の全て又は任意の部分は、自律車両１３０及び／又は携帯電話１４０による推論使用前、配置サーバ１５０によって全体的又は部分的に処理される。様々な実施形態及び／又は使用状況では、事後処理の一例は、重み１１４及び／又は重み１１５の量子化（例えば、浮動小数点数フォーマットから固定小数点数フォーマットへの変換）を含む。様々な実施形態及び／又は使用状況では、カメラ１３５及びカメラ１４５はそれぞれ、ＩＥ１３３及びＩＥ１４３に入力を提供するセンサの例である。センサの他の例は、ロケーションセンサ、向きセンサ、磁気センサ、光センサ、及び圧力センサである。
【０１１４】
ＣＰＵ１５１は、各命令セットアーキテクチャと互換性がある１若しくはそれ以上のＣＰＵを有する。ＣＰＵ１５１は、命令セットアーキテクチャに従ってＣＲＭ１５２から命令をフェッチし実行することができる。ＣＰＵ１６１は、各命令セットアーキテクチャと互換性がある１若しくはそれ以上のＣＰＵを有する。ＣＰＵ１６１は、命令セットアーキテクチャに従ってＣＲＭ１６２から命令をフェッチし実行することができる。幾つかの実施形態では、ＣＰＵ１５１の命令セットアーキテクチャの少なくとも１つは、ＣＰＵ１６１の命令セットアーキテクチャの少なくとも１つと互換性がある。
【０１１５】
ＣＰＵ１３１は、各命令セットアーキテクチャと互換性がある１若しくはそれ以上のＣＰＵを有する。ＣＰＵ１３１は、命令セットアーキテクチャに従ってＣＲＭ１３２から命令をフェッチし実行することができる。ＣＰＵ１４１は、各命令セットアーキテクチャと互換性がある１若しくはそれ以上のＣＰＵを有する。ＣＰＵ１４１は、命令セットアーキテクチャに従ってＣＲＭ１４２から命令をフェッチし実行することができる。幾つかの実施形態では、ＣＰＵ１３１の命令セットアーキテクチャの少なくとも１つは、ＣＰＵ１４１の命令セットアーキテクチャの少なくとも１つと互換性がある。幾つかの実施形態では、ＣＰＵ１５１、ＣＰＵ１６１、ＣＰＵ１３１、及びＣＰＵ１４１の任意の１若しくはそれ以上は、互いと互換性がある命令セットアーキテクチャを有する。
【０１１６】
様々な実施形態及び／又は使用状況では、ＣＲＭ１５２、ＣＲＭ１６２、ＣＲＭ１３２、及びＣＲＭ１４２のそれぞれの少なくとも一部は、不揮発性であり、フラッシュメモリ、磁気メモリ、光学メモリ、相変化メモリ、及び他の不揮発性メモリ技術要素の任意の１若しくはそれ以上で構成される。
【０１１７】
様々な実施形態及び／又は使用状況では、ＩＥ１３３及び／又はＩＥ１４３は、ディープ・ラーニング・アクセラレータ１２０によって決定される（重み１１４及び／又は重み１１５により概念的に示される）重み情報を使用することができる１若しくはそれ以上の推論エンジンを有する。様々な実施形態及び／又は使用状況では、ＩＥ１３３は、ＣＰＵ１３１によって実行され、ＣＲＭ１３２に記憶されるプログラムと併せて及び／又はその制御下で動作する。様々な実施形態及び／又は使用状況では、ＩＥ１４３は、ＣＰＵ１４１により実行され、ＣＲＭ１４２に記憶されるプログラムと併せて及び／又はその制御下で動作する。様々な実施形態及び／又は使用状況では、ＩＥ１３３及び／又はＩＥ１４３の全て又は任意の部分は、ＨＷ及び／又はＳＷ技法の様々な組合せを介して実施される。幾つかの実施形態では、ＩＥ１３３及び／又はＩＥ１４３により提供される機能の全て又は任意の部分は、ディープ・ラーニング・アクセラレータ１２０により及び／又は関連付けられて実施される等の技法を使用して実施される。様々な実施形態及び／又は使用状況では、ＩＥ１３３及び／又はＩＥ１４３の全て又は任意の部分は、従来のＣＰＵ、従来のＧＰＵ、従来のＤＳＰ、従来のＦＰＧＡ、及び専用ハードウェアの様々な組合せを含む技法を介して様々に実施される。
【０１１８】
様々な実施形態では、１００Ｇｂ１１２は様々に、標準イーサネット（登録商標）フレームを送信する１００Ｇｂイーサネット（登録商標）結合、変更イーサネット（登録商標）フレームを送信する１００Ｇｂイーサネット（登録商標）結合、変更イーサネット（登録商標）フレームを送信する１００ＧＢ変更イーサネット（登録商標）結合、イーサネット（登録商標）技術以外の１００Ｇｂ直列結合、又は何らかの他の比較的高速の直列結合である。
【０１１９】
幾つかの実施形態及び／又は使用状況では、結合１２３はウェーブレットとして情報を通信する。
【０１２０】
様々な実施形態では、ＬＡＮ１１１は、イーサネット（登録商標）、ファイバチャネル、及び／又は他の適した相互接続技法等の技法を使用して実施される。
【０１２１】
幾つかの実施形態及び／又は使用状況では、配置サーバ１５０及び接続サーバ１６０は、結合サーバ１１０によって概念的に図示されるように、結合要素（例えば、ＣＰＵ、ＣＲＭ、及び／又はＮＩＣリソースの共有）として実施され及び／又は動作する。幾つかの実施形態及び／又は使用状況では、配置サーバ１５０及び接続サーバ１６０は、ＬＡＮ１１１ではなく（又はＬＡＮ１１１に加えて）インターネット１８０を介して結合される。
【０１２２】
図２は、ニューラル・ネットワーク・ソフトウェア２００として、ディープ・ラーニング・アクセラレータを使用して、ニューラル・ネットワーク・トレーニング及び推論に関連付けられたソフトウェア要素の一実施形態の選択された細部を図示する。配置サーバＳＷ２１０は、実施形態により、ニューロンからＰＥへのマッピングＳＷ２１２及び図示されていない他の要素を有する。様々な実施形態及び／又は使用状況では、配置サーバＳＷ２１０の全て又は任意の部分は、図１のＣＲＭ１５２に記憶され、図１のＣＰＵ１５１により実行可能である。ニューロンからＰＥへのマッピングＳＷ２１２の１若しくはそれ以上のプログラムは、図１のＰＥ１２２の特定のＰＥへのニューラルネットワークのニューロンの配置を決定することができる。
【０１２３】
接続サーバＳＷ２２０は、実施形態により、１００Ｇｂ  ＮＩＣドライバ２２４、トレーニング情報プロバイダＳＷ２２５、及び重み受信機ＳＷ２２６、並びに図示されていない他の要素を有する。様々な実施形態及び／又は使用状況では、接続サーバＳＷ２２０の全て又は任意の部分は、図１のＣＲＭ１６２に記憶され、図１のＣＰＵ１６１により実行可能である。１００Ｇｂ  ＮＩＣドライバ２２４の１若しくはそれ以上のプログラムは、接続サーバ１６０とディープ・ラーニング・アクセラレータ１２０との通信を可能にし、接続サーバ１６０及びディープ・ラーニング・アクセラレータ１２０は両方とも図１のものである（ＮＩＣ１６４及び１００Ｇｂ１１２を介して、これらも図１のものである）。トレーニング情報プロバイダＳＷ２２５の１若しくはそれ以上のプログラムは、図１のディープ・ラーニング・アクセラレータ１２０への通信のために（ＮＩＣ１６４及び１００Ｇｂ１１２を介した）、１００Ｇｂ  ＮＩＣドライバ２２４の制御下で適用するトレーニング情報を決定できるようにする。様々な実施形態及び／又は使用状況では、トレーニング情報は様々に、例えば、両方とも図１の接続サーバ１６０及び／又はインターネット１８０がアクセス可能な不揮発性記憶装置から決定される。重み受信機ＳＷ２２６の１若しくはそれ以上のプログラムは、ディープ・ラーニング・アクセラレータ１２０によって決定されるように、１００Ｇｂ  ＮＩＣドライバ２２４の制御下で重み情報を受信できるようにする（ＮＩＣ１６４及び１００Ｇｂ１１２を介して）。
【０１２４】
様々な実施形態及び／又は使用状況では、ＦＰＧＡ上の種々ＳＷ２５０は概念的に、ＦＰＧＡ１２１（図１の）に含まれる１若しくはそれ以上のＣＰＵによって実行されるＳＷを表す。ＦＰＧＡのＣＰＵは、例えば、ＦＰＧＡ１２１の１若しくはそれ以上の要素の製造中、ハードコードされ、及び／又はＦＰＧＡ１２１の１若しくはそれ以上の要素の初期化中、ソフトコードされる。様々な実施形態及び／又は使用状況では、ＦＰＧＡ上の種々ＳＷ２５０及び／又はその表現の全て又は任意の部分は、ＦＰＧＡ１２１に含まれ、及び／又は接続サーバ１６０がアクセス可能な不揮発性メモリに記憶される。様々な実施形態及び／又は使用状況では、ＦＰＧＡ上の種々ＳＷ２５０は、図１のＰＥ１２２の初期化及び／又はデバッグに関連する等の様々なハウスキーピング機能を実行できるようにする。
【０１２５】
様々な実施形態及び／又は使用状況では、ＰＥ上のタスクＳＷ２６０は概念的に、ＰＥ１２２のうちの様々なＰＥでタスクとして実行される分散ＳＷを表す。様々な実施形態及び／又は使用状況では、ＰＥ上のタスクＳＷ２６０及び／又はその表現の全ての又は任意の部分は、ＰＥ１２２に含まれ、及び／又は接続サーバ１６０がアクセス可能な不揮発性メモリに記憶される。様々な実施形態及び／又は使用状況では、ＰＥ上のタスクＳＷ２６０は、ニューラルネットワークの重みの決定等のトレーニングデータの処理の実行を可能にする（例えば、順方向パス、デルタパス、及びチェインパスを介して）。
【０１２６】
自律車両ＳＷ２３０は、実施形態により、ビデオカメラＳＷ２３２、推論エンジンＳＷ２３３、及びナビゲートＳＷ２３４、並びに図示されていない他の要素を有する。様々な実施形態及び／又は使用状況では、自律車両ＳＷ２３０の全て又は任意の部分は、図１のＣＲＭ１３２に記憶され、図１のＣＰＵ１３１により実行可能である。ビデオカメラＳＷ２３２の１若しくはそれ以上のプログラムは、動画情報を推論エンジンＳＷ２３３に提供するような図１のカメラ１３５の制御及び／又は動作を可能にする。推論エンジンＳＷ２３３の１若しくはそれ以上のプログラムは、動画情報から、回避する物体及び／又は辿る交通レーン等のナビゲーション情報を特定するような図１のＩＥ１３３の制御及び／又は動作を可能にする。ナビゲートＳＷ２３４の１若しくはそれ以上のプログラムは、ナビゲーション情報に応答して自律車両ＳＷ２３０のナビゲートを可能にする。
【０１２７】
携帯電話ＳＷ２４０は、実施形態により、静止カメラＳＷ２４２、推論エンジンＳＷ２４３、掲示ＳＷ２４４、及び図示されていない他の要素を有する。様々な実施形態及び／又は使用状況では、携帯電話ＳＷ２４０の全て又は任意の部分は、図１のＣＲＭ１４２に記憶され、図１のＣＰＵ１４１により実行可能である。静止カメラＳＷ２４２の１若しくはそれ以上のプログラムは、推論エンジンＳＷ２４３に静止画像情報を提供するような図１のカメラ１４５の制御及び／又は動作を可能にする。推論エンジンＳＷ２４３の１若しくはそれ以上のプログラムは、静止画像情報からタグ情報を特定するような図１のＩＥ１４３の制御及び／又は動作を可能にする。掲示ＳＷ２４４の１若しくはそれ以上のプログラムは、静止画像情報及び／又はタグ情報に応答してソーシャルネットワーキングウェブサイトへの掲示を可能にする。
【０１２８】
様々な実施形態及び／又は使用状況では、ＳＷコレクションである配置サーバＳＷ２１０、接続サーバＳＷ２２０、自律車両ＳＷ２３０、及び／又は携帯電話ＳＷ２４０の任意の１若しくはそれ以上は任意選択及び／又は選択で、１若しくはそれ以上のオペレーティングシステム要素、例えば、１若しくはそれ以上のリアルタイムオペレーティングシステム、１若しくはそれ以上の非リアルタイムオペレーティングシステム、及び／又は各ＳＷコレクションの要素を調整する１若しくはそれ以上の他の制御プログラムを有する。
【０１２９】
図３は、ニューラル・ネットワーク・トレーニング／推論３００として、ディープ・ラーニング・アクセラレータを使用して、ニューラルネットワークをトレーニングし、トレーニングされたニューラルネットワークを使用して推論を実行することに関連する処理の一実施形態の選択された細部を図示する。図示のように、ニューラルネットワークのニューロンは、動作３１０において、配置される、例えば、割り振られ、及び／又は特定のＰＥリソースに関連付けられる。次に、動作３２０において、ＦＰＧＡリソースが、ニューラルネットワークのトレーニングへの準備として初期化される。次に、動作３３０において、ＰＥリソースが、ニューラルネットワークのトレーニングへの準備として初期化される。
【０１３０】
ＦＰＧＡリソース及びＰＥリソースが、トレーニングへの準備として初期化された後、動作３４０において、トレーニングデータはＰＥに適用される。動作３５０において、ＰＥリソースはトレーニングデータを処理する。次に、動作３６０において、例えば、トレーニングデータの適用が完了し、及び／又は１若しくはそれ以上の完了基準（決める限度未満の推論エラー等）が満たされるため、トレーニングが完了したか否かをチェックして判断する。完了してない場合、フローは次に動作３４０に戻り、更なるトレーニングデータを適用する。幾つかのシナリオでは、トレーニングは完了せず、幾つかの実施形態では、代わりに制御は別の動作（図示せず）に渡され、例えば、ニューラルネットワークのハイパーパラメータを変更することができる（例えば、ニューロンの層の追加、ニューロンの層の削除、ニューロン間の接続性の変更、バッチサイズの変更、及び学習ルールの変更のいずれか１若しくはそれ以上）。次に、変更されたニューラルネットワークは、動作３１０、３２０、３３０、３４０、３５０、及び３６０に従ってトレーニングされる。
【０１３１】
トレーニングが完了した場合、フローは、３７０における推論に使用されるトレーニングの結果である重みを提供することに続く。幾つかの実施形態及び／又は使用状況では、重みは量子化され、例えば、整数データフォーマットに変換される。幾つかの実施形態及び／又は使用状況では、整数データフォーマットは、精度低減数フォーマット（例えば、８ビット又は１６ビット）である。次に、重みは１若しくはそれ以上の推論エンジンに提供され、動作３８０において推論を行うのに使用される。
【０１３２】
様々な実施形態及び／又は使用状況では、推論エンジンは、１若しくはそれ以上の推論アプリケーション、例えば、テキスト変換、光学文字認識、画像分類、顔認識、自動運転車のシーン認識、発話認識、高エネルギー物理学でのデータ解析、及び創薬に対応する。
【０１３３】
様々な実施形態及び／又は使用状況では、ＰＥリソースは、例えば、図１のＰＥ１２２に対応し、ＦＰＧＡリソースは図１のＦＰＧＡ１２１に対応する。
【０１３４】
様々な実施形態及び／又は使用状況では、ニューラル・ネットワーク・トレーニング／推論３００の動作の全て又は任意の部分の任意の１若しくはそれ以上は、図１のニューラル・ネットワーク・システム１００及び／又は図２のニューラル・ネットワーク・ソフトウェア２００の任意の１若しくはそれ以上の要素の全ての又は任意の部分により実行され、及び／又は関連する。例えば、動作３１０の全て又は任意の部分は、ニューロンからＰＥへのマッピングＳＷ２１２の実行を介して配置サーバ１５０により実行される。別の例として、動作３２０の全て又は任意の部分は、ニューロンからＰＥへのマッピングＳＷ２１２の実行を介して配置サーバ１５０により実行される。別の例として、動作３３０の全て又は任意の部分は、ニューロンからＰＥへのマッピングＳＷ２１２の実行を介して配置サーバ１５０により実行される。別の例として、動作３３０の全て又は任意の部分は、ＰＥ上のタスクＳＷ２６０の実行を介してＰＥ１２２により実行される。別の例として、動作３４０の全て又は任意の部分は、トレーニング情報プロバイダＳＷ２２５の実行を介して接続サーバ１６０により実行される。別の例として、動作３５０の全て又は任意の部分は、ＰＥ上のタスクＳＷ２６０の実行を介してＰＥ１２２により実行される。別の例として、動作３５０の全て又は任意の部分は、結合サーバ１１０、配置サーバ１５０、及び／又は接続サーバ１６０により実行される。別の例として、３７０の全て又は任意の部分は、重み受信機ＳＷ２２６の実行を介して接続サーバ１６０により実行される。別の例として、動作３７０の全て又は任意の部分は、ＦＰＧＡ上の種々ＳＷ２５０の実行を介してＦＰＧＡ１２１により実行される。別の例として、３８０の全て又は任意の部分は、推論エンジンＳＷ２３３の制御下等でＩＥ１３３により実行される。別の例として、動作３８０の全て又は任意の部分は、推論エンジンＳＷ２４３の制御下等でＩＥ１４３により実行される。
【０１３５】
様々な実施形態及び／又は使用状況では、ニューラル・ネットワーク・トレーニング／推論３００の動作の全て又は任意の部分の任意の１若しくはそれ以上は、図１のニューラル・ネットワーク・システム１００の様々な要素間での情報通信を併せて実行される。例えば、ニューラル・ネットワーク・トレーニング／推論３００の様々な動作は、少なくとも部分的に、接続サーバ１６０とＦＰＧＡ１２１との間で情報を通信するＮＩＣ１６４及び１００Ｇｂ１１２を介して実行される。別の例として、ニューラル・ネットワーク・トレーニング／推論３００の様々な動作は、接続サーバ１６０とＰＥ１２２との間で情報を通信するＦＰＧＡ１２１及び結合１２３と併せて実行される。別の例として、ニューラル・ネットワーク・トレーニング／推論３００の様々な動作は、少なくとも部分的にインターネット１８０により可能になるように、情報を通信する配置サーバ１５０、接続サーバ１６０、自律車両１３０、及び携帯電話１４０の任意の１若しくはそれ以上を併せて実行した。
【０１３６】
図４は、ディープ・ラーニング・アクセラレータ４００としてのディープ・ラーニング・アクセラレータの一実施形態の選択された細部を図示する。各ＰＥ４９９要素は、ＰＥ４９９要素のうちの他の要素への結合を有する。ＰＥ要素のうちの２つ（ＰＥ４９７及びＰＥ４９８）は、一意の識別子を有して図示されており、その他の点では、ＰＥ４９９のインスタンスとそれぞれ同一である。ＰＥ４９７は、ＰＥのうちの他のＰＥへの結合（北結合４３０、ＰＥ４９８への東結合４３１、及び南結合４３２）及びＩ／Ｏ  ＦＰＧＡの１つへの結合（西結合４３３）という４つの結合のそれぞれについて識別子を有して図示されているが、その他の点では、図示されているＰＥ要素のうちの他の要素と同一である。幾つかの実施形態及び／又は使用状況では、結合は論理結合及び／又は物理結合である。様々な実施形態及び／又は使用状況では、結合は、ウェーブレット、背圧情報、又は両方の通信に使用可能である。様々な実施形態及び／又は使用状況では、物理的結合の全て又は任意の部分は、物理的に隣接するＰＥへのものである。幾つかの実施形態及び／又は使用状況では、ＰＥは２Ｄグリッドにおいて物理的に実施される。幾つかの実施形態及び／又は使用状況では、ＰＥは並んだ矩形の２Ｄグリッドにおいて物理的に実施され、隣接するＰＥは、水平境界を共有するＰＥ（互いに対して北／南ＰＥ）及び垂直境界を共有するＰＥ（互いに対して東／西ＰＥ）に対応する。
【０１３７】
幾つかの実施形態及び／又は使用状況では、同じＡＳＩＣの同一インスタンスのアレイがウェーハ上に形成され、同じＡＳＩＣのそれぞれは、同じＰＥ（例えば、ＰＥ４９９）の複数の同一インスタンスを有し、ウェーハスケール集積技法で使用可能なウェーハ（例えば、ウェーハ４１２）を形成する。逆のことが示される場合を除き、本明細書における「ウェーハ」への言及（ウェーハ４１２への言及を含む）は、ウェーハ全体又はウェーハの略全体の実施形態及びウェーハの大部分の実施形態に適用可能である。幾つかの実施形態及び／又は使用状況では、ＰＥの周縁部分は、Ｉ／Ｏ  ＦＰＧＡ４２０に結合される。ＡＳＩＣの例は、ＰＥの列編成セクション（例えば、一次元様式で複製されて、ウェーハを形成する）を有するＡＳＩＣ４１０及びＰＥの正方形編成セクション又は矩形編成セクション（例えば、二次元様式で複製されて、ウェーハを形成する）を有するＡＳＩＣ４１１として図示される。ウェーハ上の他の編成のＡＳＩＣも考えられる。
【０１３８】
幾つかの実施形態及び／又は使用状況では、ニューラルネットワークにおけるレイヤに関連付けられたニューロンは一般に、左から右にＰＥ４９９要素上に配置され、先のレイヤ（例えば、入力レイヤ）は左側にあり、後続レイヤ（例えば、出力レイヤ）は右側にある。したがって、トレーニング中のデータフローは、破線矢印順方向４０１、デルタ４０２、及びチェイン４０３として概念的に図示される。順方向４０１中、刺激が入力レイヤに適用され、入力レイヤからのアクティベーションは後続レイヤに流れ、最終的に出力レイヤに達し、順方向結果を生成する。デルタ４０２中、デルタ（例えば、順方向結果とトレーニング出力データとの差）は逆方向に伝搬する。チェイン４０３中、デルタがデルタ４０２中に生成されるため、デルタに基づいて勾配（例えば、ニューロンの重みに関する）が計算される。幾つかの実施形態及び／又は使用状況では、デルタ４０２の処理は実質的に４０３の処理と重複する。
【０１３９】
幾つかの実施形態及び／又は使用状況では、ディープ・ラーニング・アクセラレータ４００は、図１のディープ・ラーニング・アクセラレータ１２０の一実施態様である。幾つかの実施形態及び／又は使用状況では、個々のＰＥ４９９要素は、図１のＰＥ１２２の個々のＰＥに対応する。幾つかの実施形態及び／又は使用状況では、各ＡＳＩＣ４１０要素又は代替的には各ＡＳＩＣ４１１要素は、個々の集積回路として実装されるＰＥ１２２のＰＥの全て又は任意の部分に対応する。幾つかの実施形態及び／又は使用状況では、各ＡＳＩＣ４１０要素又は代替的には各ＡＳＩＣ４１１要素は、ウェーハの各ダイを介して実装されるＰＥ１２２の（任意選択で同一の）部分に対応する。幾つかの実施形態及び／又は使用状況では、Ｉ／Ｏ  ＦＰＧＡ４２０要素は集合的に、図１のＦＰＧＡ１２１に対応する。
【０１４０】
幾つかの実施形態及び／又は使用状況では、ＰＥ４９９要素へのニューロン（例えば、ニューラルネットワーク内のレイヤに関連付けられる）の配置は全体的又は部分的に、図２の配置サーバＳＷ２１０の全て又は任意の部分により実行される。
【０１４１】
ファブリック概説
図４に図示されるように、ディープ・ラーニング・アクセラレータの一実施形態は、ファブリックを介して互いに結合された複数のＰＥを有する。各ＰＥはＣＥ（例えば、計算を実行する）及びルータ（例えば、ファブリックについての情報の移動を管理及び／又は実施する）を含む。
【０１４２】
ファブリックは、ディープ・ラーニング・アクセラレータ内の全てのＰＥ間の通信相互接続として動作する。ファブリックは、例えば、３０ビット物理結合を介してウェーブレットを転送して、サイクル（例えば、コア・クロック・サイクル）当たり１ウェーブレット全体の転送を可能にする。概念上、ファブリックは、各ＰＥが（物理的）近傍と直接通信することができるようにＰＥ全体に分散したローカル相互接続である。（物理的）近傍以外への通信は、中間ノード、例えば、他のＰＥを通したホップを介する。幾つかの実施形態及び／又は使用状況では、分散ローカル・ファブリック・トポロジはニューラルネットワーク作業負荷に効率的にマッピングされ、例えば、各層はデータを近傍層に送信する）、及び／又は比較的低コストでハードウェアにおいて実施可能である。
【０１４３】
一例のファブリックは、カラーと呼ばれる１６個の論理的に独立したネットワークを有する。各カラーは、１つの物理的ネットワークに重ねられた仮想ネットワーク、例えば、仮想チャネルである。各カラーは、専用の物理的バッファリングリソースを有するが、同じ物理的ルーティングリソースを共有する。専用の物理的バッファは、カラーの非ブロック演算が可能である。共有の物理的ルーティングは、物理的リソースを低減する。様々な実施形態及び／又は使用状況では、ファブリックは様々な数のカラー（例えば、８、２４、又は３２）を有する。
【０１４４】
各カラーに関連付けられ、ルータにより実施されるルーティングパターンがある。各パターンのルーティングパターンは、プログラム可能であり、幾つかの実施形態では、例えば、図２の配置サーバＳＷ２１０及び／又はニューロンからＰＥへのマッピングＳＷ２１２により行われる決定に少なくとも部分的に基づいて統計的に構成される。構成されると、例えば、ソフトウェア（図２の接続サーバＳＷ２２０等）の制御下で、各カラーは固定ルーティングパターンである。カラー内を流れる全データは常に、固定ルーティングパターンに従って流れる。動的ルーティング決定はない。固定ルーティングは、ニューロン接続が統計的に指定されたニューラルネットワーク通信パターンに合致する。固定ルーティングは、比較的低コストのハードウェア実施を可能にする。
【０１４５】
図４に示されるように、一例の（物理的な）ファブリックトポロジは、１つのコア・クロック・サイクルで実行される各ホップをＸ又はＹ次元（例えば、図５の西５１１又は北５１３のそれぞれ）に有する２Ｄメッシュを有する。図示される２Ｄメッシュに加えて、幾つかの実施形態は、例えば水平次元において「スキップ」接続及び例えば垂直次元において「ループ」接続を更に有する。一例のスキップ接続は、２Ｄメッシュの同じ行内にあり、Ｎ個の他のＰＥにより物理的に隔てられたＰＥが、まるで物理的に隣接するかのように互いと通信できるようにする。スキップ接続に沿ったホップ（例えば、図５の西スキップ５１２）は、１つのコア・クロック・サイクルで実行される。様々な実施形態では、一例のループ接続は、ＰＥの列の下部におけるＰＥが、まるで物理的に隣接するかのように列の上部におけるＰＥと通信できるようにする。幾つかの実施形態では、ループ接続に沿ったホップは１つのコア・クロック・サイクルで実行される。
【０１４６】
幾つかの実施形態及び／又は使用状況では、１クロックにおけるＸ又はＹ次元での各ホップの実行は、任意にプログラム可能なルーティングトポロジの実施及び関連するタイミング制約の簡易化を可能にする。幾つかの状況では、ホップ当たり１サイクルの待ち時間は、関連するパイプライン化されたデータフローパターンに匹敵する。幾つかの状況（例えば、ある層から次の層に通信する場合）では、ホップ当たり１サイクルの待ち時間は、追加の待ち時間を加え、性能を下げる。追加の待ち時間は、層が深く、多くのＰＥを使用する場合、最悪であり、その理由は、層を抜け出し、次の層の全てのＰＥに達するために使用されるホップが多いためである。追加の待ち時間は、全体作業負荷パイプライン長を増大させ、したがって、記憶域（例えば、順方向パスアクティベーションのための）を増大させる。
【０１４７】
スキップ接続は、追加の待ち時間の低減に使用される。一例を考える。各スキップ接続は、１コア・クロック・サイクルで５０個のＰＥをスキップする。最初のスキップ接続に入るための待ち時間は最大で４９ホップである。最初のスキップ接続を出た後、最後のＰＥに達するための待ち時間は最大で４９ホップである。したがって、９８コア・クロック・サイクルの最大待ち時間オーバーヘッド及び４９コア・クロック・サイクルの平均待ち時間オーバーヘッドがある。層を処理するための待ち時間は２０００コア・クロック・サイクルである。したがって、この例では、５％の最大全体オーバーヘッド及び２．５％の平均全体オーバーヘッドがある。
【０１４８】
幾つかの実施形態及び／又は使用状況では、各行はスキップ接続を有し、各列はループ接続を有する。幾つかの実施形態及び／又は使用状況では、各スキップ接続は５０個のＰＥをスキップし、各列は、ループ接続が包含する２００個のＰＥを有する。幾つかの実施形態では、１つのループ接続（例えば、ＰＥの列の状況では、列の下部におけるＰＥと列の上部におけるＰＥとの間）は概ね、物理的にその列に及び、他の実施形態では、列のループ接続は、平均及び最悪事例のループホップが概ね、物理的に２つのＰＥに及ぶように折り畳まれることにより物理的に実施される。
【０１４９】
幾つかの実施形態及び／又は使用状況では、ファブリックはＡＳＩＣ当たり２００×１００個のＰＥを相互接続し、２００個のＰＥは垂直次元にあり、１００個のＰＥは水平次元にある。ファブリックは汎用であり、任意の機能のためにＰＥで実行されるソフトウェア（例えば、図２のＰＥ上のタスクＳＷ２６０）により使用可能である。幾つかの実施形態及び／又は使用状況では、ソフトウェアは、層間のデータ通信（例えば、アクティベーションブロードキャスト）に水平次元を使用する。層間のデータ通信は任意選択及び／又は選択で、１若しくはそれ以上のスキップ接続を介する。幾つかの実施形態及び／又は使用状況では、ソフトウェアは、層内のデータ通信（例えば、部分和累積）に垂直次元を使用する。層内の通信は任意選択及び／又は選択で、１若しくはそれ以上のループ接続を介する。幾つかの状況では、部分和累積はリングトポロジを介する。
【０１５０】
概念上、ファブリックでは、背圧情報は、背圧情報が対応するデータと同じトポロジに沿って同じ速さであるが、対応するデータの逆方向に流れる。例えば、ルータは、背圧情報を固定ルーティングパターンの逆方向パスに沿って送信する。各カラーに独立した背圧チャネル（例えば、信号）があり、複数のカラーの背圧情報を同時に通信できるようにする。独立した背圧チャネルは、幾つかの実施形態及び／又は使用状況では、同じサイクルで（例えば、異なる出力に）排出する複数のキューがある場合、背圧通信を簡易化する。
【０１５１】
カラーに背圧が掛けられる場合、ファブリック内の各ホップにおいてキュー内待機中のデータはストールする。その結果、キュー内待機中のデータは、背圧がなくなると、宛先に排出されるため、宛先におけるキューへの延長部である。例えば、特定のＰＥからの、特定のカラーに対応する背圧信号は、その特定のＰＥのルータの、その特定のカラーに対応するデータキューが所定の閾値にある（例えば、満杯又は略満杯）ときのみ、アサートされる。したがって、特定のカラーに関して、データキューが分散ファブリック内キューの一部として効率的に動作するように、ストールしたＰＥに達するまで、データは流れる。
【０１５２】
固定ルーティングパターンは、各ルータ内でマルチキャスト複製を提供する。マルチキャストは、幾つかのニューラルネットワーク作業負荷内等の高ファンアウト通信パターンを可能にする。マルチキャストを実行するために、各ルータノードには、マルチキャストカラー毎に複数の出力が統計的に構成される。ルータは、マルチキャストカラーに対応する入力ウェーブレットを静的構成により指定された全ての出力に複製してから、マルチキャストカラーの次のウェーブレットを処理する。幾つかの状況では、複数のマルチキャストカラーがあり、それぞれに複数の出力の各組が統計的に構成される。
【０１５３】
ルータは、カラー毎に複数の入力ソースを提供し、一度に１つのアクティブ入力ソースを処理する。入力ソースの調整は、例えば、一度に１つのみの入力ソースがアクティブであるように、より高レベル（例えば、フロー制御依存性、ＰＥ間の明示的なメッセージング、又は他の適したメカニズム）のソフトウェアにより実行される。幾つかの実施形態及び／又は使用状況では、１つのアクティブ入力ソースの実施により、ルータは、入力ソース毎に１つのバッファではなく、カラー毎に１つのバッファを有するため、比較的低コストのハードウェアが可能になる。
【０１５４】
一度の１つのみのアクティブ入力ソースしかないため、カラー内にはいかなる輻輳もない。しかしながら、幾つかの状況では、複数のカラーが１つの物理チャネルを共有するため、カラー間に輻輳が生じる。ルータは、準備のできたカラー間で１つの共有出力チャネルにスケジュールすることにより輻輳に対応する。
【０１５５】
ファブリックでのデッドロックは、ファブリックがブロック中である（例えば、ファブリック及びルータがハードウェアデッドロック回避機構を有さない）であるため、生じ得る。デッドロックは、ソフトウェアが、依存ループがなく、したがって、循環依存及びデッドロックを回避するように固定ルーティングパターンを構成することにより回避される。
【０１５６】
ソフトウェアはまた、ＰＥデータパスリソースを通しての循環依存がないことも保証する。そのような依存は、そのような保証がない場合、トレーニング作業負荷が３つ全てのメガフェーズ（順方向パス、デルタパス、及びチェインパス）で同じ物理的ＰＥデータパスを共有し、デルタパス及びチェインパスの処理が、順方向パスの処理と同じＰＥ上であるため、生じる。いかなる循環依存も破るために、ソフトウェアは、（順方向パス、デルタパス、及びチェインパス）ループ内の全てのタスクが無期限にブロックしないことを保証する。そうするために、ループ内の少なくとも１つのタスクは、スケジュールされると完了することが保証される。タスクスケジューリングは、計算要素内のウェーブレットピッカーにより可能である。ピッカーは、ウェーブレットの下流カラーが利用可能な場合のみ、ウェーブレットをスケジュールするようにプログラムされる。幾つかの実施形態及び／又は使用状況では、ソフトウェアが、独立して、性能のために上記属性を用いてタスクをプログラムすることも望ましい。
【０１５７】
デッドロックに繋がる不正確な構成の場合、進行しないことを検出し、故障を管理ソフトウェアに通知するウォッチドッグメカニズムがある。
【０１５８】
処理要素：計算要素及びルータ
図５は、ディープ・ラーニング・アクセラレータのＰＥ５００としてＰＥの一実施形態の選択された細部を図示する。ＰＥ５００はルータ５１０と、計算要素５２０とを有する。ルータ５１０は選択で及び／又は条件付きで、結合５１１〜５１６を介して他のＰＥ（例えば、論理的及び／又は物理的に隣接するＰＥ）とＰＥ５００との間でウェーブレットを通信（例えば、送受信）する。結合５１１〜５１６は、結合上のウェーブレットの双方向通信を強調するために、双方向矢印として図示されている。背圧情報はまた、背圧が対応するウェーブレット情報の逆方向で結合上を送信される。ルータ５１０は選択で及び／又は条件付きで、オフランプ（Ｏｆｆ  Ｒａｍｐ）５２１を介してＰＥ５００（例えば、計算要素５２０）にウェーブレットを通信し、オンランプ（Ｏｎ  Ｒａｍｐ）５２２を介してＰＥ５００（例えば、計算要素５２０）からウェーブレットを通信する。オフランプ５２１は、結合上のウェーブレットの単方向通信（例えば、ルータ５１０から計算要素５２０へ）を強調するために、単方向矢印として図示されている。背圧情報はまた、ウェーブレット情報の逆方向（例えば、計算要素５２０からルータ５１０へ）に結合上を送信される。オンランプ５２２は、結合上のウェーブレットの単方向通信（例えば、計算要素５２０からルータ５１０へ）を強調するために、単方向矢印として図示されている。背圧情報はまた、ウェーブレット情報の逆方向（例えば、ルータ５１０から計算要素５２０へ）において結合上を送信される。
【０１５９】
計算要素５２０は、ウェーブレットから導出可能な命令アドレス情報に従って、ウェーブレットにおいて具現されるデータに対して計算を実行する。命令アドレス情報は、計算要素の記憶装置（例えば、メモリ、キャッシュ、及びレジスタファイルのいずれか１若しくはそれ以上）に記憶された命令として具現されるタスクの開始アドレスの識別に使用される。計算の結果は選択で及び／又は条件付きで、記憶装置に記憶され、及び／又は例えば、他のＰＥ及び又はＰＥ５００に送信するために、ルータに通信されるウェーブレットで具現されるデータとして提供される。
【０１６０】
データに加えて、ルータ５１０は選択で及び／又は条件付きで、結合５１１〜５１６を介して他のＰＥとＰＥ５００との間で背圧情報を通信（例えば、送受信）する。ルータ５１０は選択で及び／又は条件付きで、オンランプ５２２を介して背圧情報をＰＥ５００に送信する。ルータ５１０は、オフランプ５２１を介して背圧情報をＰＥ５００から受信する。他のＰＥに提供された背圧情報及びＰＥ５００に提供された背圧情報は、キュー空間がルータ５１０にデータを記憶するのには不十分であることに起因して、ストールしない場合には失われるデータ（例えば、ウェーブレット）の送信をストールするために他のＰＥ及びＰＥ５００により使用される。他のＰＥ及びＰＥ５００から受信した背圧情報は、他のＰＥのルータのキュー空間が不十分であり、計算要素５２０の入力キュー内の空間が不十分であることのそれぞれに起因して、回避されない場合には失われるデータ（例えば、ウェーブレット）の送信を回避するために、ルータ５１０によりそれぞれ使用される。
【０１６１】
様々な実施形態では、５１１〜５１６の任意の１若しくはそれ以上は省かれる。
【０１６２】
幾つかの実施形態及び／又は使用状況では、ＰＥ５００は図４のＰＥ４９９の一実施形態であり、及び／又はＰＥ５００の要素はＰＥ４９９の一実施態様に対応する。幾つかの実施形態及び／又は使用状況では、北５１３、東５１５、南５１６、及び西５１１は、図４の北結合４３０、東結合４３１、南結合４３２、及び西結合４３３にそれぞれ対応する。
【０１６３】
図６は、ルータ６００としてＰＥのルータ一実施形態の選択された細部を図示する。複数のＰＥがあり、各ＰＥが各ルータ及び各ＣＥを有すると考える。ルータ６００は、各ルータの１つのインスタンスである。ルータ６００は、ウェーブレットのカラー情報及びルーティング構成情報に従って、インスタントルータが含まれるＰＥ及びルータのうちの他のルータのＣＥにウェーブレットをルーティングする。ルーティングされたウェーブレットは様々に、インスタントルータにより受信され、及び／又はインスタントルータが含まれるＰＥのＣＥにより生成される。ルーティングは、ＰＥ間での通信を可能にする。ストール情報が通信されて、ルータ６００でのウェーブレット記憶リソースのオーバーフローを回避する。
【０１６４】
ルータ６００は、４つのグループのインターフェースを有する：データイン（Ｄａｔａ  Ｉｎ）６１０、データアウト（Ｄａｔａ  Ｏｕｔ）６２０、ストールアウト（Ｓｔａｌｌ  Ｏｕｔ）６３０、及びストールイン６４０。データイン６１０、データアウト６２０、ストールアウト６３０、及びストールイン６４０はそれぞれ、インターフェース要素６１１〜６１７、６２１〜６２７、６３１〜６３７、及び６４１〜６４７を有する。ルータ６００は、データイン６１０、データアウト６２０、ストールアウト６３０、及びストールイン６４０にそれぞれ結合される書き込みデコーダ（Ｗｒｉｔｅ  Ｄｅｃ）６５１、アウト（Ｏｕｔ）６５２、ストール生成（Ｇｅｎ  Ｓｔａｌｌ）６５６、及びストール（Ｓｔａｌｌ）６５７を更に有する。ルータ６００は、ストール生成６５６に結合されたＳｒｃ６７０を有する発信元６５３を更に有する。ルータ６００はデータキュー（Ｄａｔａ  Ｑｕｅｕｅｓ）６５０、制御情報（Ｃｏｎｔｒｏｌ  Ｉｎｆｏ）６６０、及びスケジュール済みルータ（Ｒｏｕｔｅｒ  Ｓｃｈｅｄ）６５４を更に有する。制御情報６６０は宛先（Ｄｅｓｔ）６６１及び送信元（Ｓｅｎｔ）６６２を有する。
【０１６５】
概念的に、スキップＸ＋６１１、スキップＸ＋６２１、スキップＸ＋６３１、及びスキップＸ＋６４１は、７つの「方向」の１つ、例えば、「スキップＸ＋」方向を有する。幾つかの実施形態では、スキップＸ＋方向は図５の東スキップ５１４に対応する。スキップＸ−６１２、スキップＸ−６２２、スキップＸ−６３２、及びスキップＸ−６４２は、第２の「スキップＸ−」方向を有する。幾つかの実施形態では、スキップＸ−方向は図５の西スキップ５１２に対応する。Ｘ＋６１３、Ｘ＋６２３、Ｘ＋６３３、及びＸ＋６４３は第３の「Ｘ＋」方向を有する。幾つかの実施形態では、Ｘ＋方向は図５の東５１５に対応する。Ｘ−６１４、Ｘ−６２４、Ｘ−６３４、及びＸ−６４４は第４の「Ｘ−」方向を有する。幾つかの実施形態では、Ｘ−方向は図５の西５１１に対応する。Ｙ＋６１５、Ｙ＋６２５、Ｙ＋６３５、及びＹ＋６４５は第５の「Ｙ＋」方向を有する。幾つかの実施形態では、Ｙ＋方向は図５の北５１３に対応する。Ｙ−６１６、Ｙ−６２６、Ｙ−６３６、及びＹ−６４６は第６の「Ｙ−」方向を有する。幾つかの実施形態では、Ｙ−方向は図５の南５１６に対応する。最後に、オンランプ６１７、オフランプ６２７、オンランプ６３７、及びオフランプ６４７は第７の「オン／オフランプ」方向を有する。幾つかの実施形態では、オン／オフランプ方向のオンランプ６１７及びオンランプ６３７の部分は、図５のオンランプ５２２に対応する。幾つかの実施形態では、オン／オフランプ方向のオフランプ６２７及びオフランプ６４７は、図５のオフランプ５２１に対応する。
【０１６６】
データイン６１０は、各コア・クロック・サイクルで各方向から１つまでのウェーブレットを受信するためのものである。ストールアウト６３０は、各コア・クロック・サイクルで各カラーのストール情報を各方向に送信するためのものである。データアウト６２０は、各コア・クロック・サイクルで１つまでのウェーブレットを各方向に送信するためのものである。ストールイン６４０は、各コア・クロック・サイクルで各カラーのストール情報を各方向から受信するためのものである。
【０１６７】
データキュー６５０は書き込みデコーダ６５１に結合されて、入力ウェーブレット情報を受信し、アウト６５２に結合されて出力ウェーブレット情報を提供する。データキュー６５０は生成ストール６５６に更に結合されて、例えば、ストール情報の生成に使用されるデータキュー検証情報（例えば、満杯度に対応する）を提供する。スケジュール済みルータ６５４は制御情報６６０に結合されて、キューに配置されたウェーブレットのスケジューリングに関連する制御情報を受信する。スケジュール済みルータ６５４はアウト６５２に更に結合されて、６２１〜６２７の１若しくはそれ以上でのキュー配置ウェーブレットの提示を指示する。スケジュール済みルータ６５４はストール生成６５６に更に結合されて、ストール情報の生成を部分的に指示する。
【０１６８】
幾つかの実施形態では、データキュー６５０はカラー（ｃ０，...，ｃ１５）毎に２つのエントリを有する。各エントリは、ウェーブレットの少なくともペイロード情報を記憶することができる。様々な実施形態では、ウェーブレットのカラー情報は記憶されない。複数のエントリの第１のエントリは、キューの入力をキューの出力から切り離すのに使用される。複数のエントリの第２のエントリは、ストールが飛行中データと平行して（例えば、同じコア・クロック・サイクルで）送信される場合、飛行中データを捕捉するのに使用される。様々な実施形態では、データキュー６５０は、カラー数をウェーブレット毎の記憶情報のビット数で乗算し、それをカラー毎のキューエントリ数で乗算したものに等しいビット数、例えば、８６４ビット＝１６カラー＊２７ビットのウェーブレットデータ＊カラー毎に２エントリの記憶域を有する。代替的には、３３ビットのウェーブレットデータが記憶され、データキュー６５０は１０５６ビット＝１６カラー＊３３ビットのウェーブレットデータ＊カラー毎に２エントリを有する。様々な実施形態では、データキュー６５０は、１若しくはそれ以上のレジスタ及び／又はレジスタファイルを介して実施される。書き込みデコーダ６５１は、各方向で、入力ウェーブレットのカラーに対応するデータキュー６５０のエントリへの各入力ウェーブレットの情報を記憶する。
【０１６９】
幾つかの実施形態では、スケジュール済みルータ６５４は、各方向（例えば、６２１〜６２７毎）のスケジューラを有する。各方向で、各スケジューラは、データキュー６５０内の利用可能データを各方向に割り当てる。カラー毎の宛先情報は、宛先６６１により（静的に）提供される。様々な実施形態では、宛先６６１は、カラー数を方向数で乗算したものに等しい記憶ビット数、例えば、１１２ビット＝１６カラー＊７方向を有する。様々な実施形態では、宛先６６１は、１若しくはそれ以上のレジスタ及び／又はレジスタファイルを介して実施される。幾つかの実施形態では、宛先６６１は、結果として、１若しくはそれ以上の方向を提供するカラーによりアクセスされたデータ構造を有する。例えば、二進値として符号化されるカラーによりアドレス指定され、ビットベクトルとして方向毎に１ビットを提供するレジスタファイル／アレイ、カラーを示すビットベクトルの各アサートビットは、関連する方向に送信されるべきである。
【０１７０】
各スケジューラは互いに独立して動作する。したがって、マルチキャスト出力では、１つのウェーブレットが選択で及び／又は条件付きで、異なるコア・クロック・サイクルで又は代替的には同じコア・クロック・サイクルで異なる方向にスケジュールされる。送信元６６２は、ウェーブレットが送信された方向の追跡に使用される。カラーがまだ送信されたことがなく、方向がそのカラーでストールされていない場合、各スケジューラはそのカラーを選ぶ。様々な実施形態では、送信元６６２は、カラー数を方向数で乗算したものに等しい記憶ビット数、例えば、１１２ビット＝１６カラー＊７方向を有する。様々な実施形態では、送信元６６２は１若しくはそれ以上のレジスタ及び／又はレジスタファイルを介して実施される。
【０１７１】
様々な実施形態では、各スケジューラは、１若しくはそれ以上のスケジューリングポリシー、例えば、ラウンドロビン及び優先度を実施する。ラウンドロビン・スケジューリング・ポリシーは、スケジューラが利用可能な全てのカラーから一度に１つを選び、概念的に全てのカラーを通して循環してから、同じカラーを再び選ぶことを含む。優先度スケジューリングポリシーは、スケジューラが、第２の組の所定のカラー（例えば、カラー８〜１５）よりも高い優先度を有する第１の組の所定のカラー（例えば、カラー０〜７）の中から選ぶことを含む。
【０１７２】
幾つかの実施形態では、ストール６５７は、ストール情報を捕捉することができ、カラー数を方向数で乗算したものに等しい記憶ビット数、例えば、１１２ビット＝１６カラー＊７方向を有する。様々な実施形態では、ストール６５７は、１若しくはそれ以上のレジスタ及び／又はレジスタファイルを介して実施される。
【０１７３】
幾つかの実施形態では、ストール情報は、データキュー６５０の占有度に基づいて、全方向の全カラーでストール生成６５６により生成される。例えば、６３１〜６３７のそれぞれの各カラーにストール生成器がある。Ｓｒｃ６７０は、ストール生成６５６の情報を記憶し提供して、データキュー６５０の対応するカラーを１若しくはそれ以上の対応する方向にマッピングする。特定のカラーに対応するデータキュー６５０内のキュー空間が不十分なことに起因して、特定のカラーのソースとして機能する方向は、更なる入力のためにデータキュー６５０内のキュー空間が空くまで、更なる入力の提供をストールするように指示される。様々な実施形態では、Ｓｒｃ６７０は、カラー数を方向数で乗算したものに等しい記憶ビット数、例えば、１１２ビット＝１６カラー＊７方向を有する。様々な実施形態では、Ｓｒｃ６７０は、１若しくはそれ以上のレジスタ及び／又はレジスタファイルを介して実施される。幾つかの実施形態では、Ｓｒｃ６７０は、結果として１若しくはそれ以上の方向を提供するカラーによりアクセスされるデータ構造を有する。例えば、二進値として符号化されるカラーによりアドレス指定され、ビットベクトルとして方向毎に１ビットを提供するレジスタファイル／アレイ、カラーを示すビットベクトルの各アサートビットは、関連する方向からのソースである。
【０１７４】
様々な実施形態及び／又は使用状況では、Ｓｒｃ６７０及び宛先６６１の任意の１若しくはそれ以上に保持された情報の全て又は任意の部分は、ルーティング構成情報の全て又は任意の部分に対応する。様々な実施形態及び／又は使用状況では、ルーティング構成情報の全て又は任意の部分は、例えば、少なくとも部分的に図２の配置サーバＳＷ２１０及び／又はニューロンからＰＥへのマッピングＳＷ２１２に基づいて決定される。様々な実施形態及び／又は使用状況では、ルーティング構成情報は、例えば、ソフトウェア（図２の接続サーバＳＷ２２０、ＦＰＧＡ上の種々ＳＷ２５０、及び／又はＰＥ上のタスクＳＷ２６０等）の制御下でルータに向けられる。様々な実施形態及び／又は使用状況では、１若しくはそれ以上の所定のカラー（例えば、カラー０）は、所定の固定ルーティングパターン、ルーティング構成情報の全て又は任意の部分、及び／又は計算要素構成情報の全て又は任意の部分に従って、配信に使用される。所定の固定ルーティングパターンの一例は、任意選択で及び／又は条件付きで非ストールフローと組み合わせた所定のマルチキャストトポロジである。幾つかの実施形態及び／又は使用状況では、構成情報の配信は、配信に固有のウェーブレットフォーマットを介して実施される。固有のフォーマットのウェーブレットは、例えば、オフランプ６２７をモニタするハードコード状態機械により解析及び解釈される。
【０１７５】
様々な実施形態では、インターフェース要素６１１〜６１６、６２１〜６２６、６３１〜６３６、及び６４１〜６４６のそれぞれは、ルータ６００の１インスタンスとルータ６００の別のインスタンスとの間で追加の機能に適応するように、受動相互接続（例えば、バッファリングなしのワイヤ）、能動相互接続（例えば、選択及び／又は任意選択のバッファリングを用いるワイヤ）、及び論理を用いた結合を介して様々に実施される。様々な実施形態では、インターフェース要素６１７、６２７、６３７、及び６４７のそれぞれは、受動相互接続（例えば、バッファリングなしのワイヤ）、能動相互接続（例えば、選択及び／又は任意選択のバッファリングを有するワイヤ）、及びインスタントルータと、インスタントルータが含まれるＰＥのＣＥとの間の、追加機能に適合する論理との結合を介して様々に実施される。
【０１７６】
幾つかの実施形態及び／又は使用状況では、ルータ６００は図５のルータ５００の一実施態様である。
【０１７７】
図７Ａは、ウェーブレットイングレス７１０としての処理要素のルータに関連する処理の一実施形態の選択された細部を図示する。概念上、ルータは、イングレスポートから可能な限り多くのウェーブレットを受け入れ、必要に応じて、キュー空間が空いている場合、キュー配置し、単位時間（例えば、コア・クロック・サイクル）当たり可能な限り多くのウェーブレットをイグレスポートにルーティングする。幾つかの実施形態及び／又は使用状況では、カラー毎に１つのキューがある。
【０１７８】
ウェーブレットイングレス７１０は、各ルータ方向（例えば、図６の６１１〜６１７のいずれか）で、（論理的及び／又は物理的に）隣接するＰＥ及び／又はインスタントＰＥからのウェーブレットイングレスに対応する動作７１１〜７１３を有する。ルータは、入力ウェーブレットを待つ（ウェーブレットを待つ７１１）。入力ウェーブレットに応答して、ウェーブレットは受信され（ウェーブレットを受信７１２）、ウェーブレットに含まれるカラーに対応するルータキューに書き込まれる（ウェーブレット＝＞ルータキュー７１３）。幾つかの実施形態では、書き込みは少なくとも部分的に、書き込みデコーダ６５１の制御下である。次に、フローは、別のウェーブレットを待つことに戻る。幾つかの実施形態及び／又は使用状況では、ウェーブレットイングレス７１０の各インスタンスは、各ルータ方向で同時に動作する。様々な実施形態及び／又は使用状況では、７１０の動作の全て又は任意の部分の任意の１若しくはそれ以上は、図６のルータ６００の任意の１若しくはそれ以上の要素の全て又は任意の部分により実行される動作及び／又は関連する動作に対応する。
【０１７９】
図７Ｂは、フロー７４０として処理要素の計算要素に関連する背圧情報を生成し提供する一実施形態の選択された細部を図示する。フロー７４０の動作は様々なエージェントにより実行される。ＰＥは、ＰＥのＣＥ７４１により図示されるように、動作７４４〜７４６を実行するＣＥを有する。ＰＥは、ＰＥのルータ７４２により図示されるように、動作７４７を実行するルータを更に有する。
【０１８０】
幾つかの実施形態では、背圧情報を生成し送信するフローは、ＣＥのどの入力キューが、キュー毎の閾値よりも多くのウェーブレットを記憶しているかを判断する（閾値を超える入力キューを判断７４４）ことにより開始される（開始７４３）。幾つかの実施形態では、キュー毎の閾値は予め決定される。様々な実施形態では、入力キューの閾値は、入力キューの最大容量から２を差し引いたものである（例えば、６つのウェーブレットを記憶することができる入力キューは、閾値４を有する）。幾つかの他の実施形態では、入力キューの閾値は、最大容量から１を差し引いたものである。判断は、あらゆる期間で、例えば、あらゆるコア・クロック・サイクルで行われ、期間中、入力キューで受信され記憶されたウェーブレット及び入力キューから消費され削除されたウェーブレットを考慮する。各入力キューに関連するカラーは及び、ＣＥより特定される（入力キューに関連するカラーを特定７４５）。幾つかの実施形態では、入力キューには複数のカラーが関連付けられ、他の実施形態では、入力キューには１つのカラーが関連付けられる。関連付けられた入力キューが閾値を超えるか、それとも閾値未満であるかに基づいて、カラーのそれぞれでストール／使用可能状態がＣＥによって特定され、ＣＥによりルータに信号として提供される（ストール／使用可能をルータに提供７４６）。
【０１８１】
様々な実施形態では、カラーの使用可能状態は、関連付けられた入力キューが、幾つかのウェーブレット（例えば、１つ又は２つ）を受信するのに十分な容量を有することを示し、ストール状態は、関連付けられた入力キューが、幾つかのウェーブレットを受信するのに十分な容量を有さないことを示す。提供されたストール／使用可能状態に基づいて、ＰＥのルータ７４２は条件付きで、ウェーブレットをＣＥに提供し（ストール／使用可能に従ってウェーブレットをＣＥに提供７４７）、フローは終わる（終わり７４８）。幾つかの実施形態及び／又は使用状況では、ルータは、使用可能状態のカラーのウェーブレットを提供し、ストール状態のカラーのウェーブレットを提供しない。
【０１８２】
様々な実施形態及び／又は使用状況では、フロー７４０の動作は概念上、ＣＥ、例えば、図８のＣＥ８００及びルータ、例えば、図６のルータ６００に関連する。幾つかの実施形態では、入力キューは入力キュー８９７に対応する。様々な実施形態では、各入力キューに関連付けられたカラーは、ハッシュ８２２の逆数を計算することにより特定される。幾つかの実施形態では、ストール／使用可能信号の群は、オフランプ６４７を介してルータに提供される。幾つかの実施形態及び／又は使用状況では、図９Ａの任意の部分又は全て、図１６の任意の部分又は全て、及び図２３の部分（例えば、（次の）ソースデータ要素をキュー／メモリから読み出す２３１０）の１若しくはそれ以上は、入力キューからのウェーブレット消費の部分に対応する。様々な実施形態では、図１６の部分（例えば、ウェーブレットをピッカーキューに書き込む１５０７）は、ウェーブレットを受信し、入力キューに記憶することに対応する。
【０１８３】
図７Ｃは、フロー７５０として処理要素のルータに関連する背圧情報を生成し提供する一実施形態の選択された細部を図示する。フロー７５０の動作は様々なエージェントにより実行される。ＰＥのルータは、ＰＥのルータ７５１により図示されるように、動作７５６〜７５９を実行する。ＰＥは、ＰＥのＣＥ７５２により図示されるように、動作７６０を実行するＣＥを更に有する。近傍ＰＥの１若しくはそれ以上のルータは、近傍のルータ７５３により図示されるように、動作７６１を実行する。
【０１８４】
幾つかの実施形態では、背圧情報を生成し提供するフローは、ＰＥのルータが、ルータのどのデータキューが閾値よりも多いウェーブレットを記憶しているかを判断する（閾値を超えるデータキューを判断７５６）ことにより開始される（開始７５５）。幾つかの実施形態では、閾値は予め決定される。様々な実施形態では、データキューの閾値は、キューの最大容量から１を差し引いたものである（例えば、２つのウェーブレットを記憶することができるキューは、閾値１を有する）。判断は、あらゆる期間で、例えば、あらゆるコア・クロック・サイクルで行われ、期間中、データキューで受信され記憶されたウェーブレット及びデータキューから消費され削除されたウェーブレットを考慮する。ルータは、各カラーのウェーブレットのソースを特定する（カラーソースをチェック７５７）。各ルータ出力（例えば、ローカルＣＥ及び近傍ＰＥ）について、データキューが閾値を超えるか、それとも閾値未満であるか及びウェーブレットのソースに基づいて、ルータは、どのカラーがストール／使用可能状態であるかを判断する（ＣＥ、近傍のストール／使用可能カラーを判断７５８）。
【０１８５】
様々な実施形態では、カラーの使用可能状態は、カラーの関連付けられたデータキューが、幾つかのウェーブレット（例えば、１つ又は２つ）を受信するのに十分な容量を有することを示し、ストール状態は、関連付けられたデータキューが、幾つかのウェーブレットを受信するのに十分な容量を有さないことを示す。各出力で、カラーのストール／使用可能状態は、ＰＥのＣＥ７５２及び近傍のルータ７５３へのストール／使用可能信号をアサートすることにより群として提供される（ストール／使用可能をＣＥ、近傍に提供７５９）。幾つかの実施形態及び／又は使用状況では、ＰＥのＣＥ７５２及び近傍のルータ７５３の各ルータに提供される背圧情報は同一である。提供されたストール／使用可能状態に基づいて、ＰＥのＣＥ７５２は条件付きで、ウェーブレットをＰＥのルータ７５１に提供し（ストール／使用可能に従ってウェーブレットをルータに提供７６０）、近傍のルータ７５３は条件付きで、ウェーブレットをＰＥのルータ７５１に提供し（ストール／使用可能に従ってウェーブレットをルータに提供７６１）、フローは終わる（終わり７６２）。幾つかの実施形態及び／又は使用状況では、ＣＥ及び近傍ルータは、使用可能状態のカラーのウェーブレットを提供し、ストール状態のカラーのウェーブレットを提供しない。
【０１８６】
様々な実施形態及び／又は使用状況では、フロー７５０の動作は概念上、ＣＥ、例えば、図８のＣＥ８００及びルータ、例えば、図６のルータ６００に関連する。幾つかの実施形態では、ルータは、ストールイン６４０を介してストール／使用可能カラーを受信する（例えば、オフランプ６４７を介してローカルＣＥから及び６４１〜６４６を介して近傍ＰＥから）。様々な実施形態では、各カラー及び関連付けられたソースは、Ｓｒｃ６７０に記憶され、これは、ストール／使用可能信号を各カラーに提供する方向を示す。例えば、Ｓｒｃ６７０内のカラー７のエントリは、ソースがローカルＣＥ（オンランプ６１７）及びＸ＋６１３を含むことを示し、したがって、カラー７のストール／使用可能状態はローカルＣＥ及びＸ＋に提供される。幾つかの実施形態では、ストール／使用可能状態信号の群は、オンランプ６３７を介してルータからＣＥに送信される。様々な実施形態では、ストール／使用可能信号の群は、ストールアウト６３０の６３１〜６３６を介してルータから近傍ＰＥのルータに提供される。
【０１８７】
図７Ｄは、フロー７８０として処理要素の計算要素に関連付けられたストール処理の一実施形態の選択された細部を図示する。フロー７８０の動作は、ＰＥのＣＥ７８１により示されるように、ＰＥのＣＥにより実行される。
【０１８８】
幾つかの実施形態では、処理をストールするフローは、ＣＥが、任意の出力キューがキュー毎の最大容量のウェーブレットを記憶しているかを判断する（満杯出力キューを特定７８３）ことにより開始される（開始７８２）。幾つかの実施形態では、キュー毎の最大容量は予め決定される。判断は、あらゆる期間で、例えば、あらゆるコア・クロック・サイクルで行われ、期間中、出力キューで受信され記憶されたウェーブレット及びルータに送信されて出力キューから削除されたウェーブレットを考慮する。出力キューが最大容量のウェーブレットを記憶しているとの判断に応答して、ＣＥは、出力キューに関連付けられたカラーを特定し（満杯出力キューに関連付けられたカラーを特定７８４）、それらのカラーの処理をストールし（満杯出力キューに関連付けられたカラーの処理をストール７８５）、フローを終える（終わり７８６）。
【０１８９】
様々な実施形態及び／又は使用状況では、フロー７８０の動作は概念上、ＣＥ、例えば、図８のＣＥ８００に関連する。幾つかの実施形態では、出力キューは出力キュー８５９に対応する。様々な実施形態及び使用状況では、ウェーブレットは、ウェーブレットに関連付けられたカラー上のルータからストールを受信することに応答して出力キューに記憶される。幾つかの実施形態及び使用状況では、各出力キュー８５９には１若しくはそれ以上のカラーが関連付けられ、関連付けは出力キュー８５９の部分において追跡される。他の実施形態では、各出力キュー８５９には１つのカラーが関連付けられる。幾つかの実施形態及び使用状況では、ＣＥは、最大容量のウェーブレットを記憶している出力キューに関連付けられたカラーに関連付けられた処理をストールする。幾つかの実施形態では、動作７８５は、少なくとも部分的にピッカー８３０により実行される。様々な実施形態では、処理は、ウェーブレットの最大容量未満を記憶している出力キューに関連付けられた任意のカラーでイネーブルされる。
【０１９０】
図８は、ＣＥ８００としての処理要素の計算要素の一実施形態の選択された細部を図示する。
【０１９１】
様々な実施形態では、ＣＥ８００は図６のルータ６００に結合される。例えば、オフランプ８２０、オンランプ８６０、オフランプ８４７、及びオンランプ８３７はそれぞれ、オフランプ６２７、オンランプ６１７、オンランプ６４７、及びオンランプ６３７に結合される。ＣＥ８００は、オフランプ８２０を介してウェーブレットを受信するように結合されたキュー配信（Ｑｄｉｓｔｒ）８２４を有する。キュー配信８２４は、スケジューリング情報８９６にウェーブレットを送信するように結合される。スケジューリング情報８９６は、入力キュー８９７、アクティブビット８９８、及びブロックビット８９９を有する。スケジューリング情報８９６はオフランプ８４７に結合されて、ストール情報（例えば、各カラーのストール／使用可能信号）をルータに送信する。
【０１９２】
様々な実施形態では、入力キュー８９７は、各ファブリックカラー及び各ローカルカラーの仮想キューを有する。各ファブリックカラーの仮想キューは、例えば、他の処理要素により作成され、各カラーが関連付けられたウェーブレットの保持に使用可能である。各ローカルカラーの仮想キューは、例えば、ＣＥ８００により作成され、各カラーが関連付けられたウェーブレットの保持に使用可能である。様々な実施形態では、仮想キューは、１若しくはそれ以上の物理的な入力キューにより実施される。幾つかの他の実施形態では、入力キュー８９７は、各ファブリックカラー及び各ローカルカラーの物理キューを有する。入力キュー８９７のそれぞれ１つ（例えば、入力キュー０  ８９７．０）にはアクティブビット８９８（例えば、アクティブビット０  ８９８．０）及びブロックビット８９９（例えば、ブロックビット０  ８９９．０）のそれぞれが関連付けられる。アクティブビット８９８のそれぞれ１つ及びブロックビット８９９のそれぞれ１つは、入力キュー８９７のそれぞれ１つについての情報を含み、例えば、ブロックビットＮ  ８９９．Ｎは、入力キューＮ  ８９７．Ｎがブロックされているか否かを示す。
【０１９３】
様々な実施形態では、各カラーの物理的キュー、カラーの所定のサブセットの１若しくはそれ以上の物理的キュー、及びカラーの動的に決定されるサブセットの１若しくはそれ以上の物理的キューが様々に存在する。様々な実施形態では、同じサイズの１若しくはそれ以上の物理的キュー（例えば、それぞれが同数のウェーブレットを保持することができる）及び異なるサイズの１若しくはそれ以上の物理的キュー（例えば、それぞれが異なる数のウェーブレットを保持することができる）が様々に存在する。様々な実施形態では、仮想キューに様々にマッピングされる１若しくはそれ以上の物理的キューがあり、各仮想キューには１若しくはそれ以上のカラーが関連付けられる。例えば、Ｎ個の論理キュー及びＮ個未満の物理的キューがある。別の例として、入力キュー８９７の幾つかは８つのウェーブレットを保持することができ、入力キュー８９７のうちの他のものは３つのウェーブレットを保持することができる。幾つかの実施形態では、入力キュー８９７の特定の１つに関連付けられた１若しくはそれ以上のカラーのトラフィックは、推定及び／又は測定され、入力キュー８９７の特定の１つは、トラフィックに基づいて特定の数のウェーブレットを保持することができる。幾つかの実施形態では、物理キューの１若しくはそれ以上は、レジスタ及びＳＲＡＭの１若しくはそれ以上により実施される。
【０１９４】
ハッシュ８２２はＱｄｉｓｔｒ８２４に結合され、少なくとも部分的にウェーブレットのカラーに基づいて、ウェーブレットを記憶する物理的キューを選択する（例えば、ハッシュ関数をカラーに適用することにより）。幾つかの実施形態では、ウェーブレットペイロードに関連付けられたカラーは、キュー内のエントリが全体ウェーブレット（カラーを有するペイロード）を保持するように、キュー内のウェーブレットペイロードを用いて明示的に記憶される。幾つかの実施形態では、ウェーブレットペイロードに関連付けられたカラーは、キュー内のエントリが、関連付けられたカラーを記憶せずにウェーブレットペイロードを記憶するように、キュー内のウェーブレットペイロードを用いて明示的に記憶されない。ウェーブレットペイロードのカラーは、ウェーブレットペイロードが記憶された特定のキュー等から推測される。
【０１９５】
幾つかの実施形態では、アクティブビット８９８及びブロックビット８９９の１若しくはそれ以上は、各カラーに１つのエントリでＮ個のエントリを有する各ビットベクトルとして実施される。様々な実施形態では、アクティブビット８９８及びブロックビット８９９の１若しくはそれ以上は、各カラーに１つのエントリを有するテーブル内の各ビットフィールドとして実施される。
【０１９６】
ピッカー（Ｐｉｃｋｅｒ）８３０は、スケジューリング情報８９６、ＲＦ８４２、デコーダ（Ｄｅｃ）８４０、ベース（Ｂａｓｅ）８９０、ＰＣ８３４、Ｉ配列（Ｉ−ＳｅＱ）８３６，及びＤ配列（Ｄ−ＳｅＱ）８４４に結合される。ＲＦ、デコーダ、ベース、ＰＣ、Ｉ配列、及びＤ配列はそれぞれ、レジスタファイル、デコーダ、ベースレジスタ、プログラムカウンタ、命令シーケンサ、及びデータシーケンサの略である。ピッカー８３０は、入力キュー８９７の１つから、処理するウェーブレットを選択することができる。幾つかの実施形態では、ピッカー８３０は、入力キュー８９７の１つを選択し、選択されたキュー内の最も古いウェーブレットを選択することによりウェーブレットを選択する。幾つかの状況では、ピッカー８３０は、デコーダ８４０が、終了命令が復号化されたことを通知する場合、処理する新しいウェーブレットを選択する。幾つかの他の状況（例えば、ファブリック入力にアクセスする命令）では、ピッカー８３０は、Ｄ配列８４４から受信したキュー識別子に応答して、入力キュー８９７の１つから処理する新しいウェーブレットを選択する。
【０１９７】
ピッカー８３０は、入力キュー８９７の１つから選択されたウェーブレットを受信し、選択されたウェーブレットからのデータ及びインデックスの１若しくはそれ以上をＲＦ８４２に選択的に及び／又は任意選択的に送信することができる。幾つかの実施形態では、入力キュー８９７はデータパス（Ｄａｔａ  Ｐａｔｈ）８５２に結合され、データパスは、キューの１つから直接データを受信することができる。ピッカー８３０は、ベースアドレスをベース８９０から読み取り、命令アドレスを計算して、ＰＣ８３４及びＩ配列８３６に送信することができる。ベース８９０は、ベースアドレスを記憶し、Ｄ配列８４４にも結合される。ＰＣ８３４は、フェッチする次の命令のアドレスを記憶する。様々な実施形態では、ベース８９０及びＰＣ８３４はレジスタとして実施される。幾つかの実施形態では、Ｄ配列８４４は、ベース８９０からベースアドレスを読み取り、少なくとも部分的にベース８９０から読み取られた値に基づいて、メモリ８５４及びＤストア（Ｄ−Ｓｔｏｒｅ）８４８から１若しくはそれ以上のアドレスにおけるデータを要求することができる。
【０１９８】
ピッカー８３０は、処理するウェーブレットを選択する代わりに、処理するアクティベートされたカラー（アクティブビット８９８に対応する１つのアサートにより示される）を選択することが更にできる。選択されたカラーに対応するタスクは開始される。幾つかの実施形態及び／又は使用状況では、処理するウェーブレットの選択とは異なり、情報はＲＦ８４２に提供されず、したがって、開始されたタスクに通信されるデータは、例えば、グローバルレジスタ及び／又はメモリを介する。
【０１９９】
Ｉ配列８３６はＰＣ８３４に結合され、ＰＣ８３４を読み取り変更することができる（例えば、シーケンシャル命令のインクリメント又は分岐命令の非シーケンシャル）。Ｉ配列８３６はメモリ８５４にも結合され、命令フェッチアドレスをメモリ８５４に提供することができる（例えば、ＰＣ８３４に基づいて）。
【０２００】
メモリ８５４はデコーダ８４０、データパス８５２、及びＤ配列８４４に更に結合される。Ｉ配列８３６からの命令フェッチアドレスに応答して、メモリ８５４は、命令フェッチアドレスに配置された命令をデコーダ８４０（命令デコーダ）に提供することができる。様々な実施形態では、メモリ８５４は、各命令フェッチアドレスに応答して、最高で３つまでの命令を提供することができる。幾つかの実施形態では、命令は、図２５Ａ、図２５Ｂ、及び図２５Ｃの１若しくはそれ以上に従ってフォーマットされる。
【０２０１】
様々な実施形態及び／又は使用状況では、命令は、例えば、ソフトウェア（図２の接続サーバＳＷ２２０、ＦＰＧＡ上の種々ＳＷ２５０、及び／又はＰＥ上のタスクＳＷ２６０等）の制御下でＰＥに配信される。様々な実施形態及び／又は使用状況では、マスタＰＥ（例えば、ＰＥ１２２の任意のＰＥ）として動作しているＰＥは、ファブリックを介して命令及び／又は構成情報の任意の部分を１若しくはそれ以上のスレーブＰＥ（例えば、マスタＰＥを含むＰＥ１２２の任意のＰＥ）に配信する。幾つかの実施形態では、配信は、１若しくはそれ以上の所定のカラー（例えば、カラー０）上のウェーブレットを介し、及び／又は所定の固定ルーティングパターンに従う。幾つかの他の実施形態では、配信は、１若しくはそれ以上の選択されたカラー（例えば、プログラムにより選択される）上のウェーブレットを介する。様々な実施形態では、ウェーブレットは、スレーブＰＥとして動作している１若しくはそれ以上のＰＥにより受信され、続くフェッチ及び実行のためにメモリ８５４の各インスタンスに書き込まれる。
【０２０２】
デコーダ８４０は、様々な実施形態及び／又は使用状況に従って命令の１若しくはそれ以上の特性を特定することができる。例えば、デコーダ８４０は、命令を解析してオペコード（例えば、図２５Ａのオペコード２５１２）及びゼロ以上のオペランド（例えば、発信元及び／又は宛先オペランド）にすることができる。別の例として、デコーダ８４０は、命令タイプ（例えば、分岐命令又は乗累算命令等）に従って命令を識別することができる。更に別の例では、デコーダ８４０は、命令が特定の命令であると判断することができ、それに従って１若しくはそれ以上の信号をアクティベートする。
【０２０３】
デコーダ８４０は、終了（Ｔｅｒｍｉｎａｔｅ）８１２を介してピッカー８３０に結合され、復号化された命令の１つが、タスクを終わらせる終了命令（例えば、終了命令は選択されたウェーブレットに応答して開始されたタスク応答して実行される命令の最後の命令）であることを通知することができる。
【０２０４】
幾つかの状況では、デコーダ８４０は分岐命令を復号化することができる。分岐命令の例には、ＰＣ８３４を条件付きで変更する条件付き分岐命令及び無条件でＰＣ８３４を変更するジャンプ命令がある。分岐命令はＩ配列８３６によって実行され、任意選択で及び／又は条件付きでＰＣ８３４を変更する。幾つかの状況では、分岐命令は、ＰＣ８３４を条件付きで変更することによりソフトウェア制御フロー（例えば、ループ）を実施する。
【０２０５】
命令（例えば、乗累算命令）の復号化に応答して、デコーダ８４０は、オペコードをデータパス８５２に送信することができる。デコーダ８４０はＤＳＲ８４６に結合され、１若しくはそれ以上のオペランド識別子をＤＳＲ８４６に送信することができる。デコーダ８４０はＤ配列８４４にも結合され、１若しくはそれ以上のオペランドタイプ識別子をＤ配列８４４に送信することができる。
【０２０６】
ＤＳＲ８４６は、データ構造記述子（ＤＳＤ）を保持するレジスタを有し、Ｄ配列８４４に結合され、１若しくはそれ以上のＤＳＤをＤ配列８４４に送信することができる。幾つかの実施形態では、ＤＳＲは、発信元ＤＳＲ、宛先ＤＳＲ、拡張ＤＳＲ、及びストライドレジスタを有する。デコーダ８４０からのオペランド識別子の受信に応答して、ＤＳＲ８４６は、オペランド識別子によって指定されたＤＳＤを読み取り、ＤＳＤをＤ配列８４４に送信することができる。様々な実施形態では、ＤＳＲ８４６は、最高で２つまでの発信元オペランド識別子及び１つの宛先オペランド識別子を受信し、２つの発信元ＤＳＲ及び１つの宛先ＤＳＲを読み取り、２つの発信元ＤＳＤ及び１つの宛先ＤＳＤをＤ配列８４４に送信することができる。幾つかの実施形態では、ＣＥはＤＳＲロード命令に応答してＤＳＤをメモリからＤＳＲに明示的に書き込むことができ、ＣＥは、ＤＳＲ記憶命令に応答して、ＤＳＤをＤＳＲからメモリに明示的に書き込むことができる。幾つかの実施形態では、ＤＳＲ８４６は、メモリ８５４に結合され、メモリ８５４からデータを受信し、メモリ８５４にデータを送信することができる。
【０２０７】
幾つかの実施形態では、ＤＳＲ８４６は３組のＤＳＲを有する：発信元０オペランドの１２個のＤＳＲ（Ｓ０ＤＳＲと呼ばれることもある）、発信元１オペランドの１２個のＤＳＲ（Ｓ１ＤＳＲと呼ばれることもある）、及び宛先オペランドの１２個のＤＳＲ（ＤＤＳＲと呼ばれることもある）を有する。加えて、ＤＳＲ８４６は、６つの拡張ＤＳＲ（ＸＤＳＲと呼ばれることもある）及び６つのストライドレジスタも有する。幾つかの実施形態では、ＤＳＲは４８ビットを有し、ＸＤＳＲは５１ビットを有し、ストライドレジスタは１５ビットを有する。様々な実施形態では、各命令は、４８ビットのデータをメモリ（例えば、Ｄストア（Ｄ−Ｓｔｏｒｅ）８４８又はメモリ８５４）から各ＤＳＲにロードする（例えば。ＬＤＳ０ＷＤＳ、ＬＤＳ１ＷＤＳ、及びＬＤＤＷＤＳ命令はそれぞれ、発信元０ＤＳＲ、発信元１ＤＳＲ、及び宛先ＤＳＲをロードする）。様々な実施形態では、各命令は、各ＤＳＲからの４８ビットのデータをメモリに記憶する（例えば、ＳＴＳ０ＷＤＳ、ＳＴＳ１ＷＤＳ、及びＳＴＤＷＤＳ命令はそれぞれ、発信元０ＤＳＲ、発信元１ＤＳＲ、及び宛先ＤＳＲをメモリに記憶する）。幾つかの実施形態では、命令（例えば。ＬＤＸＤＳ）は、メモリからのデータをＸＤＳＲにロードし、他の命令（例えば、ＳＴＸＤＳ）はＸＤＳＲからのデータをメモリに記憶する。データをメモリとＸＤＳＲ（例えば、ＬＤＸＤＳ及びＳＴＸＤＳ）との間で移動させる命令は、メモリの６４ビットにアクセスし、下位５１ビットのみを使用する。幾つかの実施形態では、命令（例えば、ＬＤＳＲ）は、メモリからのデータをストライドレジスタにロードし、他の命令（例えば、ＳＴＳＲ）はストライドレジスタからのデータをメモリに記憶する。幾つかの実施形態では、データをメモリとストライドレジスタとの間で移動させる命令は、メモリの１６ビットにアクセスし、下位１５ビットのみを使用する。
【０２０８】
Ｄ配列８４４はＤストア８４８、ＲＦ８４２、及びピッカー８３０にも結合され、ＤＳＲ８４６から受信されたＤＳＤに応答して、様々なソースにおけるベクトルデータへのアクセスを開始することができる。幾つかの状況では（例えば、１Ｄメモリベクトル、４Ｄメモリベクトル、及び循環メモリバッファの１つを記述するＤＳＤの受信に応答して）、Ｄ配列８４４は、アクセスする一連のメモリアドレス（例えば、メモリ８５４及び／又はＤストア８４８内の）を計算することができる。幾つかの他の状況では（例えば、ファブリック入力を記述するＤＳＤの受信に応答して）、Ｄ配列８４４は、ピッカー８３０を介して入力キュー８９７の１つからのファブリックデータの読み出しを開始することができる。更に他の状況では（例えば、ファブリック出力を記述するＤＳＤの受信に応答して）、Ｄ配列８４４は、ウェーブレットへのデータの変換及び出力キュー８５９及びオンランプ８６０を介して結合されるファブリックへのウェーブレットの送信を開始することができる。幾つかの実施形態では、Ｄ配列８４４は、３つのソースにおけるベクトルデータに同時にアクセスすることができる（例えば、メモリからのベクトルデータの読み取り、ファブリック入力からのベクトルデータ読み取り、及びファブリック出力へのベクトルデータの書き込み）。
【０２０９】
幾つかの実施形態では、Ｄ配列８４４は、ＲＦ８４２内の１若しくはそれ以上のレジスタ内のデータにアクセスすることができる（例えば、１若しくはそれ以上の入力オペランド及び／又は１つの出力オペランドを有する命令）。幾つかの状況では、Ｄ配列８４４は、ＲＦ８４２内のレジスタからのオペランドを要求することができる。更に他の状況では、Ｄ配列８４４は、ＤＳＤに従ってアクセスする一連のメモリアドレスを計算するための入力として、ＲＦ８４２内のレジスタからのデータ（例えば、インデックス）を要求することができる。
【０２１０】
様々な実施形態では、ＰＥ８００の状態の全て又は任意の部分は、ソフトウェア可視状態（例えば、Ｄストア８４８、メモリ８５４、ＲＦ８４２、ＤＳＲ８４６、出力キュー８５９、及び入力キュー８９７、ブロックビット８９９の任意の組合せ）及びソフトウェアアクセス可能ではない状態（例えば、ＵＴ状態８４５）を含む、アドレス空間においてマッピングされる。様々な実施形態では、アドレス空間及び／又はアドレス空間の部分は、レジスタ及びＳＲＡＭの１若しくはそれ以上により実施される。幾つかの実施形態では、１つのＡＳＩＣに実施される複数のＰＥのアドレス空間は、１つのアドレス空間にマッピングされる。幾つかの実施形態では、各ＰＥ（例えば、１つのＡＳＩＣ又はその部分で実施される複数のＰＥの）は各プライベートアドレス空間を有する。プライベートアドレス空間を有する幾つかの実施形態では、１つのＰＥは、他のＰＥのアドレス空間内の要素に直接アクセスすることができない。
【０２１１】
データパス８５２はＲＦ８４２及びＤストア８４８に結合される。様々な実施形態では、メモリ８５４、ＲＦ８４２、入力キュー８９７、及びＤストア８４８の任意の１若しくはそれ以上は、データをデータパス８５２に提供し（例えば、Ｄ配列８４４からの要求に応答して）、データパス８５２からデータ（例えば、動作の結果）を受信することができる。データパス８５２は、演算（例えば、実施形態により、復号化されたオペコードにより指定され、及び／又はデコーダ８４０により提供される）を実行することができる実行リソース（例えば、ＡＬＵ）を有する。幾つかの実施形態では、ＲＦ８４２は、ＧＰＲ０〜ＧＰＲ１５と呼ばれることもある１６個の汎用レジスタを有する。各ＧＰＲは１６ビット幅であり、整数又は浮動小数点データを記憶することができる。
【０２１２】
データパス８５２はまた、出力キュー８５９及びオンランプ８６０を介してルータに結合され、出力キュー８５９及びオンランプ８６０を介してデータをルータに送信することができる。様々な実施形態では、出力キュー８５９は、各ファブリックカラーの仮想キュー（例えば、データパス８５２により作成され、各カラーが関連付けられたウェーブレットについての情報を保持する）、例えば、キュー８５９．０、...、及びキュー８５９．Ｎを有する。様々な実施形態では、出力キュー８５９の第１の部分は統計的又は動的に、６つのウェーブレットを保持することができ、出力キュー８５９の第２の部分は統計的又は動的に、２つのウェーブレットを保持することができ、出力キュー８５９の第３の部分は統計的又は動的に、ゼロ個のウェーブレットを保持することができる。
【０２１３】
幾つかの実施形態では、データパス８５２は、１若しくはそれ以上のウェーブレットに関連付けられたファブリックカラー及び出力キュー８５９へのファブリックカラーのマッピングに基づいて、１若しくはそれ以上のウェーブレットを出力キュー８５９の１つに書き込むことができる。出力キュー８５９は、オンランプ８６０を介してルータ（例えば、図６のルータ６００）にウェーブレットを送信することができる。幾つかの実施形態及び／又は使用状況では、出力キュー８５９は、ルータに送出可能ではない（例えば、背圧又は競合に起因して）ウェーブレットをバッファリングする。幾つかの実施形態及び／又は使用状況では、出力キュー８５９の１つが満杯である場合、ファブリックパケットを出力キュー８５９の１つに書き込む処理はストールする（例えば、ピッカー８３０により）。幾つかの実施形態及び／又は使用モデルでは、出力キュー８５９は、オンランプ８３７を介してルータに結合され、背圧情報をルータから受信することができる。様々な実施形態では、背圧情報は、各カラーのストール／使用可能信号を有し、背圧情報に応答して、ストールされたカラーに対応するウェーブレットはルータに送信されない。
【０２１４】
ＵＴ状態８４５は、ピッカー８３０、デコーダ８４０、Ｄ配列８４４、ＤＳＲ８４６、スケジューリング情報８９６、及び出力キュー８５９に結合される（上記結合は、明確にするために図から省かれている）。様々な実施形態及び又は使用状況では、ＵＴ状態８４５は、１若しくはそれ以上のマイクロスレッド処理された命令についての情報の記憶及び提供に使用される。マイクロスレッド処理された命令の一例は、例えば、マイクロスレッド処理がイネーブルされていることを示す対応するＵＥフィールドを有する少なくとも１つのファブリック・ベクトル・オペランドを介してマイクロスレッド処理をイネーブルする命令である。幾つかの実施形態では、ＵＴ状態８４５は、１若しくはそれ以上（例えば、８つ）のエントリ（例えば、ＳＲＡＭ等の記憶装置により実施される）のデータ構造を有し、１若しくはそれ以上のマイクロスレッド処理された命令（マイクロスレッド処理された命令それ自体、マイクロスレッド処理された命令の演算コード、マイクロスレッド処理された命令の１若しくはそれ以上のオペランド、及びマイクロスレッド処理された命令のオペランドに関連付けられた１若しくはそれ以上のＤＳＤの任意の組合せ等）のそれぞれについての情報を記憶し提供することができる。様々な実施形態では、ＵＴ状態８４５の各エントリには、入力キュー８９７及び出力キュー８５９のそれぞれ１つの１若しくはそれ以上が関連付けられる（例えば、エントリ０にはキュー８９７．０及びキュー８５９．０が関連付けられる）。幾つかの実施形態では、ＵＴ状態８４５のエントリから入力キュー８９７及び出力キュー８５９へのマッピングは、静的であり、予め決定される。ＵＴ状態８４５は、デコーダ８４０とマイクロスレッド処理された命令情報（マイクロスレッド処理された命令それ自体等）を通信し、Ｄ配列８４４及びＤＳＲ８４６の１若しくはそれ以上とＤＳＤの部分を通信することができる。幾つかの実施形態では、マイクロスレッド処理された命令についての情報は、関連付けられたＤＳＤからのマイクロスレッド識別子（例えば、ＵＴＩＤ２１０２又はＵＴＩＤ２１２２）によって決定されるＵＴ状態８４５のエントリに記憶される。様々な実施形態では、ファブリック宛先オペランドありのマイクロスレッド処理された命令についての情報は、ＵＴＩＤ２１２２によって決定されるエントリに記憶される。ファブリック宛先なしのマイクロスレッド処理された命令についての情報は、ｓｒｃ０オペランドのＵＴＩＤ２１０２によって決定されるエントリ及びファブリックからのｓｒｃ０オペランドがない場合、ｓｒｃ１オペランドのＵＴＩＤ２１０２によって決定されるエントリに記憶される。
【０２１５】
様々な実施形態及び使用状況では、ＵＴ状態８４５は、Ｄ配列８４４、ＤＳＲ８４６、スケジューリング情報８９６、及び出力キュー８５９の任意の１若しくはそれ以上と共にストール情報を受信及び／又はモニタすることができる。幾つかの実施形態では、ＵＴ状態８４５は、１若しくはそれ以上のマイクロスレッド処理された命令が実行に使用可能であることをピッカー８３０に通信することができ、ピッカー８３０は、実行に向けてマイクロスレッド処理された命令をスケジュールすることができる。様々な実施形態及び／又は使用状況では、ＵＴ状態８４５からのマイクロスレッド処理された命令が実行されると、ＵＴ状態８４５は、デコーダ８４０、Ｄ配列８４４、及びデータパス８５２の１若しくはそれ以上に命令情報（例えば、演算及び／又は１若しくはそれ以上オペランド）を通信することができる。
【０２１６】
幾つかの実施形態では、Ｄストア８４８は、メモリ８５４よりも小さく、より効率的な（例えば、１ビットデータ読み取り当たりのジュール数がより低い）メモリの一種である。幾つかの実施形態では、Ｄストア８４８は、メモリ８５４より比較的容量が低く（例えば、保持する情報量がより少ない）、比較的アクセス待ち時間が短く及び／又は比較的スループットが高いメモリの一種である。幾つかの状況では、より頻繁に使用されるデータはＤストア８４８に記憶され、一方、あまり頻繁に使用されないデータはメモリ８５４に記憶される。幾つかの実施形態では、Ｄストア８４８は第１のアドレス範囲を有し、メモリ８５４は第２の非重複アドレス範囲を有する。幾つかの実施形態及び／又は使用状況では、メモリ８５４は、命令を記憶することができる第１のメモリと見なされ、Ｄストア８４８及びＲＦ８４２の任意の組合せは、データを記憶することができる第２のメモリと見なされる。
【０２１７】
幾つかの実施形態及び／又は使用状況では、仮想キュー（例えば、入力キュー８９７及び出力キュー８５９）と物理キュー（例えば、ＳＲＡＭを介して実施される記憶装置）との間には一対一の対応があり、例えば、各仮想キューに１つの物理キューがある。一対一実施形態の幾つかでは、仮想キューの１若しくはそれ以上の各サイズは、あるときにはゼロであり、別の時点では物理キューに従って最大サイズである等、経時変化するように動的に管理される。様々な実施形態及び／又は使用状況では、多対一の対応が仮想キューと物理キューとの間に存在し、例えば、１つの物理キューは複数の仮想キューを実施する。様々な実施形態では、様々に、各カラーの物理キュー、カラーの所定のサブセットに１若しくはそれ以上の物理キュー、及びカラーの動的に決定されるサブセットに１若しくはそれ以上の物理キューが存在する。様々な実施形態では、様々に、同じサイズの１若しくはそれ以上の物理キュー（例えば、それぞれが同数のウェーブレットを保持することができる）及び異なるサイズの１若しくはそれ以上の物理キュー（例えば、それぞれが異なる数のウェーブレットを保持することができる）が存在する。様々な実施形態では、仮想キューに様々にマッピングされる１若しくはそれ以上の物理キューがあり、各仮想キューには１若しくはそれ以上のカラーが関連付けられる。例えば、物理キューよりも多数の仮想キューがある。別の例では、仮想キューの第１の部分は統計的又は動的に６つのウェーブレットを保持することができ、仮想キューの第２の部分は統計的又は動的に２つのウェーブレットを保持することができ、仮想キューの第３の部分は統計的又は動的にゼロ個のウェーブレットを保持することができる。幾つかの実施形態では、物理キューの１若しくはそれ以上は、レジスタ及びＳＲＡＭの１若しくはそれ以上により実施される。
【０２１８】
様々な実施形態では、ＣＥ８００は５段パイプラインに従って命令を処理することができる。幾つかの実施形態では、最初の段において、ＣＥは命令シーケンシング、例えば、ウェーブレットの受信（例えば、入力キュー８９７における）、実行するウェーブレットの選択（例えば、ピッカー８３０による）、及びウェーブレットに対応する命令へのアクセス（例えば、Ｉ配列８３６による）の１若しくはそれ以上を実行することができる。２番目の段において、ＣＥは、命令をデコードし（例えば、デコーダ８４０により）、任意のＤＳＲを読み出し（例えば、ＤＳＲ８４６から）、オペランドのアドレスを計算する（例えば、ＤＳＤに従ってＤ配列８４４により）ことができる。３番目の段において、ＣＥは、データを任意の１若しくはそれ以上のメモリ（例えば、メモリ８５４、ＲＦ８４２、Ｄストア８４８、入力キュー８９７）から読み出すことができる。４番目の段において、ＣＥは、命令によって指定された（例えば、データパス８５２において）演算を実行し、結果をレジスタファイル（例えば、ＲＦ８４２）に書き込むことができる。５番目の段において、ＣＥは、任意の１若しくはそれ以上のメモリ、例えば、メモリ８５４、ＤＳＲ８４６、Ｄストア８４８に結果を書き込むことができる。様々な実施形態では、段の１つにおいて、ＣＥは任意選択で及び／又は条件付きで結果を出力キュー８５９に提供し、非同期でウェーブレットをルータに提供することができる。
【０２１９】
幾つかの実施形態及び／又は使用状況では、図の要素は図５の計算要素５２０の一実施態様に対応する。例えば、オフランプ８２０及びオフランプ８４７の組み合わせは、オフランプ５２１に対応し、オンランプ８６０及びオンランプ８３７の組み合わせはオンランプ５２２に対応する。
【０２２０】
図８に図示される分割及び結合は単に例示であり、異なる分割及び／又は結合を有する他の実施形態も考えられる。例えば、他の実施形態では、ＲＦ８４２及びＤＳＲ８４６は１つのモジュールに結合される。更に他の実施形態では、ＤＳＲ８４６及びデータパス８５２は結合される。幾つかの実施形態及び／又は使用状況では、スケジューリング情報８９６の要素は、カラーにより編成、管理、及び／又は実施され、例えば、各データ構造及び／又は物理要素又はその部分は、カラー０に向けられ、別のデータ構造及び／又は物理要素又はその部分はカラー１に向けられ、以下同様である。
【０２２１】
タスク開始
図９Ａは、フロー９００としてタスク開始のウェーブレットを処理する一実施形態の選択された細部を図示する。概念的には、処理は、タスクの命令のフェッチ及び実行を開始するアドレスを特定することによってタスクを開始することを含む。アドレスは、少なくとも部分的にウェーブレットが含む情報に基づいて特定される。
【０２２２】
幾つかの実施形態では、タスク開始のウェーブレットの処理は、例えば、処理の１若しくはそれ以上のキュー（タスク開始に使用可能なウェーブレットを選択９０２）の中から使用可能なウェーブレットを選択することで開始する（開始９０１）。幾つかの実施形態では、ウェーブレットは、各キューに関連付けられたブロック／ブロック解除状態、各キューに関連付けられたアクティブ／非アクティブ状態、前に選択されたウェーブレットのカラー、及びスケジューリングアルゴリズムの１若しくはそれ以上に基づいて選択される。
【０２２３】
使用可能なウェーブレットを選択した後、そのウェーブレットをチェックして、そのウェーブレットが制御ウェーブレットであるか、それともデータウェーブレットであるかを判断する（制御／データ？９０３）。ウェーブレットが制御ウェーブレット（クローズアウトウェーブレット）である場合、制御ウェーブレットに関連付けられたタスクの開始アドレスが、ウェーブレットのインデックスの下位６ビットをベースレジスタに追加することによって計算される（下位インデックスビットをベースレジスタに追加して、命令アドレスを形成９１０）。ウェーブレットが制御ウェーブレットではない場合、ウェーブレットはデータウェーブレットである。データウェーブレットに関連付けられたタスクの開始アドレスは、ウェーブレットのカラーを４倍したものにベースレジスタを追加することによって計算される（（カラー＊４）をベースレジスタに追加して、命令アドレスを形成９０４）。制御ウェーブレットで計算されるか、又はデータウェーブレットで計算されるタスクの開始アドレスは、タスクの命令の開始アドレスに対応する。
【０２２４】
命令の開始アドレスが計算されると、命令は開始命令アドレスからフェッチされる（メモリ内の命令アドレスから命令をフェッチ９０５）。フェッチされた命令の１若しくはそれ以上は、復号化され実行される（フェッチされた命令を実行９０６）。フェッチ及び実行（動作９０５及び９０６に図示されるように）は、終了命令が実行される（終了９０９）まで続けられ（終了せず９０８）、終了命令が実行されると、次に、開始されたタスクに関連付けられた処理は完了する（終わり９１９）。幾つかの実施形態では、終了命令は、ウェーブレットの処理に関連付けられた最後の命令である。開始されたタスクが完了した後、フローは任意選択で及び／又は選択で、開始９０１から開始して、タスク開始の別のウェーブレットの処理に進む。
【０２２５】
様々な使用状況に従って、実行（フェッチされた命令を実行９０６）は、シーケンシャル命令及び／又は制御フロー命令を実行することを含み、フェッチに使用される命令アドレスは、それに従って変わる（メモリ内の命令アドレスから命令をフェッチ９０５）。
【０２２６】
タスク開始に選択された使用可能なウェーブレットは、特定のカラーで構成される。幾つかの実施形態及び／又は使用状況では、使用可能なウェーブレットがタスク開始に選択されると（タスク開始に使用可能なウェーブレットを選択９０２）、特定のカラーの受信した更なるウェーブレットがある場合、そのウェーブレットは、命令を実行するためのオペランドとして使われる（フェッチされた命令を実行９０６）。オペランドとして特定のカラーを有するウェーブレットを使用することは、終了命令のフェッチ及び実行（終了９０９）まで続く。
【０２２７】
様々な実施形態及び／又は使用状況では、フロー９００の動作は概念的に、ＣＥ、例えば図８のＣＥ８００に関連する。一例として、ブロックビット８９９は、各キューに関連付けられたブロック／ブロック解除状態に対応する。アクティブビット８９８は、各キューに関連付けられたアクティブ／非アクティブ状態に対応する。幾つかの実施形態では、入力キューのアクティブビットは、ウェーブレットが入力キューに書き込まれる場合、アクティブ状態に設定される。別の例として、動作９０２の部分はピッカー８３０により実行される。ピッカー８３０は、ラウンドロビン又は最後から選択等のスケジューリングポリシーに従って、使用可能な（例えば、ブロックビット８９９の関連付けられたものがデアサートされ、アクティブビット８９８の関連付けられたものがアサートされる）入力キュー８９７の１つから最も古いウェーブレットを選択する。幾つかの実施形態及び／又は使用モデルでは、ピッカー８３０は、最後から選択スケジューリングポリシーに従って動作する場合、ピッカー８３０がクローズアウトウェーブレットを選択するまで、使用可能な入力キュー８９７のうちの同じ入力キューからウェーブレットを選択し続ける。ピッカー８３０により選択されたウェーブレットは、図１３Ａ及び図１３Ｂの一方に従ってフォーマットされたカラー及びウェーブレットペイロードを有し、例えば、制御ビット１３２０（図１３Ａ）のアサート又は制御ビット１３４０（図１３Ｂ）のアサートは、クローズアウトウェーブレットを示す。
【０２２８】
別の例として、動作９０３はＣＥ８００の要素によって実行される。ウェーブレットペイロードの制御ビット（例えば、図１３Ａの制御ビット１３２０）がアサートされる場合（例えば、ピッカー８３０によって判断される）、ウェーブレットは制御ウェーブレットである。続けて、動作９１０が、ピッカー８３０等のＣＥ８００がベース８９０の内容を図１３Ａの下位インデックスビット１３２１．１の下位６ビットに追加して、制御ウェーブレットに関連付けられたタスクの命令の命令フェッチアドレスを形成することによって実行される。次に、ピッカー８３０は命令フェッチアドレスをＰＣ８３４に提供する。ウェーブレットペイロードの制御ビット（例えば、図１３Ａの制御ビット１３２０）がデアサートされる場合（例えば、ピッカー８３０により判断される）、ウェーブレットはデータウェーブレットである。続けて、動作９０４が、ピッカー８３０等のＣＥ８００が、ウェーブレットのカラー（例えば、図１３Ａ及び図１３Ｂのカラー１３２４に対応する）を４で乗算したものにベース８９０の内容を追加して、データウェーブレットに関連付けられたタスクの命令の命令フェッチアドレスを形成することにより実行される。次に、ピッカー８３０は、命令フェッチアドレスをＰＣ８３４に提供する。
【０２２９】
別の例として、動作９０５は、ＣＥ８００の要素、例えば、ＰＣ８３４、Ｉ配列８３６、及びメモリ８５４によって実行される。動作９０６は、ＣＥ８００の要素、例えば、特にデコーダ８４０、Ｄ配列８４４、メモリ８５４、ＲＦ８４２、及びデータパス８５２によって実行される。実行は、終了命令の実行を含む。終了命令の一例は、終了ビットがアサートされた命令である。この例の状況では、デコーダ８４０が終了命令を復号化すると、デコーダ８４０は終了８１２を介してピッカー８３０に、ウェーブレットが終わったことを通知し、ピッカー８３０は、例えば、動作９０２に対応する処理の別のウェーブレットを選択する。
【０２３０】
様々な実施形態及び／又は使用状況では、タスク開始のウェーブレットを処理する要素９００の全て又は任意の部分は概念的に、図２のＰＥ上のタスクＳＷ２６０の命令の実行の全て又は任意の部分に対応する。
【０２３１】
様々な実施形態及び／又は使用状況では、フロー９００を含む動作の全て又は任意の部分は概念的に、図１５のフロー１５００及び／又は図１６のフロー１６００の全て又は任意の部分に様々に対応する。例えば、動作９０２は動作１６０２の全て又は任意の部分を含み、動作９０３、９０４、９１０、９０５、及び９０６は、動作１６０３の全て又は任意の部分を含む。
【０２３２】
図９Ｂは、フロー９２０としてタスクをアクティベートする一実施形態の選択された細部を図示する。概念上、タスクアクティベーションは、オン若しくはそれ以上のカラーをアクティベートし、その結果、カラーは実行に向けて選択可能になり、次に、カラー（例えば、アクティベートされたカラーの１つ）を選び、カラーに対応するタスクを開始することを含む。
【０２３３】
幾つかの実施形態では、タスクをアクティベートするフローは、１若しくはそれ以上のカラーのアクティベート動作（カラーのアクティベート動作９２３）を実行することにより開始される（開始９２１）。アクティベート動作は、例えば、命令又は１組のイベントの１つに応答する。アクティベート動作に応答して、対応するカラーはアクティベートされ、実行に選択可能にする（カラーをアクティベート９２４）。次に、実行に選択可能なカラーは、ピッカーにより選ばれる（ピッカーはカラーを選択９２５）。選ばれたカラーに対応するタスクは開始され、選ばれたカラーは非アクティベートされる（タスクを開始、カラーを非アクティベート９２６）。タスク開始は、タスクの開始アドレスを特定し、開始アドレスから開始して命令をフェッチし実行することを含む。次に、フローは完了する（終わり９２９）。
【０２３４】
アクティベート動作が応答する命令は、アクティベート命令を含む。アクティベート命令は、アクティベートする１若しくはそれ以上のカラーを指定する。アクティベートするカラーは、アクティベート命令内の即値（例えば、アクティベートする１つのカラーを指定する６ビットフィールド）、アクティベート命令により指定されるレジスタ、又は他の情報の１若しくはそれ以上により様々に指定される。幾つかの実施形態及び／又は使用状況では、アクティベート命令ソースが即座ではない場合、アクティベート命令が完了するまで、新しいタスク選択はストールされる。
【０２３５】
幾つかの実施形態及び／又は使用状況では、アクティベート動作が応答する１組のイベントは、マイクロスレッド処理を可能にするファブリックベクトルの処理の完了を含む。例えば、ファブリックベクトルは、ファブリック入力データ構造記述子（ＤＳＤ）に従って処理される。ファブリック入力ＤＳＤは、マイクロスレッド処理がイネーブルされていることを指定し、ファブリック入力ＤＳＤは、ファブリックベクトルの処理の完了に応答してアクティベートするカラーを更に指定する。カラーは、ファブリックベクトルの処理の完了に応答してアクティベートされる。別の例では、ファブリックベクトルは、ファブリック出力ＤＳＤに従って処理される。ファブリック出力ＤＳＤは、マイクロスレッド処理がイネーブルされていることを指定し、ファブリック出力ＤＳＤは、ファブリックベクトルの処理の完了に応答してアクティベートするカラーを更に指定する。カラーは、ファブリックベクトルの処理の完了に応答してアクティベートされる。
【０２３６】
幾つかの実施形態及び／又は使用状況では、アクティベート動作が応答する１組のイベントは、関連付けられた循環メモリバッファ拡張ＤＳＤ（ＸＤＳＤ）を有する循環メモリバッファＤＳＤに従って循環バッファから要素をプッシュ及び／又はポップすることを更に含む。循環メモリバッファＸＤＳＤは、要素を循環バッファにプッシュすること及び循環バッファから要素をポップすることに応答してアクティベートするカラーを指定する各フィールドを有する。各カラーは、プッシュ及び／又はポップに応答してアクティベートされる。
【０２３７】
幾つかの実施形態及び／又は使用状況では、カラーをアクティベートすることは、カラーに対応するインジケータをアクティベート状態に設定することを含み、カラーを非アクティブにすることは、インジケータを非アクティベート状態に設定することを含む。幾つかの実施形態及び／又は使用状況では、インジケータはビットを有し、ビットのアサートはアクティベート状態を示し、ビットのデアサートは非アクティベート状態を示し、各カラーに対応するビットがある。
【０２３８】
様々な実施形態及び／又は使用状況では、図９Ｂに示される動作は、ファブリックカラー及び／又はローカルカラーに適用可能である。
【０２３９】
様々な実施形態及び／又は使用状況では、フロー９２０の動作は概念的に、ＣＥ、例えば図８のＣＥ８００に関連する。例えば、カラーのアクティベート／非アクティベートは、アクティブビット８９８の対応する１つをアサート／デアサートすることにより実行される。別の例では、ピッカーはカラーを選択９２５は、ピッカー８３０により実行される。様々な実施形態及び／又は使用状況では、フロー９２０を含む動作の全て又は任意の部分は概念上、図９Ａのフロー９００の全て又は任意の部分に様々に対応し、例えば、動作９２６は、図９Ａの動作９０４、９０５、及び９０６の全て又は任意の部分を含む。
【０２４０】
ファブリック入力データ構造記述子２１００（図２１Ａ）は、マイクロスレッド処理のイネーブルを指定するフィールド（ＵＥ２０１３）と、ファブリック入力ＤＳＤにより記述されるファブリックベクトルの処理の完了に応答してアクティベートするカラーを指定するフィールド（ＡＣ２１０５）とを有する一例のファブリック入力ＤＳＤである。ファブリック出力データ構造記述子２１２０（図２１Ｂ）は、マイクロスレッド処理のイネーブルを指定するフィールド（ＵＥ２１２３）と、ファブリック出力ＤＳＤにより記述されるファブリックベクトルの処理の完了に応答してアクティベートするカラーを指定するフィールド（ＡＣ２１２５）とを有する一例のファブリック出力ＤＳＤである。循環メモリ・バッファ・データ構造記述子２１８０（図２１Ｅ）は、循環バッファへの要素のプッシュ及び循環バッファからの要素のポップに応答してアクティベートするカラーを指定する各フィールドを有する関連付けられた循環メモリバッファ拡張ＤＳＤ（ＸＤＳＤ）を有する一例の循環メモリバッファＤＳＤである。循環メモリバッファ拡張データ構造記述子２２１０（図２２Ａ）は、循環バッファへの要素のプッシュ及び循環バッファからの要素のポップに応答してアクティベートするカラーを指定する各フィールド（プッシュカラー２２１５及びポップカラー２２１６）を有する一例の循環メモリバッファ拡張ＤＳＤ（ＸＤＳＤ）である。
【０２４１】
タスクのブロック及びブロック解除
様々な実施形態及び／又は使用状況では、ＣＥ８００の命令セットは、ブロック命令及びブロック解除命令並びに特にタスク同期に有用なアクティベート演算（例えば、アクティベート命令）を実行することができる命令を有する。図２のＰＥ上のタスクＳＷ２６０は、ブロック命令及びブロック解除命令並びにアクティベート演算を実行することができる命令を使用して、選択で、様々な目的に合うようにファブリック演算の様々な態様をローカルに整形することができる。例えば、ＰＥ上のタスクＳＷ２６０は、これらの命令を使用して、１つ若しくはそれ以上のタスクの計算及び／又は通信の調整、データフロー制御、タスク内及びタスク間の依存性及び／又は優先度の管理、概ね等しい平均生成率及び消費を有するようにキューを間接的に管理するためのタスク活動のスロットル調整（ストール／再開）並びに多様な待ち時間の複数のソース及び／又はパスから集まる中間データを同期させるソフトウェアインターロックの実施（例えば、ニューラルネットワーク層の境界付近の順方向及び／又は逆方向パス計算において生じ得るような、この態様は図１１、図１２、及び図２８Ａ〜図２８Ｅに様々に示される）の１若しくはそれ以上を実行することができる。
【０２４２】
図９Ｃは、フロー９４０としてブロック命令及びブロック解除命令の実行の一実施形態の選択された細部を図示する。概念上、特定のカラーを指定するブロック命令を実行すると、実施形態及び／又は使用状況に従って以下の１若しくはそれ以上が生じる。特定のカラーに関連付けられた命令は、少なくとも、その特定のカラーを指定するブロック解除命令の実行まで、実行されない。特定のカラーを含むウェーブレットは、少なくとも、その特定のカラーを指定するブロック解除命令の実行まで、選択されない。特定のカラーに一致する、アクティベートされたカラーは、少なくとも、その特定のカラーを指定するブロック解除命令の実行まで、選択されない（したがって、対応するタスクの開始は実行されない）。特定のカラーに関連付けられたマイクロスレッドは、少なくとも、その特定のカラーを指定するブロック解除命令の実行まで、実行されない。
【０２４３】
図を参照すると、命令を実行することは、メモリから命令をフェッチし、命令を復号化する（命令をフェッチし復号化９４２）ことにより開始される（開始９４１）。命令がブロック命令に復号化される場合（ブロック命令？９４３）、ブロック演算は実行される（カラーをブロック９４４）。ブロック命令の発信元オペランドは、ブロック／ブロック解除されたカラーに関連付けられた命令処理に関してブロックする１若しくはそれ以上のカラーを指定する。様々な実施形態及び／又は使用状況では、ブロック演算は、発信元オペランドにより指定された１若しくはそれ以上のカラーの１若しくはそれ以上のブロックインジケータをブロック状態に設定することにより実行され、実行は完了する（終わり９４９）。様々な状況では、発信元オペランドは、１つのカラーのブロック、全カラーのブロック、及び任意の複数のカラーのブロックを様々に指定する。続く演算では、ブロックされたカラーを有するウェーブレットは、処理に選択されない。
【０２４４】
命令がブロック解除命令に復号化される場合（ブロック解除命令？９４５）、ブロック解除演算が実行される（カラーをブロック解除９４６）。ブロック解除命令の発信元オペランドは、ブロック／ブロック解除されたカラーに関連付けられた命令処理に関してブロック解除する１若しくはそれ以上のカラーを指定する。様々な実施形態及び／又は使用状況では、ブロック解除演算は、発信元オペランドにより指定された１若しくはそれ以上のカラーのブロックインジケータをブロック解除状態に設定することにより実行され、実行は完了する（終わり９４９）。様々な状況では、発信元オペランドは、１つのカラーのブロック解除、全カラーのブロック解除、及び任意の複数のカラーのブロック解除を様々に指定する。続く演算では、ブロック解除されたカラーを有するウェーブレットは、処理に選択可能である。
【０２４５】
命令が、ブロック命令ではなく、ブロック解除命令ではない命令に復号化される場合、命令は他の方法で実行され（命令を実行９４７）、実行は完了する（終わり９４９）。
【０２４６】
幾つかの実施形態では、ブロック命令の発信元オペランドは、即値（例えば、８ビット即値）であり、即値の値は、ブロックするカラーを指定する。様々な実施形態では、特定のオペランドを有するブロック命令は、複数のカラーをブロックする。発信元オペランドが即値ではない場合、ブロック命令が完了するまで、全てのカラーがブロックされる。
【０２４７】
幾つかの実施形態では、ブロック解除命令の発信元オペランドは、即値（例えば、８ビット即値）であり、即値の値は、ブロック解除するカラーを指定する。様々な実施形態では、特定のオペランドを有するブロック解除命令は、複数のカラーをブロック解除する。
【０２４８】
様々な実施形態及び／又は使用状況では、ブロック及びブロック解除命令処理フロー９４０の要素の任意の１若しくはそれ以上の全て又は任意の部分は概念上、ＰＥのＣＥ、例えば、図５の計算要素５２０及び／又は図８のＣＥ８００の全て又は任意の部分等の計算要素の任意の要素により実行される演算及び／又は計算要素の任意の要素に対応及び／又は関連する。
【０２４９】
一例として、ブロックビット８９９は、各カラーにビットを有する（例えば、テーブル内のエントリ又はビットマスクとして）。ブロック演算（カラーをブロック９４４）は、発信元オペランドにより指定された１若しくはそれ以上のカラーのブロックビット８９９を特定のブロック状態（例えば、「１」）に設定することにより実行される。幾つかの実施形態では、ピッカー８３０は、ブロックビット８９９がブロック解除状態（例えば、「０」）に一致するカラーから、処理するウェーブレットを選択する。別の例として、ブロック解除演算（カラーをブロック解除９４６）は、発信元オペランドにより指定された１若しくはそれ以上のカラーのブロックビット８９９を特定のブロック解除状態（例えば、「０」）に設定することにより実行される。幾つかの実施形態では、ピッカー８３０は、ブロックビット８９９がブロック解除状態（例えば、「０」）に一致するカラーを有するウェーブレットを選択する。
【０２５０】
幾つかの実施形態では、ブロック及びブロック解除命令処理フロー９４０の部分は、図９Ａのタスク開始のためにウェーブレットの処理９００の部分に対応する。一例として、動作９４２、９４３、９４４、９４５、９４６、及び９４７は、図９Ａの動作９０５及び９０６の部分に対応する。
【０２５１】
様々な実施形態及び／又は使用状況では、ブロック及びブロック解除命令処理フロー９４０の要素の全て又は任意の部分は概念上、図２のＰＥ上のタスクＳＷ２６０の命令の実行の全て又は任意の部分に対応する。
【０２５２】
高レベルデータフロー
図１０Ａ及び図１０Ｂは、例えば、図１の配置サーバ１５０で実行される図２のニューロンからＰＥへのマッピングＳＷ２１２により決定される、プロセッサ要素の各組に１つのニューロンの複数のインスタンスをマッピングする一実施形態において生じる高レベルデータフローの選択された細部を図示する。図１０Ａは、図１７等のより大規模なニューラルネットワークの内部ニューラルネットワーク部分１０４０を抽象的に図示する。ニューラルネットワーク部分１０４０は、第１のニューロン層（左側）に３つのニューロンを有し、第２のニューロン層（右側）に３つのニューロンを有する。第１のニューロン層は、ニューロンＡ  １０４１、ニューロンＢ  １０４２、及びニューロンＣ  １０４３を含む。第２のニューロン層は、ニューロンＤ  １０４４、ニューロンＥ  １０４５、及びニューロンＦ  １０４６を含む。ニューロンＡ  １０４１からのアクティベーションａＡ  １０６１、ニューロンＢ  １０４２からのアクティベーションａＢ  １０６２、及びニューロンＣ  １０４３からのアクティベーションａＣ  １０６３はそれぞれ、それぞれ非ゼロである場合、第２のニューロン層にブロードキャストされ、図示されるようにトポロジに従って、ニューロンＤ  １０４４、ニューロンＥ  １０４５、及びニューロンＦ  １０４６に通信される。ニューロンＤ  １０４４からのアクティベーションａＤ  １０６４、ニューロンＥ  １０４５からのアクティベーションａＥ  １０６５、及びニューロンＦ  １０４６からのアクティベーションａＦ  １０６６はそれぞれ、それぞれ非ゼロである場合、次の層（図示せず）にブロードキャストされる。非ゼロアクティベーションのみがブロードキャストされるため、ゼロアクティベーションに無駄な計算が使用されない。このようにして、アクティベーションの疎性はウェーハにわたり累積されて、効率を改善し、消費電力を低減する。
【０２５３】
図１０Ｂは、図４のウェーハ４１２等のより大規模な処理要素アレイの処理要素アレイ部分１０６０を図示する。図１０Ｂの同様に付番された要素は、図１０Ａの同様に付番された要素に対応する。ニューロンＤ  １０４４は、重みｗＡＤ  １０８０、ｗＢＤ  １０８３、及びｗＣＤ  １０８６のローカルに記憶された各分散を介してＰＥ０  １０７０、ＰＥ３  １０７３、及びＰＥ６  １０７６にマッピングされる。ニューロンＥ  １０４５は、重みｗＡＥ  １０８１、ｗＢＥ  １０８４、及びｗＣＥ  １０８７のローカルに記憶された各分散を介してＰＥ１  １０７１、ＰＥ４  １０７４、及びＰＥ７  １０７７にマッピングされる。ニューロンＦ  １０４６は、重みｗＡＦ  １０８２、ｗＢＦ  １０８５、及びｗＣＦ  １０８８のローカルに記憶された各分散を介してＰＥ２  １０７２、ＰＥ５  １０７５、及びＰＥ８  １０７８にマッピングされる。
【０２５４】
ニューロンＡ  １０４１からの非ゼロアクティベーションａＡ  １０６１は、記憶された重みｗＡＤ  １０８０、ｗＡＥ  １０８１、及びｗＡＦ  １０８２の検索をトリガーする。ＰＥ０  １０７０、ＰＥ１  １０７１、及びＰＥ２  １０７２は、入力されたニューロンＡ  １０４１からのアクティベーションａＡ  １０６１との各局所ニューロン重みの各局所乗算及び累積を実行して、各局所部分和を生成する。ニューロンＢ  １０４２からの非ゼロアクティベーションａＢ  １０６２は、記憶された重みｗＢＤ  １０８３、ｗＢＥ  １０８４、及びｗＢＦ  １０８５の探索をトリガーする。ＰＥ３  １０７３、ＰＥ４  １０７４、及びＰＥ５  １０７５は、入力されたニューロンＢ  １０４２からのアクティベーションａＢ  １０６２との各局所ニューロン重みの各局所乗算及び累積を実行して、各局所部分和を生成する。ニューロンＣ  １０４３からの非ゼロアクティベーションａＣ  １０６３は、記憶された重みｗＣＤ  １０８６、ｗＣＥ  １０８７、及びｗＣＦ  １０８８の探索をトリガーする。ＰＥ６  １０７６、ＰＥ７  １０７７、及びＰＥ８  １０７８は、入力されたニューロンＣ  １０４３からのアクティベーションａＣ  １０６３との各局所ニューロン重みの各局所乗算及び累積を実行して、各局所部分和を生成する。ＰＥ０  １０７０、ＰＥ３  １０７３、及びＰＥ６  １０７６の局所部分和は累積されて、最終和を生成し、アクティベーション関数が実行され、非ゼロの場合、アクティベーションａＤ  １０６４は次の層にブロードキャストされる。ＰＥ１  １０７１、ＰＥ４  １０７４、及びＰＥ７  １０７７の局所部分和は累積されて、最終和を生成し、アクティベーション関数が実行され、非ゼロの場合、アクティベーションａＥ  １０６５は次の層にブロードキャストされる。ＰＥ２  １０７２、ＰＥ５  １０７５、及びＰＥ８  １０７８の局所部分和は累積されて、最終和を生成し、アクティベーション関数が実行され、非ゼロの場合、アクティベーションａＦ  １０６６は次の層にブロードキャストされる。
【０２５５】
図１０Ｂでは、アクティベーションａＡ  １０６１、ａＢ  １０６２、ａＣ  １０６３、ａＤ  １０６４、ａＥ  １０６５、ａＦ  １０６６は、各バスセグメントを介して通信されるものとして表され、ニューロンＤ  １０４４、ニューロンＥ  １０４５、及びニューロンＦ  １０４６に対応する部分和累積及びアクティベーション関数は、ＰＳＡ  １０９０、ＰＳＡ  １０９１、及びＰＳＡ  １０９２によりそれぞれ実行されるものとして表される。幾つかの実施形態及び／又は使用状況では、図１０Ｂのバスセグメント及びＰＳＡ  １０９０、ＰＳＡ  １０９１、及びＰＳＡ  １０９２は抽象であり、部分和累積及びアクティベーション関数は、例えば、配置サーバ１５０で実行されるニューロンからＰＥへのマッピングＳＷ２１２によっても決定される様々な処理要素により実行され、部分和及びアクティベーションは、仮想チャネルを経由し処理要素間の結合を介してウェーブレットとして通信される（例えば、図１３Ａ〜図１６及び「ウェーブレット」セクション参照）。
【０２５６】
一例の作業負荷マッピング及び例示的なタスク
概念上、ディープ・ラーニング・アクセラレータ４００（図４）は、プログラマブル計算ファブリックである（例えば、図５〜図８及び「処理要素：計算要素及びルータ」セクション参照）。例えば、各ＰＥ４９９要素の計算要素は、タスクの一連の命令を実行することができ（概念上、図２のＰＥ上のタスクＳＷ２６０の命令の実行の全て又は任意の部分に対応する等）、各ＰＥ４９９の各ルータ要素は、ＰＥ間でウェーブレットをルーティングするように構成可能である。プログラマブル計算ファブリックは、様々な様式で作業負荷を計算ファブリックにマッピングできるようにする。以下に記載するのは、計算ファブリックへの作業負荷の一例の高レベルマッピングであり、計算ファブリックにより実施される様々な技法及びメカニズムを図示する。
【０２５７】
作業負荷は、ＳＧＤを介して実施されるディープ・ニューラル・ネットワーク・トレーニングである。ディープ・ニューラル・ネットワークは、ニューロンの複数のレイアを有する。作業負荷は３つのメガフェーズを有する：順方向パス、デルタパス、及びチェインパス。順方向パスは、アクティベーションを順方向に伝播する。デルタパスは、逆方向にデルタを伝搬する。チェインパスは、デルタがデルタパスで生成される際、デルタに基づいて勾配を計算する。３つのメガフェーズは概ね同量の計算を有する。
【０２５８】
図４は、ＰＥへのメガフェーズの一例のマッピングを図示する。各層は、計算ファブリックから連続して（例えば、水平次元で）割り当てられた（別名「配置された」）ＰＥのブロックにより実施される。データ移動は、順方向パス（順方向４０１）中、ファブリックの終わりまで伝搬し、次に、デルタパス（デルタ４０２）及びチェインパス（チェイン４０３）中、逆方向で戻る。順方向パスはデルタパス及びチェインパスによる使用のためにアクティベーションを保存するため、配置はデータ移動を低減するように向けられる。この例では、全てのＰＥは、３つのメガフェーズ間で三方に時間共有され、各メガフェーズは概ね同量の計算を使用する。幾つかの状況では、パスを実行するＰＥの全体チェインは、各層がパイプ段であり（完了におおよそ同量の時間がかかる）、ミニバッチの各アクティベーションがパイプラインを満たすようなパイプラインとして動作する。
【０２５９】
幾つかの実施形態及び／又は使用状況では、複数の層のうちの１つの層にマッピングされた１組のＰＥ内で、１つの層の重みは、１つのニューロンが複数のＰＥにマッピングされるようにＰＥにわたり分散する。複数のＰＥにわたり１つのニューロンを分割することは、幾つかの状況では、負荷平衡利点を提供し、通信分割利点を提供する（例えば、図１０Ａ及び図１０Ｂ及び「高レベルデータフロー」セクション並びに図１７〜図２０及び「ニューロンスメアリング」セクション参照）。
【０２６０】
概念的に、処理は以下のように進む（図４の順方向４０１参照）。アクティベーションは、水平軸に沿って層にブロードキャストされる。アクティベーションは、ＰＥにより受信され、ＰＥにローカルに記憶された、関連付けられた重み（ＰＥにマッピングされたニューロンに対応する）の検索をトリガーする。非ゼロアクティベーションのみがブロードキャストされ、したがって、ゼロアクティベーションに対して計算が無駄にならない（アクティベーションスパース収集の一例）。各ＰＥは、入力アクティベーションの局所乗算及び累算を実行し、全てのニューロン重みは局所部分和を生成する。各ニューロンの重みは複数のＰＥに分散するため、部分和は、ニューロン重み分布に従って垂直方向にＰＥにわたり累積される。部分和が累積され、最終和を生成した後、アクティベーション関数が実行され、全ての新しい非ゼロアクティベーションは次の層にブロードキャストされる。
【０２６１】
デルタパス（図４のデルタ４０２参照）及びチェインパス（図４のチェイン４０３参照）は、順方向パスのデータフローと同様のデータフローを辿る。幾つかの実施形態及び／又は使用状況では、デルタパス及びチェインパスは、ある層だけオフセットして配置され、それにより、アクティベーションは、逆方向で使用される重みと同じ層に記憶される。アクティベーションは、デルタパス及びチェインパスにおいて、アクティベーションが、追加の通信なしで直接使用されるように、受信層により記憶される。アクティベーションの記憶に加えて、重み転置が実行されて、デルタパスを実施する。重み転置は、幾つかの実施形態及び／又は使用状況では、重みを更新するとき、追加のメモリ容量及び追加の通信を使用して、重みを複製することにより実施される。幾つかの実施形態及び／又は使用状況では、重み転置は、垂直次元でブロードキャストされたデルタを転置することにより実施される。
【０２６２】
図１１は、クローズアウトを介した依存性管理を含む、順方向パス状態機械で使用されるタスク（例えば、図９Ａ〜図９Ｃ及び「タスク開始」及び「タスクのブロック及びブロック解除」セクション参照）の一実施形態を図示する。幾つかの実施形態及び／又は使用状況では、各ＰＥは状態機械のインスタンス化を実施する。幾つかの実施形態及び／又は使用状況では、状態機械の様々な部分は、各ＰＥによって実施される（例えば、図１７〜図２０及び「ニューロンスメアリング」セクション参照）。状態機械には４つのタスクがある：ｆ＿ｒｘａｃｔ：ａｃｃ１１０１、ｆ＿ｒｘａｃｔ：ｃｌｏｓｅ１１０２、ｆ＿ｐｓｕｍ：ｐｒｏｐ１１０３、及びｆ＿ｔｘａｃｔ：ｔｘ１１０４。概念的に、アクティベーションはＰＥからインスタントＰＥの「左」（前の層に対応する）に到着する。例えば、アクティベーション・ブロードキャスト・ワイヤ上の前の層からの入力（非クローズアウト）アクティベーション（前の層からのアクティベーション１１１１）はｆ＿ｒｘａｃｔ：ａｃｃ１１０１をトリガーする。インスタントＰＥは、タスクの命令を実行し、アクティベーションに関連付けられた重みを検索し（例えば、インスタントＰＥにローカルなメモリから）、局所重み乗累算を実行して、部分和を生成する。制御フロー依存性が、ｆ＿ｒｘａｃｔ：ａｃｃ１１０１とｆ＿ｐｓｕｍ：ｐｒｏｐ１１０３との間に存在する（フロー１１１３）。タスクが参照するデータ構造例は、ｗｒｏｗ、ｆｐｓｕｍ、及びｆａｃｔである。
【０２６３】
アクティベーション・ブロードキャスト・ワイヤへの入力アクティベーションクローズアウト（前の層からのクローズアウト１１１２）は、ｆ＿ｒｘａｃｔ：ｃｌｏｓｅ１１０２をトリガーする。クローズアウトは、現在の波面の全てのアクティベーションの終わりを通知する。インスタントＰＥはタスクの命令を実行し、インスタントＰＥの開始リスト内の部分和との部分和累積リングを開始する（Ｐｓｕｍ開始１１１６）。タスクが参照するデータ構造例は、ｆｐｓｕｍ＿ａｃｃ＿ｍｅｍ及びｆｐｓｕｍ＿ａｃｃ＿ｆａｂである。
【０２６４】
入力部分和（Ｐｓｕｍプロップ１１３０）は、ｆ＿ｐｓｕｍ：ｐｒｏｐ１１０３をトリガーする。インスタントＰＥは、タスクの命令を実行し、入力部分和をインスタントＰＥの局所部分和に追加し、次に、結果をリング上の次のホップに転送する（Ｐｓｕｍプロップ１１３１）。インスタントＰＥがリングの終わりである場合、最終和が生成される。幾つかの実施形態及び／又は使用状況では、追加の処理が実行されて、デッドロックを回避する。タスクが参照するデータ構造例は、ｆｐｓｕｍ＿ａｃｃ＿ｍｅｍ、ｆｐｓｕｍ＿ａｃｃ＿ｆａｂ、及びｆ＿ｔｘａｃｔ＿ｗａｋｅである。
【０２６５】
送信する、キューに入ったアクティベーションがある場合、ｆ＿ｔｘａｃｔ：ｔｘ１１０４は、例えば、インスタントＰＥがウェーブレットをそれ自体に送信することを介して自己トリガーされる（ウェイク１１１４）。インスタントＰＥはタスクの命令を実行し、アクティベーションをキューから取り出し、ブロードキャストワイヤ上でアクティベーションを次の層に送信する（次の層へのアクティベーション１１２１）。キュー内にまだアイテムが残っている場合、インスタントＰＥは、例えば、インスタントＰＥがウェーブレットをそれ自体に送信することを介してタスクを再スケジュールする（再スケジュール１１１５）。キューが空の場合、インスタントＰＥはクローズアウトウェーブレットを送信して、波面を閉じる（次の層へのクローズアウト１１２２）。
【０２６６】
アクティベーション（入力及び出力）、部分和（入力及び出力）、並びにクローズアウトウェーブレットは、ウェーブレットとして通信される（例えば、図１３Ａ〜図１６及び「ウェーブレット」セクション参照）。幾つかの実施形態及び／又は使用状況では、ウェーブレットの１若しくはそれ以上は、１若しくはそれ以上のＤＳＤ及び／又はＸＤＳＤにより記述されるように、ファブリックベクトルの１若しくはそれ以上の要素に対応する。
【０２６７】
様々な状態機械のデータ構造は、以下の表に記述されるように、各ＤＳＲに記憶された複数のＤＳＤを介して参照される（例えば、図２１Ａ〜図２４及び「ベクトル及びデータ構造記述子」セクション参照）。
【０２６８】
【表２】
0006860694.tif 000003
【０２６９】
以下の一例の作業負荷マッピングはＳＧＤに関するものである。しかしながら、この技法は、ＲＣＰあり及びなしでＭＢＧＤ及びＣＰＧＤに容易に適用可能である。
【０２７０】
幾つかの実施形態及び／又は使用状況では、図１１の動作の全て又は任意の部分は、図１のＰＥ１２２の要素及び／又はにより実行される動作に対応し、又は概念的に関連する。幾つかの実施形態及び／又は使用状況では、図１１の要素の全て又は任意の部分は、図２のＰＥ上のタスクＳＷ２６０の命令の実行の全て又は任意の部分に概念的に対応する。
【０２７１】
図１２は、アクティベーション累積／クローズアウト及び部分和計算／クローズアウト１２００として、アクティベーション累積及びクローズアウト、その後に続く部分和計算及びクローズアウトに関連付けられたフローの一実施形態の選択された細部を図示する。
【０２７２】
フローは開始される（開始１２０１）。アクティベーションは受信され（アクティベーションを受信１２０２）、例えば、図１１のｆ＿ｒｘａｃｔ：ａｃｃ１１０１により処理されるように、累積される（アクティベーションを累積１２０３）。アクティベーションクローズアウトの受信（アクティベーションクローズアウトを受信１２０４）に応答して、例えば、図１１のｆ＿ｒｘａｃｔ：ｃｌｏｓｅ１１０２により実行され、図１１のＰｓｕｍ開始１１１６により示されるように、ＰＥの「リング」に対する部分和計算が開始される（部分和リングを開始１２０５）。ＰＥの一例のリングは、ＰＥ０  １０７０、ＰＥ３  １０７３、及びＰＥ６  １０７６として図１０Ｂに図示され、対応する部分和累積はＰＳＡ１０９０により図示される。幾つかの実施形態及び／又は使用状況では、アクティベーションクローズアウトを受信１２０４は、アクティベーションの累積を締めくくり、部分和計算の開始に関する順序を強制し、例えば、部分和計算を初期化する前、全てのアクティベーションが受信され累積されることを保証する。（入力）部分和は、インスタントＰＥにより受信され（部分和を受信１２０６）、インスタントＰＥにより計算された部分和に追加され（部分和を計算１２０７）、加算の結果は、リングの次のＰＥに送信される（出力）部分和を形成する（部分和を送信１２０８）。受信、加算、及び送信は、例えば、図１１のｆ＿ｐｓｕｍ：ｐｒｏｐ１１０３により実行され、入力／出力部分和は、これもまた図１１のプロップＰｓｕｍ１１３０及びプロップＰｓｕｍ１１３１によりそれぞれ示される。最終和が、ＰＥのリングへの部分和計算の完了により計算されると、次の層に出力するためのアクティベーションが、例えば、図１１のｆ＿ｔｘａｃｔ：ｔｘ１１０４により、これもまた図１１の次の層へのアクティベーション１１２１で図示されるように、生成され送信される（アクティベーションを送信１２０９）。全てのアクティベーションが送信されると、クローズアウトは、例えば、これもまた図１１のｆ＿ｔｘａｃｔ：ｔｘ１１０４により、これもまた図１１の次の層へのクローズアウト１１２２により図示されるように、送信される（クローズアウトを送信１２１０）。次に、フローは完了する（終わり１２１１）。幾つかの状況及び／又は使用状況では、クローズアウトを送信１２１０は、クローズアウトの送信を締めくくり、更なる処理に関するアクティベーション送信の順序を強制し、例えば、更なる処理の前に全てのアクティベーションが送信されることを保証する。
【０２７３】
幾つかの実施形態及び／又は使用状況では、クローズアウトは、ニューラルネットワークの他の部分を締めくくり、例えば、デルタを送信する。
【０２７４】
幾つかの実施形態及び／又は使用状況では、アクティベーション累積／クローズアウト及び部分和計算／クローズアウト１２００の動作の全て又は任意の部分は概念的に、図１のＰＥ１２２の要素によって実行される動作及び／又はＰＥ１２２の要素に対応又は関連する。幾つかの実施形態及び／又は使用状況では、アクティベーション累積／クローズアウト及び部分和計算／クローズアウト１２００の要素の全て又は任意の部分は概念的に、ＰＥ上のタスクＳＷ２６０の命令の実行の全て又は任意の部分に対応する。幾つかの実施形態及び／又は使用状況では、クローズアウト（例えば、動作１２１０に関連付けられる）は制御ウェーブレットの一例である。
【０２７５】
ウェーブレット
図１３Ａは、スパースウェーブレット１３０１としてスパースウェーブレットの一実施形態の選択された細部を図示する。スパースウェーブレット１３０１は、スパース・ウェーブレット・ペイロード１３０２と、カラー１３２４とを有する。スパース・ウェーブレット・ペイロード１３０２は、インデックス１３２１と、スパースデータ１３２２と、制御ビット１３２０とを有する。インデックス１３２１は、下位インデックスビット１３２１．１と、上位インデックスビット１３２１．２とを有する。
【０２７６】
幾つかの実施形態では、スパースデータ１３２２は、１６ビット浮動小数点数又は１６ビット整数のフィールドを有する。様々な状況では、スパースデータ１３２２は様々に、ニューラルネットワークの重み、ニューラルネットワークの入力又は刺激、ニューラルネットワークのアクティベーション、又はニューラルネットワークの部分和を表す。
【０２７７】
幾つかの実施形態では、インデックス１３２１は１６ビットフィールドを有する。幾つかの状況では、インデックス１３２１は整数であり、ニューラルネットワークの特定のニューロンを明示的に示すインデックスである。幾つかの実施形態では、下位インデックスビット１３２１．１は６ビットであり、上位インデックスビット１３２１．２は１０ビットである。
【０２７８】
幾つかの実施形態では、制御ビット１３２０は１ビットフィールドである。幾つかの状況では、制御ビット１３２０は、スパース・ウェーブレット・ペイロード１３０２が制御活動をトリガーするか、それともデータ活動をトリガーするかを示す。幾つかの状況では、制御活動は、ニューロンの最後のアクティベーションを計算することを含み、データ活動は、最後のアクティベーションではないニューロンのアクティベーションを計算することを含む。幾つかの実施形態及び／又は使用状況では、制御活動は、図１１の前のレイヤからのクローズアウト１１１２及び／又は次のレイヤへのクローズアウト１１２２の任意の１若しくはそれ以上及び図１２のアクティベーションクローズアウトの受信１２０４及び／又はクローズアウト送信１２１０の任意の１若しくはそれ以上等のクローズアウト活動を含む。
【０２７９】
幾つかの実施形態では、カラー１３２４は５ビットフィールドを有する。幾つかの実施形態では、カラーは、カラーに従ったルーティングを介する等の共有物理チャネルを介した仮想チャネルに対応する。幾つかの状況では、カラーは、構成情報を処理要素に送信する又は処理要素にマッピングされるニューロンにニューラルネットワークの入力を送信する等の特定の目的で使用される。
【０２８０】
図１３Ｂは、高密度ウェーブレット１３３１として高密度ウェーブレットの一実施形態の選択された細部を図示する。高密度ウェーブレット１３３１は、高密度ウェーブレットペイロード１３３２と、カラー１３４４とを有する。高密度ウェーブレットペイロード１３３２は、高密度データ１３４３．１と、高密度データ１３４３．２と、制御ビット１３４０とを有する。
【０２８１】
幾つかの実施形態では、制御ビット１３４０は、１ビットフィールドであり、機能的に制御ビット１３２０と同一である。
【０２８２】
幾つかの実施形態では、カラー１３４４は、５ビットフィールドを有し、カラー１３２４と機能的に同一である。
【０２８３】
幾つかの状況では、高密度データ１３４３．１及び高密度データ１３４３．２は、各１６ビット浮動小数点数又は各１６ビット整数のフィールドを有する。様々な状況では、高密度データ１３４３．１及び高密度データ１３４３．２は様々に、ニューラルネットワークの重み、ニューラルネットワークの入力又は刺激、ニューラルネットワークのアクティベーション、又はニューラルネットワークの部分和を表す。幾つかの状況では、高密度データ１３４３．１及び高密度データ１３４３．２は集合的に、３２ビット浮動小数点数を有する（例えば、高密度データ１３４３．１は、３２ビット浮動小数点数の第１の部分を有し、高密度データ１３４３．２は、３２ビット浮動小数点数の第２の部分を有する）。
【０２８４】
様々な実施形態及び／又は使用状況では、スパースウェーブレットの使用対高密度ウェーブレットの使用は様々に、予め決定され、動的に決定され、及び／又は両方である。様々な実施形態及び／又は使用状況では、スパースウェーブレットの使用対高密度ウェーブレットの使用は、ソフトウェアによって決定される。
【０２８５】
図１４は、ウェーブレット作成フロー１４００として、ウェーブレットを作成し送信する一実施形態の選択された細部を図示する。ウェーブレット作成フロー１４００の動作は、様々なエージェントにより実行される。送信ＰＥは、送信ＰＥ１４２０のＣＥで図示されるように、動作１４０３〜１４０９を実行するＣＥを有する。送信ＰＥは、送信ＰＥ１４３０のルータで図示されるように、動作１４１１を実行するルータを更に有する。受信ＰＥは、受信ＰＥ１４４０のルータで図示されるように、動作１４１２を実行するルータを有する。
【０２８６】
ウェーブレットの作成及び送信は、少なくとも１つの送信ＰＥ及び１若しくはそれ以上の受信ＰＥ並びに送信ＰＥ及び受信ＰＥを結合するファブリックを実施するルータを有する任意のＰＥを初期化する（ＰＥ初期化１４０２）ことで開始される（開始１４０１）。各ＰＥは、各ルータ（例えば、図５のルータ５１０）と、各ＣＥ（例えば、図５の計算要素５２０）とを有する。幾つかの状況では、ＰＥを初期化することは、ＰＥのＣＥが計算を実行できるようにし、ＰＥのルータがファブリックを介してウェーブレットを送信、受信、及び／又は転送できるようにする。
【０２８７】
様々な実施形態では、ＤＳＲは、データ要素（例えば、メモリ、ファブリック入力、及び／又はファブリック出力）のロケーション、データ要素の数（例えば、長さ）、データ要素の１若しくはそれ以上のアドレス（例えば、開始アドレス及びメモリ内のストライド）等のオペランドについての情報を有する。ファブリック出力オペランド（例えば、ファブリックを介して送信されたウェーブレット）の場合、ＤＳＲは、ファブリック上のウェーブレットのカラー、制御ビット、及び任意選択でインデックスの値又はロケーションを含む。
【０２８８】
幾つかの実施形態では、送信ＰＥのＣＥはソース（発信元設定１４０３）を構成する。幾つかの状況では、ソースは、発信元オペランドを記述する発信元ＤＳＤである。様々な実施形態では、発信元ＤＳＤは、キャッシュ及びメモリの１つに記憶された１若しくはそれ以上のデータ要素を記述する。他の実施形態では、発信元ＤＳＤは、ファブリックを介して受信される１若しくはそれ以上のデータ要素を記述する（例えば、データ要素は、ファブリックを介して到着したウェーブレットのペイロードである）。幾つかの他の状況では、ソースはソースレジスタ（例えば、ＲＦ８４２の１つ）を含む。更に他の状況では、ソースは、命令で即時指定された、を含む。
【０２８９】
ＣＥはまた、宛先オペランドのロケーションを記述する宛先ＤＳＲ内の宛先ＤＳＤを構成する。様々な実施形態では、宛先オペランドのロケーションはファブリックである（宛先（ファブリック）ＤＳＲを設定１４０４）。幾つかの実施形態では、宛先ＤＳＤは、ファブリックを介して送信された１若しくはそれ以上のデータ要素を記述する。様々な実施形態では、発信元ＤＳＤ及び宛先ＤＳＤは、１若しくはそれ以上の命令を介して構成される。
【０２９０】
続けて、ＣＥは、宛先ＤＳＲにおいてＤＳＤによって指定された１若しくはそれ以上の発信元オペランド、演算、宛先オペランドを含む命令（例えば、ＦＭＡＣＨ、ＭＯＶ、ＬＴ１６）をフェッチし復号化する（宛先ＤＳＲを有する命令をフェッチ／復号化１４０５）。幾つかの実施形態では、命令のオペランドタイプフィールドは、オペランドがＤＳＤによって指定されるか否かを指定する。
【０２９１】
ＣＥは、宛先ＤＳＲから宛先ＤＳＤを読み取り、発信元ＤＳＲ内の任意の発信元ＤＳＤを読み取る（ＤＳＲを読み取る１４０６）。ＤＳＤに基づいて、ＣＥは、データ構造のタイプ、データ要素のソース、複数のデータ要素が一緒に読み取られるか否か（例えば、ＳＩＭＤ演算の場合）、及び各オペランドのデータ要素の総数を判断する。幾つかの状況では、ＤＳＲは、発信元０オペランド、発信元１オペランド、及び宛先オペランドの１若しくはそれ以上について読み取られる。幾つかの実施形態及び／又は使用状況では、ＤＳＲは全体的又は部分的に並列に読み取られ、他の実施形態及び／又は使用状況では、ＤＳＲは全体的又は部分的に順次読み取られる。
【０２９２】
送信ＰＥのＣＥは、ソースによって指定される第１のデータ要素を読み出し（例えば、レジスタ又はメモリから）（キュー／メモリから（次の）データ要素を読み出す１４０７）、命令により指定される演算（例えば、乗算）を第１のデータ要素に対して実行する。宛先オペランドが、宛先ＤＳＤによりファブリックタイプとして指定されることに応答して、ＣＥは１若しくはそれ以上のウェーブレットを作成する。演算の１若しくはそれ以上の結果（例えば、データ要素の形態）は、宛先ＤＳＤに基づいてウェーブレットペイロードを形成するのに使用される。ウェーブレットペイロードの制御ビット及びウェーブレットのカラーは、宛先ＤＳＤにより指定される。ウェーブレットペイロード及びカラーは、送信ＣＥのルータに提供される（データ要素をウェーブレットとして出力キューに提供１４０８）。幾つかの実施形態及び／又は使用状況では、１つのデータ要素が、スパースウェーブレットのペイロードの作成に使用される。他の実施形態及び／又は使用状況では、２つのデータ要素が、高密度ウェーブレットのペイロードの作成に使用される。様々な実施形態では、４つのデータ要素が、２つのウェーブレットのペイロードの作成に使用される。幾つかの実施形態では、使用されるデータ要素数は、宛先ＤＳＤにより指定される。
【０２９３】
送信ＰＥのＣＥは、追加のデータ要素が宛先ＤＳＤによって指定されているか否かを判断する（まだデータ要素があるか？１４０９）。追加のデータ要素が宛先ＤＳＤによって指定されている場合、ＣＥは、追加のデータ要素が宛先ＤＳＤによって指定されなくなるまで、キュー／メモリから（次の）発信元データ要素を読み取る動作１４０７、データ要素をウェーブレットとして出力キューに提供する動作１４０８、及びより多くのデータ要素？１４０９を介して追加のウェーブレットを作成する。追加のデータ要素が宛先ＤＳＤによって指定されない場合、フローは終わる（終わり１４１０）。幾つかの実施形態では、動作１４０８を介して作成されたウェーブレットは、宛先ＤＳＲによって指定されるものと同じカラーである。
【０２９４】
送信ＰＥのルータは、ウェーブレットの各カラーに従って、ウェーブレットのカラーに従ってウェーブレットを送信する（ウェーブレットをファブリックに送信１４１１）。幾つかの実施形態及び／又は使用状況では、送信は、受信ＰＥのルータへの直接送信である。幾つかの実施形態及び／又は使用状況では、送信は、例えば、カラーに従ってウェーブレットを転送するように動作する１若しくはそれ以上の介在ＰＥを介した受信ＰＥのルータへの間接的な送信である。受信ＰＥのルータは、カラーに従ってウェーブレットを受信する（ウェーブレットをファブリックから受信１４１２）。
【０２９５】
様々な実施形態では、動作１４１１は、動作１４０７、１４０８、及び１４０９の任意の１若しくはそれ以上に関して非同期で実行される。例えば、複数のウェーブレットは、動作１４０８により生成され、それから、生成されたウェーブレットのいずれかが、動作１４１１で図示されるように、送信される。
【０２９６】
様々な実施形態では、ウェーブレットをファブリックから受信１４１２は、様々な点で、図１５のルータにおいてウェーブレットを受信１５０３に対応する。
【０２９７】
様々な実施形態及び／又は使用状況では、ウェーブレット作成フロー１４００の要素の任意の１若しくはそれ以上の全て又は任意の部分は、ＰＥ、例えば、図４のＰＥ４９９の要素によって実行される動作及び／又はＰＥの要素に概念的に対応し及び／又は概念的に関連する。
【０２９８】
様々な実施形態及び／又は使用状況では、ウェーブレット作成フロー１４００の要素の任意の１若しくはそれ以上（例えば、動作１４０３〜１４０９の任意の１若しくはそれ以上）の全て又は任意の部分は、ＰＥのＣＥの全て又は任意の部分、図５の計算要素５２０、及び／又は図８のＣＥ８００等の計算要素の要素によって実行される動作及び／又は計算要素の要素に概念的に対応し及び／又は概念的に関連する。一例として、宛先ＤＳＲ（ＤＳＲ宛先（ファブリック）ＤＳＲ設定１４０４に関連付けられる）は、ＤＳＲ８４６の１つである。幾つかの状況では、発信元ＤＳＲ（発信元設定１４０３に関連付けられる）は、ＤＳＲ８４６の１つであり、他の状況では、発信元レジスタ（発信元設定１４０３に関連付けられる）はＲＦ８４２の１つである。
【０２９９】
別の例として、送信ＰＥのＣＥとしてのＣＥ８００は、メモリ８５４からの情報を発信元ＤＳＲ（例えば、ＤＳＲ８４６の１つ）にコピーするＤＳＲロード命令に応答して動作１４０３を実行する。様々な実施形態では、発信元ＤＳＲは、メモリ８５４、Ｄストア８４８、及びＲＦ８４２の１つとしてデータ要素のロケーションを指定する。幾つかの状況では、発信元ＤＳＲは、メモリ８５４内の第１のデータ要素のアドレス（例えば、アドレス０ｘ０００８）、データ要素の数（例えば、９つのデータ要素）、及び続くデータ要素間のストライド（例えば、１２バイト）を指定する。別の例として、ＣＥ８００は、データをＲＦ８４２のレジスタに書き込むことによって動作１４０３を実行する。
【０３００】
別の例として、送信ＰＥのＣＥとしてのＣＥ８００は、メモリ８５４からの情報を宛先ＤＳＲ（例えば、ＤＳＲ８４６の１つ）にコピーするＤＳＲロード命令に応答して、動作１４０４を実行する。様々な実施形態では、宛先ＤＳＲは、１若しくはそれ以上のウェーブレットへの１若しくはそれ以上のデータ要素の変換を指定し、ファブリック結合イグレスポート（例えば、北５１３）を介してルータ５１０により送信した。宛先ＤＳＲは、ウェーブレットのカラー、ウェーブレットの制御ビット、データ要素の数（例えば、長さ）、及びウェーブレットのインデックスについての情報を指定する。幾つかの状況では、宛先ＤＳＲはインデックスの値を指定し、他の状況では、宛先ＤＳＲはインデックスの値のロケーション（例えば、ＲＦ８４２のレジスタ内の）を指定する。
【０３０１】
別の例として、送信ＰＥのＣＥとしてのＣＥ８００は、宛先オペランドとして宛先ＤＳＲを指定する命令のフェッチ及び復号化（動作１４０５）に応答して、動作１４０６、１４０７、１４０８及び１４０９を実行する。幾つかの実施形態及び／又は使用状況では、Ｄ配列８４４は発信元ＤＳＲを読み取り、例えば、メモリ８５４又はＤストア８４８から、各発信元ＤＳＲによって指定された１つ、２つ又は４つのデータ要素にアクセスし、それにより、動作１４０７を実行する。様々な実施形態では、メモリ８５４及び／又はＤストア８４８は、データ要素をデータパス８５２に提供する。データパス８５２は、演算をデータ要素に対して実行する（例えば、発信元０データ要素を発信元１データ要素に加算する）。宛先ＤＳＤに従って、データパス８５２は、演算の結果データをウェーブレットに変換し、宛先ＤＳＤのカラーにより指定される出力キュー８５９の１つにウェーブレットを書き込み、それにより、動作１４０８を実行する。幾つかの実施形態では、送信ＰＥのＣＥ８００は、宛先ＤＳＤにおいて指定されたデータ要素の数（例えば、長さ）を、動作１４０８を介して送信されたデータ要素の数（例えば、カウンタによって追跡される）と比較することにより、動作１４０９を実行する。
【０３０２】
別の例として、送信ＰＥのＣＥとしてのＣＥ８００は動作１４０８を実行する。ＣＥは、宛先ＤＳＤに従って１つ又は２つのデータ要素をウェーブレットペイロードに変換する。幾つかの実施形態及び／又は使用状況では、ＣＥは、１つのデータ要素を、図１３Ａのスパースウェーブレット１３０１に従ってフォーマットされたウェーブレットペイロードに変換する。１つのデータ要素はスパースデータ１３２２のインスタンスに変換され、宛先ＤＳＤによって指定されるインデックス値は、インデックス１３２１のインスタンスに変換され、宛先ＤＳＤからの制御ビットは、制御ビット１３２０のインスタンスに変換され、それにより、スパース・ウェーブレット・ペイロード１３０２のインスタンスを形成する。
【０３０３】
別の例として、送信ＰＥのＣＥとしてのＣＥ８００は、２つのデータ要素を、図１３Ｂの高密度ウェーブレット１３３１に従ってフォーマットされたウェーブレットペイロードに変換する。第１のデータ要素は、高密度データ１３４３．１のインスタンスに変換され、第２のデータ要素は、高密度データ１３４３．２のインスタンスに変換される。宛先ＤＳＤからの制御ビットは、制御ビット１３４０のインスタンスに変換され、それにより、高密度ウェーブレットペイロード１３３２のインスタンスを形成する。
【０３０４】
幾つかの実施形態では、ＣＥはウェーブレットをルータに非同期で（例えば、図７Ｃの動作７６０に従って）提供する。
【０３０５】
様々な実施形態及び／又は使用状況では、ウェーブレット作成フロー１４００の要素の任意の１若しくはそれ以上（例えば、動作１４１１及び１４１２の任意に１若しくはそれ以上）の全て又は任意の部分は、ＰＥのルータ、例えば、図５のルータ５１０及び／又は図６のルータ６００、図７Ｃの動作７６０及び図７Ｂの動作７４７の全て又は任意の部分等のルータの要素により実行される動作及び／又はルータの要素に概念的に対応及び／又は概念的に関連する。
【０３０６】
一例として、ウェーブレットをファブリックに送信１４１１は、図７Ｃの動作７６０に従って送信ＰＥのルータ１４３０としてルータ６００により実行される。別の例として、ファブリックからウェーブレットを受信１４１２は、図７Ｂの動作７４７に従って受信ＰＥのルータ１４４０としてルータ６００により実行される。
【０３０７】
幾つかの実施形態及び／又は使用状況では、ウェーブレット作成フロー１４００の要素の全て又は任意の部分は概念的に、図２のＰＥ上のタスクＳＷ２６０の命令の実行の全て又は任意の部分に対応する。
【０３０８】
図１５は、ウェーブレット受信フロー１５００としてウェーブレットを受信する一実施形態の選択された細部を図示する。ウェーブレット受信フロー１５００の動作は、様々なエージェントによって実行される。受信ＰＥは、受信ＰＥ１５２０のルータで図示されるように、動作１５０３〜１５０６を実行するルータを有する。受信ＰＥは、受信ＰＥ１５３０のＣＥで図示されるように、動作１５０７を実行するＣＥを更に有する。
【０３０９】
ウェーブレットの受信は、少なくとも１つの送信ＰＥ及び１若しくはそれ以上の受信ＰＥ及び送信ＰＥ及び受信ＰＥを結合するファブリックを実施するルータを有する任意のＰＥを初期化する（ＰＥ初期化１５０２）ことで開始される（開始１５０１）。各ＰＥは、各ルータ（例えば、図５のルータ５１０）と、各ＣＥ（例えば、図５の計算要素５２０）とを有する。幾つかの状況では、ＰＥを初期化することは、ＰＥのＣＥが計算を実行できるようにし、ＰＥのルータがファブリックを介してウェーブレットを送信、受信、及び／又は転送できるようにする。
【０３１０】
以下の説明は、１つの受信ＰＥがあると仮定する。使用状況では、複数の受信ＰＥがある場合、各受信ＰＥの各ルータ及びＣＥが、図１５による処理を実行する。
【０３１１】
受信ＰＥのルータは、送信ＰＥによって送信されたように、ファブリックの「カラー上」のウェーブレット（例えば、ウェーブレットはカラーを有する）を受信する（ルータにおいてウェーブレットを受信１５０３）。ルータは、例えば、構成レジスタを読み取ることにより、カラーに基づいてウェーブレットの宛先をチェックする。ウェーブレットの宛先が他のＰＥ（他のＰＥへ？１５０４）を含む場合、ルータはウェーブレットを宛先ＰＥに送信する。ルータは、ウェーブレットをルータの出力に送信し（ウェーブレットを出力に送信１５０５）、ウェーブレットは出力からファブリックを介して宛先ＰＥに送信される。ウェーブレットの宛先が他のＰＥを含まない場合、送信は省略される。
【０３１２】
ウェーブレットの宛先がローカルＣＥを含まない（ローカルＣＥへ？１５０６）場合、更なる動作は行われない（終わり１５１０）。ウェーブレットの宛先の１つがローカルＣＥである場合、ルータは、オフランプを介してウェーブレットをローカルＣＥに提供し、ウェーブレットは、ウェーブレットが受信されたカラーに関連付けられたピッカーキューに書き込まれ（ウェーブレットをピッカーキーに書き込む１５０７）、それにより、ウェーブレットを受信する（終わり１５１０）。
【０３１３】
様々な実施形態及び／又は使用状況では、ウェーブレット受信フロー１５００の要素（例えば、動作１５０３〜１５０６の任意の１若しくはそれ以上）の任意の１若しくはそれ以上の全て又は任意の部分は、ＰＥのルータ、例えば、図５のルータ５１０及び／又は図６のルータ６００の全て又は任意の部分等のルータの要素により実行される動作及び／又はルータの要素に概念的に対応及び／又は概念的に関連する。
【０３１４】
一例として、ルータにおいてウェーブレットを受信１５０３は、ウェーブレットがデータイン６１０の１つで受信された場合、受信ＰＥ１５２０のルータとしてルータ６００により実行される。続けて、他のＰＥへ？１５０４及びローカルＣＥへ？１５０６が、例えば、宛先６６１を読み取ることにより、ウェーブレットのカラーを使用してウェーブレットの宛先を特定して、ルータ６００によって実行される。各入力カラーで、宛先６６１は出力宛先、例えば、データアウト６２０の１若しくはそれ以上を示す。宛先６６１により、出力が他のＰＥ（例えば、スキップＸ＋６２１、スキップＸ−６２２、Ｘ＋６２３、Ｘ−６２４、Ｙ＋６２５、及びＹ−６２６の１つを介して）を含むことが示される場合、ウェーブレットは、スケジュール済みルータ６５４により他のＰＥに送信される。宛先６６１により、出力がＰＥのＣＥを含む（例えば、オフランプ６２７）ことが示される場合、ウェーブレットは、スケジュール済みルータ６５４によりＣＥに送信される。ウェーブレットは、動作１５０５が、データアウト６２０に送信されるようにウェーブレットをスケジュールする（例えば、スケジュール済みルータ６５４により）ことによって実行される。
【０３１５】
様々な実施形態及び／又は使用状況では、ウェーブレット受信フロー１５００の要素の任意の１若しくはそれ以上（例えば、動作１５０７）の全て又は任意の部分は、ＰＥのＣＥ、例えば、図５の計算要素５２０及び／又は図８のＣＥ８００の全て又は任意の部分等の計算要素により実行される動作及び／又は計算要素に概念的に対応及び／又は概念的に関連する。一例として、ウェーブレットをピッカーキューに書き込む１５０７は、オフランプ８２０を介してウェーブレットをＣＥ８００に送信し、ウェーブレットを入力キュー８９７の１つに書き込むことによって実行される。幾つかの実施形態では、動作１５０７は更に、入力キュー８９７の１つに対応するアクティブビット（アクティブビット８９８の）を設定することを含む。
【０３１６】
幾つかの実施形態及び／又は使用状況では、ウェーブレットは、ウェーブレットがローカルＣＥに向けられているとのいかなる特定の判断もなく、ルータにより受信され、キューに配置され、ルータ出力ポートにルーティングされる。代わりに、ローカルＣＥを宛先としたウェーブレットは、オフランプにルーティングされ、次に、ピッカーキューに書き込まれる。ローカルＣＥを宛先としていないウェーブレットは、オフランプルータ出力以外にルーティングされる。
【０３１７】
図１６は、ウェーブレット消費フロー１６００としてウェーブレットを消費する一実施形態の選択された細部を図示する。ウェーブレット消費フロー１６００の動作は、ＰＥのＣＥによって実行される。
【０３１８】
ウェーブレットの消費は、ピッカーが処理するウェーブレットをキューから選択する（ピッカーが処理するウェーブレットを選択１６０２）ことにより開始され（開始１６０１）、次に、ＣＥはウェーブレットを処理する。ＣＥは、ウェーブレットに関連付けられた命令をフェッチし実行し（命令をフェッチし実行１６０３）、それにより、ウェーブレットを消費する（終わり１６０４）。幾つかの実施形態及び／又は使用状況では、ウェーブレットに関連付けられた命令のフェッチ及び実行は、終了命令のフェッチ及び実行で終わる。
【０３１９】
幾つかの実施形態では、ピッカーが処理するウェーブレットを選択する１６０２は、図８のピッカー８３０により実行される。様々な状況では、ピッカー８３０は、ラウンドロビン又は最後からピック等のスケジューリングポリシーに従って、使用可能な入力キュー８９７の１つを選択する（例えば、ブロックビット８９９及びアクティブビット８９８が特定の値である）。幾つかの実施形態では、ウェーブレット消費フロー１６００の部分は、図９Ａのタスク初期化に向けてのウェーブレットの処理９００の部分に対応する。一例として、動作１６０２は動作９０２に対応する。別の例として、動作１６０３は動作９０３、９０４、９１０、９０５、及び９０６に対応する。
【０３２０】
幾つかの他の状況では、ウェーブレットは、ＣＥで実行中の命令（例えば、ＦＭＡＣＨ）によりオペランドとしてアクセスされ、ウェーブレットは、例えば、図２３に図示されるように、命令の実行中、ＣＥにより消費される。
【０３２１】
ニューロンスメアリング
図１７は、ニューラルネットワーク１７００としてニューラルネットワークの一実施形態の選択された細部を示す。ネットワーク１７００は、３つの部分：入力レイヤ１７１０と、内部レイヤ１７２０と、出力レイヤ１７４０とを有する。各レイヤは複数のニューロンを有する。入力レイヤ１７１０は、ニューロンＮ１１  １７１１、Ｎ１２  １７１２、及びＮ１３  １７１３を有する。内部レイヤ１７２０は、ニューロンＮ２１  １７２１、Ｎ２２  １７２２、Ｎ２３  １７２３、及びＮ２４  １７２４の第１のレイヤを有し、それに続けてニューロンＮ３１  １７３１、Ｎ３２  １７３２、及びＮ３３  １７３３の第２のレイヤを有する。出力レイヤ１７４０はニューロンＮ４１  １７４１及びＮ４２  １７４２を有する。
【０３２２】
選択されたニューロン（Ｎ２１  １７２１、Ｎ２２  １７２２、Ｎ２３  １７２３、及びＮ２４  １７２４並びにＮ３１  １７３１及びＮ３２  １７３２）及び選択されたニューロン間の通信（１７９１、１７９２、及び１７９３）は、図中、強調表示されている。選択されたニューロン及びパスウェイについて以下により詳細に考察する。
【０３２３】
図１８Ａは、ニューロンへの処理要素の割り振りの第１の実施形態の選択された細部を図示する。ニューロンへの処理要素の割り振りは、処理要素へのニューロンの配置又は代替的にはニューロンの配置と呼ばれることがある。図１８Ａの同様に付番された要素は、図１７の同様に付番された要素に対応する図１７のニューロンのサブセット（強調表示されたニューロンＮ２１  １７２１、Ｎ２２  １７２２、Ｎ２３  １７２３、及びＮ２４  １７２４並びにＮ３１  １７３１及びＮ３２  １７３２）への処理要素の第１の割り振りは概念的に示される。図中の垂直距離は、５つの処理要素ＰＥ０  １８２０、ＰＥ１  １８２１、ＰＥ２  １８２２、ＰＥ３  １８２３、ＰＥ４  １８２４、及びＰＥ５  １８２５のそれぞれの計算リソースの相対的使用を示す。
【０３２４】
ニューロンＮ２１  １７２１、Ｎ２２  １７２２、Ｎ２３  １７２３、及びＮ２４  １７２４のそれぞれは、概ね同量の計算リソース、例えば、Ｍ個の演算、記憶容量Ｋ、及びストレージへの及びストレージからの帯域幅Ｊを表す。ニューロンＮ３１  １７３１及びＮ３２  １７３２のそれぞれは、概ね同量の計算リソース、例えば、Ｍ／２個の演算、ストレージＫ／２、及び帯域幅Ｊ／２を表す。したがって、Ｎ３１  １７３１及びＮ３２  １７３２のそれぞれは、Ｎ２１  １７２１、Ｎ２２  １７２２、Ｎ２３  １７２３、及びＮ２４  １７２４のそれぞれの計算リソースの概ね半分を表す。様々な実施形態では、計算リソースの例には、計算演算、記憶容量、ストレージからの読み取り帯域幅、ストレージへの書き込み帯域幅、他のニューロンからの入力接続、及び他のニューロンへの出力接続がある。
【０３２５】
図示の実施形態では、ニューロン処理は、上記ニューロンのそれぞれがＰＥ全体に割り振られるように割り振られる。より具体的には、Ｎ２１  １７２１はＰＥ０  １８２０に割り振られ、Ｎ２２  １７２２はＰＥ１  １８２１に割り振られ、Ｎ２３  １７２３はＰＥ２  １８２２に割り振られ、Ｎ２４  １７２４はＰＥ３  １８２３に割り振られ、Ｎ３１  １７３１はＰＥ４  １８２４に割り振られ、Ｎ３２  １７３２はＰＥ５  １８２５に割り振られる。したがって、６つの処理要素のうちの４つは完全にサブスクライブされ（ＰＥ０  １８２０、ＰＥ１  １８２１、ＰＥ２  １８２２、及びＰＥ３  １８２３）、一方、６つの処理要素のうちの２つ（ＰＥ４  １８２４及びＰＥ５  １８２５）は半分しかサブスクライブされない。
【０３２６】
図１８Ｂは、ニューロンへの処理要素の割り振りの第２の実施形態の選択された細部を図示する。図１８Ｂの同様に付番された要素は、図１７及び図１８Ａの同様に付番された要素に対応する。図１７のニューロンのサブセット（強調表示されたニューロンＮ２１  １７２１、Ｎ２２  １７２２、Ｎ２３  １７２３、及びＮ２４  １７２４並びにＮ３１  １７３１及びＮ３２  １７３２）への処理要素の第２の割り振りは、概念的に示される。図１８Ａと同様に、図中の垂直距離は、５つの処理要素ＰＥ０  １８２０、ＰＥ１  １８２１、ＰＥ２  １８２２、ＰＥ３  １８２３、ＰＥ４  １８２４、及びＰＥ５  １８２５のそれぞれの計算リソースの相対的使用を示す。また図１８Ａと同様に、Ｎ３１  １７３１及びＮ３２  １７３２のそれぞれは、Ｎ２１  １７２１、Ｎ２２  １７２２、Ｎ２３  １７２３、及びＮ２４  １７２４のそれぞれの計算リソースの概ね半分を表す。
【０３２７】
図示の実施形態では、ニューロン処理は、各ニューロンの処理が処理要素にわたり「染め」られる（ｓｍｅａｒｉｎｇ）ように割り振られる。概念的には、ニューロンは、処理要素への割り振りに適した部分に「分割」される。図示されるように、ニューロンは分割され、処理要素は、６つの処理要素のうちの４つが等しく（完全に）サブスクライブされ（ＰＥ０  １８２０、ＰＥ１  １８２１、ＰＥ２  １８２２、ＰＥ３  １８２３）、一方、６つの処理要素のうちの２つが完全にはサブスクライブされず、したがって、他の使用に利用可能である（ＰＥ４  １８２４及びＰＥ５  １８２５）ように割り振られる。幾つかの実施形態及び／又は使用状況では、サブスクライブされない処理要素は使用されないままであり、能動電力及び／又は静的電力を殆ど又は全く消費しない（例えば、クロックゲーティング及び節電の１若しくはそれ以上を介して）。より具体的には、Ｎ２１  １７２１は２つの半分で（１／２  Ｎ２１  １７２１．１及び１／２  Ｎ２１  １７２１．２）２つの各処理要素（ＰＥ０  １８２０及びＰＥ２  １８２２）に割り振られる。同様に、Ｎ２２  １７２２は２つの半分で（１／２  Ｎ２２  １７２２．１及び１／２  Ｎ２２  １７２２．２）２つの各処理要素（ＰＥ０  １８２０及びＰＥ２  １８２２）に割り振られる。Ｎ２３  １７２３は２つの半分で（１／２  Ｎ２３  １７２３．１及び１／２  Ｎ２３  １７２３．２）２つの各処理要素（ＰＥ１  １８２１及びＰＥ３  １８２３）に割り振られ、Ｎ２４  １７２４は２つの半分で（１／２  Ｎ２４  １７２４．１及び１／２  Ｎ２４  １７２４．２）２つの各処理要素（ＰＥ１  １８２１及びＰＥ３  １８２３）に割り振られる。Ｎ３１  １７３１は、４つの１／４で（１／４  Ｎ３１  １７３１．１、１／４  Ｎ３１  １７３１．２、１／４  Ｎ３１  １７３１．３、及び１／４  Ｎ３１  １７３１．４）４つの各処理要素（ＰＥ０  １８２０、ＰＥ１  １８２１、ＰＥ２  １８２２、及びＰＥ３  １８２３）に割り振られる。同様に、Ｎ３２  １７３２は、４つの１／４で（１／４  Ｎ３２  １７３２．１、１／４  Ｎ３２  １７３２．２、１／４  Ｎ３２  １７３２．３、及び１／４  Ｎ３２  １７３２．４）４つの各処理要素（ＰＥ０  １８２０、ＰＥ１  １８２１、ＰＥ２  １８２２、及びＰＥ３  １８２３）に割り振られる。様々な実施形態では、ニューロンに関連付けられた１若しくはそれ以上の計算リソースに基づいて、ニューロンは分割され、処理要素は割り振られる。幾つかの実施形態では、処理要素で利用可能なハードウェアリソース（例えば、幾つかのニューロンは、ＰＲＮＧ等の特定のハードウェアリソースを必要とする）に基づいて、ニューロンは分割され、処理要素は割り振られる。
【０３２８】
図１９は、複数の処理要素にわたりニューロンをスメアリングする一実施形態の選択された細部を図示する。分割により、分割ニューロンの部分が生成され、分割ニューロンの部分は次に、処理要素にわたりスメアリングされる。図１９の同様に付番された要素は、図１７、図１８Ａ、及び図１８Ｂの同様に付番された要素に対応する。図１８Ｂに図示されるように、Ｎ２１  １７２１は、ＰＥ０  １８２０及びＰＥ２  １８２２によってそれぞれ実施される２つの部分１／２  Ｎ２１  １７２１．１及び１／２  Ｎ２１  １７２１．２に分割される。
【０３２９】
概念的に、Ｎ２１  １７２１は、ローカル計算及びローカル記憶並びに入力及び出力を有すると考えられる。Ｎ２１  １７２１の各要素はそれぞれ分割される。Ｎ２１のローカル計算は、１／２ローカル計算１９３０．１及び１／２ローカル計算１９３０．２に分割される。Ｎ２１のローカル記憶は、１／２ローカル記憶１９４０．１及び１／２ローカル記憶１９４０．２に分割される。Ｎ２１の入力は、第１の半分ｉｎ０  １９１０、ｉｎ１  １９１１、及びｉｎ２  １９１２並びに第２の半分ｉｎ３  １９１３、ｉｎ４  １９１４、及びｉｎ５  １９１５に分割される。Ｎ２１の出力は、第１の半分ｏｕｔ０  １９２０、ｏｕｔ１  １９２１、及びｏｕｔ２  １９２２並びに第２の半分ｏｕｔ３  １９２３、ｏｕｔ４  １９２４、及びｏｕｔ５  １９２５に分割される。
【０３３０】
１／２ローカル計算１９３０．１、１／２ローカル記憶１９４０．１、ｉｎ０  １９１０、ｉｎ１  １９１１、ｉｎ２  １９１２、ｏｕｔ０  １９２０、ｏｕｔ１  １９２１、及びｏｕｔ２  １９２２は、ＰＥ１８２０により実施される。１／２ローカル計算１９３０．２、１／２ローカル記憶１９４０．２、ｉｎ３  １９１３、ｉｎ４  １９１４、及びｉｎ５  １９１５、ｏｕｔ３  １９２３、ｏｕｔ４  １９２４、及びｏｕｔ５  １９２５は、ＰＥ２  １８２２により実施される。
【０３３１】
幾つかの実施形態及び／又は使用状況では、２つ以上の処理要素にわたるニューロンスメアリングは、スメアリングされたニューロンの部分からの部分結果を結合して、ニューロン全体（元のスメアリングされていない）の結果に対応する結果にすることを含む。結合は、例えば、少なくとも部分的に、普通ならニューロン全体により実行／使用されない追加の計算、追加の記憶、及び／又は追加の通信により実施される。追加の計算１９５０．１及び追加の記憶１９６０．１は、１／２  Ｎ２１  １７２１．１の追加の計算及び追加の記憶を表し、ＰＥ０  １８２０により実施される。追加の計算１９５０．２及び追加の記憶１９６０．２は、１／２  Ｎ２１  １７２１．２の追加の計算及び追加の記憶を表し、ＰＥ２  １８２２により実施される。
【０３３２】
追加の通信１９７０は、１／２  Ｎ２１  １７２１．１と１／２  Ｎ２１  １７２１．２との間の追加の通信を表し、ＰＥ０  １８２０とＰＥ２  １８２２との間のファブリック接続により実施される。幾つかの実施形態及び／又は使用状況では、追加の通信１９７０の全て又は任意の部分は、１つの処理要素が全体的にＮ２１  １７２１実施される場合、１つの処理要素の内部で行われる通信を表す。
【０３３３】
図２０は、分割されたニューロンの部分間の通信の一実施形態の選択された細部を図示する。図２０の同様に付番された要素は、図１７、図１８Ａ、図１８Ｂ、及び図１９の同様に付番された要素に対応する。ニューロン部分へのＰＥ０  １８２０、ＰＥ１  １８２１、ＰＥ２  １８２２、及びＰＥ３  １８２３の割り振りは、図１８Ｂによって図示される。明確にするために、ＰＥ０  １８２０及びＰＥ１  １８２１に固有の割り振りのみが図示される。
【０３３４】
ウェーハ部分２０００は、ＰＥ０  １８２０、ＰＥ１  １８２１、ＰＥ２  １８２２、及びＰＥ３  １８２３を有する。ウェーハ部分２０００のＰＥ間の結合は、ＰＥ  １８２０及びＰＥ１  １８２１を結合する２０４０（隣接ＰＥ間の結合）、ＰＥ１  １８２１及びＰＥ３  １８２３の２０４１結合、ＰＥ３  １８２３及びＰＥ２  １８２２の２０４３結合、及びＰＥ２  １８２２及びＰＥ０  １８２０の２０４４結合として図示される。ウェーハ部分２０００に隣接するＰＥへの結合は、（隣接するＰＥ間の結合の部分）２０５０、２０５１、２０５２、２０５３、２０５４、２０５５、２０５６、及び２０５７として図示される。隣接するＰＥへの結合は、幾つかの実施形態及び／又は使用状況では、結合の全て又は任意の部分が、ウェーハ部分２０００内に全体的にではなく、ウェーハ部分２０００に隣接するウェーハ部分に含まれるため、「部分」である。様々な実施形態及び／又は使用状況では、少なくとも部分的に本明細書の他の箇所に更に記載されるように、結合を介した処理要素間の通信は、例えば、図１の配置サーバ１５０で実行される図２のニューロンからＰＥへのマッピングＳＷ２１２により決定されるウェーブレットの指定されたカラーに従って、処理要素内のルータにより実施される論理結合の一種である仮想チャネルを介する。ウェーブレットが一種のパケット（ネットワークパケット）であり、「ファブリックパケット」が、ファブリック転送可能な（物理ファブリック結合を介した物理転送が可能であり、物理転送と互換性を有する）パケットを指し、「ファブリックベクトル」がファブリック転送可能なベクトルデータを指し、本明細書におけるニューロンスメアリングの概念（これに限定されるものではないが、仮想チャネルを介した通信を含む）が、パケット、ファブリックパケット、又はファブリックベクトルを使用した通信、計算、又は記憶に関して説明される実施形態に適用されることが理解される。
【０３３５】
第１の例として、通信部分１７９１．１は概念的に、例えば、入力レイヤから内部レイヤへの（図１７の）Ｎ１１  １７１１とＮ２１  １７２１との間の通信１７９１の一部を、各処理要素内の分割ニューロンの部分と共に表す。より具体的には、Ｎ２１  １７２１が２つの部分（１／２  Ｎ２１  １７２１．１及び１／２  Ｎ２１  １７２１．２：図１８Ｂ参照）に分割されることを想起する。したがって、通信１７９１は２つの部分に分割される。通信部分１７９１．１は、１／２  Ｎ２１  １７２１．１に関する部分のものが特に図示されている。通信部分１７９１．１は、ウェーハ部分２０００に隣接するＰＥ間の（隣接するＰＥ間の結合の部分）２０５７を介してＰＥ０  １８２０（１／２  Ｎ２１  １７２１．１に割り振られる）に輸送される。幾つかの実施形態及び／又は使用状況では、通信１７９１は２つの部分：通信部分１７９１．１（図示される）及び通信部分１７９１．２（図示せず）に分割される。幾つかの実施形態及び／又は使用状況では、通信部分１７９１．１及び通信部分１７９１．２の輸送は、同じ仮想チャネルを介する。幾つかの実施形態及び／又は使用状況では、通信部分１７９１．１及び通信部分１７９１．２の輸送は、それぞれ独自の仮想チャネルを介する。
【０３３６】
第２の例として、通信部分１７９２．１は概念的に、例えば、第１の内部レイヤから第２の内部レイヤへの（図１７の）Ｎ２１  １７２１とＮ３１  １７３１との間の通信１７９２の一部を、各処理要素内の分割ニューロンの部分と共に表す。より具体的には、Ｎ２１  １７２１が２つの部分（１／２  Ｎ２１  １７２１．１及び１／２  Ｎ２１  １７２１．２：図１８Ｂ参照）に分割されることを想起する。さらに、Ｎ３１  １７３１が４つの部分（１／４  Ｎ３１  １７３１．１、１／４  Ｎ３１  １７３１．２、１／４  Ｎ３１  １７３１．３、及び１／４  Ｎ３１  １７３１．４：図１８Ｂ参照）に分割されることを想起する。したがって、通信１７９２は部分に分割される。通信部分１７９２．１は、１／２  Ｎ２１  １７２１．１及び１／４  Ｎ３１  １７３１．２に関する部分のものが特に図示されている。通信部分１７９２．１は、ＰＥ０  １８２０（１／２  Ｎ２１  １７２１．１に割り振られる）とＰＥ１  １８２１（１／４  Ｎ３１  １７３１．２に割り振られる）との間で（隣接するＰＥ間の結合）２０４０を介して輸送される。様々な実施形態及び／又は使用状況では、通信部分１７９２．１（図示される）及び例えば、通信１７９２の他の部分（図示せず）の輸送は、同じ仮想チャネル、部分ごとに独自の仮想チャネル、特定のニューロンに関連付けられた部分ごとに独自の仮想チャネル、及び／又は特定の処理要素に関連付けられた部分ごとの仮想チャネルを介する。
【０３３７】
第３の例として、通信部分１７９３．１は概念的に、例えば、第１の内部レイヤから第２の内部レイヤへの（図１７の）Ｎ２３  １７２３とＮ３１  １７３１との間の通信１７９３の一部を、同じ処理要素内の分割ニューロンの部分と共に表す。より具体的には、Ｎ２３  １７２３が２つの部分（１／２  Ｎ２３  １７２３．１及び１／２  Ｎ２３  １７２３．２）：図１８Ｂ参照）に分割されることを想起する。さらに、Ｎ３１  １７３１が４つの部分（１／４  Ｎ３１  １７３１．１、１／４  Ｎ３１  １７３１．２、１／４  Ｎ３１  １７３１．３、及び１／４  Ｎ３１  １７３１．４：図１８Ｂ参照）に分割されることを想起する。したがって、通信１７９３は部分に分割される。通信部分１７９３．１は、１／２  Ｎ２３  １７２３．１及び１／４  Ｎ３１  １７３１．２に関する部分のものが特に図示されている。通信部分１７９３．１は、ＰＥ１  １８２１（１／２  Ｎ２３  １７２３．１及び１／４  Ｎ３１  １７３１．２に割り振られる）内部の１若しくはそれ以上の機構を介して輸送される。例えば、ＰＥ１  １８２１は、内部リソース（ルータ等）を使用して、出力を入力として内部でフィードバックし、及び／又は出力から入力を内部で提供する。幾つかの実施形態及び／又は使用状況では、通信部分１７９３．１の輸送は、入力として使用される出力を生成し、及び／又は出力から提供される入力を生成する仮想チャネルを介する。
【０３３８】
第４の例として、通信２０６０は概念的に、追加の通信１９７０（図１９の）、例えば、処理要素にわたり分割されるニューロン内の通信の全て又は任意の部分を表す。より具体的には、通信２０６０は特に、Ｎ３２  １７３２が分割される４つの部分のうちの２つ（１／４  Ｎ３２  １７３２．１及び１／４  Ｎ３２  １７３２．２：図１８Ｂ参照）間の通信を図示する。通信２０６０は、ＰＥ０  １８２０（１／４  Ｎ３２  １７３２．１に割り振られる）とＰＥ１  １８２１（１／４  Ｎ３２  １７３２．２に割り振られる）との間で（隣接するＰＥ間の結合）２０４０を介して輸送される。様々な実施形態及び／又は使用状況では、通信２０６０は、通信２０６０専用の仮想チャネル、通信２０６０及びＮ３２  １７３２の他の部分間の通信で共有される仮想チャネル、並びに通信２０６０及び処理要素にわたって分割されたニューロンの全て又は任意の部分で共有される仮想チャネルを介する。
【０３３９】
幾つかの実施形態及び／又は使用状況では、ウェーハ部分２０００の全て又は任意の部分は図１のＰＥ１２２を有する。幾つかの実施形態及び／又は使用状況では、ＰＥ０  １８２０、ＰＥ１  １８２１、ＰＥ２  １８２２、及びＰＥ３  １８２３の任意の１つは、図４のＰＥ４９７に対応する。幾つかの実施形態及び／又は使用状況では、隣接するＰＥ２０４１、２０４０、２０４３、及び２０４４間の結合及び／又は隣接するＰＥ２０５０、２０５１、２０５２、２０５３、２０５４、２０５５、２０５６、及び２０５７間の結合の部分の任意の１若しくはそれ以上は、図４の北結合４３０、東結合４３１、南結合４３２、及び西結合４３３の任意の１若しくはそれ以上に対応する。
【０３４０】
ニューロンスメアリング（例えば、図１７、図１８Ａ、図１８Ｂ、図１９、及び図２０に関して説明され、これらに関して図示された）に関連する概念はＦＣＮＮ、ＲＮＮ、ＣＮＮ、ＬＳＴＭネットワーク、オートエンコーダ、ディープビリーフネットワーク、及び敵対的生成ネットワーク等の様々なトポロジ及びタイプのニューラルネットワークに適用可能である。
【０３４１】
様々な実施形態及び／又は使用状況では、ニューロンは同サイズの部分、例えば、１／２、１／４、１／８等に分割される。様々な実施形態及び／又は使用状況では、ニューロンは、異なるサイズの部分、例えば、半分である第１の部分、それぞれ１／４である第２の部分及び第３の部分に分割される。様々な実施形態及び／又は使用状況では、ニューロンは任意のサイズの部分に分割される。
【０３４２】
様々な実施形態及び／又は使用状況では、複数のＰＥが１つのニューロンに割り振られる。様々な実施形態及び／又は使用状況では、１つのＰＥが複数のニューロンの各全体に割り振られる。
【０３４３】
様々な実施形態及び／又は使用状況では、ニューロンへのＰＥの割り振りは全体的又は部分的に、計算要件及び／又は記憶要件の静的測定及び／又は動的測定に応答する。様々な実施形態及び／又は使用状況では、ニューロンへのＰＥの割り振りは全体的又は部分的に、処理するデータの次元に応答する。
【０３４４】
様々な実施形態及び／又は使用状況では、矢印の方向として表されるデータフローは、単方向（描かれる矢頭で図示されるように）、双方向、及び／又は逆方向（描かれる矢頭の逆）である。特定の例として、様々な実施形態及び／又は使用状況では、通信１７９２（図１７の）は、Ｎ２１  １７２１からＮ３１  １７３１へのデータフロー（例えば、順方向伝搬中）又はＮ３１  １７３１からＮ２１  １７２１への逆のデータフロー（例えば、逆伝搬中）を表す。したがって、通信部分１７９２．１ひいては（隣接するＰＥ間の結合の部分）上の通信２０４０は、ＰＥ０  １８２０からＰＥ１  １８２１に（例えば、順方向伝搬中）及びＰＥ１  １８２１からＰＥ０  １８２０に逆に（例えば、逆伝搬中）発生する。
【０３４５】
様々な実施形態及び／又は使用状況では、各ニューロンは、入力アクティベーション毎の重み、部分和累積計算、及び出力アクティベーション関数計算の関連付けられた記憶装置を有する。１つのニューロンが複数のＰＥにわたり分割される状況では、重みはそれぞれ複数のＰＥにローカルに記憶され、乗算及び累積演算はそれぞれ、複数のＰＥでローカルに実行され、ローカルに生成された部分和は、最終和を生成するために特定のＰＥに仮想チャネルを介して通信される。最終和に続くアクティベーション関数は、図１の配置サーバ１５０で実行される図２のニューロンからＰＥへのマッピングＳＷ２１２によって全て決定されるように、同じ特定のＰＥ又は別のＰＥで実行することができる。非ゼロアクティベーション出力は、仮想チャネルを介してニューラルネットワークの後続層のニューロンに通信される。
【０３４６】
様々な実施形態及び／又は使用状況では、部分和、累積、及びアクティベーション関数は全て、デジタル論理及び／又はデジタル処理を含むデジタル技法を使用して実施される。様々な実施形態及び／又は使用状況では、欠陥を除き、ファブリックは、浮動小数点算術を実行するタスク、浮動小数点乗算器論理、乗算及び累積融合デジタル論理、並びに確率的ルーティングを使用する浮動小数点加算の１若しくはそれ以上を介してデジタル算術を実行することができるＰＥの同種の集まりを含む。様々な実施形態及び／又は使用状況では、同種の集まりのＰＥは更に、正規化線形ユニット（ＲｅＬＵ）、シグモイド、及びｔａｎｈから成る群から選択される非線形アクティベーション関数として各アクティベーション関数を実行することができる。
【０３４７】
ニューラルネットワークの図１７における表現は、データフローグラフの一種であり、ニューラルネットワーク及びニューロンスメアリングに関する上記概念は、データフローグラフに関して説明された実施形態に適用されることが理解される。幾つかの実施形態及び／又は使用状況では、データフローグラフのノードはニューロンに対応し、ノードスライスは分割ニューロンに対応し、ノードの１若しくはそれ以上は、複数の処理要素のリソースを使用して実施される。
【０３４８】
ベクトル及びデータ構造記述子
様々な実施形態及び／又は使用状況では、それぞれがデータ要素の１若しくはそれ以上をそれぞれ有する１若しくはそれ以上のベクトルの処理が実行される。ベクトルは様々にメモリ（例えば、図８のメモリ８５４又はＤストア８４８等のＰＥのＣＥの）から読み取られ、メモリに書き込まれ、ファブリックから受信され、又はファブリックに送信される。メモリから読み取られたベクトル又はメモリに書き込まれたベクトルは、「メモリベクトル」と呼ばれることもある。ファブリックから受信したベクトル又はファブリックに送信されたベクトル（例えば、ウェーブレットとして）は、「ファブリックベクトル」と呼ばれることがある。ＤＳＲからのＤＳＤ（及びＸＤＳＲからのＸＤＸＤ）は、メモリベクトルのアドレス指定パターン及びファブリックベクトルのアクセスパターンの決定に使用可能である。
【０３４９】
最初の数字「８」を有する図２１Ａ〜図２１Ｅ、図２２Ａ、図２２Ｂ、図２３、及び図２４の説明での各要素識別子は、図８の要素を指し、簡潔にするために、その他の点では図８の要素であるものとして特に識別されない。
【０３５０】
図２１Ａは、ファブリック入力データ構造記述子２１００として、ファブリック入力データ構造記述子（別名ファブリック入力ＤＳＤ）の一実施形態の選択された細部を図示する。幾つかの実施形態では、ファブリック入力データ構造記述子２１００は、ファブリックからＰＥによって受信されるファブリックベクトル及びファブリックベクトルの処理に関連する様々なパラメータを記述する。様々な実施形態及び／又は使用状況では、命令の発信元０オペランド又は発信元１オペランドは、ファブリック入力データ構造記述子２１００に従ってＤＳＤのインスタンスを含むＤＳＲを参照する。
【０３５１】
ファブリック入力データ構造記述子２１００は、長さ２１０１、ＵＴＩＤ（Ｍｉｃｒｏｔｈｒｅａｄ  Ｉｄｅｎｔｉｆｉｅｒ：マイクロスレッド識別子）２１０２、ＵＥ（Ｍｉｃｒｏｔｈｒｅａｄ  Ｅｎａｂｌｅ：マイクロスレッドイネーブル）２１０３、ＳＷ（ｖ：ＳＩＭＤ幅）２１０４、ＡＣ（Ａｃｔｉｖａｔｅ  Ｃｏｌｏｒ：カラーアクティベーション）２１０５、Ｔｅｒｍ（Ｔｅｒｍｉｎａｔｅ  Ｍｉｃｒｏｔｈｒｅａｄ  ｏｎ  Ｃｏｎｔｒｏｌ  Ｗａｖｅｌｅｔ：制御ウェーブレット時にマイクロスレッド終了）２１０６、ＣＸ（Ｃｏｎｔｒｏｌ  Ｗａｖｅｌｅｔ  Ｔｒａｎｓｆｏｒｍ  Ｅｎａｂｌｅ：制御ウェーブレット変換イネーブル）２１０７、ＵＳ（Ｍｉｃｒｏｔｈｒｅａｄ  Ｓｐａｒｓｅ  Ｍｏｄｅ：マイクロスレッド・スパース・モデル）２１０８、タイプ２１０９、ＳＳ（Ｓｉｎｇｌｅ  Ｓｔｅｐ：シングルステップ）２１１０、ＳＡ（Ｓａｖｅ  Ａｄｄｒｅｓｓ／Ｃｏｎｄｉｔｉｏｎａｌ  Ｓｉｎｇｌｅ  Ｓｔｅｐ  Ｍｏｄｅ：アドレス保存／条件付きシングル・ステップ・モード）２１１１、ＳＣ（Ｃｏｌｏｒ  Ｓｐｅｃｉｆｉｅｄ  ／  Ｎｏｒｍａｌ  Ｍｏｄｅ：カラー指定／通常モード）２１１２、ＳＱ（Ｑｕｅｕｅ  Ｓｐｅｃｉｆｉｅｄ  ／  Ｎｏｒｍａｌ  Ｍｏｄｅ：キュー指定／通常モード）２１１３、及びＣＨ（Ｃｏｌｏｒ  Ｈｉｇｈ：カラーハイ）２１１４を有する。
【０３５２】
幾つかの実施形態では、長さ２１０１は、ベクトルの長さ、例えば、ベクトル内のデータ要素の数を指定する１５ビット整数を有する。
【０３５３】
幾つかの実施形態では、ＵＥ（Ｍｉｃｒｏｔｈｒｅａｄ  Ｅｎａｂｌｅ：マイクロスレッドイネーブル）２１０３は、少なくとも幾つかの条件下で、ファブリックベクトルの処理中、マイクロスレッド処理がイネーブルされているか否かを示す１ビットフィールドを有し、これは、「マイクロスレッド処理をイネーブルする」ファブリックベクトルと呼ばれることもある。命令の少なくとも１つのオペランド（ソース又は宛先）が、マイクロスレッド処理が可能なファブリックベクトルである場合、命令は「マイクロスレッド処理された命令」と呼ばれ、処理中、入力ストール又は出力ストールのいずれかで、処理は別の命令（例えば、同じタスク又は別のタスクの）に進むことができる（十分なマイクロスレッド処理リソースが利用可能である場合）。ストールがクリアされると、処理は（最終的に）、ストールした繰り返しにおいて前にストールした命令に戻る。一例の入力ストールは、入力ファブリックベクトルの少なくとも１つの要素又はＦＩＦＯオペランドが入力（例えば、ソースデータ要素）として利用可能ではない場合である。一例の出力ストールは、空間が、出力ファブリックベクトルの要素又は出力のＦＩＦＯ（例えば、宛先データ要素）に関連付けられた結果をバッファリングするのに不十分である場合である。幾つかの状況では、マイクロスレッド処理をイネーブルしないファブリックベクトルは、同期して処理され、入力ストール又は出力ストールのいずれかで処理をストールする。幾つかの状況では、マイクロスレッド処理をイネーブルするファブリックベクトルは非同期で処理され、入力ストール又は出力ストールのいずれかでの処理要素のストールを低減又は回避する。ファブリックベクトルがマイクロスレッド処理をイネーブルする場合、処理要素は、条件付きで異なる命令の処理に切り替わることができ（ストールする代わりに）、続けて、後の時点（例えば、データが利用可能なとき）にファブリックベクトルの処理を再開することができる。
【０３５４】
幾つかの実施形態では、ＵＴＩＤ（Ｍｉｃｒｏｔｈｒｅａｄ  Ｉｄｅｎｔｉｆｉｅｒ：マイクロスレッド識別子）２１０２は、複数のマイクロスレッドの１つ及び／又は複数のマイクロスレッドの１つに関連付けられたリソースを識別する３ビットフィールドを有する。マイクロスレッド及び／又はリソースには、例えば、マイクロスレッド処理をイネーブルするファブリックベクトルが関連付けられる。幾つかの実施形態では、ハードウェアは８つのマイクロスレッドにリソースを提供する。幾つかの実施形態及び／又は使用状況では、ＵＴＩＤ２１０２は入力キュー８９７の１つを識別又は部分的に識別する。
【０３５５】
幾つかの実施形態では、ＳＷ（ＳＩＭＤ  Ｗｉｄｔｈ：ＳＩＭＤ幅）２１０４は、幾つかの実施態様では、並列に実行される演算数を指定する２ビットフィールドを有する。例えば、ＦＭＡＣＨ、ＦＡＤＤＨ、ＦＭＵＬＨ、又はＭＯＶ１６命令は、各オペランドで複数（最高で４つ）の演算を並列に実行する。幾つかの実施態様では、ＳＷフィールドは、ウェーブレットを解析してデータｖｓインデックス情報にする方法の決定に使用される。例えば、ＳＷフィールドが４である場合、それぞれが２つのデータ値を有する（インデックス値は有さない）２つのウェーブレットが、例えば並列で４つのオペランドを提供する。この例を続けると、ＳＷフィールドが２である場合、２つのデータ値を有する（インデックス値を有さない）１つのウェーブレットが、例えば並列で２つのオペランドを提供する。この例を続けると、ＳＷフィールドが１である場合、１つのデータ値及び１つのインデックス値を有する１つのウェーブレットが、１つのオペランドを提供する。
【０３５６】
幾つかの実施形態では、ＡＣ（Ａｃｔｉｖａｔｅ  Ｃｏｌｏｒ：カラーアクティベート）２１０５は、アクティベートするカラー（例えば、アクティベート演算を介して）を指定する６ビットフィールドを有する。幾つかの状況では、マイクロスレッド処理をイネーブルするファブリックベクトルの処理が完了した場合、ＡＣフィールドによって指定されたカラーはアクティベートされ、アクティベートされたカラーに基づいてタスクが開始される。処理の完了は、例えば、ファブリックベクトルの全ての要素が処理された場合、又はＴｅｒｍ２１０６が制御ウェーブレットに直面したときに終了することを示し、ファブリックベクトルの処理時、制御ウェーブレットに直面した場合、発生する。幾つかの実施形態では、ＡＣ２１０５は、ローカルカラー及びファブリックカラーの一方を指定することができる。
【０３５７】
幾つかの実施形態では、Ｔｅｒｍ（Ｔｅｒｍｉｎａｔｅ  Ｍｉｃｒｏｔｈｒｅａｄ  ｏｎ  Ｃｏｎｔｒｏｌ  Ｗａｖｅｌｅｔ：制御ウェーブレット時にマイクロスレッド終了）２１０６は、制御ウェーブレット受信時に終了するか否かを指定する１ビットフィールドを有する。ファブリック入力データ構造記述子２１００によって指定されたキュー（例えば、本明細書の他の箇所に記載されるように、ＵＴＩＤ２１０２、ＳＣ２１１２、及び／又はＳＱ２１１３の任意の組合せの様々な機能によって様々に指定される入力キュー８９７の１つ）のヘッド部におけるウェーブレットが、制御ウェーブレット（例えば、図１３Ａの制御ビット１３２０又は図１３Ｂの制御ビット１３４０が設定されている）であり、Ｔｅｒｍ２１０６が設定されている場合、命令は終了し、ＡＣ２１０５によって指定されたカラーはアクティベートされる。
【０３５８】
幾つかの実施形態では、ＣＸ（Ｃｏｎｔｒｏｌ  Ｗａｖｅｌｅｔ  Ｔｒａｎｓｆｏｒｍ  Ｅｎａｂｌｅ：制御ウェーブレット変換イネーブル）２１０７は、制御ウェーブレットを変換すべきか否かを指定する１ビットフィールドを有する。ＣＸ２１０７が設定されている場合、ファブリックベクトル内の制御ウェーブレットの受信に応答して、インデックスレジスタのビット１５：６は全て「１」である。幾つかの実施形態及び／又は使用状況では、インデックスレジスタのビット１５：６が全て「１」である場合、インデックスレジスタを参照する出力ファブリックベクトルに関連付けられた任意の出力ウェーブレットの制御ビットは設定される。
【０３５９】
幾つかの実施形態では、ＵＳ（Ｍｉｃｒｏｔｈｒｅａｄ  Ｓｐａｒｓｅ  Ｍｏｄｅ：マイクロスレッド・スパース・モード）２１０８は、マイクロスレッド処理をイネーブルする（ＵＥフィールドを介して）ファブリックベクトルがスパースモードで処理されるか否かを指定する１ビットフィールドを有する。ＵＳ２１０８が設定される場合、ファブリックベクトルは、スパースデータ要素のベクトル及びファブリック入力データ構造記述子２１００によって記述されるオペランドの各ウェーブレットインデックスを有する。インデックスは任意選択で及び／又は選択で、ＷＬＩ２１５２（図２１Ｃの）に応じて、メモリオペランドのアドレス計算に使用される。
【０３６０】
幾つかの実施形態では、タイプ２１０９は、データ構造タイプ及び／又はファブリック入力データ構造記述子２１００の他のフィールドを解釈する方法を指定する３ビットフィールドを有する。タイプ２１０９は、ファブリック入力データ構造記述子２１００の全てのインスタンスで「０」である。
【０３６１】
幾つかの実施形態では、ＳＳ（Ｓｉｎｇｌｅ  Ｓｔｅｐ：シングルステップ）２１１０は、オペランドとしてＤＳＤを使用する演算で、少なくとも幾つかの条件下においてシングル・ステップ・モード演算がイネーブルされているか否かを指定する１ビットフィールドを有する。幾つかの状況では、シングル・ステップ・モードをイネーブルする１若しくはそれ以上のオペランドを有する命令は、シングル・ステップ・モードで動作する。
【０３６２】
幾つかの実施形態では、ＳＡ（Ｓａｖｅ  Ａｄｄｒｅｓｓ／Ｃｏｎｄｉｔｉｏｎａｌ  Ｓｉｎｇｌｅ  Ｓｔｅｐ  Ｍｏｄｅ：アドレス保存／条件付きシングル・ステップ・モード）２１１１は、オペランドとしてＤＳＤを使用する演算で、少なくとも幾つかの条件下において保存アドレスモード演算がイネーブルされているか否かを指定する１ビットフィールドを有する。
【０３６３】
幾つかの実施形態及び／又は使用状況では、カラーはアクティベートされ、それに応答して、カラーに少なくとも部分的に基づくアドレスにおいてタスクを開始する。開始されると、タスクは実行される。幾つかの状況では、入力ファブリックベクトルは、現在実行中のタスクのカラーに関連付けられたキューから提供される。幾つかの実施形態では、ＳＣ（Ｃｏｌｏｒ  Ｓｐｅｃｉｆｉｅｄ，Ｎｏｒｍａｌ  Ｍｏｄｅ：カラー指定、通常モード）２１１２は、設定される場合、入力ファブリックベクトルが、特定のファブリックカラーに関連付けられた特定のキュー（例えば、入力キュー８９７の１つ）から提供されることを指定する１ビットフィールドを有する。特定のファブリックカラーは、下位ビットＵＴＩＤ２１０２（３ビットフィールドを含む）及び上位ビットＣＨ２１１４（２ビットフィールドを含む）の連結として指定される（例えば、５ビットカラーとして）。幾つかの実施形態では、ＳＱ（Ｑｕｅｕｅ  Ｓｐｅｃｉｆｉｅｄ，Ｎｏｒｍａｌ  Ｍｏｄｅ：キュー指定、通常モード）２１１３は、指定される場合、入力ファブリックベクトルが特定のキュー（例えば、入力キュー８９７の１つ）から提供されることを指定する１ビットフィールドを有する。ＳＱ２１１３が設定される場合、入力ファブリックベクトルは、ＵＴＩＤ２１０２により指定される入力キュー８９７の１つから提供される。
【０３６４】
図２１Ｂは、ファブリック出力データ構造記述子２１２０として、ファブリック出力データ構造記述子（別名ファブリック出力ＤＳＤ）の一実施形態の選択された細部を図示する。幾つかの実施形態では、ファブリック出力データ構造記述子２１２０は、ＰＥにより作成され、ファブリックを介して送信されるファブリックベクトル及びファブリックベクトルの処理に関連する様々なパラメータを記述する。様々な実施形態及び／又は使用状況では、命令の宛先オペランドは、ファブリック出力データ構造記述子２１２０によるＤＳＤのインスタンスを含むＤＳＲを参照する。
【０３６５】
ファブリック出力データ構造記述子２１２０は、長さ２１２１、ＵＴＩＤ（Ｍｉｃｒｏｔｈｒｅａｄ  Ｉｄｅｎｔｉｆｉｅｒ：マイクロスレッド識別子）２１２２、ＵＥ（Ｍｉｃｒｏｔｈｒｅａｄ  Ｅｎａｂｌｅ：マイクロスレッドイネーブル）２１２３、ＳＷ（ＳＩＭＤ  Ｗｉｄｔｈ：ＳＩＭＤ幅）２１２４、カラー２１２６、Ｃ（Ｏｕｔｐｕｔ  Ｃｏｎｔｒｏｌ  Ｂｉｔ：出力制御ビット）２１２７、インデックスロー２１２８．１、タイプ２１２９、ＳＳ（Ｓｉｎｇｌｅ  Ｓｔｅｐ：シングルステップ）２１３０、ＳＡ（Ｓａｖｅ  Ａｄｄｒｅｓｓ／Ｃｏｎｄｉｔｉｏｎａｌ  Ｓｉｎｇｌｅ  Ｓｔｅｐ  Ｍｏｄｅ：アドレス保存／条件付きシングル・ステップ・モード）２１３１、ＷＬＩ（Ｗａｖｅｌｅｔ  Ｉｎｄｅｘ  Ｓｅｌｅｃｔ：ウェーブレットインデックス選択）２１３２、インデックスハイ２１２８．２、及びＡＣ（Ａｃｔｉｖａｔｅ  Ｃｏｌｏｒ：カラーアクティベート）２１２５を有する。
【０３６６】
幾つかの実施形態では、ファブリック出力データ構造記述子２１２０の要素（長さ２１２１、ＵＴＩＤ２１２２、ＵＥ２１２３、ＳＷ２１２４、ＳＳ２１３０、ＳＡ２１３１、及びＡＣ２１２５）の機能及び／又は演算はそれぞれ、ファブリック入力データ構造記述子２１００の要素（長さ２１０１、ＵＴＩＤ２１０２、ＵＥ２１０３、ＳＷ２１０４、ＳＳ２１１０、ＳＡ２１１１、及びＡＣ２１０５）と同様である。
【０３６７】
幾つかの実施形態では、カラー２１２６は、ファブリックベクトルに関連付けられたウェーブレットの送信に使用されるファブリックカラーを指定する５ビットフィールドを有する。
【０３６８】
幾つかの実施形態では、Ｃ（Ｏｕｔｐｕｔ  Ｃｏｎｔｒｏｌ  Ｂｉｔ：出力制御ビット）２１２７は、ウェーブレットが制御ウェーブレットであるか否かを指定する１ビットフィールドを有する。Ｃ２１２７が設定される場合、ＤＳＤに基づいて作成されるあらゆるウェーブレットは制御ウェーブレットである（例えば、図１３Ａの制御ビット１３２０が設定される）。
【０３６９】
幾つかの実施形態では、インデックスロー２１２８．１は３ビットフィールドを有し、インデックスハイ２１２８．２は３ビットフィールドを有する。インデックスロー２１２８．１及びインデックスハイ２１２８．２を連結したものは集合的に、インデックス２１２８と呼ばれる。幾つかの状況では、インデックス２１２８は、ウェーブレットのインデックス（例えば、図１３Ａのインデックス１３２１）の形成に使用される。
【０３７０】
幾つかの実施形態では、タイプ２１２９は、データ構造タイプ及び／又はファブリック出力データ構造記述子２１２０の他のフィールドを解釈する方法を指定する３ビットフィールドを有する。タイプ２１２９は、ファブリック出力データ構造記述子２１２０の全てのインスタンスで「０」である。
【０３７１】
幾つかの実施形態では、ＷＬＩ（Ｗａｖｅｌｅｔ  Ｉｎｄｅｘ  Ｓｅｌｅｃｔ：ウェーブレットインデックス選択）２１３２は、ファブリックベクトルのインデックスを部分的に指定する１ビットフィールドを有する。幾つかの状況では、ＷＬＩ２１３２が「１」である場合、インデックスはレジスタ（例えば、ＲＦ８４２のＧＰＲ４）からの値である。幾つかの状況では、ＷＬＩ２１３２が「０」である場合、インデックスはインデックス２１２８の１６ビットへのゼロ拡張である。
【０３７２】
図２１Ｃは、１Ｄメモリ・ベクトル・データ構造記述子２１４０として、１Ｄメモリ・ベクトル・データ構造記述子（別名１ＤメモリベクトルＤＳＤ）の一実施形態の選択された細部を図示する。幾つかの実施形態では、１Ｄメモリ・ベクトル・データ構造記述子２１４０は、メモリに記憶された一次元メモリベクトル及びメモリベクトルの処理に関連する様々なパラメータを記述する。様々な実施形態及び／又は使用状況では、命令の発信元０オペランド、発信元１オペランド、及び宛先オペランドのいずれか１若しくはそれ以上は、１Ｄメモリ・ベクトル・データ構造記述子２１４０によるＤＳＤの各インスタンスを含む各ＤＳＲを参照する。
【０３７３】
１Ｄメモリ・ベクトル・データ構造記述子２１４０は、長さ２１４１、ベースアドレス２１４２、タイプ２１４９、ＳＳ（Ｓｉｎｇｌｅ  Ｓｔｅｐ：シングルステップ）２１５０、ＳＡ（Ｓａｖｅ  Ａｄｄｒｅｓｓ／Ｃｏｎｄｉｔｉｏｎａｌ  Ｓｉｎｇｌｅ  Ｓｔｅｐ  Ｍｏｄｅ：アドレス保存／条件付きシングル・ステップ・モード）２１５１、ＷＬＩ（Ｗａｖｅｌｅｔ  Ｉｎｄｅｘ  Ｓｅｌｅｃｔ：ウェーブレットインデックス選択）２１５２、及びストライド２１５３を有する。
【０３７４】
幾つかの実施形態では、１Ｄメモリ・ベクトル・データ構造記述子２１４０の要素の幾つか（長さ２１４１、ＳＳ２１５０、及びＳＡ２１５１）の機能及び／又は演算はそれぞれ、ファブリック入力データ構造記述子２１００の要素の幾つか（長さ２１０１、ＳＳ２１１０、及びＳＡ２１１１）と同様である。幾つかの状況では、メモリベクトルの長さが１５ビット超である場合、４Ｄメモリ・ベクトル・データ構造記述子２１４０が使用される。
【０３７５】
幾つかの実施形態では、ベースアドレス２１４２は、メモリベクトルのベースアドレスを指定する１５ビット整数を有する。
【０３７６】
幾つかの実施形態では、タイプ２１４９は、データ構造タイプ及び／又は１Ｄメモリ・ベクトル・データ構造記述子２１４０の他のフィールドを解釈する方法を指定する３ビットフィールドを有する。タイプ２１４９は、１Ｄメモリ・ベクトル・データ構造記述子２１４０の全てのインスタンスで「１」である。
【０３７７】
幾つかの実施形態では、ＷＬＩ（Ｗａｖｅｌｅｔ  Ｉｎｄｅｘ  Ｓｅｌｅｃｔ：ウェーブレットインデックス選択）２１５２は、ベクトルのインデックスを部分的に指定する１ビットフィールドを有する。ＷＬＩ２１５２が「０」である場合、インデックスは０である。幾つかの状況では、ＷＬＩ２１５２が「１」である場合、インデックスはレジスタ（例えば、ＲＦ８４２のＧＰＲ４）からの値又はスパースウェーブレットのインデックス（例えば、図１３Ａのインデックス１３２１）である。
【０３７８】
幾つかの実施形態では、ストライド２１５３は、ベクトルのストライドを指定する９ビット符号付き整数を有する。幾つかの状況では、ベースアドレス２１４２、ＷＬＩ２１５３によって指定されるインデックス、及びストライド２１５３は、１Ｄメモリベクトル内のデータ要素のアドレスを計算できるようにする。１Ｄメモリベクトル内の最初のデータ要素のアドレスは、ベースアドレス２１４２＋ＷＬＩ２１５３によって指定されたインデックスである。１Ｄベクトル内の次のデータ要素のアドレスは、最初のデータ要素のアドレス＋ストライド２１５３である。例えば、ベースアドレス２１４２は１３６であり、ＷＬＩ２１５３は１であり、ＧＰＲ４は値６を保持する。ストライド２１５３は−２であり、長さ２１４１は１０であり、メモリベクトルはアドレス｛１４２，１４０，１３８，...，１２４｝に配置されたデータを含む。幾つかの状況では、メモリベクトルのストライドが９ビットを超える場合、４Ｄメモリ・ベクトル・データ構造記述子２１４０が使用される。
【０３７９】
図２１Ｄは、４Ｄメモリ・ベクトル・データ構造記述子２１６０として、４Ｄメモリ・ベクトル・データ構造記述子（別名４ＤメモリベクトルＤＳＤ）の一実施形態の選択された細部を図示する。幾つかの実施形態では、４Ｄメモリ・ベクトル・データ構造記述子２１６０は、図２２Ｂの４Ｄメモリベクトル拡張データ構造記述子２２４０と併せて、メモリに記憶された四次元メモリベクトル及びメモリベクトルの処理に関連する様々なパラメータを記述する。幾つかの実施形態では、４Ｄメモリ・ベクトル・データ構造記述子２１６０は、図２２Ｂの４Ｄメモリベクトル拡張データ構造記述子２２４０と併せて、メモリに記憶された二次元又は三次元メモリベクトル及びメモリベクトルの処理に関連する様々なパラメータを記述する。様々な実施形態及び／又は使用状況では、命令の発信元０オペランド、発信元１オペランド、及び宛先オペランドのいずれか１若しくはそれ以上は、４Ｄメモリ・ベクトル・データ構造記述子２１６０によるＤＳＤの各インスタンスを含む各ＤＳＲを参照する。
【０３８０】
４Ｄメモリ・ベクトル・データ構造記述子２１６０は、長さ下位ビット２１６１．１、ベースアドレス２１６２、タイプ２１６９、ＳＳ（Ｓｉｎｇｌｅ  Ｓｔｅｐ：シングルステップ）２１７０、ＳＡ（Ｓａｖｅ  Ａｄｄｒｅｓｓ／Ｃｏｎｄｉｔｉｏｎａｌ  Ｓｉｎｇｌｅ  Ｓｔｅｐ  Ｍｏｄｅ：アドレス保存／条件付きシングル・ステップ・モード）２１７１、ＷＬＩ（Ｗａｖｅｌｅｔ  Ｉｎｄｅｘ  Ｓｅｌｅｃｔ：ウェーブレットインデックス選択）２１７２、及び長さ上位ビット２１６１．２を有する。
【０３８１】
幾つかの実施形態では、４Ｄメモリ・ベクトル・データ構造記述子２１６０の要素の幾つか（ベースアドレス２１６２、ＳＳ２１７０、ＳＡ２１７１、及びＷＬＩ２１７２）の機能及び／又は演算はそれぞれ、１Ｄメモリ・ベクトル・データ構造記述子２１４０（ベースアドレス２１４２、ＳＳ２１５０、ＳＡ２１５１、及びＷＬＩ２１５２）と同様である。
【０３８２】
幾つかの実施形態では、下位ビット２１６１．１は１５ビットフィールドを有し、長さ上位ビット２１６１．２は９ビットフィールドを有する。下位ビット２１６１．１及び長さ上位ビット２１６１．２を連結したものは集合的に、４Ｄメモリベクトル拡張データ構造記述子２２４０と併せて解釈される長さ２１６１（２４ビットフィールド）と呼ばれる（長さ２１６１として図示される）。
【０３８３】
幾つかの実施形態では、タイプ２１６９は、例えば、拡張ＤＳＤ（ｅｘｔｅｎｄｅｄ  ＤＳＤ：ＸＤＳＤ）を記憶する拡張ＤＳＲ（ｅｘｔｅｎｄｅｄ  ＤＳＲ：ＸＤＳＲ）を指定する３ビットフィールドを有する。ＸＤＳＤは、循環メモリバッファ（例えば、図２２Ａの循環メモリバッファ拡張データ構造記述子２２１０）及び四次元メモリベクトル（例えば、図２２Ｂの４Ｄメモリベクトル拡張データ構造記述子２２４０）の一方を指定し記述する。
【０３８４】
図２１Ｅは、循環メモリ・バッファ・データ構造記述子２１８０として、循環メモリ・バッファ・データ構造記述子（別名循環メモリバッファＤＳＤ）の一実施形態の選択された細部を図示する。幾つかの実施形態では、循環メモリ・バッファ・データ構造記述子２１８０は、循環メモリバッファ拡張データ構造記述子２２１０と併せて、メモリに記憶されたデータ要素の循環バッファ及びメモリに記憶されたデータ要素のＦＩＦＯの一方及びデータ要素の処理に関連付けられた様々なパラメータを記述する。様々な実施形態及び／又は使用状況では、命令の発信元０オペランド、発信元１オペランド、及び宛先オペランドのいずれか１若しくはそれ以上は、循環メモリ・バッファ・データ構造記述子２１８０によるＤＳＤの各インスタンスを含む各ＤＳＲを参照する。
【０３８５】
循環メモリ・バッファ・データ構造記述子２１８０は、長さ２１８１、ベースアドレス２１８２、ＦＷ（ＦＩＦＯ  Ｗｒａｐ  Ｂｉｔ：ＦＩＦＯラップビット）２１８８、タイプ２１８９、ＳＳ（Ｓｉｎｇｌｅ  Ｓｔｅｐ：シングルステップ）２１９０、ＳＡ（Ｓａｖｅ  Ａｄｄｒｅｓｓ／Ｃｏｎｄｉｔｉｏｎａｌ  Ｓｉｎｇｌｅ  Ｓｔｅｐ  Ｍｏｄｅ：アドレス保存／条件付きシングル・ステップ・モード）２１９１、ＷＬＩ（Ｗａｖｅｌｅｔ  Ｉｎｄｅｘ  Ｓｅｌｅｃｔ：ウェーブレットインデックス選択）２１９２、及びＳＷ（ＳＩＭＤ  Ｗｉｄｔｈ：ＳＩＭＤ幅）２１８４を有する。幾つかの実施形態では、循環メモリバッファアクセスは常に、インデックス０及びストライド１を有する。
【０３８６】
幾つかの実施形態では、循環メモリ・バッファ・データ構造記述子２１８０の要素の幾つか（長さ２１８１、ベースアドレス２１８２、ＳＳ２１９０、及びＳＡ２１９１）の機能及び／又は演算はそれぞれ、１Ｄメモリ・ベクトル・データ構造記述子２１４０の要素の幾つか（長さ２１４１、ベースアドレス２１４２、ＳＳ２１５０、及びＳＡ２１５１）と同様である。幾つかの状況では、タイプ２１８９の機能及び／又は演算は、４Ｄメモリ・ベクトル・データ構造記述子２１６０のタイプ２１６９と同様である。幾つかの実施形態では、循環メモリ・バッファ・データ構造記述子２１８０のＳＷ２１８４の機能及び／又は演算は、ファブリック入力データ構造記述子２１００のＳＷ２１０４と同様である。
【０３８７】
幾つかの実施形態では、ＦＷ（ＦＩＦＯ  Ｗｒａｐ  Ｂｉｔ：ＦＩＦＯラップビット）２１８８は、満杯ＦＩＦＯと空ＦＩＦＯとの区別を可能にする１ビットフィールドを有する。ＦＷ（ＦＩＦＯ  Ｗｒａｐ  Ｂｉｔ：ＦＩＦＯラップビット）２１８８は、アクセスがＦＩＦＯのアドレス範囲をラップアラウンドするとき、トグルされる。
【０３８８】
幾つかの実施形態では、ＷＬＩ２１９２は、循環バッファのインデックスに影響を有さない。
【０３８９】
図２２Ａは、循環メモリバッファ拡張データ構造記述子２２１０として、循環メモリバッファ拡張データ構造記述子の一実施形態の選択された細部を図示する。循環メモリバッファ拡張データ構造記述子２２１０は、タイプ２２１１、開始アドレス２２１２、終了アドレス２２１３、ＦＩＦＯ２２１４、カラープッシュ（アクティベート）２２１５、及びカラーポップ（アクティベート）２２１６を有する。
【０３９０】
幾つかの実施形態では、タイプ２２１１は、データ構造のタイプを指定する１ビットフィールドを有する。タイプ２２１１は、循環メモリバッファ拡張データ構造記述子２２１０の全てのインスタンスで「１」である。
【０３９１】
幾つかの実施形態では、開始アドレス２２１２は、メモリ内の循環バッファの開始アドレスを指定する１５ビットフィールドを有する。幾つかの実施形態では、終了アドレス２２１３は、メモリ内の循環バッファの終了アドレスを指定する１５ビット整数を有する。アドレスが増分され（次のアクセスを開始するために、ストライドにより）、終了アドレス２２１３に等しい場合、アドレスはベースアドレス２２１２にリセットされ、それにより、循環アクセス挙動を提供する。
【０３９２】
幾つかの実施形態では、ＦＩＦＯ２２１４は、循環バッファがＦＩＦＯであるか否かを指定する１ビットフィールドを有する。ＦＩＦＯ２２１４が「０」の場合、循環バッファはＦＩＦＯではない。ＦＩＦＯ２２１４が「１」の場合、循環バッファはＦＩＦＯである。
【０３９３】
幾つかの実施形態では、カラープッシュ（アクティベート）２２１５及びカラーポップ（アクティベート）２２１６は、アクティベートする（例えば、アクティベート演算を介して）カラーを指定する６ビットフィールドを有する。幾つかの実施形態では、カラープッシュ（アクティベート）２２１５及びカラーポップ（アクティベート）２２１６は、ローカルカラー及びファブリックカラーのカラーを指定することができる。
【０３９４】
様々な実施形態では、２つの循環メモリバッファＤＳＲが、メモリの同じレジスタに記憶されたデータ要素のＦＩＦＯを記述することができる。宛先ＤＳＲ（例えば、ＤＤＳＲ８）は、ＦＩＦＯの書き込みポインタを記述し、発信元１ＤＳＲ（例えば、Ｓ１ＤＳＲ８）はＦＩＦＯの読み取りポインタを記述する。幾つかの実施形態では、宛先ＤＳＲ及び発信元１ＤＳＲは同じ識別子を有する。様々な実施形態では、ＤＳＲ８４６の幾つかのみがＦＩＦＯを記述することができる（例えば、ＤＤＳＲ８〜ＤＤＳＲ１１及びＳ１ＤＳＲ８〜Ｓ１ＤＳＲ１１）。
【０３９５】
２つのＤＳＲのＦＷ（ＦＩＦＯ  Ｗｒａｐ  Ｂｉｔ：ＦＩＦＯラップビット）２１８８は、ＦＩＦＯが満杯であるか、それとも空であるかの検出を可能にする。ＦＩＦＯが宛先として使用される場合、関連付けられたＳ１ＤＳＲのベースアドレス２１８２及びＦＷ２１８８は読み取られ、ＤＤＳＲからの値と比較される。２つのＤＳＲのベースアドレス２１８２が同じであるが、ＦＷ２１８８が異なる場合、ＦＩＦＯは満杯である。ＦＩＦＯが発信元として使用される場合、関連付けられたＤＤＳＲのベースアドレス２１８２及びＦＷ２１８８は読み取られ、Ｓ１ＤＳＲからの値と比較される。２つのＤＳＲのベースアドレス２１８２が同じであり、ＦＷ２１８８が同じである場合、ＦＩＦＯは空である。幾つかの状況（例えば、マイクロスレッド処理）では、空のＦＩＦＯにアクセスしている読み取り又は満杯のＦＩＦＯにアクセスしている書き込みに応答して、ＦＩＦＯがそれぞれ空又は満杯ではなくなるまで、処理は別のタスク内の命令に切り替えられる。
【０３９６】
幾つかの実施形態及び／又は使用状況では、ソフトウェア（例えば、図２のＰＥ上のタスクＳＷ２６０）は、ＰＥのキューの延長としてＦＩＦＯを構成し動作させる。例えば、ＦＩＦＯは、データ要素を記憶して、入力キュー８９７及び出力キュー８５９の１若しくはそれ以上のキューに加えて、容量を提供することができる。別の例として、ＦＩＦＯは、ウェーブレットをバッファリングすることにより、ＰＥを接続するファブリックに追加容量を提供することができる。
【０３９７】
図２２Ｂは、４Ｄメモリベクトル拡張データ構造記述子２２４０として、４Ｄメモリベクトル拡張データ構造記述子の一実施形態の選択された細部を図示する。幾つかの実施形態では、４Ｄメモリベクトル拡張データ構造記述子２２４０は部分的に、メモリに記憶されるデータ要素の四次元ベクトルを記述する。４Ｄメモリベクトル拡張データ構造記述子２２４０は、タイプ２２４１、次元２２４２、ＤＦ（Ｄｉｍｅｎｓｉｏｎ  Ｆｏｒｍａｔ：次元フォーマット）２２４３、選択ストライド１  ２２４４．１、選択ストライド２  ２２４４．２、選択ストライド３  ２２４４．３、選択ストライド４  ２２４４．４、及びストライド２２４５を有する。幾つかの実施形態では、４Ｄメモリベクトル拡張データ構造記述子２２４０は５１ビットを有する。
【０３９８】
幾つかの実施形態では、タイプ２２４１は、データ構造のタイプを指定する１ビットフィールドを有する。タイプ２２４１は、４Ｄメモリベクトル拡張データ構造記述子２２４０の全てのインスタンスで「０」である。
【０３９９】
幾つかの実施形態では、次元２２４２は、ベクトルの次の次元の長さを初期化するのに使用される２０ビットフィールドを有する。
【０４００】
幾つかの実施形態では、ＤＦ（Ｄｉｍｅｎｓｉｏｎ  Ｆｏｒｍａｔ：次元フォーマット）２２４３は、図２１Ｄの長さ２１６１と併せて、Ｎ次元ベクトルの各次元の長さを指定する５ビットフィールドを有する。概念的に、長さ２１６１は６つの連続した４ビットニブルに分割され、各次元はニブルの１若しくはそれ以上を使用して表現される。ビットはＤＦ２２４３において、長さ２１６１における次元間の境界を示すように設定される。例えば、ＤＦ２２４２は「０１１１０」（二進数）であり、第１の次元が２つのニブル、例えば、ビット［７：０］を使用して表現され、１〜１２８の長さを表すことを示す。同様に、第２の次元は１つのニブル、例えば、ビット［１１：８］を使用して表現され、１〜４の長さを表す。Ｎ次元ベクトルは、ＤＦ２２４２において（Ｎ−１）ビットを設定することによって表され、最後の次元のみが４を超えるニブルを使用する。幾つかの実施形態及び／又は使用状況では、例えば、ベクトルが、長さ２１４１（図２１Ｃの）が記述するには長すぎる場合、一次元ベクトルはこのフォーマットを使用して記述される。幾つかの実施形態及び／又は使用状況では、二次元又は三次元ベクトルはこのフォーマットを使用して記述される。
【０４０１】
幾つかの実施形態では、選択ストライド１  ２２４４．１は、ベクトルの第１の次元のストライドを指定する１ビットフィールドを有する。選択ストライド１  ２２４４．１が「０」の場合、ストライドは１である。選択ストライド１  ２２４４．１が「１」の場合、ストライドはストライド２２４５によって指定される。
【０４０２】
幾つかの実施形態では、選択ストライド２  ２２４４．２は、３ビットフィールドを有し、ベクトルの第２の次元のストライドを符号化する。選択ストライド２  ２２４４．２が「０」の場合、ストライドは１である。選択ストライド２  ２２４４．２が「１」の場合、ストライドはストライド２２４５によって指定される。選択ストライド２  ２２４４．２が２〜７の場合、ストライドは対応する（ＤＳＲｓ）ストライドレジスタ（例えば、ＤＳＲ８４６の６つのストライドレジスタによって指定される。
【０４０３】
幾つかの実施形態では、選択ストライド３  ２２４４．３及び選択ストライド４  ２２４４．４はそれぞれ３ビットフィールドを有する。幾つかの実施形態では、選択ストライド３  ２２４４．３及び選択ストライド４  ２２４４．４の機能及び／又は演算はそれぞれ、第３及び第４の次元に関して、選択ストライド２  ２２４４．２は第２の次元に関すると同様である。
【０４０４】
幾つかの実施形態では、ストライド２２４５は、メモリ内のベクトルのストライドを指定する１５ビットフィールドを有する。幾つかの状況では、ストライド２２４５は、一次元ベクトルにはストライド２１５３（図２１Ｃの）よりも長いストライドを使用できるようにする。
【０４０５】
図２３は、データ構造記述子フロー２３００として、データ構造記述子によりオペランドにアクセスする一実施形態の選択された細部を図示する。幾つかの実施形態では、データ構造記述子フロー２３００の動作はＣＥ（例えば、ＣＥ８００）によって実行される。
【０４０６】
データ構造記述子を介して発信元オペランドにアクセスすることは、各ＤＳＤを用いてＰＥのＣＥの１若しくはそれ以上のＤＳＲを初期化し（ＤＳＲを設定２３０２）、任意選択で各ＸＤＳＤ及び／又はＣＥのストライド値を初期化する（（任意選択）ＸＤＳＲを設定２３０５）ことによって開始される（開始２３０１）。幾つかの実施形態では、初期化されたＤＳＲ（及び任意選択で、初期化されたＸＤＳＲ及びストライド値を保持するストライドレジスタ）は、データをメモリからＤＳＲに移す命令によって初期化される。続けて、ＣＥは、初期化されたＤＳＲ及び任意選択で１若しくはそれ以上のＸＤＳＲ及び／又はストライドレジスタによって指定された１若しくはそれ以上のオペランドを有する命令（例えば、ＦＭＡＣＨ、ＭＯＶ、又はＬＴ１６）をフェッチし復号化する（ＤＳＲを用いて命令をフェッチ／復号化２３０３）。幾つかの実施形態では、命令のオペランドタイプフィールドは、オペランドがＤＳＲによって指定されるか否かを指定する。
【０４０７】
ＣＥは、ＤＳＲから１若しくはそれ以上のＤＳＤを読み取り（ＤＳＲを読み取る２３０４）、データ構造のタイプ、データ要素の発信元、複数のデータ要素が一緒に読み取られるか否か（例えば、ＳＩＭＤ演算の場合）、及び各オペランドのデータ要素の総数の１若しくはそれ以上を特定する。図２４に関して説明されるように、特定に応じて、各ＤＳＤ読み取りで、ＸＤＳＲ及び１若しくはそれ以上のストライドレジスタも任意選択で読み取られる（（任意選択）ＸＤＳＲを読み取る２３０６）。幾つかの状況では、ＤＳＲは、発信元０オペランド、発信元１オペランド、及び宛先オペランドの１若しくはそれ以上について読み取られ、動作２３０３において得られた命令の各オペランドフィールドによって識別される。幾つかの実施形態及び／又は使用状況では、ＤＳＲ、ＸＤＳＲ、及びストライドレジスタの任意の１若しくはそれ以上は、全体的又は部分的に並列して読み取られ、他の実施形態及び／又は使用状況では、ＤＳＲ、ＸＤＳＲ、及びストライドレジスタの任意の１若しくはそれ以上は、全体的又は部分的に順次読み取られる。
【０４０８】
動作２３０４において得られたＤＳＤ（及び任意選択で、動作２３０６において得られたＸＤＳＲ及びストライド値）に基づいて、ＣＥは、ファブリック及び／又はメモリから１若しくはそれ以上の発信元データ要素を読み取る（キュー／メモリから（次の）発信元データ要素を読み取る２３１０）。動作２３０３において得られた命令によって指定される各発信元（例えば、発信元０及び発信元１のそれぞれ）について、ＣＥは、ＤＳＤ内のＳＩＭＤ幅情報に従って、命令において指定された演算の反復に十分な要素を読み取る。幾つかの実施形態及び／又は使用状況では、繰り返しに十分な要素は、少なくとも１つの要素及びＳＩＭＤ幅情報により示される数以下である。様々な実施形態では、十分な要素は、入力キュー８９７のキュー内の１つ若しくは２つのエントリに含まれる要素数以下及び出力キュー８５９のキュー内の１つ若しくは２つのエントリに含まれる要素数以下である。ファブリックからのデータ要素（例えば、ソースデータ構造はファブリックベクトルである）は、ＣＥの１若しくはそれ以上のキューを介してアクセスされる。幾つかの実施形態及び／又は使用状況では、ＣＥはレジスタからもデータ要素を読み取る。
【０４０９】
発信元データ要素を読み取った後、ＣＥは、入力としてデータ要素を使用して演算を実行する（データ要素に対して（次の）演算を実行２３１１）。演算は、動作２３０３（例えば、ＦＭＡＣＨ命令では乗累算演算、ＭＯＶ命令では移動演算、又はＬＴ１６では整数未満比較）において得られる命令によって指定される。
【０４１０】
幾つかの状況では、演算（例えば、乗累算演算又は移動演算）は、１若しくはそれ以上の出力データ要素を生成する。ＣＥは、動作２３０４において得られたＤＳＤ（及び任意選択で動作２３０６において得られたＸＤＳＲ及びストライド値）に基づいて出力データ要素をファブリック又はメモリに書き込む（（次の）宛先データ要素をキュー／メモリに書き込む２３１２）。ファブリックに送信されたデータ要素（例えば、宛先データ構造はファブリックベクトルである）は、ウェーブレットに形成され、ＰＥのルータを介してファブリックに送信される。幾つかの他の状況では、出力データ要素はない（例えば、幾つかの比較演算）。
【０４１１】
演算からの任意の結果を書き込んだ後、ＣＥは、処理する追加のデータ要素があるか否かを判断する（データ要素がまだあるか？２３１３）。幾つかの実施形態では、ＤＳＤは、アクセスするデータ要素の総数（例えば、ベクトルの長さ）を指定し、ＣＥは、アクセスされたデータ要素の数（例えば、カウンタを介して追跡される）を長さによって指定されたデータ要素の総数と比較する。処理する追加のデータ要素がある場合、ＣＥは、全てのデータ要素が処理されるまで動作２３１０〜２３１３を繰り返し、全てのデータ要素が処理されると、フローは終わる（終わり２３１６）。
【０４１２】
様々な実施形態及び／又は使用状況では、データ構造記述子フロー２３００の要素の任意の１若しくはそれ以上の全て又は任意の部分（例えば、任意の１若しくはそれ以上の動作２３０２〜２３１２）は、ＣＥ、例えば、ＣＥ８００の要素によって実行される演算及び／又はＣＥの要素に概念的に対応及び／又は概念的に関連する。
【０４１３】
一例として、発信元ＤＳＤ（ＤＳＲを設定２３０２及びＤＳＲを読み取る２３０４に関連付けられる）を保持する発信元ＤＳＲは、ＤＳＲ８４６の１若しくはそれ以上（例えば、Ｓ０ＤＳＲ、Ｓ１ＤＳＲ、ＤＤＳＲ、ＸＤＳＲ、及びストライドレジスタ）である。幾つかの実施形態では、ＣＥ８００は、ＤＳＤをＤＳＲに書き込む命令、例えば、ＬＤＳ０ＷＤＳ、ＬＤＳ１ＷＤＳ、ＬＤＸＤＳ、及びＬＤＳＲに応答してＤＳＲを、設定２３０２を実行する。
【０４１４】
別の例として、ＣＥ８００は、ＤＳＲを用いて命令をフェッチ／復号化２３０３を実行する。様々な実施形態では、ＰＣ８３４及びＩ配列８３６は、メモリ８５４から命令をフェッチし、デコーダ８４０は、フェッチされた命令を符号化する。幾つかの実施形態では、命令は、図２５Ａの複数オペランド命令２５１０、図２５Ｂの１発信元０宛先オペランド命令２５２０、及び図２５Ｃの即値命令２５３０の１つに従ってフォーマットされる。幾つかの実施形態では、復号化は、命令オペランドがＤＳＤによって指定されること、例えば、オペランド１タイプ２５１４．１の値が「１」であることを検出することを含む。
【０４１５】
別の例として、ＣＥ８００は、ＤＳＲによって指定された１若しくはそれ以上のオペランドを有する命令に応答して、ＤＳＲを読み取る２３０４を実行する。様々な実施形態では、Ｄ配列８４４は、ＤＳＲ８４６から動作２３０３において得られた命令によって指定されたＤＳＲを読み取る。幾つかの実施形態では、ＤＳＲから読み取られたＤＳＤは、図２１Ａのファブリック入力データ構造記述子２１００、図２１Ｂのファブリック出力データ構造記述子２２００、図２１Ｃの１Ｄメモリ・ベクトル・データ構造記述子２１４０、図２１Ｄの４Ｄメモリ・ベクトル・データ構造記述子２１６０、及び図２１Ｅの循環メモリ・バッファ・データ構造記述子２１８０の１若しくはそれ以上に従ってフォーマットされる。幾つかの実施形態及び／又は使用状況では、Ｄ配列８４４は、ＸＤＳＲを指定するタイプ２１６９又はタイプ２１８９を有するＤＳＤに応答して、（任意選択）ＸＤＳＲを読み取る２３０６を実行する。様々な実施形態では、ＸＤＳＲから読み取られたＸＤＳＤは、図２２Ａの循環メモリ拡張バッファデータ構造記述子２１８０及び図２２Ｂの４Ｄメモリベクトル拡張データ構造記述子２１６０の１つに従ってフォーマットされる。
【０４１６】
別の例として、ＣＥ８００は、動作２３０４において読み取られた発信元ＤＳＤ及び任意選択で動作２３０６において読み取られたＸＤＳＤに基づいて、キュー／メモリから（次の）発信元データ要素を読み取る２３１０を実行する。幾つかの状況では、発信元ＤＳＤは、オペランドがメモリを発端とすることを指定し（例えば、タイプ２１４９を介して）、Ｄ配列８４４は、（例えば、ベースアドレス２１４２、ＷＬＩ２１５２、及びストライド２１５３の１若しくはそれ以上に部分的に基づいて）ＤＳＤによって指定されたアドレスにおいてＤストア８４８又はメモリ８５４からデータ要素を読み取る。幾つかの状況では、発信元ＤＳＤは、オペランドがファブリックを発端とすることを指定し（例えば、タイプ２１０９を介して）、ＣＥ８００は入力キュー８９７の１つからデータ要素を読み取る。幾つかの実施形態及び／又は使用状況では、データ要素は、入力キュー８９７の１つからデータパス８５２に直接送信される。他の実施形態及び／又は使用状況では、データ要素は、入力キュー８９７の１つからＲＦ８４２に、そしてＲＦからデータパス８５２に送信される。幾つかの実施形態では、入力キュー８９７の１つは、ＤＳＤの部分（例えば、ＵＴＩＤ２１０２、ＳＣ２１１２、及びＳＱ２１１３の１若しくはそれ以上）によって暗黙的に指定される。幾つかの状況では、ＣＥは、現在のタスク（例えば、動作２３０３において得られた命令に関連付けられたタスク）のカラーに関連付けられたキューから読み取る。幾つかの状況（例えば、ＳＱ２１１３が「１」である）では、ＣＥは、ＵＴＩＤ２１０２によって指定されたキューから読み取る。幾つかの状況（例えば、ＳＣ２１１２が「１」である）では、ＣＥは、ＣＨ２１１４と連結されたＵＴＩＤ２１０２によって指定されたカラーに関連付けられたキューから読み取る。幾つかの状況では、ＣＥは、ＳＷ２１０４に基づいて指定されたキューから１つ、２つ、又は４つのデータ要素を読み取る。
【０４１７】
幾つかの実施形態及び／又は使用状況では、ＣＥ８００が、入力キュー８９７の指定されたキュー内で利用可能なデータ要素よりも多数のデータ要素を読み取ろうとする場合、又は代替的には、空のＦＩＦＯ（例えば、図２１ＥによるＤＳＤにより実施される）から読み取ろうとする場合、ＣＥ８００はストールする。幾つかの実施形態及び／又は使用状況（例えば、マイクロスレッド処理）では、ピッカー８３０は、データ要素を待っている間、入力キュー８９７から異なるタスクを選択することができ、それにより、ＣＥ８００はストールを回避することができる。マイクロスレッド処理については、図２６及び「マイクロスレッド処理」セクションにおいてより詳細に説明される。
【０４１８】
別の例として、ＣＥ８００は、データ要素に対して（次の）演算を実行２３１１を実行する。幾つかの実施形態では、データパス８５２は、動作２３０３において得られた命令によって指定される演算への入力として、動作２３１０において読み取ったデータ要素を使用する。幾つかの状況（例えば、計算演算）では、動作２３１１は出力データ要素を生成し、一方、他の状況（例えば、比較演算）では、動作２３１１は出力データ要素を生成しない。幾つかの実施形態では、データパス８５２は、２つ以上の演算を同時に（例えば繰り返しにより）実行することができ、例えば、ＳＩＭＤ実行リソースを使用して２つ又は４つの乗累算演算を同時に実行することができる。
【０４１９】
別の例として、ＣＥ８００は、動作２３０４において読み取った宛先ＤＳＤ及び任意選択で動作２３０６において読み取ったＸＤＳＤに基づいて、（次の）宛先データ要素をキュー／メモリに書き込む２３１２を実行する。幾つかの状況では、宛先ＤＳＤは、オペランドがメモリを宛先とすることを指定し（例えば、タイプ２１４９を介して）、Ｄ配列８４４は、（例えば、ベースアドレス２１４２、ＷＬＩ２１５２、及びストライド２１５３の１若しくはそれ以上に部分的に基づいて）宛先ＤＳＤによって指定されたアドレスにおいてＤストア８４８又はメモリ８５４にデータ要素を書き込む。
【０４２０】
様々な実施形態及び／又は使用状況では、動作２３１２（宛先データ要素をファブリックに書き込む）の部分は、図１４のウェーブレットとしてデータ要素を出力キューに提供１４０８に概念的に対応及び／又は概念的に関連する。幾つかの状況では、宛先ＤＳＤは、オペランドがファブリックに送信されることを指定し（例えば、タイプ２１２９を介して）、ＣＥ８００は、データ要素からウェーブレットを生成し（例えば、ファブリック出力データ構造記述子２１２０に部分的に基づいて）、出力キュー８５９及びオンランプ８６０を介して、ファブリックへのルータ６００（図６の）に送信する。幾つかの状況では、ＣＥは、宛先ＤＳＤのＳＷ２１２４に基づいて１つ、２つ、又は４つのデータ要素をウェーブレットとして送信する。
【０４２１】
幾つかの実施形態及び／又は使用状況では、ＣＥ８００が、ルータ６００で利用可能なリソースよりも多くのウェーブレットを送信しようとする（例えば、図６のデータキュー６５０内のリソースが不十分である）場合、又は代替的には、満杯のＦＩＦＯに書き込もうとする場合（例えば、図２１ＥによるＤＳＤにより実施されるように）、ＣＥ８００はストールする。幾つかの実施形態及び／又は使用状況（例えば、マイクロスレッド処理）では、ピッカー８３０は、より多くのリソースを待っている間、入力キュー８９７から異なるタスクを選択することができ、それにより、ＣＥ８００はストールを回避することができる。マイクロスレッド処理については、図２６及び「マイクロスレッド処理」セクションにおいてより詳細に説明される。
【０４２２】
別の例として、ＣＥ８００は動作２３１３を実行する。幾つかの実施形態では、Ｄ配列８４４は、いくつのデータ要素が処理されたか（例えば、各データ要素でカウンタをインクリメントすることにより）を判断し、これをベクトルの長さ（例えば、長さ２１０１）と比較する。
【０４２３】
図２４は、データ構造記述子復号化フロー２４００としてデータ構造記述子を復号化する一実施形態の選択された細部を図示する。様々な実施形態及び／又は使用状況では、メモリデータ構造記述子フロー２４００は、ファブリック又はメモリベクトルを記述する、各ＤＳＲで実行される動作２３０４、２３０６、２３１０、及び２３１２（図２３の）の全て又は任意の部分の概念表現である。まとめると、図２３は、初期化されたＤＳＲにより指定される１若しくはそれ以上のオペランドを有する命令をフェッチし復号化すること、ＤＳＲを読み取って対応するＤＳＤを取得し復号化すること、ＤＳＤに従って（次の）発信元データ要素を読み取ること、発信元データ要素に対して動作を実行すること、ＤＳＤに従って演算の出力データ要素を書き込むこと、及び完了まで、次の発信元データ要素を読み取ることに反復して戻ることを図示する。図２４は、ファブリックベクトル（ファブリックベクトル２４１０）及びメモリベクトル（メモリベクトル２４２０）について、ＤＳＲから得られたＤＳＤの復号化及び任意選択で１若しくはそれ以上のＸＤＳＲ及びストライドレジスタを読み取り、対応するＸＤＳＤ及びストライド値を取得し復号化して、命令（例えば、発信元０、発信元１、及び宛先の任意の１若しくはそれ以上）のメモリベクトルのデータ要素にアクセスするのに使用されるメモリ・アクセス・パターンを特定することに関する更なる詳細を図示する。概念的に、図２４に図示される動作は、図２３の動作２３０４を介して得られた各ＤＳＤで実行される。幾つかの実施形態では、メモリデータ構造記述子フロー２４００の動作はＣＥ（例えば、ＣＥ８００）によって実行される。
【０４２４】
ＤＳＤ（例えば、図２３の動作２３０４を介して得られる）の復号化は、例えば、図２１Ａ又は図２１Ｂにより、ＤＳＤがファブリックベクトルに対応するか否か（タイプ＝ファブリック？２４１１）をＣＥが判断することによって開始される（開始２４０１）。対応する場合、ＤＳＤによって記述されたオペランドのアクセスは、ＤＳＤを使用してファブリックベクトルとして進められ（ＤＳＤを介してアクセス２４１２）、例えば、オペランドが発信元である（図２１Ａ）場合、動作２３１０（図２３の）は、ＤＳＤに従ってファブリックから読み取り、オペランドが宛先（デスティネーション）である（図２１Ｂ）場合、動作２３１２（図２３の）はＤＳＤに従ってファブリックに書き込む。次に、ＤＳＤの復号化は完了する（終わり２４９９）。
【０４２５】
ＤＳＤがファブリックベクトルに対応しない場合、ＤＳＤはメモリベクトルに対応する。次に、ＣＥは、ＤＳＤが、例えば図２１Ｃによる１Ｄメモリベクトルに対応するか否かを判断する（タイプ＝ＸＤＳＲ？２４２１）。メモリベクトルに対応する場合、ＤＳＤにより記述されるオペランドのアクセスは、ＤＳＤを使用して１Ｄメモリベクトルとして進められる（ＤＳＤを介して１Ｄにアクセス２４２７）。例えば、オペランドが発信元である場合、動作２３１０は、ＤＳＤにより記述された１Ｄメモリベクトルに従ってメモリから発信元を読み取り、オペランドが宛先（デスティネーション）である場合、動作２３１２は、ＤＳＤにより記述された１Ｄメモリベクトルに従ってメモリに書き込む。次に、ＤＳＤの復号化は完了する（終わり２４９９）。図２３におけるデータ要素の反復（動作２３１０〜２３１３）は、ＤＳＤにより記述された１Ｄメモリベクトルに従ってオペランド・メモリ・アドレスを進める。
【０４２６】
ＤＳＤが１Ｄメモリベクトルに対応しない場合、ＤＳＤは４Ｄメモリベクトル（例えば、図２１Ｄによる）又は循環バッファ（例えば、図２１Ｅによる）に対応する。ＣＥは、ＤＳＤ（ＤＳＤを介して指定されたＸＤＳＲを読み取る２４２２も、図２３の（任意選択）ＸＤＳＲを読み取る２３０６に概念的に対応する）によって指定されたＸＤＳＲを読み取り、ＸＤＳＤを取得する。ＸＤＳＲは、タイプ２１６９（図２１Ｄの）又はタイプ２１８９（図２１Ｅの）によって指定される。
【０４２７】
次に、ＣＥは、ＸＤＳＤが４Ｄメモリベクトル（例えば、図２２Ｂによる）を指定するか否かを判断する。４Ｄメモリベクトルを指定する場合、ＣＥは任意選択で、ＸＤＳＤにより任意選択で指定されるように、１若しくはそれ以上のストライドレジスタを読み取る（これもまた概念的に図２３の（任意選択）ＸＤＳＲを読み取る２３０６に対応する（任意選択）ストライドレジスタを読み取る２４２４）。ＤＳＤ、ＸＤＳＤ、及び任意の任意選択なストライド値（ストライドレジスタから得られる）により記述されたオペランドのアクセスは、ＤＳＤ、ＸＤＳＤ、及び任意選択のストライド値を使用して４Ｄメモリベクトルとして進められる（ＸＤＳＤを介して４Ｄにアクセス２４２８）。例えば、オペランドが発信元である場合、動作２３１０は４Ｄメモリベクトルに従ってメモリから発信元を読み取り、オペランドが宛先（デスティネーション）である場合、動作２３１２は４Ｄメモリベクトルに従ってメモリに書き込む。次に、ＤＳＤの復号化は完了する（終わり２４９９）。図２３におけるデータ要素の反復（動作２３１０〜２３１３）は、ＤＳＤにより記述された４Ｄメモリベクトルに従ってオペランド・メモリ・アドレスを進める。
【０４２８】
ＸＤＳＤが４Ｄメモリベクトルに対応しない場合、ＸＤＳＤは循環バッファ（例えば、図２２Ａによる）に対応する。ＤＳＤ及びＸＤＳＤにより記述されるオペランドのアクセスは、ＤＳＤ及びＸＤＳＤを使用して循環バッファとして進められる（ＸＤＳＤを介して循環バッファにアクセス２４２９）。例えば、オペランドが発信元である場合、動作２３１０は循環バッファに従ってメモリから発信元を読み取り、オペランドが宛先（デスティネーション）である場合、動作２３１２は循環バッファに従ってメモリに書き込む。次に、ＤＳＤの復号化は完了する（終わり２４９９）。図２３におけるデータ要素の反復（動作２３１０〜２３１３）は、ＤＳＤにより記述された循環バッファに従ってオペランド・メモリ・アドレスを進める。
【０４２９】
様々な実施形態では、Ｄ配列８４４は、動作２３０４（図２３の）において読み取ったＤＳＤに基づいてタイプ＝ファブリック？２４１１及び／又はタイプ＝ＸＤＳＤ？２４２１を実行する。幾つかの実施形態では、ＤＳＤのタイプフィールド（例えば、図２１Ａのタイプ２１０９、図２１Ｂのタイプ２１２９、図２１Ｃのタイプ２１４９、図２１Ｄのタイプ２１６９、又は図２１Ｅのタイプ２１８９）は、データ構造が、ファブリックベクトルである（例えば、タイプ＝「０」）か、１Ｄベクトルであるか（例えば、タイプ＝「１」）か、ＸＤＳＤタイプである（例えば、タイプ＝「２〜７」）を判断する。様々な実施形態（例えば、タイプ＝「２〜７」）では、タイプフィールドの値は、ＤＳＲ８４６のどのＸＤＳＲを動作２４２２で読み取るかを指定する。幾つかの実施形態では、Ｄ配列８４４は動作２４２２を実行し、ＤＳＲ８４６からＸＤＳＤを受信する。幾つかの他の実施形態では、ＤＳＲ８４６は動作２４２１及び２４２２を実行し、ＤＳＤ及びＸＤＳＤをＤ配列８４４に送信する。
【０４３０】
別の例として、Ｄ配列８４４は、動作２４２２のＸＤＳＤに基づいてタイプ＝４Ｄベクトル？２４２３を実行する。幾つかの実施形態では、ＸＤＳＲから読み取られたＸＤＳＤのタイプフィールド（例えば、図２２Ａのタイプ２２１１又は図２２Ｂのタイプ２２４１）は、データ構造が４Ｄベクトルの１つである（例えば、ＸＤＳＤタイプ＝「０」）か、それとも循環バッファである（ＸＤＳＤタイプ＝「１」）か、を判断する。
【０４３１】
別の例として、Ｄ配列８４４は、例えば、本明細書の他の箇所に記載されるように、ＤＳＤのベースアドレス２１４２、ＷＬＩ２１５２、長さ２１４１、及びストライド２１５３を使用してＤＳＤ（例えば、動作２３０４の）に基づいてメモリアドレスを計算することにより、動作２４２７に従ってメモリアクセスを生成する。同様に、Ｄ配列８４４は、例えば、本明細書の他の箇所に記載されるように、ＤＳＤ及びＸＤＳＤのベースアドレス２１６２、長さ２１６１、ＷＬＩ２１７２、ストライド２２４５、ストライド選択１  ２２４４．１、及びＤＦ２２４３を使用してＤＳＤ（例えば、動作２４０４の）及び動作２４２２のＸＤＳＤに基づいてメモリアドレスを計算することにより、動作２４２８に従ってメモリアクセスを生成する。同様に、Ｄ配列８４４は、例えば、本明細書の他の箇所に記載されるように、ＤＳＤ及びＸＤＳＤのベースアドレス２１８２、長さ２１８１、ＷＬＩ２１９２、開始アドレス２２１２、及び終了アドレス２２１３を使用してＤＳＤ（例えば、動作２４０４の）及び動作２４２２のＸＤＳＤに基づいてメモリアドレスを計算することにより、動作２４２９に従ってメモリアクセスを生成する。
【０４３２】
幾つかの実施形態では、Ｄ配列８４４は、計算された各アドレスをＤストア８４８及びメモリ８５４の一方に送信する。計算されたアドレスの受信に応答して、Ｄストア及び／又はメモリは、計算されたアドレスにおける２バイトのデータにアクセスする。
【０４３３】
命令フォーマット
最初の数字が「８」の図２５Ａ〜図２５Ｃの説明での各要素識別子は、図８の要素を指し、簡潔にするために、その他の点では図８の要素であるものとして特に識別されない。
【０４３４】
図２５Ａは、複数オペランド命令２５１０として複数オペランド命令の一実施形態の選択された細部を図示する。複数オペランド命令２５１０は、２／３発信元１宛先オペランド命令（例えば、ＦＭＡＣＨ等の乗加算）、２発信元０宛先オペランド命令（例えば、ＬＴ１６等の比較）、及び１発信元１宛先オペランド命令（例えば、ＭＯＶ１６等の移動命令）の１つである。
【０４３５】
複数オペランド命令２５１０は様々なフィールドを有する：命令タイプ２５１１、演算コード２５１２、オペランド０符号化２５１３、オペランド１符号化２５１４、及び終了２５１５。オペランド０符号化２５１３は、オペランド０タイプ２５１３．１及びオペランド０  ２５１３．２を有する。オペランド１符号化２５１４は、オペランド１タイプ２５１４．１及びオペランド１  ２５１４．２を有する。幾つかの実施形態では、複数オペランド命令２５１０は２０ビットを有する。
【０４３６】
幾つかの実施形態では、命令タイプ２５１１の値は、以下の表に従って異なるタイプの命令（２／３発信元１宛先命令タイプ及び１発信元１宛先命令タイプ）を区別する。様々な実施形態では、演算コード２５１２の値は特定の演算（例えば、乗算、加算、又は減算）を指定する。演算コード２５１２の長さは、以下の表に記載されるように、異なる命令タイプで変わる。
【０４３７】
【表３】
0006860694.tif 000004
【０４３８】
幾つかの実施形態では、オペランド０符号化２５１３は、以下の表に従って発信元及び／又は宛先オペランドを記述する。幾つかの実施形態では、オペランド１符号化２７１４は発信元オペランドを記述する。
【０４３９】
【表４】
0006860694.tif 000005
【０４４０】
幾つかの実施形態では、オペランド０  ２５１３．２及びオペランド１  ２５１４．２はそれぞれ４ビットフィールドを有する。幾つかの実施形態では、オペランド０タイプ２５１３．１及びオペランド１タイプ２５１４．１はそれぞれ２ビットフィールドを有し、オペランド０  ２５１３．２及びオペランド１  ２５１４．２をいかに解釈するかをそれぞれ決定する。２／３発信元オペランド１宛先オペランド命令の場合、オペランド０タイプ２５１３．１は以下の表に従って解釈される。
【０４４１】
【表５】
0006860694.tif 000006
【０４４２】
例えば、オペランド０タイプ２５１３．１の値が「１」であり、オペランド０  ２５１３．２の値が「４」である場合、オペランド０符号化２５１３は、発信元０オペランドがＳ０ＤＳＲ［４］により記述されるベクトルであり宛先オペランドがＤＤＳＲ［４］により記述されたベクトルであることを指定する。
【０４４３】
２発信元オペランド０宛先オペランド命令の場合、オペランド０タイプ２５１３．１は以下の表に従って解釈される。
【０４４４】
【表６】
0006860694.tif 000007
【０４４５】
例えば、オペランド０タイプ２５１３．１の値が「０」であり、オペランド０  ２５１３．２の値が「４」である場合、オペランド０符号化２５１３は、発信元０オペランドがＳ０ＤＳＲ［４］により記述されるベクトルであることを指定する。
【０４４６】
１発信元オペランド１宛先オペランド命令の場合、オペランド０タイプ２５１３．１は以下の表に従って解釈される。
【０４４７】
【表７】
0006860694.tif 000008
【０４４８】
例えば、オペランド０タイプ２５１３．１の値が「０」であり、オペランド０  ２５１３．２の値が「４」である場合、オペランド０符号化２５１３は、宛先オペランドがＤＤＳＲ［４］により記述されるベクトルであることを指定する。
【０４４９】
複数オペランド命令２５１０の場合、オペランド１タイプ２５１４．１は以下の表に従って解釈される。
【０４５０】
【表８】
0006860694.tif 000009
【０４５１】
例えば、オペランド０タイプ２５１３．１の値が「０」であり、オペランド０  ２５１３．２の値が「４」である場合、オペランド０符号化２５１３は、宛先オペランドがＤＤＳＲ［４］により記述されるベクトルであることを指定する。
【０４５２】
様々な実施形態では、即値である発信元１オペランドは、幾つかの所定の値（例えば、０、１、及び−１）及びＬＦＳＲにより生成される疑似乱数の１つを指定する。例えば、オペランド１タイプ２５１４．１の値が「３」であり、オペランド１  ２５１４．２の値が「８」である場合、オペランド１符号化２５１４は、ＬＦＳＲにより生成されるＰＲＮを指定する。
【０４５３】
様々な実施形態では、浮動小数点即値である発信元１オペランドは、幾つかの所定の値（例えば、０、１、−１、＋無限、−無限、最小正規化数、最大正規化数、−最小正規化数、−最小正規化数）及びＬＦＳＲにより生成される疑似乱数の１つを指定する。例えば、オペランド１タイプ２５１４．１の値が「３」であり、オペランド１  ２５１４．２の値が「８」である場合、オペランド１符号化２５１４は、ＬＦＳＲにより生成されるＰＲＮを指定する。
【０４５４】
幾つかの実施形態では、終了２５１５は、命令がタスクにおける最後の命令であることを指定する１ビットフィールドを有する。命令が実行を終えると、タスクは終了し、新しいタスクを選択し実行することができる（例えば、終了８１２及びピッカー８３０を介して）。
【０４５５】
図２５Ｂは、１発信元０宛先命令２５２０として、１発信元０宛先オペランド命令の一実施形態の選択された細部を図示する。１発信元０宛先命令２５２０は、命令タイプ２５２１、演算コード２５２２、オペランド１符号化２５２３、即値ハイ２５２４、及び終了２５２５を有する。オペランド１符号化２５２３は、発信元オペランドを記述し、オペランド１タイプ２５２３．１及びオペランド１  ２５２３．２を有する。幾つかの実施形態では、１発信元０宛先命令２５２０は２０ビットを有する。
【０４５６】
幾つかの実施形態では、命令タイプ２５２１は、命令が１発信元０宛先オペランド命令であることを指定する４ビット「１１１１」を有し、演算コード２５２２は、特定の演算（例えば、ブロック、ブロック解除、アクティベート、アクティブＰＲＮＧを設定、データフィルタ、条件付き分岐、及びジャンプ）を指定する４ビットフィールドを有する。
【０４５７】
幾つかの実施形態では、即値ハイ２５２４は４ビットフィールドを有する。幾つかの状況では、オペランド１  ２５２３．２と連結された即値ハイ２５２４は、８ビット即値を形成する。
【０４５８】
幾つかの実施形態では、オペランド１タイプ２５２３．１は、オペランド１  ２５２３．２がいかに解釈されるかを指定する２ビットフィールドを有する。オペランド１タイプ２５２３．１が「０」である場合、オペランド１符号化２５２３はベクトル（例えば、入力キュー８９７からのデータ要素のファブリックベクトル又はメモリ８５４及びＤストア８５４の一方におけるデータ要素のメモリベクトル）を指定し、オペランド１  ２５２３．２の値は、ＤＳＲ８４６の１２個のＳ１ＤＳＲのいずれがベクトルを記述するかを指定する。オペランド１タイプ２５２３．１が「１」である場合、オペランド１符号化２５２３は、メモリ（例えば、メモリ８５４及びＤストア８４８の一方）内の、オペランド１  ２５２３．２との即値ハイ２５２４の連結により形成される８ビットアドレスにおける値を記述する。オペランド１タイプ２５２３．１が「２」である場合、オペランド１符号化２５２３は、オペランド１  ２５２３．２の値により識別されるレジスタ（例えば、ＲＦ８４２の１つ）内の値を記述する。オペランド１タイプ２５２３．１が「３」である場合、オペランド１符号化２５２３は即値を記述する。演算コード２５２２が、１６ビット整数オペランドに対して演算する演算（例えば、ブロック、ブロック解除、又はアクティベート）を指定する場合、即値は８ビットを有し、即値ハイ２５２４及びオペランド１  ２５２３．２の連結である。
【０４５９】
幾つかの実施形態では、終了２５２５は、命令がタスクにおける最後の命令であることを指定する１ビットフィールドを有する。命令が実行を終えると、タスクは終了し、新しいタスクを選択し実行することができる（例えば、終了８１２及びピッカー８３０を介して。１発信元０宛先命令２５２０が条件付き分岐である場合、タスクは、条件付き分岐がとられない場合のみ、終了する。
【０４６０】
図２５Ｃは、即値命令２５３０として、即値命令の一実施形態の選択された細部を図示する。即値命令２５３０は、命令タイプ２５３１、演算コード２５３２、オペランド０  ２５３３．２、及び即値２５３４を有する。幾つかの実施形態では、即値ロー２５３４．１は９ビットフィールを有し、即値ハイ２５３４．２は１ビットフィールドを有する。即値ロー２５３４．１及び即値ハイ２５３４．２の連結は集合的に、即値２５３４と呼ばれる（即値２５３４と図示される）。幾つかの実施形態では、即値命令２５２０は２０ビットを有する。
【０４６１】
幾つかの実施形態では、命令タイプ２５３１は、命令が即値命令であることを指定する１ビットフィールド「０」を有し、演算コード２５３２は、特定の演算（例えば、発信元０ＤＳＲロード、発信元１ＤＳＲロード、宛先ＤＳＲロード、発信元０ＤＳＲ記憶、発信元１ＤＳＲ記憶、及び宛先ＤＳＲ記憶）を指定する５ビットフィールドを有する。幾つかの状況では、即値命令２５３０（例えば、ＤＳＲロード命令及びＸＤＳＲロード命令）の実行は、メモリ８５４及びＤストア８４８の１つからデータをＤＳＲ８４６のＤＳＲにロードする。他の状況では、即値命令２５３０（例えば、ＤＳＲ記憶命令及びＸＤＳＲ記憶命令）の実行は、ＤＳＲ８４６のＤＳＲからのデータをメモリ８５４及びＤストア８４８の一方に記憶する。
【０４６２】
幾つかの実施形態では、オペランド０  ２５３３．２は４ビットフィールドを有し、演算コード２５３２は、オペランド０  ２５３３．２がいかに解釈されるかを決定する。幾つかの状況（例えば、オペランド０  ２５３３．２が、ジャンプ演算等のレジスタオペランドを有さない演算を指定する場合）では、即値ロー２５３４．１、オペランド０  ２５３３．２、及び即値ハイ２５３４．２は連結されて、１４ビット即値を形成する。幾つかの他の状況では、即値２５３４は符号拡張されて、１６ビット即値を形成する。更に他の状況では、即値２５３４は符号拡張されて、１５ビットアドレスを形成する。更に他の状況では、即値２５３４は１ビット左にシフトし、符号拡張されて、１５ビットアドレス（例えば、３２ビットデータの）を形成する。
【０４６３】
マイクロスレッド処理
図２６は、マイクロスレッド処理命令フロー２６００としてマイクロスレッド処理された命令に従った処理の選択された細部を図示する。幾つかの実施形態では、フロー２６００の動作はＣＥ（例えば、ＣＥ８００）により実行される。様々な実施形態及び／又は使用状況では、フロー２６００は観念上、図２３のフロー２３００、図２１Ａのファブリック入力データ構造記述子２１００、及び図２１Ｂのファブリック出力データ構造記述子２１２０に関連する。
【０４６４】
フロー２６００は、図２３のデータ構造記述子フロー２３００の状況で行われる処理を説明する。特に、フロー２６００は、（次の）ソースデータ要素をキュー／メモリから読み出す２３１０Ａとして、図２３の（次の）ソースデータ要素をキュー／メモリから読み出す２３１０の代替の実施形態を図示し、マイクロスレッド処理に関連する処理の様々な細部を図示する。図２３の状況と同様に、処理は、ＣＥがＤＳＲから１若しくはそれ以上のＤＳＤを読み出す（ＤＳＲを読み出す２３０４）ことにより開始される。幾つかの状況では、発信元０オペランド、発信元１オペランド、及び宛先オペランドの１若しくはそれ以上のＤＳＲが読み出される。ＤＳＤ及びファブリック入力、ファブリック出力、ＦＩＦＯ入力、及びＦＩＦＯ出力の１若しくはそれ以上の状態に基づいて、ＣＥは、ストール状況が存在するか否かを判断する（ストール？２６０３）。ストール状況が存在しない場合、ＣＥは１若しくはそれ以上のソースデータ要素をファブリック及び／又はメモリから読み出す（（次の）ソースデータ要素をキュー／メモリから読み出す２６１０）。
【０４６５】
ストール状況が存在する場合、ＣＥは、マイクロスレッド処理が、図２３のＤＳＲを用いて命令をフェッチ／復号化２３０３においてフェッチされた命令に対して可能であるか否かを判断する（マイクロスレッド処理が可能？２６０６）。可能な場合、ＣＥは、マイクロスレッド処理された命令についての情報（例えば、ＤＳＤの更新された長さ、ストールの原因、及び／又は命令自体の全て又は任意の部分）を保存する（マイクロスレッド処理された命令の情報を保存２６０７）。ＣＥは、次の命令を実行する（次の命令を実行２６０８）。幾つかの実施形態及び／又は使用状況では、次の命令は、マイクロスレッド処理された命令の直後の命令である。幾つかの他の実施形態及び／又は使用モデルでは、次の命令は異なるタスク（例えば、実行のためにスケジューラにより選択されたタスク）の部分である。
【０４６６】
ＣＥは周期的に、例えば、コア・クロック・サイクル毎に、ストール状況をモニタし（例えば、動作２６０３において検出される）、ストール状況が鎮まり、オペランドが使用可能であるか否かを検出する（ストール解決？２６０９）。ストールが解決されていない場合、ＣＥは次の命令を引き続き実行する（動作２６０８）。ストールが解決された場合、ＣＥは、ソースデータ要素を読み出す（（次の）ソースデータ要素をキュー／メモリから読み出す２６１０）ことにより、マイクロスレッド処理された命令の実行を再開し、それにより、フローを終える。マイクロスレッド処理が可能ではない場合、ＣＥは、ストール状況が鎮まり、オペランドが使用可能になる（ストール解決？２６０５）まで処理をストールする。ストールが解決された場合、ＣＥは、ソースデータ要素を読み出す（（次の）ソースデータ要素をキュー／メモリから読み出す２６１０）ことにより、命令の実行を再開し、それにより、フローを終える。
【０４６７】
様々な実施形態及び／又は使用状況では、フロー２６００の動作は概念上、ＣＥ、例えば、図８のＣＥ８００に関連する。動作２３０４は、図２３の動作２３０４の特定の例であり、ＤＳＲの少なくとも１つは、マイクロスレッド処理を可能にする（例えば、ＵＥ２１０３及びＵＥ２１２３の１つがそれぞれイネーブルされる）ファブリックＤＳＤ（例えば、図２１Ａのファブリック入力データ構造記述子２１００及び図２１Ｂのファブリック出力データ構造記述子２１２０の１つに従う）を保持する。幾つかの実施形態では、ストールは、データ要素への空間が不十分な宛先ＦＩＦＯ（例えば、図２１Ｅの循環メモリ・バッファ・データ構造記述子２１８０及び図２２Ａの循環メモリバッファ拡張データ構造記述子２２１０に従う）、不十分なデータ要素を有するソースＦＩＦＯ、不十分なデータ要素を有する入力キュー（例えば、入力キュー８９７の１つ）を有する仮想チャネルのソース・ファブリック・ベクトル、及びデータ要素への空間が不十分な出力キュー（例えば、出力キュー８５９の１つ）を有する仮想チャネルの宛先ファブリックベクトルの１若しくはそれ以上により生じる。幾つかの実施形態及び／又は使用状況では、十分な数のデータ要素及び／又は十分な空間は、動作２３０４において読み出されたＤＳＤのＳＩＭＤ幅に従って判断される（例えば、図２１Ａのファブリック入力データ構造記述子２１００のＳＷ２１０４）。
【０４６８】
幾つかの実施形態及び／又は使用状況では、動作２６０７は、マイクロスレッド処理された命令（例えば、デコーダ８４０から）についての情報をＵＴ状態８４５に保存する。様々な実施形態では、情報は、動作２６０９においてモニタするストール状況（例えば、不十分な空間を有するＦＩＦＯ、不十分なデータ要素を有するＦＩＦＯ、ファブリック入力、及びファブリック出力の１若しくはそれ以上を待つ）、ＤＳＤの部分（例えば、Ｄ配列８４４及びＤＳＲ８４６の１若しくはそれ以上からのキューを識別する情報）、及び／又は命令自体の全て又は任意の部分の１若しくはそれ以上を含む。様々な実施形態では、ＣＥは、動作２３０４において読み出された各ＤＳＤに関連付けられた状態を書き込む。例えば、ファブリック入力から３２個のデータ要素を読み出し、３２個のデータ要素を１Ｄメモリベクトルに書き込むことを指定する、マイクロスレッド処理された命令は、４つのデータ要素を読み出し書き込んだ後、ストールする。長さが現在、２８データ要素であることを示す発信元ＤＳＤの長さ２１０１及び宛先ＤＳＤの長さ２１４１は書き込まれる。ＣＥはまた、次のアドレスを宛先ＤＳＤのベースアドレス２１４２に書き込む（例えば、４つのデータ要素の長さにストライド２１５３を掛けたものだけアドレスを増分する）。幾つかの他の実施形態では、ＣＥは、動作２３０４において読み出された各ＤＳＤのシャドーバージョンに命令情報の全て又は任意の部分を書き込む。
【０４６９】
幾つかの実施形態及び／又は使用状況では、動作２６１０は、ＵＴ状態８４５内のマイクロスレッド処理された命令について記憶された情報及び動作２６０７において更新された各ＤＳＤに従って実行される。例えば、動作２６０９が動作２６１０に流れる場合、部分リストアが任意選択で及び／又は選択で、ＵＴ状態８４５から情報を読み出すことにより実行される。様々な他の実施形態では、動作２６１０は、ＵＴ状態８４５内のマイクロスレッド処理された命令について記憶された情報及び動作２６０７において更新されたＤＳＤの各シャドーバージョンに従って実行される。例えば、動作２６０９が動作２６１０に流れる場合、部分リストアが任意選択で及び／又は選択で、ＵＴ状態８４５と、動作２６０７において更新されたＤＳＤの各シャドーバージョンとの任意の組合せから情報を読み出すことにより実行される。
【０４７０】
ディープ・ラーニング・アクセラレータ使用例
様々な実施形態及び／又は使用状況では、本明細書の他の箇所に記載されるように、ＰＥのファブリック（例えば、ウェーハスケール集積を介して実施され、例えば、図４に図示されるような）等のディープ・ラーニング・アクセラレータは、ニューラルネットワークのトレーニング及び／又はトレーニングされたニューラルネットワークに関して推論を実行するのに使用可能である。トレーニングは、幾つかの状況では、トレーニング刺激に応答してニューラルネットワークの重みを決定することを含む。確率勾配降下（Ｓｔｏｃｈａｓｔｉｃ  Ｇｒａｄｉｅｎｔ  Ｄｅｓｃｅｎｔ：ＳＧＤ）、ミニバッチ勾配降下（Ｍｉｎｉ−Ｂａｔｃｈ  Ｇｒａｄｉｅｎｔ  Ｄｅｓｃｅｎｔ：ＭＢＧＤ）、連続伝搬勾配降下（Ｃｏｎｔｉｎｕｏｕｓ  Ｐｒｏｐａｇａｔｉｏｎ  Ｇｒａｄｉｅｎｔ  Ｄｅｓｃｅｎｔ：ＣＰＧＤ）、及びリバース・チェック・ポイント（Ｒｅｖｅｒｓｅ  ＣｈｅｃｋＰｏｉｎｔ：ＲＣＰ）等の様々な技法がトレーニングに使用可能である。以下、ＣＰＧＤを他の技法と対比し、次に、ＳＧＤ、ＭＢＧＤ、ＣＰＧＤ、及びＲＣＰのそれぞれについてより詳細に説明する。
【０４７１】
従来のディープ・ニューラル・ネットワーク・トレーニング手法（例えば、ＳＧＤ及びＭＢＧＤ）は、いわゆる固定デルタ（ａｎｃｈｏｒｅｄ−ｄｅｌｔａ）学習を使用していた。すなわち、デルタ導出重み更新は、トレーニングセット分岐又はミニバッチの全てのアクティベートの処理が完了するまで、「固定」又は一定に保持された。幾つかの状況では、固定デルタ学習のレイヤシーケンシャル性により、高レイテンシ・シーケンシャル・パラメータ更新（例えば、重み更新を含む）に繋がり、これにより収束が遅くなる。幾つかの状況では、固定デルタ学習は、限られたレイヤ並列性を有し、したがって、同時性が限られる。
【０４７２】
逆に、幾つかの状況では、ディープ・ニューラル・ネットワーク・トレーニングへの連続伝搬（別名即時デルタ（ｉｍｍｅｄｉａｔｅ−ｄｅｌｔａ））学習ルールの使用は、本明細書において教示されるように、レイヤ並列性を可能にすることにより、より高速の収束を提供し、パラメータ更新のレイテンシを低減し、同時性を増大させる。即時ネットワークパラメータから計算されるデルタは、現在パラメータ傾きに対応する更新情報を使用する。連続伝搬は、各レイヤが明示的な同期なしで他のレイヤと同時に学習できるようにすることによりレイヤ並列性を可能にする。その結果、ネットワークの深度に沿った並列性により、より多くの計算リソースをトレーニングに適用できるようになる。連続伝搬で利用可能な並列性は、幾つかの使用状況では、ＭＢＧＤ技法と比較して最高で１０倍のウォールクロック時間改善を実現する。連続伝搬手法はまた、アクティベートの複数のベクトルのモデルパラメータ値を記憶する追加のメモリの使用を回避できるようにもする。
【０４７３】
幾つかの実施形態及び／又は使用状況では、ニューラルネットワークは、ＳＧＤを実行する刺激の連続伝搬を使用してトレーニングされる。ＣＰＧＤを介したトレーニングの幾つかの実施形態では、ＲＣＰは、選択されたアクティベーションを再計算することにより、メモリに保持されるアクティベーションの数を低減（ひいてはメモリフットプリントを低減）できるようにする。幾つかの状況では、アクティベーションの再計算はまた、重みのトレーニング推定精度も改善する。ＲＣＰなしのトレーニングでは、１若しくはそれ以上の順方向パス中、ニューロンのあらゆるレイヤがアクティベーションを受信し、順方向パスに関連付けられた１若しくはそれ以上の逆方向パス（例えば、順方向パスに関連付けられた１若しくはそれ以上のデルタパス、チェインパス、及び重み更新パス）中に実行される計算に再使用するために、アクティベーションを保存する。幾つかの状況（例えば、比較的深いニューラルネットワーク）では、アクティベーションの保存から関連付けられた逆方向パスまでの時間は比較的長く、全てのアクティベーションの保存は、全て未満のアクティベーションの保存よりも比較的多くのメモリを使用する。
【０４７４】
例えば、ニューロンのレイヤの幾つか（例えば、あらゆる偶数レイヤ）のみが、各アクティベーションを保存し、他のレイヤは各アクティベーションを破棄する（例えば、あらゆる奇数レイヤ）。アクティベーションが保存されたレイヤ（例えば、あらゆる偶数レイヤ）は、最新の重みを使用してアクティベーションを再計算し、アクティベーションを破棄したレイヤ（例えば、あらゆる奇数レイヤ）に再計算されたアクティベーションを送信する。幾つかの状況では、再計算されたアクティベーションは破棄されたアクティベーションと異なり、その理由は、最新の重みが、順方向パス中に利用可能であった重みと異なる（例えば、順方向パスと関連付けられた逆方向パスとの間で、１若しくはそれ以上の重み更新が行われた）ためである。様々な実施形態では、アクティベーションを保存するレイヤ及びアクティベーションを破棄するレイヤの数及びタイプは、メモリの使用低減と計算の増大との所望のバランスに向けて最適化されるように選択される。一例として、３つ置きのレイヤがアクティベーションを保存し、他の全てのレイヤはアクティベーションを破棄する。別の例として、畳み込みレイヤが、アクティベーションを保存するように選択され、他のレイヤはアクティベーションを破棄するように選択される。
【０４７５】
様々な実施形態及び／又は使用状況では、ＳＧＤ、ＭＢＧＤ、及びＣＰＧＤの任意の１若しくはそれ以上は、ＲＣＰあり又はなしで、処理要素のファブリック（例えば、図４に図示されるような）、１若しくはそれ以上のＧＰＵ、１若しくはそれ以上のＣＰＵ、１若しくはそれ以上のＤＳＰ、１若しくはそれ以上のＦＰＧＡ、及び１若しくはそれ以上のＡＳＩＣの１若しくはそれ以上を介して実施される。
【０４７６】
例えば、逆方向伝搬ありのＳＧＤは、ニューラルネットワークのトレーニングに使用可能である（本明細書の他の箇所に記載されるように）。しかしながら、勾配降下を介した学習は、各重み更新が、ニューラルネットワーク全体を通した完全な順方向パスの完了後に行われる勾配測定からの情報を使用するため、本質的にシーケンシャルである。さらに、重み更新は、ニューラルネットワーク全体を通した対応する逆方向パス（順方向パス後の順方向パスに対応する）中に行われ、したがって、最後の重み更新は、対応する逆方向パス全体の完了後に行われる。
【０４７７】
ＭＢＧＤでは、ミニバッチにわたる勾配平均化によりＳＧＤよりも高い並列性が可能であり、幾つかのアクティベーション（アクティベーションの「ミニバッチ」）を並列処理する。しかしながら、シーケンシャル更新の速度は、ＳＧＤと比較して変わらず、重み更新は、ＳＧＤと同様に、ニューラルネットワーク全体を通した全ての対応する逆方向パスの完了後に完了する。より多くのアクティベーションを並列処理することによりミニバッチサイズが増大するにつれて、勾配ノイズは低減する。勾配ノイズが低減するポイントを超えると、幾つかの状況では、一般化が不良になる。
【０４７８】
ＣＰＧＤでは、アクティベーションがレイヤ全体を通してストリームで伝搬する間、ニューラルネットワークの全てのレイヤで重みを並列処理し更新することができる。したがって、ＣＰＧＤは、幾つかの実施形態及び／又は使用状況では、ＳＧＤ及びＭＢＧＤのシーケンシャル処理制限を克服する。
【０４７９】
ＲＣＰでは、ＲＣＰを用いない場合には記憶されるアクティベーションを（再）計算することを介してメモリの使用を低減することができ、ＳＧＤ、ＭＢＧＤ、及びＣＰＧＤと組み合わせて使用可能である。
【０４８０】
パイプライン流れ図は、様々なＳＧＤ技法、ＭＢＧＤ技法、ＣＰＧＤ技法、及びＲＣＰありのＣＰＧＤ技法の比較及び対比に使用可能である。パイプライン流れ図を用いて、トレーニング技法における情報フロー及び同時性が見られる。図２７Ａ〜図２７Ｄは、左から右へのニューラルネットワークのレイヤのパイプラインフローの実施形態を図示し、例えば、アクティベーションは左から入り、レイヤ計算の順方向パス伝搬は右に流れる。勾配計算は最も右側のレイヤで実行され、右から左への重み更新を含むレイヤ計算の逆方向パス伝搬が開始される。
【０４８１】
図２７Ａは、ＳＧＤのパイプラインフローの一実施形態を図示する。ニューラルネットワークのレイヤの重み更新は、ニューラルネットワークの全てのレイヤを通した対応する完全な順方向パス及び対応する完全な逆方向パスの完了後に完了する。次の順方向パスは、直前の順方向パスに対応する重み更新の完了後でのみ、開始される。図示のように、第１の順方向パス２７１１は実行される（図中、左から右に図示される最初のレイヤから最後のレイヤに）。次に、第１の逆方向パス２７２１が実行される（図中、右から左に図示される最後のレイヤから最初のレイヤに）。第１の逆方向パス２７２１中、重みは最後のレイヤから最初のレイヤに更新される。最後の重み更新（最初のレイヤの）は、第１の逆方向パス２７２１が完了するときに完了する。次に、第２の順方向パス２７１２が実行され（第１の逆方向パス２７２１中に更新された重みを使用して）、その後、第２の逆方向パス２７２２が続き、第２の逆方向パス２６２２中、重み更新が実行される。
【０４８２】
図２７Ｂは、ＭＢＧＤのパイプラインフローの一実施形態を図示する。複数のアクティベーションは同一の重みを用いて処理される。調整された平穏時（Ｑｕｉｅｔ  ｔｉｍｅ）を使用して、重み更新を同期する。幾つかの実施形態及び／又は使用状況では、ＭＢＧＤ処理は、ミニバッチサイズ（Ｎ）２７３１、オーバーヘッド２７３２、及び更新間隔（Ｕ）２７３３を特徴とする。
【０４８３】
勾配推定の計算に、ネットワークを通した完全な順方向パス及び完全な逆方向パスを使用し、したがって、順次依存性を生み出す勾配降下技法（例えば、ＳＧＤ及びＭＢＧＤ）と異なり、ＣＰＧＤは異なる構造を使用して、順次依存性を、持続した勾配生成を有する連続モデルで置換する。幾つかの実施形態及び／又は使用状況では、ＣＰＧＤでは、明示的な同期なしでニューラルネットワークの各レイヤを他のレイヤと同時にトレーニング（例えば、「学習」）できるようにすることによりレイヤ並列性が可能である。したがって、ニューラルネットワークの深度に沿った並列性により、より多くの計算リソースをトレーニングに適用することができる。様々な実施形態及び／又は使用状況では、ＣＰＧＤは、他の技法と比較して、同等の精度及びトレーニングの画期的な出来事として表される収束率の改善を提供する。
【０４８４】
図２７Ｃは、ＣＰＧＤのパイプラインフローの一実施形態を図示する。ＣＰＧＤ処理は、モデルを流動的に維持する。隠れ表現及びデルタは、あらゆる時間ステップであらゆるレイヤに入り、あらゆる時間ステップで重みが更新される。ＣＰＧＤ処理は同期調整演算である。幾つかの実施形態及び／又は使用状況では、ＣＰＧＤ処理は、それぞれ幾つかの順方向パスの１つ及び幾つかの対応する逆方向パスの１つを表す順方向パス２７５１及び対応する逆方向パス２７６１を特徴とする。動作において、複数の順方向パスの各順方向パスは互いと並列して動作し、複数の逆方向パスの各逆方向パスは互いと並列して動作し、複数の順方向パス及び複数の逆方向パスは、互いと並列して動作する。重み更新（逆方向パス中に行われる）は、重み更新が利用可能になるとすぐに、順方向パス及び逆方向パスによって使用される。
【０４８５】
特定の例として、順方向パス２７６５が開始され、後に順方向パス２７６６が開始される。順方向パス２７６５の少なくとも一部は、順方向パス２７６６の少なくとも一部と並列動作する。順方向パス２７６５の対応する逆方向パスの少なくとも一部は、順方向パス２７６６の少なくとも一部と並列動作する。さらに、対応する逆方向パスは、例としての重み更新使用２７６７により示されるように、順方向パス２７６６により使用される少なくとも幾つかの重み更新を含む。
【０４８６】
図２７Ｄは、ＲＣＰありのＣＰＧＤのパイプラインフローの一実施形態を図示する。ＲＣＰありのＣＰＧＤは、選択されたアクティベーションの保存を省き、その代わり、選択されたアクティベーションを再計算する。幾つかの実施形態及び／又は使用状況では、再計算は、更新された重みを用いて実行される。したがって、リバース・チェック・ポイントにより、メモリの低減が可能であり（時間の進行に伴う保存された隠れ表現にわたる垂直線で覆われたエリアの低減として図示される）、計算された隠れ表現と対応するデルタとの時間不一致が低減する。
【０４８７】
特定の例として、ＲＣＰありのＣＰＧＤ処理は、順方向パス２７７１及び対応する逆方向パス２７８１を特徴とする。第１のアクティベーションは、順方向パス中に計算され、アクティベーションの記憶２７８５に図示されるように、対応する逆方向パスで使用するためにレイヤに記憶される。アクティベーションの記憶２７８５は、順方向パス及び逆方向パスの部分中に行われ、他の用途では利用不可能である。メモリ低減の特定の例は、再計算されたアクティベーションの記憶２７８６で図示される。第２のアクティベーションは、順方向パス中に計算されるが、破棄され、いかなる記憶も必要としない。逆方向パス中、第２のアクティベーションは再計算され、再計算されたアクティベーションの記憶２７８６で図示されるように、逆方向パスでの使用のためにレイヤに記憶される。再計算されたアクティベーションの記憶２７８６は、順方向パス全体を通して占有されず、他の使用（例えば、他の順方向パス、他の逆方向パス）に利用可能であり、それにより、必要とされるメモリを低減する。
【０４８８】
並列化をより一般に考えると、幾つかの実施形態及び／又は使用状況では、計算（例えば、ニューラル・ネットワーク・トレーニング）の並列化は、同時に動作する複数の別個の計算ユニットに計算を拡散させる。モデル並列状態では、別個のユニットが、別個のモデルパラメータを使用して同じニューラルネットワークを同時に評価する。データ並列状態では、別個の作業者が、同じ正式モデルパラメータを使用して別個のネットワークの入力を同時に評価する。幾つかのスケーリング技法は、レイヤにわたり及びクラスタ内のユニットの中で微細粒度データ並列化を使用する。
【０４８９】
ＭＢＧＤは、幾つかの実施形態及び／又は使用状況では、ミニバッチサイズｎの関数として勾配推定精度を改善する。しかしながら、ミニバッチサイズｎでのＭＢＧＤを実行する計算は、ｎステップのＳＧＤを実行する計算に概ね等しい。幾つかの状況では、ｎステップのＳＧＤはミニバッチサイズｎのＭＢＧＤよりも概ねｎの平方根だけ効率的である。したがって、より高い並列性（例えば、ＭＢＧＤのように）及びより高い効率（例えば、ＳＧＤのように）は相互に排他的であることがある。
【０４９０】
幾つかの実施形態及び／又は使用状況では、ディープ・ニューラル・ネットワークは、有向非循環グラフとして表されることもある、高次元パラメータ化関数である。逆伝搬技法は循環グラフで表されることもある。グラフ内の循環はフィードバック反復である。反復は連続微分系の離散近似であるため、最初の完全ネットワーク評価によって生成された勾配は、次の反復で使用される重みを変える。離散近似は、時変統計を有する不偏連続ノイズプロセスを含む。ノイズプロセスは正規化を提供して、連続系が、離散時間学習系で観測された現象をモデリングできるようにする。離散事例では、正規化は、サンプリング手順（例えば、ＳＧＤ）により、学習率により、及び／又は他の明示的なメカニズムにより提供される。時間依存ノイズプロセスは、パラメータ空間における局所高周波数輪郭をなくす学習率スケジュールを使用できるようにする。正確な領域に近づくにつれて、正規化は低減し、幾つかの状況では、よりよい最終解をもたらす。
【０４９１】
ＣＰＧＤは、任意フィードフォワード（ａｒｂｉｔｒａｒｙ  ｆｅｅｄ−ｆｏｒｗａｒｄ）ニューラルネットワークの概念上の枠組みでは、全てのノードを時間の関数として表現し、機能構成を適用して、内部状態及び内部状態が受ける刺激に関して表現を公式化する。因数分解により、独立した局所力学を有する系としての個々のレイヤが生成される。２つの次元はネットワークの深度及びパラメータの時間進化である。空間において分離された計算ユニットにネットワークレイヤをマッピングすることにより加速化を実施する幾つかの実施形態及び／又は使用状況では、ネットワークレイヤ間での通信にレイテンシがある。したがって、レイヤ間の通信に時間遅延がある。ＣＰＧＤの幾つかの実施は、時間遅延を説明する同期実施である。
【０４９２】
ＣＰＧＤ処理中、アクティベーションベクトル及び関連付けられた隠れ表現は、アクティベーションベクトルの順方向パス中、異なる時間ステップでモデルパラメータと結合される。異なる時間ステップでのモデルパラメータと同じ時間ステップでのモデルパラメータとの違いは、順方向に進むアクティベーションベクトルによって検出可能ではない。概念的に、まるで連続時間ステップからの固定パラメータセットが、次に学習に使用される集計パラメータ状態の形成に使用されるかのようである。
【０４９３】
逆方向パス（例えば、デルタ伝搬）中、更新後、即値パラメータ（例えば、重み）を使用するか、又は対応する順方向パスが実行されたときに固定された過去のパラメータを検索するか選択される。即値パラメータから計算されたデルタは、現在のパラメータの傾きに対応する更新された情報を使用する。幾つかの実施形態及び／又は使用状況は即値パラメータを使用する。幾つかの実施形態及び／又は使用状況は、過去のパラメータを使用する。
【０４９４】
ＣＰＧＤの幾つかの実施は、ＳＧＤと同様の順序でメモリを使用する。リバース・チェック・ポイント（本明細書の他の箇所に記載される）は、メモリ使用を低減する等のために、ＣＰＧＤと併用可能である。リバース・チェック・ポイントの幾つかの実施形態及び／又は使用状況は、即値パラメータ（例えば、重み）を使用して、アクティベーションを再計算する。リバース・チェック・ポイントの幾つかの実施形態及び／又は使用状況は、過去のパラメータを使用して、アクティベーションを再計算する。即値パラメータを使用して、アクティベーションを再計算する幾つかの実施形態及び／又は使用状況では、順方向伝搬アクティベーションの計算に使用されるパラメータと逆方向伝搬デルタとの時間不一致は、波面の位置合わせにおいて低減される。
【０４９５】
連続伝搬技法は、ミニバッチ様式処理（例えば、ＭＢＧＤ）と併せて使用可能である。幾つかの実施形態及び／又は使用状況では、概念的に非同期ＳＧＤと同様に、続くバッチは、直前のバッチが完了する前に開始される。パイプライン内のパラメータ不一致は、１つ以下の分岐境界に制限される。
【０４９６】
幾つかの実施形態及び／又は使用状況では、データがニューラルネットワークを通してストリーミングし、グローバル同期境界なしで計算を実行できるようにすることにより、本発明を用いない場合には抽出されない学習情報を抽出することができる。幾つかの実施形態及び／又は使用状況では、学習率の低さのほうが、大きなバッチサイズよりも重要である。幾つかの実施形態及び／又は使用状況では、隠れた活動及び／又はデルタ弧は概念的に、個々のベクトル又は代替的にバッチ行列として解釈される。バッチ行列解釈により、ＧＰＵ、ＣＰＵ、ＤＳＰ、ＦＰＧＡ、及び／又はＡＳＩＣで直接、本明細書に記載される技法を実施することが可能になる。
【０４９７】
図２８Ａ〜図２８Ｅは、ＳＧＤ、ＭＢＧＤ、ＣＰＧＤ、及びＲＣＰ処理による順方向パス及び逆方向パス実施形態の様々な態様を図示する。図中、ニューロンの２つのレイヤが図示され、例えば、ディープ・ニューラル・ネットワークの一部の各レイヤを表す。様々な実施形態及び／又は使用状況では、ディープ・ニューラル・ネットワークは数千以上のレイヤ及びレイヤごとに数千以上のニューロンを有する。様々な実施形態及び／又は使用状況では、第１のレイヤは、ディープ・ニューラル・ネットワーク外部のエージェントからトレーニングのためのアクティベーションを受信する入力レイヤである。様々な実施形態及び／又は使用状況では、第２のレイヤは、順方向パスが完了し、逆方向パスが開始される出力レイヤである。様々な実施形態及び／又は使用状況では、第１のレイヤ及び第２のレイヤは内部レイヤである。
【０４９８】
図２８Ａ及び図２８Ｂはそれぞれ、ＲＣＰなしのＳＧＤ、ＭＢＧＤ、及びＣＰＧＤによる順方向パス及び逆方向パス実施形態を図示する。２つのレイヤは、前のレイヤ２８０１及び後続レイヤ２８０２として図示される。前のレイヤ２８０１は計算２８１０及び記憶２８１５を有する。後続レイヤ２８０２は計算２８２０及び記憶２８２５を有する。計算２８１０及び計算２８２０は計算リソースの例であり、記憶２８１５及び記憶２８２５は記憶リソースの例である。
【０４９９】
図２８Ｃ〜図２８Ｅは、ＲＣＰありのＳＧＤ、ＭＢＧＤ，及びＣＰＧＤによる順方向パス及び逆方向パス実施形態を図示する。２つのレイヤは、前のレイヤ２８０３及び後続レイヤ２８０４として図示される。前のレイヤ２８０３は計算２８３０及び記憶２８３５を有する。後続レイヤ２８０４は計算２８４０及び記憶２８４５を有する。計算２８３０及び計算２８４０は計算リソースの例であり、記憶２８３５及び記憶２８４５は記憶リソースの例である。
【０５００】
図２８Ａ〜図２８Ｅにおける同様に付番された要素は、同一の構造及び動作を有するが、計算リソースは、異なる入力に応じて異なる結果を生成し、記憶リソースは、記憶される異なる値に応じて異なる値を提供する。順方向パス及び逆方向パスの計算及び記憶に使用可能な異なる計算リソース及び／又は異なる記憶リソースを有する他の実施形態も考えられる。例えば、逆方向パスは、順方向パスにより使用されない転置重み記憶を使用する。異なる順方向パス及び逆方向パス実施に使用可能な異なる計算リソース及び／又は記憶リソースを有する他の実施形態も考えられる。例えば、ＲＣＰベースの実施形態は、ＲＣＰなしの順方向パス又は逆方向パス処理に使用される計算リソースより他の、追加の計算リソース（図示せず）を使用する。
【０５０１】
図２８Ａに関して、計算２８１０は、順方向パス計算Ｆ  ２８１１等の計算を実行することができる。記憶２８１５は、Ａ  ２８１６等にアクティベーションを記憶することができる。記憶２８１５は、Ｗ  ２８１７等に更に重みを記憶することができる。計算２８２０、Ｆ  ２８２１、記憶２８２５、Ａ  ２８２６、及びＷ  ２８２７はそれぞれ、様々な実施形態及び／又は使用状況では、構造及び／又は演算において、計算２８１０、Ｆ  ２８１１、記憶２８１５、Ａ  ２８１６、及びＷ  ２８１７と略同様又は同一である。
【０５０２】
ＳＧＤ又はＭＢＧＤでの順方向パス演算では、アクティベーションＡ１，ｔ２８８１は、前のレイヤ２８０１により受信され、Ａ  ２８１６に記憶される（逆方向パス中、後に使用するため）。次に、Ａ１，ｔ２８８１及び前にＷ  ２８１７に記憶された重みＷ１，ｔは、Ｆ  ２８１１に従って処理されて、アクティベーションＡ２，ｔ２８８２を生成する。Ａ２，ｔ２８８２は次に、後続レイヤ２８０２に渡される。前のレイヤと同様に、Ａ２，ｔ２８８２は後続レイヤ２８０２により受信され、Ａ  ２８２６に記憶される（逆方向パス中、後に使用するため）。次に、Ａ２，ｔ２８８２及び前にＷ  ２８２７に記憶された重みＷ２，ｔは、Ｆ  ２８２１に従って処理されて、アクティベーションＡ３，ｔ２８８３を生成する。次に、Ａ３，ｔ２８８３は、処理のために次の後続レイヤ（存在する場合）に提供され、順方向パスが完了し、逆方向パスが開始するまで以下同様である。後続レイヤ２８０２が出力レイヤである場合、順方向パスは完了し、順方向パスに対応する逆方向パスが開始される。
【０５０３】
図２８Ｂに関して、明確にするために、順方向パス処理専用の計算２８１０及び計算２８２０の要素（Ｆ  ２８１１及びＦ  ２８２１）は省かれている。図２８Ａに関して図示され説明された構造及び演算に関して、図２８Ｂは、計算２８１０がさらに、逆方向パス計算Ｂ  ２８１２等の追加の計算を実行することができ、計算２８２０がさらに、逆方向パス計算Ｂ  ２８２２等の追加の計算を実行することができることを示す。記憶２８１５はさらに、計算された重みをＷ  ２８１８等に記憶することができ、記憶２８２５はさらに、計算された重みをＷ  ２８２８等に記憶することができる。Ｂ  ２８２２及びＷ  ２８２８は、様々な実施形態及び／又は使用状況では、構造及び／又は演算において、Ｂ  ２８１２及びＷ  ２８１８と略同様又は同一である。
【０５０４】
ＳＧＤ又はＭＢＧＤでの逆方向パス演算では、デルタΔ３，ｔ２８９３は、逆方向パス処理中、次の後続レイヤ（存在する場合）から受信される。後続レイヤ２８０２が出力レイヤである場合、後続レイヤ２８０２は、例えば、後続レイヤの出力（例えば、推定出力）とトレーニング出力（例えば、所望の出力）との差の関数としてデルタルールに従ってデルタΔ３，ｔを計算する。次に、Δ３，ｔ２８９３、前にＷ  ２８２７に記憶された重みＷ２，ｔ、及び前にＡ  ２８２６に記憶されたアクティベーションＡ２，ｔは、Ｂ  ２８２２に従って（例えば、デルタルールに従って）処理されて、デルタΔ２，ｔ２８９２及び新しい重みＷ２，ｔ＋１を生成し、新しい重みＷ２，ｔ＋１は、次の順方向パスで使用するためのＷ  ２８２８に記憶される。次に、Δ２，ｔ２８９２は前のレイヤ２８０１に渡される。後続レイヤと同様に、デルタΔ２，ｔ２８９２、前にＷ  ２８１７に記憶された重みＷ１，ｔ、及び前にＡ  ２８１６に記憶されたアクティベーションＡ１，ｔは次に、Ｂ  ２８１２に従って処理されて、デルタΔ１，ｔ２８９１及び新しい重みＷ１，ｔ＋１を生成し、次に、新しい重みＷ１，ｔ＋１は、次の順方向パスで使用するためにＷ  ２８１８に記憶される。Δ１，ｔ２８９１は次に、処理のために次の前のレイヤ（存在する場合）に渡され、逆方向パスが完了し、次の順方向パスが開始されるまで以下同様である。前のレイヤ２８０１が入力レイヤである場合、逆方向パスは完了し、次の順方向パスが開始される。
【０５０５】
ＳＧＤ及びＭＢＧＤでは（ＣＰＧＤと異なり）、前の逆方向パスが完了するまで、例えば、Ｗ  ２８１７及びＷ  ２８２７が同じ順方向パスに使用された後、Ｗ  ２８１７及びＷ  ２８２７がそれぞれＷ  ２８１８及びＷ  ２８２８で更新されるまで、次の順方向パスは遅延され、同じことが逆方向パスにも対応する。したがって、次の順方向パスは、同じ逆方向パスからの重みを使用して実行される。
【０５０６】
図２８Ａは、ＳＧＤ及びＭＢＧＤ順方向パス処理の図示に加えて、ＣＰＧＤ順方向パス処理も図示する。しかしながら、ＣＰＧＤの演算は、重み更新及び次の順方向パスが、前の逆方向パスの完了まで遅延するのではなく、可能な限りすぐに実行されるという点で、ＳＧＤ及びＭＢＧＤと比較して異なる。例えば、Ｗ  ２８１７及びＷ  ２８２７はそれぞれ、可能な限りすぐにＷ  ２８１８及びＷ  ２８２８で更新される。したがって、次の順方向パスは、前の反復からの重みに対して選択的アクセスを有し、したがって、ＳＧＤ及びＭＢＧＤにより同じ条件下で生成されるものとは異なるアクティベーションを選択的に生成する。
【０５０７】
より具体的には、前のレイヤ２８０１において、ＳＧＤ及びＭＢＧＤと同一に、Ａ１，ｔ２８８１が受信され、Ａ  ２８１６に記憶される。Ａ１，ｔ２８８１及び前にＷ  ２８１７に記憶された重みＷ１，ｔ−ｋ−ｊは次に、Ｆ  ２８１１に従って処理されて、アクティベーションＡ２，ｔ２８８２を生成する。重みＷ１，ｔ−ｋ−ｊは、現在の順方向パスのｋ−ｊ個の順方向パスだけ前の順方向パスに対応する逆方向パスにより生成され記憶された。次に、Ａ２，ｔ２８８２は後続レイヤ２８０２に渡され、前のレイヤと同様に、Ａ２，ｔ２８８２は受信され、ＳＧＤ及びＭＢＧＤと同一にＡ  ２８２６に記憶される。Ａ２，ｔ２８８２及び前にＷ  ２８２７に記憶された重みＷ２，ｔ−ｋは次に、Ｆ  ２８２１に従って処理されて、アクティベーションＡ３，ｔ２８８３を生成する。重みＷ２，ｔ−ｋは、現在の順方向パスのｋ個の順方向パスだけ前の順方向パスに対応する逆方向パスにより生成され記憶された。なお、前のレイヤ及び後続レイヤは、同じ順方向パスを処理するために、異なる逆方向パスからの重みを使用する。ＳＧＤ及びＭＢＧＤと同様に、次に、Ａ３，ｔ２８８３は、処理のために次の後続レイヤ（存在する場合）に渡され、順方向パスが完了し、逆方向パスが開始されるまで、以下同様である。後続レイヤ２８０２が出力レイヤである場合、順方向パスは完了し、順方向パスに対応する逆方向パスが開始される。幾つかの実施形態及び／又は使用状況では、ｊの値は０であり、（ｋ−ｊ）及び（ｋ）は等しい。様々な実施形態及び／又は使用状況では、前のレイヤ及び後続レイヤは、異なる順方向パス、異なる逆方向パス、並びに順方向パス及び異なる逆方向パスの１つを同時に処理する。
【０５０８】
図２８Ｂは、ＳＧＤ及びＭＢＧＤ逆方向パス処理に加えて、ＣＰＧＤ逆方向パス処理も図示する。ＣＰＧＤでの逆方向パスの処理は、ＳＧＤ及びＭＢＧＤの逆方向パスの処理と同一である。しかしながら、選択された結果（例えば、選択された重み）は、ＳＧＤ及びＭＢＧＤよりも早く使用される。例えば、逆方向パスｔ−ｋ−ｊにより生成されるＷ１，ｔ−ｋ−ｊ及び逆方向パスｔ−ｋにより生成されるＷ１，ｔ−ｋは、ＳＧＤ及びＭＢＧＤよりも、例えば、順方向パスｔよりも早く使用される。
【０５０９】
図２８Ｃは、ＲＣＰと組み合わせたＳＧＤ、ＭＢＧＤ、及びＣＰＧＤのいずれかの順方向パス処理の一実施形態を図示する。計算２８３０及び記憶２８３５はそれぞれ、様々な実施形態及び／又は使用状況では、構造及び／又は動作において計算２８１０及び記憶２８１５と略同様又は同一である。計算２８４０及び記憶２８４５はそれぞれ、様々な実施形態及び／又は使用状況では、記憶２８４５において相手方を有さない記憶２８２５のアクティベーションＡ２８２６の記憶が省かれること以外は、構造及び／又は動作において計算２８２０及び記憶２８２５と略同様又は同一である。
【０５１０】
順方向パス演算では、前のレイヤ２８０３に関して、図２８Ａに関して説明したように、アクティベーションＡ１，ｔ２８８１は計算２８３０において受信され、順方向パス処理に従って処理され、記憶２８３５に記憶される。しかしながら、後続レイヤ２８０４に関して、アクティベーションＡ２，ｔ２８８２は計算２８４０において受信され、順方向パス処理に従って処理されるが、記憶されない（その代わり、逆方向パス処理中、ＲＣＰに従って再計算される）。
【０５１１】
図２８Ｄ及び図２８Ｅはそれぞれ、ＲＣＰと組み合わせた任意のＳＧＤ、ＭＢＧＤ、及びＣＰＧＤの逆方向パス処理の一実施形態の第１及び第２の部分を図示する。明確にするために、順方向パス処理専用の計算２８３０及び計算２８４０の要素（Ｆ  ２８２１）は省かれている。図２８Ｃに関して図示され説明された構造及び演算に関して、図２８Ｄ及び図２８Ｅは、計算２８３０がさらに、逆方向パス計算Ｂ  ２８１２等の追加の計算を実行することができ、計算２８４０がさらに、逆方向パス計算Ｂ  ２８２２等の追加の計算を実行することができることを示す。記憶２８３５はさらに、計算された重みをＷ  ２８１８等に記憶することができ、記憶２８４５はさらに、計算された重みをＷ  ２８２８等に記憶し、再計算されたアクティベーションをＡ  ２８２９等に記憶することができる。
【０５１２】
逆方向パス演算の第１の部分において、対応する順方向パスで記憶されないアクティベーションは再計算される。ＳＧＤ及びＭＢＧＤ状況では、再計算されたアクティベーションは、Ｆ  ２８１１に従ってＡ  ２８１６における順方向パスから記憶されたアクティベーション及びＷ  ２８１７に記憶された重みを処理して、アクティベーションＡ'２，ｔ２８８４を生成することにより、前のレイヤ２８０３において表現され、次に、アクティベーションＡ'２，ｔ２８８４は後続レイヤ２８０４のＡ  ２８２９に記憶される。ＳＧＤ及びＭＢＧＤは、順方向パス及び対応する逆方向パスが完了するまで、重み更新及び次の順方向パスの開始を遅延させるため、Ａ'２，ｔ２８８４は、順方向パス中に破棄される値Ａ２，ｔ２８８２と同一である。
【０５１３】
ＣＰＧＤ状況では、再計算されたアクティベーションは、ＳＧＤ及びＭＢＧＤ状況と同じトポロジに従って表現される。しかしながら、ＣＰＧＤは、遅延なしで更新を実行し、前の逆方向パスの完了に関係なく、次の順方向パスを開始できるようにする。したがって、実施形態及び／又は使用状況により、逆方向パスのときに、例えば、Ｗ  ２８１７に記憶された重み値は、対応する順方向パス中に記憶された重みと選択的に異なる。特定の例として、図２８Ｃによれば、Ｗ  ２８１７は、順方向パス中、Ｗ１，ｔ−ｋ−ｊを記憶した。しかしながら、逆方向パス中、例えば、ｍ反復に対応する追加の重み更新が行われ、この時点で、Ｗ  ２８１７はＷ１，ｔ−ｋ−ｊ＋ｍを記憶する。したがって、Ａ'２，ｔ２８８４は、順方向パス中に破棄された値Ａ２，ｔ２８８２から選択的に異なる。
【０５１４】
逆方向パス演算の第２の部分では、計算は、再計算されたアクティベーションを使用して進められる。ＳＧＤ及びＭＢＧＤ状況では、再計算されるアクティベーションは破棄されるアクティベーションと同一である（例えば、概念的に、Ａ  ２８２９に記憶される値は、Ａ  ２８２６に記憶される値と同一である）ため、逆方向処理は、図２８Ｂに関して説明した結果と同一の結果を生成する。例えば、Δ'３，ｔ２８９６、Δ'２，ｔ２８９５、及びΔ'１，ｔ２８９４はそれぞれ、Δ３，ｔ２８９３、Δ２，ｔ２８９２、及びΔ１，ｔ２８９１と同一である。ＣＰＧＤの状況では、再計算されたアクティベーションは破棄されたアクティベーションから選択的に異なるため、逆方向処理は、図２８Ｂに関して説明した結果から選択的に異なる結果を生成する。例えば、Δ'３，ｔ２８９６、Δ'２，ｔ２８９５、及びΔ'１，ｔ２８９４はそれぞれ、Δ３，ｔ２８９３、Δ２，ｔ２８９２、及びΔ１，ｔ２８９１と選択的に異なる。
【０５１５】
幾つかの実施形態及び／又は使用状況では、Ｗ  ２８１７はＷ  ２８１８と別個であり（図示のように）、幾つかの実施形態及び／又は使用状況では、Ｗ  ２８１８及びＷ  ２８１７は、記憶（図示せず）の同じ部分であり、したがって、新しい値をＷ  ２８１８に保存すると、Ｗ  ２８１７に前に保存された値に上書きされる。同様に、Ｗ  ２８２７はＷ  ２８２８と様々に異なるか、又は同じである。様々な実施形態及び／又は使用状況では、Ａ  ２８２９は、Ａ  ２８２６よりも少数のメモリロケーションを使用し、及び／又はＡ  ２８２６よりも短い時間で同数のメモリロケーションを使用するように、様々に実施される。
【０５１６】
様々な実施形態及び／又は使用状況では、アクティベーション及び／又は重みは、任意の１若しくはそれ以上のスカラー、ベクトル、行列、及びより高次元のデータ構造により実施及び／又は表現される。例えば、Ａ  ２８１６、Ａ  ２８２６、Ａ  ２８２９、Ｗ  ２８１７、Ｗ  ２８２７、Ｗ  ２８１８、及びＷ  ２８２８の任意の１若しくはそれ以上は、１若しくはそれ以上のスカラー、１若しくはそれ以上のベクトル、１若しくはそれ以上の行列、及び１若しくはそれ以上のより高次元のアレイの任意の１若しくはそれ以上を記憶することができる。
【０５１７】
様々な実施形態及び／又は使用状況では、前のレイヤ２８０１及び後続レイヤ２８０２の１若しくはそれ以上の要素は、各ＰＥにより、例えば、ＰＥ４９９の一部又は図４の同様の要素により実施される。例えば、ＰＥ４９７は前のレイヤ２８０１を実施し、ＰＥ４９８は後続レイヤ２８０２を実施する。アクティベーションＡ２，ｔ２８８２及びデルタΔ２，ｔ２８９２は、東結合４３１を介して通信される。幾つかの実施形態及び／又は使用状況では、前のレイヤ２８０１及び後続レイヤ２８０２の１若しくはそれ以上の要素は、ＣＰＵ、ＧＰＵ、ＤＳＰ、及びＦＰＧＡの１若しくはそれ以上により実施される。
【０５１８】
様々な実施形態及び／又は使用状況では、Ｆ  ２８１１、Ｆ  ２８２１、Ｂ  ２８１２、及びＢ  ２８２２の要素の全て又は任意の部分は概念的に、図２のＰＥ上のタスクＳＷ２６０の命令の実行の全て又は任意の部分に対応する。
【０５１９】
浮動小数点演算状況及び確率的丸め演算
幾つかの状況では、ＦＰ計算により、数フォーマットにより表現可能なものよりも高い精度を有する値が生成される。例えば、丸めなしの場合、ＦＰ乗算結果は入力の精度の２倍である。丸めは、追加の精度の除去に使用され、例えば、結果は数フォーマットと同じ精度である。ＩＥＥＥ７５４規格は、５つの異なる（決定論的）丸めモードを記載している。２つのモードは最近値に丸めるが、均衡を破るために異なるルールが用いられる。幾つかの計算のデフォルトモードは、最近に丸められ、均衡はＵＬＰにおいて「０」を有する最近値に丸められる。第２のモードは最近に丸められ、均衡はゼロから離れて丸められる。３つのモードは特定のルールに従って丸められる。ゼロへの丸めは切り捨てに等しく、単にＵＬＰ後の全てのビットを除去する。無限への丸めは切り上げに等しく、負の無限大への丸めは切り下げに等しい。ＩＥＥＥ７５４ＦＰ算術は時折、５つの丸めモードの１つに従って実行されることがある。
【０５２０】
幾つかのニューラルネットワーク実施形態及び／又は使用状況では、トレーニングプロセスは、長い依存鎖を形成する多くのＦＰ計算を通して繰り返される。例えば、１つの繰り返しは、それぞれが長い依存鎖を有する多くのベクトル及び／又は行列ＦＰ演算を含む。別の例では、多くの繰り返しが実行され、各繰り返しはその繰り返しの前の繰り返しの１つに依存し、それにより長い依存鎖が生成される。幾つかの状況では、長い依存鎖により、丸めにおける小さなバイアスが多くの計算にわたり累積し、系統的なバイアス結果になり、したがって、正確性を下げ、トレーニング時間を増大させ、推論待ち時間を増大させ、及び／又はエネルギー効率を下げる。幾つかの状況及び／又は実施形態では、ＦＰの統計的丸めの使用により、系統的バイアスが低減し、それにより、正確性が改善し、トレーニング時間が短縮し、推論待ち時間が短縮し、及び／又はエネルギー効率が増大する。幾つかの状況及び／又は実施形態では、丸めは依存ＦＰ演算（例えば、ＦＰ乗算−累積演算）の結果に対して実行され、次に、丸められた結果は続く依存ＦＰ演算にフィードバックされ、丸められた演算／結果の長い依存鎖を生成する。
【０５２１】
幾つかの状況では、確率的丸めを実行することにより、非確率的（例えば、決定論的）丸めを実行する場合に失われる幾らかの精度を保持することができる。例えば、数千又は数百万のパラメータを有する層を有し、各パラメータがＮビット仮数を用いる浮動小数点数により表れるニューラルネットワークを用いる状況を考える。パラメータ更新の平均大きさが小さい（例えば、更新の１０％はＮ＋１ビット仮数により表され、残りは更に小さい）場合、確率的丸めなしでは、パラメータ更新はゼロに丸められ、学習は行われない。確率的丸めを用いる場合、重みの約１０％が更新され、学習は行われ、基本的に、Ｎビット仮数により失われた幾らかの数値精度が回復され、それにより、ニューラルネットワークをトレーニングする待ち時間を改善し、及び／又はトレーニングされたニューラルネットワークの正確性を改善する。
【０５２２】
幾つかの状況では、ニューラルネットワーク計算は概念上、統計的であり、非確率的丸めの代わりに確率的丸めを実行することにより、特定のＦＰ精度に鑑みて、確率的丸めを実行しない場合よりも実質的に高い精度が可能になる。確率的丸めの精度改善により、より小さくより電力効率のよい計算論理（例えば、ＦＰＵ）及びより小さくより電力効率のよい記憶装置（例えば、ラッチ、レジスタ、及びメモリ）が可能になり、したがって、ニューラルネットワークのトレーニング及びトレーニングされたニューラルネットワークを用いての推論実行に対して、より高い性能、より低い待ち時間、より高い正確性、及び／又はより電力効率的なシステムを可能にする。
【０５２３】
様々な実施形態及び／又は使用状況では、確率的丸めは、少なくとも部分的に１若しくはそれ以上のＰＲＮＧを介して実施される。ＰＲＮＧの一例は、初期シード値により決定される疑似乱数シーケンスを決定論的に生成するＲＮＧである。ＬＦＳＲはＰＲＮＧの一例である。様々なＰＲＮＧは、生成された乱数のビット数に関して様々な長さのＬＦＳＲを用いて実施される。第１の例では、３ビットＰＲＮＧが３ビットＬＦＳＲを用いて実施される。第２の例では、３２ビットＬＦＳＲを使用して、３ビットＰＲＮＧとしてＬＦＳＲの３つのＬＳＢを使用する等により３ビットＰＲＮＧを実施する。本明細書における説明全体を通して、乱数生成器（ＲＮＧ）という用語は、別段のことが明示的に指定される場合を除き、疑似乱数生成器（ＰＲＮＧ）を意味するものと理解されよう。
【０５２４】
図２９は、ＦＰＵ２９０１を有し、任意選択で及び／又は選択で、浮動小数点、整数、及び／又は固定小数点結果を生成する浮動小数点演算の確率的丸めを実行することができるプロセッサ２９００の選択された細部を図示する。幾つかの実施形態では、プロセッサ２９００は、ディープ・ラーニング・アクセラレータ、ＣＰＵ、ＧＰＵ、ＡＳＩＣ、若しくはＦＰＧＡを有し、又はディープ・ラーニング・アクセラレータ、ＣＰＵ、ＧＰＵ、ＡＳＩＣ、若しくはＦＰＧＡの部分である。様々な実施形態では、ディープ・ラーニング・アクセラレータ、ＣＰＵ、ＧＰＵ、ＡＳＩＣ、及びＦＰＧＡの任意の１若しくはそれ以上は、図２９に図示されるような技法を組み込む。
【０５２５】
様々な実施形態は、プロセッサ２９００の複数のインスタンス及び／又はその変形を有する。様々な実施形態では、二次元（又はより多数の次元の）アレイは、プロセッサ２９００の複数のインスタンスを有する。様々な実施形態では、アレイの次元は、物理的構成、論理的構成、仮想的構成、及び通信構成の任意の１若しくはそれ以上として実施される。様々な使用状況では、インスタンスの全て又は任意の部分は、長い依存鎖である演算の全て又は任意の部分を実行する。様々な使用状況では、インスタンスは、計算、部分計算、中間計算の結果、フィードバック値等を通信する等のために、長い依存鎖に従って互いと通信する。様々な使用状況では、長い依存鎖は、ＦＰ計算の長い依存鎖を含む。様々な使用状況では、長い依存鎖は全体的又は部分的に、１若しくはそれ以上のニューラルネットワークをトレーニングするため及び／又は１若しくはそれ以上のトレーニングされたニューラルネットワークに関して推論を実行するために実行される。様々な使用状況では、丸めバイアスは、プロセッサ２９００の各インスタンスに含まれるＲＮＧ２９２１の各インスタンスにより提供される乱数情報により可能になる等の確率的丸めを使用することにより、長い依存鎖（又はその１若しくはそれ以上の部分）の少なくとも幾つかにおいて低減される。幾つかの実施形態では、プロセッサ２９００はニューラル・ネットワーク・アクセラレータの部分である。
【０５２６】
ＦＰＵ２９０１は、命令復号化論理２９２０、ＲＮＧ２９２１、ＦＰ制御レジスタ２９２５、乗算器２９１１、累積器２９１２、正規化器２９１３、及び指数ＤＰ２９１５並びにＮビット加算器２９２２及びインクリメンタ２９１４等の丸め論理等のＦＰ制御及び実行論理を有する。プロセッサ２９００は、命令２９５０を受信し、命令２９５０を復号化して、ＦＰＵ２９０１により実行される演算にすることができる命令復号化論理２９２０を有する。図３０Ａは、命令２９５０の選択された細部を図示する。様々な実施形態では、プロセッサ２９００は１若しくはそれ以上のＲＮＧ２９２１を有し、命令復号化論理２９２０は１若しくはそれ以上のＲＮＧ２９１９に結合される。他の実施形態では、プロセッサ２９００はＦＰＵ２９０１を有し、ＦＰＵ２９０１は１若しくはそれ以上のＲＮＧ２９２１を有する。様々な実施形態では、ＲＮＧ２９２１の１若しくはそれ以上は１若しくはそれ以上のＬＦＳＲを有する。
【０５２７】
様々な実施形態では、ＲＮＧ２９２１は、構成命令によりシード値を用いて初期化され、構成命令により読み出し可能であり、及び／又は構成命令により書き込み可能である。幾つかの使用状況では、ＲＮＧ２９２１は、プロセッサ２９００により部分的に実施される計算システムの時間共有を可能にするように管理される。例えば、ＲＮＧ２９２１は、第１のニューラルネットワーク計算を初期化する一環として初期化され、第１の計算の部分が完了した後、ＲＮＧ２９２１は読み出され、不揮発性メモリ（図示せず）の第１の部分に保存される。次に、ＲＮＧ２９２１は、第２のニューラルネットワーク計算を初期化する一環として初期化され、第２の計算の部分が完了した後、ＲＮＧ２９２１は読み出され、メモリの第２の部分に保存される。次に、ＲＮＧ２９２１は、メモリの第１の部分から保存された値を使用して書き込まれ、第１の計算は再開される。幾つかの実施形態では、ＰＲＮＧは、幾つかの使用状況で有利である決定論的乱数生成を可能にし、例えば、再現性のある計算を可能にする。様々な実施形態では、ＲＮＧ２９２１は、擬似ランダムではない（例えば、真にランダム又は準ランダム）エントロピーソースを有する。幾つかの実施形態では、ＲＮＧ２９２１は１つの乱数生成器（例えば、１つのＰＲＮＧ、ＬＦＳＲを有する１つのＰＲＮＧ）を有する。
【０５２８】
命令復号化論理２９２０は、ＦＰＵ２９０１に結合され、任意選択の確率的丸めを用いるＦＰ乗累積演算、任意選択の確率的丸めを用いるＦＰ乗算演算、任意選択の確率的丸めを用いる整数からＦＰへのデータ変換等のＦＰＵ２９０１により実行される演算を通信する。実行される演算は、命令２９５０の演算コードビット３０２３により指定される（図３０Ａ参照）。ＦＰＵ２９０１は、演算を実行する実行ハードウェアを有する。様々な実施形態では、乗算器２９１１及び累積器２９１２は、レジスタ、フロップ、ラッチ、バイパスネットワーク、キャッシュ、明示的にアドレス指定されるＲＡＭ／ＤＲＡＭ／ＳＲＡＭ、及び累積リソース等の様々なデータ記憶ロケーションに結合される。乗算器２９１１は、命令２９５０のソースビット３０２４により指定されるデータ記憶ロケーションからオペランドとしてＳｒｃ  Ａ２９５１及びＳｒｃ  Ｂ２９５２を受信し（図３０Ａ参照）、オペランドのＦＰ乗算を実行し（正規化なし及び丸めなし）、中間結果２９５３（指数部分及び仮数部分を有する）を生成する。累積器２９１２は乗算器２９１１及びデータ記憶ロケーションに結合される。累積器２９１２は、オペランドとして乗算器２９１１から中間結果２９５３及び命令２９５０のソースビット３０２４により指定されるデータ記憶ロケーションからＳｒｃ  Ｃ２９５４を受信し、オペランドのＦＰ加算（正規化なし及び丸めなし）を実行して、仮数２９５５（及び指数ＤＰ２９１５に提供される指数）を生成する。
【０５２９】
図２９、図３０Ｃ、及び図３０Ｄを参照すると、正規化器２９１３は累積器２９１２に結合され、仮数２９５５を累積器２９１２から受信する。使用状況により、仮数２９５５は、先行ゼロ２９５５．１で示されるゼロ若しくはそれ以上の上位ゼロビットを有する。仮数２９５５の下位ビットの残りは他のビット２９５５．２として示される。正規化器２９１３は、先行ゼロ２９５５．１を検出し、他のビット２９５５．２を左にシフトさせ、先行ゼロ２９５５．１を除去して、丸めを受ける仮数ビット２９５８と、Ｎ個の最下位ビット２９５７．１とを有する正規化仮数２９５６を生成することにより、仮数２９５５を正規化する。正規化器２９１３は、インクリメンタ２９１４及びＮビット加算器２９２２に結合される。正規化器２９１３は、丸めを受ける仮数ビット２９５８をインクリメンタ２９１４に提供し、Ｎ個の最下位ビット２９５７．１をＮビット加算器２９２２に提供する。様々な実施形態では、丸めを受ける仮数ビット２９５８及び確率的に丸められた仮数２９６４のビット幅は、ＦＰデータフォーマット及び／又はＦＰデータ精度に従って様々である。例えば、丸めを受ける仮数ビット２９５８及び確率的に丸められた仮数２９６４のビット幅は、半精度の場合１１ビットであり、単精度の場合２４ビットであり、倍精度の場合５３ビットである。
【０５３０】
命令復号化論理２９２０は、ＲＮＧ２９２１の乱数リソースを選択することができる。命令復号化論理２９２０は、丸めモードビット３０２１を復号化して、演算の処理（演算コードビット３０２３により指定される演算）に関連付けられた丸めモードを決定する。丸めモードビット３０２１が確率的丸めを指定する場合、命令復号化論理２９２０はＲＮＧビット３０２２を復号化して、ＲＮＧセレクタ２９６１を生成する。ＲＮＧ２９２１は、ＲＮＧセレクタ２９６１に応答して、Ｎビット乱数２９６２を提供する。様々な実施形態では、ＲＮＧ２９２１は、ＲＮＧセレクタ２９６１に更に応答して、選択された乱数リソースを進めて、次の乱数を生成する。例えば、ＲＮＧ２９２１は、０、１、２、及び３としてそれぞれ指定、選択、及び識別される４つの乱数リソースを実施する。各乱数リソースは別個のＬＦＳＲを有する。値「１」を有するＲＮＧビット３０２２に応答して、命令復号化論理２９２０は値「１」をＲＮＧセレクタ２９６１に提供する。「１」であるＲＮＧセレクタ２９６１に応答して、ＲＮＧ２９２１は、Ｎビット乱数２９６２としてＬＦＳＲの値「１」を提供し、続けてＬＳＦＲ「１」の状態を次の状態に進める。様々な実施形態では、ＲＮＧ２９２１の１若しくはそれ以上の乱数リソースは、Ｓｒｃ  Ａ２９５１、Ｓｒｃ  Ｂ２９５２、及びＳｒｃ  Ｃ２９５４等の命令の発信元オペランドとして使用可能であり、それにより、命令の入力データとして乱数を提供する。
【０５３１】
幾つかの実施形態では、Ｎビット加算器２９２２は、２つの入力：Ｎ最下位ビット２９５７．１及びＮビット乱数２９６２を受信し合算することができる整数加算器である。Ｎビット加算器２９２２は、キャリービット２９６３として和のキャリーアウトを提供する。インクリメンタ２９１４は、丸めを受ける仮数ビット２９５８及びキャリービット２９６３を受信する。インクリメンタ２９１４は、確率的に丸められた仮数２９６４として、丸めを受ける仮数ビット２９５８の条件付き増分である出力を提供する。キャリービット２９６３がアサートされる場合、インクリメンタ２９１４は、確率的に丸められた仮数２９６４として丸めを受ける仮数ビット２９５８の増分（ＵＬＰ３００２．１において開始）を提供する。キャリービット２９６３がデアサートされる場合、インクリメンタ２９１４は、確率的に丸められた仮数２９６４として、変更なしの丸めを受ける仮数ビット２９５８を提供する。様々な実施形態では、インクリメンタ２９１４のビット幅は、丸めを受ける仮数ビット２９５８のビット幅に適応して様々である。例えば、丸めを受ける仮数ビット２９５８のビット幅が１１ビット（半精度）である場合、インクリメンタ２９１４も１１ビットである。様々な実施形態では、Ｎは３であり、Ｎ最下位ビット２９５７．１は３ビットを有し、Ｎビット乱数２９６２は３ランダムビットを有し、Ｎビット加算器２９２２は３ビット加算器を有する。様々な他の実施形態では、Ｎは様々に４、５、７、又は任意の整数である。
【０５３２】
指数ＤＰ２９１５は、正規化器２９１３から受信される正規化情報に従って、累積器２９１２から受信した指数を調整するＦＰ指数データパスである。幾つかの実施形態及び／又は使用状況では、指数ＤＰ２９１５は、インクリメンタ２９１４から丸め情報（確率的丸め情報等）を受信し、それに従って指数を更に調整し、確率的に丸められた指数２９６５を生成する。完全なＦＰ結果から一緒にとられ、例えば、後に使用するための記憶又は続く演算の入力オペランドとしてのＳｒｃ  Ａ２９５１、Ｓｒｃ  Ｂ２９５２、及びＳｒｃ  Ｃ２９５４のいずれかへのフィードバックに適する確率的に丸められた指数２９６５及び確率的に丸められた仮数２９６４。
【０５３３】
様々な実施形態では、プロセッサ２９００はＦＰ制御レジスタ２９２５を有する。幾つかの実施形態では、ＦＰＵ２９０１はＦＰ制御レジスタ２９２５を有する。幾つかの実施形態では、ＦＰ制御レジスタ２９２５は、演算の全て又は任意の部分（全てのＦＰ乗算及び全てのＦＰ乗累算等）が、指定された丸めモード（例えば、複数の丸めモードのうちの確率的丸めモード）を使用して実行されることを指定する。様々な実施形態では、命令２９５０からの丸めモード情報は、ＦＰ制御レジスタ２９２５からの指定された丸めモードをオーバーライドする（命令毎等）。幾つかの実施形態では、ＦＰ制御レジスタ２９２５は、全ての確率的丸め演算が、ＲＮＧ２９２１の指定された１若しくはそれ以上の乱数リソースを使用して実行されることを指定する乱数リソース選択情報を提供する。様々な実施形態では、命令２９５０からの乱数リソース選択情報は、ＦＰ制御レジスタ２９２５からの乱数リソース選択情報をオーバーライドする。
【０５３４】
図２９における分割は単なる例示である。様々な実施形態では、図２９の２つ以上の要素は１つのユニットとして実施される。例えば、幾つかの実施形態では、乗算器２９１１及び累積器２９１２は融合ＦＰ乗算器−累積器として実施される。
【０５３５】
図示されるように、ＦＰＵ２９０１は、任意選択の確率的丸めを用いてＦＰ乗算−累積演算を実行することができる。幾つかの実施形態では、追加のハードウェア（図示せず）は、ＦＰＵ２９０１が、加算、減算、乗算、除算、逆数、比較、絶対値、否定、最大、最小、初等関数、平方根、対数、指数、正弦、余弦、正接、逆正接、異なるフォーマットへの変換、及び整数から／整数への変換等の任意選択の確率的丸めを用いた追加のＦＰ演算を実行できるようにする。
【０５３６】
様々な実施形態及び／又は使用状況では、プロセッサ２９００は、命令記憶要素から命令ストリームをフェッチし、フェッチされた命令を命令２９５０の各インスタンスとして命令復号化論理２９２０に提供するハードウェア論理を有する。様々な実施形態では、命令記憶要素は、コンピュータ可読記憶媒体（例えば、ディスク等の光学及び／又は磁気大容量記憶装置における媒体又はフラッシュ記憶装置等の不揮発性記憶装置を有する集積回路）等のコンピュータ可読媒体等の非一時的媒体を実施する。
【０５３７】
図３０Ａは、任意選択で確率的丸めを指定する浮動小数点命令２９５０の選択された細部を図示する。命令２９５０は数ビットフィールドを有する。様々な実施形態及び／又は使用状況では、命令２９５０は、演算コードビット３０２３、ソースビット３０２４、宛先ビット３０２５、丸めモードビット３０２１、及び／又はＲＮＧビット３０２２の任意のゼロ若しくはそれ以上を有する。演算コードビット３０２３は、加算、減算、乗算、除算、逆数、比較、絶対値、否定、最大、最小、初等関数、平方根、対数、指数、正弦、余弦、正接、逆正接、異なるフォーマットへの変換、及び整数から／整数への変換の任意の１若しくはそれ以上等の実行する１若しくはそれ以上のＦＰ演算を指定する。様々な実施形態では、演算コードビット３０２３は任意選択で、整数データ型、浮動小数点データ型、半精度浮動小数点データ型、単精度浮動小数点データ型、及び倍精度浮動小数点データ型の任意の１若しくはそれ以上等の演算に関連付けられた１若しくはそれ以上のデータ型を指定する。ソースビット３０２４は任意選択で、演算の入力データのロケーションに対応する１若しくはそれ以上の発信元オペランドを指定する。宛先ビット３０２５は任意選択で、演算の出力データを記憶するロケーションに対応する１若しくはそれ以上の宛先オペランドを指定する。様々な実施形態では、ソース及び／又は宛先オペランドは、レジスタ、フロップ、ラッチ、バイパスネットワーク、キャッシュ、明示的にアドレス指定されるＲＡＭ／ＤＲＡＭ／ＳＲＡＭ、及び累積リソース等の様々な記憶ロケーションである。様々な実施形態では、ソース及び／又は宛先オペランドは、バイパスネットワークの要素等の様々な他の要素である。
【０５３８】
丸めモードビット３０２１は任意選択で、確率的丸め、任意のＩＥＥＥ７５４規格丸め、及び任意の他の丸めモード等の演算を実行する場合、使用する１若しくはそれ以上の丸めモードを指定する。ＲＮＧビット３０２２は任意選択で、確率的丸めを実行する場合等の演算を実行する場合、使用するＲＮＧ２９２１の１若しくはそれ以上の乱数リソースを指定する。
【０５３９】
図３０Ｂは、確率的丸めの制御に関連付けられたＦＰ制御レジスタ２９２５の選択された細部を図示する。様々な実施形態では、ＦＰ制御レジスタ２９２５は、ＦＰＵ２９０１により実行される演算に使用する丸めモードを指定するビットフィールドである静的丸めモードビット２９２５．１を有する。様々な実施形態では、静的丸めモードビット２９２５．１は、確率的丸めモード又は５つのＩＥＥＥ７５４規格丸めモード（５つのＩＥＥＥ７５４丸めモードは、丸める入力データのみに依存する決定論的丸めモードである）の１つを指定する。幾つかの状況では、ＦＰＵ２９０１により実行される全ての演算は、静的丸めモードビット２９２５．１により指定される丸めモードを使用する。幾つかの実施形態では、静的丸めモードビット２９２５．１は、構成命令により設定される。例えば、構成命令は、確率的丸めモードを指定するように静的丸めモードビット２９２５．１を設定し、続けて実行される全ての演算は、静的丸めモードビット２９２５．１が、異なる丸めモードを指定するように変更されるまで、確率的丸めを使用する。幾つかの実施形態及び／又は使用状況では、命令２９５０の丸めモードビット３０２１は、命令毎等にＦＰ制御レジスタ２９２５の静的丸めモードビット２９２５．１をオーバーライドする。
【０５４０】
幾つかの実施形態では、ＦＰ制御レジスタ２９２５は、非正規化ＦＰ数の挙動を制御するビットフィールドＦＴＺ２９２５．３を有する。ＦＴＺ２９２５．３が第１の値（例えば、１）に設定される場合、ＦＰＵ２９０１は演算の非正規化結果をフラッシュしてゼロにする。ＦＴＺ２９２５．３が第２の値（例えば、０）に設定される場合、ＦＰＵ２９０１は演算の非正規化結果をフラッシュして最小正規化数にする。様々な実施形態では、ＦＰ制御レジスタ２９２５は、最大充足２９２５．４及び／又は最小充足２９２５．５というビットフィールドを有する。最大充足２９２５．４が第１の値（例えば、０）に設定される場合、ＦＰ表現をオーバーフローするＦＰＵ２９０１により実行される演算は、無限を返し、一方、その他の場合、指定された（例えば、丸めモードビット３０２１により）丸めモードの挙動を保持する。最大充足２９２５．４が第２の値（例えば、１）に設定される場合、ＦＰ表現をオーバーフローするＦＰＵ２９０１により実行される演算は、無限を返すのではなく最大正規化大きさ値を返し、一方、その他の場合、指定された（例えば、丸めモードビット３０２１により）丸めモードの挙動を保持する。最小充足２９２５．５が第１の値（例えば、０）に設定される場合、ＦＰ表現をアンダーフローするＦＰＵ２９０１により実行される演算は、ゼロを返し、一方、その他の場合、指定された（例えば、丸めモードビット３０２１により）丸めモードの挙動を保持する。最小充足２９２５．５が第２の値（例えば、１）に設定される場合、ＦＰ表現をアンダーフローするＦＰＵ２９０１により実行される演算は、ゼロを返すのではなく、最小正規化大きさ値（例えば、ゼロにフラッシュ丸めモードにおいて）又は最小非正規化値（例えば、別の丸めモードにおいて）を返し、一方、その他の場合、指定された（例えば、丸めモードビット３０２１により）丸めモードの挙動を保持する。
【０５４１】
様々な実施形態では、ＲＮＧ２９２１により実施される乱数リソースの数はそれぞれ１、２、４、及び７である。様々な使用状況では、命令の各群は、ＲＮＧ２９２１の乱数リソースのそれぞれ１つを使用するように指定する（ＲＮＧビット３０２２及び／又は静的ＲＮＧビット２９２５．２の各値を介して）。例えば、命令の第１の群における各ＲＮＧビット３０２２の値は同じ第１の値であり、第１の群内の全ての命令が、確率的丸めにＲＮＧ２９２１の同じ第１の乱数リソースを使用することを指定する。この例を続けると、命令の第２の群における各ＲＮＧビット３０２２の値は同じ第２の値であり、第２の群内の全ての命令が、確率的丸めにＲＮＧ２９２１の同じ第２の乱数リソースを使用することを指定する。別の例では、命令の第１の群の実行に先立ち、静的ＲＮＧビット２９２５．２は、確率的丸めにＲＮＧ２９２１の第１の乱数リソースを指定するように第１の構成命令により設定される。この例を続けると、命令の第１の群は、第１の乱数リソースに従って実行される。次に、命令の第２の群の実行に先立ち、静的ＲＮＧビット２９２５．２は、確率的丸めにＲＮＧ２９２１の第２の乱数リソースを指定するように第２の構成命令により設定される。この例を続けると、命令の第２の群は、第２の乱数リソースに従って実行される。幾つかの実施形態では、どのＲＮＧを命令に使用するかの指定は、予め決定及び／又は暗示される。例えば、１つのＲＮＧを用いる実施形態では、ＲＮＧビット３０２２又は静的ＲＮＧビット２９２５．２を参照せずに１つのＲＮＧが使用される。
【０５４２】
群の命令に関して記憶又は実行における構成への要件はない。様々な実施形態及び使用状況では、第１の群内の命令は、プログラム記憶及び／又は実行順において互いに関して連続し、プログラム記憶及び／又は実行順において互いに関して連続せず、命令の任意の他の群の１若しくはそれ以上の命令と混ざる及び命令の第２の群及び任意の他の群で同様等、互い及び他の命令に関して様々に配置される。幾つかの実施形態及び／又は使用状況では、命令の群の同じ乱数リソースを使用することで、決定論及び／又は実行の再現性は改善する。
【０５４３】
乱数リソース選択が比較的頻繁に変わる幾つかの状況では、命令は、乱数リソース選択がＲＮＧビット３０２２内の各値を介し、各値が任意選択である命令から次の命令で変わることを指定する。乱数選択が頻繁には変わらない幾つかの状況では、命令は、乱数リソース選択が静的ＲＮＧビット２９２５．２を介し、静的ＲＮＧビット２９２５．２内の値が幾つかの命令で一定に保持されることを指定する。
【０５４４】
図３０Ｃは、仮数２９５５（正規化及び丸めを受ける浮動小数点演算の結果の仮数）の選択された細部を図示し、ＭＳＢは左側にあり、ＬＳＢは右側にある。幾つかの実施形態では、仮数２９５５は、ＦＰ演算により使用されるＦＰデータフォーマットの仮数よりも多くのビットを有する。幾つかの実施形態では、半精度乗累積演算の仮数２９５５は４５ビットであり、仮数２９５５は、１１ビット仮数を有する１６ビット表現に正規化され丸められる。図示の仮数２９５５は２つのフィールド：ゼロ若しくはそれ以上の連続先行ゼロ２９５５．１及び残りのビットである他のビット２９５５．２（値「１」の最上位ビットを有する）を有する。
【０５４５】
図３０Ｄは、正規化仮数２９５６（正規化後であり、丸めを受ける浮動小数点演算の結果の仮数）の選択された細部を図示し、ＭＳＢは左側にあり、ＬＳＢは右側にある。図示の正規化仮数２９５６は２つのフィールド：丸めを受ける仮数ビット２９５８及び下位ビット３００３を有する。正規化仮数２９５６のＭＳＢは先行「１」である（しかし、幾つかの実施形態では、先行「１」は明示的に記憶されない）。丸めを受ける仮数ビット２９５８のＬＳＢはＵＬＰ３００２．１である。下位ビット３００３は、ＵＬＰ３００２．１よりも下位のビットである。図示の下位ビット３００３は２つのフィールド：Ｎ最上位下位ビット２９５７．１及び最下位下位ビット３００３．２を有する。様々な実施形態では、確率的丸めは、Ｎ最下位ビット２９５７．１が、ＵＬＰ３００２．１において開始される丸めを受ける仮数ビット２９５８の丸めに再現可能に影響できるようにする。幾つかの実施形態及び／又は使用状況では、再現可能に影響することにより、ニューラルネットワーク計算に関連付けられた長い依存鎖等の長い依存鎖の部分を含む計算における系統的丸めバイアスを低減することができる。
【０５４６】
図３１は、任意選択の確率的丸めを用いる浮動小数点命令を実行するプロセッサ２９００の選択された細部の流れ図を図示する。説明のために、命令はＦＰ乗累積命令である。他の実施形態及び／又は使用状況では、命令は、加算、減算、乗算、除算、逆数、比較、絶対値、否定、最大、最小、初等関数、平方根、対数、指数、正弦、余弦、正接、逆正接、異なるフォーマットへの変換、及び整数から／整数への変換等の任意のＦＰ命令である。
【０５４７】
命令２９５０の処理は動作３１００において開始される。動作３１１０において、プロセッサ２９００は命令及び命令内の様々な指定子を復号化する。指定子は、演算指定子（演算コードビット３０２３における特定の符号化を介してＦＰ乗累算演算を指定する等）を含む。様々な実施形態では、ＦＰ乗累算命令は、半精度、単精度、及び倍精度のデータ及び演算の１つを指定する。幾つかの実施形態では、データ及び演算の精度は、演算コードビット３０２３により指定され、他の実施形態では、データ及び演算の精度は、命令２９５０内の別個のビットフィールド（図示せず）により指定される。
【０５４８】
動作３１２０において、乗算器２９１１は、Ｓｒｃ  Ａ２９５１及びＳｒｃ  Ｂ２９５２のＦＰ乗算を実行し、結果として中間結果２９５３（指数部分及び仮数部分を有する）を生成する。次に、累積器２９１２は、中間結果２９５３及びＳｒｃ  Ｃ２９５４のＦＰ加算を実行し、結果として仮数２９５５（及び指数ＤＰ２９１５に提供される指数）を生成する。動作３１３０において、正規化器２９１３は仮数２９５５を正規化し、先行ゼロ２９５５．１を検出し（もしあれば）、他のビット２９５５．２を左にシフトし、先行ゼロ２９５５．１を除去して、正規化仮数２９５６を生成する。
【０５４９】
動作３１４０において、プロセッサ２９００は、例えば、丸めモードビット３０２１を復号化することにより丸めモードを決定する。丸めモードビット３０２１が確率的丸めモード３１４２を指定する場合、フローは動作３１６０に進む。丸めモードビット３０２１が確率的丸めモード以外（例えば、最も近い偶数に丸める）３１４１を指定する場合、フローは動作３１５０に進む。動作３１５０において、ＦＰＵ２９０１は、指定された丸めモードに従って決定論的に丸め（例えば、確率的丸めなしで）、フローは動作３１９８に進む。
【０５５０】
動作３１６０において、プロセッサ２９００はＲＮＧ２９２１の乱数リソースを選択する（例えば、ＲＮＧビット３０２２の復号化に基づいて）。幾つかの実施形態では、ＲＮＧ２９２１の乱数リソースは、静的ＲＮＧビット２９２５．２に基づいて選択される。選択された乱数リソースは、Ｎビット乱数２９６２として提供される。動作３１７０において、Ｎビット乱数２９６２及びＮ最上位下位ビット２９５７．１は、Ｎビット加算器２９２２により一緒に加算される（整数加算）。
【０５５１】
動作３１８０において、続くフローは条件付きで、Ｎビット加算器２９２２により実行された加算がキャリーを生成するか（キャリービット２９６３がアサートされる）否かに依存する。依存する場合３１８２、フローは動作３１９０に進む。依存しない場合３１８１、丸めを受ける仮数ビット２９５８は、確率的に丸められた仮数２９６４として変更（インクリメンタ２９１４のパススルー関数による等）なしで提供され、フローは動作３１９８に進む。動作３１９０において、インクリメンタ２９１４は、丸めを受ける仮数ビット２９５８の増分（ＵＬＰ３００２．１において開始）を確率的に丸められた仮数２９６４として提供する。次に、フローは動作３１９８に進み、動作３１９８において、確率的に丸められた指数２９６５及び確率的に丸められた仮数２９６４はまとめて、宛先オペランド指定子（宛先ビット３０２５）に従って宛先に提供される。次に、命令の処理は動作３１９９において完了する。
【０５５２】
幾つかの実施形態及び／又は使用状況では、動作３１７０は概念上、Ｎビット乱数２９６２及びＮ最上位下位ビット２９５７．１を比較して、切り上げる（３１８２）か、それとも切り下げるか（３１８１）を判断するメカニズムである。Ｎビット乱数２９６２を比較ソースとして使用することにより、切り上げる／下げる判断の確率は、Ｎ最上位下位ビット２９５７．１によって表される割合に等しく（例えば、ゼロから離れた丸めの確率は、Ｎ最上位下位ビット２９５７．１により表される割合である）、バイアスのない丸めを可能にする。幾つかの実施形態では、確率的丸めを実行する場合、最下位下位ビット３００３．２は無視される。幾つかの実施形態では、Ｎ最上位下位ビット２９５７．１のＬＳＢは、普通ならＮ最上位下位ビット２９５７．１であるものと最下位下位ビット３００３．２の１若しくはそれ以上のビットとの論理ＯＲで置換される。
【０５５３】
幾つかの実施形態及び／又は使用状況では、プロセッサ２９００は任意選択で及び／又は選択で、整数結果又は固定小数点結果を生成する浮動小数点演算に確率的丸めを実行することができる。例えば、プロセッサ２９００は、浮動小数点から整数への変換演算に確率的丸めを実行することができ、確率的丸めは、結果の整数値に影響する。別の例では、プロセッサ２９００は、浮動小数点から固定小数点への変換演算に確率的丸めを実行することができ、確率的丸めは、結果の固定小数点値に影響する。
【０５５４】
様々な実施形態及び／又は使用状況では、長い依存鎖を形成するＦＰ計算を用いたトレーニングプロセスは、「ディープ・ラーニング・アクセラレータ使用例」セクション（例えば、図２７Ａ〜図２８Ｅ及び関連する文章参照）及び「一例の作業負荷マッピング及び例示的なタスク」セクション（例えば、図１１及び図１２並びに関連する文章参照）において開示される概念に概念的に対応及び／又は概念的に関連する。例えば、図２７Ａの第１の順方向パス２７１１、図２７Ｃの順方向パス２７５１、及び図２７Ｄの順方向パス２７７１はそれぞれ、長い依存鎖を有するＦＰ計算に対応する。別の例では、図１１のｆ＿ｐｓｍ：ｐｒｏｐ１１０３は、ＦＰ計算の長い依存鎖の要素に対応する。
【０５５５】
様々な実施形態及び／又は使用状況では、図２９のプロセッサ２９００の全て又は任意の部分は、ＰＥの全て又は任意の要素又はＰＥのＣＥに概念的に対応及び／又は関連する。例えば、プロセッサ２９００のインスタンスは、図４のＰＥ４９９のインスタンスに対応する。別の例では、プロセッサ２９００のインスタンスの二次元アレイは、図４に図示されるように相互接続されたＰＥ４９９のインスタンスの二次元アレイに対応する。別の例では、プロセッサ２９００は図８のＣＥ８００に対応する。別の例では、ＦＰＵ２９０１の全て又は任意の部分は、図８のデータパス８５２の様々な要素に概念的に対応及び／又は関連する。別の例では、命令復号化論理２９２０の全て又は任意の部分は、図８のデコーダ８４０の要素に概念的に対応又は関連する。別の例では、ＦＰ制御レジスタ２９２５の全て又は任意の部分は、ＣＥ８００において実施される。別の例では、ＲＮＧ２９２１の全て又は任意の部分は、様々なデータパス８５２に概念的に対応及び／又は関連する。様々な実施形態及び／又は使用状況では、命令２９５０の１若しくはそれ以上は、図８のメモリ８５４に記憶される。
【０５５６】
様々な実施形態及び／又は使用状況では、命令２９５０の１若しくはそれ以上は、図２のＰＥ上のタスクＳＷ２６０の全て又は任意の部分に対応し、及び／又は図３の順方向パス、デルタパス、チェインパス、更新重み３５０の全て又は任意の部分に対応する。様々な実施形態及び／又は使用状況では、図３１に図示される動作の全て又は任意の部分は、図９Ａのフェッチされた命令を実行９０６の全て又は任意の部分に対応する。
【０５５７】
様々な実施形態及び／又は使用状況では、命令２９５０の全て又は任意の部分は、命令、例えば、図２５Ａの複数のオペランド命令２５１０、図２５Ｂの１発信元０宛先オペランド命令２５２０、及び図２５Ｃの即値命令２５３０に概念的に対応及び／又は関連する。例えば、演算コードビット３０２３は図２５Ａの演算コード２５１２に対応する。別の例では、ソースビット３０２４は図２５Ａのオペランド０符号化２５１３に対応する。別の例では、宛先ビット３０２５は図２５Ａのオペランド０符号化２５１３に対応する。別の例では、丸めモードビット３０２１は、図２５Ａのオペランド１符号化２５１４から決定可能である。
【０５５８】
大規模ディープ・ニューラル・ネットワークの拡張性
ディープ・ニューラル・ネットワーク（ＤＮＮ）を実施するハードウェアアーキテクチャの評価における考慮事項は、ＤＮＮに関連付けられた重みの記憶要件と比較したハードウェアの記憶容量である。重みは、ニューラルネットワークのパラメータの一例である。しかしながら、順方向部分和、アクティベーション（これに限定されるものではないが、層出力を含む）、及び他の実施オーバーヘッド（例えば、畳み込みの）に求められる追加の記憶は、幾つかの状況では、重みの記憶要件と比較してささやかである。学術的及び産業的ベンチマークの状況では、人気のあるＤＮＮにはＬｅＮｅｔ−５、ＡｌｅｘＮｅｔ、ＶＧＧ−１６、ＧｏｏｇＬｅＮｅｔ（ｖ１）、及びＲｅｓＮｅｔ−５０がある。人気のあるＤＮＮは４層から５０層の範囲であり、全層にわたり合計で３４１ｋ〜１５．５ＧのＭＡＣ（乗累算）演算を必要とし、６０ｋ〜１３８Ｍの重みを必要とする。各重みが１６ビット精度を必要とすると仮定すると、任意のあるＤＮＮは、トレーニング後、重みだけで１２０ｋＢ〜２７６ＭＢの記憶要件を有する。３２ビット精度の場合、要件は２倍になる。トレーニング中、例えば、勾配累積、デルタ部分和、層エラー、及び複製重みのために追加の記憶が必要とされる。幾つかのトレーニング方法（例えば、ミニバッチ）では、重みは複数回複製され、それに従って重み記憶要件を増大させる。
【０５５９】
様々な要因が、命令とデータとの間、更には様々なタイプのデータ間、例えば、重み、勾配累積、順方向部分和、デルタ部分和、及び順方向パスアクティベーションの間でのディープ・ニューラル・ネットワークのハードウェアアクセラレータのメモリ、例えば、図８のメモリ８５４の使用に影響する。例えば、様々な要因には、実行されるデータフローグラフ及び使用される特定のアルゴリズムがある。様々な実施形態及び／又は使用状況では、メモリ８５４を有するＰＥに関して、メモリ８５４は、ニューロン入力、ニューロン出力、及びＰＥにマッピングされたニューロンのシナプス重みに統一された記憶装置をプライベートメモリ空間に提供する。畳み込み層の場合、ニューロンという用語がフィルタ又はカーネルを表すことが理解される。様々な実施形態及び／又は使用状況では、メモリ８５４が４８ｋＢを保持する５００，０００個のＰＥがあり、ＰＥ毎に１６ｋＢは命令に使用され、３２ｋＢはデータに使用され、メモリは合計で２４ＧＢである。実施形態によればさらに、例えば、ＡＳＩＣ毎に２０，０００個〜４０，０００個のＰＥがあり、各ＡＳＩＣは０．９６ＧＢ〜１．９２ＧＢを保持し、ＡＳＩＣ毎に０．２４ＧＢ〜０．４８ＧＢは命令に使用され、０．７２ＧＢ〜１．４４ＧＢはデータに使用される。様々な実施形態及び／又は使用状況では、メモリ８５４が８ｋＢを保持する３００万超のＰＥがあり、ＰＥ毎に２ｋＢは命令に使用され、６ｋＢはデータに使用され、メモリは合計で２４ＧＢである。実施形態によればさらに、例えば、ＡＳＩＣ毎に２０，０００個〜４０，０００個のＰＥがあり、各ＡＳＩＣは０．１６ＧＢ〜０．３２ＧＢを保持し、ＡＳＩＣ毎に０．０４ＧＢ〜０．０８ＧＢは命令に使用され、０．１２ＧＢ〜０．２４ＧＢはデータに使用される。
【０５６０】
１６ビット又は３２ビット精度重みを使用して、メモリ８５４が４８ｋＢを保持する任意の上記実施形態は、上述した人気のあるＤＮＮのうちの最も要求の厳しいもの（ＶＧＧ−１６）を１つのＡＳＩＣにおいて最小に実施することができ、全ての層は、推論及びトレーニングの1つまたは複数で（例えば、順方向伝搬及び逆方向伝搬の一方又は両方で）同時に存在し、ＤＮＮの任意の中間（まだ最終ではない）状態の外部チェックポイント又は他の外部（オフチップ又はオフウェーハ）記憶を使用しない。メモリ８５４が８ｋＢ以上を保持する任意の上記実施形態は、ウェーハの小さな複数のＡＳＩＣにわたり任意の人気のある上記ＤＮＮを最小に実施することができ、全ての層は、推論及びトレーニングの一方又は両方で同時に存在し、ＤＮＮの任意の中間状態の外部チェックポイント又は他の外部（オフチップ又はオフウェーハ）記憶を使用しない。ＡＳＩＣの必要最小数は、実施形態（例えば、メモリ８５４が８ｋＢであるか、それとも４８ｋＢであるか、及び例えば、使用される重みが１６ビット精度であるか、それとも３２ビット精度であるか）に依存する。別の言い方をすれば、大きなＤＮＮのニューロン及びシナプスの全て（例えば、１００％）は、ハードウェアにおいて（より具体的には、図４のディープ・ラーニング・アクセラレータ４００のウェーハ４１２において）実施可能であり、全ての層（入力、隠れ（別名中間）、及び出力）は、同時に存在して実行され、推論及びトレーニングの一方又は両方で同時に存在し、ＤＮＮの任意の中間（まだ最終ではない）状態の外部チェックポイント又は他の外部（オフチップ又はオフウェーハ）記憶を使用しない。
【０５６１】
様々な実施形態及び／又は使用状況では、図８のデータパス８５２は、浮動小数点乗算、フォーマット変換、加算、シフト、及び論理にそれぞれ専用のハードウェアリソースを含む。様々な実施形態及び／又は使用状況では、データパス８５２は、半精度乗算器を使用して半精度（１６ビット）及び単精度（３２ビット）ＩＥＥＥ−７５４浮動小数点を実施する。様々な実施形態及び／又は使用状況では、データパス８５２は、１１×１１乗算器アレイ、８×８乗算器アレイ、２２ビット加算器、１６ビット加算器、２２ビットシフタ、及び１６ビット論理ユニットを有する。実施形態によれば更に、５００，０００個〜３００万個のＰＥがあり、これは、ウェーハ毎に例えば、データパス８５２の５００，０００個〜３００万個のインスタンスに対応し、欠陥を除き、ウェーハ毎に対応する数の乗算器、加算器、シフタ、及び論理ユニットに対応する。実施形態によれば更に、ＡＳＩＣ毎に２０，０００個〜４０，０００個のＰＥがあり、これは、データパス８５２の２０，０００〜４０，０００個のインスタンスに対応し、欠陥を除き、ＡＳＩＣ毎に対応する数の乗算器、加算器、シフタ、及び論理ユニットに対応する。
【０５６２】
上述したように、メモリ８５４が８ｋＢ〜４８ｋＢを保持する上記実施形態は、ウェーハの小さな複数のＡＳＩＣを介して、上述した任意の人気のあるＤＮＮを最小に実施することができる。しかしながら、大規模ＤＮＮに必要とされる多数のＭＡＣ演算（例えば、ＶＧＧ−１６の場合、１５．５ＧのＭＡＣ演算）に鑑みて、そのような大規模ＤＮＮの最小実施の性能（「壁時計時間」に関して見られることが多い）は、様々な実施形態及び／又は使用状況では、必ず再使用されるデータパスリソース数、特に乗算器の数により制約される。それにもかかわらず、実施形態によれば、システム全体は、データパス８５２の５００ｋ〜３Ｍのインスタンス又は１つのＡＳＩＣとして２５倍〜１５０倍の数を有することになる。スメアリング（本明細書の他の箇所で詳述される）及び／又はＤＮＮのニューロンの拡散（ウェーハのより多くのＰＥ及びより多くのＡＳＩＣにわたるが、拡散ニューロン間の転送待ち時間に配慮）は、特に乗算器の同時使用の増大を可能にすることを介して潜在的な加速（及び対応する壁時計時間の短縮）を提供する。別の言い方をすれば、様々な実施形態及び／又は使用状況では、データフローグラフ（例えば、ＤＮＮ）のトレーニング及び／又は演算を実行するにあたり、システムは、ディープ・ラーニング・アクセラレータ４００におけるデータパス８５２の多数のインスタンスの利用を変更する（例えば、より多数の乗算器の並列動作を増大させる）（例えば、データフローグラフのノード又はＤＮＮのニューロンの選択的拡散及び／又はスメアリングを介して）ように配置（ＰＥへのＤＮＮのマッピング）を変更することにより、１桁又は２桁（例えば、実施形態によれば、潜在的に２５倍〜１５０倍）性能をスケーリング（例えば、壁時計時間を短縮）することができる。
【０５６３】
他の実施形態の詳細
図１〜図３１に関して説明した実施形態及び使用状況は概念的に、プログラマブルである、例えば、命令に従ってデータを処理するＣＥを有するＰＥに関する。部分的又は全体的に接続されている、例えば、命令なしで動作可能な１若しくはそれ以上の固定回路処理要素に従ってデータを処理するＣＥの１若しくはそれ以上を有する他の実施形態も考えられる。特定の例として、特定のＣＥは、ＬＳＴＭユニットの全て又は一部を実施するハードウェア論理ユニット回路を有する。特定のＣＥは、他のＰＥを有するファブリックで動作可能な特定のＰＥ内のルータを有する。他のＰＥの幾つかは、特定のＰＥと同様又は同一であり、他のＰＥの幾つかは、図４のＰＥ４９９と同様又は同一である。
【０５６４】
実施技法例
幾つかの実施形態では、加速化ディープラーニング、加速化ディープラーニングの確率的丸め、加速化ディープラーニングのマイクロスレッド処理、加速化ディープラーニングのタスクアクティベーション、加速化ディープラーニングの背圧、加速化ディープラーニングのデータ構造記述子及びファブリックベクトル、加速化ディープラーニングのニューロンスメアリング、加速化ディープラーニングのタスク同期、加速化ディープラーニングのデータフロー・トリガー・タスク、加速化ディープラーニングの制御ウェーブレット、及び／又は加速化ディープラーニングのウェーブレット表現のいずれかに実行される動作及び／又は関連付けられた構造の全て又は任意の部分及びプロセッサ、マイクロプロセッサ、システムオンチップ、特定用途向け集積回路、ハードウェアアクセラレータ、又は上記動作の全て又は部分を提供する他の回路の部分の様々な組合せが、コンピュータシステムによる処理と互換性がある用途により指定される。仕様は、ハードウェア記述言語、回路記述、ネットリスト記述、マスク記述、又はレイアウト記述等の様々な記述に従う。記述例には、Ｖｅｒｉｌｏｇ、ＶＨＤＬ、ＳＰＩＣＥ、ＰＳｐｉｃｅ等のＳＰＩＣＥバリアント、ＩＢＩＳ、ＬＥＦ、ＤＥＦ、ＧＤＳ−ＩＩ、ＯＡＳＩＳ、又は他の記述がある。様々な実施形態では、処理は、１若しくはそれ以上の集積回路への包含に適する論理及び／又は回路を生成、検証、又は指定するための解釈、コンパイル、シミュレーション、及び合成の任意の組合せを含む。各集積回路は、様々な実施形態によれば、様々な技術による設計及び／又は製造と互換性がある。技法は、プログラマブル技法（フィールド又はマスクプログラマブル・ゲート・アレイ集積回路等）、セミカスタム技法（全体的又は部分的にセルベースの集積回路等）、及びフルカスタム技法（実質的に専用の集積回路等）、それらの任意の組合せ、又は集積回路の設計及び／又は製造と互換性がある任意の他の技法を含む。
【０５６５】
幾つかの実施形態では、命令セットが記憶されたコンピュータ可読媒体により記述される動作の全て又は部分の様々な組合せは、１若しくはそれ以上のプログラム命令の実行及び／又は解釈により、１若しくはそれ以上のソース言語及び／又はスクリプト言語ステートメントの解釈及び／又はコンパイルにより、又はプログラミング及び／又はスクリプト言語ステートメントで表現される情報のコンパイル、翻訳、及び／又は解釈により生成されるバイナリ命令の実行により実行される。ステートメントは、任意の標準プログラミング又はスクリプト言語（Ｃ、Ｃ＋＋、Ｆｏｒｔｒａｎ、Ｐａｓｃａｌ、Ａｄａ、Ｊａｖａ（登録商標）、ＶＢｓｃｒｉｐｔ、及びＳｈｅｌｌ等）と互換性がある。プログラム命令、言語ステートメント、又はバイナリ命令の１若しくはそれ以上は任意選択で、１若しくはそれ以上のコンピュータ可読記憶媒体要素に記憶される。様々な実施形態では、プログラム命令の幾つか、全て、又は様々な部分は、１若しくはそれ以上の関数、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、又はそれらの部分として実現される。
【０５６６】
結論
特定の選択は、説明において、テキスト及び図面を準備するに当たり単に好都合であるため、行われ、逆の指示がない限り、選択はそれ自体、記載される実施形態の構造又は動作に関して追加情報を伝達するものとして解釈されるべきではない。選択の例には、図の付番に使用される名称の特定の編成又は割り当て及び実施形態の特徴及び要素の識別及び参照に使用される要素識別子（例えば、呼称又は数値指示子）の特定の編成又は割り当てがある。
【０５６７】
「含む（ｉｎｃｌｕｄｅ）」及び「有する（ｃｏｍｐｒｉｓｅ）」という言葉の様々な形態は特に、オープンエンド範囲の論理集合を記述する抽象として解釈されることが意図され、明示的に記載される場合（「内に（ｗｉｔｈｉｎ）」という言葉が続く等）を除き、物理的な包含を伝達する意図はない。
【０５６８】
上記実施形態は、説明の明確性及び理解のために幾らか詳細に説明されたが、本発明は、提供された詳細に限定されない。本発明の多くの実施形態がある。開示された実施形態は例示であり、限定ではない。
【０５６９】
説明と一貫して構造、構成、及び使用の多くの変形が可能であり、発行される特許の特許請求の範囲内にあることが理解される。例えば、相互接続及び機能ユニットビット幅、クロック速度、及び使用される技術のタイプは、各構成要素ブロック内で様々な実施形態により可変である。相互接続及び論理に当たられた名前は単に例示であり、記載される概念の限定として解釈されるべきではない。フローチャート及び流れ図のプロセス、動作、及び機能要素の順序及び配置は、様々な実施形態により可変である。また、逆のことが特に記載される場合を除き、指定された値範囲、使用される最大値及び最小値、又は他の特定の仕様（ファイルタイプ並びにレジスタ及びバッファ内のエントリ又は段の数等）は単に、記載された実施形態のものであり、実装技術の改善及び変化を辿ることが予期され、限定として解釈されるべきではない。
【０５７０】
当技術分野で既知の機能的に均等な技術は、様々な構成要素、サブシステム、演算、機能、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、又はそれらの部分を実施するように記載されたものの代わりに利用可能である。実施形態の多くの機能態様が選択的に、実施形態依存の設計制約並びにより高速の処理の技術トレンド（前はハードウェアであった機能のソフトウェアへの移行を促進する）及びより高い集積密度（前はソフトウェアであった機能のハードウェアへの移行を促進する）に応じて、ハードウェア（例えば、一般に専用回路）又はソフトウェア（例えば、何らかの様式のプログラムされたコントローラ又はプロセッサを介して）で実現可能であることも理解される。様々な実施形態での特定の変形は、これに限定されるものではないが、分割の違い、ファクタ及び構成の違い、異なるオペレーティングシステム及び他のシステムソフトウェアの使用、異なるインターフェース規格、ネットワークプロトコル、又は通信リンクの使用、及び特定の用途の独自の工学及びビジネス制約に従って本明細書に記載される概念を実施する場合に予期される他の変形を含む。
【０５７１】
実施形態は、記載された実施形態の多くの態様の最小の実施に必要とされるものを優に超えた詳細及び環境状況で説明した。幾つかの実施形態が、残りの要素間の基本連携を変更せずに、開示された構成要素又は特徴を省略することを当業者は認識しよう。したがって、開示された詳細の多くが、記載された実施形態の様々な態様の実施に必要とされないことが理解される。残りの要素が従来技術から区別可能である限り、省略された構成要素及び特徴は、本明細書に記載される概念に制限を課さない。
【０５７２】
設計の全てのそのような変形は、記載された実施形態により伝達される技術にわたるごく僅かな変更である。本明細書に記載された実施形態が、他の計算及びネットワーキング用途に広く適用可能であり、記載された実施形態の特定の用途又は業界に限定されないことも理解される。したがって、本発明は、発行される特許の特許請求の範囲内に包含される可能な変更及び変形の全てを包含するものとして解釈されるべきである。
【符号の説明】
【０５７３】
１００  ニューラル・ネットワーク・システム
１１０  結合サーバ
１１１  ＬＡＮ
１１２  １００Ｇｂ
１１３  配置
１１４  重み
１１５  重み
１２０  ディープ・ラーニング・アクセラレータ
１２１  ＦＰＧＡｓ
１２２  ＰＥｓ
１２３  結合
１３０  自律車両
１３１  ＣＰＵｓ
１３２  ＣＲＭ
１３３  ＩＥｓ
１３５  カメラ
１４０  携帯電話
１４１  ＣＰＵｓ
１４２  ＣＲＭ
１４３  ＩＥｓ
１４５  カメラ
１５０  配置サーバ
１５１  ＣＰＵｓ
１５２  ＣＲＭ
１６０  接続サーバ
１６１  ＣＰＵｓ
１６２  ＣＲＭ
１６４  ＮＩＣｓ
１８０  インターネット
２００  ニューラル・ネットワーク・ソフトウェア
２１０  配置サーバＳＷ
２１２  ニューロンからＰＥへのマッピングＳＷ
２２０  接続サーバＳＷ
２２４  １００Ｇｂ  ＮＩＣドライバ
２２５  トレーニング情報プロバイダＳＷ
２２６  重み受信機ＳＷ
２３０  自律車両ＳＷ
２３２  ビデオカメラＳＷ
２３３  推測エンジンＳＷ
２３４  ナビゲートＳＷ
２４０  携帯電話ＳＷ
２４２  静止カメラＳＷ
２４３  推測エンジンＳＷ
２４４  掲示ＳＷ
２５０  ＦＰＧＡ上の種々ＳＷ
２６０  ＰＥ上のタスクＳＷ
３００  ニューラル・ネットワーク・トレーニング／推論、全体
３１０  ニューロン配置
３２０  ＦＰＧＡ初期化
３３０  ＰＥ初期化
３４０  トレーニングデータ＝＞ＰＥ
３５０  順方向パス、デルタパス、チェインパス、重み更新
３６０  トレーニング完了？
３７０  重み出力
３８０  重みを推論に使用
４００  ディープ・ラーニング・アクセラレータ
４０１  順方向
４０２  デルタ
４０３  チェイン
４１０  ＡＳＩＣ
４１１  ＡＳＩＣ
４１２  ウェーハ
４２０  Ｉ／Ｏ  ＦＰＧＡ
４３０  北結合
４３１  東結合
４３２  南結合
４３３  西結合
４９７  特定のＰＥ
４９８  特定のＰＥ
４９９  ＰＥ
５００  ＰＥ
５１０  ルータ
５１１  西
５１２  西スキップ
５１３  北
５１４  東スキップ
５１５  東
５１６  南
５２０  計算要素
５２１  オフランプ
５２２  オンランプ
６００  ルータ
６１０  データイン
６１１  スキップＸ＋
６１２  スキップＸ−
６１３  Ｘ＋
６１４  Ｘ−
６１５  Ｙ＋
６１６  Ｙ−
６１７  オンランプ
６２０  データアウト
６２１  スキップＸ＋
６２２  スキップＸ−
６２３  Ｘ＋
６２４  Ｘ−
６２５  Ｙ＋
６２６  Ｙ−
６２７  オフランプ
６３０  ストールアウト
６３１  スキップＸ＋
６３２  スキップＸ−
６３３  Ｘ＋
６３４  Ｘ−
６３５  Ｙ＋
６３６  Ｙ−
６３７  オンランプ
６４０  ストールイン
６４１  スキップＸ＋
６４２  スキップＸ−
６４３  Ｘ＋
６４４  Ｘ−
６４５  Ｙ＋
６４６  Ｙ−
６４７  オフランプ
６５０  データキュー
６５１  書き込みデコーダ
６５２  アウト
６５３  発信元
６５４  スケジュール済みルータ
６５６  ストール生成
６５７  ストール
６６０  制御情報
６６１  宛先
６６２  送信元
６７０  Ｓｒｃ
７１０  ウェーブレットイングレス
７１１  ウェーブレットを待つ
７１２  ウェーブレットを受信
７１３  ウェーブレット＝＞ルータキュー
７４０  背圧情報を生成し提供、全体
７４１  ＰＥのＣＥ
７４２  ＰＥのルータ
７４３  開始
７４４  閾値を超える入力キューを判断
７４５  入力キューに関連するカラーを特定
７４６  ストール／使用可能をルータに提供
７４７  ストール／使用可能に従ってウェーブレットをＣＥに提供
７４８  終わり
７５０  背圧情報の生成及び提供、全体
７５１  ＰＥのルータ
７５２  ＰＥのＣＥ
７５３  近傍のルータ
７５５  開始
７５６  閾値を超えるデータキューを判断
７５７  カラーソースをチェック
７５８  ＣＥ、近傍のストール／使用可能カラーを判断
７５９  ストール／使用可能をＣＥ、近傍に提供
７６０  ストール／使用可能に従ってウェーブレットをルータに提供
７６１  ストール／使用可能に従ってウェーブレットをルータに提供
７６２  終わり
７８０  ストール処理、全体
７８１  ＰＥのＣＥ
７８２  開始
７８３  満杯出力キューを特定
７８４  出力キューに関連付けられたカラーを特定
７８５  満杯出力キューに関連付けられたカラーの処理をストール
７８６  終わり
８００  ＣＥ
８１２  終了
８２０  オフランプ
８２２  ハッシュ
８２４  Ｑｄｉｓｔｒ
８３０  ピッカー
８３４  ＰＣ
８３６  Ｉ配列
８３７  オンランプ
８４０  デコーダ
８４２  ＲＦ
８４４  Ｄ配列
８４５  ＵＴ状態
８４６  ＤＳＲｓ
８４７  オフランプ
８４８  Ｄストア
８５２  データパス
８５４  メモリ
８５９  出力キュー
８５９．０  出力Ｑ０
８５９．Ｎ  出力ＱＮ
８６０  オンランプ
８９０  ベース
８９６  スケジューリング情報
８９７  入力キュー
８９７．０  入力Ｑ０
８９７．Ｎ  入力ＱＮ
８９８  アクティブビット
８９８．０  アクティブビット０
８９８．Ｎ  アクティブビットＮ
８９９  ブロックビット
８９９．０  ブロックビット０
８９９．Ｎ  ブロックビットＮ
９００  タスク初期化のウェーブレット処理、全体
９０１  開始
９０２  タスク開始に使用可能なウェーブレットを選択
９０３  制御／データ？
９０４  （カラー＊４）をベースレジスタに追加して、命令アドレスを形成
９０５  メモリの命令アドレスから命令をフェッチ
９０６  フェッチされた命令を実行
９０８  終了せず
９０９  終了
９１０  下位インデックスビットをベースレジスタに追加して、命令アドレスを形成
９１９  終わり
９２０  タスクアクティベート、全体
９２１  開始
９２３  カラーの演算をアクティベート
９２４  カラーをアクティベート
９２５  ピッカーはカラーを選択
９２６  タスクを開始、カラーを非アクティベート
９２９  終わり
９４０  ブロック及びブロック解除命令処理フロー、全体
９４１  開始
９４２  命令をフェッチし実行
９４３  ブロック命令？
９４４  カラーをブロック
９４５  ブロック解除命令？
９４６  カラーをブロック解除
９４７  命令を実行
９４９  終わり
１０４０  ニューラルネットワーク部分
１０４１  （ニューロン）Ａ
１０４２  （ニューロン）Ｂ
１０４３  （ニューロン）Ｃ
１０４４  （ニューロン）Ｄ
１０４５  （ニューロン）Ｅ
１０４６  （ニューロン）Ｆ
１０６０  処理要素アレイ部分
１０６１  （アクティベーション）ａＡ
１０６２  （アクティベーション）ａＢ
１０６３  （アクティベーション）ａＣ
１０６４  （アクティベーション）ａＤ
１０６５  （アクティベーション）ａＥ
１０６６  （アクティベーション）ａＦ
１０７０  ＰＥ０
１０７１  ＰＥ１
１０７２  ＰＥ２
１０７３  ＰＥ３
１０７４  ＰＥ４
１０７５  ＰＥ５
１０７６  ＰＥ６
１０７７  ＰＥ７
１０７８  ＰＥ８
１０８０  （重み）ｗＡＤ
１０８１  （重み）ｗＡＥ
１０８２  （重み）ｗＡＦ
１０８３  （重み）ｗＢＤ
１０８４  （重み）ｗＢＥ
１０８５  （重み）ｗＢＦ
１０８６  （重み）ｗＣＤ
１０８７  （重み）ｗＣＥ
１０８８  （重み）ｗＣＦ
１０９０  ＰＳＡ
１０９１  ＰＳＡ
１０９２  ＰＳＡ
１１０１  ｆ＿ｒｘａｃｔ：ａｃｃ
１１０２  ｆ＿ｒｘａｃｔ：ｃｌｏｓｅ
１１０３  ｆ＿ｐｓｕｍ：ｐｒｏｐ
１１０４  ｆ＿ｔｘａｃｔ：ｔｘ
１１１１  前の層からのアクティベーション
１１１２  前の層からのクローズアウト
１１１３  フロー
１１１４  ウェイク
１１１５  再スケジュール
１１１６  Ｐｓｕｍ開始
１１２１  次の層へのアクティベーション
１１２２  次の層へのクローズアウト
１１３０  Ｐｓｕｍプロップ
１１３１  Ｐｓｕｍプロップ
１２００  アクティベーション累積／クローズアウト及び部分和計算／クローズアウト、全体
１２０１  開始
１２０２  アクティベーションを受信
１２０３  アクティベーションを累積
１２０４  アクティベーションクローズアウトを受信
１２０５  部分和リングを開始
１２０６  部分和を受信
１２０７  部分和を計算
１２０８  部分和を送信
１２０９  アクティベーションを送信
１２１０  クローズアウトを送信
１２１１  終わり
１３０１  スパースウェーブレット
１３０２  スパース・ウェーブレット・ペイロード
１３２０  制御ビット
１３２１  インデックス
１３２１．１  下位インデックスビット
１３２１．２  上位インデックスビット
１３２２  スパースデータ
１３２４  カラー
１３３１  高密度ウェーブレット
１３３２  高密度ウェーブレットペイロード
１３４０  制御ビット
１３４３．１  高密度データ
１３４３．２  高密度データ
１３４４  カラー
１４００  ウェーブレット作成フロー、全体
１４０１  開始
１４０２  ＰＥを初期化
１４０３  発信元を設定
１４０４  宛先（ファブリック）ＤＳＲを設定
１４０５  宛先ＤＳＲを有する命令をフェッチ／復号化
１４０６  ＤＳＲを読み取る
１４０７  キュー／メモリから（次の）発信元データ要素を読み取る
１４０８  データ要素をウェーブレットとして出力キューに提供
１４０９  まだデータ要素があるか？
１４１１  ウェーブレットをファブリックに送信
１４１２  ファブリックからウェーブレットを受信
１４１０  終わり
１４２０  送信ＰＥのＣＥ
１４３０  送信ＰＥのルータ
１４４０  受信ＰＥのルータ
１５００  ウェーブレット受信フロー、全体
１５０１  開始
１５０２  ＰＥを初期化
１５０３  ルータにおいてウェーブレットを受信
１５０４  他のＰＥへ？
１５０５  ウェーブレットを出力に送信
１５０６  ローカルＣＥへ？
１５０７  ウェーブレットをピッカーキューに書き込む
１５１０  終わり
１５２０  受信ＰＥのルータ
１５３０  受信ＰＥのＣＥ
１６００  ウェーブレット消費フロー、全体
１６０１  開始
１６０２  ピッカーは処理するウェーブレットを選択
１６０３  命令をフェッチし実行
１６０４  終わり
１７００  ニューラルネットワーク
１７１０  入力レイヤ
１７１１  Ｎ１１
１７１２  Ｎ１２
１７１３  Ｎ１３
１７２０  内部レイヤ
１７２１  Ｎ２１
１７２１．１，  １７２１．２  それぞれ１／２  Ｎ２１部分
１７２２  Ｎ２２
１７２２．１，  １７２２．２  それぞれ１／２  Ｎ２２部分
１７２３  Ｎ２３
１７２３．１，  １７２３．２  それぞれ１／２  Ｎ２３部分
１７２４  Ｎ２４
１７２４．１，  １７２４．２  それぞれ１／２  Ｎ２４部分
１７３１  Ｎ３１
１７３１．１，  １７３１．２，  １７３１．３，  １７３１．４  それぞれ１／４  Ｎ３１部分
１７３２  Ｎ３２
１７３２．１，  １７３２．２，  １７３２．３，  １７３２．４  それぞれ１／４  Ｎ３２部分
１７３３  Ｎ３３
１７４０  出力レイヤ
１７４１  Ｎ４１
１７４２  Ｎ４２
１７９１  通信
１７９１．１  通信部分
１７９２  通信
１７９２．１  通信部分
１７９３  通信
１７９３．１  通信部分
１８２０  ＰＥ０
１８２１  ＰＥ１
１８２２  ＰＥ２
１８２３  ＰＥ３
１８２４  ＰＥ４
１８２５  ＰＥ５
１９１０  ｉｎ０
１９１１  ｉｎ１
１９１２  ｉｎ２
１９１３  ｉｎ３
１９１４  ｉｎ４
１９１５  ｉｎ５
１９２０  ｏｕｔ０
１９２１  ｏｕｔ１
１９２２  ｏｕｔ２
１９２３  ｏｕｔ３
１９２４  ｏｕｔ４
１９２５  ｏｕｔ５
１９３０．１  １／２ローカル計算
１９３０．２  １／２ローカル計算
１９４０．１  １／２ローカル記憶
１９４０．２  １／２ローカル記憶
１９５０．１  追加の計算
１９５０．２  追加の計算
１９６０．１  追加の記憶
１９６０．２  追加の記憶
１９７０  追加の通信
２０００  ウェーハ部分
２０４０，２０４１，２０４３，２０４４  それぞれ隣接ＰＥ間の結合
２０５０，２０５１，２０５２，２０５３，２０５４，２０５５，２０５６，２０５７  それぞれ隣接ＰＥ間の結合の部分
２０６０  通信
２１００  ファブリック入力データ構造記述子
２１０１  長さ
２１０２  ＵＴＩＤ（マイクロスレッド識別子）
２１０３  ＵＥ（マイクロスレッドイネーブル）
２１０４  ＳＷ（ＳＩＭＤ幅）
２１０５  ＡＣ（カラーアクティベート）
２１０６  Ｔｅｒｍ（制御ウェーブレット時にマイクロスレッドを終了）
２１０７  ＣＸ（制御ウェーブレット変換イネーブル）
２１０８  ＵＳ（マイクロスレッド・スパース・モード）
２１０９  タイプ
２１１０  ＳＳ（シングルステップ）
２１１１  ＳＡ（アドレス保存／条件付きシングル・ステップ・モード）
２１１２  ＳＣ（カラー指定，通常モード）
２１１３  ＳＱ（キュー指定，通常モード）
２１１４  ＣＨ（カラー，ハイビット）
２１２０  ファブリック出力データ構造記述子
２１２１  長さ
２１２２  ＵＴＩＤ（マイクロスレッド識別子）
２１２３  ＵＥ（マイクロスレッドイネーブル）
２１２４  ＳＷ（ＳＩＭＤ幅）
２１２５  ＡＣ（カラーアクティベート）
２１２６  カラー
２１２７  Ｃ（出力制御ビット）
２１２８．１  インデックスロー
２１２８．２  インデックスハイ
２１２９  タイプ
２１３０  ＳＳ（シングルステップ）
２１３１  ＳＡ（アドレス保存／条件付きシングル・ステップ・モード）
２１３２  ＷＬＩ（ウェーブレットインデックス選択）
２１４０  １Ｄメモリデータ構造記述子
２１４１  長さ
２１４２  ベースアドレス
２１４９  タイプ
２１５０  ＳＳ（シングルステップ）
２１５１  ＳＡ（アドレス保存／条件付きシングル・ステップ・モード）
２１５２  ＷＬＩ（ウェーブレットインデックス選択）
２１５３  ストライド
２１６０  ４Ｄメモリデータ構造記述子
２１６１  長さ
２１６１．１  長さ下位ビット
２１６１．２  長さ上位ビット
２１６２  ベースアドレス
２１６９  タイプ
２１７０  ＳＳ（シングルステップ）
２１７１  ＳＡ（アドレス保存／条件付きシングル・ステップ・モード）
２１７２  ＷＬＩ（ウェーブレットインデックス選択）
２１８０  循環メモリ・バッファ・データ構造記述子
２１８１  長さ
２１８２  ベースアドレス
２１８４  ＳＷ（ＳＩＭＤ幅）
２１８８  ＦＷ（ＦＩＦＯラップビット）
２１８９  タイプ
２１９０  ＳＳ（シングルステップ）
２１９１  ＳＡ（アドレス保存／条件付きシングル・ステップ・モード）
２１９２  ＷＬＩ（ウェーブレットインデックス選択）
２２１０  循環メモリバッファ拡張データ構造記述子
２２１１  タイプ
２２１２  開始アドレス
２２１３  終了アドレス
２２１４  ＦＩＦＯ
２２１５  カラープッシュ（アクティベート）
２２１６  カラーポップ（アクティベート）
２２４０  ４Ｄメモリベクトル拡張データ構造記述子
２２４１  タイプ
２２４２  次元
２２４３  ＤＦ（次元フォーマット）
２２４４．１  ストライド選択（次元について）１
２２４４．２  ストライド選択（次元について）２
２２４４．３  ストライド選択（次元について）３
２２４４．４  ストライド選択（次元について）４
２２４５  ストライド
２３００  データ構造記述子フロー、全体
２３０１  開始
２３０２  ＤＳＲを設定
２３０３  ＤＳＲを用いて命令をフェッチ／復号化
２３０４  ＤＳＲを読み取る
２３０５  （任意選択）ＸＤＳＲを設定
２３０６  （任意選択）ＸＤＳＲを読み取る
２３１０  （次の）ソースデータ要素をキュー／メモリから読み取る
２３１０Ａ  キュー／メモリから（次の）発信元データ要素を読み取る
２３１１  データ要素に対して（次の）演算を実行
２３１２  （次の）宛先データ要素をキュー／メモリに書き込む
２３１３  データ要素がまだあるか？
２３１６  終わり
２４００  データ構造記述子復号化フロー、全体
２４０１  開始
２４１０  ファブリックベクトル
２４１１  タイプ＝ファブリック？
２４１２  ＤＳＤを介してアクセス
２４２０  メモリベクトル
２４２１  タイプ＝ＸＤＳＲ？
２４２２  ＤＳＤを介して指定されたＸＤＳＲを読み取る
２４２３  タイプ＝４Ｄベクトル？
２４２４  （任意選択）ストライドレジスタを読み取る
２４２７  ＤＳＤを介して１Ｄにアクセス
２４２８  ＸＤＳＤを介して４Ｄにアクセス
２４２９  ＸＤＳＤを介して循環バッファにアクセス
２４９９  終わり
２５１０  複数オペランド命令
２５１１  命令タイプ
２５１２  演算コード
２５１３  オペランド０符号化
２５１３．１  オペランド０タイプ
２５１３．２  オペランド０
２５１４  オペランド１符号化
２５１４．１  オペランド１タイプ
２５１４．２  オペランド１
２５１５  終了
２５２０  １発信元０宛先オペランド命令
２５２１  命令タイプ
２５２２  演算コード
２５２３  オペランド１符号化
２５２３．１  オペランド１タイプ
２５２３．２  オペランド１
２５２４  即値
２５２５  終了
２５３０  即値命令
２５３１  命令タイプ
２５３２  演算コード
２５３３．２  オペランド０
２５３４．１  即値ロー
２５３４．２  即値ハイ
２５３４  即値
２６００  マイクロスレッド処理された命令フロー、全体
２６０３  ストール？
２６０５  ストール解決？
２６０６  マイクロスレッド処理が可能？
２６０７  マイクロスレッド処理された命令の情報を保存
２６０８  次の命令を実行
２６０９  ストール解決？
２６１０  （次の）ソースデータ要素をキュー／メモリから読み出す
２７１１  第１の順方向パス
２７１２  第２の順方向パス
２７２１  第１の逆方向パス
２７２２  第２の逆方向パス
２７３１  ミニバッチサイズ（Ｎ）
２７３２  オーバーヘッド
２７３３  更新間隔（Ｕ）
２７５１  順方向パス
２７６１  逆方向パス
２７６５  順方向パス
２７６６  逆方向パス
２７６７  重み更新使用
２７７１  順方向パス
２７８１  逆方向パス
２７８５  アクティベーションの記憶
２７８６  再計算されたアクティベーションの記憶
２８０１  前のレイヤ
２８０２  後続レイヤ
２８０３  前のレイヤ
２８０４  後続レイヤ
２８１０  計算
２８１１  Ｆ
２８１２  Ｂ
２８１５  記憶
２８１６  Ａ
２８１７  Ｗ
２８１８  Ｗ
２８２０  計算
２８２１  Ｆ
２８２２  Ｂ
２８２５  記憶
２８２６  Ａ
２８２７  Ｗ
２８２８  Ｗ
２８２９  Ａ
２８３０  計算
２８３５  記憶
２８４０  計算
２８４５  記憶
２８８１  Ａ１，ｔ
２８８２  Ａ２，ｔ
２８８３  Ａ３，ｔ
２８８４  Ａ'２，ｔ
２８９１  Δ１，ｔ
２８９２  Δ２，ｔ
２８９３  Δ３，ｔ
２８９４  Δ'１，ｔ
２８９５  Δ'２，ｔ
２８９６  Δ'３，ｔ
２９００  プロセッサ
２９０１  浮動小数点ユニット（ＦＰＵ）
２９１１  乗算器
２９１２  累積器
２９１３  正規化器
２９１４  インクリメンタ
２９１５  指数ＤＰ  （データパス）
２９２０  命令復号化論理
２９２１  乱数生成器（ＲＮＧｓ）
２９２２  Ｎビット加算器
２９２５  ＦＰ制御レジスタ
２９２５．１  静的丸めモードビット
２９２５．２  静的ＲＮＧビット
２９２５．３  ＦＴＺ（ゼロにフラッシュ）
２９２５．４  最大充足
２９２５．５  最小充足
２９５０  命令
２９５１  Ｓｒｃ  Ａ
２９５２  Ｓｒｃ  Ｂ
２９５３  即値結果
２９５４  Ｓｒｃ  Ｃ
２９５５  仮数
２９５５．１  先行ゼロ
２９５５．２  他のビット
２９５６  正規化仮数
２９５７．１  Ｎ最上位下位ビット
２９５８  丸めを受ける仮数ビット
２９６１  ＲＮＧセレクタ
２９６２  Ｎビット乱数
２９６３  キャリービット
２９６４  確率的に丸められた仮数
２９６５  確率的に丸められた指数
３００２．１  最小精度単位  （ＵＬＰ）
３００３  下位ビット
３００３．２  最下位下位ビット
３０２１  丸めモードビット
３０２２  ＲＮＧビット
３０２３  演算コードビット
３０２４  ソースビット
３０２５  宛先ビット
３１００  開始
３１１０  ＦＰ乗累積命令を復号化
３１２０  ＦＰ乗累積演算を実行
３１３０  結果を正規化
３１４０  確率的丸め？
３１４１  いいえ
３１４２  はい
３１５０  結果の仮数を決定論的に丸める
３１６０  Ｎビット乱数を選択
３１７０  Ｎビット乱数及びＮ最上位下位ビットを加算
３１８０  キャリー？
３１８１  いいえ
３１８２  はい
３１９０  ＵＬＰを増分
３１９８  丸められた結果を提供
３１９９  終わり
【図１】
0006860694.tif 000010
【図２】
0006860694.tif 000011
【図３】
0006860694.tif 000012
【図４】
0006860694.tif 000013
【図５】
0006860694.tif 000014
【図６】
0006860694.tif 000015
【図７Ａ】
0006860694.tif 000016
【図７Ｂ】
0006860694.tif 000017
【図７Ｃ】
0006860694.tif 000018
【図７Ｄ】
0006860694.tif 000019
【図８】
0006860694.tif 000020
【図９Ａ】
0006860694.tif 000021
【図９Ｂ】
0006860694.tif 000022
【図９Ｃ】
0006860694.tif 000023
【図１０Ａ】
0006860694.tif 000024
【図１０Ｂ】
0006860694.tif 000025
【図１１】
0006860694.tif 000026
【図１２】
0006860694.tif 000027
【図１３Ａ】
0006860694.tif 000028
【図１３Ｂ】
0006860694.tif 000029
【図１４】
0006860694.tif 000030
【図１５】
0006860694.tif 000031
【図１６】
0006860694.tif 000032
【図１７】
0006860694.tif 000033
【図１８Ａ】
0006860694.tif 000034
【図１８Ｂ】
0006860694.tif 000035
【図１９】
0006860694.tif 000036
【図２０】
0006860694.tif 000037
【図２１Ａ】
0006860694.tif 000038
【図２１Ｂ】
0006860694.tif 000039
【図２１Ｃ】
0006860694.tif 000040
【図２１Ｄ】
0006860694.tif 000041
【図２１Ｅ】
0006860694.tif 000042
【図２２Ａ】
0006860694.tif 000043
【図２２Ｂ】
0006860694.tif 000044
【図２３】
0006860694.tif 000045
【図２４】
0006860694.tif 000046
【図２５Ａ】
0006860694.tif 000047
【図２５Ｂ】
0006860694.tif 000048
【図２５Ｃ】
0006860694.tif 000049
【図２６】
0006860694.tif 000050
【図２７Ａ】
0006860694.tif 000051
【図２７Ｂ】
0006860694.tif 000052
【図２７Ｃ】
0006860694.tif 000053
【図２７Ｄ】
0006860694.tif 000054
【図２８Ａ】
0006860694.tif 000055
【図２８Ｂ】
0006860694.tif 000056
【図２８Ｃ】
0006860694.tif 000057
【図２８Ｄ】
0006860694.tif 000058
【図２８Ｅ】
0006860694.tif 000059
【図２９】
0006860694.tif 000060
【図３０Ａ】
0006860694.tif 000061
【図３０Ｂ】
0006860694.tif 000062
【図３０Ｃ】
0006860694.tif 000063
【図３０Ｄ】
0006860694.tif 000064
【図３１】
0006860694.tif 000065