(57)【要約】【課題】ダブルロード命令を提供する。【解決手段】実行ユニットと、メモリと、１つまたは複数のレジスタファイルとを含むプロセッサ。実行ユニットは、命令セットから機械語命令のインスタンスを実行するように構成される。命令セットにおいて定義される命令のタイプは、メモリから１つまたは複数のレジスタファイルの少なくとも１つにロードするためのダブルロード命令を含む。実行ユニットは、ダブルロード命令が実行されると、固定ストライドの分だけストライドさせる第１のロード操作および可変ストライドの分だけストライドさせる第２のロード操作を実行するように構成され、可変ストライドは、１つまたは複数のレジスタファイルのうち１つの可変ストライドレジスタにおいて指定される。【選択図】図５
2020119490.tif 000002
【特許請求の範囲】
【請求項１】
実行ユニットと、メモリと、１つまたは複数のレジスタファイルとを含むプロセッサであって、前記実行ユニットが、命令セットから機械語命令のインスタンスを実行するように構成され、
前記命令セットにおいて定義される命令のタイプは、前記メモリから前記１つまたは複数のレジスタファイルの少なくとも１つにロードするためのダブルロード命令を含み、
前記実行ユニットは、前記ダブルロード命令が実行されると、固定ストライドの分だけストライドさせる第１のロード操作および可変ストライドの分だけストライドさせる第２のロード操作を実行するように構成され、前記可変ストライドは、前記１つまたは複数のレジスタファイルのうち１つの可変ストライドレジスタにおいて指定される、プロセッサ。
【請求項２】
前記第１のロードの後に前記固定ストライドを適用し、前記第２のロードの後に前記可変ストライドを適用するように構成されるロード／ストアユニットをさらに含む、請求項１に記載のプロセッサ。
【請求項３】
前記ダブルロード命令は、前記第１のロードに対する前記メモリの第１の送信元アドレスと、前記第１のロードに対する前記１つまたは複数のレジスタファイルのうち１つの第１の送信先と、前記第２のロードに対する前記メモリの第２の送信元アドレスと、前記第２のロードに対する前記１つまたは複数のレジスタファイルのうち１つの第２の送信先と、を指定するオペランドを取り、前記第１の送信元アドレスは、前記１つまたは複数のレジスタファイルのうち１つのオフセットレジスタの第１のオフセットによって指定され、前記第２の送信元アドレスは、前記１つまたは複数のレジスタファイルのうち１つのオフセットレジスタの第２のオフセットによって指定され、
前記実行ユニットは、前記ダブルロード命令が実行されると、前記第１の送信元アドレスから前記第１の送信先に第１の値をロードすることによって前記第１のロード操作を実行し、前記固定ストライドを前記第１のオフセットに適用し、前記第２の送信元アドレスから前記第２の送信先に第２の値をロードすることによって前記第２のロード操作を実行し、前記可変ストライドを前記第２のオフセットに適用するように構成される、請求項１または２に記載のプロセッサ。
【請求項４】
前記第１および第２のオフセットは、前記１つまたは複数のレジスタファイルのうち１つの同じオフセットレジスタの異なるフィールドに保持され、前記実行ユニットは、前記固定および可変ストライドを前記第１および第２のオフセットにそれぞれ加え、次いで、前記オフセットレジスタに書き戻すことによって、前記ストライドを適用するように構成される、請求項３に記載のプロセッサ。
【請求項５】
前記オフセットレジスタは、前記ダブルロード命令のオペランドによって指定される、請求項４に記載のプロセッサ。
【請求項６】
前記実行ユニットは、前記第１のオフセットを非ゼロベースアドレスに加えることによって前記第１の送信元アドレスを決定し、前記第２のオフセットを非ゼロベースアドレスに加えることによって前記第２の送信先アドレスを決定するように構成される、請求項３〜５のいずれか一項に記載のプロセッサ。
【請求項７】
前記第１および第２の送信元アドレスに対して同じベースアドレスが使用される、請求項６に記載のプロセッサ。
【請求項８】
前記ベースアドレスは、前記１つまたは複数のレジスタファイルのうちの１つのレジスタファイルのベースアドレスレジスタにおいて指定される、請求項７に記載のプロセッサ。
【請求項９】
前記ダブルロード命令は、前記ベースアドレスを指定するオペランドを取る、請求項８に記載のプロセッサ。
【請求項１０】
前記ダブルロード命令は、前記可変ストライドレジスタを指定するオペランドを取る、請求項１〜９のいずれか一項に記載のプロセッサ。
【請求項１１】
前記可変ストライドレジスタは、前記可変ストライドレジスタの複数のフィールドのそれぞれに複数のストライド値を保持するように構成され、前記実行ユニットは、前記実行ユニットによって実行された前記ダブルロード命令の各連続インスタンスによって前記ストライド値のうち異なるものを使用することによって、前記可変ストライドの前記変更を実行するように構成される、請求項１〜１０のいずれか一項に記載のプロセッサ。
【請求項１２】
前記実行ユニットは、前記ダブルロード命令の各連続インスタンスによって１つのフィールドに相当するビット数の分だけ前記可変ストライドレジスタのコンテンツをシフトすることによって異なる値の前記使用を実行するように構成される、請求項１１に記載のプロセッサ。
【請求項１３】
ニューラルネットワークの少なくとも一部を含むプログラムを実行するようにプログラムされ、前記プログラムは、前記ダブルロード命令の多数のインスタンスを含み、各インスタンスでは、前記第１のロード操作は、ニューラルネットワークの重みをロードするために使用され、前記第２のロード操作は、前記ニューラルネットワークによる動作の基となるデータをロードするために使用される、請求項１〜１２のいずれか一項に記載のプロセッサ。
【請求項１４】
コンピュータ可読記憶媒体上で具体化されるコンピュータプログラムであって、請求項１〜１３のいずれか一項に記載のプロセッサによって実行されるように構成されたコードであって、前記ダブルロード命令の複数のインスタンスを含むコードを含む、コンピュータプログラム。
【請求項１５】
実行ユニットと、メモリと、１つまたは複数のレジスタファイルとを含むプロセッサを操作するための方法であって、前記実行ユニットは、命令セットから機械語命令のインスタンスを実行するように構成され、
前記命令セットにおいて定義される命令のタイプは、前記メモリから前記１つまたは複数のレジスタファイルの少なくとも１つにロードするためのダブルロード命令を含み、
前記方法は、前記実行ユニットを通じて前記ダブルロード命令の複数のインスタンスを実行するステップを含み、前記実行ユニットは、前記ダブルロード命令の各連続インスタンスによって固定ストライドの分だけストライドさせる第１のロード操作と、前記ダブルロード命令の各連続インスタンスによって可変ストライドの分だけストライドさせる第２のロード操作とを実行することによって、前記ダブルロード命令の前記インスタンスの各々を実行するように構成され、前記可変ストライドが、前記１つまたは複数のレジスタファイルのうちの１つのレジスタファイルの可変ストライドレジスタにおいて指定される、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、単一のオペコードに応答して２つのロード操作を実行するロード命令に関する。
【背景技術】
【０００２】
グラフィックス処理装置（ＧＰＵ）およびデジタル信号プロセッサ（ＤＳＰ）などの特定のアプリケーション用に設計されたプロセッサの開発への関心が高まってきている。最近関心を集めた別のタイプのアプリケーション特有のプロセッサは、出願人によって「ＩＰＵ（ｉｎｔｅｌｌｉｇｅｎｃｅ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）」（知能処理装置）と呼ばれる機械知能アプリケーション専用のものである。これらは、例えば、ニューラルネットワークなどの知識モデルを訓練するかまたは知識モデルの訓練を補助するため、あるいは、そのようなモデルに基づいて予測もしくは推論を実行するかまたは予測もしくは推論の実行を補助するために、ホストによって割り当てられた仕事を実行するように構成されたアクセラレータプロセッサとして採用することができる。
【０００３】
機械知能アルゴリズムは、複数の相互接続ノードのグラフによって表すことができる「知識モデル」に反復更新を実行することに基づく。各ノードは、その入力の関数を表す。ノードは、グラフへの入力を受信するものもあれば、１つまたは複数の他のノードからの入力を受信するものもある一方で、ノードの出力は、他のノードの入力を形成するものもあれば、グラフの出力を提供するものもある（いくつかの事例では、所定のノードは、これらのグラフへの入力、グラフからの出力および他のノードとの接続のすべてを有するものさえもあり得る）。さらに、各ノードにおける関数は、１つまたは複数のそれぞれのパラメータ（例えば、重み）によってパラメータ化される。学習段階では、経験に基づく入力データセットに基づいて、グラフが全体として、可能な入力の範囲に対して所望の出力を生成するように、様々なパラメータに対する値を見出すことを目的とする。この学習を行うための様々なアルゴリズムは、確率的勾配降下法に基づく誤差逆伝播アルゴリズムなど、当技術分野において知られている。入力データに基づく複数の反復にわたり、パラメータは、それらの誤差を減少するように徐々に調節され、グラフは、解に向けて収束する。次いで、後続の段階では、学習済みのモデルを使用して、指定された入力セットに与えられる出力の予測を行うこと、または、指定された出力セットに与えられる入力（原因）に関する推論を行うことができる。
【０００４】
プロセッサの命令セットは、プロセッサの実行ユニットが実行するように構成された基本的なタイプの機械語命令のセットを指す。各機械語命令は、オペコードと、０またはそれ以上のオペランドを取るための１つまたは複数のオペランドフィールドとを含む。命令セットの機械語命令の各タイプは、実行時に、実行ユニットの異なるロジックを異なるタイプの処理を実行させるようトリガする異なるオペコードにより特徴付けられる。
【０００５】
機械知能などの特定のアプリケーションに適するようにプロセッサの設計を調整するための方法の１つは、問題のアプリケーションにおいて発生することが多い傾向にあるタイプの動作を実行するためのプロセッサの命令セットの１つまたは複数の専用タイプの命令を提供することである。例えば、アプリケーションが特定のタイプの算術関数（例えば、行列乗算）の実行を必要とする場合が多ければ、アプリケーション特有のプロセッサに対する新しい設計には、単一の機械語命令の単一のインスタンスの単一のオペコードおよび関連オペランドによってこの算術関数を代わりに実行することができる命令を命令セットに含める。そうでなければ、より簡単な機械語命令（例えば、加算およびスカラ乗算）のシーケンスから構築しなければならないであろう。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
機械知能などのアプリケーションにおいてデータを処理する際に対処する問題の１つは、スパース性（sparsity）である。すなわち、いくつかのデータセットでは、有益なまたは関連する情報を含むデータ値が少数しか存在しない場合がある。そのようなデータを効率的に処理するため、メモリからそれらの値のみをロードすることが望ましい。しかし、関連データのパターンは、事実上ランダムである。どのデータ値をロードするかは、プログラムが決めることである。この動作を効率的に行うため、ロード命令の暗黙的な機能の一部としてプログラム可能ストライドを含めることができる。すなわち、各ロード命令を用いて、命令は、ストライド値をロードアドレスに適用することも行う（典型的には、現在の値のロード後。すなわち、アドレスは、次のロード命令のためにポストインクリメントされる）。このストライド値は、プロセッサのプログラム可能レジスタにおいて設定することによってプログラム可能とできる。
【０００７】
他方では、いくつかのデータがスパース性のものである一方で、同じアプリケーションにおいてスパースデータと並んで使用されている値の別のセットはシステマティック性のものである。すなわち、プログラムは、メモリの広範にわたる隣接するアドレスからすべての値を（または少なくともメモリアドレス空間における規則的な間隔から値を）ロードする必要がある。この例は、ニューラルネットワークで発生する場合があり、プログラムは、ニューラルネットワークの重み（システマティック性の）と、ニューラルネットワークによる動作の基となるデータ（典型的には、スパース性の）の両方をロードする必要がある。
【課題を解決するための手段】
【０００８】
そのようなデータを効率的に処理するため、本明細書では、「準スパース性の（semi sparse）」アドレス指定機能を有するタイプのロード命令を提供することが望ましいことが認識されている。すなわち、ロード命令は、単一の機械語命令において２つのロード命令を実行し、各ロード命令は、異なる挙動を有する。重みなどの第１のシステマティックセット値に対応するため、第１のロードは、実行された命令の各インスタンスによって固定ストライドの分だけ第１のロードアドレスをシステマティックにインクリメントするが、第１のシステマティックセット値と並んで処理されているデータのスパースセットに対応するため、第２のロード操作は、命令の各インスタンスによってプログラム可能ストライド値の分だけ第２のロードアドレスをインクリメントする。
【０００９】
従って、本明細書で開示される一態様によれば、実行ユニットと、メモリと、１つまたは複数のレジスタファイルとを含むプロセッサがある。実行ユニットは、命令セットから機械語命令のインスタンスを実行するように構成される。命令セットにおいて定義される命令のタイプは、メモリから１つまたは複数のレジスタファイルの少なくとも１つにロードするためのダブルロード命令を含む。実行ユニットは、ロード命令が実行されると、固定ストライドの分だけストライドさせる第１のロード操作および可変ストライドの分だけストライドさせる第２のロード操作を実行するように構成され、可変ストライドは、１つまたは複数のレジスタファイルのうちの１つのレジスタファイルの可変ストライドレジスタにおいて指定される。
【００１０】
実行ユニットは、ロード操作を実行するように構成されたロード／ストアユニットを含む。また、実行ユニットは、論理ユニットも含み、論理ユニットは、整数演算ユニットおよび／または浮動小数点演算ユニットを含んでもよい。実施形態に応じて、ストライドは、ロード／ストアユニットまたは整数演算ユニットによって適用されてもよい。
【００１１】
実施形態では、ロード／ストアユニットは、第１のロードの後に固定ストライドを適用し、第２のロードの後に可変ストライドを適用するように構成することができる。すなわち、アドレスは、実行されたダブルロード命令の各インスタンスによってポストインクリメントされる。しかし、その代替として、他の実装形態では、ストライドがダブルロード命令の各インスタンスによってアドレスをプレインクリメントできることも除外されない。
【００１２】
実施形態では、ダブルロード命令は、第１のロードに対するメモリにおける第１の送信元アドレスと、第１のロードに対する１つまたは複数のレジスタファイルのうちの１つにおける第１の送信先と、第２のロードに対するメモリにおける第２の送信元アドレスと、第２のロードに対する１つまたは複数のレジスタファイルのうちの１つにおける第２の送信先と、を指定するオペランドを取ることができる。第１の送信元アドレスは、１つまたは複数のレジスタファイルのうちの１つのオフセットレジスタにおける第１のオフセットによって指定され、第２の送信元アドレスは、１つまたは複数のレジスタファイルのうちの１つのオフセットレジスタにおける第２のオフセットによって指定される。この場合、実行ユニットは、ロード命令が実行されると、第１の送信元アドレスから第１の送信先に第１の値をロードすることによって第１のロード操作を実行し、固定ストライドを第１のオフセットに適用し、第２の送信元アドレスから第２の送信先に第２の値をロードすることによって第２のロード操作を実行し、可変ストライドを第２のオフセットに適用するように構成される。
【００１３】
好ましくは、オフセットは、非ゼロベースアドレスに対するオフセットである。しかし、その代替として、他の実装形態では、オフセットがゼロからのオフセット（すなわち、関連アドレス空間内の絶対アドレス）であってもよいことも除外されない。
【００１４】
実施形態に応じて、第１および第２の送信先は、１つまたは複数のレジスタファイルのうち１つの第１および第２のレジスタまたはレジスタのうち異なるものであってもよく、１つまたは複数のレジスタファイルのうち１つの同じ送信先レジスタの第１および第２のフィールドであってもよい。例えば、実施形態では、ロードに対する送信先として使用されるレジスタファイルは、３２ビットまたは６４ビットワードアーキテクチャを有し、第１および第２の値の各々は、１６ビット値（例えば、１６ビット浮動小数点値）であり、第１の値は、３２ビットまたは６４ビットレジスタのうちの１つのレジスタの第１のフィールドにロードされ、第２の値は、同じレジスタの第２のフィールドにロードされる。
【００１５】
実施形態では、第１および第２のオフセットは、１つまたは複数のレジスタファイルのうちの１つの同じオフセットレジスタの異なるフィールドに保持でき、実行ユニットは、固定および可変ストライドを第１および第２のオフセットにそれぞれ加え、次いで、オフセットレジスタに書き戻すことによって、ストライドを適用するように構成される。あるいは、他の実装形態では、第１および第２のオフセットをそれぞれの第１および第２のオフセットレジスタに保持可能であることも除外されない。
【００１６】
実施形態では、上記オフセットレジスタは、ダブルロード命令のオペランドによって指定することができる。あるいは、他の実装形態では、オフセットレジスタは、暗黙的であってもよい（すなわち、オペランドによって指定する必要はなく、例えば、代わりに、固定することも、１つまたは複数の他の以前の命令によってパラメータとして設定することもできる）。
【００１７】
実施形態では、実行ユニットは、第１のオフセットを非ゼロベースアドレスに加えることによって上記第１の送信元アドレスを決定し、第２のオフセットを非ゼロベースアドレスに加えることによって上記第２の送信先アドレスを決定するように構成することができる。例えば、実施形態では、ベースアドレスは、３２ビットレジスタに保持される２１ビット値であり、オフセット値は、３２ビットベースアドレス値の最下位ビットに加えられる１６ビット値の各々である。
【００１８】
実施形態では、第１および第２の送信元アドレスに対して同じベースアドレスを使用することができる。あるいは、他の実装形態では、異なるそれぞれのベースアドレスを使用可能であることも除外されない。
【００１９】
実施形態では、ベースアドレスは、１つまたは複数のレジスタファイルのうちの１つのレジスタファイルのベースアドレスレジスタにおいて指定することができる。実施形態では、ダブルロード命令は、ベースアドレスを指定するオペランドを取ることができる。代替の実装形態では、例えば、ベースアドレスがゼロであることも、ゼロではないが固定された暗黙的な値であることも除外されない。
【００２０】
実施形態では、ダブルロード命令は、可変ストライドレジスタを指定するオペランドを取りることができる。あるいは、他の実装形態では、可変ストライドレジスタは、暗黙的であってもよい。
【００２１】
実施形態では、可変ストライドレジスタは、可変ストライドレジスタの多数のフィールドのそれぞれに多数のストライド値を保持するように構成することができ、実行ユニットは、実行ユニットによって実行されたダブルロード命令の各連続インスタンスによってストライド値のうちの異なるものを使用することによって、可変ストライドの上記変更を実行するように構成される。例えば、実施形態では、各フィールドは、４ビットであり、従って、各フィールドは、１６個の異なる可能なストライド値のいずれかを指定することができる。実施形態では、ストライドレジスタは、３２ビット幅であり、従って、８個のストライド値の保持が可能である。
【００２２】
実施形態では、実行ユニットは、ダブルロード命令の各連続インスタンスによって１つのフィールドに相当するビット数の分だけ可変ストライドレジスタのコンテンツをシフトすることによって異なる値の上記使用を実行するように構成することができる。
【００２３】
実施形態では、実行ユニットは、常に、最下位フィールド（例えば、最下位４ビット）を使用することができ、シフトは右シフトである。例えば、各フィールドが４ビットである場合は、右シフトは、４ビットずつ右にシフトすることを含む。
【００２４】
しかし、他の代替の実施形態では、ストライドを変更するための他の手段を使用することができる。例えば、実行ユニットは、ダブルロード命令の各連続インスタンスによって、ストライドレジスタの異なるフィールドおよび／または異なる連続ストライドレジスタを使用するように構成することができる。
【００２５】
実行ユニットは、以前の命令を実行することによって、ストライド値を可変ストライドレジスタにロードすること、第１および第２のオフセットをオフセットレジスタにロードすること、ならびに／あるいは、ベースアドレスをベースアドレスレジスタにロードするように動作可能であってもよい。
【００２６】
実施形態では、プロセッサは、ニューラルネットワークの少なくとも一部を含むプログラムを実行するようにプログラムすることができ、プログラムは、ダブルロード命令の多数のインスタンスを含み、各インスタンスでは、第１のロード操作は、ニューラルネットワークの重みをロードするために使用され、第２のロード操作は、ニューラルネットワークによる動作の基となるデータをロードするために使用される。
【００２７】
本明細書で開示される別の態様によれば、コンピュータ可読記憶媒体上で具体化されるコンピュータプログラムであって、本明細書で開示される任意の実施形態のプロセッサによって実行されるように構成されたコードであって、ダブルロード命令の多数のインスタンスを含むコードを含む、コンピュータプログラムが提供される。
【００２８】
本明細書で開示される別の態様によれば、実行ユニットと、メモリと、１つまたは複数のレジスタファイルとを含むプロセッサを操作するための方法であって、実行ユニットが、命令セットから機械語命令のインスタンスを実行するように構成され、命令セットにおいて定義される命令のタイプが、メモリから１つまたは複数のレジスタファイルの少なくとも１つにロードするためのダブルロード命令を含む、方法であり、実行ユニットを通じてダブルロード命令の多数のインスタンスを実行するステップを含む方法であり、実行ユニットが、ダブルロード命令の各連続インスタンスによって固定ストライドの分だけストライドさせる第１のロード操作と、ダブルロード命令の各連続インスタンスによって可変ストライドの分だけストライドさせる第２のロード操作とを実行することによって、ダブルロード命令の上記インスタンスの各々を実行するように構成され、可変ストライドが、１つまたは複数のレジスタファイルのうちの１つのレジスタファイルの可変ストライドレジスタにおいて指定される、方法が提供される。
【００２９】
実施形態では、方法は、本明細書で開示されるプロセッサ特徴のいずれかによる動作をさらに含み得る。
【００３０】
本開示の実施形態を理解することを支援するため、および、そのような実施形態をどのように実施するかを示すため、単なる例示として、添付の図面を参照する。
【図面の簡単な説明】
【００３１】
【図１】プロセッサの概略ブロック図である。
【図２】ニューラルネットワークの概略図である。
【図３】プロセッサの別の概略ブロック図である。
【図４】レジスタファイルのいくつかのレジスタの概略図である。
【図５】準スパース性のロード命令の動作を概略的に示す。
【発明を実施するための形態】
【００３２】
実施形態の詳細な説明
図１は、本開示の実施形態による、少なくとも１つの処理モジュール４を含むプロセッサの例を示す。実施形態では、プロセッサは、複数の処理モジュール４または「タイル」を含んでもよく、複数の処理モジュール４は、同じチップ（すなわち、ダイ）上に実装され、互いに通信できるようにする相互接続構造を介して共に接続される。
【００３３】
処理モジュール４は、処理装置１０、１つまたは複数のレジスタファイル２６およびローカルメモリ１１（すなわち、マルチタイルアレイの場合には同じタイル上、または、単一プロセッサチップの場合には同じチップ上）を含む。メモリ１１は、命令メモリ１２およびデータメモリ２２（異なるアドレス可能メモリユニットまたは同じアドレス可能メモリユニットの異なる領域において実装することができる）を含む。命令メモリ１２は、処理装置１０によって実行される機械語命令を含むプログラムを格納する。データメモリ２２は、実行コードによる動作の基となるデータと、実行コードによって出力されたデータ（例えば、そのような演算の結果として）を格納する。レジスタファイル２６のレジスタは、メモリアドレスが命令を実行することによって演算することができる一方で、レジスタアドレスが命令語においてビットとして固定されるという点で、一般メモリとは異なる。
【００３４】
実行パイプライン１３は、フェッチステージ１４と、復号ステージ１６と、命令セットアーキテクチャによって定義されるような、算術および他の論理演算、アドレス計算、ロードおよびストア操作ならびに他の動作を実行することができる実行ユニットを含む実行ステージ１８とを含む。本明細書で言及される命令は、単一のオペコードおよび０またはそれ以上のオペランドからなる機械語命令（すなわち、プロセッサの命令セットの基本命令のうちの１つのインスタンス）を意味することに留意されたい。
【００３５】
フェッチステージ１４は、メモリ１２からプログラムの命令を次々とフェッチし、それらの命令を復号のために復号ステージ１６に渡す。次いで、復号ステージ１６は、命令を実行するために、命令において指定された任意のオペランドレジスタの復号済みのレジスタアドレス（すなわち、レジスタファイル２６のアドレス）と共に、復号済みの命令を実行ユニット１８に渡す。実行ユニット１８は、レジスタファイル２６のオペランドおよび制御状態レジスタへアクセスでき、オペランドおよび制御状態レジスタは、復号済みのレジスタアドレスに基づいて命令を実行する際に使用することができる。実施形態では、レジスタファイル２６は、少なくともメモリアドレスを含む整数を格納するための第１のまたはメインレジスタファイル（ＭＲＦ）と、浮動小数点値（例えば、ｆ１６および／またはｆ３２）を格納するための第２のまたは補助レジスタファイル（ＡＲＦ）とを含んでもよい。
【００３６】
実行ユニット１８があるタイプの命令を実行する際、実行ユニット１８は、命令のタイプに応じて、１つまたは複数のレジスタファイル２６のうちの１つまたは複数のレジスタを使用することができる。例えば、プロセッサの命令セットは、少なくとも１つのタイプのロード（load）命令を含み、実施形態では、多数の異なるタイプのロード命令を含む。ロード命令は、メモリ２２の送信元アドレスを指定するための少なくとも１つのオペランドと、少なくとも１つのレジスタファイル２６の１つまたは複数の送信先レジスタを指定するための少なくとも１つのオペランドとを取る。実行されると、実行ユニット１８は、メモリ２２の送信元アドレスからレジスタファイル２６（例えば、ＡＲＦ）の指定されたレジスタに値をロードする。ロード命令のいくつかのタイプは、レジスタファイル２６（例えば、ＭＲＦ）のうちの１つのレジスタファイル２６の別のレジスタに保持されたポインタを介して送信元アドレスを指定する。ポインタは、メモリ２２の送信元アドレスを指す。この場合、ロードの送信元オペランドは、送信元アドレスを取り入れる対象となるＭＲＦのレジスタを指定することによって、送信元メモリアドレスを代理的に指定する。ポインタは、他の以前に実行された命令インスタンスによってＭＲＦにプリロードすることができる。例えば、いくつかの実施形態では、これは、即値送信元アドレスオペランドを取り入れる別の「より基本的な」タイプのロード命令のインスタンスによるものであってもよい。あるいは、他の実施形態では、ロードが即値送信元オペランドを取り入れるというよりむしろ、その即値は、他の命令の即値から形成され、後続のロード命令のためにレジスタに格納され、次いで、アドレスレジスタとして使用することができる。注：一般に、他の任意のデータとは異なる形でポインタを扱う必要はない。コンテンツは、整数または浮動小数点値というよりむしろ、たまたまアドレスであっただけである。従って、いくつかの実施形態では、命令セットは、実際に、即値として完全な絶対アドレスを取り入れるいかなるロード命令も含まない（ただし、即値をレジスタにコピーするための命令を含む）。
【００３７】
また、プロセッサ命令セットは、典型的には、整数演算命令と浮動小数点演算命令の両方を含む多数の算術命令も含む。算術命令は、レジスタファイル２６（例えば、ＡＲＦ）のうちの少なくとも１つのレジスタファイル２６の送信元および送信先レジスタを指定する１つまたは複数の送信元オペランドおよび少なくとも１つの送信先オペランドを取る。実行されると、算術演算は、送信元レジスタに保持された値に基づいてそのそれぞれのタイプの算術演算を実行し、指定された送信先レジスタに結果を入れる。例えば、加算命令は、２つの送信元オペランドおよび１つの送信先オペランドを取ることができ、送信元レジスタに存在する値を加算し、結果として得られた総和を送信先レジスタに入れる。また、行列乗算または畳み込み（もしくはその一部）を実行するためのものなど、様々な他のより複雑なタイプの算術演算も命令セットに含めることができる。例えば、これらのタイプの命令は、入力データのセットに重み（カーネル）の行列を効率的に畳み込むプログラムを有することが望ましい機械学習において特定の適用を見出すことができる。
【００３８】
プロセッサの命令セットは、少なくとも１つのタイプのストア（store）命令をさらに含む。ストア命令は、レジスタファイル２６（例えば、ＡＲＦ）のうちの少なくとも１つのレジスタファイル２６の少なくとも１つの送信元およびメモリ２２の少なくとも１つの送信先を指定するためのオペランドを取る。実行されると、ストア命令は、指定された送信元レジスタに存在する値をメモリ２２の指定されたメモリアドレスに格納する。ストア命令のいくつかのタイプは、レジスタファイル２６（例えば、ＭＲＦ）のうちの別のレジスタに保持されたポインタを介して送信先アドレスを指定する。ポインタは、メモリ２２の送信先アドレスを指す。この場合、ストアの送信先オペランドは、送信先アドレスを取り入れる対象となるＭＲＦのレジスタを指定することによって、送信先メモリアドレスを代理的に指定する。また、単一の命令においてストアとロードの両方を実行するロード／ストア命令も知られている。
【００３９】
実施形態では、処理装置１０は、多数の時間的にインターリーブされた（interleave）スレッドを並列に実行することが可能なマルチスレッド処理装置（場合により、バレルスレッド処理装置とも呼ばれる）の形態を取ることができる。この場合、メモリ１２は、プログラムの多数の異なるスレッドを格納し、各スレッドは、１つまたは複数のあるタスクを実行するための命令のそれぞれのシーケンスを含む。フェッチステージ１４は、スレッドの並列セットのうちの異なるものから命令を次々とフェッチし、パイプライン１３を通じてそれらの命令を交互に実行するように構成される。並列スレッドの各々は、他の並列スレッドとは別にそのそれぞれのスレッドのプログラム状態（すなわち、コンテキスト）を保持するために、それぞれのレジスタファイル２６のうちの少なくとも１つに割り当てられる。場合により、各スレッドのレジスタは、そのコンテキストレジスタと呼ばれる。所定のスレッドが実行されている際、実行ユニット１８は、本来は、ロード命令、算術命令およびストア命令などのそのスレッドの命令を実行するために、それぞれのスレッドのレジスタファイル２６を使用する。実施形態では、各スレッドのコンテキストは、別個の対応するＭＲＦおよびＡＲＦで提供され、実行ユニット１８が所定のスレッドを実行する際、実行ユニット１８は、本来は、オペランドのタイプに従って、それぞれのスレッドの対応するＭＲＦまたはＡＲＦを使用する。
【００４０】
開示されるプロセッサの例示的な適用の１つでは、処理モジュール４上で実行されるプログラムは、ニューラルネットワーク１００の少なくとも一部を実装することができ、そのアイデアについては、図２において概略的に例示として示す。
【００４１】
ニューラルネットワークは、相互接続ノード（すなわち、頂点）１０２およびエッジ（すなわち、接続）１０４のグラフを含む。グラフの各ノード１０２は、１つまたは複数の入力エッジと、１つまたは複数の出力エッジとを有する。ノード１０２のうちのいくつかの入力エッジのうちのいくつかは、ノード１０２のうちの他のいくつかの出力エッジであり、それにより、ノードが互いに接続され、グラフが形成される。さらに、ノード１０２の１つまたは複数の入力エッジは、全体としてのグラフへの入力を形成し、ノード１０２の１つまたは複数の出力エッジは、全体としてのグラフの出力を形成する。所定のノードは、これらのグラフへの入力、グラフからの出力および他のノードとの接続のすべてを有するものであってもよい。各エッジ１０４は、値またはテンソル（ｎ次元行列）を伝達し、これらは、入力および出力エッジにおいてノード１０２におよびノード１０２から提供される入力および出力を形成する。
【００４２】
各ノード１０２は、１つまたは複数の入力エッジにおいて受信される１つまたは複数の入力についての関数を表し、この関数の結果は、１つまたは複数の出力エッジにおいて提供される出力である。各関数は、１つまたは複数のパラメータ（重みと呼ばれる場合もあるが、必ずしも乗法重みである必要はない）によってパラメータ化される。一般に、異なるノード１０２によって表される関数は、関数の異なる形態であることおよび／または異なるパラメータによってパラメータ化することが可能である。
【００４３】
さらに、各ノードの関数の１つまたは複数のパラメータは、それぞれの誤差値によって特徴付けられる。その上、それぞれの条件は、各ノード１０２のパラメータの誤差と関連付けることができる。単一のパラメータによってパラメータ化された関数を表すノード１０２の場合、条件は、簡単な閾値であってもよく、すなわち、条件は、誤差が指定閾値内にある場合に満たされるが、誤差が閾値を超える場合には満たされない。複数のそれぞれのパラメータによってパラメータ化されたノード１０２の場合、誤差の許容レベルに達したノード１０２に対する条件は、より複雑なものであってもよい。例えば、条件は、そのノード１０２のパラメータの各々が対応する閾値内に収まる場合にのみ満たされてもよい。別の例として、同じノード１０２に対する異なるパラメータの誤差を組み合わせた組合せ計量を定義することができ、条件は、組合せ計量の値が指定閾値内に収まるという条件で満たされ得るが、そうでなければ、条件は、組合せ計量の値が閾値を超える場合は満たされない（あるいは、計量の定義に応じて、その逆も同様である）。条件が何であれ、これにより、ノードのパラメータの誤差が許容度の一定のレベルまたは程度を下回るかどうかの尺度が得られる。一般に、任意の適切な計量を使用することができる。条件または計量は、すべてのノードに対して同じものであってもよいし、それぞれのノードに対して異なるものであってもよい。
【００４４】
学習段階では、アルゴリズムは、経験データ（すなわち、グラフへの入力の異なる可能な組合せを表す複数のデータポイント）を受信する。多くの経験データが受信されるにつれて、アルゴリズムは、経験データに基づいて、パラメータの誤差ができうる限り最小となるよう、グラフの様々なノード１０２のパラメータを徐々に調節する。目標は、所定の入力に対してグラフの出力が所望の出力にできる限り近くなるようなパラメータの値を見出すことである。グラフが全体としてそのような状態に向かう傾向となったときに、グラフは収束したと言える。適切な収束度が得られた後、グラフは、予測または推論を実行するため（すなわち、何らかの所定の入力に対する結果を予測するかまたは何らかの所定の出力に対する原因を推論するため）に使用することができる。
【００４５】
学習段階は、多くの異なる可能な形態を取ることができる。例えば、教師ありアプローチ（supervised approach）では、入力経験データは、訓練データ（すなわち、既知の出力に対応する入力）の形態を取る。各データポイントを用いると、アルゴリズムは、出力が所定の入力に対する既知の出力によりマッチするよう、パラメータを調節することができる。後続の予測段階では、グラフは、入力クエリを近似予測出力にマッピングするために使用することができる（または、推論する場合は、その逆も同様である）。また、他の手法も可能である。例えば、教師なしアプローチ（unsupervised approach）では、１つの入力データ当たり１つの参照結果という概念は存在せず、代わりに、機械知能アルゴリズムは、出力データの構造の識別を任される。あるいは、強化学習アプローチ（reinforcement approach）では、アルゴリズムは、入力経験データの各データポイントに対して少なくとも１つの可能な出力を試し、この出力が、正か否か（および、潜在的には、正または否の度合い）（例えば、勝つか負けるか、利益か損失かまたは同様のもの）が知らされる。多くの試行にわたり、アルゴリズムは、正の結果をもたらす入力を予測することができるように、グラフのパラメータを徐々に調節することができる。グラフを学習するための様々な手法およびアルゴリズムは、機械学習の当業者に知られている。
【００４６】
処理装置１０がマルチスレッド処理モジュールである実施形態では、各スレッドは、ニューラルネットワークの異なるノード１０２を実装するために使用することができる。ならびに／あるいは、プロセッサが多数のタイルを含む実施形態では、各タイルは、説明される処理モジュール４の例であり、各タイル４は、ノード１０２のうちの１つまたは複数のサブセットを含むニューラルネットワークのそれぞれの部分を実装するために使用することができる。それに従って、スレッド間および／またはタイル間の通信は、ニューラルネットワークのノード１０２間のエッジ１０４を表す。複数のスレッドおよび／またはタイル４にわたって実行される全体としてのプログラムは、ニューラルネットワークを訓練するように構成された訓練アルゴリズムおよび／またはニューラルネットワークに基づいて推論もしくは予測を実行するための推論もしくは予測アルゴリズムと共に、ニューラルネットワークを含む機械知能アルゴリズムを実装することができる。
【００４７】
図３は、本明細書で開示される実施形態による、処理モジュール１０のさらなる詳細を示す。示されるように、実行ユニット１８は、ロードおよびストア命令を実行するためのロード／ストアユニット（ＬＳＵ）５５と、算術命令を実行するための論理ユニット５８とを含む。論理ユニット５８は、整数演算命令を実行するための整数演算論理ユニット（ＩＡＬＵ）および／または浮動小数点演算命令を実行するための浮動小数点ユニット（ＦＰＵ）を含む。
【００４８】
所定のアプリケーションでは、メモリ２２は、少なくとも３つのタイプのコンテンツ、すなわち、ａ）ポインタ（図では、斜線ハッチングによって概略的に表されている）、ｂ）システマティック値（クロスハッチング）、および、ｃ）スパースデータ（点で塗りつぶされている）を格納するために使用できる。ポインタは、メモリアドレスまたはアドレスオフセットもしくはデルタであり、レジスタファイル２６（例えば、ＭＲＦ）のうちの少なくとも１つのレジスタにロードされ、ロードすべきメモリ２２の他の値／データを指し示すためにさらなるロード命令によって使用されるものである。ポインタは、以前に言及したように、以前に実行された命令によってレジスタファイル２６に保持できる。この動作が終了した時点で、１つまたは複数のさらなるタイプのロード命令は、レジスタに保持されたアドレスに対するストライド（デルタ）またはオフセットによって定義されたアドレスから代わりにロードを実行することができる。これは、さらなるタイプのロード命令がより高い意味的密度を有し得ることを意味する。基本タイプのロード命令と同様に、命令フォーマットの所望のロードアドレスの完全な即値インスタンスを含めると、送信元オペランドフィールドのかなりのビットが占められる。従って、この動作が必要ではなく、代わりに、さらなるタイプのロード命令の送信元オペランドがより小さなレジスタアドレス（ロードのためのポインタを含む）を指定することしか必要としない場合は、単一の基本的なロードより多くの機能をサポートするさらなる追加のオペランドの１つを収容することができる。また、ソフトウェアデータ構造は、空間的局所性を呈し、アドレスは、互いによく似たものになる傾向がある。エネルギーの観点から、数ビットしか違わない命令（およびそれらの関連即値）をフェッチし続けることは非効率的である。
【００４９】
本明細書で開示されるストライドされる高い意味的密度のロード命令の例は、ダブルロード命令（準スパース性のロード命令とも呼ばれる）であり、間もなくさらに詳細に論じる。
【００５０】
システマティック値は、プログラムによる動作の基となる値である。プログラムは、その値を、メモリ２２の領域内の広範にわたるメモリアドレス全体を通じてシステマティックな場所から（すなわち、隣接するアドレスの各々またはアドレス空間における少なくとも規則的な間隔から）ロードする必要がある。この例は、ニューラルネットワークの重みである。以下の説明は、重みとしてのシステマティック値を例示するが、これは制限されず、以下の教示を他のタイプのシステマティック値に適用することもできることが理解されよう。他方では、スパースデータはデータであり、これもまたプログラムによる動作の基となり、システマティック方式で離間されていない（すなわち、規則的な間隔ではない）ある特定の選択された場所からロードする必要があるだけである。別の言い方をすれば、データの一部のみが有益なまたは関連する情報を含む。例えば、データの多くは、ゼロに量子化することができ、非ゼロデータエントリのみが必要とされる。あるいは、別の例として、プログラムは、擬似ランダムパターンで値のいくつかをドロップアウトすることを望む場合がある。データのそのようなアイテムのメモリの場所は、それらのメモリの場所がシステマティックパターンに従わず、所定のプログラムがデータの中のどこにでも現れる可能性があるという点で、事実上任意である。
【００５１】
プログラムは、互いに並んだシステマティック値およびスパースデータから選択されたエントリの両方をロードする（例えば、それらに共に基づいて動作するために）必要があってもよい。例えば、スパースデータセットから選択されたデータのみを用いて、重みのシステマティックセットを低減することを必要とする場合がある。例えば、ニューラルネットワークの文脈では、重みは、典型的には、高密にパックされ、他のニューロンからの作動は、スパースにパックされてもよい。
【００５２】
どのデータをロードする必要があるかは、アプリケーションに応じて、プログラムが決定することである。しかし、プログラムがメモリコンテンツを効率的に処理できるようにするため、本明細書では、「準スパース性の」ロード機能を有し、単一の命令において２つのロードを実行するプロセッサの命令セットの命令を提供することが望ましいことが認識されている。すなわち、ロード操作のうちの一方は、実行されたロード命令の各インスタンスによって固定ストライドの分だけストライドされ、他方のロードは、ロード命令の各インスタンスによって可変ストライドの分だけストライドされる。このタイプのロード命令は、本明細書では、ダブルロードもしくは準スパース性のロード命令と呼ぶことができるか、または、いくつかの実施形態では、「ｌｄｂ１６ｂ１６」と呼ぶことができる。実施形態では、そのセマンティクス（semantics）は、以下の通りである。
ｌｄｂ１６ｂ１６  ＄ａＤｓｔ０：Ｄｓｔ０＋１，＄ｍＢａｓｅ０，＄ｍＯｆｆｓｅｔ＋＋，＄ｍＤｅｌｔａ＞＞
【００５３】
例示的な実装形態を表すものとして、「＄ｍ」は、ＭＲＦのレジスタ（メモリアドレスのために使用される）を指し、「＄ａ」は、ＡＲＦのレジスタ（浮動小数点値のために使用される）を指す。
【００５４】
上記のセマンティクスにおいて表されるように、ダブルロード命令は、第１および第２のロード操作のそれぞれに対して、レジスタファイル２６（例えば、ＡＲＦ）のうちの少なくとも１つにおいて、第１および第２の送信先を指定する少なくとも１つの送信先オペランドを取り入れる。実施形態では、これらの送信先は、レジスタファイル２６（例えば、ＡＲＦ）のうちの１つのレジスタファイル２６の２つの別個の送信先レジスタ＄ａＤｓｔ０および＄ａＤｓｔ０＋１（例えば、隣接するレジスタ）である。実施形態では、この動作には、単一のオペランドがレジスタファイル２６のうち１つのレジスタの一方（例えば、最初の＄ａＤｓｔ０）を識別する必要があり、他方のレジスタの場所は、実行ユニット１８によって、その一方のレジスタに対して固有のものである（例えば、先行するまたは次の隣接するレジスタ＄ａＤｓｔ０＋１である、すなわち、自然に位置合わせされたレジスタである）と理解される。あるいは、別の実装形態では、第１および第２の送信先が同じレジスタの第１および第２のフィールドであってもよい（その場合、そのレジスタを識別するために単一の送信先オペランドしか必要としない）ことは除外されない。いずれにせよ、実施形態では、ダブルロード命令は、１対（２要素ベクトル）の１６ビット値（例えば、ｆ１６（半精度浮動小数点値））をロードする。この方法は、１つの１６ビット重みと、スパースデータセットからの１つの１６ビットデータ値とをロードするために使用することができる（例えば、両方ともｆ１６）。
【００５５】
「ｌｄｂ１６ｂ１６」というニーモニックは、実施形態では、実行される第１および第２のロード操作が１６ビットブロードキャストロードであるという事実を指す。この文脈における「ブロードキャスト」は、ベクトルが十分に埋まるようにスカラ値を複製することを指し、各ベクトル要素は、スカラ値のコピーである。ｌｄｂ１６ｂ１６の「ｂ」は、２つのロードされた１６ビットスカラ値がブロードキャストされることを示す。実施形態では、値の各々は、１６ビット要素の２要素ベクトルを埋めるために複製される。すなわち、第１および第２の送信先レジスタ（例えば、＄Ｄｓｔ０および＄Ｄｓｔ０＋１）の各々は、３２ビット幅レジスタである。第１のロード操作によってロードされた１６ビットの重みは、第１の送信先レジスタ（例えば、＄Ｄｓｔ０）の３２ビットを埋めるように複製され、第２のロード操作の１６ビットのデータ値は、第２の送信先レジスタ（例えば、＄Ｄｓｔ０＋１）を埋めるように複製される。この理由は、少なくとも１つの実装形態では、レジスタファイル２６およびＡＲＦパイプラインが最小で３２ビットに基づいて動作し得るためである。１６ビット値の場合、最小データは、２要素ベクトル（ｆ１６ｖ２）である。ブロードキャストにより、同じ入力値が両方の１６ビットの半パイプラインに提示されることが保証される。複製は、結果として生じるいかなる例外も、１６ビット入力オペランドのみに起因し得ることを意味する（その一方で、半パイプラインの一方に例えばゼロが提示された場合は、入力オペランドによるものではない例外をもたらし得る）。
【００５６】
また、ダブルロード命令は、第１および第２のロード操作によってそれぞれロードされる予定の値をロードする対象となるメモリ２２の第１および第２の送信元アドレスを指定する１つまたは複数のオペランドも取る。実施形態では、これらの送信元アドレスは、少なくとも１つのレジスタファイル２６の１つまたは複数のレジスタを識別することによって指定され、それらの間では、メモリ２２の第１および第２の送信元アドレスを決定するための値が保持される。この動作を行うため、実施形態では、ダブルロード命令は、レジスタファイル２６（例えば、ＭＲＦ）のうち１つのベースアドレスレジスタ＄ｍＢａｓｅを識別する１つの送信元オペランドと、レジスタファイル２６のうち１つのオフセットレジスタ＄ｍＯｆｆｓｅｔを識別する別の送信元オペランドとを取る。ベースアドレスレジスタ＄ｍＢａｓｅは、ベースメモリアドレス、すなわち、ベースポインタ（例えば、別のタイプのロード命令などの別の命令の以前のインスタンスによって、命令を形成する定数によってまたはベースアドレスを形成するための何らかの整数演算によってそこにプリロードされている）を保持するように構成される。このベースアドレスは、第１および第２のロード操作の両方に共通のベースアドレスである。オフセットレジスタ＄ｍＯｆｆｓｅｔは、＄ｍＯｆｆｓｅｔレジスタの第１および第２のそれぞれのフィールドに第１および第２のロードに対する第１および第２のアドレスオフセット値（この場合もやはり、以前に実行された命令によって以前にそこに配置されている）をそれぞれ保持するように構成される。あるいは、代替の実施形態では、オフセットサイズおよびレジスタアーキテクチャに応じて、第１および第２のオフセットを保持するために、２つの別個の第１および第２のレジスタを使用することができる（例えば、オフセットオペランドは、これらのレジスタのうちの一方のみを識別し、他方の場所は、その一方のレジスタに対して固有のものである（例えば、同じレジスタファイルの隣接するレジスタである））。いずれにせよ、上記のセマンティクス表現における「＋＋」は、オフセットレジスタのオフセット値が、実行されたダブルロード命令の各インスタンスによってストライド値の分だけ（第１のロードは固定ストライド値の分だけ、そして、第２のロードはプログラム可能デルタの分だけ）自動的にインクリメントされるという事実を指す。
【００５７】
ダブルロード命令は、実行されたダブルロード命令の各インスタンスによって第２のロード操作に対するストライド値（すなわち、オフセットレジスタ＄ｍＯｆｆｓｅｔの第２のオフセットに適用されるアドレスデルタ）を指定する少なくとも１つのオペランドをさらに取る。実施形態では、このダブルロード命令は、単一のオペランドしか必要としない。実施形態では、オペランドは、レジスタファイル２６（例えば、ＭＲＦ）のうち１つのデルタレジスタ＄ｍＤｅｌｔａ（以前に実行された命令によって以前にそこに配置されている）を識別することによってデルタを指定する。デルタレジスタ＄ｍＤｅｌｔａは、少なくとも１つのデルタ値を保持するように構成され、実施形態では、デルタレジスタの多数のフィールド（例えば、４ビットフィールド）のそれぞれに多数のデルタを保持するように構成される。ダブルロード命令の機能は、実行されたダブルロード命令の各連続インスタンスによってデルタ値のうちの異なるものを使用することである。実施形態では、この機能は、毎回１つのフィールドに相当するビット数（例えば、４ビット）の分だけレジスタのコンテンツを右にシフトし、現在のデルタ（すなわち、ストライド）に対して最下位フィールド（例えば、最下位４ビット）を常に使用することによって実装される。これが、上記の表現において「＞＞」によって表されているものである。
【００５８】
図４に示されるように、実施形態では、ベースアドレスレジスタ＄ｍＢａｓｅ（ＭＲＦの）は、３２ビット幅であり、ベースアドレス（ｂａｓｅ＿ａｄｄｒ）は、ベースアドレスレジスタの最下位２１ビットを占めている２１ビットポインタである。実施形態では、オフセットレジスタ＄ｍＯｆｆｓｅｔ（ＭＲＦの）は、３２ビット幅である。オフセットレジスタ＄ｍＯｆｆｓｅｔの第１の１６ビットフィールド（例えば、最上位１６ビットの＄ｍＯｆｆｓｅｔ［３１：１６］）は、第１のロード操作に対する（重みに対する）１６ビットオフセット値（ｗｏｆｆｓｅｔ）を保持するために使用され、オフセットレジスタ＄ｍＯｆｆｓｅｔの第２の１６ビットフィールド（例えば、最下位１６ビットの＄ｍＯｆｆｓｅｔ［１５：０］）は、第２のロード操作に対する（スパースデータからのデータ値に対する）１６ビットオフセット値（ｄｏｆｆｓｅｔ）を保持するために使用される。実施形態では、デルタレジスタ＄ｍＤｅｌｔａ（ＭＲＦの）は、３２ビット幅であり、デルタレジスタ＄ｍＤｅｌｔａ内のデルタフィールドの各々は、４ビットであり、８つの独立設定可能な４ビットストライドを格納するための合計で８つのフィールドが得られ、各々は、異なる１６の可能な値のうちのいずれかを取ることができる。
【００５９】
図５は、実行ユニット１８によって実行される際のダブルロード命令の動作を示す（実行ユニット１８は、ダブルロード命令のオペコードに応答してこの機能を実行するように適切に構成された論理を含む）。ダブルロード命令のインスタンスが実行されると、第１のロード操作は、メモリ２２の第１の送信元アドレスに存在する値をレジスタファイル２６（例えば、ＡＲＦ）のうち１つの第１の送信先レジスタ（例えば、＄ａＤｓｔ０）にロードする。実施形態では、第１の送信元アドレスの値は、ベースアドレス（ｂａｓｅ＿ａｄｄｒ）に第１のオフセット値を加えたものである。実施形態では、第１の送信元アドレスは、ベースアドレスレジスタ＄ｍＢａｓｅから取り入れられ、第１のオフセット（ｗｏｆｆｓｅｔ）は、オフセットレジスタ＄ｍＯｆｆｓｅｔの第１のフィールド（例えば、＄ｍＯｆｆｓｅｔ［３１：１６］）から取り入れられる。すなわち、第１のロード操作は、＄ｍＢａｓｅ＋＄ｍＯｆｆｓｅｔ［３１：１６］から＄Ｄｓｔ０にロードする。
【００６０】
また、第２のロード操作もダブルロード命令の同じインスタンスの同じオペコードに応答して実行される。第２のロード操作は、メモリ２２の第２の送信元アドレスに見られる値をレジスタファイル２６（例えば、ＡＲＦ）のうちの１つのレジスタファイル２６の第２の送信先レジスタ（例えば、＄ａＤｓｔ０＋１）にロードする。実施形態では、第２の送信元アドレスの値は、ベースアドレス（ｂａｓｅ＿ａｄｄｒ）に第２のオフセット値を加えたものである。実施形態では、第２の送信元アドレスは、ベースアドレスレジスタ＄ｍＢａｓｅから取り入れられ、第２のオフセット（ｄｏｆｆｓｅｔ）は、オフセットレジスタ＄ｍＯｆｆｓｅｔの第２のフィールド（例えば、＄ｍＯｆｆｓｅｔ［１５：０］）から取り入れられる。すなわち、第２のロード操作は、＄ｍＢａｓｅ＋＄ｍＯｆｆｓｅｔ［１５：０］から＄Ｄｓｔ０＋１にロードする。
【００６１】
実行されたダブルロード命令の各連続インスタンスによって、第１の送信元アドレスは、固定デルタ（例えば、アドレス空間の１単位（アトム）（例えば、ストライドの目的で１単位は２バイトである−以下を参照））の分だけ自動的にインクリメントされる。実施形態では、この動作は、１単位をオフセットレジスタ＄ｍＯｆｆｓｅｔの第１のフィールドに加えることによって実装される。さらに、第２の送信元アドレスは、プログラム可能デルタの分だけ自動的にインクリメントされる。実施形態では、この動作は、プログラム可能デルタをオフセットレジスタ＄ｍＯｆｆｓｅｔの第２のフィールドに加えることによって実装される。実施形態では、プログラム可能デルタは、デルタレジスタ＄ｍＤｅｌｔａのフィールドのうちの１つから取り入れられる。このデルタ値は、第２のオフセットに加える単位（アトム）の数（例えば、２バイトの単位の数）を示す。さらに、実行されたダブルロード命令の各連続インスタンスによって、デルタレジスタ＄ｍＤｅｌｔａの複数のデルタ値のうちの異なるものが使用される。実施形態では、この動作は、ダブルロード命令の各インスタンスによって、デルタレジスタ＄ｍＤｅｌｔａの最下位フィールド（例えば、最下位４ビット）を常に使用し、次いで、１フィールド（例えば、４ビット）分だけこのレジスタのコンテンツを右にシフトすることによって実装される。均等の変形形態は、各命令によって、最上位フィールド（例えば、最上位４ビット）を常に使用し、左にシフトすることであろう。二値論理の文脈における「左」および「右」は、物理的な向きではなく、ビットシグニフィカンス（bit significance）を指すことに注意されたい。
【００６２】
２つのストライドは、ダブルロード命令のオペコードに応答してダブルロード命令の同じ単一のインスタンスを実行する固有の部分として、それぞれのアドレスに自動的に適用される。ストライドをオフセットに適用するために別個の機械語命令は不要である（ただし、別個の機械語命令は、ベースアドレス、オフセットおよびストライドデルタをベースアドレス、オフセットおよびデルタレジスタ（＄ｍＢａｓｅ、＄ｍＯｆｆｓｅｔ、＄ｍＤｅｌｔａ）に最初にロードするために必要であってもよい）。
【００６３】
実施形態では、ロードされている値のそれぞれ（すなわち、重みおよびデータ値）は、１６ビット値である。従って、本目的のためのストライドまたはデルタの１単位（アトミックサイズ）は、２バイトである。従って、ダブルロード命令の各インスタンスによって、第１の送信元アドレス（重みに対する）は、１単位（２バイト）分だけインクリメントされ、第２の送信元アドレス（データに対する）は、デルタレジスタに１を加えたものに２バイトを乗じたもの（すなわち、２バイトの単位が（デルタ＋１）組）の値（「デルタ」）に等しい数の分だけインクリメントされる。デルタ＝０のときは、このインクリメントは、１単位（２バイト）のストライドに相当し、デルタ＝１のときは、このインクリメントは、２単位（４バイト）のストライドに相当するなど、以下同様であることに留意されたい。この理由は、ほとんどのアプリケーションの場合、ゼロのストライドが無効であるためである。しかし、いくつかの代替の実装形態では、プログラム可能ストライドの異なる可能な値のうちの１つに対してゼロのストライドを選択することができるオプションが与えられる（すなわち、２つのロード操作のうちの１つに対してあるインスタンスから次のインスタンスへの静的アドレスを可能にする）ことは除外されない。
【００６４】
実施形態では、第１および第２のロードは、それらのそれぞれのストライドの分だけポストインクリメントされる。すなわち、実行されたダブルロード命令の各インスタンスによって、そのインスタンスの第１のロード操作の後に、そのインスタンスの第１の固定ストライドが適用され、そのインスタンスの第２のロード操作の後に、同じインスタンスの第２の可変ストライドが適用される（ただし、第１のロードと第２のロード、第１のストライドと第２のストライド、第１のストライドと第２のロード、および、第１のロードと第２のストライドの相対的順番は、必ずしも問題にはならない）。しかし、他の代替の実装形態では、ダブルロード命令が実行される際に第１および第２のロードをそれらのそれぞれのストライドの分だけプレインクリメントできることは除外されない。
【００６５】
数学的には、説明された機能は、以下の通り表現することができる。
ｂａｓｅ＿ａｄｄｒ＝＄ｍＢａｓｅ［２０：０］    ／／  ベースレジスタからベースアドレスを読み取る。
ｗｏｆｆｓｅｔ＝＄ｍＯｆｆｓｅｔ［３１：１６］    ／／  オフセットレジスタの第１のフィールドから重みオフセットを読み取る。
ｄｏｆｆｓｅｔ＝＄ｍＯｆｆｓｅｔ［１５：０］    ／／  オフセットレジスタの第２のフィールドからデータオフセットを読み取る。
ｄｅｌｔａ＝＄ｍＤｅｌｔａ［３：０］    ／／  デルタレジスタの最下位４ビットからストライドを読み取る。
ＥＡ［０］＝ｂａｓｅ＿ａｄｄｒ＋ｗｏｆｆｓｅｔ    ／／  重みアドレスオフセットをベースアドレスに加える。
ＥＡ［１］＝ｂａｓｅ＿ａｄｄｒ＋ｄｏｆｆｓｅｔ    ／／  データアドレスオフセットをベースアドレスに加える。
ｗｏｆｆｓｅｔ＋＝２    ／／  重みアドレスオフセットを２バイトだけインクリメントする。
ｍｄｅｌｔａ＝（ｄｅｌｔａ＋１）＊２    ／／  ストライドを演算する（単位：バイト）
ｄｏｆｆｓｅｔ＋＝ｍｄｅｌｔａ    ／／  データアドレスオフセットをストライドの分だけインクリメントする。
＄ｍＯｆｆｓｅｔ：＝（ｗｏｆｆｓｅｔ＜＜１６）｜ｄｏｆｆｓｅｔ    ／／  インクリメントしたオフセットをオフセットレジスタに書き戻す。
＄ｍＤｅｌｔａ：＝＄ｍＤｅｌｔａ＞＞４    ／／  次のストライドを得るためにストライドデルタを４ビットだけ右にシフトする。
【００６６】
第１および第２のロード操作は、ダブルロード命令のオペコードに応答して、実行ユニット１８のロード／ストアユニット（ＬＳＵ）５５によって実行される。実施形態では、ストライドの演算および適用もまた、ＬＳＵによって実行することができる。あるいは、他の実施形態では、この機能のいくつかまたはすべては、整数演算論理ユニットＩＡＬＵなど、実行ユニット１８の別のユニット５８のロジックを再利用することによって実装することができる。
【００６７】
上記の実施形態は単なる例示として説明されていることが理解されよう。
【００６８】
例えば、上記で与えられる正確なセマンティクスは必ずしも制限するものではなく、当業者は、同じ基本的な機能または同様のものを単一の機械語命令に符号化するための他の方法を見出すことができる。例えば、オペランドのうちの１つまたは複数は、＄ｍＢａｓｅ、＄ｍＯｆｆｓｅｔ、＄ｍＤｅｌｔａなどのレジスタに保持されている値を参照して、それぞれの情報を指定するオペランドというよりむしろ、即値オペランドであってもよい（「即値」は、命令セットアーキテクチャの文脈の用語であり、レジスタを参照するというよりむしろ、数として直接符号化してオペランドフィールドに埋め込むことによって情報が指定されることを意味する）。
【００６９】
その代替としてまたはそれに加えて、オペランドのうち１つまたは複数は必要ではない場合があり、それらのオペランドが指定することになっている情報は、代わりに、暗黙的であってもよい（「暗黙的」は、当技術分野の命令セットアーキテクチャの文脈の用語であり、オペランドにおいて問題の情報を指定する必要がないことを意味し、その理由は、問題の情報が代わりに自動的に想定されるためである）。例えば、ストライドレジスタ＄ｍＤｅｌｔａの識別情報（identity）は、暗黙的であってもよい。
【００７０】
さらなる変形形態では、より多くのオペランドフィールドが設けられてもよい。例えば、命令において２つの送信先オペランドフィールドを設け、第１および第２の送信先レジスタを独立して指定できるようにしてもよい。そのような設計考察は、例えば、意図するアプリケーションの機能の量およびプロセッサアーキテクチャの命令ビット幅に依存してもよい。
【００７１】
さらなる例示的な変形形態では、第１および第２のオフセットは、ベースに対するものというよりむしろ、絶対アドレス（すなわち、アドレス空間における０に対するオフセット）でとでき、それによって、ベースアドレスオペランドは不要となる。また、オフセットまたはデルタのアイデア（「加える」、「インクリメントする」または同様のものに対して説明される場合を含む）は、本明細書で言及される場合は、負の値を加えることを除外するものと読み取るべきではない。すなわち、同等に、ダブルロード命令の各インスタンスによって、オフセットの大きさをベースアドレスから減ずること、および／または、ストライド（デルタ）の大きさを第２のオフセットから減ずることができる（高値から始め、低値に向かって減少するように、メモリアドレスを通じて逆行させるため）。
【００７２】
さらに、上記で説明される様々なレジスタのアーキテクチャ上のビット幅およびサイズならびに値は、制限されず、この場合もやはり、他の実装形態では、プロセッサの設計考察および意図するアプリケーションなどに応じて異なってもよいことに留意されたい。
【００７３】
さらに、本開示の範囲は、ニューラルネットワークまたは機械学習のアプリケーションに限定されず、本明細書の教示は、より一般に、スパースデータセットからの他の選択された値と並んで、いくつかのシステマティック値をロードして処理する必要があるいかなるアプリケーションにおいても採用することができる。また、本開示の範囲は、マルチスレッドまたはマルチタイルアーキテクチャに限定されない。技法は、システマティックデータとスパースデータの両方をロードして処理するために使用することができるプロセッサのいかなる設計に対しても使用することができる。
【００７４】
開示される技法の他の変形形態または使用事例は、本明細書の本開示が与えられた時点で当業者に明らかになるであろう。本開示の範囲は、説明される実施形態による制限は受けず、添付の請求項による制限のみを受ける。
【符号の説明】
【００７５】
４  処理モジュール
１０  処理装置
１１  ローカルメモリ
１２  命令メモリ
１３  パイプライン
１４  フェッチ
１６  復号
１８  実行ユニット
２２  データメモリ
２６  コンテキストレジスタ
５５  ロード／ストアユニット
５８  論理ユニット
１００  ニューラルネットワーク
１０２  ノード
１０４  エッジ
【図１】
2020119490.tif 000003
【図２】
2020119490.tif 000004
【図３】
2020119490.tif 000005
【図４】
2020119490.tif 000006
【図５】
2020119490.tif 000007
【外国語明細書】
2020119490000001.pdf