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