IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-13
(45)【発行日】2024-03-22
(54)【発明の名称】データ処理装置における拡大算術計算
(51)【国際特許分類】
   G06F 9/302 20180101AFI20240314BHJP
   G06F 17/16 20060101ALI20240314BHJP
【FI】
G06F9/302 A
G06F17/16 Z
【請求項の数】 20
(21)【出願番号】P 2019543984
(86)(22)【出願日】2018-01-26
(65)【公表番号】
(43)【公表日】2020-03-19
(86)【国際出願番号】 GB2018050229
(87)【国際公開番号】W WO2018154269
(87)【国際公開日】2018-08-30
【審査請求日】2021-01-19
【審判番号】
【審判請求日】2022-09-21
(31)【優先権主張番号】1702918.2
(32)【優先日】2017-02-23
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】マンセル、デイビッド ヘナ
【合議体】
【審判長】吉田 美彦
【審判官】林 毅
【審判官】打出 義尚
(56)【参考文献】
【文献】特開平10-63647(JP,A)
【文献】特開2015-55971(JP,A)
【文献】特開平5-324700(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F9/302
G06F17/16
(57)【特許請求の範囲】
【請求項1】
データ処理装置であって、
データ要素を記憶するための複数のレジスタを有するレジスタ記憶回路と、
データ処理命令に応答して制御信号を生成する復号器回路であり、前記データ処理命令は、前記複数のレジスタ内で、第1の複数の独立したレジスタ内レーンにグループ化される第1の複数のデータ要素に分けられる第1のソースレジスタ、第2の複数の独立したレジスタ内レーンにグループ化される第2の複数のデータ要素に分けられる第2のソースレジスタ、および前記第2の複数の独立したレジスタ内レーンのうちの繰り返されるレジスタ内レーンを指定する、復号器回路と、
前記制御信号に応答して、前記繰り返されるレジスタ内レーンと前記第1の複数の独立したレジスタ内レーンの各レジスタ内レーンとの間で内積演算を実行する処理回路と
前記第1の複数の独立したレジスタ内レーンの前記各レジスタ内レーンの前記第1の複数のデータ要素を記憶するように構成された第1の一時記憶ユニット、及び前記繰り返されるレジスタ内レーンの前記第2の複数のデータ要素を記憶するように構成された第2の一時記憶ユニット
を備え、前記内積演算は、
前記第1の一時記憶ユニットに記憶された前記各レジスタ内レーンの前記第1の複数のデータ要素の各々前記第2の一時記憶ユニットに記憶された前記繰り返されるレジスタ内レーンの前記第2の複数のデータ要素の各々との間で乗算演算を実行することと、
前記乗算演算の結果を合計することと
を含む、データ処理装置。
【請求項2】
前記データ処理命令は、前記複数のレジスタにおいて出力レジスタをさらに指定し、前記乗算演算の前記結果を合計することは、前記合計の結果を前記出力レジスタに適用することをさらに含む、請求項1に記載のデータ処理装置。
【請求項3】
前記出力レジスタはアキュムレータレジスタであり、前記結果合計することは、当該合計を前記出力レジスタに適用する前に前記アキュムレータレジスタからアキュムレータ値前記乗算演算の前記結果とを合計することをさらに含む、請求項2に記載のデータ処理装置。
【請求項4】
前記復号器回路は、さらなるデータ処理命令に応答してさらなる制御信号を生成し、前記データ処理命令は、前記複数のレジスタにおいて前記出力レジスタおよびアキュムレータレジスタを指定し、前記処理回路は、前記さらなる制御信号に応答して累算演算を実施し、前記累算演算は、
前記アキュムレータレジスタからアキュムレータ値をロードし、前記出力レジスタから合計値をロードすることと、
前記アキュムレータ値と前記合計値とを合計することと、
前記合計の結果を前記アキュムレータレジスタに記憶することと
を含む、請求項2に記載のデータ処理装置。
【請求項5】
前記第1のソースレジスタ、前記第2のソースレジスタ、および前記出力レジスタの幅が等しい、請求項2に記載のデータ処理装置。
【請求項6】
前記第1のソースレジスタ、前記第2のソースレジスタ、前記出力レジスタ、および前記アキュムレータレジスタの幅が等しい、請求項3または4に記載のデータ処理装置。
【請求項7】
前記第1のソースレジスタの幅は、前記内積演算において前記第1のソースレジスタから読み出されるすべてのデータ要素の結合サイズに等しい、請求項1から6のいずれか一項に記載のデータ処理装置。
【請求項8】
前記第2のソースレジスタの幅は、前記内積演算において前記第2のソースレジスタから読み出されるすべてのデータ要素の結合サイズに等しい、請求項1から7のいずれか一項に記載のデータ処理装置。
【請求項9】
各レジスタ内レーンのサイズは、前記内積演算において前記第1のソースレジスタの各レジスタ内レーンから読み出されるすべてのデータ要素の結合サイズに等しい、請求項1からのいずれか一項に記載のデータ処理装置。
【請求項10】
各レジスタ内レーンのサイズは、前記内積演算において前記第2のソースレジスタの各レジスタ内レーンから読み出されるすべてのデータ要素の結合サイズに等しい、請求項1からのいずれか一項に記載のデータ処理装置。
【請求項11】
前記複数のレジスタ内レーンは32ビット幅を有し、前記第1のソースレジスタおよび前記第2のソースレジスタの各レジスタ内レーンから4つの8ビットデータ要素が読み出される、請求項1から10のいずれか一項に記載のデータ処理装置。
【請求項12】
前記複数のレジスタ内レーンは64ビット幅を有し、前記第1のソースレジスタおよび前記第2のソースレジスタの各レジスタ内レーンから4つの16ビットデータ要素が読み出される、請求項1から10のいずれか一項に記載のデータ処理装置。
【請求項13】
前記乗算演算および加算は整数演算である、請求項1から12のいずれか一項に記載のデータ処理装置。
【請求項14】
前記第1のソースレジスタおよび前記第2のソースレジスタ内に保持される値は符号付き値である、請求項1から13のいずれか一項に記載のデータ処理装置。
【請求項15】
前記第1のソースレジスタおよび前記第2のソースレジスタ内に保持される値は符号なし値である、請求項1から13のいずれか一項に記載のデータ処理装置。
【請求項16】
前記乗算演算および加算は浮動小数点演算である、請求項1から12のいずれか一項に記載のデータ処理装置。
【請求項17】
データ処理装置を動作させる方法であって、
データ処理命令に応答して制御信号を生成することであり、前記データ処理命令は、複数のレジスタにおいて、第1の複数の独立したレジスタ内レーンにグループ化される第1の複数のデータ要素に分けられる第1のソースレジスタ、第2の複数の独立したレジスタ内レーンにグループ化される第2の複数のデータ要素に分けられる第2のソースレジスタ、および前記第2の複数の独立したレジスタ内レーンのうちの繰り返されるレジスタ内レーンを指定する、生成することと、
前記制御信号に応答して、前記繰り返されるレジスタ内レーンと前記第1の複数の独立したレジスタ内レーンの各レジスタ内レーンとの間で内積演算を実行することと
前記第1の複数の独立したレジスタ内レーンの前記各レジスタ内レーンの前記第1の複数のデータ要素を第1の一時記憶ユニットに記憶し、前記繰り返されるレジスタ内レーンの前記第2の複数のデータ要素を第2の一時記憶ユニットに記憶する、ことと
を含み、前記内積演算は、
前記第1の一時記憶ユニットに記憶された前記各レジスタ内レーンの前記第1の複数のデータ要素の各々前記第2の一時記憶ユニットに記憶された前記繰り返されるレジスタ内レーンの前記第2の複数のデータ要素の各々との間で乗算演算を実行することと、
前記乗算演算の結果を合計することと
を含む、
方法。
【請求項18】
少なくとも1つのデータ処理命令を含むプログラムを非一時的に記憶するコンピュータ可読記憶媒体であって、前記データ処理命令は、データ処理装置によって実行されると、
前記データ処理命令に応答して制御信号を生成することであり、前記データ処理命令は、前記データ処理装置のレジスタ記憶回路内の第1の複数の独立したレジスタ内レーンにグループ化される第1の複数のデータ要素に分けられる第1のソースレジスタ、第2の複数の独立したレジスタ内レーンにグループ化される第2の複数のデータ要素に分けられる第2のソースレジスタ、および前記第2の複数の独立したレジスタ内レーンのうちの繰り返されるレジスタ内レーンを指定する、生成することと、
前記制御信号に応答して、前記繰り返されるレジスタ内レーンと前記第1の複数の独立したレジスタ内レーンの各レジスタ内レーンとの間で内積演算を実行することと
前記第1の複数の独立したレジスタ内レーンの前記各レジスタ内レーンの前記第1の複数のデータ要素を第1の一時記憶ユニットに記憶し、前記繰り返されるレジスタ内レーンの前記第2の複数のデータ要素を第2の一時記憶ユニットに記憶する、ことと
が行われるようにし、前記内積演算は、
前記第1の一時記憶ユニットに記憶された前記各レジスタ内レーンの前記第1の複数のデータ要素の各々前記第2の一時記憶ユニットに記憶された前記繰り返されるレジスタ内レーンの前記第2の複数のデータ要素の各々との間で乗算演算を実行することと、
前記乗算演算の結果を合計することと
を含む、
コンピュータ可読記憶媒体。
【請求項19】
データ処理装置であって、
複数のレジスタ内にデータ要素を記憶するための手段と、
制御信号を生成するためのデータ処理命令を復号するための手段であり、前記データ処理命令は、前記複数のレジスタ内で、第1の複数の独立したレジスタ内レーンにグループ化される第1の複数のデータ要素に分けられる第1のソースレジスタ、第2の複数の独立したレジスタ内レーンにグループ化される第2の複数のデータ要素に分けられる第2のソースレジスタ、および前記第2の複数の独立したレジスタ内レーンのうちの繰り返されるレジスタ内レーンを指定する、復号するための手段と、
前記制御信号に応答して、前記繰り返されるレジスタ内レーンと前記第1の複数の独立したレジスタ内レーンの各レジスタ内レーンとの間で内積演算を実行するための手段と
前記第1の複数の独立したレジスタ内レーンの前記各レジスタ内レーンの前記第1の複数のデータ要素を第1の一時記憶ユニットに記憶し、前記繰り返されるレジスタ内レーンの前記第2の複数のデータ要素を第2の一時記憶ユニットに記憶する、手段と
を備え、前記内積演算は、
前記第1の一時記憶ユニットに記憶された前記各レジスタ内レーンの前記第1の複数のデータ要素の各々前記第2の一時記憶ユニットに記憶された前記繰り返されるレジスタ内レーンの前記第2の複数のデータ要素の各々との間で乗算演算を実行することと、
前記乗算演算の結果を合計することと
を含む、
データ処理装置。
【請求項20】
データ処理装置上で実行されるコンピュータプログラムによって提供される仮想機械であって、前記仮想機械は、請求項1から16、または19のいずれか一項に記載のデータ処理装置に対応する命令実行環境を提供する、仮想機械。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ処理に関する。特に、本発明は、算術演算を実行するデータ処理装置に関する。
【0002】
データ処理装置は、算術演算を実行する必要がある場合がある。これらの算術演算は、たとえば、さまざまなコンテキストにおいて適用可能性が見出され得る乗算演算を含み得る。このようなデータ処理装置を提供する際に対応する必要がある1つのファクタは、切り捨てまたは飽和などの他の手法(計算の精度を制限する)に依拠すべきではない場合に、いくつかの数値形式(たとえば、整数などの固定小数点数)が乗算されるときに発生する固有の「拡大」である。したがって、乗算演算への入力オペランドは比較的コンパクトであり得るという事実にもかかわらず、結果は、各入力オペランドよりも多くのビットを記憶する必要があるという意味で「より広い」場合がある。8ビット整数が非常にコンパクトであると見なされる(したがって、ストレージおよびメモリ帯域幅のコストを節約する)現代的な例を挙げると、これらの整数を乗算すると16ビットの結果が生成され、2つ以上のそのような結果が累算される場合、オーバーフローを回避するために、より広い累算レジスタが必要である。現代の装置で次に容易に利用可能なレジスタサイズが32ビット幅であるこの例では、この算術演算の相当の「拡大」に対応する必要があることが理解されよう。ただし、さらに、このような拡大演算は可能であるが、それらの実施態様のさらなるファクタは、スループットがアキュムレータ幅の関数になる傾向があることである。たとえば、各レジスタが16個の8ビット値に対応することができるように、128ビット幅のレジスタを使用する実施態様では、拡大積和演算は、1つのレジスタが提供する4つの32ビットアキュムレータのみを標的にし得(4つの32ビットアキュムレータのみがこのレジスタ幅において対応され得るため)、これは性能の制限要因になる(たとえば、1サイクルあたり8つの演算、すなわち、4つの乗算および4つの累算)。
【発明の概要】
【0003】
本明細書で説明する少なくとも1つの例は、データ処理装置であって、データ要素を記憶するための複数のレジスタを有するレジスタ記憶回路と、データ処理命令に応答して制御信号を生成する復号器回路であり、データ処理命令は、複数のレジスタ内で、第1のソースレジスタおよび第2のソースレジスタを指定する、復号器回路と、制御信号に応答して、内積演算を実行する処理回路とを備え、内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々から少なくとも第1のデータ要素および第2のデータ要素を抽出することと、少なくとも第1のデータ要素の対と第2のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第1のソースレジスタおよび第2のソースレジスタの各々が複数のレジスタ内レーンを含み、処理回路は、制御信号に応答して、各レジスタ内レーン内で独立に内積演算を実行する、データ処理装置を提供する。
【0004】
本明細書で説明する少なくとも1つの例は、データ処理装置を動作させる方法であって、データ処理命令に応答して制御信号を生成することであり、データ処理命令は、複数のレジスタ内で、第1のソースレジスタおよび第2のソースレジスタを指定する、生成することと、制御信号に応答して、内積演算を実行することとを含み、内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々から少なくとも第1のデータ要素および第2のデータ要素を抽出することと、少なくとも第1のデータ要素の対と第2のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第1のソースレジスタおよび第2のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算は、各レジスタ内レーン内で独立に実行される、方法を提供する。
【0005】
本明細書で説明する少なくとも1つの例は、少なくとも1つのデータ処理命令を含むプログラムを非一時的に記憶するコンピュータ可読記憶媒体であって、データ処理命令は、データ処理装置によって実行されると、データ処理命令に応答して制御信号を生成することであり、データ処理命令は、データ処理装置のレジスタ記憶回路内の第1のソースレジスタおよび第2のソースレジスタを指定する、生成することと、制御信号に応答して、内積演算を実行することとが行われるようにし、内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々から少なくとも第1のデータ要素および第2のデータ要素を抽出することと、少なくとも第1のデータ要素の対と第2のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第1のソースレジスタおよび第2のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算は、各レジスタ内レーン内で独立に実行される、コンピュータ可読記憶媒体を提供する。
【0006】
本明細書で説明する少なくとも1つの例は、データ処理装置であって、複数のレジスタ内にデータ要素を記憶するための手段と、制御信号を生成するためのデータ処理命令を復号するための手段であり、データ処理命令は、複数のレジスタ内で、第1のソースレジスタおよび第2のソースレジスタを指定する、復号するための手段と、制御信号に応答して、内積演算を実行するための手段とを備え、内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々から少なくとも第1のデータ要素および第2のデータ要素を抽出することと、少なくとも第1のデータ要素の対と第2のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第1のソースレジスタおよび第2のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算および累算演算は、各レジスタ内レーン内で独立に実行される、データ処理装置を提供する。
【0007】
本発明は、添付の図面に示されている実施形態を参照して、単なる例として、さらに説明される。
【図面の簡単な説明】
【0008】
図1】本技法のさまざまな例を具現化することができるデータ処理装置の概略図である。
図2】一実施形態におけるデータ準備命令の使用の概略図である。
図3図2の実施形態の変形形態の概略図である。
図4A】例示的なデータ処理命令の概略図である。
図4B】一実施形態における図4Aのデータ処理命令の実行の実施態様を示す図である。
図5A】いくつかの実施形態において演算ユニットへのデータ要素のルーティングが提供され得る2つの方法のうちの1つの概略図である。
図5B】いくつかの実施形態において演算ユニットへのデータ要素のルーティングが提供され得る2つの方法のうちの1つの概略図である。
図6A図4Aおよび図4Bを参照して説明したデータ処理命令およびそれらの実行のさらなる2つの例のうちの1つの概略図である。
図6B図4Aおよび図4Bを参照して説明したデータ処理命令およびそれらの実行のさらなる2つの例のうちの1つの概略図である。
図7A】例示的なデータ処理命令の概略図である。
図7B】一実施形態における図4Aのデータ処理命令の実行の実施態様を示す図である。
図8】一実施形態の方法に従って行われる一連のステップを示す図である。
図9A】一実施形態によるデータ処理命令の実行の概略図である。
図9B図9Aのような命令の2つの例を示す図である。
図10図9Bのデータ処理命令の実行の実施形態におけるいくつかの変形形態の概略図である。
図11】一実施形態における「内積」データ処理命令のための2つの128ビットソースレジスタを備えたより複雑な例の概略図である。
図12図11の実施形態の変形形態を示す図である。
図13図11および図12に示した例のさらなる変形形態を示す図である。
図14】一実施形態の方法に従って行われる一連のステップを示す図である。
図15A】いくつかの実施形態によって提供されるデータ処理命令の実行の概略図である。
図15B】対応する例示的な命令を示す図である。
図16図15Aの実施形態の例示的な視覚化を、単純な行列乗算演算の形で示す図である。
図17】第1のソースレジスタおよび第2のソースレジスタの各々から2つのデータ要素のみが導出される、図15Aに示されている例のより単純な変形形態を示す図である。
図18】ソースレジスタの各々からより多くのデータ要素が抽出される、図15Aに示されている例の別の変形形態を示す図である。
図19】実行されるいくつかの特定の乗算演算のさらなる詳細を与える、データ処理命令の実行の例示的な実施形態を示す図である。
図20】2つのソースレジスタの内容が2つの独立したレーン内にデータ要素を含むものとして扱われる、データ処理命令の実行の例示的な実施形態を示す図である。
図21】一実施形態の方法に従って行われる一連のステップを示す図である。
図22】一実施形態による仮想機械実施態様を示す図である。
【0009】
本明細書で説明する少なくとも1つの例示的な実施形態は、データ処理装置であって、データ要素を記憶するための複数のレジスタを有するレジスタ記憶回路と、データ処理命令に応答して制御信号を生成する復号器回路であり、データ処理命令は、複数のレジスタ内で、第1のソースレジスタおよび第2のソースレジスタを指定する、復号器回路と、制御信号に応答して、内積演算を実行する処理回路とを備え、内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々から少なくとも第1のデータ要素および第2のデータ要素を抽出することと、少なくとも第1のデータ要素の対と第2のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第1のソースレジスタおよび第2のソースレジスタの各々が複数のレジスタ内レーンを含み、処理回路は、制御信号に応答して、各レジスタ内レーン内で独立に内積演算を実行する、データ処理装置を提供する。
【0010】
したがって、提供される命令、およびそれをサポートするデータ処理装置内に提供される対応する回路により、少なくとも2つのデータ要素を第1のソースレジスタおよび第2のソースレジスタの各々から抽出することが可能であり、結果、各ソースレジスタから抽出されるデータ要素の対乗算演算を実行することができる。言い換えれば、2つのデータ要素が第1のソースレジスタおよび第2のソースレジスタの各々から抽出される例では、対乗算演算は、第1の乗算演算において第1のソースレジスタおよび第2のソースレジスタの各々から抽出される第1のデータ要素をともに乗算し、また、別個に、第2の乗算演算において第1のソースレジスタおよび第2のソースレジスタの各々から抽出される第2データ要素をともに乗算する。次に、これらの乗算演算の結果が加算される。さらに、この内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々にわたって(内容ではなく動作を)複数回反復され、したがって、その内容は複数の独立したレーン内で提示されるものとして扱われる。
【0011】
したがって、内積計算機能を提供するこの手法は、第1のソースレジスタおよび第2のソースレジスタの各々から取得した1つのデータ要素のみに対して乗算演算を実行する代わりに、第1のソースレジスタおよび第2のソースレジスタの各々から取得される少なくとも2つのデータ要素に対して乗算演算を実行し、したがって、各々を互いに乗算されるベクトルとして扱い、結果、内積演算がこのベクトル対にわたって実行される、新規の形態の拡大演算を提供する。特に、この手法は、累算のレベルではなく乗算成分のレベルでスループットの向上が促進されるため、上記で概説したのと同じスループットの制約を受けない。さらに、内積演算は複数のレジスタ内レーンの各々において独立して実行され、したがって、わずか2つのレジスタに記憶された値の複数の対を並列処理するための効率的でコンパクトなメカニズムを提供する。
【0012】
このレーンベースの手法は、必要な加算器の複雑さも制限する。128ビット(またはそれ以上)のレジスタ全体にわたるこのような対を1つの32ビットアキュムレータに累算する命令の例を考えると、多数の個別の結果(この中の128ビットの事例では16個であるが、レジスタの幅がより広い場合はさらに多くなる)を、命令の一部として合計する必要があるため、これは、効率的な構築に対して著しい構造的課題を呈することになる。ただし、加算をレーン内で動作するように制限することにより、この複雑さは制限され、より広いレジスタ幅への拡張が簡素化される(より広いレジスタは単純により多くのレーンを含み、レーンは独立して動作するため)。プログラマは、各レーン内で独立した計算が行われるように手配することができ、または、単一の結果が所望される場合は後で(おそらくいくつかの累算が実行された後に)単純にすべてのレーンにわたって値を加算することができるため、この機能はプログラマにとって依然として有用であることに留意されたい。
【0013】
本技法は、そのような命令、およびその実行をサポートするハードウェアが、多くの比較的「小さい」値が並列処理を必要とする用途で特定の適用可能性を見出し得ることを認識しており、したがって、本技法は、単一の命令に応答する演算の大きい「密度」を提供する。たとえば、128ビット幅のレジスタのコンテキストでは、各々において16個の8ビット値が保持され得、32ビットレーン幅を使用する(すなわち、各レーンについて4つの8ビットデータ要素が抽出され、128ビット幅が4つレーンとして取り扱われる)場合、単一の命令に応答して32回の演算が実行されることを意味し(16回の乗算および16回の加算)、これは、典型的な現時点の命令よりも3~4倍密である。実際、本技法はそのような幅に決して限定されず、さらに長いベクトルにおいて実施されるとき、それに応じて有効演算カウントが増加することに留意されたい。
【0014】
さらに、本技法は、浮動小数点数などの一部の数値形式は厳密に言わなければ、乗算演算が実行されるとき(すなわち、演算の出力値が、そのオペランドではなくその表現により多くのビットを必要とするとき)に上述した拡大問題を有するが、それらの算術計算はハードウェアで実施するのがより複雑であるため、実施態様において、たとえば16ビット数のみをサポートするのが一般的であることを認識している。この例を考えると、乗算結果をこれらの16ビットにおいて適切に記述することができない場合、精度が失われる(または極端な場合はオーバーフローまたはアンダーフローになる)。浮動小数点数は16ビット未満で定義することができるが、この効果に起因して、算術計算の実用的な価値はほとんどない。逆に、本技法はまた、整数がその特殊な事例である固定小数点形式の数値について、課題に対して本質的に3つの手法が存在することも認識している。8ビットの符号なし整数を乗算する例を考えると、a)答えは、最下位の8ビットに切り捨てられ(すなわち、結果が255を超える場合はオーバーフローする)、b)答えが飽和する可能性があり(したがって、255を超える任意の回答は255に変更される。これはいくつかの特定の用途に適合し得る)、またはc)答えが「拡大する」ことが可能にされ得、したがって、結果全体が保持される。拡大は明らかに最も正確な手法であり、事実、いくつかの用途では、たとえば反復累算を実行する場合、有用な結果を生成する唯一の選択肢である。したがって、一般に、ストレージおよびメモリ帯域幅のコストを削減するには、整数を使用することが好ましい。ハードウェアはより単純でもあり、本技法はその効率的な実施態様をサポートする。
【0015】
データ処理命令は、複数のレジスタにおいて出力レジスタをさらに指定することができ、乗算演算の結果を合計することは、合計の結果を出力レジスタに適用することをさらに含む。
【0016】
事実、出力レジスタはアキュムレータレジスタであり、内積演算はアキュムレータレジスタからアキュムレータ値をロードし、乗算演算の結果とアキュムレータ値とを合計することをさらに含む、内積および累算演算であり得る。
【0017】
内積および累算演算が実行されるいくつかの実施形態では、これは、一対の命令、すなわち、内積演算のための第1の命令、その後の累算のための第2の命令によって引き起こされ得る。したがって、上記のデータ処理命令に応答するとともに、いくつかの実施形態では、復号器回路は、さらなるデータ処理命令に応答してさらなる制御信号を生成し、データ処理命令は、複数のレジスタにおいて出力レジスタおよびアキュムレータレジスタを指定し、処理回路は、さらなる制御信号に応答して累算演算を実施し、累算演算は、アキュムレータレジスタからアキュムレータ値をロードし、出力レジスタから合計値をロードすることと、アキュムレータ値と合計値とを合計することと、合計の結果をアキュムレータレジスタに記憶することとを含む。
【0018】
第1のソースレジスタおよび第2のソースレジスタから抽出されるデータ要素の性質ならびに実行される計算に応じて、これらのレジスタの幅は異なり得るが、いくつかの実施形態では、第1のソースレジスタの幅、第2のソースレジスタの幅、および出力レジスタの幅は等しい。同様に、アキュムレータレジスタの幅は変化し得、いくつかの実施形態では、第1のソースレジスタの幅、第2のソースレジスタの幅、出力レジスタの幅、およびアキュムレータレジスタの幅は等しい。
【0019】
特定の構成に応じて、第1のソースレジスタまたは第2のソースレジスタから抽出されるデータ要素の相対的なサイズは、レジスタの幅によって異なり得る。これは、個々のデータ要素自体と、内積演算のために第1のソースレジスタまたは第2のソースレジスタから抽出されるすべてのデータ要素の結合サイズの両方に関して適用される。したがって、いくつかの実施形態では、第1のソースレジスタの幅は、内積演算において第1のソースレジスタから抽出されるすべてのデータ要素の結合サイズに等しい。同様に、いくつかの実施形態では、第2のソースレジスタの幅は、内積演算において第2のソースレジスタから抽出されるすべてのデータ要素の結合サイズに等しい。特に、内積演算の最終ステップは、その内積演算の一部を形成する乗算演算のすべての結果を合計することを含むことに留意されたい。したがって、たとえば、第1のソースレジスタから抽出されるすべてのデータ要素の結合サイズが第1のソースレジスタの幅に等しい実施形態では、それゆえ、これは本質的に、第1のソースレジスタの全幅にわたってデータ要素が抽出されること、および、このようにして抽出されるデータ要素のセットが、加算においてともに追加されることを意味する。
【0020】
本技法は、第1のソースレジスタおよび第2のソースレジスタの各々から抽出される特定の数のデータ要素に決して限定されないことを理解されたい。2つのデータ要素が各レジスタから抽出される上記の論述例を明確にする目的で論じたが、多くの実施形態では、各々から抽出される3つ以上のデータ要素があってもよい。たとえば、いくつかの実施形態では、内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々から少なくとも第3のデータ要素および第4のデータ要素を抽出することと、少なくとも第3のデータ要素の対および第4のデータ要素の対をともに乗算するさらなる乗算演算を実行することと、さらなる乗算演算の結果と乗算演算の結果とを合計することとをさらに含む。
【0021】
所与の実施態様の特定の要件に応じて、各ソースレジスタの各レジスタ内レーンから抽出されるデータ要素の結合サイズは異なり得るが、コンパクトで効率的な実施態様は、各レジスタ内レーンのサイズが、内積演算において第1のソースレジスタの各レジスタ内レーンから抽出されるすべてのデータ要素の結合サイズに等しい実施形態からもたらすことができる。同様に、各レジスタ内レーンのサイズは、内積演算において第2のソースレジスタの各レジスタ内レーンから抽出されるすべてのデータ要素の結合サイズに等しくなり得る。
【0022】
さらに、本技法は、所与のソースレジスタから選択されるデータ要素が内積演算を受ける前に、それらのデータ要素に適用され得る1つまたは複数のデータ要素操作がある実施形態も企図することに留意されたい。一例では、このデータ要素操作は、所与のソースレジスタの内容の一部を再利用して、そのソースレジスタから抽出される複数のデータ要素を提供することという形態をとり得る。したがって、いくつかの実施形態では、データ処理命令は、繰り返されるレジスタ内レーンと、第1のソースレジスタおよび第2のソースレジスタのうちの選択されるソースレジスタを指定し、処理回路は、制御信号に応答して、選択されているソースレジスタのすべてのレーンについて、繰り返されるレジスタ内レーンの内容を再利用する。言い換えれば、このような例では、1つのレーンの内容をコピーして、内積演算の目的で複数のレーンの内容を提供することができる。
【0023】
上記の論述から明らかなように、レジスタ幅、レジスタ内レーン幅、および抽出されるデータ要素幅の広範囲の変形が考えられる。いくつかの特定の実施形態では、たとえば、複数のレジスタ内レーンは32ビット幅を有し、抽出は、第1のソースレジスタおよび第2のソースレジスタの各レジスタ内レーンから4つの8ビットデータ要素を抽出することを含む。いくつかの他の特定の実施形態では、たとえば、複数のレジスタ内レーンは64ビット幅を有し、抽出は、第1のソースレジスタおよび第2のソースレジスタの各レジスタ内レーンから4つの16ビットデータ要素を抽出することを含む。
【0024】
第1のソースレジスタおよび第2のソースレジスタ内に保持されるデータ値の性質は異なり得、その結果、実行される乗算および加算の性質も異なり得る。いくつかの実施形態では、乗算演算および加算は整数演算である。いくつかの実施形態では、第1のソースレジスタおよび第2のソースレジスタ内に保持される値は符号付きの値である。いくつかの実施形態では、第1のソースレジスタおよび第2のソースレジスタ内に保持される値は符号なしの値である。いくつかの実施形態では、乗算演算および加算は浮動小数点演算である。いくつかの実施形態では、複数のレジスタ内レーンは32ビット幅を有し、抽出は、第1のソースレジスタおよび第2のソースレジスタの各レジスタ内レーンから2つの16ビット浮動小数点データ要素を抽出することを含む。いくつかの実施形態では、複数のレジスタ内レーンは64ビット幅を有し、抽出は、第1のソースレジスタおよび第2のソースレジスタの各レジスタ内レーンから2つの32ビット浮動小数点データ要素を抽出することを含む。
【0025】
本明細書で説明する少なくとも1つの例示的な実施形態は、データ処理装置を動作させる方法であって、データ処理命令に応答して制御信号を生成することであり、データ処理命令は、複数のレジスタにおいて、第1のソースレジスタおよび第2のソースレジスタを指定する、生成することと、制御信号に応答して、内積演算を実行することとを含み、内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々から少なくとも第1のデータ要素および第2のデータ要素を抽出することと、少なくとも第1のデータ要素の対と第2のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第1のソースレジスタおよび第2のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算は、各レジスタ内レーン内で独立に実行される、方法を提供する。
【0026】
本明細書で説明する少なくとも1つの例示的な実施形態は、少なくとも1つのデータ処理命令を含むプログラムを非一時的に記憶するコンピュータ可読記憶媒体であって、データ処理命令は、データ処理装置によって実行されると、データ処理命令に応答して制御信号を生成することであり、データ処理命令は、データ処理装置のレジスタ記憶回路内の第1のソースレジスタおよび第2のソースレジスタを指定する、生成することと、制御信号に応答して、内積演算を実行することとが行われるようにし、内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々から少なくとも第1のデータ要素および第2のデータ要素を抽出することと、少なくとも第1のデータ要素の対と第2のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第1のソースレジスタおよび第2のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算は、各レジスタ内レーン内で独立に実行される、コンピュータ可読記憶媒体を提供する。
【0027】
本明細書で説明する少なくとも1つの例示的な実施形態は、データ処理装置であって、複数のレジスタ内にデータ要素を記憶するための手段と、制御信号を生成するためのデータ処理命令を復号するための手段であり、データ処理命令は、複数のレジスタ内で、第1のソースレジスタおよび第2のソースレジスタを指定する、復号するための手段と、制御信号に応答して、内積演算を実行するための手段とを備え、内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々から少なくとも第1のデータ要素および第2のデータ要素を抽出することと、少なくとも第1のデータ要素の対と第2のデータ要素の対とを乗算する乗算演算を実行することと、乗算演算の結果を合計することとを含み、第1のソースレジスタおよび第2のソースレジスタの各々が複数のレジスタ内レーンを含み、内積演算および累算演算は、各レジスタ内レーン内で独立に実行される、データ処理装置を提供する。
【0028】
本明細書で説明する少なくとも1つの例示的な実施形態は、データ処理装置上で実行されるコンピュータプログラムによって提供される仮想機械を提供し、上記仮想機械は、上述のデータ処理装置の1つに対応する命令実行環境を提供する。
【0029】
次に、いくつかの特定の実施形態について、図面を参照して説明する。
【0030】
図1は、本技法のさまざまな例を具現化することができるデータ処理装置を概略的に示す。データ処理装置は、当該装置が実行する一連の命令に応答してデータ項目に対してデータ処理動作を実行する処理回路12を備える。これらの命令は、データ処理装置がアクセスするメモリ14から取り出され、当業者が精通している方法で、この目的のためにフェッチ回路16が提供される。フェッチ回路16によって取り出されるさらなる命令は、復号回路18に渡され、復号回路は、処理回路12の構成および動作のさまざまな態様を制御するように設定されている制御信号を生成する。レジスタ20のセットおよびロード/ストアユニット22も示されている。当業者は、図1が表す一般的な構成に精通しており、簡潔にするためだけに、そのさらなる詳細な説明はここでは省略される。図1に示す実施形態におけるレジスタ20は、整数の倍数24およびデータグループ25のサイズのうちの一方または両方のための記憶装置を含むことができ、その使用については、いくつかの特定の実施形態を参照して以下により詳細に説明する。命令の実行において処理回路12によって必要とされるデータ、およびそれらのデータ処理命令の結果として生成されるデータ値は、ロード/ストアユニット22によってメモリ14に書き込まれ、メモリ14から読み出される。また、一般に、図1のメモリ14は、処理回路がその後実行する、典型的には所定の命令シーケンス(「プログラム」)の一部としての、本技法の命令を記憶することができるコンピュータ可読記憶媒体の一例として見ることができることに留意されたい。ただし、処理回路は、RAM内、ROM内、ネットワークインターフェースを介するなど、さまざまなソースからこのようなプログラムにアクセスすることができる。本開示は、処理回路12が実行することができるさまざまな新規命令を説明し、添付の図面は、これらの命令の性質、これらの命令の実行をサポートするためのデータ処理回路の変形形態などについてさらに説明する。
【0031】
図2は、データ準備命令32の使用を概略的に示す。データ準備命令32は、オペコード部分34(それをデータ準備命令として定義する)、レジスタ指定子36、およびメモリ位置指定子38を含む。この実施形態のデータ処理装置によるこの命令の実行により、メモリ30(指定されたメモリ位置によって参照され、たとえば、規定されているデータに応じて2つ以上のアドレスにおよぶ)に記憶され、(この例示された実施形態では)2つのデータ要素b0およびb1(図では42および44とラベル付けされている)を含む、データグループ40が識別される。さらに、命令の実行により、このデータグループ40は指定されたレジスタにコピーされ、さらに、図2において、各々がデータ要素b0およびb1から構成される繰り返しデータグループ46、48、50、および52によって示すように、そのレジスタの幅全体にわたって複製される。
【0032】
図3は、図2の実施形態の変形を概略的に示しており、そのようなデータ準備命令により、種々のサイズのデータグループがコピーおよび複製され得ることを示している。図3の図解されている例では、命令60は同じ構造を有する、すなわち、オペコード62、レジスタ指定子64、および指定されるメモリ位置66を含む。命令60の実行により、メモリ位置66がアクセスされ、そこに記憶されるデータグループ68(すなわち、たとえば、そのメモリ位置で始まり、所定数のデータ要素にわたって延伸する)は、データ要素c0、c1、c2、およびc3を含む(図では70、72、74、および76とラベル付けされている)。このデータグループ68は、目標レジスタの幅全体にわたってコピーおよび複製され、このデータグループ78、80、82、および84の繰り返しコピーによって示される。図1に戻って参照すると、データグループサイズは、レジスタ20内の専用記憶場所25に保持されている値によってあらかじめ定義することができることに留意されたい。最後に、図2および図3の例は、いかなる特定のデータグループの幅または複製回数にも限定されないことを理解されたい。ただし、現在のコンテキストで有用である1つのみの例を説明すると、複製は128ビットの幅にわたって行われ得る。英国ケンブリッジのARM(登録商標)Limitedが提供するScalable Vector Extensions(SVE)のコンテキストでは、この幅はSVEベクトルグラニュールサイズに対応している。同じくARM(登録商標)Limitedが提供するASMID命令のコンテキストでは、これはASIMDレジスタのサイズに対応する。したがって、本技法は、以下のグループタイプ、すなわち、2つの64ビットデータ要素、4つの32ビットデータ要素、8つの16ビットデータ要素、または16個の8ビットデータ要素のロードおよび複製を可能にする。
【0033】
図4Aは、例示的なデータ処理命令を概略的に示し、図4Bは、一実施形態におけるそのデータ処理命令の実行の実施態様を示す。このデータ処理命令は、オペコード102、第1のレジスタ指定子104、第2のレジスタ指定子106、インデックス指定子108、および任意選択の変形形態として結果レジスタ指定子110を含む。図4Bは、この命令の実行により、レジスタAおよびレジスタB内のデータグループがアクセスされることを示し、レジスタA内の各データグループのすべてのデータ要素、すなわち、この例では、第1のデータグループ112内のデータ要素a0およびa1、ならびに、第2のデータグループ114内のデータ要素a2およびa3がアクセスされ、一方、レジスタB内では、データグループ116および118の各々において、選択されるデータ要素、すなわちデータ要素b1のみがアクセスされる。このようにアクセスされるこれらのデータ要素は、図4Bにおいて、レジスタBから取得されるデータ要素およびレジスタAから取得されるデータグループに対してデータ処理演算を適用する演算ユニット120、122、124、126によって表される、処理回路の演算回路に渡される。上記のように、命令100は(識別子110によって)結果レジスタを指定することができ、これらの演算の結果は結果レジスタ128のそれぞれのデータ要素に書き込まれる。実際、いくつかの実施形態では、結果レジスタ128およびレジスタAは1つの同じレジスタであってもよく、たとえば、そのレジスタの内容に関して積和演算を実行することができる(図4に破線の矢印によって概略的に示されているように)。また、図4Bに示されているレジスタは、例示的な命令によってアクセスされる部分を越えて(両側において)潜在的に延伸するように意図的に図解されていることに留意されたい。これは、いくつかの実施態様(上記のScalable Vector Extensions(SVE)など)においてベクトルサイズが指定されない場合があるという事実に対応している。たとえば、例としてSVEの例の2つの64ビットデータ要素(b0およびb1)のグループに対する命令の動作を示す図4Bを例にとると、宛先のベクトルサイズは(128ビット刻みの増分で)128ビットから2048ビットまでのいずれかになり得る。
【0034】
図4Bに示される例は、レジスタBの内容から使用されている選択される(繰り返される)データ要素の特定の例を示しているが、一般に、レジスタB内の任意のデータ要素が、演算ユニット120~126のいずれかの入力として使用されるようにする機能を有する、多目的で柔軟なデータ処理装置が提供されることが明らかに好ましい。図5Aおよび5Bは、これを達成することができる2つの方法を概略的に示している。図5Aは、たとえば、演算ユニット140、142、144、および146のセット(たとえば、融合乗加算ユニットであってもよい)に接続されたレジスタにそれぞれのデータ要素を記憶することができる記憶構成要素130、132、134、および136のセットを示す。記憶ユニット130~136と機能ユニット140~146との間の接続は、図5Aにおいて、直接であるものとして、また、マルチプレクサ148を介して仲介されるものとして示されている。したがって、この構成は、個々の記憶ユニット130~136のいずれかの内容が、それぞれの機能ユニットへの第1の入力として、機能ユニット140~146のいずれかに提供され得、記憶ユニット130~136の内容が、機能ユニット140~146の第2の入力としてそれぞれ提供され得ることを可能にする。機能ユニット140~146によって実行された処理の結果は、記憶ユニット150~156に転送され、記憶ユニット150~156は、たとえば、それぞれのデータ要素をレジスタに記憶することができる。マルチプレクサ148および機能ユニット140~146の各々は、上述の入力の柔軟な選択を可能にするために、図解されている制御信号によって制御される。
【0035】
図5Bは、各記憶ユニット160、162、164、および166が機能ユニット170、172、174、および176の各々に直接接続され、これらの機能ユニットの各々がそれぞれの制御信号によって制御され、その結果がそれぞれの記憶ユニット180、182、184、および186に渡される、図5Aの構成に対する代替的な構成を概略的に示す。図5Bによって取られる手法は、たとえば、図5Bの例のマルチプレクサ148を使用する必要性、およびそれに関連する遅延を回避するが、より複雑な配線が必要となるという代償を払う。したがって、図5A図5Bの例は両方とも、特に関連するデータ要素の数が増えた場合に、入力記憶ユニット、演算ユニット、および出力記憶ユニットの完全に柔軟で設定可能なセットを実施しようとするときに生じ得る複雑さを示している。たとえば、図5Aの例を使用して、入力記憶ユニット、演算ユニット、および出力記憶ユニットの数を各々8倍にすると、8倍の入力マルチプレクサが必要になる。一方、図5Bの手法をとるこのような8倍幅の実施態様では、各入力記憶ユニットから各演算ユニットへの8つの経路、すなわち合計64パスが必要になるとともに、各演算ユニットが、8つの異なる入力を受信し、それらの間で選択することが可能である必要がある。したがって、レジスタ幅にわたってデータ部分(たとえばデータグループ)を再利用する本技法の実施形態がとる手法により、必要な制御ユニットへの入力の多様性および複雑性に制限を課すことが可能になることが理解されよう。さらに、上記のSVE/ASIMDのコンテキストにおいて、図4Aのグループ化された要素×ベクトル命令は、同等の通常のベクトル演算と比較して余分なレイテンシなしで、単一のマイクロ操作として実施可能であると期待することができることに留意されたい。これは、選択および複製がSVEベクトルグラニュール内に留まり、ASIMDにはすでに128ビット内で(たとえば、「FMLA(要素ごと)」命令を使用して)これを実行するメカニズムがあるためである。そのため、図4Aに示す命令は、通常のベクトル演算が後に続く一連の個別の複製(DUP)命令よりも効率的であると期待することができる。
【0036】
図6Aおよび6Bは、図4Aおよび4Bを参照して例を議論したデータ処理命令の2つのさらなる例を概略的に示している。図6Aの例では、命令200は、オペコード202、第1のレジスタ指定子204、第2のレジスタ指定子206、即時インデックス値208、および結果レジスタ指定子210を含む。図6Aの下部は、この命令200の実行を概略的に示しており、レジスタBの繰り返し下位部分(データグループ)内の指定されたデータ要素(インデックス1)が選択され、このデータ要素に、レジスタAのそれぞれのデータグループによって表されるベクトルが乗算されて、結果レジスタの内容にデータ投入するそれぞれの結果データグループが生成される。図6Aでは、それぞれのデータ要素とデータグループとの間で実行される演算は、一般的な演算記号によって示されており、これは、上記の例では乗算であるが、他の演算も可能であり、企図されることを示している。
【0037】
本技法は、1つのベクトルのみを指定するそのようなデータ処理命令に限定されず、図6Bは、オペコード222、第1のレジスタ指定子224、第2のレジスタ指定子226、第3のレジスタ指定子228およびインデックス指定子230を含むデータ処理命令220が提供される例を示す。図6Bの下部は、図6Aに示した方法と同様の方法で、第1のレジスタ(B)の選択されるデータ要素(b1)が、レジスタAおよびCから取得したデータグループ(ベクトル)と組み合わされ、結果値が生成される方法を示している。単に変形形態を説明する目的のために、図6Bの例の結果レジスタは命令220において指定されず、むしろデフォルトの(所定の)結果レジスタがこの目的のために一時的に使用される。さらに、構成要素の組み合わせが一般的な演算子記号
【数1】

