(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-09-12
(54)【発明の名称】可変ストライドパターンを使用する処理装置
(51)【国際特許分類】
G06F 9/345 20180101AFI20240905BHJP
G06F 9/34 20180101ALI20240905BHJP
【FI】
G06F9/345 S
G06F9/34 350A
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024514601
(86)(22)【出願日】2022-03-01
(85)【翻訳文提出日】2024-05-02
(86)【国際出願番号】 EP2022055105
(87)【国際公開番号】W WO2023036472
(87)【国際公開日】2023-03-16
(32)【優先日】2021-09-08
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】518371892
【氏名又は名称】グラフコアー リミテッド
【氏名又は名称原語表記】Graphcore Limited
【住所又は居所原語表記】11-19 Wine Street,Bristol,BS1 2PH,United Kingdom
(74)【代理人】
【識別番号】100169904
【氏名又は名称】村井 康司
(74)【代理人】
【識別番号】100221372
【氏名又は名称】岡崎 信治
(72)【発明者】
【氏名】アラン アレクサンダー
(72)【発明者】
【氏名】リチャード オズボーン
(72)【発明者】
【氏名】サム チェスニー
(72)【発明者】
【氏名】エドワード アンドリュース
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033AA06
5B033DA17
(57)【要約】
特定のアプリケーションでは、処理装置のメモリ内に保持される(例えば、実行ユニットによって行われる演算の結果として生成される)アプリケーションデータの一部は、メモリ内に規則的な繰り返しパターンで配置され、従って、実行ユニットは、送信エンジンによる使用に適したストライドパターンを設定し得る。送信エンジンは、規則的なパターンで一緒に配置される複数のデータ項目にアクセスするために、構成されたストライドパターンに従った位置でメモリにアクセスする。送信のために行われるのと同様に、実行ユニットは、受信エンジンによる使用のためのストライドパターンを設定し得る。受信エンジンは、複数のデータ項目の受信時、構成されたストライドパターンに従って決定されるメモリ内の位置にそれらのデータ項目を記憶させる。
【特許請求の範囲】
【請求項1】
処理装置であって、
メモリと、
前記処理装置の外部にデータを送信するための送信命令を実行するように構成される実行ユニットと、
送信エンジンと、
を備え、
送信エンジンは、
前記処理装置の外部に前記データを送信するために前記メモリがアクセスされるアドレスへのポインタを更新するための可変ストライドパターンを定義する1つ又は複数の構成値を記憶するための1つ又は複数のレジスタと、
前記実行ユニットによる前記送信命令の1つ又は複数のインスタンスの実行に応答して、
前記ポインタによって識別される前記メモリ内の位置における前記データの複数の項目を前記処理装置の外部の少なくとも1つの宛先に送信させることと、
前記複数のデータ項目の1つの各送信間で前記可変ストライドパターンに従って前記ポインタを更新することと、 を実行するように構成される処理回路と、
を含み、
前記実行ユニットは、前記送信エンジンによって使用される前記可変ストライドパターンを更新するための少なくとも1つの命令を実行するように構成され、
前記可変ストライドパターンを更新することは、1つ又は複数の構成値の少なくとも1つを、前記実行ユニットによって実行される前記送信命令の更なるインスタンスに応答して、1つ又は複数の後続の送信を行う際の前記送信エンジンによる使用のための1つ又は複数の新しい値に更新することを含む、
処理装置。
【請求項2】
前記少なくとも1つの命令は、組み合わされた送信及び更新機能を有する命令を含み、
前記命令は、前記実行ユニットによって実行されると、
1つ又は複数の後続の送信を行う際の前記送信エンジンによる使用のために、1つ又は複数の構成値の少なくとも1つの前記新しい値を前記送信エンジンに提供することと、
更なるデータ項目を前記メモリから送信することと、
の両方を実行させる、請求項1に記載の処理装置。
【請求項3】
前記少なくとも1つの命令は、前記実行ユニットによって実行されると、前記送信エンジンが、前記1つ又は複数の構成値の前記少なくとも1つの以前の値を使用して前記ポインタを更新し続ける間、前記構成値の前記1つ又は複数の前記少なくとも1つの前記新しい値を前記1つ又は複数のレジスタの一部にコピーさせる、請求項1又は2に記載の処理装置。
【請求項4】
前記実行ユニットは、前記1つ又は複数のレジスタの前記一部に前記新しい値を前記コピーすることに続いて、前記送信エンジンによる使用のために前記以前の値を前記新しい値に置換させるように構成される、請求項3に記載の処理装置。
【請求項5】
1つ又は複数の構成値の少なくとも1つは、
前記送信エンジンによって連続して送信される前記データ項目の2つの間の前記メモリ内での分離を定義するストライドサイズ値と、
異なるサイズのストライドを適用する前に、前記送信エンジンによって特定のサイズのストライドが適用される回数を定義する繰り返し値と、
の少なくとも1つを含む、請求項1~4の何れか一項に記載の処理装置。
【請求項6】
前記メモリは、前記送信命令の1つ又は複数のインスタンスと、前記可変ストライドパターンを更新するための少なくとも1つの命令の1つ又は複数のインスタンスとを含む、コンパイルされたコードセットを記憶するように構成され、
前記コンパイルされたコードセットは、同期信号の受信後の既定数のプロセッサクロックサイクルである割り当てクロックサイクル中、前記送信命令の1つ又は複数のインスタンスのそれぞれが実行されるように構成され、
前記コンパイルされたコードセットは、前記同期信号の受信後の既定数のプロセッサクロックサイクルである割り当てクロックサイクル中、前記可変ストライドパターンを更新するための少なくとも1つの命令の1つ又は複数のインスタンスのそれぞれが実行されるように構成される、請求項1~5の何れか一項に記載の処理装置。
【請求項7】
更なるデータを、前記メモリ内に戻されて記憶するように前記メモリからループバック経路に沿って搬送するように構成される配線を含み、
前記送信エンジンの前記処理回路は、前記実行ユニットによる前記送信命令の追加の1つ又は複数のインスタンスの実行に応答して、前記送信エンジンに関してアクティブな現在の可変ストライドパターンによって決定される順序において、前記ループバック経路を介して前記更なるデータの複数の項目を送信することにより、前記更なるデータの前記複数の項目を前記メモリ内に再配置させるように構成される、請求項1~6の何れか一項に記載の処理装置。
【請求項8】
処理装置であって、
メモリと、
実行ユニットと、
受信エンジンと、
を備え、
前記受信エンジンは、
前記処理装置で受信されるデータを記憶するために前記メモリがアクセスされるアドレスへのポインタを更新するための可変ストライドパターンを定義する1つ又は複数の構成値を記憶するための1つ又は複数のレジスタと、
処理回路であって、前記処理装置における複数のデータ項目の受信に応答して、
前記ポインタによって識別される前記メモリ内の位置に前記複数のデータ項目を記憶させることと、
前記複数のデータ項目の1つの受信及び記憶ごとに前記可変ストライドパターンに従って前記ポインタを更新することと、を実行するように構成される処理回路と、
を含み、
前記実行ユニットは、前記受信エンジンによって使用される前記可変ストライドパターンを更新するための少なくとも1つの命令を実行するように構成され、
前記可変ストライドパターンを更新することは、1つ又は複数の構成値の少なくとも1つを、前記処理装置で受信される1つ又は複数の更なるデータ項目を記憶するために、前記受信エンジンによって使用される1つ又は複数の新しい値に更新することを含む、
処理装置。
【請求項9】
前記少なくとも1つの命令は、組み合わされた送信及び更新機能を有する命令を含み、
前記命令は、前記実行ユニットによって実行されると、
1つ又は複数の更なるデータ項目を記憶する際の前記受信エンジンによる使用のために、前記構成値の1つ又は複数の少なくとも1つの新しい値を前記受信エンジンに提供することと、
出力データ項目を前記メモリから送信することと、
の両方を実行させる、請求項8に記載の処理装置。
【請求項10】
前記少なくとも1つの命令は、前記実行ユニットによって実行されると、前記受信エンジンが、1つ又は複数の構成値の少なくとも1つの以前の値を使用して前記ポインタを更新し続ける間、1つ又は複数の構成値の少なくとも1つの前記新しい値を1つ又は複数のレジスタの一部にコピーさせる、請求項8又は9に記載の処理装置。
【請求項11】
前記実行ユニットは、1つ又は複数のレジスタの一部に前記新しい値をコピーすることに続いて、前記受信エンジンによる使用のために以前の値を前記新しい値に置換させるように構成される、請求項10に記載の処理装置。
【請求項12】
1つ又は複数の構成値の少なくとも1つは、
データ項目が前記受信エンジンによって連続して記憶される前記メモリ内の位置間での前記メモリ内における分離を定義するストライドサイズ値と、
異なるサイズのストライドを適用する前に、前記受信エンジンによって特定のサイズのストライドが適用される回数を定義する繰り返し値と、
の少なくとも1つを含む、請求項8~11の何れか一項に記載の処理装置。
【請求項13】
前記メモリは、前記可変ストライドパターンを更新するための少なくとも1つの命令の1つ又は複数のインスタンスを含む、コンパイルされたコードセットを記憶するように構成され、
前記コンパイルされたコードセットは、前記処理装置における同期信号の受信後の既定数のプロセッサクロックサイクルである割り当てクロックサイクル中に、少なくとも1つの命令の1つ又は複数のインスタンスのそれぞれが前記実行ユニットによって実行されるように構成される、請求項8~12の何れか一項に記載の処理装置。
【請求項14】
更なるデータを、前記メモリ内に戻されて記憶されるように前記メモリからループバック経路に沿って送信するように構成される配線を含み、
前記受信エンジンの前記処理回路は、前記ループバック経路を介した更なるデータの複数の項目の受信に応答して、前記受信エンジンに関してアクティブな現在の可変ストライドパターンに依存する配置で前記更なるデータの前記複数の項目を記憶することにより、前記更なるデータの前記複数の項目を前記メモリ内に再配置させるように構成される、請求項8~13の何れか一項に記載の処理装置。
【請求項15】
前記1つ又は複数の構成値の前記少なくとも1つは、複数の構成値を含む、請求項1~14の何れか一項に記載の処理装置。
【請求項16】
前記実行ユニットは、少なくとも1つの命令の実行時、前記処理装置の構成レジスタ内に保持されるビット列を更新するように構成され、
前記構成レジスタ内に保持される前記ビット列は、前記複数の構成値の1つにそれぞれマッピングされるビットの複数のサブセットに分割され、
前記処理回路は、前記構成レジスタへの前記ビット列の書き込みに応答して、前記複数の構成値のうち、前記サブセットがマッピングされているものについて更新値を使用するように構成される、請求項15に記載の処理装置。
【請求項17】
前記ビットの複数のサブセットのそれぞれは、それがマッピングされている前記複数の構成値の対応する値よりも長さが短い、請求項16に記載の処理装置。
【請求項18】
前記複数の構成値は、複数のストライドサイズ値を含む、請求項15~17の何れか一項に記載の処理装置。
【請求項19】
前記複数の構成値は、複数の繰り返し値を含み、前記繰り返し値のそれぞれは、前記ストライドサイズ値の1つに関連し、前記処理回路が前記ストライドサイズ値の異なるものを適用する前に、前記ストライドサイズ値の対応する値が適用される回数を指定する、請求項18に記載の処理装置。
【請求項20】
前記1つ又は複数のレジスタは、前記実行ユニット上で実行されるスレッドに属する制御レジスタ及びステータスレジスタである、請求項1~19の何れか一項に記載の処理装置。
【請求項21】
請求項1~20の何れか一項に記載の処理装置の複数のインスタンスを含むマルチタイル処理ユニットであって、前記処理装置の前記複数のインスタンスのそれぞれは、タイルである、マルチタイル処理ユニット。
【請求項22】
処理装置からデータを送信する方法であって、
前記処理装置の外部にデータを送信するためにメモリがアクセスされるアドレスへのポインタを更新するための可変ストライドパターンを定義する1つ又は複数の構成値を記憶することと、
送信命令の1つ又は複数のインスタンスの実行に応答して、
前記ポインタによって識別される前記メモリ内の位置における複数のデータ項目を前記処理装置の外部の少なくとも1つの宛先に送信させることと、
前記複数のデータ項目の1つの各送信間で前記可変ストライドパターンに従って前記ポインタを更新することと、
を実行することと、
を含み、
前記可変ストライドパターンを更新するための少なくとも1つの命令を実行することを更に含み、
前記可変ストライドパターンを更新することは、前記1つ又は複数の構成値の少なくとも1つを、前記送信命令の更なるインスタンスの実行に応答して、1つ又は複数の後続の送信を行う際の使用のための1つ又は複数の新しい値に更新することを含む、方法。
【請求項23】
処理装置で受信されるデータを記憶する方法であって、
前記処理装置で受信されるデータを記憶するために前記メモリがアクセスされるアドレスへのポインタを更新するための可変ストライドパターンを定義する1つ又は複数の構成値を記憶することと、
前記処理装置における複数のデータ項目の受信に応答して、
前記ポインタによって識別される前記メモリ内の位置に前記複数のデータ項目を記憶させることと、
前記複数のデータ項目の1つの受信及び記憶ごとに前記可変ストライドパターンに従って前記ポインタを更新すること
を実行することと、
を含み、
前記可変ストライドパターンを更新するための少なくとも1つの命令を実行することを更に含み、
前記可変ストライドパターンを更新することは、前記1つ又は複数の構成値の少なくとも1つを、前記処理装置で受信される1つ又は複数の更なるデータ項目を記憶するために使用される1つ又は複数の新しい値に更新することを含む、方法。
【請求項24】
処理装置の実行ユニットによって実行されると、前記処理装置からデータを送信する方法を行わせるコンピュータ可読命令の組を含むコンピュータプログラムであって、前記方法は、
前記処理装置の外部にデータを送信するためにメモリがアクセスされるアドレスへのポインタを更新するための可変ストライドパターンを定義する1つ又は複数の構成値を記憶することと、
送信命令の1つ又は複数のインスタンスの実行に応答して、
前記ポインタによって識別される前記メモリ内の位置における複数のデータ項目を前記処理装置の外部の少なくとも1つの宛先に送信させることと、
前記複数のデータ項目の1つの各送信間で前記可変ストライドパターンに従って前記ポインタを更新することと、
を実行することと、
を含み、
前記方法は、前記可変ストライドパターンを更新するための少なくとも1つの命令の実行に応答して前記可変ストライドパターンを更新することを更に含み、
前記可変ストライドパターンを更新することは、前記1つ又は複数の構成値の少なくとも1つを、前記送信命令の更なるインスタンスの実行に応答して、1つ又は複数の後続の送信を行う際の使用のための1つ又は複数の新しい値に更新することを含む、コンピュータプログラム。
【請求項25】
処理装置の実行ユニットによって実行されると、前記処理装置で受信されるデータを記憶する方法を行わせるコンピュータ可読命令の組を含むコンピュータプログラムであって、前記方法は、
前記処理装置で受信されるデータを記憶するために前記メモリがアクセスされるアドレスへのポインタを更新するための可変ストライドパターンを定義する1つ又は複数の構成値を記憶することと、
前記処理装置における複数のデータ項目の受信に応答して、
前記ポインタによって識別される前記メモリ内の位置に前記複数のデータ項目を記憶させることと、
前記複数のデータ項目の1つの受信及び記憶ごとに前記可変ストライドパターンに従って前記ポインタを更新することと、
を実行することと、
を含み、
前記方法は、前記可変ストライドパターンを更新するための少なくとも1つの命令の実行に応答して前記可変ストライドパターンを更新することを更に含み、
前記可変ストライドパターンを更新することは、前記1つ又は複数の構成値の少なくとも1つを、前記処理装置で受信される1つ又は複数の更なるデータ項目を記憶するために使用される1つ又は複数の新しい値に更新することを含む、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、メモリを含む処理装置に関し、具体的には、そのメモリ内の識別された位置との間でデータを送信及び受信するように構成される処理装置に関する。
【背景技術】
【0002】
処理装置は、実行ユニット及びメモリを含み得る。実行ユニットは、メモリからロードされたデータに対して演算を行って結果を生成するために、1つ又は複数のプログラムスレッドを実行することができ、結果は、メモリ内に記憶される。結果は、実行ユニットによるその後の処理の対象となり得るか、又は処理装置からディスパッチされ得る。
【0003】
実行中のアプリケーションに利用可能な処理能力を向上させるために、複数の処理装置を接続し、複数の異なる種類の演算を互いに並行して実行した後、その結果を交換するように構成することができる。このような並列処理アーキテクチャが有用であることに関連する一例は、機械知能に見出すことができる。機械知能の分野の当業者によく知られているように、機械知能アルゴリズムは、複数の相互接続ノードのグラフによって表すことができる「知識モデル」に対して反復更新を行うことに基づく。各ノードは、その入力の関数を表す。一部のノードは、グラフへの入力を受信し、一部のノードは、1つ又は複数の他のノードからの入力を受信する一方、一部のノードの出力は、他のノードの入力を形成し、一部のノードの出力は、グラフの出力を提供する(一部の事例では、所与のノードがグラフへの入力、グラフからの出力及び他のノードへの接続の全てを有することさえある)。更に、各ノードにおける関数は、1つ又は複数の個々のパラメータ、例えば重みによってパラメータ化される。学習段階中の目的は、経験的入力データの組に基づき、一連の可能な入力に対してグラフが全体として所望の出力を生成するように様々なパラメータの値を見つけることである。確率的勾配降下に基づく逆伝播アルゴリズムなど、これを行うための様々なアルゴリズムが当技術分野で知られている。入力データに基づく複数回の反復にわたり、パラメータは、その誤りを減らすように徐々に調整され、グラフは、解に向かって収束する。その後の段階では、指定の入力の組を所与として出力の予測を行うか、又は指定の出力の組を所与として入力(原因)に関する推論を行うために、学習済みモデルを使用することができる。
【0004】
このような機械学習アプリケーションでは、各ノードの実装は、データの処理を伴い、グラフの相互接続は、ノード間で交換されるデータに対応する。典型的には、各ノードの処理の少なくとも一部は、グラフ内のノードの一部又は他の全てから独立して実行することができ、従って、大規模なグラフは、並列化の大きい機会となる。
【0005】
複数の処理装置を含むアプリケーションを実行する場合、典型的には、それらの装置間でデータを交換する必要がある。データを送信する場合、処理装置は、送信される各データ項目がそのメモリ内に記憶される場所を識別する機能を含まなければならない。更に、データを受信する場合、処理装置は、各受信データ項目が記憶される場所をそのメモリ内で識別する機能を含まなければならない。
【発明の概要】
【発明が解決しようとする課題】
【0006】
データを送信又は記憶するためのメモリ内の位置を処理装置が識別できるようにするために、処理装置内に記憶されるコンパイルされたコードセット内でメモリアドレスを明示的に識別することができる。しかし、処理装置の命令メモリ内に全てのメモリアドレスを明示的に記憶することは、命令メモリ内のかなりの量の記憶空間を必要とする。データの送信及び記憶のためのメモリアドレスを引き続き識別できるようにしながら、必要な記憶空間の量を減らす方法を見出すことが望ましい。
【課題を解決するための手段】
【0007】
第1の態様によれば、処理装置は、メモリと、処理装置の外部にデータを送信するための送信命令を実行するように構成される実行ユニットと、送信エンジンと、をそなエル。送信エンジンは、処理装置の外部にデータを送信するためにメモリがアクセスされるアドレスへのポインタを更新するための可変ストライドパターンを定義する1つ又は複数の構成値を記憶するための1つ又は複数のレジスタと、処理回路と、を含む。処理回路は、実行ユニットによる送信命令の1つ又は複数のインスタンスの実行に応答して、ポインタによって識別されるメモリ内の位置における複数のデータ項目を処理装置の外部の少なくとも1つの宛先に送信させることと、複数のデータ項目の1つの各送信間で可変ストライドパターンに従ってポインタを更新することとを実行するように構成される。実行ユニットは、送信エンジンによって使用される可変ストライドパターンを更新するための少なくとも1つの命令を実行するように構成され、可変ストライドパターンを更新することは、実行ユニットによって実行される送信命令の更なるインスタンスに応答して、1つ又は複数の後続の送信を行う際の送信エンジンによる使用のために、1つ又は複数の構成値の少なくとも1つを更新することを含む。
【0008】
特定のアプリケーションでは、処理装置のメモリ内に保持される(例えば、実行ユニットによって行われる演算の結果として生成される)アプリケーションデータの一部がメモリ内に規則的な繰り返しパターンで配置され、これにより、実行ユニットが、送信エンジンによる使用に適したストライドパターンを設定し得ることを本発明者らは認識した。送信エンジンは、規則的なパターンで一緒に配置される複数のデータ項目にアクセスするために、構成されたストライドパターンに従った位置でメモリにアクセスする。この結果、送信エンジンは、処理装置から送信されるあらゆるデータ項目の明示的なアドレス値を実行ユニットが提供することを必要とせずに、メモリ内の適切な位置からデータを送信することができる。このようにして、実施形態は、データを送信するためのコードのサイズを減らすことができる方法を提供する。
【0009】
一部の実施形態では、少なくとも1つの命令は、組み合わされた送信及び更新機能を有する命令を含み、この命令は、実行ユニットによって実行されると、1つ又は複数の後続の送信を行う際の送信エンジンによる使用のために、1つ又は複数の構成値の少なくとも1つの新しい値を送信エンジンに提供することと、更なるデータ項目をメモリから送信することとの両方を実行する。
【0010】
一部の実施形態では、少なくとも1つの命令は、実行ユニットによって実行されると、送信エンジンが、1つ又は複数の構成値の少なくとも1つの以前の値を使用してポインタを更新し続ける間、構成値の1つ又は複数の少なくとも1つの新しい値を1つ又は複数のレジスタの一部にコピーさせる。
【0011】
一部の実施形態では、実行ユニットは、1つ又は複数のレジスタの一部に新しい値をコピーすることに続いて、送信エンジンによる使用のために以前の値を新しい値に置換させるように構成される。
【0012】
一部の実施形態では、1つ又は複数の構成値の少なくとも1つは、送信エンジンによって連続して送信されるデータ項目の2つの間のメモリ内での分離を定義するストライドサイズ値及び異なるサイズのストライドを適用する前に、送信エンジンによって特定のサイズのストライドが適用される回数を定義する繰り返し値の少なくとも1つを含む。
【0013】
一部の実施形態では、メモリは、送信命令の1つ又は複数のインスタンスと、可変ストライドパターンを更新するための少なくとも1つの命令の1つ又は複数のインスタンスとを含む、コンパイルされたコードセットを記憶するように構成され、コンパイルされたコードセットは、同期信号の受信後の既定数のプロセッサクロックサイクルである割り当てクロックサイクル中、送信命令の1つ又は複数のインスタンスのそれぞれが実行されるように構成され、コンパイルされたコードセットは、同期信号の受信後の既定数のプロセッサクロックサイクルである割り当てクロックサイクル中、可変ストライドパターンを更新するための少なくとも1つの命令の1つ又は複数のインスタンスのそれぞれが実行されるように構成される。
【0014】
一部の実施形態では、処理装置は、更なるデータを、メモリ内に戻されて記憶されるようにメモリからループバック経路に沿って搬送するように構成される配線を含み、送信エンジンの処理回路は、実行ユニットによる送信命令の追加の1つ又は複数のインスタンスの実行に応答して、送信エンジンに関してアクティブな現在の可変ストライドパターンによって決定される順序において、ループバック経路を介して更なるデータの複数の項目を送信することにより、更なるデータの複数の項目をメモリ内に再配置させるように構成される。
【0015】
第2の態様によれば、処理装置は、メモリと、実行ユニットと、受信エンジンと、を備える。受信エンジンは、処理装置で受信されるデータを記憶するためにメモリがアクセスされるアドレスへのポインタを更新するための可変ストライドパターンを定義する1つ又は複数の構成値を記憶するための1つ又は複数のレジスタと、処理回路と、を含む。処理回路は、処理装置における複数のデータ項目の受信に応答して、ポインタによって識別されるメモリ内の位置に複数のデータ項目を記憶させることと、複数のデータ項目の1つの受信及び記憶ごとに可変ストライドパターンに従ってポインタを更新することとを実行するように構成される。実行ユニットは、受信エンジンによって使用される可変ストライドパターンを更新するための少なくとも1つの命令を実行するように構成され、可変ストライドパターンを更新することは、処理装置で受信される1つ又は複数の更なるデータ項目を記憶するために、1つ又は複数の構成の少なくとも1つの新しい値が受信エンジンによって使用されるように、1つ又は複数の構成値の少なくとも1つを更新することを含む。
【0016】
送信のために行われるのと同様に、実行ユニットは、受信エンジンによる使用のためのストライドパターンを設定し得る。受信エンジンは、複数のデータ項目の受信時、構成されたストライドパターンに従って決定されるメモリ内の位置にそれらのデータ項目を記憶させる。データ項目は、受信データに対して演算を行うための実行ユニットによる使用に適した規則的な繰り返しパターンで記憶され得る。受信エンジンは、処理装置で受信されるあらゆるデータ項目の明示的なアドレス値を実行ユニットが提供することを必要とせずに、構成されたストライドパターンを使用してメモリ内の適切な位置に受信データを記憶することができる。このようにして、実施形態は、受信データを記憶するためのコードのサイズを減らすことができる方法を提供する。
【0017】
第1の態様及び第2の態様は、同じ技術的問題に対する密接に関係する代替的解決策を表す。
【0018】
一部の実施形態では、少なくとも1つの命令は、組み合わされた送信及び更新機能を有する命令を含み、この命令は、実行ユニットによって実行されると、1つ又は複数の更なるデータ項目を記憶する際の受信エンジンによる使用のために、構成値の1つ又は複数の少なくとも1つの新しい値を受信エンジンに提供することと、出力データ項目をメモリから送信することとの両方を実行させる。
【0019】
一部の実施形態では、少なくとも1つの命令は、実行ユニットによって実行されると、受信エンジンが、1つ又は複数の構成値の少なくとも1つの以前の値を使用してポインタを更新し続ける間、1つ又は複数の構成値の少なくとも1つの新しい値を1つ又は複数のレジスタの一部にコピーさせる。
【0020】
一部の実施形態では、実行ユニットは、1つ又は複数のレジスタの一部に新しい値をコピーすることに続いて、受信エンジンによる使用のために以前の値を新しい値に置換させるように構成される。
【0021】
一部の実施形態では、1つ又は複数の構成値の少なくとも1つは、データ項目が受信エンジンによって連続して記憶されるメモリ内の位置間でのメモリ内における分離を定義するストライドサイズ値及び異なるサイズのストライドを適用する前に、受信エンジンによって特定のサイズのストライドが適用される回数を定義する繰り返し値の少なくとも1つを含む。
【0022】
一部の実施形態では、処理装置は、更なるデータを、メモリ内に戻されて記憶されるようにメモリからループバック経路に沿って送信するように構成される配線を含み、受信エンジンの処理回路は、ループバック経路を介した更なるデータの複数の項目の受信に応答して、受信エンジンに関してアクティブな現在の可変ストライドパターンに依存する配置で更なるデータの複数の項目を記憶することにより、更なるデータの複数の項目をメモリ内に再配置させるように構成される。
【0023】
一部の実施形態では、メモリは、可変ストライドパターンを更新するための少なくとも1つの命令の1つ又は複数のインスタンスを含む、コンパイルされたコードセットを記憶するように構成され、コンパイルされたコードセットは、処理装置における同期信号の受信後の既定数のプロセッサクロックサイクルである割り当てクロックサイクル中、少なくとも1つの命令の1つ又は複数のインスタンスのそれぞれが実行ユニットによって実行されるように構成される。
【0024】
一部の実施形態では、1つ又は複数の構成値の少なくとも1つは、複数の構成値を含む。
【0025】
一部の実施形態では、実行ユニットは、少なくとも1つの命令の実行時、処理装置の構成レジスタ内に保持されるビット列を更新するように構成され、構成レジスタ内に保持されるビット列は、複数の構成値の1つにそれぞれマッピングされる、ビットの複数のサブセットに分割され、それにより、処理回路は、構成レジスタへのビット列の書き込みに応答して、複数の構成値のうち、サブセットがマッピングされているものについて更新値を使用するように構成される。
【0026】
一部の実施形態では、ビットの複数のサブセットのそれぞれは、それがマッピングされている複数の構成値のその関連するものよりも長さが短い。
【0027】
一部の実施形態では、複数の構成値は、複数のストライドサイズ値を含む。
【0028】
一部の実施形態では、複数の構成値は、複数の繰り返し値を含み、繰り返し値のそれぞれは、ストライドサイズ値の1つに関連し、且つ処理回路がストライドサイズ値の異なるものを適用する前に、ストライドサイズ値のその関連するものが適用される回数を指定する。
【0029】
一部の実施形態では、1つ又は複数のレジスタは、実行ユニット上で実行されるスレッドに属する制御レジスタ及びステータスレジスタである。
【0030】
第3の態様によれば、第1の態様又は第2の態様による処理装置の複数のインスタンスを含むマルチタイル処理ユニットであって、処理装置の複数のインスタンスのそれぞれは、タイルである、マルチタイル処理ユニットが提供される。
【0031】
第4の態様によれば、処理装置からデータを送信する方法が提供され、本方法は、処理装置の外部にデータを送信するためにメモリがアクセスされるアドレスへのポインタを更新するための可変ストライドパターンを定義する1つ又は複数の構成値を記憶することと、送信命令の1つ又は複数のインスタンスの実行に応答して、ポインタによって識別されるメモリ内の位置における複数のデータ項目を処理装置の外部の少なくとも1つの宛先に送信させること、複数のデータ項目の1つの各送信間で可変ストライドパターンに従ってポインタを更新することを行うことと、を含む。本方法は、可変ストライドパターンを更新するための少なくとも1つの命令を実行することを更に含み、可変ストライドパターンを更新することは、送信命令の更なるインスタンスの実行に応答して、1つ又は複数の後続の送信を行う際の使用のための1つ又は複数の構成値の少なくとも1つを更新することを含む。
【0032】
一部の実施形態では、少なくとも1つの命令は、組み合わされた送信及び更新機能を有する命令を含み、本方法は、1つ又は複数の後続の送信を行う際の送信エンジンによる使用のために、1つ又は複数の構成値の少なくとも1つの新しい値を送信エンジンに提供することと、更なるデータ項目をメモリから送信することとの両方を行わせるために、組み合わされた送信及び更新機能を有する命令を実行することを含む。
【0033】
一部の実施形態では、少なくとも1つの命令は、実行ユニットによって実行されると、送信エンジンが、1つ又は複数の構成値の少なくとも1つの以前の値を使用してポインタを更新し続ける間、構成値の1つ又は複数の少なくとも1つの新しい値を1つ又は複数のレジスタの一部にコピーさせる。
【0034】
一部の実施形態では、本方法は、1つ又は複数のレジスタの一部に新しい値をコピーすることに続いて、送信エンジンによる使用のために以前の値を新しい値に置換させることを含む。
【0035】
一部の実施形態では、1つ又は複数の構成値の少なくとも1つは、同時に送信されるデータ項目の2つの間のメモリ内での分離を定義するストライドサイズ値及び異なるサイズのストライドを適用する前に、特定のサイズのストライドが適用される回数を定義する繰り返し値の少なくとも1つを含む。
【0036】
一部の実施形態では、メモリは、送信命令の1つ又は複数のインスタンスと、可変ストライドパターンを更新するための少なくとも1つの命令の1つ又は複数のインスタンスとを含む、コンパイルされたコードセットを記憶するように構成される。本方法は、同期信号の受信後の既定数のプロセッサクロックサイクルである割り当てクロックサイクル中、送信命令の1つ又は複数のインスタンスのそれぞれを実行することと、同期信号の受信後の既定数のプロセッサクロックサイクルである割り当てクロックサイクル中、可変ストライドパターンを更新するための少なくとも1つの命令の1つ又は複数のインスタンスのそれぞれを実行することと、を含む。
【0037】
一部の実施形態では、本方法は、実行ユニットによる送信命令の追加の1つ又は複数のインスタンスの実行に応答して、送信エンジンに関してアクティブな現在の可変ストライドパターンによって決定される順序において、複数の更なるデータ項目を、メモリ内に戻されて記憶されるようにループバック経路を介して送信することにより、更なるデータの複数の項目をメモリ内に再配置させることを含む。
【0038】
第5の態様によれば、処理装置で受信されるデータを記憶する方法が提供され、本方法は、処理装置で受信されるデータを記憶するためにメモリがアクセスされるアドレスへのポインタを更新するための可変ストライドパターンを定義する1つ又は複数の構成値を記憶することと、処理装置における複数のデータ項目の受信に応答して、ポインタによって識別されるメモリ内の位置に複数のデータ項目を記憶させることと、複数のデータ項目の1つの受信及び記憶ごとに可変ストライドパターンに従ってポインタを更新することを実行することと、を含む。本方法は、可変ストライドパターンを更新するための少なくとも1つの命令を実行することを更に含み、可変ストライドパターンを更新することは、処理装置で受信される1つ又は複数の更なるデータ項目を記憶するために、1つ又は複数の構成の少なくとも1つの新しい値が使用されるように、1つ又は複数の構成値の少なくとも1つを更新することを含む。
【0039】
一部の実施形態では、少なくとも1つの命令は、組み合わされた送信及び更新機能を有する命令を含み、本方法は、1つ又は複数の更なるデータ項目を記憶する際の受信エンジンによる使用のために、構成値の1つ又は複数の少なくとも1つの新しい値を受信エンジンに提供することと、出力データ項目をメモリから送信することとの両方を行わせるために、組み合わされた送信及び更新機能を有する命令を実行することを含む。
【0040】
一部の実施形態では、少なくとも1つの命令は、実行ユニットによって実行されると、受信エンジンが、1つ又は複数の構成値の少なくとも1つの以前の値を使用してポインタを更新し続ける間、1つ又は複数の構成値の少なくとも1つの新しい値を1つ又は複数のレジスタの一部にコピーさせる。
【0041】
一部の実施形態では、本方法は、1つ又は複数のレジスタの一部に新しい値をコピーすることに続いて、受信エンジンによる使用のために以前の値を新しい値に置換させることを含む。
【0042】
一部の実施形態では、1つ又は複数の構成値の少なくとも1つは、データ項目が受信エンジンによって連続して記憶されるメモリ内の位置間でのメモリ内における分離を定義するストライドサイズ値及び異なるサイズのストライドを適用する前に、受信エンジンによって特定のサイズのストライドが適用される回数を定義する繰り返し値の少なくとも1つを含む。
【0043】
一部の実施形態では、本方法は、処理装置のループバック経路を介した更なるデータの複数の項目の受信に応答して、受信エンジンに関してアクティブな現在の可変ストライドパターンに依存する配置で更なるデータの複数の項目を記憶することにより、更なるデータの複数の項目をメモリ内に再配置させることを含む。
【0044】
一部の実施形態では、メモリは、可変ストライドパターンを更新するための少なくとも1つの命令の1つ又は複数のインスタンスを含む、コンパイルされたコードセットを記憶するように構成され、本方法は、処理装置における同期信号の受信後の既定数のプロセッサクロックサイクルである割り当てクロックサイクル中、少なくとも1つの命令の1つ又は複数のインスタンスのそれぞれが実行されるように、コンパイルされたコードセットを実行することを含む。
【0045】
一部の実施形態では、1つ又は複数の構成値の少なくとも1つは、複数の構成値を含む。
【0046】
一部の実施形態では、本方法は、少なくとも1つの命令の実行時、処理装置の構成レジスタ内に保持されるビット列を更新することを含み、構成レジスタ内に保持されるビット列は、複数の構成値の1つにそれぞれマッピングされる、ビットの複数のサブセットに分割され、それにより、処理回路は、構成レジスタへのビット列の書き込みに応答して、複数の構成値のうち、サブセットがマッピングされているものについて更新値を使用するように構成される。
【0047】
一部の実施形態では、ビットの複数のサブセットのそれぞれは、それがマッピングされている複数の構成値のその関連するものよりも長さが短い。
【0048】
一部の実施形態では、複数の構成値は、複数のストライドサイズ値を含む。
【0049】
一部の実施形態では、複数の構成値は、複数の繰り返し値を含み、繰り返し値のそれぞれは、ストライドサイズ値の1つに関連し、且つ処理回路がストライドサイズ値の異なるものを適用する前に、ストライドサイズ値のその関連するものが適用される回数を指定する。
【0050】
一部の実施形態では、1つ又は複数のレジスタは、実行ユニット上で実行されるスレッドに属する制御レジスタ及びステータスレジスタである。
【0051】
第6の態様によれば、少なくとも1つのプロセッサによって実行されると、第4の態様又は第5の態様及びそのための任意の実施形態による方法を行わせるコンピュータ可読命令を含むコンピュータプログラムが提供される。
【0052】
第7の態様によれば、第6の態様によるコンピュータプログラムを含む非一時的コンピュータ可読媒体が提供される。
【0053】
ここで、本発明のよりよい理解のために、本発明がどのように実施され得るかを示すために、添付図面を例として参照する。
【図面の簡単な説明】
【0054】
【
図2】複数のスレッドコンテキストの概略ブロック図である。
【
図7】負のストライドを含むストライドパターンの図である。
【
図8】処理装置の一部である送信/受信エンジンの図である。
【
図9A】第1の例の送信命令のフィールドの図である。
【
図9B】第2の例の送信命令のフィールドの図である。
【
図10】送信機能及びプット機能を組み合わせた第3の例の送信命令のフィールドの図である。
【
図11A】複数のタイルを含む処理ユニットの概略図である。
【
図11B】計算段階と交換段階とを交互に繰り返す複数のタイルの概略図である。
【
図11C】バリア同期を含む、計算及び交換のBSPスーパーサイクルの概略図である。
【
図12】処理ユニットのタイル上で実行するためのコードレットのコンパイルの図である。
【
図13】処理装置からデータを送信する方法のフローチャートである。
【
図14】処理装置からデータを受信する方法のフローチャートである。
【
図15】ループバック経路を示す、処理装置の更なる概略ブロック図である。
【
図16】可変ストライド機能を使用して行われ得る行列転置演算を示す。
【
図17】ループバックモードがアクティブであるとき、行列転置演算を行うために送信エンジンによって適用される送信パターンを示す。
【
図18】ループバックモードがアクティブであるとき、行列転置演算を行うために受信エンジンによって使用される記憶パターンを示す。
【
図19】ループバック経路を介してデータを送信することによってそのデータを再配置する方法のフローチャートである。
【
図20】一実施形態によるトリガレジスタの2つのフィールドを示す。
【発明を実施するための形態】
【0055】
図1は、本開示の実施形態による処理装置40の一例を示す。処理装置40は、バレルスレッド処理ユニットの形態のマルチスレッド処理ユニット10及びローカルメモリ11(即ちマルチタイルアレイの場合には同じタイル上又はシングルプロセッサチップの場合には同じチップ上にある)を含む。バレルスレッド処理ユニットは、パイプラインの実行時間が、インタリーブされたタイムスロットの繰り返しシーケンスに分割されるマルチスレッド処理ユニットの一種であり、各タイムスロットは、所与のスレッドによって所有され得る。これについては、間もなくより詳細に論じる。メモリ11は、命令メモリ12及びデータメモリ22(これらは、異なるアドレス指定可能なメモリユニット又は同じアドレス指定可能なメモリユニットの異なる領域によって実装され得る)を含む。命令メモリ12は、処理ユニット10によって実行される機械コードを記憶する一方、データメモリ22は、実行されるコードによって演算されるデータ及び(例えば、かかる演算の結果として)実行されるコードによって出力されるデータの両方を記憶する。
【0056】
メモリ12は、プログラムの様々な異なるスレッドを記憶し、各スレッドは、特定のタスクを実行するための個々の命令のシーケンスを含む。本明細書で言及する命令は、機械コード命令、即ち単一のオペコード及びゼロ以上のオペランドで構成される、処理ユニットの命令セットの基本命令の1つのインスタンスを意味することに留意されたい。
【0057】
メモリ12内に記憶されるプログラムは、複数のワーカースレッド及び1つ又は複数のスーパーバイザスレッドとして構造化され得るスーパーバイザサブプログラムを含む。実施形態では、ワーカースレッドの一部又は全てのそれぞれは、個々の「コードレット」の形態を取る。
【0058】
処理ユニット10内では、命令メモリ12からのスレッドの複数の異なるものを単一の実行パイプライン13によってインタリーブすることができる(しかし、典型的には、命令メモリ内に記憶される全スレッドのサブセットのみがプログラム全体の任意の所与の時点でインタリーブされ得る)。マルチスレッド処理ユニット10は、同時に実行されるスレッドの異なるそれぞれのものの状態(コンテキスト)を表すようにそれぞれ構成される複数のコンテキストレジスタファイル26と、同時に実行されるスレッドに共通の共用実行パイプライン13と、共用パイプラインによってインタリーブ式、好ましくはラウンドロビン式に実行するための同時スレッドをスケジューリングするためのスケジューラ24とを含む。処理ユニット10は、複数のスレッドに共通の共用命令メモリ12及び同じく複数のスレッドに共通の共用データメモリ22に接続される。
【0059】
実行パイプライン13は、フェッチステージ14と、復号ステージ16と、命令セットアーキテクチャによって定義される算術演算及び論理演算、アドレス計算、ロード及び記憶演算並びに他の演算を行うことができる実行ユニットを含む実行ステージ18とを含む。コンテキストレジスタファイル26のそれぞれは、個々のスレッドのプログラム状態を表すための個々のレジスタの組を含む。
【0060】
コンテキストレジスタファイル26のそれぞれを構成するレジスタの一例を
図2に概略的に示す。コンテキストレジスタファイル26のそれぞれは、1つ又は複数の個々の制御レジスタ28を含み、かかる制御レジスタ28は、少なくとも(スレッドが現在実行されている命令アドレスを追跡するための)個々のスレッドのためのプログラムカウンタ(PC)と、実施形態では個々のスレッドの現在の状態(現在実行されているか、又は例えば誤りに遭遇したために一時停止しているかなど)を記録する1つ又は複数のステータスレジスタ(SR)との組も含む。コンテキストレジスタファイル26のそれぞれは、個々のスレッドによって実行される命令のオペランド、即ち実行時に個々のスレッドの命令のオペコードによって定義される演算によって操作される値又はかかる演算から生じる値を一時的に保持するための個々のオペランドレジスタ(OP)32の組も含む。コンテキストレジスタファイル26のそれぞれは、個々の1つ又は複数の他の種類のレジスタ(不図示)を任意に含み得ることが理解されるであろう。「レジスタファイル」という用語は、共通のアドレス空間内のレジスタのグループを指すために使用され得るが、本開示では必ずしもそうである必要はなく、ハードウェアコンテキスト26のそれぞれ(各コンテキストを表すレジスタセット26のそれぞれ)は、より一般的に、1つ又は複数のかかるレジスタファイルを含み得ることにも留意されたい。
【0061】
実施形態では、本構成は、同時に実行可能なスレッドの数M(図示の例ではM=3であるが、これに限定されない)のそれぞれに対する1つのワーカーコンテキストレジスタファイルCX0...CX(M-1)と、1つの追加のスーパーバイザコンテキストレジスタファイルCXSとを含む。ワーカーコンテキストレジスタファイルは、ワーカースレッドのコンテキストを記憶するために予約され、スーパーバイザコンテキストレジスタファイルは、スーパーバイザスレッドのコンテキストを記憶するために予約される。実施形態では、スーパーバイザコンテキストは、ワーカーのそれぞれと異なる数のレジスタを有する点で特別であることに留意されたい。ワーカーコンテキストのそれぞれは、好ましくは、互いに同じ数のステータスレジスタ及びオペランドレジスタを有する。実施形態では、スーパーバイザコンテキストは、ワーカーのそれぞれよりも少ないオペランドレジスタを有することができる。ワーカーコンテキストが有することができ、スーパーバイザが含まないオペランドレジスタの例は、浮動小数点レジスタ、アキュムレートレジスタ及び/又は(ニューラルネットワークの重みを保持するための)専用重みレジスタを含む。実施形態では、スーパーバイザは、異なる数のステータスレジスタを有することもできる。更に、実施形態では、ワーカースレッド及びスーパーバイザスレッドが幾つかの異なる種類の命令を実行するが、幾つかの命令の種類も共有するように、処理装置40の命令セットアーキテクチャを構成することができる。
【0062】
フェッチステージ14は、スケジューラ24の制御下で命令メモリ12から実行される命令をフェッチするように接続される。スケジューラ24は、タイムスロットの繰り返しシーケンスで同時実行スレッドの組のそれぞれから命令を順番にフェッチし、それにより、パイプライン13のリソースを、複数の時間的にインタリーブされたタイムスロットに分割するようにフェッチステージ14を制御するように構成される。例えば、スケジューリングスキームは、ラウンドロビン又は重み付きラウンドロビンであり得る。このような方法で動作するプロセッサの別の用語は、バレルスレッドプロセッサである。
【0063】
一部の実施形態では、スケジューラ24は、スレッドが一時停止しているかどうかを示す各スレッドのステータスレジスタSRの1つにアクセスすることができ、これにより、スケジューラ24は、現在アクティブなスレッドのみの命令をフェッチするようにフェッチステージ14を実際に制御する。実施形態では、好ましくは、各タイムスロット(及び対応するコンテキストレジスタファイル)は、1つのスレッド又は別のスレッドによって常に所有され、即ち、各スロットは、何らかのスレッドによって常に占有され、各スロットは、スケジューラ24のシーケンスに常に含まれるが、任意の所与のスロットを占有しているスレッドがその時点で偶然一時停止している可能性があり、その場合、シーケンスがそのスロットに回ってくると、個々のスレッドのための命令フェッチが見送られる。代わりに、例えばあまり好ましくない代替的実装形態では、一部のスロットが一時的に空いており、スケジュールされたシーケンスから除外され得ることも排除しない。実行ユニットがインタリーブするように動作可能なタイムスロットの数などに言及する場合、これは、実行ユニットが同時に実行可能な最大スロット数、即ち実行ユニットのハードウェアがサポートする同時スロットの数を指す。
【0064】
フェッチステージ14は、コンテキストのそれぞれのプログラムカウンタ(PC)にアクセスすることができる。個々のスレッドに対して、フェッチステージ14は、プログラムカウンタによって指示されるプログラムメモリ12内の次のアドレスから、そのスレッドの次の命令をフェッチする。プログラムカウンタは、分岐命令によって分岐されない限り、各実行サイクルをインクリメントする。次いで、フェッチステージ14は、フェッチされた命令を、復号されるように復号ステージ16に渡し、次いで、復号ステージ16は、命令が実行されるように、命令内で指定された任意のオペランドレジスタ32の復号されたアドレスと共に、復号された命令の指示を実行ユニット18に渡す。実行ユニット18は、オペランドレジスタ32及び制御レジスタ28へのアクセスを有し、これらのレジスタは、(例えば、2つのオペランドレジスタ内の値を加算、乗算、減算又は除算し、その結果を個々のスレッドの別のオペランドレジスタに出力することによる)算術命令の場合など、復号されたレジスタアドレスに基づいて命令を実行する際に実行ユニット18が使用することができる。又は、命令がメモリアクセス(ロード又はストア)を定義する場合、実行ユニット18のロード/ストアロジックは、命令に従い、データメモリから個々のスレッドのオペランドレジスタ内に値をロードするか、又は個々のスレッドのオペランドレジスタからデータメモリ22内に値を記憶する。又は、命令が分岐又はステータス変更を定義する場合、実行ユニットは、プログラムカウンタPC又はステータスレジスタSRの1つの値を適宜変更する。あるスレッドの命令が実行ユニット18によって実行されている間、インタリーブされたシーケンス内の次のタイムスロット内のスレッドからの命令は、復号ステージ16によって復号され得ること、及び/又はある命令が復号ステージ16によって復号されている間、その後の次のタイムスロット内のスレッドからの命令は、フェッチステージ14によってフェッチされ得ることに留意されたい(しかし、概して、本開示の範囲は、タイムスロットにつき1つの命令に限定されず、例えば、代替シナリオでは、1つのタイムスロットにつき2つ以上の命令のバッチが所与のスレッドから発行され得る)。このようにして、インタリーブは、既知のバレルスレッド処理技法に従ってパイプライン13内の待ち時間を有利に隠す。
【0065】
処理装置40の更なる図を示す
図3を参照する。処理装置40は、先に記載したように、実行ユニット18及びデータメモリ22を含む。
図3は、処理装置40の送信エンジン300及び受信エンジン320を更に示す。送信エンジン300及び受信エンジン320は、命令メモリ12内に保持されるコンパイルされたコードセットの一部として記憶されるストライドパターンに従い、送信及び受信操作を実装するように構成される。
【0066】
送信エンジン300は、実行ユニット18の制御下でメモリ22からデータ項目を送信するように構成される。送信エンジン300は、実行ユニット18によって実行されるSEND命令に応答し、SEND命令は、送信エンジン300に、メモリ22から処理装置40の外部の宛先にデータ項目を送信させる。送信エンジン300は、送信される次のデータ項目のメモリ22内の位置を識別する読み出しポインタを保つ。送信エンジン300は、各データ項目の送信間で読み出しポインタを更新する。実行ユニット18によるSEND命令の実行に応答して、送信エンジン300は、1つ又は複数のデータ項目を処理装置40のデータ出力インタフェース310上で送信させる。SEND命令の実行に応答して送信されるこれらのデータ項目のそれぞれは、読み出しポインタによって識別され、読み出しポインタは、項目のそれぞれの送信間で更新される。例えば、2つのデータ項目を送信するためにSEND命令が実行ユニット18によって実行される場合、送信エンジン300は、読み出しポインタによって識別されるメモリ22内の位置でこれらの項目の第1の項目にアクセスし、この第1のデータ項目をデータ出力インタフェース310上で送信する。その第1のデータ項目の送信に続いて、送信エンジン300は、第2のデータ項目を指すように読み出しポインタを更新する。次いで、送信エンジン300は、読み出しポインタによって識別されるメモリ22内の新しい位置から第2のデータ項目を(データ出力インタフェース310上で)送信させる。
【0067】
データ項目の送信間の読み出しポインタの更新は、送信エンジン300内に記憶される可変ストライドパターンに従って実行される。送信エンジン300によって記憶される可変ストライドパターンは、本明細書では出力ストライドパターンと呼ぶ。出力ストライドパターンは、本明細書では出力構成値と呼ぶ1つ又は複数の構成値を含む。出力構成値は、送信エンジン300のストライド挙動(即ち読み出しポインタがどのように更新されるか)を指定する。出力ストライドパターンは、実行ユニット18によって構成可能である。実行ユニット18は、送信エンジン300によって使用される出力ストライドパターンを表す出力構成値を更新するための1つ又は複数の命令を実行するように構成される。実行ユニット18は、更新前に送信エンジン300によって実行される第1のデータ項目の組の送信が、第1の1つ又は複数の構成値の組によって表される第1の可変ストライドパターンを使用して実行される一方、更新後に送信エンジン300によって実行される第2のデータ項目の組の送信が、第2の1つ又は複数の構成値の組によって表される第2の可変ストライドパターンを使用して実行されるように構成値を更新することができる。
【0068】
従って、実行ユニット18は、送信されるデータの組が規則的な繰り返しパターンでメモリ22内に配置されている場合、可変ストライドパターンを設定することができる。このようにすることで、実行ユニット18は、先に送信されたデータ項目に対して非連続的に配置されるそのデータの項目が送信エンジン300によって送信されるたびにアドレスを指定する必要なく、データの組を送信させることができる。これは、命令メモリ12内に記憶されるコードサイズを減らすことを可能にする。
【0069】
実施形態では、実行ユニット18は、送信エンジン300によってデータを送信させるために様々な種類のSEND命令を実行するように構成される。
【0070】
図9Aを参照すると、送信を行わせるために実行18によって実行され得る第1の種類のSEND命令900のフィールドの一例が示されている。SEND命令900は、命令900が第1の種類のSEND命令であることを識別するオペコード910を含む。SEND命令900は、命令の実行時にメモリ22から送信されるデータ項目の数920を指定する。SEND命令900は、データの送信元であるメモリ22内のアドレスを指定することを可能にするアドレスフィールド930を含む。命令900を実行することは、フィールド930によって指定されるアドレスから開始して、フィールド920によって指定される数のデータ項目を送信させる。具体的には、命令に応答して送信される第1のデータ項目は、フィールド930によって指定されるアドレスから送信され、残りのデータ項目は、フィールド930によって指定されるアドレスから開始して、出力ストライドパターンを適用することによって決定されるアドレスから送信される。フィールド940は、任意のフィールドであり、処理装置40からデータが送信される1つ又は複数の方向を指定する。このフィールド940は、東/西インジケータと呼ばれ得、参照により援用される米国特許出願公開第15/886315号明細書でより詳細に説明されている。
【0071】
図9Bを参照すると、送信を行わせるために実行18によって実行され得る第2の種類のSEND命令900bのフィールドの一例が示されている。SEND命令900aは、命令900aが第2の種類のSEND命令であることを識別するオペコード910aを含む。SEND命令900と同様に、SEND命令900aは、命令の実行に応答して送信されるデータ項目の数を指定するフィールド920及び処理装置40からデータが送信される1つ又は複数の方向を指定するフィールド940を含む。第1の種類のSEND命令900と異なり、第2の種類のSEND命令900aは、アドレスフィールドを含まない。第2の種類のSEND命令900aのインスタンスが実行ユニット18によって実行されると、送信エンジン300によって保持される読み出しポインタの現在の状態によって識別されるアドレスから開始して、1つ又は複数のデータ項目が送信される。この読み出しポインタの現在の状態は、送信エンジン300による前のデータ項目の送信後の読み出しポインタの状態を反映する。
【0072】
このようにして、実行ユニット18は、指定されたアドレスからデータを送信するためにSEND命令を実行し得るか、又は送信エンジン300の現在の状態に基づいてデータを送信するためにSEND命令を実行し得る。
【0073】
再び
図3を参照すると、
図3では、受信エンジン320がデータ入力インタフェース330の一部として実装され得ることが示されている。受信エンジン320は、処理装置40の外部のソース(例えば、他の処理装置)からデータ入力インタフェース330で受信されるデータ項目をメモリ22内に記憶させるように構成される。受信エンジン320は、インタフェース330上で受信される次のデータ項目が記憶されるメモリ22内の位置を識別する書き込みポインタを保つ。書き込みポインタは、書き込みポインタの新しい値を受信エンジン320に書き込むメモリポインタ更新命令を実行する実行ユニット18により、任意の時点で更新され得る。加えて、実行ユニット18によるこの介入とは無関係に、受信エンジン320は、受信エンジン320による各データ項目の受信間で書き込みポインタを更新する。処理装置40におけるデータ項目の受信に応答して、受信エンジン320は、書き込みポインタによって識別されるメモリ22内の位置にそのデータ項目を記憶させる。そのデータ項目のメモリ22内への記憶に続いて、受信エンジン320は、書き込みポインタを更新する。更新された書き込みポインタは、処理装置40における更なるデータ項目の受信時、その更なるデータ項目が記憶されるメモリ22内の更なる位置を指す。
【0074】
書き込みポインタの更新は、受信エンジン320内に記憶された可変ストライドパターンに従って実行される。受信エンジン320によって記憶される可変ストライドパターンは、送信エンジン300によって使用される可変ストライドパターンと異なる。受信エンジン320によって記憶される可変ストライドパターンは、本明細書では入力ストライドパターンと呼ぶ。更に、入力ストライドパターンを定義する1つ又は複数の構成値は、入力構成値と呼ばれ得る。
【0075】
入力構成値は、メモリ22に異なる受信データ項目を記憶する間の受信エンジン320のストライド挙動(即ち書き込みポインタがどのように更新されるか)を指定する。入力ストライドパターンは、入力構成値を修正することにより、実行ユニット18によって構成可能である。実行ユニット18は、更新前に処理装置40で受信された第1のデータ項目の組が、第1の入力構成値の組によって表される第1の入力ストライドパターンに従って決定されるメモリ22内の位置に記憶される一方、更新後に処理装置40で受信される第2のデータ項目の組が、第2の入力構成値の組によって表される第2の入力ストライドパターンを使用して決定されたメモリ22内の位置に記憶されるように入力構成値を更新することができる。
【0076】
従って、実行ユニット18は、データを受信するための可変ストライドパターンを設定することができ、これは、データの組を規則的な繰り返しパターンでメモリ22内に配置する場合に有用である。このようにすることで、実行ユニット18は、前の書き込み位置に対して非連続的なメモリ22内の新しい位置にデータが書き込まれるたびに、書き込みポインタを更新するために実行ユニット18が介入する必要なしに、受信データの組をメモリ22内の適切な位置(例えば、その後のデータ処理を効率的にする位置)に記憶させることができる。これは、命令メモリ12内に記憶されるコードサイズを減らすことを可能にする。
【0077】
実施形態の例では、送信エンジン300が保持する1つ又は複数の構成値及び/又は受信エンジン320が保持する1つ又は複数の構成値は、1つ又は複数のループを含むストライドパターンを定義することができる。かかるループの例を
図4~
図7に示し、後により詳細に論じる。このようなループストライドパターンに従ってメモリ22にアクセスする場合、エンジン300/320は、個々の構成値によって定義される第1のストライド値によってストライドされた複数のアクセスを実行する。これに続いて、エンジン300/320は、次のアクセスのためのアドレスを第2のストライド値によって修正し、その後、更なる複数のアクセスのそれぞれの間でストライドするための第1のストライド値を再び適用する。表1は、このようなストライドパターンを定義するために送信エンジン300及び受信エンジン320内に記憶され得る構成値の一例を示す。表では、これらのストライド値のそれぞれは、個々のストライド値が記憶されるレジスタの名称によって表される。
【0078】
【0079】
出力構成レジスタは、送信エンジン300内に保持され、送信エンジン300によって使用されるストライドパターンを定義する1つ又は複数の構成値(即ち出力構成値)を記憶する。出力構成値は、個々のストライドのサイズを定義するストライドサイズ値及び(現在のストライドループが入れ子にされる)外側ループの異なるストライドが適用される前に(かかる外側ループが定義されている場合)、又はストライドパターンが繰り返されるまで、個々のストライドが適用される回数を定義する繰り返し値を含む。ストライドサイズは、ストライドが、より高いメモリアドレスへのメモリ前方へのストライドであるか(ストライドが正である場合)、又はより低いメモリアドレスへのメモリ後方へのストライドであるか(ストライドが負である場合)を表すために正又は負であり得る。表1は、3つの異なる種類のストライドの構成値を示す。第1のストライドは、内側ループで実行され、本明細書では内側ストライドと呼ぶ。第2のストライドは、内側ループが入れ子にされるループで実行され、本明細書ではメゾストライドと呼ぶ。第3のストライドは、メゾストライドループが入れ子にされるループで実行され、本明細書では外側ストライドと呼ぶ。
【0080】
$OUTGOING_RPT0内に保持される第1の繰り返し値(本明細書では内側繰り返し値と呼ぶ)は、メゾストライドが実行される前又は可変ストライドパターン全体が繰り返される前に、送信エンジン300によって内側ストライドが適用される回数を定義する。実施形態では、内側ストライドのサイズは、構成可能ではなく、メモリアクセスの最小単位の値(即ちメモリ22の1アトムのサイズ)にハードコードされる。$OUTGOING_STR0内に保持される第2のストライドサイズ値(本明細書ではメゾサイズと呼ぶ)は、内側ストライドが、$OUTGOING_RPT0レジスタ内で定義された回数にわたって適用された後に適用されるメゾストライドのサイズを定義する。$OUTGOING_RPT1内に保持される第2のストライド繰り返し(本明細書ではメゾ繰り返し値と呼ぶ)値は、外側ストライドが適用される前又は可変ストライドパターン全体が繰り返される前に、送信エンジン300によってメゾストライドが適用される回数を定義する。$OUTGOING_STR1内に保持される第3のストライドサイズ値(本明細書では外側サイズと呼ぶ)は、メゾストライドが、$OUTGOING_RPT1レジスタ内で定義された回数にわたって適用された後に適用される外側ストライドのサイズを定義する。外側ストライドは、ストライドパターンの繰り返しごとに1回のみ適用される。
【0081】
入力構成レジスタは、受信エンジン320によって使用されるストライドパターンを定義する1つ又は複数の構成値(即ち入力構成値)を記憶する、受信エンジン320内に保持されるレジスタである。これらの値は、送信エンジン300によって使用される出力構成値と均等な意味を有する。$INCOMING_RPT0内に保持される第1の繰り返し値(本明細書では内側繰り返し値と呼ぶ)は、メゾストライドが実行される前又はストライドパターンが繰り返される前に、受信エンジン320によって内側ストライドが適用される回数を定義する。実施形態では、内側ストライドのサイズは、構成可能ではなく、メモリアクセスの最小単位の値(即ちメモリ22の1アトムのサイズ)にハードコードされる。$INCOMING_STR0内に保持される第2のストライドサイズ値(本明細書ではメゾストライドサイズと呼ぶ)は、内側ストライドが、$INCOMING_RPT0レジスタ内で定義された回数にわたって適用された後に適用されるメゾストライドのサイズを定義する。$INCOMING_RPT1内に保持される第2のストライド繰り返し(本明細書ではメゾ繰り返し値と呼ぶ)値は、外側ストライドが適用される前又はストライドパターンが繰り返される前に、受信エンジン320によってメゾストライドが適用される回数を定義する。$INCOMING_STR1内に保持される第3のストライドサイズ値(本明細書では外側ストライドサイズと呼ぶ)は、メゾストライドが、$INCOMING_RPT1レジスタ内で定義された回数にわたって適用された後に適用される外側ストライドのサイズを定義する。外側ストライドは、ストライドパターンの繰り返しごとに1回のみ適用される。
【0082】
ストライドパターンの一例を示す
図4を参照すると、このストライドパターンは、それからデータが処理装置に外部的に送信されるメモリ22内の位置を識別するために送信エンジン300によって適用され得るか、又はデータが記憶されるメモリ22内の位置を選択するために受信エンジン320によって適用され得る。
図4は、単一のデータパケット内で処理装置40から送信されるか又は処理装置40で受信される単一のデータ項目を記憶するための記憶空間を表す単位(アトムと呼ぶ)に分割されたメモリ22の部分400を示す。実施形態では、これらのアトムのそれぞれのサイズは、32ビットである。メモリ22のハッシュされた単位は、データを送信及び受信するために送信エンジン300又は受信エンジン320によってアクセスされるものである。
【0083】
図4に示すストライドは、全て単一のストライドサイズ(例えば、この例では+3単位)のストライドである。これらの単一のストライドサイズのストライドは、表1に関して上記で論じたメゾストライド又は外側ストライドを使用して実行することができる。この例では、内側ストライドがエンジン300/320によって使用されておらず、この状況は、内側ストライドが実行されないように、(例えば、$OUTGOING_RPT0又は$INCOMING_RPT0内に保持される)内側繰り返し値をゼロに設定することによって実現され得る。同様に、エンジン300/320によって使用されないメゾストライド又は外側ストライドの一方は、それぞれのストライドの種類のサイズ値又は繰り返し値をゼロに設定することによって未使用であるように構成され得る。(エンジン300/320によって使用される)メゾストライド又は外側ストライドの一方は、そのストライドのためのストライドサイズ値をメモリ22の+3アトムの値に設定することによって適用される。
【0084】
ストライドパターンの更なる例を示す
図5を参照すると、このストライドパターンは、処理装置40に外部的に送信されるメモリ22からのデータを選択するために送信エンジン300によって適用され得るか、又はデータが記憶されるメモリ22内の位置を選択するために受信エンジン320によって適用され得る。
図4と同様に、メモリ22の部分500は、単一のデータパケット内で送信/受信されるデータ項目をそれぞれ記憶するための(例えば、32ビットの)アトムに分割されて示されている。ハッシュされたボックスは、データをそれから送信するか又はデータをそれに記憶するためにエンジン300/320によってアクセスされるアトムを表す。
【0085】
図5に示すストライドは、2つの異なるサイズのストライドを含む。これらのストライドの1つは、メモリ22に対して行われるアクセス間で+2単位だけメモリ22内でストライドすることを含む。これらのストライドの他方は、メモリ22に対して行われるアクセス間で+5単位だけメモリ22内でストライドすることを含む。このようなパターンは、内側ストライドが実行されないように、(例えば、$OUTGOING_RPT0又は$INCOMING_RPT0内に保持される)内側繰り返し値をゼロに設定することによって実現され得る。メゾストライドサイズは、+2に設定される一方、メゾ繰り返し値は、2に設定される。結果として、
図5に示すように、サイズ+2のストライドがメモリ22への第1のアクセス後に実行され、続いてサイズ+2のストライドがメモリ22への第2のアクセス後に実行される。外側ストライドサイズは、+5に設定される。結果として且つ
図5に示すように、メゾストライドが、外側繰り返し値によって指定された回数にわたって実行されると、外側ストライドが1回実行される。
【0086】
ストライドパターンの更なる例を示す
図6を参照すると、このストライドパターンは、処理装置40に外部的に送信されるメモリ22からのデータを選択するために送信エンジン300によって適用され得るか、又はデータが記憶されるメモリ22内の位置を選択するために受信エンジン320によって適用され得る。
図6は、メモリ22の部分600へのアクセスを実行するためにストライドパターンの一例を使用することを示す。
【0087】
図6に示すストライドは、3つの異なるサイズ(即ち+1、+3、+5)のストライドを含む。
図6に示すストライドパターンを実現する一環として、(例えば、$INCOMING_RPT0レジスタ及び$OUTGOING_RPT0内に保持される)内側繰り返し値が2に設定される。結果として、
図6に示すように、サイズ+1のストライドがメモリ22への第1のアクセス後に実行され、続いてサイズ+1の別のストライドがメモリ22への第2のアクセス後に実行される。メゾストライドのサイズは、+3に設定され、メゾ繰り返し値は、2に設定される。結果として、
図6に示すように、内側ストライドの組を完了した後に+3のストライドが実行される。+3のストライドは、外側ストライドを実行する前に2回実行される。外側ストライドのサイズは、+5に設定され、その結果、パターンの内側繰り返し値及びメゾ繰り返し値によって指定されるメゾストライド及び内側ストライドの全てが実行された後に+5のストライドが実行される。外側ストライド後、内側ストライド及びメゾストライドの同じパターンが再び繰り返される。
【0088】
ストライドパターンの更なる例を示す
図7を参照すると、このストライドパターンは、処理装置40に外部的に送信されるメモリ22からのデータを選択するために送信エンジン300によって適用され得るか、又はデータが記憶されるメモリ22内の位置を選択するために受信エンジン320によって適用され得る。
図7は、メモリ22の部分700へのアクセスを実行するためのこのストライドパターンの例を示す。
【0089】
図7のパターンでは、外側ストライドが負の値(-14)に設定され、これにより、エンジン300/320のポインタは、メゾストライドの組を完了した後、より低いメモリアドレスにジャンプバックする。メゾストライドのサイズは、+5に設定され、メゾ繰り返し値は、3である。その結果、3回のメゾストライドを完了した後、ポインタは、最初にアクセスされたアトムから15アトムずれたアトムを指すことになる。アトム-14個分ストライドすることにより、次に、エンジン300/320は、アクセスされた最初のアトムの直後のアトムにアクセスする。その後、エンジン300/320は、メゾストライドの組を繰り返してから再び外側ストライドによって後方にストライドする。
【0090】
図7では、第1のメゾストライドの組及び第1の外側ストライドを図の上半分に示す一方、第2のメゾストライドの組及び第2の外側ストライドを図の下半分に示す。
図7に示すストライドパターンは、このストライドパターンを使用して十分な数のデータ項目が送受信される場合、メモリ22の部分700のアトムの全てに対するアクセスを実行させる。しかし、図を簡略化するために、メモリ22の部分700のアトムのサブセットのみがアクセスされるように示されている。
【0091】
図8を参照すると、受信エンジン320又は送信エンジン300であり得るエンジン300/320の一例が示されている。受信エンジン320又は送信エンジン300に適用されると明示的に明記されていない限り、
図8に関して記載する特徴は、受信エンジン320及び送信エンジン300の両方の特徴である。
【0092】
エンジン300/320は、説明した可変ストライドパターンに従ってメモリ22にアクセスするための処理回路800を含む。送信エンジン300又は受信エンジン320によって実行されるものとして本明細書に記載する操作は、そのエンジンの処理回路800によって実行される。処理回路800は、記載した操作を実行するためのコンピュータ可読命令を実行するように構成されるプロセッサであり得る。加えて又は代わりに、処理回路800は、記載した操作を実行するための専用ハードウェア(例えば、書き換え可能ゲートアレイ又は特定用途向け集積回路)を含み得る。
【0093】
送信エンジン300に属する場合、処理回路800は、実行ユニット18によって実行されるSEND命令に応答して、定義された可変ストライドパターンに従って決定される位置でメモリ22からデータ項目をロードし、それらをデータパケット内でディスパッチする。具体的には、実行ユニット18によるこのような各SEND命令の実行に応答して、送信エンジン300は、データ項目が送信エンジン300のポインタによって識別されるメモリ22内の位置からアクセスされることと、処理装置40からデータパケット内で送信されることとを引き起こす。次いで、処理回路800は、送信エンジン300によって送信されるメモリ22内の次のデータ項目を指すように、送信エンジン300の可変ストライドパターンによって指定される量だけポインタをインクリメントする。実行されたSEND命令が、複数のデータ項目が送信されることを指定した場合、送信エンジン300は、SEND命令の別のインスタンスが実行ユニット18によって実行されるのを待つことなく、ポインタによって指し示される次のデータ項目を送信する。しかし、SEND命令が複数のデータ項目を指定しなかった場合、ポインタによって指し示される次のデータ項目は、SEND命令の更なるインスタンスが実行ユニット18によって実行される場合にのみ送信される。
【0094】
処理回路800が受信エンジン320に属する場合、回路800は、データ項目を受信すると、受信エンジン320のポインタによって識別されるメモリ22内の位置にそのデータ項目を記憶させるように構成される。次いで、処理回路800は、更なるデータ項目が受信されるときにデータが記憶されるメモリ22内の次の位置を指すように、受信エンジン320の可変ストライドパターンによって指定された量だけポインタをインクリメントする。
【0095】
ポインタは、2つの部分、即ちベースアドレス及びデルタを含むことができる。ベースアドレスは、ストレージ810a内に記憶される一方、デルタはストレージ810b内に記憶される。ベースアドレス及びデルタは、一緒にポインタを表し、このポインタは、(送信エンジン300の場合に)送信のためのデータを取得するか、又は(受信エンジン320の場合に)受信データを記憶するために、エンジン300/320によってアクセスされるメモリ22内の次の位置を識別する。ポインタによって識別されるアドレスは、ベースアドレス及びデルタの和によって与えられる。ベースアドレスは、半静的な値であり、SEND命令によって直接更新されることも、又はエンジン300/320のストライド活動によって更新されることもない。他方では、デルタは、SEND命令の実行(送信エンジン300の場合)又はメモリポインタ更新命令の実行(受信エンジン320の場合)によって設定され得る。デルタ値は、そのエンジン300/320に対して現在アクティブな可変ストライドパターンに従ってエンジン300/320によっても更新される。例えば、ストライドパターンの確立に続いてメモリ22への第1のアクセスを実行した後、個々のエンジン300/320についてアクティブなストライドパターンの一部として指定されるストライド値だけデルタ値がインクリメントされる。次いで、メモリ22への第2のアクセスは、新たに識別された位置で行われる。処理回路800は、メモリ22への各アクセス間でアクティブなストライドパターンに従ってデルタを更新し続ける。このようにして、ストライドパターンがアクティブである間、メモリ22に対して行われる各アクセス間でポインタが更新される。
【0096】
エンジン300/320は、エンジン300/320の動作を制御する複数のレジスタを含む。これらのレジスタは、
図2に関して上記で論じたスーパーバイザスレッドの制御レジスタ28の一部である。制御レジスタ28は、実行ユニット18上で実行されているスーパーバイザスレッドにアクセス可能である。
【0097】
カウンタレジスタ820a、820bは、エンジン300/320の一部として提供される。これらのカウンタは、エンジン300/320がその構成されたストライドパターンにおけるその進捗を決定し、従って適用される次のストライドを決定することを可能にする。カウンタレジスタ820a、820bは、ストライドパターンが適用される開始時にゼロに初期化される。第1のカウンタレジスタ820a内に保持される値(STRPGS0として示す)は、内側ストライドが実行されるたびにインクリメントされる。カウンタレジスタ820aの値が内側ストライドの繰り返し値に達すると、内側ストライドの代わりに別のストライド(即ちメゾストライド又は外側ストライド)が実行され、カウンタレジスタ820aがリセットされる。第2のカウンタレジスタ820b内の値(STRPRGS1として示す)は、メゾストライドが実行されるたびにインクリメントされる。カウンタレジスタ820bの値がメゾ繰り返し値に達すると、メゾストライドの代わりに外側ストライドが実行されるか又はストライドパターンが繰り返される(外側ストライドがストライドパターンの一部として構成されない場合)。加えて、第2のカウンタレジスタ820bがリセットされる。
【0098】
カウンタレジスタ820a、820bは、スーパーバイザスレッドの読み出し専用ステータスレジスタである。レジスタ820a、820bは、レジスタ820a、820b内に保持される値がエンジン300/320の処理回路800によって(即ちインクリメント又はリセットによって)修正可能であるにもかかわらず、スーパーバイザスレッドがそれらの値を修正できないという意味で読み出し専用である。送信エンジン300のレジスタ820a及びレジスタ820bは、それぞれ$OUTGOING_STRPGS0及び$OUTGOING_STRPGS1と呼ぶことができる。受信エンジン320のレジスタ820a及びレジスタ820bは、それぞれ$INCOMING_STRPGS0及び$INCOMING_STRPGS1と呼ぶことができる。
【0099】
エンジン300/320は、1つ又は複数のストライド構成値を記憶する構成レジスタ830を含む。
【0100】
レジスタ830のそれぞれは、2つの部分に分割される。各レジスタの第1の部分は、現在アクティブな可変ストライドパターンのための構成値を含む。現在アクティブなストライドパターンを定義する構成値を保持するレジスタ830の部分を「.NOW」で示す。処理回路800は、レジスタ930の.NOWの部分内に保持されるこれらの構成値を使用して、メモリ22への異なるアクセス間で読み出し/書き込みポインタを更新する。
【0101】
現在アクティブな構成値を記憶することに加えて、構成レジスタ830は、現在アクティブなストライドパターンに続いて適用される更なるストライドパターンを定義する更なる構成値の組も記憶する。更なる構成値の組は、「.NXT」によって示される。実施形態では、現在アクティブなストライドパターンを更新するために、実行ユニット18は、レジスタ830の.NXTの部分内に保持される構成値の1つ又は複数を更新するための1つ又は複数の命令を最初に実行する。その後、実行ユニット18は、.NXTの値の更新後、.NOWの値を上書きするためにレジスタ830の.NOWの部分に.NXTの値をコピーさせる。レジスタ830の.NOWの部分に値を書き込むことは、これらの値をコミットさせる。.NOWの値の書き込みは、実行ユニット18がエンジン300/320の一部であるトリガレジスタ840にトリガ値を書き込むことによって実行される。.NOWの値を上書きするために.NXTの値をコピーさせることに加えて、トリガレジスタ840への書き込みは、カウンタ820a、820bの値のリセットも引き起こす。
【0102】
構成レジスタ830のそれぞれは、2つの値を記憶し、その一方は、.NXTの値であり、他方は、.NOWの値である。構成レジスタ830は、2つの内側ストライド繰り返し値を記憶するレジスタ(RPT0)、2つのメゾストライドサイズ値を記憶するレジスタ(STR0)、2つのメゾストライド繰り返し値を記憶するレジスタ(RPT1)及び2つの外側ストライドサイズ値を記憶するレジスタ(STR1)を含む。送信エンジン300では、レジスタ830は、表1に関して上述した出力構成値の2つの組を含む。受信エンジン320では、レジスタ830は、表1に関して上述した入力構成値の2つの組を含む。
【0103】
2つの異なるストライドパターンを定義する構成値の2つの組(即ち.NOWの値及び.NXTの値)を記憶する能力を有することは、古いストライドパターンがメモリ22にアクセスするために依然として使用されている間、エンジン300/320が新しいストライドパターンのための構成値を準備することを可能にする。このようにして、エンジン300/320は、現在の送信及び受信活動を中断することなく、ストライドパターン間をシームレスに移動することができる。
【0104】
受信エンジン320の場合、1つ又は複数のデータパケットが処理装置40で受信されている間、ストライドの構成値を更新するための1つ又は複数の命令が実行ユニット18によって実行され得る。実行ユニット18による1つ又は複数の命令の実行に応答して、実行ユニット18は、.NXT構成レジスタ内に保持される値の1つ又は複数を更新させる。一方で、受信エンジン320は、メモリ22への書き込みポインタを更新するために、.NOWレジスタ内に保持される構成値を使用し続ける。次いで、実行ユニット18は、レジスタ830の.NXTの部分に書き込まれる新しい値で現在の.NOWの値を上書きすることにより、受信エンジン320の処理回路800にそれらの新しい値をコミットさせるために、トリガ値をレジスタ840に書き込ませる。次いで、これらの新しい値は、ポインタを更新して更なるデータ項目が記憶されるメモリ22内の位置を決定するために受信エンジン320によって使用される。このようにして、受信エンジン320は、2つの異なるストライドパターンの使用を切り替える。
【0105】
送信エンジン300では、本明細書でSENDPSTREX命令と呼ぶ新しい種類の命令を使用し、2つのストライドパターン間のシームレスなシフトを実行することができる。SENDPSTREX命令は、上述したSEND命令900及びSEND命令900aに加えて、第3の種類のSEND命令を表す。SENDPSTREX命令は、送信機能及びプット機能を組み合わせる。この命令は、実行ユニット18によって実行されると、レジスタ830内に保持される構成値を更新することに加えて、メモリ22からの送信を実行する。この命令を使用することは、メモリ22からの送信のストリームを中断なしに継続することを可能にすると同時に、ストライドパターンを定義する構成値を更新することを可能にする。SENDPSTREX命令が実行ユニット18によって実行されると、実行ユニット18は、構成レジスタ830の.NXTの部分内に保持される構成値の1つ又は複数を更新する。実行ユニット18は、この命令を実行した結果として、送信エンジン300の読み出しポインタによって識別される位置におけるメモリ22からのデータ項目を送信エンジン300に送信させる。送信エンジン300が命令の送信及び.NXTの値の更新の両方を実行した後、実行ユニット18は、トリガ値をレジスタ840に書き込ませる。これに応答して、送信エンジン300は、レジスタ830の.NXTの部分からレジスタ830の.NOWの部分に新しい構成値をコピーすることにより、新しい構成値をコミットする。
【0106】
出力ストライド構成値を更新するために使用される以外、SENDPSTREX命令1000は、一連の送信を中断することなく入力構成値の更新を可能にする。例えば、命令メモリ12は、メモリ22から複数のデータ項目を送信するための命令を記憶することができる。この複数のデータ項目が送信される期間中、受信エンジン320によって現在使用されている入力ストライドパターンを更新するために、実行ユニット18が介入することが必要とされ得る。SENDPSTREX1000は、データを送信するためのSEND命令の機能と、入力構成値を更新するためのPUT命令の機能とを組み合わせることにより、これを実行することを可能にする。処理装置40におけるデータ受信パターンに依存することなく、SEND命令のシーケンスがコンパイルされ得るため、これは、命令メモリ12内に保持されるプログラムのコンパイルを大幅に単純化する。処理装置40におけるデータ受信パターンが決定されると、処理装置40に割り当てるためのSEND命令の一部は、SEND命令の実行タイミングを再配置する必要なしに、(必要に応じて入力ストライド構成を更新するために)SENDPSTREX命令に変換され得る。
【0107】
図10を参照すると、SENDPSTREX命令1000のフィールドの一例が示されている。第1のフィールド1010は、SENDPSTREX命令1000をSENDPSTREX命令として識別するオペコードである。第2のフィールド1020は、SENDPSTREX命令1000の実行に応答して、レジスタ(即ち$OUTGOING_RPT0、$OUTGOING_STR0、$OUTGOING_RPT1、$OUTGOING_STR1、$INCOMING_RPT0、$INCOMING_STR0、$INCOMING_RPT1、$INCOMING_STR1)の何れを更新すべきかを識別する。第3のフィールド1030は、識別されたレジスタに書き込まれる構成値を提供する。第4の任意のフィールド940は、命令に応答して伝送される1つ又は複数のデータ項目が交換に沿って送信される方向を指定する。実施形態では、SENDPSTREX命令が実行されるときに送信が実行されないように、第4のフィールド940を特定の値に設定することができる(例えば、東フラグ及び西フラグの両方が0に設定される)。このようにして、任意のデータの送信を行うことなく、送信エンジン300の可変ストライドパターンを定義する構成値を更新するために、SENDPSTREX命令を使用することができる。実施形態では、SENDPSTREX命令は、命令が実行されるときに送信されるデータ項目の数を指定するフィールドを含まず、むしろ単一の命令のインスタンスの実行に応答して単一のデータ項目が送信される。
【0108】
図8には、更なるレジスタ850が示されている。本明細書では、このレジスタは、strallレジスタ850と呼ばれ得る。送信エンジン300に属する場合、レジスタ850は、$OUTGOING_STRALLとラベル付けされ、受信エンジン320に属する場合、レジスタ850は、$INCOMING_STRALLとラベル付けされる。
【0109】
このstrallレジスタ850は、エンジン300/320の可変ストライドパターンを定義する構成値の全てをstrallレジスタ850への単一の書き込みによって書き込むことを可能にする。strallレジスタ850は、それぞれ構成値の異なるものにマッピングする複数のサブフィールドを含むと考えることができる単一の値を記憶し得る。例えば、strallレジスタ850は、それぞれ構成値の異なるものにマッピングする4つの4ビットサブフィールドを含む単一の16ビット値を含み得る。マッピング関数は、各サブフィールドが構成値にどのようにマッピングするかを定義する。例えば、マッピング関数は、サブフィールドの対応する構成値をサブフィールドの値の2のべき乗によって与えるものであり得る。
【0110】
従って、strallレジスタ850は、プロセッサの数クロックサイクルにわたる複数の書き込みとは対照的に、レジスタ850への単一の書き込みを行うことにより、ストライドパターンのための複数の構成値を実行ユニット18が更新可能な手段を提供する。実行ユニット18がこのレジスタ850に書き込むと、処理回路800は、レジスタ830内の複数の構成値を更新するために、レジスタ850に書き込まれた値を使用する。実施形態では、strallレジスタ850は、.NXTの構成値にマッピングされ、これらの複数のものがレジスタ850への単一の書き込みによって更新されることを可能にする。
【0111】
送信エンジン300内に実装される場合、strallレジスタ850は、SENDPSTREX命令と共に使用され得る。この場合、構成レジスタ830の何れでもなく、strallレジスタ850を指定するために、上記で論じたzimm4フィールド1020を使用することができる。zimm16フィールド1030は、処理回路800に複数の構成レジスタ830を更新させるために、SENDPSTREX命令の実行に応答してstrallレジスタ850に書き込まれる値を指定する。
【0112】
一部の実施形態では、エンジン300/320は、複数のかかるstrallレジスタを含み、strallレジスタのそれぞれは、個々のstrallレジスタ内に保持されるサブフィールドを構成レジスタ830にマッピングするための異なるマッピング関数に関連する。
【0113】
一実施形態では、送信エンジン300内には、以下のようにラベル付けされた3つのstrallレジスタがある。
$OUTGOING_STR_2D0
$OUTGOING_STR_2D1
$OUTGOING_STR_1D
【0114】
加えて、受信エンジン320内には、以下のようにラベル付けされた3つのstrallレジスタがある。
$INCOMING_STR_2D0
$INCOMING_STR_2D1
$INCOMING_STR_1D
【0115】
これらのレジスタへの書き込みは、(エンジン300/320内の3つのstrallレジスタのそれぞれに異なるマッピングが適用された状態で)ハードウェア内の固定マッピングに従い、$INCOMING_RPTn/STRn.NXT又は$OUTGOING_RPTn/STRn.NXTレジスタのサブセットに導出値が書き込まれる結果となる。
【0116】
構成レジスタ830の.NXTフィールドに書き込んだ後、実行ユニット18は、トリガレジスタ840に値を書き込ませて.NXTフィールドに書き込まれる値をコミットさせる(即ち.NOWフィールドにコピーさせる)ことを記載してきた。実行ユニット18は、様々な条件に応答して、トリガレジスタ840へのこの書き込みを実行することができる。まず、実行ユニット18が、strallレジスタ(例えば、strallレジスタ850)に書き込むための命令(例えば、SENDPXTREX又はPUT命令)を実行する場合、実行ユニット18は、このstrallレジスタに書き込んだ後、strallレジスタへの書き込みから生じる新しい.NXTフィールドをコミットさせるためにトリガレジスタ840に書き込む。この場合、トリガレジスタ840に書き込みを行わせるための更なる命令を実行する必要はなく、トリガレジスタ840への書き込みは、strallレジスタ850への書き込みを引き起こす命令に応答して実行される。第2に、実行ユニット18が、レジスタ830内の1つ又は複数の.NXTフィールドに直接書き込むための1つ又は複数の命令(例えば、SENDPXTREX又はPUT命令)を実行する場合、トリガレジスタ840は、自動的に書き込まれない。この場合、実行ユニット18は、トリガレジスタ840に書き込むための更なる命令(例えば、SENDPXTREX又はPUT命令)を実行して、.NXTフィールドに書き込まれる値をコミットさせる。
【0117】
一部の実施形態の例では、上記で論じた構成レジスタ830は、スーパーバイザスレッドの制御レジスタ28の一部である。これらのレジスタ28は、スーパーバイザスレッドによって読み取り可能及び書き込み可能の両方である。strallレジスタ850は、スーパーバイザスレッドの制御レジスタ28の書き込み可能なものであり得る。トリガレジスタ840は、スーパーバイザスレッドの制御レジスタ28の書き込み可能なものであり得る。
【0118】
一部の実施形態では、トリガレジスタ840は、可変ストライド状態をリセットさせるための、本明細書でCLRフィールドと呼ばれる追加のフィールドを備える。2つの異なるフィールドを含むトリガレジスタ840の一例を示す
図20を参照する。実行ユニット18は、異なるアクションを実行させるために、これらのフィールドの何れかに独立して書き込むことができる。
【0119】
トリガレジスタ840は、(NXTとして示す)第1のフィールドを含む。実行ユニット18がNXTフィールドへの書き込みを実行すると、.NXTフィールド内の値がコミットされる(即ち.NXTフィールド内の値が.NOWフィールドにコピーされる)。
【0120】
トリガレジスタ840は、(CLRとして示す)第2のフィールドも含む。実行ユニット18がCLRフィールドへの書き込みを実行した場合、構成レジスタ830内の.NOWの値をそのデフォルト値にリセットさせるクリアトリガイベントが実行される。これらのデフォルト値は、全てゼロであり得、その場合、読み出し/書き込みポインタは、各送信/受信後に1アトムだけインクリメントされる。この事例では、その中で実行されるコード内で任意のストライドパターンが明示的に指定され、即ち異なるアドレスにストライドするためにSEND命令及びメモリポインタ更新命令によって使用されるアドレス値を使用することができる。しかし、クリアトリガイベントは、構成レジスタ830内の.NXTの値をリセットさせない。従って、実行ユニット18は、トリガレジスタ840のNXTフィールドへの書き込みを実行することにより、エンジン300/320によって実装される可変ストライドを再開させることができる。
【0121】
繰り返しパターンで前述のデータを送信及び受信することが有用であり得るデータの種類の一例は、行列である。かかる行列は、畳み込みニューラルネットワーク等の特定の種類の機械学習モデルを実装するのに有用であり得る。行列の個々の要素ごとにアドレスを指定するのではなく、行列の個々の要素を指すようにポインタを更新させるストライドパターンに従ってデータを送信するように実行ユニット18が送信エンジン300を構成するために、必要なコード記憶空間に関してより効率的であるように所与の行列の複数の要素をメモリ22内に規則的な配置で記憶することができる。同様に受信側では、処理装置40が幾つかの異なるソースから行列を受信することができる。例えば、あるソースが行列の1つの列を提供し得る一方、別のソースが行列の別の列を提供する。この場合、不連続的に及び固定ストライドの分だけ互いに隔てて第1の列の要素を記憶し、その後、メモリ22内でストライドバックし、同じ固定ストライドの分だけ互いに隔てられた第2の列の要素を記憶するように、装置40の実行ユニット18がストライドパターンを用いて受信エンジン320を構成することができる。かかるストライドパターンは、
図7に示すものと同様であり得る。
【0122】
一部の実施形態では、処理装置40は、マルチタイルプロセッサ2のタイル4である。かかるマルチタイルプロセッサ2の一例を示す
図11Aを参照する。このような各処理ユニット2は、それ自体の集積回路上に実装される。
【0123】
処理ユニット2は、複数のプロセッサタイル4のアレイ6及びタイル4間を接続する相互接続34を含む。処理ユニット2は、同じICパッケージ内にパッケージされた複数のダイの1つとして単独で実装され得る。相互接続34は、タイル4が互いにデータを交換することを可能にするため、本明細書では「スイッチングファブリック」34とも呼ばれ得る。各タイル4は、実行ユニット及びメモリの個々のインスタンスを含む。例えば、例として、処理ユニット2は、数百又は更に千を超えるオーダーのタイル4を含み得る。完全を期すために、本明細書で言及する「アレイ」は、必ずしもタイル4の寸法又は物理的レイアウトの特定の数を含意しないことにも留意されたい。
【0124】
実施形態では、各処理ユニット2は、処理ユニット2を1つ又は複数の他の処理ユニット(例えば、同じ処理ユニット2の1つ又は複数の他のインスタンス)に接続することを可能にする1つ又は複数の外部リンクも含む。これらの外部リンクは、ホストシステム及び同じICパッケージ若しくはカード上又は異なるカード上の処理ユニット2の1つ又は複数の他のインスタンスに処理ユニット2を接続できるようにし得る。処理ユニット2は、自らが処理するアプリケーションデータの形態でホストから作業を受信する。
【0125】
相互接続34は、アレイ6内の異なるタイル4が互いに通信することを可能にするように構成される。
【0126】
かかるマルチタイル処理ユニット2の更なる詳細は、参照により援用される米国特許出願公開第16/527410号明細書で与えられている。
【0127】
BSP交換スキームの実装形態を示す
図11Bを参照すると、このスキームでは、各タイル4は、タイル間のバリア同期30によって互いに分離された計算段階33及び交換段階32を交互のサイクルで実行する。
図11B及び
図11Cによって示す事例では、バリア同期は、各計算段階33と、その後の交換段階32との間に配置される。計算段階33中、各タイル4は、1つ又は複数の計算タスクをタイル上で局所的に実行するが、これらの計算のいかなる結果もタイル4の他の任意のものと通信しない。交換段階32では、各タイル4は、先行する計算段階からの計算の1つ又は複数の結果をタイル4の1つ又は複数の他のものとの間で交換することを認められるが、そのタスクが依存関係を有する任意のデータを他のタイル4から受信するまでいかなる新たな計算も行わない。先行する計算段階で計算されたものを除くいかなるデータも他の任意のタイル4に送信しない。内部制御に関係する操作等の他の操作が交換段階32内で実行され得ることは、排除されない。タイルグループの外部の通信は、BSPメカニズムを任意に利用することができるが、代替的にBSPを利用できなくてもよく、代わりに他の一部の独自の同期メカニズムを使用することができる。
【0128】
BSP原理によれば、バリア同期30は、計算段階33から交換段階32に移行する継ぎ目若しくは交換段階32から計算段階33に移行する継ぎ目又はその両方に配置される。即ち、(a)グループ内の何れかのタイルが次の交換段階32に進むことを許可される前に、全てのタイル4がその個々の計算段階33を完了することを要求されるか、若しくは(b)グループ内の何れかのタイルが次の計算段階33に進むことを許可される前に、グループ内の全てのタイル4がその個々の交換段階32を完了することを要求されるか、又は(c)それらの条件の両方が強制される。3つ全ての改変形態において、段階を交互に行うのは、個々のタイルであり、同期するのは、アセンブリ全体である。次いで、この一連の交換段階及び計算段階が複数の反復にわたって繰り返され得る。BSPの用語では、交換段階及び計算段階のそれぞれの繰り返しは、「スーパーステップ」と呼ばれ得る(しかし、文献では、この用語は、常に一貫して使用されているわけではなく、個々の交換段階及び計算段階が個別にスーパーステップとも呼ばれ得るのに対して、本明細書で採用する用語のように、他の場合には交換段階及び計算段階が合わせてスーパーステップと呼ばれることに留意されたい)。
【0129】
計算、同期及び交換のBSPサイクルが所与の各グループ内でのみ課され、各グループがそれを他のグループと独立に行っている状態で、同じ処理ユニット2又は異なる処理ユニット2上のタイル4の複数の異なる独立グループは、互いに非同期的に動作する別々の個々のBSPグループをそれぞれ形成し得ることが除外されないことにも留意されたい。即ち、マルチタイルアレイ6は、他のかかるグループに対してそれぞれ独立に及び非同期的に動作する複数の内部的に同期したグループを含み得る(後により詳細に論じる)。後により詳細に論じるように、一部の実施形態では、同期及び交換の階層的なグループ分けがある。
【0130】
図11Cは、(a)計算段階33から交換段階32へのバリア同期(上記を参照されたい)を課す場合、アレイ6内のタイルの一部又は全てのグループ4i、4ii、4iii間で実装されるBSP原理を示す。この構成では、一部のタイルが依然として交換中でありながら、他の一部のタイル4が計算33を開始することを許可されることに留意されたい。
【0131】
BSPモデルは、処理ユニット2上のタイル4間のデータの交換に使用される。処理ユニット2のタイル4間の通信は、時間決定論的な方法で行われ、その際、データパケットは、本発明者らの先行する出願である米国特許出願公開第15/886315号明細書のようにヘッダなしで伝送される。加えて、BSPモデルは、処理ユニット2間のデータの交換に使用することもできる。処理ユニット2間のかかるデータの交換は、外部交換50’と呼ばれる。
【0132】
交換段階中、タイルによって実行される命令は、通信が時間決定論的な方法で行われることを可能にするために、既定の時間に実行されるようにスケジュールされる。所定の時間に実行される命令は、SEND命令及び可変ストライドパターンを更新するために使用される命令(例えば、SENDPXTREX命令)を含む。このようにして、各タイル4は、各データ項目を適切な時間に送信し、それにより、受信タイル4は、データ項目を受信するとき、そのデータ項目を記憶するためのメモリ内の適切な位置をその書き込みポインタが指すようにする。
【0133】
SEND命令及び可変ストライドパターンを更新するための命令の実行タイミングは、
図11Aに示す同期コントローラ36によって発行される同期信号に対して配置される。同期コントローラ36は、交換段階の開始を示す信号を各タイル4に発行する。次いで、タイル4の実行ユニット18は、割り当てられたプロセッサクロックサイクル内でSEND命令及び可変ストライドパターン更新命令の各インスタンスを実行する。割り当てられるプロセッサクロックサイクルのそれぞれは、個々のタイル4における同期信号の受信後の既定数のプロセッサクロックサイクルである。
【0134】
マルチタイル処理ユニット2の実施形態では、タイル4のそれぞれは、上記で論じた処理装置40のインスタンスを含む。そのような各タイル4は、コンパイラによって提供される、コンパイルされたコードセットを記憶し、実行するように構成される。
図12は、コンパイラ70の機能を示す概略図である。コンパイラは、かかるグラフ60を受信し、グラフ内の関数を複数のコードレットにコンパイルし、それらのコードレットは、
図12で72とラベル付けされたローカルプログラム内に含まれる。各ローカルプログラムは、コンピュータの特定のタイル内にロードされるように設計される。各プログラムは、1つ又は複数のコードレット72a、72b...と、各々が一連の命令から形成されるスーパーバイザサブプログラム73とを含む。コンパイラは、互いにリンクされるようにプログラムを生成する。従って、1つ又は複数の送信タイル4上で実行される、コンパイルされたコードセットが、受信タイル4に送信するための特定のデータパターンを有する場合、受信タイル4上で実行されるリンクされたコンパイル済みセットは、タイル4におけるそのデータの受信前に受信データを適切なパターンでメモリ22内に記憶するように、そのタイル4の受信エンジン320を構成する。
【0135】
受信エンジン320の場合、レジスタ830内の構成値によって表されるストライドパターンは、同じ処理ユニット2の他のタイル4から受信されるデータが(即ち内部交換中に)記憶されるメモリ22内の位置を決定するために使用される。送信エンジン300の場合、レジスタ830内の構成値によって表されるストライドパターンは、同じ処理ユニット2のタイル4(即ち内部交換中)及び異なる処理ユニット2のタイル4(即ち外部交換中)にデータ項目がそれから送信されるメモリ22内の位置を決定するために使用される。
【0136】
一部の事例では、後続の処理により適した形式にデータを置くように、処理装置のメモリ内に保持されるデータを再配置することが望ましい場合がある。例えば、メモリ内に保持され、行列を表すデータの組を所与として、1つ又は複数の計算内で行列を使用する前に行列の転置を最初に実行することが望ましい場合がある。
【0137】
実施形態によれば、処理装置40のループバックモードを活性化することにより、メモリ内に保持されるデータの再配置を実行するために、本明細書に記載する送受信メカニズムを使用することができる。ループバックモードが活性化されると、追加の処理装置にデータを送信するのではなく、ループバック経路を介してデータを送信することができ、ループバック経路は、そのデータの送信元であるメモリ22にそのデータを戻す。データは、i)データがメモリ22から送信される順序、又はii)戻ってきたデータがメモリ22内に記憶される配置の少なくとも1つに基づいて再配置することができる。
【0138】
図15を参照すると、上述した送受信メカニズムを利用することにより、メモリ22内のデータの再配置を実行するために使用され得る処理装置40の様々な構成要素の概略図が示されている。
【0139】
処理装置40は、制御レジスタ120を含み、この制御レジスタ120は、送信エンジン300によって送信されるデータが出力インタフェース310上で外部の宛先に伝送されるか、又は送信エンジン300によって送信されるデータがループバック経路を形成するバスであって、メモリ22内に記憶するためにそのバスを介してデータがメモリ22に戻される、バスに沿って送信されるかに関する指示(LOOPBACKフィールドと呼ばれ得る)を記憶する。実行ユニット18は、LOOPBACKフィールドの値を更新するための命令を実行するように動作可能である。実行ユニット18は、ループバックモードの有効化後に送信される任意のデータがループバック経路を介して送信されるように、ループバックモードが有効化されていることを反映するようにLOOPBACKフィールドの値を更新することができる。同様に、実行ユニット18は、ループバックモードの無効化後に送信される任意のデータがインタフェース310上で外部の処理装置40に送信されるように、ループバックモードが無効であることを反映するようにLOOPBACKフィールドの値を更新することができる。
【0140】
ループバック経路によってデータが送信される(即ちループバックモードが有効である)ことを示すようにLOOPBACKフィールドが設定される場合、処理装置40の回路123は、出力インタフェース310内のマルチプレクサ121を制御して、メモリ22から送信されるデータを処理装置40の入力インタフェース330に向けさせる。処理装置40の回路123は、処理装置40の外部のソースからデータを受信するための入力ではなく、ループバック経路を入力として選択するように、入力インタフェース330内のマルチプレクサ122を制御することもできる。
【0141】
ループバックモードが有効であるとき、送信エンジン300からディスパッチされるデータ単位は、受信エンジン320で受信されるようにループバック経路に沿って送信される。受信エンジン320は、受信エンジン320内に保持される書き込みポインタの現在値によって指定される位置でそのデータ単位をメモリ22内に記憶させる。
【0142】
メモリ22内に保持されるデータ単位の組の再配置を実行するために、送信エンジン300は、メモリ22内にデータ単位が保持される順序に対して外れた順序でデータ単位をループバック経路によってメモリ22から送信させることができる。換言すれば、送信エンジン300がループバック経路上でデータ単位を送信する時系列的順序は、メモリ22内のデータ単位の論理的配置と一致しない。メモリ22内のデータ単位の論理的配置は、論理メモリアドレスによるデータ単位の配置であることが理解される。
【0143】
送信エンジン300による順序外の送信の代わりに又はそれに加えて、受信エンジン320は、送信エンジン300がループバック経路を介してデータ単位を送信する順序に対して外れた順序でデータ単位をメモリ22内に記憶させる。換言すれば、受信エンジン320は、受信エンジン320がデータ単位を受信する時系列的順序と一致しない論理的配置でデータ単位をメモリ22内に記憶させる。
【0144】
上述したように、送信エンジン300は、実行ユニット18によって設定される可変ストライドパターンに従ってデータ単位を送信するように動作可能である。かかる可変ストライドパターンは、メモリ22内のデータ単位の初期配置に対して外れた順序でデータ単位を送信させるために送信エンジン300によって使用され得る。これは、メモリ22内のデータ単位の再配置を引き起こすために実行ユニット18によって実行される必要がある命令をより少なくし得る利点を有する。
【0145】
同様に上述したように、受信エンジン320は、実行ユニット18によって設定される可変ストライドパターンに従ってデータ単位をメモリ22内に記憶するように動作可能である。かかる可変ストライドパターンは、メモリ22から内部ループバック経路を介してデータが受信される順序に対して外れた配置でデータ単位をメモリ22内に記憶させるために受信エンジン320によって使用され得る。
【0146】
図16を参照すると、メモリ22内のデータの再配置を必要とし得る演算の一例が示されており、その再配置は、再配置を実行するためにループバック経路を介してデータが送信されるスキームを使用して実装され得る。この演算は、入力行列1600から出力行列1610を生成する転置演算である。行列1600の要素が、論理アドレス空間内で[1,2,3,4,5,6,7,8,9]の順序で連続的に配置されるようにメモリ22内に記憶されると仮定する。出力行列1610を表現するには、メモリ22内の要素を[1,4,7,2,5,8,3,6,9]の順序に再配置する必要がある。
図17及び
図18は、送信操作を実行するとき又は受信データをメモリ22内に記憶するとき、メモリ22内の異なる位置がアクセスされる順序が、そのデータの再配置を実行するためにどのように使用され得るかに関する異なる例を提示する。
図17は、メモリ22からデータを送信するためにメモリ22内の位置がアクセスされる順序が、
図16に示す行列転置演算に必要なデータの再配置を実行するために使用される一例を示す。
図18は、ループバック経路を介して受信されるデータを記憶するためにメモリ22内の位置がアクセスされる順序が、
図16に示す行列転置演算に必要なデータの再配置を実行するために使用される一例を示す。
【0147】
図17を参照すると、複数の要素が所与の順序で連続して配置されるメモリ22の第1の部分1700が示されている。(1~9でラベル付けした)要素のそれぞれは、単一のプロセッサクロックサイクル内の単一のデータパケット内で送信される単一のデータ単位を表す。
【0148】
送信エンジン300は、メモリ22から(1でラベル付けした)第1の単位を送信するように構成される。この第1の単位は、メモリ部分1700内のデータ単位の論理的配置の最初のものである。送信エンジン300は、ループバック経路を介してこの第1の単位をメモリ22から送信させる。受信エンジン320は、ループバック経路を介して受信したこのデータ単位をメモリ22の部分1710内の第1の位置に記憶させる。第1の位置は、メモリ部分1710内のメモリユニットの論理的配置でデータ単位を記憶するための第1のメモリユニットである。
【0149】
メモリ22からの第1のデータ単位の送信に続いて、送信エンジン300は、次のデータ項目をメモリ22から送信させる。この項目は、第1のデータ項目と非連続であり、
図17の例では、メモリ22の部分1700内のデータ項目の論理シーケンスにおける第4のデータ項目である。送信エンジン300は、ループバック経路を介してこのデータ項目を送信させる。受信エンジン320は、このデータ項目をメモリ部分1710内の第2の論理位置に記憶させる。
【0150】
第2のデータ項目の送信に続いて、送信エンジン300は、第3のデータ項目を送信させる。この項目も前の項目と非連続であり、メモリ部分1700内の項目の論理的順序では7番目である。受信エンジン320は、このデータ項目をメモリ22の部分1710内の第3の位置に記憶させる。
【0151】
送信エンジン300は、図示の順序でメモリ部分1700からデータを送信し続ける。送信される第4のデータ項目は、メモリ22の部分1700内の論理的順序では2番目であり、送信される第5のデータ項目は、メモリ22の部分1700内の論理的順序では5番目である。簡単にするために、
図17は、メモリ22の部分1700への最初の5回のアクセスのみを図示している。しかし、送信エンジン300は、[1,4,7,2,5,8,3,6,9]の順序に従ってメモリ22内のデータ項目にアクセスし続ける。この例の受信エンジン320は、送信エンジン300からそのデータが受信される順序でメモリ22内にデータを記憶するように構成されるため、結果として、メモリ部分1710内の論理的配置は、送信エンジン300がデータを送信する順序と一致する。
【0152】
図3~
図11に関して上述したように、データ項目が送信エンジン300によって送信される順序は、送信エンジン300によって実装される可変ストライドパターンによって少なくとも部分的に決定される。具体的には、かかる可変ストライドパターンを実装する場合、送信エンジン300は、その読み出しポインタによって識別される位置でメモリ部分1700内に保持されるデータ項目のそれぞれにアクセスし、データ項目の各送信間でその読み出しポインタを更新する。例えば、説明した順序でデータ項目を送信するために使用されるメモリ22の部分1700に適用されるアクセスパターンは、以下の表2に示す出力構成値を使用することによって実現することができる。
【0153】
【0154】
+3によって与えられる2つのストライド及び-5によって与えられる単一のストライドを繰り返し実行することにより、送信エンジン300は、データ項目がメモリ部分1710内で配置される順序でメモリ部分1700内の位置にアクセスする。送信エンジン300は、これらの項目を送信させる。ループバック経路の現在の選択を所与として、これらのデータ項目は、ループバック経路を介してメモリ22に向けて送信される。受信エンジン320は、ループバック経路に沿って、送信エンジン300によって送信されたのと同じ順序でこれらのデータ項目を記憶させる。これは、可変ストライドパターンの適用も行う受信エンジン320によって実装することができ、そのストライドパターンの入力構成値は、内側繰り返し値が非ゼロ値(例えば、1)に設定される一方、他の構成値がゼロに設定されるものである。受信エンジン320は、その書き込みポインタによって識別されるメモリ部分1710内の位置にループバック経路を介して受信した項目のそれぞれを記憶し、その書き込みポインタを+1の分だけ更新する。
【0155】
一部の実施形態では、データ項目の全ての送信元のアドレスを決定するために可変ストライド機能に完全に依存するのではなく、メモリ部分1700から送信される項目の一部のそれぞれは、実行ユニット18による別個のSEND命令(例えば、SEND命令900)の実行に応答して送信され得、かかる各SEND命令は、その実行に応答して送信されるメモリ22内の第1のデータ項目のアドレスを指定する。
【0156】
図18を参照すると、メモリ部分1700内に保持されるデータ項目の再配置を実装するために受信エンジン320が使用される一例が示されている。この事例では、送信エンジン300は、メモリ部分1700内にデータ項目が記憶されている論理的配置に一致する順序でメモリ部分1700からデータ項目のそれぞれを送信する。しかし、受信エンジン320は、メモリ部分1700内のデータ項目の以前の論理的配置と一致しない新しい配置でデータ項目をメモリ部分1710内に記憶させる。
【0157】
送信エンジン300は、メモリ部分1700内の第1の位置内の(1でラベル付けした)第1の項目を、ループバック経路を介して受信エンジン320に送信させる。受信エンジン320は、第1の項目を受信すると、メモリ部分1710内の第1の位置にその項目を記憶させる。
【0158】
送信エンジン300は、メモリ部分1700内の第2の位置内の(2でラベル付けした)第2の項目を、ループバック経路を介して受信エンジン320に送信させる。受信エンジン320は、この第2の項目を受信すると、メモリ部分1710内の第4の位置にその項目を記憶させる。
【0159】
送信エンジン300は、メモリ部分1700内のその連続した配置に従って項目の送信を続ける。受信エンジン320は、
図18に示すアクセスパターンを適用することによって項目をメモリ部分1710内に記憶させる。このアクセスパターンは、
図17に示す例で送信エンジン300によって適用されるアクセスパターンを反映する。
【0160】
受信エンジン320によってデータ項目がメモリ部分1710内に記憶される配置は、
図3~
図10に関して上述したように受信エンジン320によって実装される可変ストライドパターンによって決定される。具体的には、受信エンジン320は、その書き込みポインタによって識別される位置でメモリ部分1710内にデータ項目のそれぞれを記憶し、データ項目の各記憶間でその書き込みポインタを更新する。例えば、記載した順序でデータ項目を送信するために使用されるメモリ22の部分1710に適用されるアクセスパターンは、以下の表3に示す入力構成値を使用することによって実現することができる。
【0161】
【0162】
それぞれ+3の2つのストライド及び-5によって与えられる単一のストライドを繰り返し実行することにより、受信エンジン320は、
図18に示す順序でデータ項目を記憶するためにメモリ部分1710内の位置にアクセスする。メモリ項目のこの配置は、行列1600の転置形態1610を表す。
【0163】
この例では、送信エンジン300による送信は、内側繰り返し値を非ゼロ値(例えば、1)に設定する一方、他の構成値をゼロに設定する可変ストライドパターンを適用することによって実行することができる。送信エンジン300は、そのメモリ部分1700内の項目のそれぞれを、その読み出しポインタによって識別されるメモリ部分1700内の位置からループバック経路を介して送信させる。送信エンジン300は、各送信間でその読み出しポインタを更新する。受信エンジン320は、その書き込みポインタによって識別されるメモリ部分1710内の位置にループバック経路を介して受信した項目のそれぞれを記憶し、表3に示す入力構成値に従ってその書き込みポインタを更新する。
【0164】
一部の実施形態では、データ項目の全てを記憶するためのアドレスを決定するために可変ストライド機能に完全に依存するのではなく、メモリ部分1710内に記憶される項目の一部のそれぞれは、実行ユニット18による別個のメモリポインタ更新命令(例えば、メモリポインタ更新命令1100)の実行によって決定される位置に記憶され得、かかる各メモリポインタ更新命令は、ループバック経路を介して受信される次のデータ項目を記憶すべきメモリ22内の位置のアドレスを指定する。
【0165】
データの再配置を必要とする一種の演算(即ち行列転置)の一例を
図16~
図18に関して説明してきた。しかし、適用され得る他の種類の変換にも同じ原理が適用可能である。更に、これらの例は、再配置が(
図17に関して説明した)順序外の送信又は(
図18に関して説明した)順序外の記憶の何れかを使用して実行される事例を記載してきた。しかし、一部の事例では、順序外の送信及び順序外の記憶の両方を実行することによって一部の再配置が適用され得る。
【0166】
データにアクセスし、ループバック経路を介して又は外部の処理装置にそのデータを送信するために使用される送信機能は、送信エンジン300内に実装されるものとして説明してきた。同様に、メモリ位置にアクセスし、受信データをそれらのメモリ位置に記憶するために使用される受信機能は、受信エンジン320内に実装されるものとして説明してきた。しかし、送信機能及び受信機能が物理的に別々のブロック内で実装される必要はない。送信エンジン300及び受信エンジン320によって実装される動作は、処理装置40の回路によって汎用レベルで実装されるものとして説明することができる。
【0167】
上記の説明は、実行ユニットによって実行され得る3つの異なる形式のSEND命令(即ちSEND命令900、900a、1000)について記載した。別段の定めがない限り、「SEND命令」に関する本明細書の教示は、これらの3つの命令の何れにも適用されると理解することができ、加えて他の種類のSEND命令にも適用され得る。
【0168】
タイル4間の時間決定論的通信は、参照により援用される先行する米国特許出願公開第15/886131号明細書により詳細に記載されている。
【0169】
図13を参照すると、本願の実施形態によるデータを送信する方法1300が示されている。
【0170】
S1310では、可変ストライドパターンを定義する1つ又は複数の構成値が送信エンジン内で設定される。これらの値は、送信が実行される前に少なくとも1つの実行ユニットによる1つ又は複数のプット命令の実行によって設定される初期値であり得る。
【0171】
S1320では、SEND命令の実行に応答して、送信エンジンは、ポインタによって識別されるメモリ内の位置におけるデータ項目を処理装置の外部の少なくとも1つの宛先に送信させる。
【0172】
S1330では、データ項目を送信した後、送信エンジンは、可変ストライドパターンに従ってポインタを更新する。
【0173】
S1340では、可変ストライドパターンを更新すべきコンパイルされたコード内のポイントに実行ユニットが達した場合、方法1300は、S1350に進む。さもなければ、方法1300は、更なるデータ項目が送信されるS1320に進む。
【0174】
S1350では、可変ストライドパターンを更新するための命令を実行する。その後、方法1300は、更なるデータ項目を送信するS1320及び新しい可変ストライドパターンに従ってポインタを更新するS1330に進む。
【0175】
図14を参照すると、本願の実施形態によるデータを受信する方法1400が示されている。
【0176】
S1410では、可変ストライドパターンを定義する1つ又は複数の構成値を受信エンジン内で設定する。これらの値は、データ項目が受信される前に少なくとも1つの実行ユニットによる1つ又は複数のプット命令の実行によって設定される初期値であり得る。
【0177】
S1420では、処理装置(例えば、タイル4)におけるデータ項目の受信に応答して、受信エンジンは、ポインタによって識別されるメモリ内の位置にデータ項目を記憶させる。
【0178】
S1430では、データ項目を記憶した後、受信エンジンは、可変ストライドパターンに従ってポインタを更新する。
【0179】
S1440では、可変ストライドパターンを更新すべきそのコンパイルされたコード内のポイントに実行ユニットが達した場合、方法1400は、S1450に進む。
【0180】
S1450では、可変ストライドパターンを更新するための命令を実行する。その後、この方法は、更なるデータ項目を受信し、更新された可変ストライドパターンに従ってメモリ内に記憶するS1420に進む。
【0181】
図19を参照すると、データを再配置する方法1900の一例が示されている。方法1900は、追加の処理装置に出力インタフェース310上でデータを送信するステップを含む。方法1900内の最初のステップ前に、制御レジスタ120は、ループバックモードが無効であるという指示を記憶する。
【0182】
S1910では、実行ユニット18は、1つ又は複数の送信命令を実行して、メモリ22内に保持されるデータ単位の少なくとも一部を出力インタフェース310上で1つ又は複数の追加の処理装置に送信させる。
【0183】
S1920では、実行ユニット18は、ループバックモードを有効にさせる命令を実行する。このステップは、ループバックモードが有効であるという指示を制御レジスタ120に書き込むことを含む。
【0184】
次いで、方法1900は、メモリ22内に保持される第1のデータ単位の組の再配置を引き起こすために実行されるステップを含む。この第1のデータ単位の組は、
図17及び
図18に示すメモリ部分1700内に保持される(1~9でラベル付けした)データ単位であり得る。方法1900は、3つの別個の分岐を示し、分岐のそれぞれは、データ項目の再配置を実行することができる異なる方法を表す。第1の分岐は、S1930及びS1940の組み合わせによって表され、順序外の送信に基づいて再配置が実現され得る1つの方法を示す。第1の分岐は、
図17に示す再配置を実行するために適用され得る。S1950及びS1960の組み合わせによって表される第2の分岐は、順序外の記憶に基づいて再配置が実現され得る別の方法を示す。第2の分岐は、
図18に示す再配置を実行するために適用され得る。S1930及びS1960の組み合わせによって表される第3の分岐は、順序外の送信及び順序外の記憶の両方に基づいて再配置が実現され得る別の方法を示す。3つの分岐のそれぞれは、第1のデータ単位の組をメモリ22内に戻して記憶するように、ループバック経路に沿ってメモリ22から第1のデータ単位の組を送信することを含む。
【0185】
S1930では、処理装置40の回路は、メモリ22内に第1のデータ単位の組が保持される第1の配置の順序に対して外れた順序において、第1のデータ単位の組をループバック経路上で送信させる。このステップは、実行ユニット18が1つ又は複数の送信命令を実行することに応答して実行される。S1930を実装する回路は、実行ユニット18及び送信エンジン300の回路を含む。
【0186】
S1940では、処理装置40の回路は、S1930でループバック経路上で送信された第1のデータ単位の組をメモリ22内に記憶させる。この回路は、第1のデータ単位の組のそれぞれを、S1930で送信された順序でメモリ22内に記憶させる。S1940を実装する回路は、受信エンジン320の回路を含む。
【0187】
S1950では、処理装置40の回路は、第1のデータ単位の組がメモリ22内に保持される第1の配置に一致する順序において、第1のデータ単位の組をループバック経路上で送信させる。このステップは、実行ユニット18が1つ又は複数の送信命令を実行することに応答して実行される。S1930を実装する回路は、実行ユニット18及び送信エンジン300の回路を含む。
【0188】
S1960では、処理装置40の回路は、S1950でループバック経路上で送信された第1のデータ単位の組をメモリ22内に記憶させる。この回路は、第1のデータ単位の組のそれぞれを、S1950でデータ単位が送信された順序に対して外れた順序でメモリ22内に記憶させる。実装形態では、S1960を実装する回路が受信エンジン320及び任意に実行ユニット18の回路を含む。
【0189】
実施形態は、例としてのみ記載されていることが理解されるであろう。
【国際調査報告】