(57)【要約】  データ処理装置、データ処理装置を動作させる方法、非一時的コンピュータ可読記憶媒体、および命令が提供される。この命令は、最初のソースレジスタおよび第２のソースレジスタを指定する。命令に応答して、処理回路に内積演算を実行させる制御信号が生成される。この演算のために、少なくとも第１データ要素と第２データ要素が、第１のソースレジスタおよび第２のソースレジスタの各々から抽出され、結果、少なくとも第１のデータ要素の対と第２のデータ要素の対とがともに乗算される。内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々にまたがる複数のレジスタ内レーンの各々において独立して実行される。このように、命令ごとの演算の密度が高い拡大演算が可能になる。
2020508513.tif 000002
【特許請求の範囲】
【請求項１】
データ処理装置であって、
データ要素を記憶するための複数のレジスタを有するレジスタ記憶回路と、
データ処理命令に応答して制御信号を生成する復号器回路であり、前記データ処理命令は、前記複数のレジスタ内で、第１のソースレジスタおよび第２のソースレジスタを指定する、復号器回路と、
前記制御信号に応答して、内積演算を実行する処理回路と
を備え、前記内積演算は、
前記第１のソースレジスタおよび前記第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、
少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、
前記乗算演算の結果を合計することと
を含み、前記第１のソースレジスタおよび前記第２のソースレジスタの各々が複数のレジスタ内レーンを含み、前記処理回路は、前記制御信号に応答して、各レジスタ内レーン内で独立に前記内積演算を実行する、データ処理装置。
【請求項２】
前記データ処理命令は、前記複数のレジスタにおいて出力レジスタをさらに指定し、前記乗算演算の前記結果を合計することは、前記合計の結果を前記出力レジスタに適用することをさらに含む、請求項１に記載のデータ処理装置。
【請求項３】
前記出力レジスタはアキュムレータレジスタであり、前記内積演算は、前記アキュムレータレジスタからアキュムレータ値をロードしそして前記乗算演算の前記結果と前記アキュムレータ値とを合計することをさらに含む内積および累算演算である、請求項２に記載のデータ処理装置。
【請求項４】
前記復号器回路は、さらなるデータ処理命令に応答してさらなる制御信号を生成し、前記データ処理命令は、前記複数のレジスタにおいて前記出力レジスタおよびアキュムレータレジスタを指定し、前記処理回路は、前記さらなる制御信号に応答して累算演算を実施し、前記累算演算は、
前記アキュムレータレジスタからアキュムレータ値をロードし、前記出力レジスタから合計値をロードすることと、
前記アキュムレータ値と前記合計値とを合計することと、
前記合計の結果を前記アキュムレータレジスタに記憶することと
を含む、請求項２に記載のデータ処理装置。
【請求項５】
前記第１のソースレジスタ、前記第２のソースレジスタ、および前記出力レジスタの幅が等しい、請求項２に記載のデータ処理装置。
【請求項６】
前記第１のソースレジスタ、前記第２のソースレジスタ、前記出力レジスタ、および前記アキュムレータレジスタの幅が等しい、請求項３または４に記載のデータ処理装置。
【請求項７】
前記第１のソースレジスタの幅は、前記内積演算において前記第１のソースレジスタから抽出されるすべてのデータ要素の結合サイズに等しい、請求項１から６のいずれか一項に記載のデータ処理装置。
【請求項８】
前記第２のソースレジスタの幅は、前記内積演算において前記第２のソースレジスタから抽出されるすべてのデータ要素の結合サイズに等しい、請求項１から７のいずれか一項に記載のデータ処理装置。
【請求項９】
前記内積演算は、前記第１のソースレジスタおよび前記第２のソースレジスタの各々から少なくとも第３のデータ要素および第４のデータ要素を抽出することと、少なくとも第３のデータ要素の対および第４のデータ要素の対をともに乗算するさらなる乗算演算を実行することと、前記さらなる乗算演算の結果と前記乗算演算の前記結果とを合計することとをさらに含む、請求項１から８のいずれか一項に記載のデータ処理装置。
【請求項１０】
各レジスタ内レーンのサイズは、前記内積演算において前記第１のソースレジスタの各レジスタ内レーンから抽出されるすべてのデータ要素の結合サイズに等しい、請求項１から９のいずれか一項に記載のデータ処理装置。
【請求項１１】
各レジスタ内レーンのサイズは、前記内積演算において前記第２のソースレジスタの各レジスタ内レーンから抽出されるすべてのデータ要素の結合サイズに等しい、請求項１から１０のいずれか一項に記載のデータ処理装置。
【請求項１２】
前記データ処理命令は、繰り返されるレジスタ内レーンと、前記第１のソースレジスタおよび前記第２のソースレジスタのうちの選択されるソースレジスタを指定し、
前記処理回路は、前記制御信号に応答して、前記選択されているソースレジスタのすべてのレーンについて、前記繰り返されるレジスタ内レーンの内容を再利用する、請求項１から１１のいずれか一項に記載のデータ処理装置。
【請求項１３】
前記複数のレジスタ内レーンは３２ビット幅を有し、前記抽出は、前記第１のソースレジスタおよび前記第２のソースレジスタの各レジスタ内レーンから４つの８ビットデータ要素を抽出することを含む、請求項１から１２のいずれか一項に記載のデータ処理装置。
【請求項１４】
前記複数のレジスタ内レーンは６４ビット幅を有し、前記抽出は、前記第１のソースレジスタおよび前記第２のソースレジスタの各レジスタ内レーンから４つの１６ビットデータ要素を抽出することを含む、請求項１から１２のいずれか一項に記載のデータ処理装置。
【請求項１５】
前記乗算演算および加算は整数演算である、請求項１から１４のいずれか一項に記載のデータ処理装置。
【請求項１６】
前記第１のソースレジスタおよび前記第２のソースレジスタ内に保持される値は符号付き値である、請求項１から１５のいずれか一項に記載のデータ処理装置。
【請求項１７】
前記第１のソースレジスタおよび前記第２のソースレジスタ内に保持される値は符号なし値である、請求項１から１５のいずれか一項に記載のデータ処理装置。
【請求項１８】
前記乗算演算および加算は浮動小数点演算である、請求項１から１４のいずれか一項に記載のデータ処理装置。
【請求項１９】
前記複数のレジスタ内レーンは３２ビット幅を有し、前記抽出は、前記第１のソースレジスタおよび前記第２のソースレジスタの各レジスタ内レーンから２つの１６ビット浮動小数点データ要素を抽出することを含む、請求項１８に記載のデータ処理装置。
【請求項２０】
前記複数のレジスタ内レーンは６４ビット幅を有し、前記抽出は、前記第１のソースレジスタおよび前記第２のソースレジスタの各レジスタ内レーンから２つの３２ビット浮動小数点データ要素を抽出することを含む、請求項１８に記載のデータ処理装置。
【請求項２１】
データ処理装置を動作させる方法であって、
データ処理命令に応答して制御信号を生成することであり、前記データ処理命令は、複数のレジスタにおいて、第１のソースレジスタおよび第２のソースレジスタを指定する、生成することと、
前記制御信号に応答して、内積演算を実行することと
を含み、前記内積演算は、
前記第１のソースレジスタおよび前記第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、
少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、
前記乗算演算の結果を合計することと
を含み、
前記第１のソースレジスタおよび前記第２のソースレジスタの各々が複数のレジスタ内レーンを含み、前記内積演算は、各レジスタ内レーン内で独立に実行される、方法。
【請求項２２】
少なくとも１つのデータ処理命令を含むプログラムを非一時的に記憶するコンピュータ可読記憶媒体であって、前記データ処理命令は、データ処理装置によって実行されると、
前記データ処理命令に応答して制御信号を生成することであり、前記データ処理命令は、前記データ処理装置のレジスタ記憶回路内の第１のソースレジスタおよび第２のソースレジスタを指定する、生成することと、
前記制御信号に応答して、内積演算を実行することと
が行われるようにし、前記内積演算は、
前記第１のソースレジスタおよび前記第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、
少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、
前記乗算演算の結果を合計することと
を含み、
前記第１のソースレジスタおよび前記第２のソースレジスタの各々が複数のレジスタ内レーンを含み、前記内積演算は、各レジスタ内レーン内で独立に実行される、コンピュータ可読記憶媒体。
【請求項２３】
データ処理装置であって、
複数のレジスタ内にデータ要素を記憶するための手段と、
制御信号を生成するためのデータ処理命令を復号するための手段であり、前記データ処理命令は、前記複数のレジスタ内で、第１のソースレジスタおよび第２のソースレジスタを指定する、復号するための手段と、
前記制御信号に応答して、内積演算を実行するための手段と
を備え、前記内積演算は、
前記第１のソースレジスタおよび前記第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、
少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、
前記乗算演算の結果を合計することと
を含み、
前記第１のソースレジスタおよび前記第２のソースレジスタの各々が複数のレジスタ内レーンを含み、前記内積演算および累算演算は、各レジスタ内レーン内で独立に実行される、データ処理装置。
【請求項２４】
データ処理装置上で実行されるコンピュータプログラムによって提供される仮想機械であって、前記仮想機械は、請求項１から２０、または２３のいずれか一項に記載のデータ処理装置に対応する命令実行環境を提供する、仮想機械。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理に関する。特に、本発明は、算術演算を実行するデータ処理装置に関する。
【０００２】
データ処理装置は、算術演算を実行する必要がある場合がある。これらの算術演算は、たとえば、さまざまなコンテキストにおいて適用可能性が見出され得る乗算演算を含み得る。このようなデータ処理装置を提供する際に対応する必要がある１つのファクタは、切り捨てまたは飽和などの他の手法（計算の精度を制限する）に依拠すべきではない場合に、いくつかの数値形式（たとえば、整数などの固定小数点数）が乗算されるときに発生する固有の「拡大」である。したがって、乗算演算への入力オペランドは比較的コンパクトであり得るという事実にもかかわらず、結果は、各入力オペランドよりも多くのビットを記憶する必要があるという意味で「より広い」場合がある。８ビット整数が非常にコンパクトであると見なされる（したがって、ストレージおよびメモリ帯域幅のコストを節約する）現代的な例を挙げると、これらの整数を乗算すると１６ビットの結果が生成され、２つ以上のそのような結果が累算される場合、オーバーフローを回避するために、より広い累算レジスタが必要である。現代の装置で次に容易に利用可能なレジスタサイズが３２ビット幅であるこの例では、この算術演算の相当の「拡大」に対応する必要があることが理解されよう。ただし、さらに、このような拡大演算は可能であるが、それらの実施態様のさらなるファクタは、スループットがアキュムレータ幅の関数になる傾向があることである。たとえば、各レジスタが１６個の８ビット値に対応することができるように、１２８ビット幅のレジスタを使用する実施態様では、拡大積和演算は、１つのレジスタが提供する４つの３２ビットアキュムレータのみを標的にし得（４つの３２ビットアキュムレータのみがこのレジスタ幅において対応され得るため）、これは性能の制限要因になる（たとえば、１サイクルあたり８つの演算、すなわち、４つの乗算および４つの累算）。
【発明の概要】
【０００３】
本明細書で説明する少なくとも１つの例は、データ処理装置であって、データ要素を記憶するための複数のレジスタを有するレジスタ記憶回路と、データ処理命令に応答して制御信号を生成する復号器回路であり、データ処理命令は、複数のレジスタ内で、第１のソースレジスタおよび第２のソースレジスタを指定する、復号器回路と、制御信号に応答して、内積演算を実行する処理回路とを備え、内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第１のソースレジスタおよび第２のソースレジスタの各々が複数のレジスタ内レーンを含み、処理回路は、制御信号に応答して、各レジスタ内レーン内で独立に内積演算を実行する、データ処理装置を提供する。
【０００４】
本明細書で説明する少なくとも１つの例は、データ処理装置を動作させる方法であって、データ処理命令に応答して制御信号を生成することであり、データ処理命令は、複数のレジスタ内で、第１のソースレジスタおよび第２のソースレジスタを指定する、生成することと、制御信号に応答して、内積演算を実行することとを含み、内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第１のソースレジスタおよび第２のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算は、各レジスタ内レーン内で独立に実行される、方法を提供する。
【０００５】
本明細書で説明する少なくとも１つの例は、少なくとも１つのデータ処理命令を含むプログラムを非一時的に記憶するコンピュータ可読記憶媒体であって、データ処理命令は、データ処理装置によって実行されると、データ処理命令に応答して制御信号を生成することであり、データ処理命令は、データ処理装置のレジスタ記憶回路内の第１のソースレジスタおよび第２のソースレジスタを指定する、生成することと、制御信号に応答して、内積演算を実行することとが行われるようにし、内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第１のソースレジスタおよび第２のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算は、各レジスタ内レーン内で独立に実行される、コンピュータ可読記憶媒体を提供する。
【０００６】
本明細書で説明する少なくとも１つの例は、データ処理装置であって、複数のレジスタ内にデータ要素を記憶するための手段と、制御信号を生成するためのデータ処理命令を復号するための手段であり、データ処理命令は、複数のレジスタ内で、第１のソースレジスタおよび第２のソースレジスタを指定する、復号するための手段と、制御信号に応答して、内積演算を実行するための手段とを備え、内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第１のソースレジスタおよび第２のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算および累算演算は、各レジスタ内レーン内で独立に実行される、データ処理装置を提供する。
【０００７】
本発明は、添付の図面に示されている実施形態を参照して、単なる例として、さらに説明される。
【図面の簡単な説明】
【０００８】
【図１】本技法のさまざまな例を具現化することができるデータ処理装置の概略図である。
【図２】一実施形態におけるデータ準備命令の使用の概略図である。
【図３】図２の実施形態の変形形態の概略図である。
【図４Ａ】例示的なデータ処理命令の概略図である。
【図４Ｂ】一実施形態における図４Ａのデータ処理命令の実行の実施態様を示す図である。
【図５Ａ】いくつかの実施形態において演算ユニットへのデータ要素のルーティングが提供され得る２つの方法のうちの１つの概略図である。
【図５Ｂ】いくつかの実施形態において演算ユニットへのデータ要素のルーティングが提供され得る２つの方法のうちの１つの概略図である。
【図６Ａ】図４Ａおよび図４Ｂを参照して説明したデータ処理命令およびそれらの実行のさらなる２つの例のうちの１つの概略図である。
【図６Ｂ】図４Ａおよび図４Ｂを参照して説明したデータ処理命令およびそれらの実行のさらなる２つの例のうちの１つの概略図である。
【図７Ａ】例示的なデータ処理命令の概略図である。
【図７Ｂ】一実施形態における図４Ａのデータ処理命令の実行の実施態様を示す図である。
【図８】一実施形態の方法に従って行われる一連のステップを示す図である。
【図９Ａ】一実施形態によるデータ処理命令の実行の概略図である。
【図９Ｂ】図９Ａのような命令の２つの例を示す図である。
【図１０】図９Ｂのデータ処理命令の実行の実施形態におけるいくつかの変形形態の概略図である。
【図１１】一実施形態における「内積」データ処理命令のための２つの１２８ビットソースレジスタを備えたより複雑な例の概略図である。
【図１２】図１１の実施形態の変形形態を示す図である。
【図１３】図１１および図１２に示した例のさらなる変形形態を示す図である。
【図１４】一実施形態の方法に従って行われる一連のステップを示す図である。
【図１５Ａ】いくつかの実施形態によって提供されるデータ処理命令の実行の概略図である。
【図１５Ｂ】対応する例示的な命令を示す図である。
【図１６】図１５Ａの実施形態の例示的な視覚化を、単純な行列乗算演算の形で示す図である。
【図１７】第１のソースレジスタおよび第２のソースレジスタの各々から２つのデータ要素のみが導出される、図１５Ａに示されている例のより単純な変形形態を示す図である。
【図１８】ソースレジスタの各々からより多くのデータ要素が抽出される、図１５Ａに示されている例の別の変形形態を示す図である。
【図１９】実行されるいくつかの特定の乗算演算のさらなる詳細を与える、データ処理命令の実行の例示的な実施形態を示す図である。
【図２０】２つのソースレジスタの内容が２つの独立したレーン内にデータ要素を含むものとして扱われる、データ処理命令の実行の例示的な実施形態を示す図である。
【図２１】一実施形態の方法に従って行われる一連のステップを示す図である。
【図２２】一実施形態による仮想機械実施態様を示す図である。
【０００９】
本明細書で説明する少なくとも１つの例示的な実施形態は、データ処理装置であって、データ要素を記憶するための複数のレジスタを有するレジスタ記憶回路と、データ処理命令に応答して制御信号を生成する復号器回路であり、データ処理命令は、複数のレジスタ内で、第１のソースレジスタおよび第２のソースレジスタを指定する、復号器回路と、制御信号に応答して、内積演算を実行する処理回路とを備え、内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第１のソースレジスタおよび第２のソースレジスタの各々が複数のレジスタ内レーンを含み、処理回路は、制御信号に応答して、各レジスタ内レーン内で独立に内積演算を実行する、データ処理装置を提供する。
【００１０】
したがって、提供される命令、およびそれをサポートするデータ処理装置内に提供される対応する回路により、少なくとも２つのデータ要素を第１のソースレジスタおよび第２のソースレジスタの各々から抽出することが可能であり、結果、各ソースレジスタから抽出されるデータ要素の対乗算演算を実行することができる。言い換えれば、２つのデータ要素が第１のソースレジスタおよび第２のソースレジスタの各々から抽出される例では、対乗算演算は、第１の乗算演算において第１のソースレジスタおよび第２のソースレジスタの各々から抽出される第１のデータ要素をともに乗算し、また、別個に、第２の乗算演算において第１のソースレジスタおよび第２のソースレジスタの各々から抽出される第２データ要素をともに乗算する。次に、これらの乗算演算の結果が加算される。さらに、この内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々にわたって（内容ではなく動作を）複数回反復され、したがって、その内容は複数の独立したレーン内で提示されるものとして扱われる。
【００１１】
したがって、内積計算機能を提供するこの手法は、第１のソースレジスタおよび第２のソースレジスタの各々から取得した１つのデータ要素のみに対して乗算演算を実行する代わりに、第１のソースレジスタおよび第２のソースレジスタの各々から取得される少なくとも２つのデータ要素に対して乗算演算を実行し、したがって、各々を互いに乗算されるベクトルとして扱い、結果、内積演算がこのベクトル対にわたって実行される、新規の形態の拡大演算を提供する。特に、この手法は、累算のレベルではなく乗算成分のレベルでスループットの向上が促進されるため、上記で概説したのと同じスループットの制約を受けない。さらに、内積演算は複数のレジスタ内レーンの各々において独立して実行され、したがって、わずか２つのレジスタに記憶された値の複数の対を並列処理するための効率的でコンパクトなメカニズムを提供する。
【００１２】
このレーンベースの手法は、必要な加算器の複雑さも制限する。１２８ビット（またはそれ以上）のレジスタ全体にわたるこのような対を１つの３２ビットアキュムレータに累算する命令の例を考えると、多数の個別の結果（この中の１２８ビットの事例では１６個であるが、レジスタの幅がより広い場合はさらに多くなる）を、命令の一部として合計する必要があるため、これは、効率的な構築に対して著しい構造的課題を呈することになる。ただし、加算をレーン内で動作するように制限することにより、この複雑さは制限され、より広いレジスタ幅への拡張が簡素化される（より広いレジスタは単純により多くのレーンを含み、レーンは独立して動作するため）。プログラマは、各レーン内で独立した計算が行われるように手配することができ、または、単一の結果が所望される場合は後で（おそらくいくつかの累算が実行された後に）単純にすべてのレーンにわたって値を加算することができるため、この機能はプログラマにとって依然として有用であることに留意されたい。
【００１３】
本技法は、そのような命令、およびその実行をサポートするハードウェアが、多くの比較的「小さい」値が並列処理を必要とする用途で特定の適用可能性を見出し得ることを認識しており、したがって、本技法は、単一の命令に応答する演算の大きい「密度」を提供する。たとえば、１２８ビット幅のレジスタのコンテキストでは、各々において１６個の８ビット値が保持され得、３２ビットレーン幅を使用する（すなわち、各レーンについて４つの８ビットデータ要素が抽出され、１２８ビット幅が４つレーンとして取り扱われる）場合、単一の命令に応答して３２回の演算が実行されることを意味し（１６回の乗算および１６回の加算）、これは、典型的な現時点の命令よりも３〜４倍密である。実際、本技法はそのような幅に決して限定されず、さらに長いベクトルにおいて実施されるとき、それに応じて有効演算カウントが増加することに留意されたい。
【００１４】
さらに、本技法は、浮動小数点数などの一部の数値形式は厳密に言わなければ、乗算演算が実行されるとき（すなわち、演算の出力値が、そのオペランドではなくその表現により多くのビットを必要とするとき）に上述した拡大問題を有するが、それらの算術計算はハードウェアで実施するのがより複雑であるため、実施態様において、たとえば１６ビット数のみをサポートするのが一般的であることを認識している。この例を考えると、乗算結果をこれらの１６ビットにおいて適切に記述することができない場合、精度が失われる（または極端な場合はオーバーフローまたはアンダーフローになる）。浮動小数点数は１６ビット未満で定義することができるが、この効果に起因して、算術計算の実用的な価値はほとんどない。逆に、本技法はまた、整数がその特殊な事例である固定小数点形式の数値について、課題に対して本質的に３つの手法が存在することも認識している。８ビットの符号なし整数を乗算する例を考えると、ａ）答えは、最下位の８ビットに切り捨てられ（すなわち、結果が２５５を超える場合はオーバーフローする）、ｂ）答えが飽和する可能性があり（したがって、２５５を超える任意の回答は２５５に変更される。これはいくつかの特定の用途に適合し得る）、またはｃ）答えが「拡大する」ことが可能にされ得、したがって、結果全体が保持される。拡大は明らかに最も正確な手法であり、事実、いくつかの用途では、たとえば反復累算を実行する場合、有用な結果を生成する唯一の選択肢である。したがって、一般に、ストレージおよびメモリ帯域幅のコストを削減するには、整数を使用することが好ましい。ハードウェアはより単純でもあり、本技法はその効率的な実施態様をサポートする。
【００１５】
データ処理命令は、複数のレジスタにおいて出力レジスタをさらに指定することができ、乗算演算の結果を合計することは、合計の結果を出力レジスタに適用することをさらに含む。
【００１６】
事実、出力レジスタはアキュムレータレジスタであり、内積演算はアキュムレータレジスタからアキュムレータ値をロードし、乗算演算の結果とアキュムレータ値とを合計することをさらに含む、内積および累算演算であり得る。
【００１７】
内積および累算演算が実行されるいくつかの実施形態では、これは、一対の命令、すなわち、内積演算のための第１の命令、その後の累算のための第２の命令によって引き起こされ得る。したがって、上記のデータ処理命令に応答するとともに、いくつかの実施形態では、復号器回路は、さらなるデータ処理命令に応答してさらなる制御信号を生成し、データ処理命令は、複数のレジスタにおいて出力レジスタおよびアキュムレータレジスタを指定し、処理回路は、さらなる制御信号に応答して累算演算を実施し、累算演算は、アキュムレータレジスタからアキュムレータ値をロードし、出力レジスタから合計値をロードすることと、アキュムレータ値と合計値とを合計することと、合計の結果をアキュムレータレジスタに記憶することとを含む。
【００１８】
第１のソースレジスタおよび第２のソースレジスタから抽出されるデータ要素の性質ならびに実行される計算に応じて、これらのレジスタの幅は異なり得るが、いくつかの実施形態では、第１のソースレジスタの幅、第２のソースレジスタの幅、および出力レジスタの幅は等しい。同様に、アキュムレータレジスタの幅は変化し得、いくつかの実施形態では、第１のソースレジスタの幅、第２のソースレジスタの幅、出力レジスタの幅、およびアキュムレータレジスタの幅は等しい。
【００１９】
特定の構成に応じて、第１のソースレジスタまたは第２のソースレジスタから抽出されるデータ要素の相対的なサイズは、レジスタの幅によって異なり得る。これは、個々のデータ要素自体と、内積演算のために第１のソースレジスタまたは第２のソースレジスタから抽出されるすべてのデータ要素の結合サイズの両方に関して適用される。したがって、いくつかの実施形態では、第１のソースレジスタの幅は、内積演算において第１のソースレジスタから抽出されるすべてのデータ要素の結合サイズに等しい。同様に、いくつかの実施形態では、第２のソースレジスタの幅は、内積演算において第２のソースレジスタから抽出されるすべてのデータ要素の結合サイズに等しい。特に、内積演算の最終ステップは、その内積演算の一部を形成する乗算演算のすべての結果を合計することを含むことに留意されたい。したがって、たとえば、第１のソースレジスタから抽出されるすべてのデータ要素の結合サイズが第１のソースレジスタの幅に等しい実施形態では、それゆえ、これは本質的に、第１のソースレジスタの全幅にわたってデータ要素が抽出されること、および、このようにして抽出されるデータ要素のセットが、加算においてともに追加されることを意味する。
【００２０】
本技法は、第１のソースレジスタおよび第２のソースレジスタの各々から抽出される特定の数のデータ要素に決して限定されないことを理解されたい。２つのデータ要素が各レジスタから抽出される上記の論述例を明確にする目的で論じたが、多くの実施形態では、各々から抽出される３つ以上のデータ要素があってもよい。たとえば、いくつかの実施形態では、内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々から少なくとも第３のデータ要素および第４のデータ要素を抽出することと、少なくとも第３のデータ要素の対および第４のデータ要素の対をともに乗算するさらなる乗算演算を実行することと、さらなる乗算演算の結果と乗算演算の結果とを合計することとをさらに含む。
【００２１】
所与の実施態様の特定の要件に応じて、各ソースレジスタの各レジスタ内レーンから抽出されるデータ要素の結合サイズは異なり得るが、コンパクトで効率的な実施態様は、各レジスタ内レーンのサイズが、内積演算において第１のソースレジスタの各レジスタ内レーンから抽出されるすべてのデータ要素の結合サイズに等しい実施形態からもたらすことができる。同様に、各レジスタ内レーンのサイズは、内積演算において第２のソースレジスタの各レジスタ内レーンから抽出されるすべてのデータ要素の結合サイズに等しくなり得る。
【００２２】
さらに、本技法は、所与のソースレジスタから選択されるデータ要素が内積演算を受ける前に、それらのデータ要素に適用され得る１つまたは複数のデータ要素操作がある実施形態も企図することに留意されたい。一例では、このデータ要素操作は、所与のソースレジスタの内容の一部を再利用して、そのソースレジスタから抽出される複数のデータ要素を提供することという形態をとり得る。したがって、いくつかの実施形態では、データ処理命令は、繰り返されるレジスタ内レーンと、第１のソースレジスタおよび第２のソースレジスタのうちの選択されるソースレジスタを指定し、処理回路は、制御信号に応答して、選択されているソースレジスタのすべてのレーンについて、繰り返されるレジスタ内レーンの内容を再利用する。言い換えれば、このような例では、１つのレーンの内容をコピーして、内積演算の目的で複数のレーンの内容を提供することができる。
【００２３】
上記の論述から明らかなように、レジスタ幅、レジスタ内レーン幅、および抽出されるデータ要素幅の広範囲の変形が考えられる。いくつかの特定の実施形態では、たとえば、複数のレジスタ内レーンは３２ビット幅を有し、抽出は、第１のソースレジスタおよび第２のソースレジスタの各レジスタ内レーンから４つの８ビットデータ要素を抽出することを含む。いくつかの他の特定の実施形態では、たとえば、複数のレジスタ内レーンは６４ビット幅を有し、抽出は、第１のソースレジスタおよび第２のソースレジスタの各レジスタ内レーンから４つの１６ビットデータ要素を抽出することを含む。
【００２４】
第１のソースレジスタおよび第２のソースレジスタ内に保持されるデータ値の性質は異なり得、その結果、実行される乗算および加算の性質も異なり得る。いくつかの実施形態では、乗算演算および加算は整数演算である。いくつかの実施形態では、第１のソースレジスタおよび第２のソースレジスタ内に保持される値は符号付きの値である。いくつかの実施形態では、第１のソースレジスタおよび第２のソースレジスタ内に保持される値は符号なしの値である。いくつかの実施形態では、乗算演算および加算は浮動小数点演算である。いくつかの実施形態では、複数のレジスタ内レーンは３２ビット幅を有し、抽出は、第１のソースレジスタおよび第２のソースレジスタの各レジスタ内レーンから２つの１６ビット浮動小数点データ要素を抽出することを含む。いくつかの実施形態では、複数のレジスタ内レーンは６４ビット幅を有し、抽出は、第１のソースレジスタおよび第２のソースレジスタの各レジスタ内レーンから２つの３２ビット浮動小数点データ要素を抽出することを含む。
【００２５】
本明細書で説明する少なくとも１つの例示的な実施形態は、データ処理装置を動作させる方法であって、データ処理命令に応答して制御信号を生成することであり、データ処理命令は、複数のレジスタにおいて、第１のソースレジスタおよび第２のソースレジスタを指定する、生成することと、制御信号に応答して、内積演算を実行することとを含み、内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第１のソースレジスタおよび第２のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算は、各レジスタ内レーン内で独立に実行される、方法を提供する。
【００２６】
本明細書で説明する少なくとも１つの例示的な実施形態は、少なくとも１つのデータ処理命令を含むプログラムを非一時的に記憶するコンピュータ可読記憶媒体であって、データ処理命令は、データ処理装置によって実行されると、データ処理命令に応答して制御信号を生成することであり、データ処理命令は、データ処理装置のレジスタ記憶回路内の第１のソースレジスタおよび第２のソースレジスタを指定する、生成することと、制御信号に応答して、内積演算を実行することとが行われるようにし、内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第１のソースレジスタおよび第２のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算は、各レジスタ内レーン内で独立に実行される、コンピュータ可読記憶媒体を提供する。
【００２７】
本明細書で説明する少なくとも１つの例示的な実施形態は、データ処理装置であって、複数のレジスタ内にデータ要素を記憶するための手段と、制御信号を生成するためのデータ処理命令を復号するための手段であり、データ処理命令は、複数のレジスタ内で、第１のソースレジスタおよび第２のソースレジスタを指定する、復号するための手段と、制御信号に応答して、内積演算を実行するための手段とを備え、内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々から少なくとも第１のデータ要素および第２のデータ要素を抽出することと、少なくとも第１のデータ要素の対と第２のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第１のソースレジスタおよび第２のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算および累算演算は、各レジスタ内レーン内で独立に実行される、データ処理装置を提供する。
【００２８】
本明細書で説明する少なくとも１つの例示的な実施形態は、データ処理装置上で実行されるコンピュータプログラムによって提供される仮想機械を提供し、上記仮想機械は、上述のデータ処理装置の１つに対応する命令実行環境を提供する。
【００２９】
次に、いくつかの特定の実施形態について、図面を参照して説明する。
【００３０】
図１は、本技法のさまざまな例を具現化することができるデータ処理装置を概略的に示す。データ処理装置は、当該装置が実行する一連の命令に応答してデータ項目に対してデータ処理動作を実行する処理回路１２を備える。これらの命令は、データ処理装置がアクセスするメモリ１４から取り出され、当業者が精通している方法で、この目的のためにフェッチ回路１６が提供される。フェッチ回路１６によって取り出されるさらなる命令は、復号回路１８に渡され、復号回路は、処理回路１２の構成および動作のさまざまな態様を制御するように設定されている制御信号を生成する。レジスタ２０のセットおよびロード／ストアユニット２２も示されている。当業者は、図１が表す一般的な構成に精通しており、簡潔にするためだけに、そのさらなる詳細な説明はここでは省略される。図１に示す実施形態におけるレジスタ２０は、整数の倍数２４およびデータグループ２５のサイズのうちの一方または両方のための記憶装置を含むことができ、その使用については、いくつかの特定の実施形態を参照して以下により詳細に説明する。命令の実行において処理回路１２によって必要とされるデータ、およびそれらのデータ処理命令の結果として生成されるデータ値は、ロード／ストアユニット２２によってメモリ１４に書き込まれ、メモリ１４から読み出される。また、一般に、図１のメモリ１４は、処理回路がその後実行する、典型的には所定の命令シーケンス（「プログラム」）の一部としての、本技法の命令を記憶することができるコンピュータ可読記憶媒体の一例として見ることができることに留意されたい。ただし、処理回路は、ＲＡＭ内、ＲＯＭ内、ネットワークインターフェースを介するなど、さまざまなソースからこのようなプログラムにアクセスすることができる。本開示は、処理回路１２が実行することができるさまざまな新規命令を説明し、添付の図面は、これらの命令の性質、これらの命令の実行をサポートするためのデータ処理回路の変形形態などについてさらに説明する。
【００３１】
図２は、データ準備命令３２の使用を概略的に示す。データ準備命令３２は、オペコード部分３４（それをデータ準備命令として定義する）、レジスタ指定子３６、およびメモリ位置指定子３８を含む。この実施形態のデータ処理装置によるこの命令の実行により、メモリ３０（指定されたメモリ位置によって参照され、たとえば、規定されているデータに応じて２つ以上のアドレスにおよぶ）に記憶され、（この例示された実施形態では）２つのデータ要素ｂ０およびｂ１（図では４２および４４とラベル付けされている）を含む、データグループ４０が識別される。さらに、命令の実行により、このデータグループ４０は指定されたレジスタにコピーされ、さらに、図２において、各々がデータ要素ｂ０およびｂ１から構成される繰り返しデータグループ４６、４８、５０、および５２によって示すように、そのレジスタの幅全体にわたって複製される。
【００３２】
図３は、図２の実施形態の変形を概略的に示しており、そのようなデータ準備命令により、種々のサイズのデータグループがコピーおよび複製され得ることを示している。図３の図解されている例では、命令６０は同じ構造を有する、すなわち、オペコード６２、レジスタ指定子６４、および指定されるメモリ位置６６を含む。命令６０の実行により、メモリ位置６６がアクセスされ、そこに記憶されるデータグループ６８（すなわち、たとえば、そのメモリ位置で始まり、所定数のデータ要素にわたって延伸する）は、データ要素ｃ０、ｃ１、ｃ２、およびｃ３を含む（図では７０、７２、７４、および７６とラベル付けされている）。このデータグループ６８は、目標レジスタの幅全体にわたってコピーおよび複製され、このデータグループ７８、８０、８２、および８４の繰り返しコピーによって示される。図１に戻って参照すると、データグループサイズは、レジスタ２０内の専用記憶場所２５に保持されている値によってあらかじめ定義することができることに留意されたい。最後に、図２および図３の例は、いかなる特定のデータグループの幅または複製回数にも限定されないことを理解されたい。ただし、現在のコンテキストで有用である１つのみの例を説明すると、複製は１２８ビットの幅にわたって行われ得る。英国ケンブリッジのＡＲＭ（登録商標）Ｌｉｍｉｔｅｄが提供するＳｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ（ＳＶＥ）のコンテキストでは、この幅はＳＶＥベクトルグラニュールサイズに対応している。同じくＡＲＭ（登録商標）Ｌｉｍｉｔｅｄが提供するＡＳＭＩＤ命令のコンテキストでは、これはＡＳＩＭＤレジスタのサイズに対応する。したがって、本技法は、以下のグループタイプ、すなわち、２つの６４ビットデータ要素、４つの３２ビットデータ要素、８つの１６ビットデータ要素、または１６個の８ビットデータ要素のロードおよび複製を可能にする。
【００３３】
図４Ａは、例示的なデータ処理命令を概略的に示し、図４Ｂは、一実施形態におけるそのデータ処理命令の実行の実施態様を示す。このデータ処理命令は、オペコード１０２、第１のレジスタ指定子１０４、第２のレジスタ指定子１０６、インデックス指定子１０８、および任意選択の変形形態として結果レジスタ指定子１１０を含む。図４Ｂは、この命令の実行により、レジスタＡおよびレジスタＢ内のデータグループがアクセスされることを示し、レジスタＡ内の各データグループのすべてのデータ要素、すなわち、この例では、第１のデータグループ１１２内のデータ要素ａ０およびａ１、ならびに、第２のデータグループ１１４内のデータ要素ａ２およびａ３がアクセスされ、一方、レジスタＢ内では、データグループ１１６および１１８の各々において、選択されるデータ要素、すなわちデータ要素ｂ１のみがアクセスされる。このようにアクセスされるこれらのデータ要素は、図４Ｂにおいて、レジスタＢから取得されるデータ要素およびレジスタＡから取得されるデータグループに対してデータ処理演算を適用する演算ユニット１２０、１２２、１２４、１２６によって表される、処理回路の演算回路に渡される。上記のように、命令１００は（識別子１１０によって）結果レジスタを指定することができ、これらの演算の結果は結果レジスタ１２８のそれぞれのデータ要素に書き込まれる。実際、いくつかの実施形態では、結果レジスタ１２８およびレジスタＡは１つの同じレジスタであってもよく、たとえば、そのレジスタの内容に関して積和演算を実行することができる（図４に破線の矢印によって概略的に示されているように）。また、図４Ｂに示されているレジスタは、例示的な命令によってアクセスされる部分を越えて（両側において）潜在的に延伸するように意図的に図解されていることに留意されたい。これは、いくつかの実施態様（上記のＳｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ（ＳＶＥ）など）においてベクトルサイズが指定されない場合があるという事実に対応している。たとえば、例としてＳＶＥの例の２つの６４ビットデータ要素（ｂ０およびｂ１）のグループに対する命令の動作を示す図４Ｂを例にとると、宛先のベクトルサイズは（１２８ビット刻みの増分で）１２８ビットから２０４８ビットまでのいずれかになり得る。
【００３４】
図４Ｂに示される例は、レジスタＢの内容から使用されている選択される（繰り返される）データ要素の特定の例を示しているが、一般に、レジスタＢ内の任意のデータ要素が、演算ユニット１２０〜１２６のいずれかの入力として使用されるようにする機能を有する、多目的で柔軟なデータ処理装置が提供されることが明らかに好ましい。図５Ａおよび５Ｂは、これを達成することができる２つの方法を概略的に示している。図５Ａは、たとえば、演算ユニット１４０、１４２、１４４、および１４６のセット（たとえば、融合乗加算ユニットであってもよい）に接続されたレジスタにそれぞれのデータ要素を記憶することができる記憶構成要素１３０、１３２、１３４、および１３６のセットを示す。記憶ユニット１３０〜１３６と機能ユニット１４０〜１４６との間の接続は、図５Ａにおいて、直接であるものとして、また、マルチプレクサ１４８を介して仲介されるものとして示されている。したがって、この構成は、個々の記憶ユニット１３０〜１３６のいずれかの内容が、それぞれの機能ユニットへの第１の入力として、機能ユニット１４０〜１４６のいずれかに提供され得、記憶ユニット１３０〜１３６の内容が、機能ユニット１４０〜１４６の第２の入力としてそれぞれ提供され得ることを可能にする。機能ユニット１４０〜１４６によって実行された処理の結果は、記憶ユニット１５０〜１５６に転送され、記憶ユニット１５０〜１５６は、たとえば、それぞれのデータ要素をレジスタに記憶することができる。マルチプレクサ１４８および機能ユニット１４０〜１４６の各々は、上述の入力の柔軟な選択を可能にするために、図解されている制御信号によって制御される。
【００３５】
図５Ｂは、各記憶ユニット１６０、１６２、１６４、および１６６が機能ユニット１７０、１７２、１７４、および１７６の各々に直接接続され、これらの機能ユニットの各々がそれぞれの制御信号によって制御され、その結果がそれぞれの記憶ユニット１８０、１８２、１８４、および１８６に渡される、図５Ａの構成に対する代替的な構成を概略的に示す。図５Ｂによって取られる手法は、たとえば、図５Ｂの例のマルチプレクサ１４８を使用する必要性、およびそれに関連する遅延を回避するが、より複雑な配線が必要となるという代償を払う。したがって、図５Ａと図５Ｂの例は両方とも、特に関連するデータ要素の数が増えた場合に、入力記憶ユニット、演算ユニット、および出力記憶ユニットの完全に柔軟で設定可能なセットを実施しようとするときに生じ得る複雑さを示している。たとえば、図５Ａの例を使用して、入力記憶ユニット、演算ユニット、および出力記憶ユニットの数を各々８倍にすると、８倍の入力マルチプレクサが必要になる。一方、図５Ｂの手法をとるこのような８倍幅の実施態様では、各入力記憶ユニットから各演算ユニットへの８つの経路、すなわち合計６４パスが必要になるとともに、各演算ユニットが、８つの異なる入力を受信し、それらの間で選択することが可能である必要がある。したがって、レジスタ幅にわたってデータ部分（たとえばデータグループ）を再利用する本技法の実施形態がとる手法により、必要な制御ユニットへの入力の多様性および複雑性に制限を課すことが可能になることが理解されよう。さらに、上記のＳＶＥ／ＡＳＩＭＤのコンテキストにおいて、図４Ａのグループ化された要素×ベクトル命令は、同等の通常のベクトル演算と比較して余分なレイテンシなしで、単一のマイクロ操作として実施可能であると期待することができることに留意されたい。これは、選択および複製がＳＶＥベクトルグラニュール内に留まり、ＡＳＩＭＤにはすでに１２８ビット内で（たとえば、「ＦＭＬＡ（要素ごと）」命令を使用して）これを実行するメカニズムがあるためである。そのため、図４Ａに示す命令は、通常のベクトル演算が後に続く一連の個別の複製（ＤＵＰ）命令よりも効率的であると期待することができる。
【００３６】
図６Ａおよび６Ｂは、図４Ａおよび４Ｂを参照して例を議論したデータ処理命令の２つのさらなる例を概略的に示している。図６Ａの例では、命令２００は、オペコード２０２、第１のレジスタ指定子２０４、第２のレジスタ指定子２０６、即時インデックス値２０８、および結果レジスタ指定子２１０を含む。図６Ａの下部は、この命令２００の実行を概略的に示しており、レジスタＢの繰り返し下位部分（データグループ）内の指定されたデータ要素（インデックス１）が選択され、このデータ要素に、レジスタＡのそれぞれのデータグループによって表されるベクトルが乗算されて、結果レジスタの内容にデータ投入するそれぞれの結果データグループが生成される。図６Ａでは、それぞれのデータ要素とデータグループとの間で実行される演算は、一般的な演算記号によって示されており、これは、上記の例では乗算であるが、他の演算も可能であり、企図されることを示している。
【００３７】
本技法は、１つのベクトルのみを指定するそのようなデータ処理命令に限定されず、図６Ｂは、オペコード２２２、第１のレジスタ指定子２２４、第２のレジスタ指定子２２６、第３のレジスタ指定子２２８およびインデックス指定子２３０を含むデータ処理命令２２０が提供される例を示す。図６Ｂの下部は、図６Ａに示した方法と同様の方法で、第１のレジスタ（Ｂ）の選択されるデータ要素（ｂ１）が、レジスタＡおよびＣから取得したデータグループ（ベクトル）と組み合わされ、結果値が生成される方法を示している。単に変形形態を説明する目的のために、図６Ｂの例の結果レジスタは命令２２０において指定されず、むしろデフォルトの（所定の）結果レジスタがこの目的のために一時的に使用される。さらに、構成要素の組み合わせが一般的な演算子記号
【数１】
2020508513.tif 000003
によって図６Ｂに再び示されているが、実行されている特定の命令に応じてこの演算はさまざまな形をとることができ、これは事実、乗算演算であってもよいが、任意の他の任意のタイプの算術演算（加算、減算など）であってもよく、または論理演算（ＡＤＤ、ＸＯＲなど）にすることもできることを再度理解されたい。
【００３８】
図７Ａは、別の例示的なデータ処理命令を概略的に示し、図７Ｂは、一実施形態におけるそのデータ処理命令の実行の実施態様を示す。このデータ処理命令は、複合数の要素×ベクトル演算をサポートするために提供され、ここではＦＣＭＬＡ（融合複合積和）命令と呼ばれる。図７Ａに示すように、例示的なＦＣＭＬＡ命令２２０は、オペコード２２２、回転指定子２２４、第１のレジスタ（Ａ）指定子２２６、第２のレジスタ（Ｂ）指定子２２８、インデックス指定子２３０、および累算レジスタ指定子２３２を含む。図７Ｂは、この命令の実行により、レジスタＡおよびレジスタＢのデータグループがアクセスされることを示しており、この命令内のデータグループは、複数の複合要素を定義する。複合要素は、要素の対によって表される（図７Ｂのラベル「複合対」を参照）。図７Ｂの例では、レジスタＢの複合対は（ｂ３、ｂ２）および（ｂ１、ｂ０）であり、複合対（ｂ３、ｂ２）が選択されている。レジスタＡの複合対は、（ａ７、ａ６）、（ａ５、ａ４）、（ａ３、ａ２）、および（ａ１、ａ０）である。レジスタＡおよびＢから選択される複合対（レジスタＡからのすべての複合対、および、インデックス２３０によって識別されるレジスタＢのデータグループからの選択される複合対）は、複合融合積和（ＣＦＭＡ）ユニット２３４、２３６、２３８、２４０に渡され、ここで、レジスタＡからの各複合対はそれぞれＣＦＭＡユニットへの１つの入力を形成し、一方、レジスタＢ内の１つのデータグループからの選択される複合対は、ＣＦＭＡユニット２３４および２３６への別の入力を形成し、レジスタＢ内の次のデータグループからの他の選択される複合対は、ＣＦＭＡユニット２３８および２４０への別の入力を形成する。複合融合積和演算のそれぞれの結果は、指定されている累算レジスタ内にそれぞれの複合対として累算され、これらは各々、それぞれのＣＦＭＡユニットの各々への第３の入力を形成する。回転パラメーター２２４（任意選択的に命令内で指定される）は、次のように演算を変更する２ビット制御値である（第１の対のみを示す、（ｃ１、ｃ０）は演算前のアキュムレータ値である）。
【表１】
2020508513.tif 000004
【００３９】
図８は、一実施形態の方法に従って行われる一連のステップを示す。フローはステップ２５０において始まり、データロード（準備）命令が復号され、ステップ２６０において対応する制御信号が生成される。次いで、これらの制御信号は、ステップ２７０において、命令指定位置（この例についてはたとえば図２および３を参照）からの、制御レジスタ指定サイズを有する、指定されたデータグループが、メモリからロードされるようにする。次いで、制御信号はさらに、ステップ２８０において、ロードされたデータグループが、指定された目標レジスタ（データロード（準備）命令において指定されている）のベクトル幅にわたって複製されるようにする。その後、データロード命令の実行が完了する。フローはステップ２９０に進み、要素×ベクトルデータ処理命令が復号される。次に、対応する制御信号がステップ３００において生成され、続いてステップ３１０において、要素×ベクトル命令によって指定される演算が、命令において指定される第１のレジスタ内の各データグループ内のインデックス付き要素と、命令において指定される第２のレジスタの各データグループ内の各データ要素との間で実行される。
【００４０】
図９Ａは、本技法による異なるデータ処理命令の実行を概略的に示す。図９Ｂは、そのような命令の２つの例を示し、第１の命令３２０は、オペコード３２２、第１のレジスタ指定子３２４、第２のレジスタ指定子３２６、および（任意選択的に）出力レジスタ指定子３２８を含む。図９Ｂに示される第２の例示的なデータ処理命令３３０は、オペコード３３２、出力レジスタ指定子３３４、およびアキュムレータレジスタ指定子３３６を含む。これらについては、図９Ａを参照して説明する。データ処理命令によって指定される第１のソースレジスタおよび第２のソースレジスタが図９Ａの上部に示されており、各レジスタは、レーンにグループ化されたデータ要素部分に細分化されている。データ処理命令に応答して、データ処理装置（すなわち、復号器回路によって生成される制御信号の制御下にある処理回路）は、第１のソースレジスタおよび第２のソースレジスタの各々からデータ要素のセットを取り出す。図９Ａに示す例では、４つのデータ要素から成るセットが、第１のソースレジスタおよび第２のソースレジスタの各レーンから取り出される。これらは、乗算演算を実行するように設定されている演算ユニット３４０、３４２、３４４、および３４６においてともに対にされる。これらの乗算演算の結果は、加算ユニット３４８においてまとめられ、最終的に、こうして生成された結果値は、出力レジスタの対応するレーンに書き込まれる。言い換えれば、「内積」演算が実行される。図９Ａのレーンのラベル付けは、４つの乗算ユニット３４０〜３４６および加算ユニット３４８が、データ処理装置の処理回路に設けられたそのようなユニットの１つのセットのみを表し、これらが、データ処理装置が各レジスタについて処理することができるレーンの各々に一致するように対応して繰り返されるという事実を示す。各レジスタのレーンの数は、データ要素の相対幅、各レーンのデータ要素の数、および利用可能なレジスタ幅に応じてレーンの数を自由に規定することができるという事実に対応して、図９Ａにおいては意図的に、明示されていない。したがって、命令はアキュムレータ幅での同じ幅の演算と同様に挙動することが分かる（たとえば、３２ビット幅のレーン内の８ビット値（整数など）の例では、３２ビット整数演算と同様に挙動する）。ただし、各レーン内で、３２×３２乗算が実行される代わりに、３２ビットのソースレーンが、４つの個別の８ビット値から構成されていると見なされ、これら２つの「ミニベクトル」にわたって内積演算が実行される。結果は、その後、アキュムレータ値から対応する３２ビットレーンに累算される。この図は、単一の３２ビットレーン内の演算のみを明示的に示していることが理解される。１２８ビットのベクトル長の１つの例を挙げると、命令は実効的に、３２回の演算（１６回の乗算および１６回の加算）を実行し、これは、同等の現在の命令よりも３〜４倍密である。英国ケンブリッジのＡＲＭ（登録商標）Ｌｉｍｉｔｅｄが提供するＳｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ（ＳＶＥ）など、より長いベクトルを許容するアーキテクチャへと実施される場合、これらのより長いベクトルはそれに応じて実行演算カウントを増やす。さらに、３２ビットのレーン幅の特定の例が示されているが、たとえば、１６ビット×１６ビット−＞６４ビットまたは１６ビット×１６ビット−＞３２ビットなど、多くの異なる幅の組み合わせ（入力および出力の両方）が可能であることを理解されたい。「要素ごと」形式（たとえば、オペランドの１つに対して単一の３２ビットレーンが複製される）も提案される。図９Ａの出力レジスタと第２のレジスタを結ぶ破線の矢印は、第２のレジスタが実際には出力レジスタであり得、このレジスタの内容に関する累算演算が実施されることが可能であることを示している。図９Ｂの考察に戻ると、２つの個別の命令がここに示されていることに留意されたい。一般に、第１の示されている命令が、図９Ａに示されたすべての演算を実行されるようにすることができるが、図９Ｂの第１の示されている命令が、乗算および加算演算が実行されるようにするに過ぎず、出力レジスタ内の結果を取得し、それをアキュムレータレジスタに適用する後続の累算演算が、そのタスク専用の第２の示されている命令によって実行され得る実施形態も提供される。
【００４１】
図１０は、図９Ｂに示すデータ処理命令の実行の実施形態におけるいくつかの変形形態を概略的に示す。ここでは、図解を明確にするためだけに、２つのソースレジスタ３５０および３５２の各々においてアクセスされるデータ要素の数は２つに減らされている。同様に、２つの乗算ユニット３５４および３５６のみが（各レーンに対して）提供され、１つの加算ユニット３５８が（各レーンに対して）提供される。実行される特定のデータ処理命令に応じて、「内積」演算の結果は、指定された出力レジスタ３６０（指定されている場合）に書き込まれ得るか、または代替的に、累算レジスタ３６２（そのように指定されている場合）に書き込まれてもよい。累算レジスタが規定されている後者の事例では、この累算レジスタの内容は、加算ユニット３５８への追加の入力として取得され得、結果、進行中の累算が実行され得る。
【００４２】
図１１は、２つの１２８ビットレジスタ３８０および３８２が上述の「内積」データ処理演算命令のうちの１つのソースレジスタである、より複雑な例を概略的に示している。これらのソースレジスタ３８０および３８２の各々は、４つの独立したレーン（レーン０〜３）に関して処理され、これらのレーンのそれぞれの内容は一時記憶バッファ３８４〜３９８に取り込まれ、結果、２つのソースからの同じレーンのそれぞれの内容が、隣接する記憶バッファに持ち込まれる。各記憶バッファ内で、内容データ要素（この例では各々の中に４つのデータ要素）は、その後、各レーン４００、４０２、４０４、４０６に提供される４つの乗算ユニットから成るセットにそれぞれの入力を提供する。これらの出力は、その後、それぞれの加算ユニット４０８、４１０、４１２、および４１４に供給され、これらの加算ユニットのそれぞれの出力は、累算レジスタ４１６のそれぞれの対応するレーン内に渡される。累算レジスタ４１６のそれぞれのレーンは、加算ユニット（アキュムレータ）４０８〜４１４への第２のタイプの入力を提供する。図１２は、図１１と同じ基本構成を示しており、実際、同じ部分構成要素は同じ参照番号で表されており、ここでは再度説明しない。図１２と図１１との間の差は、１２８ビットレジスタ３８０（ソースレジスタ）の４つのレーンの各々の内容が使用されるのに対し、第２の１２８ビットソースレジスタ３８２からの第１のレーン内容のみが使用され、この内容が、一時記憶ユニット３８６、３９０、３９４、および３９８の各々に複製されることである。この例では、ソースレジスタ３８２からの内容を提供する（唯一の）レーンとして選択されるこのレーンは、命令によって指定される。この例示的な図解のために選択されているこの特定のレーン（レーン０）に関連する重要性はなく、ソースレジスタ３８２の他のレーンのいずれも同様に十分に指定され得ることが理解されよう。選択されるレーンの指定は、たとえば図４Ａの例示的な命令に示すように、命令内のインデックス値の設定によって実行される。
【００４３】
図１１および図１２に示されている例のさらなる変形を図１３に示す。ここでも、同じ参照番号が与えられた同じ部分構成要素がここで再利用されており、簡潔にするために再び説明されない。図１１および図１２の例に関して図１３に示す差は、ソースレジスタ３８０および３８２の各々の４つのレーン自体が２つのデータグループ（本明細書においては「チャンク」としても参照され、図面においてはチャンク０およびチャンク１とラベル付けされている）において処理される。これは、レジスタ３８０の内容が処理される方法に影響を与えず、その４つのレーンの内容は、前出のように一時記憶ユニット３８４、３８８、３９２および３９６に転送される。ただし、図１２の例で紹介した単一レーン内容の抽出および複製は、ここではデータグループごとに（「チャンクごと」に）実行され、結果、レジスタ３８２のレーン０の内容は複製されて、一時記憶バッファ３９４および３９８に転送される、一方、チャンク１のレーン２の内容は複製されて、一時記憶バッファ３８６および３９０に転送される。図１３に示された動作は、より一般的に示された図４Ｂの特定の例であると考えることができ、４つの処理ユニット１２０〜１２６によって実行されるその図の「演算」は、説明されている内積演算を含むことに留意されたい。ここでも、この図解されている例において選択される特定のレーン（各チャンクの「最初の」レーンとしてのレーン２および０）に関連する重要性はなく、これらは、たとえば図４Ａの例示的な命令に示されているように、命令内のインデックス値の設定によって指定されていることが理解されよう。最後に、ソースレジスタの内容を適切に準備するために、図１３に示すデータ処理命令の実行に先行して、図２および３に示し、上記で説明したようなデータ準備命令が実行されることが有用であり得ることに留意されたい。
【００４４】
図１４は、図９Ａ〜図１３を参照して上述したような内積演算を実行するためにデータ処理命令を実行するときに一実施形態の方法に従って行われる一連のステップを示す。フローはステップ４３０において始まり、命令が復号され、ステップ４４０において対応する制御信号が生成される。次に、ステップ４５０において、複数のデータ要素が、レーンごとに命令において指定される第１のソースレジスタおよび第２のソースレジスタから抽出され、ステップ４６０において、第１のソースレジスタおよび第２のソースレジスタからのデータ要素のそれぞれの対が、内積演算の最初の部分を実行するために各レーン内でともに乗算される。次に、ステップ４７０において、それぞれの乗算器演算の結果が、ここでもレーンごとに加算され、（この例では）同じく命令において指定される入力アキュムレータレジスタから取り出されているアキュムレータ値に加算される。
【００４５】
図１５Ａは、いくつかの実施形態によって提供されるデータ処理命令の実行を概略的に示す。図１５Ｂは、対応する例示的な命令を示している。この例示的な命令５００は、オペコード５０２、第１のソースレジスタ指定子５０４、第２のソースレジスタ指定子５０６、および累算レジスタ指定子のセット５０８を含む。図１５Ａの例で実施される第１のソースレジスタ５１０および第２のソースレジスタ５１２は、図の上部に示されており、これらのレジスタから、データ処理命令の実行に応答してデータ要素が抽出される。すべて（４つ）のデータ要素は、第１のソースレジスタ５１０から個別に抽出され、一方、第２のソースレジスタ５１２の全内容を構成する４つのデータ要素はブロックとして抽出される。第２のソースレジスタ５１２の内容は、４つの演算ユニット、すなわち、融合乗加算（ＦＭＡ）ユニット５１４、５１６、５１８、および５２０の各々に渡される。第１のソースレジスタ５１０から抽出される４つのデータ要素の各々は、ＦＭＡユニット５１４〜５２０のそれぞれに渡される。図示されるように、ＦＭＡユニット５１４および５２０の各々は、それぞれの制御信号によって制御される。したがって、図１５Ａの例におけるデータ処理命令の実行により、データ処理回路（４つのＦＭＡユニットによって表される）が４回のベクトル×要素積和演算を同時に実行する。本技法は４の多重度に限定されないが、これは、そのような現在の処理装置において典型的に利用可能な負荷対計算比に良好に一致することが見出されていることに留意すべきである。ＦＭＡユニットの出力は、命令において指定される累算レジスタのセットのそれぞれのレジスタに適用される（図１５Ｂの項目５０８を参照）。さらに、これらの４つの累算レジスタ５２２、５２４、５２６、および５２８の内容は、ＦＭＡユニット５１４〜５２０のそれぞれへの別の入力を形成し、結果、これらのレジスタの各々の内容に対して累算が実行される。
【００４６】
図１６は、単純な行列乗算の例を表す、図１５Ａの例の例示的な視覚化例を示し、対象行列Ａと対象行列Ｂとを互いに乗算されて結果行列Ｃが生成されることになる。この準備において、行列Ａの列（網掛け）はレジスタｖ０にロードされており、行列Ｂの行（網掛け）はレジスタｖ２にロードされている。結果行列Ｃの累算器は、レジスタｖ４〜ｖ７に記憶される。行列Ａからロードされた値は列として示されているが、行列は容易に転置および／またはインターリーブされ、結果、各ソース配列からの連続したベクトルロードを実行することができることに留意されたい。この文脈では、行列乗算はＯ（ｎ３）演算であり、したがって、処理のために行列データを準備する補助タスクはＯ（ｎ２）演算であり、したがって、ｎが十分に大きい場合の負荷は無視できることに留意されたい。示されている例に対応する命令は、ＦＭＡ４  ｖ４−ｖ７、ｖ２、ｖ０［０−３］として表すことができる。ここで、ＦＭＡ４はこの命令のラベル（または同等にオペコード）を表し、ｖ４−ｖ７は累算レジスタのセットであり、ｖ２は全内容が取得されるソースレジスタであり、ｖ０はる（０〜３とインデックス付けされている）データ要素のセットが取得されるソースレジスタであ。この命令を実行すると、以下の４つの演算がもたらされる。
ｖ４＋＝ｖ２＊ｖ０［０］、
ｖ５＋＝ｖ２＊ｖ０［１］、
ｖ６＋＝ｖ２＊ｖ０［２］、および
ｖ７＋＝ｖ２＊ｖ０［３］。
【００４７】
図１７は、図１５Ａに示されている例のより単純なバージョンを表し、この例では、第１のソースレジスタ５４０および第２のソースレジスタ５４２の各々から２つのデータ要素のみが導出される。レジスタ５４２から抽出される両方のデータ要素は、ＦＭＡユニット５４４および５４６の各々に渡され、一方、レジスタ５４０からの第１のデータ要素はＦＭＡユニット５４４に渡され、第２のデータ要素はＦＭＡユニット５４６に渡される。累算レジスタ５４８および５５０の内容は、それぞれのＦＭＡユニットの各々にさらなる入力を提供し、累算結果は各それぞれの累算レジスタに適用される。逆に、図１８は、各ソースレジスタからより多くのデータ要素が抽出される例を示しており、これらのデータ要素（この例では８つ）は、各ソースレジスタ５６０および５６２から抽出される。レジスタ５６２の全内容は、ＦＭＡユニット５６４〜５７８の各々に提供され、一方、レジスタ５６０から選択されるそれぞれのデータ要素は、他の入力として提供される。積和演算の結果は、それぞれの累算レジスタ５８０〜５９４内に累積される。
【００４８】
図１９は、１つの例において実施される、いくつかの特定の乗算演算のさらなる詳細を与える例を示す。ここで、２つのソースレジスタｖ０およびｖ２は各々、２つの個別のデータグループ内で処理される。レジスタｖ０の２つのデータグループは、選択されるデータ要素が複製されるレジスタの部分も表す。図１９の例では、これは各部分の「最初の」データ要素、すなわち、それぞれ要素［０］および［４］である。選択されるデータ要素は、インデックスを使用して命令において指定することができる。したがって、図１９に示すデータ操作の最初のステップにおいて、レジスタｖ０のこれら２つのデータグループのデータ要素が、示されているように各部分の幅にわたって複製される。その後、これらは入力を４つの乗算器６００、６０２、６０４、および６０６に提供し、一方、他の入力はレジスタｖ２の内容によって提供される。次に、ｖ２のそれぞれのデータ要素とｖ０のそれぞれのデータ要素との乗算が実行され、結果が目標レジスタｖ４〜ｖ７に適用され、２つのデータグループへの細分化は、各累算レジスタの各データグループについてラベル付けされた特定の計算によって示すように、これらの４つの累算レジスタへと維持される。ソースレジスタの内容を適切に準備するために、図１９に示すデータ処理命令の実行に先行して、図２および３に示し、上記で説明したようなデータ準備命令が実行されることが有用であり得ることに留意されたい。
【００４９】
図２０は、２つのソースレジスタ６２０および６２２の内容が２つの独立したレーン（レーン０およびレーン１）内にデータ要素を含むものとして扱われる例を示す。各レーン内で２つの下位部分が定義され、内容のこの「レーニング（ｌａｎｉｎｇ）」が計算全体を通じて、すなわちＦＭＡユニット６２４、６２６、６２８、および６３０を通じて、かつ最終的には累算レジスタ６３２および６３４へと維持される。
【００５０】
図２１は、図１５Ａ〜図２０の例に関して説明したようなデータ処理命令を処理するときに一実施形態の方法に従って行われる一連のステップを示す。フローはステップ６５０において始まり、データ処理命令が復号され、ステップ６５２において対応する制御信号が生成される。次に、ステップ６５４において、データ処理命令において指定される第１のソースレジスタからＮ個のデータ要素が抽出され、ステップ６５６において、データ処理命令において指定される第２のソースレジスタの内容によって、Ｎ個のデータ要素が乗算される。次に、ステップ６５８において、これらの乗算演算のＮ個の結果値が、データ処理命令において指定されるＮ個のそれぞれの累算レジスタの内容に適用される。上記の説明に照らして、ソースレジスタの内容を適切に準備するために、図２１に関して説明した命令の実行、および同等に図１４に関して説明した命令の実行に先行して、図２および３に示し、上記で説明したようなデータ準備命令が実行されることが有益であり得ることが理解されよう。
【００５１】
図２２は、使用することができる仮想機械実施態様を示す。上述の実施形態は、一般に、関連技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本技法を実施するが、ハードウェア装置のいわゆる仮想機械実施態様を提供することも可能である。これらの仮想機械実施態様は、一般的に仮想マシンプログラム７１０をサポートするホストオペレーティングシステム７２０を実行するホストプロセッサ７３０上で実行される。これには、妥当な速度で実行する仮想機械実施態様をサポートするために、より強力なプロセッサが提供される必要があり得るが、そのような手法は、互換性または再利用の理由のために別のプロセッサに対してネイティブなコードを実行したいという要望がある場合などの特定の状況において正当化され得る。仮想マシンプログラム７１０は、仮想マシンプログラム７１０によってモデル化されているデバイスである実際のハードウェアによって提供されるアプリケーションプログラムインターフェースと同じアプリケーションプログラム７００にアプリケーションプログラムインターフェースを提供する。したがって、上述したプロセッサ状態チェック命令の１つまたは複数の例を含むプログラム命令は、仮想マシンハードウェアとの相互作用をモデル化するために、仮想マシンプログラム７１０を使用してアプリケーションプログラム７００内から実行することができる。
【００５２】
簡潔に全体を要約すると、データ処理装置、データ処理装置を動作させる方法、非一時的コンピュータ可読記憶媒体、および命令が提供される。この命令は、最初のソースレジスタおよび第２のソースレジスタを指定する。命令に応答して、処理回路に内積演算を実行させる制御信号が生成される。この演算のために、少なくとも第１データ要素と第２データ要素が、第１のソースレジスタおよび第２のソースレジスタの各々から抽出され、結果、少なくとも第１のデータ要素の対と第２のデータ要素の対とがともに乗算される。内積演算は、第１のソースレジスタおよび第２のソースレジスタの各々にまたがる複数のレジスタ内レーンの各々において独立して実行される。このように、命令ごとの演算の密度が高い拡大演算が可能になる。
【００５３】
本出願において、「〜ように構成されている」または「〜ように設定されている」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の配列または方法を意味する。たとえば、装置は、規定の動作を提供する専用のハードウェアを有することができ、またはプロセッサもしくは他の処理装置が機能を実行するようにプログラムされてもよい。「〜ように構成されている」または「〜ように設定されている」は、規定の動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
【００５４】
添付図面を参照して例示的な実施形態を詳細に説明したが、本発明はこれらの厳密な実施形態に限定されず、添付の特許請求の範囲によって規定される本発明の範囲から逸脱することなく、さまざまな変更、追加および修正が当業者によって実施され得ることが理解されるべきである。たとえば、従属請求項の特徴のさまざまな組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴によって行うことができる。
【図１】
2020508513.tif 000005
【図２】
2020508513.tif 000006
【図３】
2020508513.tif 000007
【図４Ａ】
2020508513.tif 000008
【図４Ｂ】
2020508513.tif 000009
【図５Ａ】
2020508513.tif 000010
【図５Ｂ】
2020508513.tif 000011
【図６Ａ】
2020508513.tif 000012
【図６Ｂ】
2020508513.tif 000013
【図７Ａ】
2020508513.tif 000014
【図７Ｂ】
2020508513.tif 000015
【図８】
2020508513.tif 000016
【図９Ａ】
2020508513.tif 000017
【図９Ｂ】
2020508513.tif 000018
【図１０】
2020508513.tif 000019
【図１１】
2020508513.tif 000020
【図１２】
2020508513.tif 000021
【図１３】
2020508513.tif 000022
【図１４】
2020508513.tif 000023
【図１５Ａ】
2020508513.tif 000024
【図１５Ｂ】
2020508513.tif 000025
【図１６】
2020508513.tif 000026
【図１７】
2020508513.tif 000027
【図１８】
2020508513.tif 000028
【図１９】
2020508513.tif 000029
【図２０】
2020508513.tif 000030
【図２１】
2020508513.tif 000031
【図２２】
2020508513.tif 000032
【国際調査報告】
2020508513.tif 000033
2020508513.tif 000034
2020508513.tif 000035