によって図6Bに再び示されているが、実行されている特定の命令に応じてこの演算はさまざまな形をとることができ、これは事実、乗算演算であってもよいが、任意の他の任意のタイプの算術演算(加算、減算など)であってもよく、または論理演算(ADD、XORなど)にすることもできることを再度理解されたい。
【0038】
図7Aは、別の例示的なデータ処理命令を概略的に示し、図7Bは、一実施形態におけるそのデータ処理命令の実行の実施態様を示す。このデータ処理命令は、複合数の要素×ベクトル演算をサポートするために提供され、ここではFCMLA(融合複合積和)命令と呼ばれる。図7Aに示すように、例示的なFCMLA命令220は、オペコード222、回転指定子224、第1のレジスタ(A)指定子226、第2のレジスタ(B)指定子228、インデックス指定子230、および累算レジスタ指定子232を含む。図7Bは、この命令の実行により、レジスタAおよびレジスタBのデータグループがアクセスされることを示しており、この命令内のデータグループは、複数の複合要素を定義する。複合要素は、要素の対によって表される(図7Bのラベル「複合対」を参照)。図7Bの例では、レジスタBの複合対は(b3、b2)および(b1、b0)であり、複合対(b3、b2)が選択されている。レジスタAの複合対は、(a7、a6)、(a5、a4)、(a3、a2)、および(a1、a0)である。レジスタAおよびBから選択される複合対(レジスタAからのすべての複合対、および、インデックス230によって識別されるレジスタBのデータグループからの選択される複合対)は、複合融合積和(CFMA)ユニット234、236、238、240に渡され、ここで、レジスタAからの各複合対はそれぞれCFMAユニットへの1つの入力を形成し、一方、レジスタB内の1つのデータグループからの選択される複合対は、CFMAユニット234および236への別の入力を形成し、レジスタB内の次のデータグループからの他の選択される複合対は、CFMAユニット238および240への別の入力を形成する。複合融合積和演算のそれぞれの結果は、指定されている累算レジスタ内にそれぞれの複合対として累算され、これらは各々、それぞれのCFMAユニットの各々への第3の入力を形成する。回転パラメーター224(任意選択的に命令内で指定される)は、次のように演算を変更する2ビット制御値である(第1の対のみを示す、(c1、c0)は演算前のアキュムレータ値である)。
【表1】
【0039】
図8は、一実施形態の方法に従って行われる一連のステップを示す。フローはステップ250において始まり、データロード(準備)命令が復号され、ステップ260において対応する制御信号が生成される。次いで、これらの制御信号は、ステップ270において、命令指定位置(この例についてはたとえば図2および3を参照)からの、制御レジスタ指定サイズを有する、指定されたデータグループが、メモリからロードされるようにする。次いで、制御信号はさらに、ステップ280において、ロードされたデータグループが、指定された目標レジスタ(データロード(準備)命令において指定されている)のベクトル幅にわたって複製されるようにする。その後、データロード命令の実行が完了する。フローはステップ290に進み、要素×ベクトルデータ処理命令が復号される。次に、対応する制御信号がステップ300において生成され、続いてステップ310において、要素×ベクトル命令によって指定される演算が、命令において指定される第1のレジスタ内の各データグループ内のインデックス付き要素と、命令において指定される第2のレジスタの各データグループ内の各データ要素との間で実行される。
【0040】
図9Aは、本技法による異なるデータ処理命令の実行を概略的に示す。図9Bは、そのような命令の2つの例を示し、第1の命令320は、オペコード322、第1のレジスタ指定子324、第2のレジスタ指定子326、および(任意選択的に)出力レジスタ指定子328を含む。図9Bに示される第2の例示的なデータ処理命令330は、オペコード332、出力レジスタ指定子334、およびアキュムレータレジスタ指定子336を含む。これらについては、図9Aを参照して説明する。データ処理命令によって指定される第1のソースレジスタおよび第2のソースレジスタが図9Aの上部に示されており、各レジスタは、レーンにグループ化されたデータ要素部分に細分化されている。データ処理命令に応答して、データ処理装置(すなわち、復号器回路によって生成される制御信号の制御下にある処理回路)は、第1のソースレジスタおよび第2のソースレジスタの各々からデータ要素のセットを取り出す。図9Aに示す例では、4つのデータ要素から成るセットが、第1のソースレジスタおよび第2のソースレジスタの各レーンから取り出される。これらは、乗算演算を実行するように設定されている演算ユニット340、342、344、および346においてともに対にされる。これらの乗算演算の結果は、加算ユニット348においてまとめられ、最終的に、こうして生成された結果値は、出力レジスタの対応するレーンに書き込まれる。言い換えれば、「内積」演算が実行される。図9Aのレーンのラベル付けは、4つの乗算ユニット340~346および加算ユニット348が、データ処理装置の処理回路に設けられたそのようなユニットの1つのセットのみを表し、これらが、データ処理装置が各レジスタについて処理することができるレーンの各々に一致するように対応して繰り返されるという事実を示す。各レジスタのレーンの数は、データ要素の相対幅、各レーンのデータ要素の数、および利用可能なレジスタ幅に応じてレーンの数を自由に規定することができるという事実に対応して、図9Aにおいては意図的に、明示されていない。したがって、命令はアキュムレータ幅での同じ幅の演算と同様に挙動することが分かる(たとえば、32ビット幅のレーン内の8ビット値(整数など)の例では、32ビット整数演算と同様に挙動する)。ただし、各レーン内で、32×32乗算が実行される代わりに、32ビットのソースレーンが、4つの個別の8ビット値から構成されていると見なされ、これら2つの「ミニベクトル」にわたって内積演算が実行される。結果は、その後、アキュムレータ値から対応する32ビットレーンに累算される。この図は、単一の32ビットレーン内の演算のみを明示的に示していることが理解される。128ビットのベクトル長の1つの例を挙げると、命令は実効的に、32回の演算(16回の乗算および16回の加算)を実行し、これは、同等の現在の命令よりも3~4倍密である。英国ケンブリッジのARM(登録商標)Limitedが提供するScalable Vector Extensions(SVE)など、より長いベクトルを許容するアーキテクチャへと実施される場合、これらのより長いベクトルはそれに応じて実行演算カウントを増やす。さらに、32ビットのレーン幅の特定の例が示されているが、たとえば、16ビット×16ビット->64ビットまたは16ビット×16ビット->32ビットなど、多くの異なる幅の組み合わせ(入力および出力の両方)が可能であることを理解されたい。「要素ごと」形式(たとえば、オペランドの1つに対して単一の32ビットレーンが複製される)も提案される。図9Aの出力レジスタと第2のレジスタを結ぶ破線の矢印は、第2のレジスタが実際には出力レジスタであり得、このレジスタの内容に関する累算演算が実施されることが可能であることを示している。図9Bの考察に戻ると、2つの個別の命令がここに示されていることに留意されたい。一般に、第1の示されている命令が、図9Aに示されたすべての演算を実行されるようにすることができるが、図9Bの第1の示されている命令が、乗算および加算演算が実行されるようにするに過ぎず、出力レジスタ内の結果を取得し、それをアキュムレータレジスタに適用する後続の累算演算が、そのタスク専用の第2の示されている命令によって実行され得る実施形態も提供される。
【0041】
図10は、図9Bに示すデータ処理命令の実行の実施形態におけるいくつかの変形形態を概略的に示す。ここでは、図解を明確にするためだけに、2つのソースレジスタ350および352の各々においてアクセスされるデータ要素の数は2つに減らされている。同様に、2つの乗算ユニット354および356のみが(各レーンに対して)提供され、1つの加算ユニット358が(各レーンに対して)提供される。実行される特定のデータ処理命令に応じて、「内積」演算の結果は、指定された出力レジスタ360(指定されている場合)に書き込まれ得るか、または代替的に、累算レジスタ362(そのように指定されている場合)に書き込まれてもよい。累算レジスタが規定されている後者の事例では、この累算レジスタの内容は、加算ユニット358への追加の入力として取得され得、結果、進行中の累算が実行され得る。
【0042】
図11は、2つの128ビットレジスタ380および382が上述の「内積」データ処理演算命令のうちの1つのソースレジスタである、より複雑な例を概略的に示している。これらのソースレジスタ380および382の各々は、4つの独立したレーン(レーン0~3)に関して処理され、これらのレーンのそれぞれの内容は一時記憶バッファ384~398に取り込まれ、結果、2つのソースからの同じレーンのそれぞれの内容が、隣接する記憶バッファに持ち込まれる。各記憶バッファ内で、内容データ要素(この例では各々の中に4つのデータ要素)は、その後、各レーン400、402、404、406に提供される4つの乗算ユニットから成るセットにそれぞれの入力を提供する。これらの出力は、その後、それぞれの加算ユニット408、410、412、および414に供給され、これらの加算ユニットのそれぞれの出力は、累算レジスタ416のそれぞれの対応するレーン内に渡される。累算レジスタ416のそれぞれのレーンは、加算ユニット(アキュムレータ)408~414への第2のタイプの入力を提供する。図12は、図11と同じ基本構成を示しており、実際、同じ部分構成要素は同じ参照番号で表されており、ここでは再度説明しない。図12図11との間の差は、128ビットレジスタ380(ソースレジスタ)の4つのレーンの各々の内容が使用されるのに対し、第2の128ビットソースレジスタ382からの第1のレーン内容のみが使用され、この内容が、一時記憶ユニット386、390、394、および398の各々に複製されることである。この例では、ソースレジスタ382からの内容を提供する(唯一の)レーンとして選択されるこのレーンは、命令によって指定される。この例示的な図解のために選択されているこの特定のレーン(レーン0)に関連する重要性はなく、ソースレジスタ382の他のレーンのいずれも同様に十分に指定され得ることが理解されよう。選択されるレーンの指定は、たとえば図4Aの例示的な命令に示すように、命令内のインデックス値の設定によって実行される。
【0043】
図11および図12に示されている例のさらなる変形を図13に示す。ここでも、同じ参照番号が与えられた同じ部分構成要素がここで再利用されており、簡潔にするために再び説明されない。図11および図12の例に関して図13に示す差は、ソースレジスタ380および382の各々の4つのレーン自体が2つのデータグループ(本明細書においては「チャンク」としても参照され、図面においてはチャンク0およびチャンク1とラベル付けされている)において処理される。これは、レジスタ380の内容が処理される方法に影響を与えず、その4つのレーンの内容は、前出のように一時記憶ユニット384、388、392および396に転送される。ただし、図12の例で紹介した単一レーン内容の抽出および複製は、ここではデータグループごとに(「チャンクごと」に)実行され、結果、レジスタ382のレーン0の内容は複製されて、一時記憶バッファ394および398に転送される、一方、チャンク1のレーン2の内容は複製されて、一時記憶バッファ386および390に転送される。図13に示された動作は、より一般的に示された図4Bの特定の例であると考えることができ、4つの処理ユニット120~126によって実行されるその図の「演算」は、説明されている内積演算を含むことに留意されたい。ここでも、この図解されている例において選択される特定のレーン(各チャンクの「最初の」レーンとしてのレーン2および0)に関連する重要性はなく、これらは、たとえば図4Aの例示的な命令に示されているように、命令内のインデックス値の設定によって指定されていることが理解されよう。最後に、ソースレジスタの内容を適切に準備するために、図13に示すデータ処理命令の実行に先行して、図2および3に示し、上記で説明したようなデータ準備命令が実行されることが有用であり得ることに留意されたい。
【0044】
図14は、図9A図13を参照して上述したような内積演算を実行するためにデータ処理命令を実行するときに一実施形態の方法に従って行われる一連のステップを示す。フローはステップ430において始まり、命令が復号され、ステップ440において対応する制御信号が生成される。次に、ステップ450において、複数のデータ要素が、レーンごとに命令において指定される第1のソースレジスタおよび第2のソースレジスタから抽出され、ステップ460において、第1のソースレジスタおよび第2のソースレジスタからのデータ要素のそれぞれの対が、内積演算の最初の部分を実行するために各レーン内でともに乗算される。次に、ステップ470において、それぞれの乗算器演算の結果が、ここでもレーンごとに加算され、(この例では)同じく命令において指定される入力アキュムレータレジスタから取り出されているアキュムレータ値に加算される。
【0045】
図15Aは、いくつかの実施形態によって提供されるデータ処理命令の実行を概略的に示す。図15Bは、対応する例示的な命令を示している。この例示的な命令500は、オペコード502、第1のソースレジスタ指定子504、第2のソースレジスタ指定子506、および累算レジスタ指定子のセット508を含む。図15Aの例で実施される第1のソースレジスタ510および第2のソースレジスタ512は、図の上部に示されており、これらのレジスタから、データ処理命令の実行に応答してデータ要素が抽出される。すべて(4つ)のデータ要素は、第1のソースレジスタ510から個別に抽出され、一方、第2のソースレジスタ512の全内容を構成する4つのデータ要素はブロックとして抽出される。第2のソースレジスタ512の内容は、4つの演算ユニット、すなわち、融合乗加算(FMA)ユニット514、516、518、および520の各々に渡される。第1のソースレジスタ510から抽出される4つのデータ要素の各々は、FMAユニット514~520のそれぞれに渡される。図示されるように、FMAユニット514および520の各々は、それぞれの制御信号によって制御される。したがって、図15Aの例におけるデータ処理命令の実行により、データ処理回路(4つのFMAユニットによって表される)が4回のベクトル×要素積和演算を同時に実行する。本技法は4の多重度に限定されないが、これは、そのような現在の処理装置において典型的に利用可能な負荷対計算比に良好に一致することが見出されていることに留意すべきである。FMAユニットの出力は、命令において指定される累算レジスタのセットのそれぞれのレジスタに適用される(図15Bの項目508を参照)。さらに、これらの4つの累算レジスタ522、524、526、および528の内容は、FMAユニット514~520のそれぞれへの別の入力を形成し、結果、これらのレジスタの各々の内容に対して累算が実行される。
【0046】
図16は、単純な行列乗算の例を表す、図15Aの例の例示的な視覚化例を示し、対象行列Aと対象行列Bとを互いに乗算されて結果行列Cが生成されることになる。この準備において、行列Aの列(網掛け)はレジスタv0にロードされており、行列Bの行(網掛け)はレジスタv2にロードされている。結果行列Cの累算器は、レジスタv4~v7に記憶される。行列Aからロードされた値は列として示されているが、行列は容易に転置および/またはインターリーブされ、結果、各ソース配列からの連続したベクトルロードを実行することができることに留意されたい。この文脈では、行列乗算はO(n)演算であり、したがって、処理のために行列データを準備する補助タスクはO(n)演算であり、したがって、nが十分に大きい場合の負荷は無視できることに留意されたい。示されている例に対応する命令は、FMA4 v4-v7、v2、v0[0-3]として表すことができる。ここで、FMA4はこの命令のラベル(または同等にオペコード)を表し、v4-v7は累算レジスタのセットであり、v2は全内容が取得されるソースレジスタであり、v0はる(0~3とインデックス付けされている)データ要素のセットが取得されるソースレジスタであ。この命令を実行すると、以下の4つの演算がもたらされる。
v4+=v2*v0[0]、
v5+=v2*v0[1]、
v6+=v2*v0[2]、および
v7+=v2*v0[3]。
【0047】
図17は、図15Aに示されている例のより単純なバージョンを表し、この例では、第1のソースレジスタ540および第2のソースレジスタ542の各々から2つのデータ要素のみが導出される。レジスタ542から抽出される両方のデータ要素は、FMAユニット544および546の各々に渡され、一方、レジスタ540からの第1のデータ要素はFMAユニット544に渡され、第2のデータ要素はFMAユニット546に渡される。累算レジスタ548および550の内容は、それぞれのFMAユニットの各々にさらなる入力を提供し、累算結果は各それぞれの累算レジスタに適用される。逆に、図18は、各ソースレジスタからより多くのデータ要素が抽出される例を示しており、これらのデータ要素(この例では8つ)は、各ソースレジスタ560および562から抽出される。レジスタ562の全内容は、FMAユニット564~578の各々に提供され、一方、レジスタ560から選択されるそれぞれのデータ要素は、他の入力として提供される。積和演算の結果は、それぞれの累算レジスタ580~594内に累積される。
【0048】
図19は、1つの例において実施される、いくつかの特定の乗算演算のさらなる詳細を与える例を示す。ここで、2つのソースレジスタv0およびv2は各々、2つの個別のデータグループ内で処理される。レジスタv0の2つのデータグループは、選択されるデータ要素が複製されるレジスタの部分も表す。図19の例では、これは各部分の「最初の」データ要素、すなわち、それぞれ要素[0]および[4]である。選択されるデータ要素は、インデックスを使用して命令において指定することができる。したがって、図19に示すデータ操作の最初のステップにおいて、レジスタv0のこれら2つのデータグループのデータ要素が、示されているように各部分の幅にわたって複製される。その後、これらは入力を4つの乗算器600、602、604、および606に提供し、一方、他の入力はレジスタv2の内容によって提供される。次に、v2のそれぞれのデータ要素とv0のそれぞれのデータ要素との乗算が実行され、結果が目標レジスタv4~v7に適用され、2つのデータグループへの細分化は、各累算レジスタの各データグループについてラベル付けされた特定の計算によって示すように、これらの4つの累算レジスタへと維持される。ソースレジスタの内容を適切に準備するために、図19に示すデータ処理命令の実行に先行して、図2および3に示し、上記で説明したようなデータ準備命令が実行されることが有用であり得ることに留意されたい。
【0049】
図20は、2つのソースレジスタ620および622の内容が2つの独立したレーン(レーン0およびレーン1)内にデータ要素を含むものとして扱われる例を示す。各レーン内で2つの下位部分が定義され、内容のこの「レーニング(laning)」が計算全体を通じて、すなわちFMAユニット624、626、628、および630を通じて、かつ最終的には累算レジスタ632および634へと維持される。
【0050】
図21は、図15A図20の例に関して説明したようなデータ処理命令を処理するときに一実施形態の方法に従って行われる一連のステップを示す。フローはステップ650において始まり、データ処理命令が復号され、ステップ652において対応する制御信号が生成される。次に、ステップ654において、データ処理命令において指定される第1のソースレジスタからN個のデータ要素が抽出され、ステップ656において、データ処理命令において指定される第2のソースレジスタの内容によって、N個のデータ要素が乗算される。次に、ステップ658において、これらの乗算演算のN個の結果値が、データ処理命令において指定されるN個のそれぞれの累算レジスタの内容に適用される。上記の説明に照らして、ソースレジスタの内容を適切に準備するために、図21に関して説明した命令の実行、および同等に図14に関して説明した命令の実行に先行して、図2および3に示し、上記で説明したようなデータ準備命令が実行されることが有益であり得ることが理解されよう。
【0051】
図22は、使用することができる仮想機械実施態様を示す。上述の実施形態は、一般に、関連技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本技法を実施するが、ハードウェア装置のいわゆる仮想機械実施態様を提供することも可能である。これらの仮想機械実施態様は、一般的に仮想マシンプログラム710をサポートするホストオペレーティングシステム720を実行するホストプロセッサ730上で実行される。これには、妥当な速度で実行する仮想機械実施態様をサポートするために、より強力なプロセッサが提供される必要があり得るが、そのような手法は、互換性または再利用の理由のために別のプロセッサに対してネイティブなコードを実行したいという要望がある場合などの特定の状況において正当化され得る。仮想マシンプログラム710は、仮想マシンプログラム710によってモデル化されているデバイスである実際のハードウェアによって提供されるアプリケーションプログラムインターフェースと同じアプリケーションプログラム700にアプリケーションプログラムインターフェースを提供する。したがって、上述したプロセッサ状態チェック命令の1つまたは複数の例を含むプログラム命令は、仮想マシンハードウェアとの相互作用をモデル化するために、仮想マシンプログラム710を使用してアプリケーションプログラム700内から実行することができる。
【0052】
簡潔に全体を要約すると、データ処理装置、データ処理装置を動作させる方法、非一時的コンピュータ可読記憶媒体、および命令が提供される。この命令は、最初のソースレジスタおよび第2のソースレジスタを指定する。命令に応答して、処理回路に内積演算を実行させる制御信号が生成される。この演算のために、少なくとも第1データ要素と第2データ要素が、第1のソースレジスタおよび第2のソースレジスタの各々から抽出され、結果、少なくとも第1のデータ要素の対と第2のデータ要素の対とがともに乗算される。内積演算は、第1のソースレジスタおよび第2のソースレジスタの各々にまたがる複数のレジスタ内レーンの各々において独立して実行される。このように、命令ごとの演算の密度が高い拡大演算が可能になる。
【0053】
本出願において、「~ように構成されている」または「~ように設定されている」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の配列または方法を意味する。たとえば、装置は、規定の動作を提供する専用のハードウェアを有することができ、またはプロセッサもしくは他の処理装置が機能を実行するようにプログラムされてもよい。「~ように構成されている」または「~ように設定されている」は、規定の動作を提供するために装置要素を何らかの方法で変更する必要があることを意味しない。
【0054】
添付図面を参照して例示的な実施形態を詳細に説明したが、本発明はこれらの厳密な実施形態に限定されず、添付の特許請求の範囲によって規定される本発明の範囲から逸脱することなく、さまざまな変更、追加および修正が当業者によって実施され得ることが理解されるべきである。たとえば、従属請求項の特徴のさまざまな組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴によって行うことができる。
図1
図2
図3
図4A
図4B
図5A
図5B
図6A
図6B
図7A
図7B
図8
図9A
図9B
図10
図11
図12
図13
図14
図15A
図15B
図16
図17
図18
図19
図20
図21
図22