(57)【要約】  データ処理装置において行列乗算を実行するための装置、行列乗算命令、装置を動作させる方法、及び仮想マシン実施を含む技術が開示される。少なくとも４つのデータ要素を記憶するための各レジスタは、行列乗算命令によって参照され、行列乗算命令に応答して、行列乗算演算が実行される。データ要素の第１及び第２の行列が、第１及び第２ソース・レジスタから抽出され、第１の行列のそれぞれの行及び第２の行列のそれぞれの列に作用する複数の点乗積演算が実行され、結果データ要素の正方行列が生成され、これらは宛先レジスタに適用される。所定の数のレジスタ・オペランドのより高い計算密度が、要素毎ベクトル技術に関して達成される。
2020527778.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
複数のレジスタを有するレジスタ記憶回路構成であって、各レジスタは、少なくとも４つのデータ要素を記憶する、レジスタ記憶回路構成と、
行列乗算命令に応答して制御信号を生成する復号器回路構成であって、前記行列乗算命令は、前記複数のレジスタにおいて、第１のソース・レジスタ、第２のソース・レジスタ、及び宛先レジスタを指定する、復号器回路構成と、
前記制御信号に応答して、行列乗算演算を実行するデータ処理回路構成とを備え、前記行列乗算演算は、
前記第１のソース・レジスタからデータ要素の第１の行列を抽出することと、
前記第２のソース・レジスタからデータ要素の第２の行列を抽出することと、
結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の前記正方行列のそれぞれの結果データ要素を生成するために、データ要素の前記第１の行列のそれぞれの行と、データ要素の前記第２の行列のそれぞれの列とに作用する、実行することと、
結果データ要素の前記正方行列を、前記宛先レジスタに適用することとを含む、装置。
【請求項２】
結果データ要素の前記正方行列を、前記宛先レジスタに適用することは、結果データ要素の前記正方行列を前記宛先レジスタに記憶することを含む、請求項１に記載の装置。
【請求項３】
結果データ要素の前記正方行列を、前記宛先レジスタに適用することは、結果データ要素の前記正方行列を、前記宛先レジスタに記憶された結果データ要素の以前に記憶された正方行列とともに累積することを含む、請求項１に記載の装置。
【請求項４】
データ要素の前記第１の行列の各データ要素と、データ要素の前記第２の行列の各データ要素は、結果データ要素の前記正方行列の各データ要素の結果要素のビット長に等しいソース要素のビット長を有する、請求項１から３までのいずれか一項に記載の装置。
【請求項５】
データ要素の前記第１の行列の各データ要素と、データ要素の前記第２の行列の各データ要素は、結果データ要素の前記正方行列の各データ要素の結果要素のビット長とは異なるソース要素のビット長を有する、請求項１から３までのいずれか一項に記載の装置。
【請求項６】
前記ソース要素のビット長が、前記結果要素のビット長と２倍異なる、請求項５に記載の装置。
【請求項７】
前記ソース要素のビット長が、前記結果要素のビット長と２倍よりも大きく異なる、請求項５に記載の装置。
【請求項８】
前記行列乗算命令は、結果データ要素の前記正方行列の次元を指定する、請求項１から７までのいずれか一項に記載の装置。
【請求項９】
データ要素の前記第１の行列の前記データ要素、データ要素の前記第２の行列の前記データ要素、及び結果データ要素は、浮動小数点値である、請求項１から８までのいずれか一項に記載の装置。
【請求項１０】
データ要素の前記第１の行列の前記データ要素、データ要素の前記第２の行列の前記データ要素、及び結果データ要素は、整数値である、請求項１から８までのいずれか一項に記載の装置。
【請求項１１】
データ要素の前記第１の行列の前記データ要素、データ要素の前記第２の行列の前記データ要素、及び結果データ要素は、符号のない整数値である、請求項１０に記載の装置。
【請求項１２】
データ要素の前記第１の行列の前記データ要素、データ要素の前記第２の行列の前記データ要素、及び結果データ要素は、符号付きの整数値である、請求項１０に記載の装置。
【請求項１３】
データ要素の前記第１の行列と、データ要素の前記第２の行列は、正方行列である、請求項１から１２までのいずれか一項に記載の装置。
【請求項１４】
データ要素の前記第１の行列と、データ要素の前記第２の行列は、非正方の長方行列である、請求項１から１２までのいずれか一項に記載の装置。
【請求項１５】
前記復号器回路構成はさらに、構成命令に応答して構成制御信号を生成し、前記構成命令は、最大ベクトル長を指定し、前記データ処理回路構成は、前記構成制御信号に応答して、前記結果データ要素の合計サイズが、前記最大ベクトル長を超えないように、後続する行列乗算演算に制約を課す、請求項１から１４までのいずれか一項に記載の装置。
【請求項１６】
前記後続する行列乗算演算に制約を課すことは、前記結果データ要素の合計サイズが、前記最大ベクトル長を超えない次元を有する結果データ要素の前記正方行列の生成を含む、請求項１５に記載の装置。
【請求項１７】
前記後続する行列乗算演算に制約を課すことは、前記結果データ要素の合計サイズが、前記最大ベクトル長を超えない、結果データ要素の正方行列の数を生成することを含む、請求項１５に記載の装置。
【請求項１８】
前記結果要素の合計サイズが、前記宛先レジスタの記憶容量未満である、請求項１５から１７までのいずれか一項に記載の装置。
【請求項１９】
前記行列乗算命令において指定された次元を有する結果データ要素の前記正方行列は、前記宛先レジスタの記憶容量に対応する、請求項８に記載の装置、又は、請求項８に従属する場合、請求項９から１８までのいずれか一項に記載の装置。
【請求項２０】
前記宛先レジスタは、少なくとも８つのデータ要素を収容し、結果データ要素の少なくとも第２の正方行列を記憶するための記憶容量を有する、請求項１から１８までのいずれか一項に記載の装置。
【請求項２１】
前記宛先レジスタの記憶容量は、前記行列乗算命令で指定された次元を有する結果データ要素の１つよりも多くの正方行列を記憶できる、請求項８に記載の装置、又は、請求項８に従属する場合、請求項９から１８までのいずれか一項に記載の装置。
【請求項２２】
前記データ処理回路構成は、前記制御信号に応答して、結果データ要素の前記正方行列を、前記宛先レジスタの第１の部分に適用する、請求項２０又は２１に記載の装置。
【請求項２３】
前記宛先レジスタの前記第１の部分は、前記データ処理回路構成のために事前に決定される、請求項２２に記載の装置。
【請求項２４】
前記行列乗算命令はさらに、前記宛先レジスタの前記第１の部分を指定する、請求項２２に記載の装置。
【請求項２５】
前記データ処理回路構成はさらに、前記制御信号に応答して、第２の行列乗算演算を実行して、結果データ要素の前記第２の正方行列を生成し、結果データ要素の前記第２の正方行列を、前記宛先レジスタの第２の部分に適用する、請求項２０に従属する場合、請求項２２から２４までのいずれか一項に記載の装置。
【請求項２６】
前記第１のソース・レジスタからのデータ要素の前記第１の行列は、前記第１のソース・レジスタの第１の部分から抽出され、前記データ処理回路構成は、前記制御信号に応答して、
前記第２のソース・レジスタの第１の部分から、データ要素の前記第２の行列を抽出することと、
結果データ要素の前記正方行列を、前記宛先レジスタの第１の部分に適用することとを含む第１の行列乗算演算として前記行列乗算演算を実行し、
前記データ処理回路構成は、前記制御信号に応答して、
前記第２のソース・レジスタの第２の部分から、データ要素の前記第２の行列を抽出することと、
結果データ要素の前記正方行列を、前記宛先レジスタの前記第２の部分に適用することとを含む前記第２の行列乗算演算を実行する、請求項２５に記載の装置。
【請求項２７】
前記データ処理回路構成は、前記制御信号に応答して、
前記第１のソース・レジスタの第１の部分から、データ要素の前記第１の行列を抽出することと、
前記第２のソース・レジスタの第１の部分から、データ要素の前記第２の行列を抽出することと、
結果データ要素の前記正方行列を、前記宛先レジスタの第１の部分に適用することとを含む第１の行列乗算演算として前記行列乗算演算を実行し、前記データ処理回路構成は、前記制御信号に応答して、
前記第１のソース・レジスタの第２の部分から、データ要素の前記第１の行列を抽出することと、
前記第２のソース・レジスタの第２の部分から、データ要素の前記第２の行列を抽出することと、
結果データ要素の前記正方行列を、前記宛先レジスタの前記第２の部分に適用することとを含む前記第２の行列乗算演算を実行する、請求項２５に記載の装置。
【請求項２８】
前記第１のソース・レジスタの前記第１の部分は、前記データ処理回路構成のために事前に決定される、請求項２６又は２７に記載の装置。
【請求項２９】
前記行列乗算命令はさらに、前記第１のソース・レジスタの前記第１の部分を指定する、請求項２６又は２７に記載の装置。
【請求項３０】
前記データ処理回路構成はさらに、前記制御信号に応答して、少なくとも１つのさらなる行列乗算演算を実行し、結果データ要素の少なくともさらなる正方行列を生成する、請求項２６から２９までのいずれか一項に記載の装置。
【請求項３１】
前記復号器回路構成は、前記行列乗算命令に先行するコピー・ロード命令に応答して、メモリ位置及び前記第１のソース・レジスタを指定して、コピー・ロード制御信号を生成し、前記データ処理回路構成は、前記コピー・ロード制御信号に応答して、
データ要素の前記第１の正方行列を、前記指定されたメモリ位置から、前記第１のソース・レジスタの前記第１の部分にロードすることと、
データ要素の前記第１の正方行列を、前記第１のソース・レジスタの前記第２の部分にコピーすることであって、前記第２のソース・レジスタからのデータ要素の前記第２の行列は、前記第２のソース・レジスタの前記第１の部分から抽出される、コピーすることと、を含むコピー・ロード動作を実行する、請求項２６から３０までのいずれか一項に記載の装置。
【請求項３２】
前記第１のソース・レジスタの前記第１の部分は、前記第１のソース・レジスタの第１の半分であり、前記第２のソース・レジスタの前記第１の部分は、前記第２のソース・レジスタの第１の半分であり、前記宛先レジスタの前記第１の部分は、前記宛先レジスタの第１の半分である、請求項２６から３１までのいずれか一項に記載の装置。
【請求項３３】
前記データ処理回路構成はさらに、レジスタ内容スワッピング命令に応答して、レジスタ内容スワッピング動作を実行し、前記第１のソース・レジスタ及び前記第２のソース・レジスタの一方の前記第１の半分と第２の半分との内容を交換する、請求項２７に従属する場合、請求項３２に記載の装置。
【請求項３４】
前記データ処理回路構成はさらに、前記制御信号に応答して、前記第１の行列乗算演算の後、前記第２の行列乗算演算の前に、レジスタ内容スワッピング動作を実行して、前記第１のソース・レジスタ及び前記第２のソース・レジスタの一方の前記第１の半分と第２の半分との内容を交換する、請求項２７に従属する場合、請求項３２に記載の装置。
【請求項３５】
前記行列乗算命令は、前記レジスタ内容スワッピング動作が実行されるべきか否かを指定する、請求項３４に記載の装置。
【請求項３６】
前記行列乗算命令は、前記第１のソース・レジスタと前記第２のソース・レジスタのどちらが前記レジスタ内容スワッピング動作の対象となるべきかを指定する、請求項３４又は３５に記載の装置。
【請求項３７】
前記行列乗算命令がさらに、第３のソース・レジスタを指定し、前記行列乗算演算は、前記第１のソース・レジスタ及び前記第３のソース・レジスタから、データ要素の前記第１の行列を抽出することを含む、請求項１から３６までのいずれか一項に記載の装置。
【請求項３８】
前記行列乗算命令はさらに、第４のソース・レジスタを指定し、前記行列乗算演算は、前記第２のソース・レジスタ及び前記第４のソース・レジスタから、データ要素の前記第２の行列を抽出することを含む、請求項１から３７までのいずれか一項に記載の装置。
【請求項３９】
前記行列乗算命令はさらに、さらなる宛先レジスタを指定し、前記行列乗算演算は、前記宛先レジスタと、前記さらなる宛先レジスタとの間の結果データ要素分割の前記正方行列を適用することを含む、請求項１から３８までのいずれか一項に記載の装置。
【請求項４０】
データ処理装置を動作させる方法であって、
行列乗算命令に応答して制御信号を生成することであって、前記行列乗算命令は、複数のレジスタにおいて、第１のソース・レジスタ、第２のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも４つのデータ要素を記憶することができる、生成することと、
前記制御信号に応答して、行列乗算演算を実行することとを含み、前記行列乗算演算は、
前記第１のソース・レジスタからデータ要素の第１の行列を抽出することと、
前記第２のソース・レジスタからデータ要素の第２の行列を抽出することと、
結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の前記正方行列のそれぞれの結果データ要素を生成するために、データ要素の前記第１の行列のそれぞれの行と、データ要素の前記第２の行列のそれぞれの列とに作用する、実行することと、
結果データ要素の前記正方行列を、前記宛先レジスタに適用することとを含む、方法。
【請求項４１】
装置であって、
行列乗算命令に応答して制御信号を生成するための手段であって、
前記行列乗算命令は、複数のレジスタにおいて、第１のソース・レジスタ、第２のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも４つのデータ要素を記憶することができる、生成するための手段と、
前記制御信号に応答して、行列乗算演算を実行するための手段とを備え、実行するための手段は、
前記第１のソース・レジスタからデータ要素の第１の行列を抽出するための手段と、
前記第２のソース・レジスタからデータ要素の第２の行列を抽出するための手段と、
結果データ要素の正方行列を生成するために、複数の点乗積演算を実行するための手段であって、各点乗積演算は、結果データ要素の前記正方行列のそれぞれの結果データ要素を生成するために、データ要素の前記第１の行列のそれぞれの行と、データ要素の前記第２の行列のそれぞれの列とに作用する、実行するための手段と、
結果データ要素の前記正方行列を、前記宛先レジスタに適用するための手段とを備えた、装置。
【請求項４２】
請求項１から３９までのいずれか一項に記載の装置に対応する命令実行環境を提供するようにホスト・データ処理装置を制御するためのプログラム命令を含む仮想マシン・コンピュータ・プログラム。
【請求項４３】
請求項４０に記載の方法が実行される命令実行環境を提供するようにホスト・データ処理装置を制御するためのプログラム命令を含む仮想マシン・コンピュータ・プログラム。
【請求項４４】
請求項４２又は４３に記載の仮想マシン・コンピュータ・プログラムが非一時的な様式で記憶されるコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理装置に関する。より具体的には、本開示は、データ処理装置における行列乗算のパフォーマンスに関する。
【背景技術】
【０００２】
現代のデータ処理装置は通常、データ処理装置のデータ処理動作の主題であるデータ値を保持できる多数のレジスタを備える。データ処理装置は、このようなレジスタの内容を値の配列として扱い、たとえば、レジスタが５１２ビットを保持する記憶容量を有する場合、データ処理装置はこれを１６の３２ビット値の配列として扱い得る。データ処理装置は、その後、たとえば、その配列の個々に指定された要素へ、又は、たとえば、指定された値で各要素を乗じるために、ＳＩＭＤ（単一命令複数データ（ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ  ｄａｔａ））方式で、値の配列のそれぞれの要素に、データ処理動作を適用することができる。
【発明の概要】
【課題を解決するための手段】
【０００３】
１つの例示的な実施例では、装置が存在し、この装置は、複数のレジスタを有するレジスタ記憶回路構成であって、各レジスタは、少なくとも４つのデータ要素を記憶する、レジスタ記憶回路構成と、行列乗算命令に応答して制御信号を生成する復号器回路構成であって、行列乗算命令は、複数のレジスタにおいて、第１のソース・レジスタ、第２のソース・レジスタ、及び宛先レジスタを指定する、復号器回路構成と、制御信号に応答して、行列乗算演算を実行するデータ処理回路構成とを備え、行列乗算演算は、第１のソース・レジスタからデータ要素の第１の行列を抽出することと、第２のソース・レジスタからデータ要素の第２の行列を抽出することと、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第１の行列のそれぞれの行と、データ要素の第２の行列のそれぞれの列とに作用する、実行することと、結果データ要素の正方行列を、宛先レジスタに適用することとを含む。
【０００４】
別の例示的な実施例では、データ処理装置を動作させる方法があり、この方法は、行列乗算命令に応答して制御信号を生成することであって、行列乗算命令は、複数のレジスタにおいて、第１のソース・レジスタ、第２のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも４つのデータ要素を記憶することができる、生成することと、制御信号に応答して、行列乗算演算を実行することとを含み、行列乗算演算は、第１のソース・レジスタからデータ要素の第１の行列を抽出することと、第２のソース・レジスタからデータ要素の第２の行列を抽出することと、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第１の行列のそれぞれの行と、データ要素の第２の行列のそれぞれの列とに作用する、実行することと、結果データ要素の正方行列を、宛先レジスタに適用することとを含む。
【０００５】
別の例示的な実施例では、装置が存在し、この装置は、行列乗算命令に応答して制御信号を生成するための手段であって、行列乗算命令は、複数のレジスタにおいて、第１のソース・レジスタ、第２のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも４つのデータ要素を記憶することができる、生成するための手段と、制御信号に応答して、行列乗算演算を実行するための手段とを備え、実行するための手段は、第１のソース・レジスタからデータ要素の第１の行列を抽出するための手段と、第２のソース・レジスタからデータ要素の第２の行列を抽出するための手段と、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行するための手段であって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第１の行列のそれぞれの行と、データ要素の第２の行列のそれぞれの列とに作用する、実行するための手段と、結果データ要素の正方行列を、宛先レジスタに適用するための手段とを備える。
【０００６】
本技術はさらに、添付の図面に例示されるその実施例を参照して、単なる実例として記載される。
【図面の簡単な説明】
【０００７】
【図１】本技術の様々な実例を具現化し得るデータ処理装置を概略的に例示する図である。
【図２Ａ】ソース・レジスタＡからの指定された要素と、ソース・レジスタＢからの値の配列とを使用して、アキュムレータ・レジスタＣに記憶するための４つの要素を生成するための要素毎ベクトル（ｖｅｃｔｏｒ−ｂｙ−ｅｌｅｍｅｎｔ）技術を概略的に例示する図である。
【図２Ｂ】本技術の１つの実施例を概略的に例示する図であり、本技術に従って、宛先レジスタＣに累積される要素の正方行列を生成するために、ソース・レジスタＡから取得されたデータ要素の正方行列が、ソース・レジスタＢから取得された要素の正方行列によって乗じられる、図である。
【図３】図２Ｂに示されるような行列乗算演算をサポートするために１つの実施例で提供される回路構成を概略的に例示する図である。
【図４】４×４行列が４×４行列の対の乗算により生成される本技術の１つの実施例を例示する図である。
【図５】ソース要素サイズが結果要素サイズと異なり、２×２行列を生成するために、要素の２×８行列が、要素の８×２行列によって乗じられる本技術の実施例を例示する図である。
【図６】本技術に従って４×４行列を形成するために、互いに乗じられる一対の４×４行列を概略的に例示する図である。
【図７Ａ】図６に例示されるものと同じソース・レジスタ及び宛先レジスタについて、本技術に従う４つの別個の２×２行列乗算のパフォーマンスを概略的に例示する図である。
【図７Ｂ】１つの実施例において図７Ａの実例を実施する回路構成のさらなる詳細を概略的に例示する図である。
【図８】本技術の１つの実施例において、ソフトウェアで定義された最大ベクトル長を課すことと、２つの２×２行列乗算が実行されるように、図６及び図７に例示されるものと同じソース・レジスタ及び宛先レジスタの使用制限とを概略的に例示する図である。
【図９】８×８行列を生成するために、２×８行列によって乗じられる８×２行列を概略的に示し、４×４行列を生成するために、４×２行列と２×４行列との４つの行列乗算演算のパフォーマンスを等価的に例示する図である。
【図１０】指定された宛先レジスタの一部のみを占める正方結果行列を生成するために使用される本技術によって提供される命令と、その部分が命令内で指定される変形とを概略的に例示する図である。
【図１１Ａ】ソース・レジスタの一部からオペランド行列を抽出し、その行列を、別のソース・レジスタのそれぞれの部分から取得した行列とともに使用して行列乗算演算を実行し、２つの結果正方行列を生成する、本技術によって提供される命令の動作を概略的に例示する図である。
【図１１Ｂ】おのおのから２つのそれぞれの平方ソース行列を提供するために使用され、互いに乗じられて２つの平方結果行列を生成する、２つのソース・レジスタのそれぞれの部分を概略的に例示する図である。
【図１１Ｃ】データ値が、指定されたメモリ位置からロードされ、宛先レジスタの各半分にコピーされる本技術によって使用されるコピー・ロード動作を概略的に例示する図である。
【図１１Ｄ】１つの実施例において図１１Ａ及び図１１Ｂの実例をサポートするいくつかの回路構成の実例的な詳細を概略的に例示する図である。
【図１２Ａ】指定されたソース・レジスタの２つの半分の内容の交換が、命令にフラグを設定するか設定しないことにより選択的に実行され得る、本技術により提供される命令の動作を概略的に例示する図である。
【図１２Ｂ】指定されたソース・レジスタの２つの半分の内容の交換が、命令にフラグを設定するか設定しないことにより選択的に実行され得る、本技術により提供される命令の動作を概略的に例示する図である。
【図１２Ｃ】１つの実施例において図１２Ａ及び図１２Ｂの実例をサポートするいくつかの回路構成の例示的な詳細を概略的に例示する図である。
【図１３】行列乗算のための１つのオペランド行列が２つのソース・レジスタにより提供される、本技術による行列乗算演算のパフォーマンスを概略的に例示する図である。
【図１４】図１３に示される技術の変形を概略的に例示し、両オペランド行列が、２つのソース・レジスタによって提供され、結果として得られる正方行列が、２つの宛先レジスタにわたって記憶される図である。
【図１５】使用され得る仮想マシン実施を概略的に例示する図である。
【図１６】１つの実施例の方法に従って行われる一連のステップを示す図である。
【発明を実施するための形態】
【０００８】
少なくともいくつかの実施例は、装置を提供し、この装置は、複数のレジスタを有するレジスタ記憶回路構成であって、各レジスタは、少なくとも４つのデータ要素を記憶する、レジスタ記憶回路構成と、行列乗算命令に応答して制御信号を生成する復号器回路構成であって、行列乗算命令は、複数のレジスタにおいて、第１のソース・レジスタ、第２のソース・レジスタ、及び宛先レジスタを指定する、復号器回路構成と、制御信号に応答して、行列乗算演算を実行するデータ処理回路構成とを備え、行列乗算演算は、第１のソース・レジスタからデータ要素の第１の行列を抽出することと、第２のソース・レジスタからデータ要素の第２の行列を抽出することと、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第１の行列のそれぞれの行と、データ要素の第２の行列のそれぞれの列とに作用する、実行することと、結果データ要素の正方行列を、宛先レジスタに適用することとを含む。
【０００９】
本技術は、行列乗算命令、及びその命令に応答する装置内の対応する回路構成を提供することにより、装置のレジスタに保持された行列要素を表すデータ値を使用して行列乗算演算のパフォーマンスを促進し、これは、命令で指定されたレジスタの内容が、データ要素の行列として取り扱われるアプローチを実施する。このようにして、行列乗算命令に応答して、データ処理回路構成は、指定された第１及び第２のソース・レジスタからそれぞれ、データ要素の第１及び第２の行列を抽出する。さらに、データ処理回路構成は、その後、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行する。行列乗算の性質から、これら点乗積演算のおのおのは、データ要素の一方のオペランド行列のそれぞれの行と、データ要素の他方のオペランド行列のそれぞれの列とを参照して、正方行列のそれぞれの結果データ要素に対して実行されることが理解されよう。結果として得られる行列は正方であり、すなわち、（２×２構成において）少なくとも４つのデータ要素を備えているが、本技術は、結果データ要素の任意の正方行列（すなわち、３×３、４×４、５×５等）の生成に適用可能であることが留意されるべきである。結果として得られる生成された結果データ要素の結果の正方行列は、命令で指定された宛先レジスタに適用され、その宛先レジスタが保持する行列表現は装置によって理解される。
【００１０】
さらに、本技術によって採用されるアプローチは、表現の単なる１つ、すなわち、所定のレジスタの内容の意味的意味の恣意的な選択ではないことが留意されるべきである。これは、レジスタが複数のデータ要素を保持するデータ処理装置において行列乗算を実行する代替技術を参照して理解され得る。この代替技術では、２つのソース・レジスタの内容に対して「要素毎ベクトル」演算を実行することにより、様々な行列乗算が実行され得、ここで、指定された要素は１つのソース・レジスタから抽出され、要素のベクトルは別のソース・レジスタから抽出される。このようにして、単一の行列行（又は、同等に単一の行列列）の生成に対応する点乗積演算が実行され得る。その後、結果行列のさらなる行（又は列）に対応して、このような演算が実行され得る。しかしながら、本技術は、この代替技術の実施と、本技術の実施とのさらなる相違は、ベクトルが４つの要素を備えている実例に適用された場合、記載された要素毎ベクトル演算は、通常、（２つのソース・レジスタ及び宛先アキュムレータ・レジスタに対応する）３つのベクトル読取りと、４つの並列的な乗累積演算（ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ  ｏｐｅｒａｔｉｏｎ）（すなわち、結果行列の行に対応する、生成されたベクトルにおける各要素の生成について１つ）と、（生成されたベクトルを宛先レジスタへ書き込むことに対応する）最終的な１つのベクトル書込みとを含むことを認識する。これは、本技術に従う行列乗算命令が使用される状況と比較され得、ここでは、結果データ要素の正方行列を生成するために、第１のソース・レジスタからのデータ要素の第１の行列は、第２のソース・レジスタからのデータ要素の第２の行列によって乗じられ、その後、（いくつかの実施例では）指定された宛先レジスタに累積され得る。したがって、上述した代替技術と同様に、この実例における本技術の実施はまた、（２つのソース・レジスタのおのおののためと、アキュムレータ宛先レジスタのための）３つのベクトル読取りと、（累積の結果を、宛先アキュムレータ・レジスタへ書き戻すための）１つのベクトル書込みとを必要とする。しかしながら、行列乗算の実施では、本技術の行列乗算命令は８つの演算を開始する（すなわち、２×２正方行列の生成のこの実例では、結果正方行列における各結果データ要素に対して２つのデータ要素乗算が実行され、これは、行列内のこの位置の既存の値で累積される値を生成するために、ともに総和される）。したがって、同じレジスタ・アクセスについて、本技術は、より高密度の乗累積演算を実施する。さらに、２×２正方行列の生成の上述した実例において、この乗累積演算の密度が倍加されるが、この比は、生成される正方行列のサイズに比例することが留意されるべきである。たとえば、結果データ要素の４×４正方行列を生成する際に、本技術の命令は、６４の乗累積演算を、言い換えれば、同じ数のレジスタ・アクセスについて、要素毎ベクトルによるアプローチよりも４倍多くの乗累積を開始する。
【００１１】
本技術は、結果データ要素の正方行列を、行列乗算命令で指定された宛先レジスタに適用することを提案し、これは多くの手法で実行され得る。いくつかの実施例では、結果データ要素の正方行列を、宛先レジスタに適用することは、結果データ要素の正方行列を宛先レジスタに記憶することを含む。言い換えると、結果データ要素の正方行列は、その宛先レジスタのいかなる既存の内容にも関係なく、宛先レジスタに直接記憶され、その内容を上書きし得る。装置によって実行されるデータ処理動作の性質に応じて、宛先レジスタの既存の内容を考慮する必要がある場合と、ない場合とがある。したがって、宛先レジスタの内容が考慮されるべき他の実例、特に宛先レジスタが、対応するデータ要素の正方行列を既に保持している場合、結果データ要素の生成された正方行列が、宛先レジスタに保持されている既存の正方行列を使用して累積されるべきであり、したがって、いくつかの実施例では、結果データ要素の正方行列を、宛先レジスタに適用することは、結果データ要素の正方行列を、宛先レジスタに記憶された結果データ要素の以前に記憶された正方行列とともに累積することを含む。
【００１２】
ソース・レジスタ又は宛先レジスタのいずれかの内容が解釈される方式のさらなる柔軟性も提案されている。特に、（第１及び第２のソース・レジスタから取得された）データ要素の第１及び第２の行列のデータ要素のビット長は、結果データ要素の正方行列のデータ要素のビット長と同じである必要はないと提案されている。それにも関わらず、いくつかの実施例では、これらは実際に同じであり得る。したがって、いくつかの実施例では、データ要素の第１の行列の各データ要素と、データ要素の第２の行列の各データ要素は、結果データ要素の正方行列の各データ要素の結果要素のビット長に等しいソース要素のビット長を有する。逆に、他の実施例では、データ要素の第１の行列の各データ要素と、データ要素の第２の行列の各データ要素は、結果データ要素の正方行列の各データ要素の結果要素のビット長とは異なるソース要素のビット長を有する。たとえば、１つの例示的な実例を挙げると、１２８ビットのレジスタを使用するデータ処理装置において、３２ビットのデータ要素の２×２行列を表す、３２ビットのデータ要素の正方行列が記憶され得る。このような結果正方行列は、２つの２×２行列の行列乗算によって実際に生成され得るが、これらソース行列の要素もまた、３２ビットのデータ要素であり、本技術は、結果データ要素のこの正方行列もまた、１６ビットのデータ要素を有する２つのソース行列の行列乗算によって生成され得る（すなわち、１６ビットのデータ要素の２×４行列が、１６ビットのデータ要素の４×２行列によって乗じられた結果、３２ビットのデータ要素の２×２行列となる）ことも提案する。同様に、３２ビットのデータ要素のこの２×２結果行列は、８ビットのデータ要素の２×８行列と８×２行列の乗算によっても生成され得る。
【００１３】
したがって、さらに本技術は、ソース要素のビット長が、結果要素のビット長と２倍異なり得ることを想定しているが、いくつかの実施例では、ソース要素のビット長が、結果要素のビット長と２倍よりも大きく異なり得ることを想定していることが認識されるべきである。実際、本技術によって提案される命令が実施されるべき文脈に応じて、本技術は、ソース要素のビット長が、実際に単に単一ビット、すなわち、ソース・オペランド行列における１ビットのデータ要素さえも想定していることが留意されるべきである。また、入力データ値の精度がほとんど重要ではない文脈に自明的に適合するこのような実例は、３要素での実施（したがって、ここでは、ソース要素は、−１、０、１のセットから値を取得し得る）も想定されているが、本技術によってサポートされている並列処理は、はるかに関連性が高い場合がある。
【００１４】
実施に応じて、データ要素の事前決定されたビット長があり得、これに従って、装置は、本技術を実施する際に使用するソース・レジスタ又は宛先レジスタのいずれかの内容を解釈する。しかしながら、上記議論で強調されているように、このビット長には柔軟性もあり得る。さらに、結果データ要素の正方行列のデータ要素の所定のビット長に対して、これは宛先レジスタのサイズに直接対応し得る場合もあり得るが、本技術はさらに、結果要素の正方行列の次元が、行列乗算命令で指定されるバリエーションを提供する。たとえば、これにより、結果データ要素の正方行列が、宛先レジスタの全容量よりも小さい行列乗算演算を実行できる。さらに、装置が、所定のベクトル長を有する実例では、所定のベクトル長に一致するように、結果要素の正方行列の特定の次元を指定する行列乗算命令は、サポート可能な結果要素の正方行列の次元における上限を表すであろう。したがって、たとえば、１２８ビットのベクトル長の装置では、これは、４つの３２ビットのデータ要素の正方行列を生成する演算を実行する必要がある行列乗算命令が実行されることを可能にするが、１６の８ビットのデータ要素の正方行列（すなわち、４×４の正方行列）が生成される、さらなる可能性があるであろう。しかしながら、４つの３２ビットのデータ要素の１つの正方行列が、１２８ビットのベクトル長の装置で生成され得る行列のサイズの上限（少なくとも４つの要素を必要とする）を表す場合、この命令は、より大きなベクトルをサポートする別の装置でも実行され得、１２８ビットのベクトル長の装置用に記述されたプログラムが、同じ又はより大きなベクトル長の他の装置間で移植可能であるという利点を与える。実際、装置の根本となるアーキテクチャが、英国ケンブリッジのＡＲＭ（登録商標）社によって提供されるＡＲＭｖ８−Ａアーキテクチャのためのスケーラブル・ベクトル・エクステンション（ＳＶＥ：Ｓｃａｌａｂｌｅ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎ）によって提供されるような、可変（「スケーラブル」）ベクトル長を有すると定義され得る場合、したがって装置の範囲が、その後構築され得ることがあり、可能なベクトル長の範囲であるが、そのアーキテクチャにすべて同等に準拠し、したがって、これら装置は、異なるベクトル長を有し得る場合であっても、同じ命令が、これら装置のいずれかで一貫して実行される。
【００１５】
さらに、結果データ要素の正方行列の次元を指定する行列乗算命令の機能によりさらに、結果データ要素の正方行列が必ずしも宛先レジスタの容量を満たさない上述した変形をサポートできる。たとえば、再び１２８ビットのベクトル長の実例を使用すると、これは、８ビットのデータ要素の４×４行列を収容できるが、行列乗算命令は、実行される行列乗算演算を、２×２正方結果行列の生成に限定し、したがって、４つの８ビットのデータ要素が、その後、（容量の４分の１のみを占有する）ベクトル長に記憶され得ることも想定される。
【００１６】
データ要素の第１の行列のデータ要素、データ要素の第２の行列、及び行列乗算演算から生じるデータ要素は、様々な形態をとり得る。いくつかの実施例では、これらは浮動小数点値であり得るが、他の実施例では、整数値であり得る。これら整数値は、符号なしでも符号付きでもよい。
【００１７】
上記議論から、ソース行列（すなわち、データ要素の第１の行列と、データ要素の第２の行列）は、特にこれら行列のそれぞれの次元に関して、様々な形態及び構成を取り得ることが理解されよう。したがって、いくつかの実施例では、データ要素の第１の行列と、データ要素の第２の行列は、正方行列である。他の実施例では、データ要素の第１の行列と、データ要素の第２の行列は、非正方の長方行列である。
【００１８】
装置において定義されたベクトル長を使用することは、多数のデータ要素を記憶するデータ処理ベクトル・レジスタ（ここでは、ともに「ベクトル」と称される）が、この長さを超えない処理のためのベクトルのみを保持できることを意味し、通常、ベクトルの構成データ要素の合計サイズに制約を課し、合計で、そのベクトル長の合計サイズを超えることはできない。それにも関わらず、上記のように、利用可能なベクトル長は、装置ごとに異なる場合があり、ここでもまた、様々なベクトル長で実行できる移植可能なソフトウェアを有する利点がある。
【００１９】
これに関連して、本技術は、処理するベクトル長を制限するようにユーザが装置を構成し得る実施例を想定している。言い換えると、装置のプログラマは、許可された最大ベクトル長を有するように構成でき、装置で実行される後続のデータ処理動作は、課された最大ベクトル長を遵守する必要がある。したがって、いくつかの実施例では、復号器回路構成はさらに、構成命令に応答して構成制御信号を生成し、構成命令は、最大ベクトル長を指定し、データ処理回路構成は、構成制御信号に応答して、結果データ要素の合計サイズが、最大ベクトル長を超えないように、後続する行列乗算演算に制約を課す。たとえば、装置が「５１２」ビットなどの「ネイティブ」なベクトル長を有する状況では、この構成命令により、ソフトウェア制限を、装置によって実行されるデータ処理動作に適用できるようになり、これに従って、たとえば、２５６ビットの最大ベクトル長に制限され得る。したがって、この制約下で実行するソフトウェアの一部が、２５６ビットのベクトルを想定している場合、最大ベクトル長を課すメカニズムを使用して、それがより長いベクトル、たとえば、上述した実例における５１２ビットのネイティブなベクトル長、又は２５６ビットの制限よりも長い他の任意のベクトル長をたまたま有する装置で実行されることを保証することもできる。
【００２０】
この種のソフトウェアによって最大ベクトル長を課すことは、様々な手法で（最大ベクトル長に関して）後続する行列乗算演算に制約を課し得る。たとえば、いくつかの実施例では、後続する行列乗算演算に制約を課すことは、結果データ要素の合計サイズが、最大ベクトル長を超えない次元を有する結果データ要素の正方行列の生成を含む。したがって、たとえば、宛先レジスタの「ネイティブ」な容量が、データ要素の４×４行列を記憶できる場合（又は、その全容量、すなわち同じサイズのデータ要素の３×３行列又は２×２行列を占有しない場合）、データ要素の４×４行列が、定義された最大ベクトル長に対して大きすぎる場合、この状況においてソフトウェアで定義された最大ベクトル長を課すことは、データ要素の２×２又は３×３の正方行列のみが生成されるように、行列乗算演算に制約を課す。
【００２１】
代替的又は追加的に、他の実施例では、このようなソフトウェアで定義された最大ベクトル長により、結果データ要素の正方行列の数が制限される可能性がある。したがって、この時点において、本技術は、結果データ要素の正方行列の生成をもたらす行列乗算演算を実行させる行列乗算演算を提案しているが、これは行列乗算命令に応じて生成される結果データ要素のさらなる正方行列の可能性を排除しないことは注目に値する。単なる１つの実例を挙げると、宛先レジスタが、結果正方行列のサイズの２倍の容量を有する状況では、行列乗算命令に応じて行列乗算演算が実施され得る。これは、宛先レジスタの記憶容量を完全に使用するために、２つの正方行列を生成する。しかしながら、上述したソフトウェアで定義された最大ベクトル長の文脈ではさらに、これは、その後、行列乗算命令に応じて生成され得る正方行列の数に制約を課し得る。上記議論に照らして、結果要素の合計サイズは、宛先レジスタの記憶容量よりも小さい場合があることが認識される。
【００２２】
結果データ要素の正方行列の次元が、行列乗算命令で指定される実施例の文脈において、これは、宛先レジスタ容量に直接対応し得、したがって、このような実施例では、行列乗算命令において指定された次元を有する結果データ要素の正方行列は、宛先レジスタの記憶容量に対応する。
【００２３】
上述したように、本技術は、宛先レジスタの記憶容量が、結果データ要素の結果正方行列を記憶するのに必要な容量よりも大きい実施例も提案する。一般に、本技術によって使用されるレジスタはおのおの、少なくとも４つのデータ要素を記憶する容量を有しており、いくつかの実施例では、宛先レジスタは、少なくとも８つのデータ要素を収容し、結果データ要素の少なくとも第２の正方行列を記憶するための記憶容量を有する。したがって、生成された結果正方行列は、おのおの４つのデータ要素を有し得、両行列は、８つのデータ要素を記憶するための記憶容量を有する宛先に記憶され得るが、他の実例では、結果正方行列は、９つのデータ要素（３×３行列）を有し得、１８のデータ要素を収容する記憶容量を有する宛先レジスタに記憶され得るか、又は、おのおのが１６のデータ要素（４×４行列）を有する２つの正方行列が、３２のデータ要素を収容する記憶容量を有する宛先レジスタに記憶され得る、という具合である。さらに、宛先レジスタには、結果データ要素の２つよりも多くの正方行列を収容する記憶容量を有し得ることが認識される。
【００２４】
したがって、結果データ要素の正方行列の次元が、行列乗算命令で指定される実施例の文脈において、宛先レジスタの記憶容量は、行列乗算命令で指定された次元を有する結果データ要素の１つよりも多くの正方行列を記憶でき得る。
【００２５】
宛先レジスタの記憶容量が１つよりも多くの結果正方行列を記憶するのに十分な実施例では、結果データ要素の生成された正方行列は、様々な手法で宛先レジスタに適用され得る。たとえば、いくつかの実施例では、データ処理回路構成は、制御信号に応答して、結果データ要素の正方行列を、宛先レジスタの第１の部分に適用する。さらに、宛先レジスタのその第１の部分は、いくつかの手法で定義され得、いくつかの実施例では、データ処理回路構成のために事前に決定される、すなわち、データ処理回路構成は、結果データ要素の正方行列が適合する宛先レジスタの所定の部分を常に選択する一方、他の実施例では、行列乗算命令はさらに、宛先レジスタの第１の部分を指定する。言い換えれば、宛先レジスタのどの部分を使用するかの選択は、プログラマに公開され得る。宛先レジスタの第１の「部分」は、特定の状況に応じて、宛先レジスタの全記憶容量の異なる部分を表し得るが、これは、たとえば、宛先レジスタの半分又は４分の１であり得ることが認識される。
【００２６】
宛先レジスタが、結果データ要素の（すなわち、結果データ要素の正方行列の）合計サイズよりも大きな記憶容量を有する実例では、いくつかの実施例において、データ処理回路構成はさらに、制御信号に応答して、第２の行列乗算演算を実行して、結果データ要素の第２の正方行列を生成し、結果データ要素の第２の正方行列を、宛先レジスタの第２の部分に適用する。したがって、１つの行列乗算命令に応答して、１つよりも多くの行列乗算演算が実行され、１つよりも多くの結果正方行列が生成され、これは、宛先レジスタのそれぞれの部分に適用される。
【００２７】
したがって、行列乗算命令に応答して１つよりも多くの行列乗算演算が実行される場合、本技術は、これら行列乗算演算のおのおののそれぞれのソース（オペランド）行列が導出される様々な手法を想定している。たとえば、いくつかの実施例では、第１のソース・レジスタからのデータ要素の第１の行列は、第１のソース・レジスタの第１の部分から抽出され、データ処理回路構成は、制御信号に応答して、第２のソース・レジスタの第１の部分から、データ要素の第２の行列を抽出することと、結果データ要素の正方行列を、宛先レジスタの第１の部分に適用することとを含む第１の行列乗算演算として行列乗算演算を実行し、データ処理回路構成は、制御信号に応答して、第２のソース・レジスタの第２の部分から、データ要素の第２の行列を抽出することと、結果データ要素の正方行列を、宛先レジスタの第２の部分に適用することとを含む第２の行列乗算演算を実行する。
【００２８】
或いは、他の実施例では、データ処理回路構成は、制御信号に応答して、第１のソース・レジスタの第１の部分から、データ要素の第１の行列を抽出することと、第２のソース・レジスタの第１の部分から、データ要素の第２の行列を抽出することと、結果データ要素の正方行列を、宛先レジスタの第１の部分に適用することとを含む第１の行列乗算演算として行列乗算演算を実行し、データ処理回路構成は、制御信号に応答して、第１のソース・レジスタの第２の部分から、データ要素の第１の行列を抽出することと、第２のソース・レジスタの第２の部分から、データ要素の第２の行列を抽出することと、結果データ要素の正方行列を、宛先レジスタの第２の部分に適用することとを含む第２の行列乗算演算を実行する。
【００２９】
言い換えると、特定の実施に応じて、２つの行列乗算演算は、（第１のソース・レジスタの第１の部分から抽出された）同じ第１のオペランド行列を取り出し、これを、それぞれの行列乗算演算において、第２のソース・レジスタから抽出された第１及び第２の行列へ適用し得るか、又は、第１のソース・レジスタから２つのソース行列を抽出し、第２のソース・レジスタから２つのソース行列を抽出し得、これらはそれぞれ乗じられ、第１及び第２の結果行列を形成する。
【００３０】
繰り返すが、上記の説明と同様に、結果行列が適用され得る宛先レジスタの一部は、第１のソース・レジスタのそれぞれの部分が、それぞれの行列乗算演算に使用される実施例において、様々に定義及び指定され得、この第１の部分もまた、様々に定義され得る。いくつかの実施例では、第１のソース・レジスタの第１の部分は、データ処理回路構成のために事前に決定される。他の実施例では、行列乗算命令はさらに、第１のソース・レジスタの第１の部分を指定する。
【００３１】
データ処理装置が行列乗算命令に応答して、第１の行列乗算演算を実行して、第１の結果正方行列を生成し、第２の行列乗算演算を実行して、第２の結果正方行列を生成する実施例では、本技術は、実行されている単なる２つの行列乗算演算に限定されず、いくつかの実施例では、データ処理回路構成はさらに、制御信号に応答して、少なくとも１つのさらなる行列乗算演算を実行し、結果データ要素の少なくともさらなる正方行列を生成する。
【００３２】
さらに、装置が行列乗算命令に応答して１つよりも多くの行列乗算演算を実行するこのような実施例では、ソース・レジスタのそれぞれの部分を使用して、ソース行列のそれぞれのデータ要素を提供する様々な手法が存在し得るのみならず、本技術はさらに、行列乗算命令の前に実行される追加の命令の使用を提案する。これは、後続する行列乗算演算のためにソース・レジスタの１つの内容を準備する。具体的には、いくつかの実施例では、復号器回路構成は、行列乗算命令に先行するコピー・ロード命令に応答して、メモリ位置及び第１のソース・レジスタを指定して、コピー・ロード制御信号を生成し、データ処理回路構成は、コピー・ロード制御信号に応答して、データ要素の第１の正方行列を、指定されたメモリ位置から、第１のソース・レジスタの第１の部分にロードすることと、データ要素の第１の正方行列を、第１のソース・レジスタの第２の部分にコピーすることであって、第２のソース・レジスタからのデータ要素の第２の行列は、第２のソース・レジスタの第１の部分から抽出される、コピーすることと、を含むコピー・ロード動作を実行する。言い換えれば、このような実施例では、行列乗算命令が後に続くコピー・ロード命令の実行の結果として、データ要素の同じ正方行列が、その後、行列乗算命令の結果として実行される第１及び第２の行列乗算演算のおのおのにおける第１のオペランド行列として使用されることが理解されよう。
【００３３】
上述したように、その「部分」が取り出される、議論された実施例で使用され得る所定のレジスタの割合は、様々な形態を取り得るが、いくつかの特定の実施例では、第１のソース・レジスタの第１の部分は、第１のソース・レジスタの第１の半分であり、第２のソース・レジスタの第１の部分は、第２のソース・レジスタの第１の半分であり、宛先レジスタの第１の部分は、宛先レジスタの第１の半分である。
【００３４】
これら割合がそれぞれのレジスタの半分であるこのような実施例では、本技術はさらに、本技術で使用され得るレジスタ内容スワッピング命令の提供をさらに想定し、このようないくつかの実施例では、データ処理回路構成はさらに、レジスタ内容スワッピング命令に応答して、レジスタ内容スワッピング動作を実行し、第１のソース・レジスタ及び第２のソース・レジスタの一方の第１の半分と第２の半分との内容を交換する。したがって、このレジスタ内容スワッピング命令の使用により、第１及び第２のソース・レジスタの一方の半分がスワップされ得、これによって、第１の行列乗算演算が実行された後、第２の行列乗算演算が実行される前にスワップが生じ得る。これは、第１及び第２の結果正方行列を生成するために、第１及び第２のソース・レジスタのそれぞれの半分が互いに乗じられる方式に関して、さらなる程度の柔軟性を提供する。
【００３５】
それにも関わらず、本技術は、このようなレジスタ内容スワッピング命令が明示的に定義されることが不可欠であることを想定しておらず、いくつかの実施例では、データ処理回路構成はさらに、制御信号に応答して、第１の行列乗算演算の後、第２の行列乗算演算の前に、レジスタ内容スワッピング動作を実行して、第１のソース・レジスタ及び第２のソース・レジスタの一方の第１の半分と第２の半分との内容を交換する。言い換えれば、追加のレジスタ内容スワッピング命令を使用せずに、いくつかの実施例では、第１及び第２の行列乗算演算の実行中にスワッピングが自動的に実行され得る。
【００３６】
実際、いくつかの実施例では、このレジスタ・スワッピング動作が実行されるか否かは、プログラマに利用可能な選択肢であり、したがって、このような実施例では、行列乗算命令は、レジスタ内容スワッピング動作が実行されるべきか否かを指定する。さらに、いくつかの実施例では、行列乗算命令は、第１のソース・レジスタと第２のソース・レジスタのどちらがレジスタ内容スワッピング動作の対象となるべきかを指定する。
【００３７】
データ要素の第１の行列が、１対１様式で第１のソース・レジスタから抽出される、つまり、第１の行列のすべてのデータ要素が、第１のソース・レジスタからのみ抽出される場合がある。しかしながら、本技術はさらに、行列乗算命令がさらに第３のソース・レジスタを指定する実施例を提供し、ここでは、行列乗算演算が、第１のソース・レジスタ及び第３のソース・レジスタから、データ要素の第１の行列を抽出することを含む。たとえば、このような実施例では、データ要素の第１の行列の第１の半分が、第１のソース・レジスタから抽出される一方、データ要素の第１の行列の第２の半分が、第３のソース・レジスタから抽出される場合があり得る。同様の原理が、第２のソース・レジスタからのデータ要素の第２の行列の抽出に適合し、したがって、いくつかの実施例では、行列乗算命令はさらに、第４のソース・レジスタを指定し、ここでは、行列乗算演算は、第２のソース・レジスタ及び第４のソース・レジスタから、データ要素の第２の行列を抽出することを含む。実際、同じ原理が行列乗算命令における宛先レジスタの指定にも適合し、したがって、いくつかの実施例では、行列乗算命令はさらに、さらなる宛先レジスタを指定し、ここでは、行列乗算演算は、宛先レジスタとさらなる宛先レジスタとの間の結果データ要素分割の正方行列を適用することを含む。これは、行列乗算演算のソース・オペランド行列を提供するデータ要素の第１及び第２の行列のおのおのが、１つよりも多くのソース・レジスタから導出され得るという点で、本技術によって提案される行列乗算命令の使用に柔軟性のさらなる態様を提供し、生成された結果データ要素の正方行列は、１つよりも多くの宛先レジスタに等しく適用され得、したがって、これらオペランド及び結果行列のそれぞれのサイズ、及びそれらが導出される、又は適用されるそれぞれのレジスタに関して、より大きな柔軟性を提供する。
【００３８】
少なくともいくつかの実施例は、データ処理装置を動作させる方法を提供し、この方法は、行列乗算命令に応答して制御信号を生成することであって、行列乗算命令は、複数のレジスタにおいて、第１のソース・レジスタ、第２のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも４つのデータ要素を記憶することができる、生成することと、制御信号に応答して、行列乗算演算を実行することとを含み、行列乗算演算は、第１のソース・レジスタからデータ要素の第１の行列を抽出することと、第２のソース・レジスタからデータ要素の第２の行列を抽出することと、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第１の行列のそれぞれの行と、データ要素の第２の行列のそれぞれの列とに作用する、実行することと、結果データ要素の正方行列を、宛先レジスタに適用することとを含む。
【００３９】
少なくともいくつかの実施例は、装置を提供し、この装置は、行列乗算命令に応答して制御信号を生成するための手段であって、行列乗算命令は、複数のレジスタにおいて、第１のソース・レジスタ、第２のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも４つのデータ要素を記憶することができる、生成するための手段と、制御信号に応答して、行列乗算演算を実行するための手段とを備え、実行するための手段は、第１のソース・レジスタからデータ要素の第１の行列を抽出するための手段と、第２のソース・レジスタからデータ要素の第２の行列を抽出するための手段と、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行するための手段であって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第１の行列のそれぞれの行と、データ要素の第２の行列のそれぞれの列とに作用する、実行するための手段と、結果データ要素の正方行列を、宛先レジスタに適用するための手段とを備える。
【００４０】
少なくともいくつかの実施例は、上述した実施例のいずれかに従って、装置に対応する命令実行環境を提供するようにホスト・データ処理装置を制御するためのプログラム命令を含む仮想マシン・コンピュータ・プログラムを提供する。
【００４１】
少なくともいくつかの実施例は、上述した実施例のいずれかに従う方法が実行される命令実行環境を提供するようにホスト・データ処理装置を制御するためのプログラム命令を含む仮想マシン・コンピュータ・プログラムを提供する。
【００４２】
少なくともいくつかの実施例は、上述した実施例のいずれかの仮想マシン・コンピュータ・プログラムが非一時的な様式で記憶されるコンピュータ可読記憶媒体を提供する。
【００４３】
次に、いくつかの特定の実施例が、図面を参照して記載される。
【００４４】
図１は、本技術の様々な実例を具現化し得るデータ処理装置１０を概略的に例示する。データ処理装置は、実行する一連の命令に応じてデータ項目に対してデータ処理動作を実行する処理回路構成１２を備える。これら命令は、データ処理装置がアクセスしたメモリ１４から検索され、当業者が精通している方式で、この目的のためのフェッチ回路構成１６が提供される。さらに、フェッチ回路構成１６によって検索された命令は、復号回路構成１８に渡され、復号回路構成１８は、処理回路構成１２の構成及び動作の様々な態様を制御するように構成された制御信号を生成する。レジスタ２０のセット及びロード／ストア・ユニット２２も示される。一般に、処理回路構成１２は、パイプライン様式で配置され得るが、その詳細は本技術には関係ない。当業者は、図１が表す一般的な構成に精通しているので、単に簡潔さの目的のために、そのさらなる詳細な記載はここでは省略される。図１に見られ得るように、レジスタ２０はおのおの、多数のデータ要素のためのストレージを備え、これによって、処理回路構成は、データ処理動作を、指定されたレジスタ内の指定されたデータ要素に、又は、指定されたレジスタ内の指定されたデータ要素のグループ（「ベクトル」）に適用できるようになる。特に、例示されたデータ処理装置は、レジスタ２０に保持されたデータ要素で形成された行列に関する行列乗算演算のパフォーマンスに関連しており、その詳細な説明は、いくつかの特定の実施例を参照して以下により詳細に続く。命令の実行において処理回路構成１２によって必要とされるデータ値、及びそれらデータ処理命令の結果として生成されるデータ値は、ロード／ストア・ユニット２２によってメモリ１４に書き込まれ、そこから読み取られる。また、一般に、図１のメモリ１４は、通常、事前定義され、その後、処理回路構成が実行する一連の命令（「プログラム」）の一部として、本技術の命令が記憶され得るコンピュータ可読記憶媒体の実例として理解され得ることに留意されたい。しかしながら、処理回路構成は、ＲＡＭにおいて、ＲＯＭにおいて、ネットワーク・インターフェース等を経由して、種々の異なるソースからこのようなプログラムにアクセスし得る。本開示は、処理回路構成１２が実行できる様々な新規の命令を記載し、以下の図はさらに、これら命令の性質、これら命令の実行をサポートするためのデータ処理回路構成におけるバリエーション等を提供する。
【００４５】
図２Ａ及び図２Ｂは、本技術、特に、レジスタの多数のデータ要素が行列の要素の二次元配列として取り扱われるアプローチを例示する。図２Ｂの実例では、レジスタＡ、Ｂ、Ｃのおのおのにおける４つのデータ要素が、２×２行列の要素として取り扱われる。これは、レジスタＡ、Ｂ、及びＣの４つのデータ要素が、要素の単純な１次元配列として、すなわち、ベクトルとして取り扱われる図２Ａにおける例とは対照的である。１つのソース・レジスタからの１つのデータ要素（ソースＡにおける要素０）と、データ要素のベクトル（ソースＢの４つのデータ要素）とを、要素毎ベクトルによる乗累積演算のオペランドとして指定される技術を使用して、図２Ａは、レジスタＣに累積するためにどのようにしてデータ要素のベクトルが生成されるのかを示す。このデータ要素のベクトルは、たとえば行列の行を表し得、したがって、この解釈で例示されていることは、要素毎ベクトル演算によって生成される４×４結果行列の１行の計算を表すと考慮され得る。言い換えると、データ要素の完全な４×４行列の計算では、対応するさらなる３行を生成するために、さらに３つのこのような要素毎ベクトル演算を必要とする。
【００４６】
これは、レジスタのおのおののベクトルが、おのおの２×２行列を表す４つのデータ要素を保持するとして取り扱われる本技術に従って、図２Ｂで採用されるアプローチと対照的である。レジスタＣに累積される２×２行列を生成するために、ソース・レジスタＡに保持された２×２行列と、ソース・レジスタＢに保持された２×２行列を使用して、行列乗算が実行される。図２Ａ及び図２Ｂを参照して特に注意すべき点は、両方とも３つのベクトル読取りと、１つのベクトル書込み（すなわち、レジスタＡ、Ｂ、Ｃからの読取りと、レジスタＣへの書込み）を伴うことである。もちろん、ここでの「ベクトル」の読取り又は書込みに関する強調は、読取り又は書込みに関連するデータ要素の多様性であり、データ要素のグループが必ずしもベクトルを表すと解釈される必要はないことに留意されたい。なぜなら、これは、正確には、図２Ａと図２Ｂ、すなわち図２Ａにおけるベクトル解釈と、図２Ｂにおける行列解釈との比較の強調であるからである。言い換えると、図２Ａと図２Ｂとは両方とも、各読取り又は書込み動作において、最大４つのデータ要素が、読み取り又は書き込みされる、読取り及び書込み動作を表すが、図２Ａに示される動作では、これらは４つの乗累積演算を含む一方、図２Ｂでは、これらは８つの乗累積演算であることが示されることに留意されたい。これら乗累積演算は、このような計算を実施するために一般的に使用される回路構成の特定のユニットが、（１つが乗算で、１つが累積である）２つの独立したデバイスではなく、「融合乗累積」（ＦＭＡ：ｆｕｓｅｄ  ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ）デバイスであるため、本明細書では「融合乗累積」とも称されることに留意されたい。したがって、本技術によって提供される行列乗算命令は、より高い計算密度を指定できることを理解されたい。本技術は、ベクトル処理の文脈で実施され得ること、すなわち、レジスタの内容の上述した「解釈」が、そのベクトル処理のサポートを提供する装置のベクトル長の範囲内で行われることを認識することも重要である。したがって、図２Ｂの実例では、２×２行列を表す４つのデータ要素を保持するために必要な幅はベクトル長であり、例示された処理は、その後、装置がサポートできる限り多くのベクトルの別個の独立したベクトルに対して繰り返される。このベクトル処理の概念は、以下の実例のすべてに適用可能であるが、通常、図面の明確化のために、１つのベクトル長の価値のデータ値と処理のみが例示される。
【００４７】
図３は、図２Ｂに例示される動作の種類をサポートするために提供される回路構成の構成を概略的に例示する。第１のソース・レジスタ３０（Ａ）及び第２のソース・レジスタ３２（Ｂ）は、例示されるように、（復号回路構成１８により生成される関連する制御信号の制御下で）おのおのがソース・レジスタＡからの２つの入力と、ソース・レジスタＢからの２つの入力とを取得する、４つの同一のユニット３４に接続されており、これら入力を使用して点乗積演算を実行する。これらユニット３４はまた、（復号回路構成１８によって生成された関連する制御信号の制御下で）結果が累積されるレジスタ３６（Ｃ）にも接続される。したがって、アキュムレータＣから読み取られた値は、各ユニット３４へのさらなる入力を形成し、これによって、これは、加算回路構成４０において、乗算回路構成ユニット３８によって実行された乗算の結果と総和され、その後、その結果が、アキュムレータＣの関連要素へ（すなわち、レジスタ３６内に）書き戻される。当業者によく知られているように、ユニット３４のおのおのは、融合乗加算回路によって表され得る。
【００４８】
図４は、（図２Ｂと比較して）結果４×４行列を生成する２つの４×４行列の乗算へのアプローチの拡張を例示するために認識される例を示す。アキュムレータＣに累積される、結果として得られた行列の１６の要素のための対応する要素生成演算が示される。したがって、この４×４行列乗算をトリガする単一の行列乗算命令に応答して、６４の演算が実行されることに留意されたい（Ｃの１６の要素のおのおのの計算に対して４つの乗累積部分がある）。さらに、これらレジスタの内容が、１つのベクトルの読取り／書込みで、読み取り及び書き込みされ得る場合、図４に示される計算密度は、図２Ｂの実例よりもいまだに８倍高い。これは、上記の要素毎ベクトル演算が実行されるアプローチと比較され、これに従って、１６の要素ベクトルは、１６要素の１次元配列として取り扱われるであろう。ＳＩＭＤ（単一命令複数データ）命令を使用して１６の並列演算を開始するアプローチでは、Ｃに累積された４×４行列の完全な計算のために必要な６４の演算を完了するために、さらに３つの命令が必要とされる。さらに、これら命令のおのおのは、３つのベクトル読取りと、１つのベクトル書込みとを含むであろう。これは、本技術のアプローチと比較されるべきであり、図４に示される実例では、４倍以上の融合乗累積演算の係数が、同じ数のレジスタ・オペランド、すなわち、３つのベクトル読取りと、１つのベクトル書込みのみで、行列乗算命令によって指定される。したがって、一般に、本技術の行列乗算命令の使用は、余分なレジスタ・ファイル帯域幅を必要とせずに、行列乗算アプリケーションのための、より高い計算スループットを容易にすることが認識されるだろう。
【００４９】
ソース・レジスタのおのおのに保持されている行列のデータ要素と、宛先レジスタに累積されているデータ要素とが、同じサイズを有し得る場合もあり得るが、そうである必要はない。さらに、（図２Ｂ及び図４を参照して上述した実例におけるように）ソース行列は、結果データ要素の正方行列と同じ次元を有し得るが、そうである必要はない。図５は、これら両方のポイントを例示する。図５は、使用されるレジスタが１２８ビットのレジスタである実例を示す。さらに、ソース・レジスタは、この容量を使用して、１６の８ビット要素をおのおの記憶し、アキュムレータ・レジスタは、この容量を使用して、４つの３２ビット要素を記憶する。したがって、例示されるように、表される行列乗算は、２×８ソース行列と８×２ソース行列の間で行列乗算演算を実行し、２×２結果行列を生成することを含む。ソース行列と結果行列との次元の差は、他の実例では小さくなり得、たとえば、ここでは、２×４行列が、４×２行列によって乗じられて、２×２行列を生成するか、又は、たとえば、図５の実例における変形として、２×１６行列が、１６×２行列によって乗じられて、２×２結果行列を生成する、より極端にさえもなり得る。１２８ビットのレジスタを備えた装置において実施されるこの実例を続けると、ソース行列と結果行列におけるデータ要素サイズ間の非対称性はさらに大きくなり、つまり、各ソース行列の３２のデータ要素はおのおの４ビット要素となることが留意される。本技術はこの点で特に柔軟性があり、所定のレジスタ内容によって表されるデータ要素の数と、各データ要素の対応するサイズとの間のこのトレードオフは、本技術の命令を使用するプログラマが、命令が使用されているコンピュータの文脈に応じてバランスを取ることができるトレードオフを表す。極端な例では、データ要素が、非常に限定されたサイズを有し得、この場合、命令によって提供されるコンピュータの並列性が、より重要になるが、可能性の範囲の反対側では、ソース行列データ要素と結果行列データ要素との間で、同じデータ要素サイズが維持され得、この場合、ソース行列データ要素の精度が、より重要になる。さらに、計算の文脈が適切な場合、ソース行列の各データ要素が最小限に表される実施（たとえば、バイナリ又はターナリ）も提供され得ることが留意されるべきである。
【００５０】
図６は、本技術の行列乗算命令によって開始される行列乗算演算のさらなる実例を概略的に例示する。図６は、５１２ビットのサイズを有するレジスタ５０を示し、このレジスタがその一部を形成するデータ処理装置における最大「ベクトル長」も５１２ビットとなる。さらに、このレジスタは、１６の３２ビットのデータ要素を含むものとして取り扱われるように示される。図６の下部では、これら１６のデータ要素は、ソース・レジスタＡ及びＢのおのおのと、宛先レジスタＣとにおけるデータ要素の４×４行列として解釈されるとして示される。したがって、図６は、レジスタＡ、Ｂ、及びＣを指定し、ソース・レジスタＡ及びＢのおのおのから取得した４×４行列を乗算して、宛先レジスタＣに適用される４×４行列を生成するために、対応する６４の演算（図４及び上述した記載を参照）を発生させる３２ビットの浮動小数点（ＦＰ）の行列乗算命令の演算を例示する。図６の例示では、４×４行列のおのおのが、４つのデータ要素の４つのブロックで表されているが、記載された行列乗算の実例では、これは重要ではなく、むしろ以下の図７Ａとの比較を容易にするために単に提供されたことが留意されるべきである。
【００５１】
図７Ａに戻って示すように、同じ５１２ビットのレジスタ５０が、ラベル付けされた４つの部分５２、５４、５６、及び５８で示される。ソース・レジスタＡ、ソース・レジスタＢ、及び宛先レジスタＣのこれら４つの部分は、図７Ａにおける４つのデータ要素のグループを囲む破線でグラフィック的に例示される。したがって、宛先レジスタＣに記憶されるべき４つの２×２結果行列のおのおのは、個別の行列乗算演算によって生成される。さらに、図７Ａの実例では、これらは４つの別個の行列乗算命令によって開始されるものとして示され、おのおのは、（行列乗算演算が浮動小数点の３２ビットのデータ値を使用して２×２行列を生成することを指定することに加えて、）宛先レジスタ、ソース・レジスタ、及び各レジスタの一部を指定する。このようにして、第１の行列乗算演算は、２つのソース・レジスタの第１の部分から取得した２×２行列を使用して実行され、結果は、宛先レジスタＣの第１の部分に記憶される。さらに３つのこのような行列乗算演算は、その後、３つのさらなる行列乗算命令によって指定され、各命令は、レジスタの３つのさらなる部分の１つを指名する。
【００５２】
図７Ｂは、図７Ａの処理を実施するために使用される回路構成の実例を概略的に例示する。レジスタＡ、Ｂ、及びＣは、それぞれ４部分レジスタ７０、７１、及び７６として示される。４入力マルチプレクサ７２及び７３は、レジスタＡ及びＢのおのおのの、それぞれ４部分に接続され、各マルチプレクサは、命令から導出された「部分」値によって制御される。このように選択された２つの部分は、図３の実例の形態であり得る行列乗算回路構成７４への２つの入力を形成する。結果として得られる結果行列の４つの要素は、レジスタＣのそれぞれ４部分に接続されるマルチプレクサ７５への単一の入力を形成する。マルチプレクサ７５は、命令から派生した「部分」値によっても制御され、結果行列の４つの要素を、レジスタＣの部分の１つに導く。レジスタの特定の部分から選択し、レジスタの特定の部分に結果を書き込むためのこのタイプの回路構成は、本明細書に記載される他の実例の処理をサポートするために同様に提供され得る。
【００５３】
それゆえ、図７Ａの実例に関して、特定の行列乗算命令が、データ処理動作を、ソース・レジスタと宛先レジスタとの両方の一部に制限することを選択し得ることが認識される。しかしながら、同様の制限は、「ネイティブ」な（ハードウェア・ベースの）ベクトル長よりも短くなるように使用できるベクトル長を制限するソフトウェアによってデータ処理装置に適用される構成からも生じ得る。また図８は、５１２ビットのレジスタ５０を示し、この実例では、最大ベクトル長を２５６ビットに制限する、ソフトウェアで定義された最大ベクトル長６０が適用されていることが例示される。この最大ベクトル長は、「定義されたソフトウェア」であり、ここでは、関連する制御信号を生成して、この最大ベクトル長６０の値を設定することにより、復号回路構成１８が応答する命令が提供される。この最大ベクトル長にこのように制約が課されると、これにより、装置が実行できる行列乗算演算にも制約が課される。さらに図６の実例を使用すると、図６の実例の４×４行列を記憶するために必要な（まだ３２ビットのデータ要素を有している）５１２ビットのスペースが利用可能ではないため、この４×４行列乗算が実行されないことがわかる。しかしながら、図７Ａの実例を参照すると、２つの２×２行列を記憶する容量が、利用可能であり、これが図８に表される。それにも関わらず、宛先レジスタＣに記憶するための１つ又は複数の結果行列を生成するために、ソース・レジスタＡの８つのデータ要素が、ソース・レジスタＢのデータ要素によって行列乗算され得る多くの手法があることがさらに理解される。これら可能性はさらに、以下の図１１Ａ〜図１１Ｃ及び図１２Ａ〜図１２Ｃを参照して説明される。それにも関わらず、図８を参照して、ソフトウェアで定義された最大ベクトル長を課すことは、図８に示される宛先レジスタＣの利用可能な部分の２つの半分における正方行列の両方が、単一の行列乗算命令に応答して実行される実例で実行された、行列乗算演算の数に制限を課したとみなされ得ることが留意されるべきである。或いは、これは、この２５６ビットの最大ベクトル長が課された状態で（３２ビットのデータ要素の）４×４行列を生成できないという点で、生成される行列の次元の制限として理解され得るため、システムは、１つ又は２つの２×２行列の生成によって行列乗算命令に応答するように制約が課される。
【００５４】
レジスタの容量とデータ要素のサイズが許す場合、本技術の１つ又は複数の行列乗算命令に応答して実行され得る異なる行列乗算演算に関してかなりの柔軟性があり得る。図９は、ソース・レジスタＡとソース・レジスタＢとのおのおのから最大１６のデータ要素が抽出されることを例示する。おのおのの場合で、これらはさらに、ソースＡとソースＢのそれぞれ半分から取得された８つのデータ要素をおのおの含む２つの部分に部分分割される可能性があるとして例示される。５１２ビットのレジスタの実例に基づいて、１つの実例では、図９に例示されるデータ要素の全セットは、単一の行列乗算演算に関与され得、主に、ここでは、８ビットのデータ要素の８×８行列が、ソースＢからの３２ビットのデータ要素の２×８行列を乗じられたソースＡからのデータ要素の３２ビットの８×２行列の結果として生成される。しかしながら、この実例では、いくつかの置換が可能である。たとえば、図９における４つの正方形の各グループが、１つのデータ要素のみを表すビューでは、それに従って、ソースＡからの１２８ビットのデータ要素の４×１行列が、レジスタＢからの１２８ビットのデータ要素の１×４行列を乗じられ、３２ビットのデータ要素の４×４行列を生成する。さらに、ソースＡ又はソースＢのいずれかの２つのラベル付けされた部分の一方のみを使用して、ソース行列の要素を提供し、その後、対応する正方行列が生成され得る。たとえば、ソースＡ（０）とソースＢ（０）のみがオペランド行列のデータ要素を提供する場合、対応するより小さな結果行列も、その後、生成され得る。繰り返すが、個々のデータ要素のサイズと、所定の行列を形成するデータ要素の数とのトレードオフもまた変動し得る。
【００５５】
図１０は、特定の行列乗算演算によって生成された正方結果行列を記憶するために必要な記憶容量よりも、宛先レジスタの記憶容量が大きい別の実例を例示する。例示されるように、ここでは、２×４行列に４×２行列を乗じて２×２行列を生成すると、そのストレージの宛先レジスタの容量の半分のみを必要とする結果データ要素のセットが生成され、宛先レジスタの部分０に適用されている図１０にグラフィック的に示される。図１０の下部は、宛先レジスタが、行列乗算命令において単に指名されている場合に、デフォルトにより生じる可能性があることを例示し、行列乗算演算においてこの部分が明示的に指名されている第２の実例が与えられる。
【００５６】
図１１Ａ及び図１１Ｂは、所定の行列乗算演算の結果が、宛先レジスタの全容量を占有しない正方結果行列となる場合を示すいくつかのさらなる実例を例示する。具体的には、図１１Ａ及び図１１Ｂの実例では、考慮される２×２行列乗算演算はおのおの、宛先レジスタＣの半分のみを占有する２×２結果行列を生成する。これらがＦＰ３２（すなわち、浮動小数点３２ビット命令）として例示されている場合、これら実例は、最大容量が２５６ビットのレジスタを表す。これは、たとえば、レジスタのネイティブな容量であり得るか、又は、図８を参照して上述したように、最大ベクトル長に、ソフトウェアが制限を課した結果である可能性がある。したがって、図１１Ａの実例では、ソース・レジスタＡ及びＢと、宛先レジスタＣとを単に指定する第１の命令が示される。この命令を実行した結果として、装置はデフォルトで、例示された２×２の行列データ要素を含むソース・レジスタＡの一部のみを選択できる。図１１Ａにグラフィック的に示されるように、これにソース・レジスタＢの内容のそれぞれの部分を乗じて、宛先レジスタＣの２つのそれぞれの部分に適用する２つの結果正方行列を生成できる。図１１Ａに示される他の実例の命令では、使用される図Ａの部分は、命令において明示的に指名され（すなわち、部分「０」）、これが、２つのそれぞれの行列乗算演算において、ソース・レジスタＢの２つの半分に適用され、宛先レジスタＣのそれぞれの部分に記憶されている２つの正方結果行列を生成する。
【００５７】
図１１Ｂは、宛先レジスタＣのそれぞれの部分に適用するための２つの結果正方行列を生成するために、ソース・レジスタＡとソース・レジスタＢの２つの部分のそれぞれの内容が、単一の行列乗算演算に応答して使用され得る別の方式を例示する。図１１Ｂの実例では、ソース・レジスタＡの第１の部分が、ソース・レジスタＢの第１の部分によって行列乗算され、結果として得られる正方２×２行列が、宛先レジスタＣの第１の部分に適用される。同様に、並行して、ソース・レジスタＡの第２の部分が、ソース・レジスタＢの第２の部分によって乗じられ、宛先レジスタＣの第２の部分に適用される第２の正方結果行列を生成する。
【００５８】
図１１Ｃは、いくつかの実施例におけるさらなる命令、すなわち、データ値が検索されて、指定されたレジスタＡの１つの部分に記憶されるメモリ位置を指定するコピー・ロード命令の動作を概略的に例示する。データ値は、レジスタＡの他の部分にもコピーされる。このコピーは、レジスタＡの両方の半分に同じ値を直接ロードするロードによって、又は、レジスタの第１の半分から、ロード後に実行されるレジスタＡの第２の半分へのコピーによって実施され得る。本技術の文脈において、このコピー・ロード命令は、図１１Ａ及び図１１Ｂに示されるアプローチに関する柔軟性を可能にする。たとえば、図１１Ｂの行列乗算命令を実行する前に図１１Ｃのコピー・ロードを実行することによって、同じ内容がソース・レジスタＡの各半分に存在し、したがって、その効果は、図１１Ａの効果と同じになる。つまり、ソース・レジスタＡの半分から取得された内容が、ソース・レジスタＢの２つの半分のそれぞれの内容によって乗じられ、宛先レジスタＣのそれぞれの半分に適用される２つの正方結果行列を生成する。
【００５９】
図１１Ｄは、図１１Ａの第２の実例の命令をサポートする１つの実施例に提供される例示的な回路構成を概略的に例示する。ソース・レジスタＡ及びＢは、それぞれ２部分のレジスタ１２０及び１２２として示される。２入力マルチプレクサ１２４は、レジスタＡのそれぞれの２つの部分に接続されている。マルチプレクサは、命令によって設定された「要素選択」信号によって（図１１Ａの第２の命令例示では「０」として）制御される。このように選択された部分は、行列乗算回路構成１２６及び１２８の各インスタンスへの１つの入力を形成する（これは、図３の実例の形態であり得る）。行列乗算回路構成１２６及び１２８のそれぞれに対する他の入力は、ソース・レジスタ１２２（Ｂ）のそれぞれの部分である。結果として得られる２つの２×２行列は、レジスタ１３０（Ｃ）のそれぞれの部分に書き込まれる。比較すると、「固定部分」の実例（図１１Ａの第１の命令の実例）の場合、部分０は両方の乗算回路構成に直接ルーティングされ、図１１Ｂの実例では、レジスタＡからのルーティングは、レジスタＢに関して図１１Ｄに示されるものと同じになるであろう（すなわち、部分０から行列乗算回路０、及び部分１から行列乗算回路１）。
【００６０】
本技術はまた、それを引き起こすデータ処理動作の一部として、所定のソース・レジスタの２つの半分の内容のスワップ（少なくとも、実質的なスワップ−以下を参照）を引き起こすことができる別の行列乗算命令も提案する。これは、図１２Ａ及び図１２Ｂの実例に示され、ここでは、命令は、ソース・レジスタＡとソース・レジスタＢを指定し、ソース・レジスタＡの第１の部分から取得した２×２行列と、ソース・レジスタＢの第１の部分から取得した２×２行列とをともに乗じる第１の行列乗算演算を実行する。これは、宛先レジスタＣの第１の部分に記憶される。また、ソース・レジスタＡの第２の部分から取得した２×２行列と、ソース・レジスタＢの第２の部分から取得した２×２行列とをともに乗じる第２の行列乗算演算が実行される。これは、宛先レジスタＣの第２の部分に記憶される。図１２Ａの実例では、スワップ・フラグは設定されないため、スワップは行われない。
【００６１】
図１２Ｂの実例では、スワップ・フラグが設定される。これにより、少なくとも行列乗算演算を実行するために、ソース・レジスタＡの２つの部分の内容がスワップされる。そのため、たとえば、ソース・レジスタＡの部分にアクセスする順序を一時的に切り替えるだけでこれを行うことができ、その結果、命令は、その後、最初に、ソース・レジスタＡの第２の部分を、第１の行列乗算演算に使用し、ソース・レジスタＡの第１の部分を、第２の行列乗算演算に使用する。それにも関わらず、ソース・レジスタＡの２つの部分は、必要に応じて明示的にスワップされ得るが、処理速度が主な目的である場合、関与する追加の処理ステップにとって、それは魅力的なオプションにならないかもしれない。いずれにせよ、図１２Ｂに見られ得るように、スワップ・フラグを設定すると、図１２Ａで生成されたものとは反対の対角行列が生成される。したがって、ソース・レジスタＡの第１の部分から取得された２×２行列（ただし、このステップの前にＡの第１及び第２の部分が「スワップ」されたことに留意されたい）と、ソース・レジスタＢの第１の部分から取得された２×２行列とをともに乗じる第１の行列乗算演算が実行される。これは、宛先レジスタＤの第１の部分に記憶される。その後、ソース・レジスタＡの第２の部分から取得された２×２行列（繰り返すが、これは、Ａの「スワップされた」バージョンにあることに留意されたい）と、ソース・レジスタＢの第２の部分から取得された２×２行列とをともに乗じる第２の行列乗算演算が実行される。これは、宛先レジスタＤの第２の部分に記憶される。したがって、図１２Ａ及び図１２Ｂの「スワップ可能」命令により、プログラマは、スワップ・フラグを設定又は設定解除する単純なメカニズムによって、行列の反対側の対角線の生成を切り替えることができる。さらに、設定解除バージョンと設定バージョンとの両方を実行することにより、必要に応じて、ソース・レジスタＡ及びＢのおのおのにおける２つのソース行列の完全な行列乗算の結果を形成する４つの２×２部分行列の全セットが生成され得る。上述した図１２Ａ及び図１２Ｂの実例では、この全結果は、（おのおのに２×２部分行列の対角線ペアを有する）レジスタＣ及びＤの内容によって与えられる。関連する処理に関して、このアプローチの利点は、内部ループ（ほとんどの処理時間が費やされる）において、必要なアクションのみがＡ及びＢをロードし、２つのＭＭＵＬ動作（すなわち、未スワップ・バージョン及びスワップ済バージョン）を実行することである。２つの宛先（Ｃ及びＤ）は、結果行列を、従来とは異なる方式（おのおの、対角線半分）で記憶するが、これは内部ループの外側で改正され、これは、プログラムのパフォーマンスへの影響を少なくする。
【００６２】
図１２Ｃは、図１２Ａ及び図１２Ｂの実例をサポートする１つの実施例で提供される例示的な回路構成を概略的に例示する。ソース・レジスタＡ及びＢは、それぞれ２部分のレジスタ８０及び８１として示される。２入力マルチプレクサ８２及び８３は、両方ともレジスタＡのそれぞれ２つの部分に接続されており、入力としてのこれら部分の順序は、２つのマルチプレクサ間で反転されることに留意されたい。マルチプレクサ８２及び８３は両方とも、命令から導出された「スワップ」値（すなわち、オン又はオフ＝１又は０）によって制御される。このように選択された２つの部分はおのおの、行列乗算回路構成８４及び８５の各インスタンスへの１つの入力を形成する（これは、図３の実例の形態であり得る）。行列乗算回路構成８４及び８５のおのおのに対する他の入力は、ソース・レジスタＢのそれぞれの部分である。結果として得られる２つの２×２行列は、レジスタＣ（図１２Ａの場合−スワップなし）又はレジスタＤ（図１２Ｂの場合−スワップ）のそれぞれの部分へ書き込まれる。
【００６３】
前述の実例では、ソース・レジスタのペアは１つしかなく、おのおのが行列乗算演算でともに乗算される２つの行列のいずれかを提供する。しかしながら、本技術はさらに、オペランド行列の少なくとも１つが、１つよりも多くのソース・レジスタから抽出される実例を提供する。この実例は図１３に与えられ、ここでは、データ要素の２×４行列が抽出される第１のソース・レジスタＡが指定されているが、２つのソース・レジスタ、つまりＢ１及びＢ２が指定されている。したがって、これらは、２つの独立した４×２行列、或いはその代わりに、１つの結合された４×４行列のいずれかを表すと考慮され得る。ソース・レジスタＢ１及びＢ２の内容の表示にどちらがビューされていても、これらソース・レジスタのそれぞれの内容は、ソース・レジスタＡから導出された２×４行列で行列乗算され、（図１３においてＣ１及びＣ２とラベル付けされた）２つの正方結果行列が生成され、これらは、その後、図１３に示されるように、宛先レジスタのそれぞれ半分に適用される。したがって、さらにソース・レジスタＢ１及びＢ２の内容のビューに応じて、宛先レジスタの内容は、結果の２×４行列又は２つの独立した２×２行列のいずれかであると考慮され得る。
【００６４】
しかしながら、１つよりも多くのレジスタにわたる行列のこの分布は、ソース行列の１つだけに限定されず、図１４は、このアプローチが、ソース・オペランドと、結果として得られる行列との両方に適用される実例を概略的に例示する。図１４にグラフィック的に示される動作では、命令が４つのソース・レジスタＡ１、Ａ２、Ｂ１、及びＢ２を指定し、２つの宛先レジスタＣ１及びＣ２も指定した。したがって、例示されるように、１６のデータ要素は、ソース・レジスタＡ１及びＡ２に保持され、１６のデータ要素は、ソース・レジスタＢ１及びＢ２に保持され、１６のデータ要素は、宛先レジスタＣ１及びＣ２に記憶され得る。したがって、６つのレジスタすべてを指定する単一の行列乗算命令に応答して、４×４行列に４×４行列を乗じて、結果４×４行列を生成し、これは、その後、２つの半分で、宛先レジスタＣ１及びＣ２に適用される。
【００６５】
図１５は、使用され得る仮想マシンの実施を例示する。前述の実施例は、関連する技術をサポートする特定の処理ハードウェアを動作させる装置及び方法に関して本発明を実施するが、ハードウェア・デバイスのいわゆる仮想マシン実施を提供することも可能である。これら仮想マシン実施は、仮想マシン（ＶＭ）プログラム５１０をサポートするホスト・オペレーティング・システム（ＯＳ）５２０を動作させるホスト・プロセッサ（ハードウェア）５３０で動作する。通常、妥当な速度で実行する仮想マシンの実施を提供するには、大規模で強力なプロセッサが必要であるが、このようなアプローチは、互換性や再利用のための理由で、別のプロセッサにネイティブなコードを実行したい場合など、特定の状況で正当化され得る。仮想マシン・プログラム５１０は、コンピュータ可読記憶媒体（非一時的媒体であり得る）に記憶され得、仮想マシン・プログラム５１０によってモデル化されているデバイスである実際のハードウェアによって提供されるアプリケーション・プログラム・インターフェースと同じ、アプリケーション・プログラム・インターフェース（命令実行環境）を、アプリケーション・プログラム５００に提供する。したがって、上述した行列乗算命令のいずれかを含むプログラム命令は、仮想マシン・プログラム５１０を使用してアプリケーション・プログラム５００内から実行され、仮想マシン・ハードウェアとの相互作用をモデル化することができる。
【００６６】
図１６は、本技術の行列乗算命令が、メモリから検索するデータ処理命令のシーケンス内の装置によって検索されることに応答して、１つの実施例の方法に従って行われるステップのシーケンスを示す。フローは、これら行列乗算命令の１つが受信されるステップ１００で開始する。ここで「受信」とは、命令がメモリからフェッチされ復号される処理であると理解され得、さらに、特定の動作が実行され得るように、復号回路構成による処理回路構成とレジスタとの関連制御信号の生成を含む。これらにより、図１６に示されるこの手順の次のステップを実行できる。したがって、次のステップ１０２は、行列乗算命令で指定された第１のソース・レジスタからのデータ要素の第１の行列の抽出を含む。次のステップ１０４において、データ要素の第２の行列が、行列乗算命令で指定された第２のソース・レジスタから抽出される。図１６は、本技術を実施するときに一般的に実行される一連のステップを示し、上述した実施例のいずれかからの詳細は、図１６の関連するステップにインポートされ得ることが認識されるべきである。たとえば、ステップ１０２及び１０４における第１及び第２のソース・レジスタからの第１及び第２の行列の抽出は、本技術の関連する実施例を実施するときに、第１及び第２のソース・レジスタのいずれか又は両方の指定された部分からこれら行列を抽出することを含み得る。しかしながら、第１及び第２の行列は、第１及び第２のソース・レジスタから抽出されるため、図のステップ１０６及び１０８によって表される反復処理が実行され得、ここでは、点乗積演算が、第１の行列の所定の行と、第２の行列の所定の列とに対して実行され、結果行列内の所定の位置のデータ要素を生成する。結果行列のさらなるデータ要素を生成するために実行されるべきさらなる点乗積演算が残っている場合、フローは、これらが実行されるために、ステップ１０８から１０６にループ・バックする。それにも関わらず、図１１の１０６及び１０８のステップは、例示の簡素化のために順次実行されるように示されるが、本技術は、この反復的な順次的なアプローチに正確には限定されず、たとえば、図３に示される例示的な回路構成から容易に理解され得るように、この手順のそれぞれの「反復」は、実際には互いに並行して実行され得ることが認識されるべきである。正方結果行列を形成するデータ要素の全セットが生成されると、たとえば、その宛先レジスタの既存の内容との累積によって、行列乗算命令で指定された宛先レジスタに適用される（ステップ１１０）。
【００６７】
簡単に全体を要約すると、データ処理装置において行列乗算を実行するための装置、行列乗算命令、装置を動作させる方法、及び仮想マシン実施を含む技術が開示される。少なくとも４つのデータ要素を記憶するための各レジスタは、行列乗算命令によって参照され、行列乗算命令に応答して、行列乗算演算が実行される。データ要素の第１及び第２の行列が、第１及び第２ソース・レジスタから抽出され、第１の行列のそれぞれの行及び第２の行列のそれぞれの列に作用する複数の点乗積演算が実行され、結果データ要素の正方行列が生成され、これらは宛先レジスタに適用される。所定の数のレジスタ・オペランドのより高い計算密度が、要素毎ベクトル技術に関して達成される。
【００６８】
本出願では、「〜ように構成された」という用語は、装置の要素が、定義された動作を実行できる構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの相互接続の構成又は方式を意味する。たとえば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又は、プロセッサ又は他の処理デバイスが機能を実行するようにプログラムされ得る。「〜ように構成された」は、定義された動作を提供するために、装置要素を何らかの手法で変更する必要があることを意味しない。
【００６９】
添付の図面を参照して例示的な実施例が本明細書において詳細に記載されたが、本発明はこれら正確な実施例に限定されず、添付の特許請求の範囲によって定義されるような本発明の範囲及び精神から逸脱することなく、当業者による様々な変更、追加、及び修正が有効化され得ることが理解されるべきである。たとえば、本発明の範囲から逸脱することなく、従属請求項の特徴と、独立請求項の特徴との様々な組合せが行われ得る。
【図１】
2020527778.tif 000003
【図２Ａ】
2020527778.tif 000004
【図２Ｂ】
2020527778.tif 000005
【図３】
2020527778.tif 000006
【図４】
2020527778.tif 000007
【図５】
2020527778.tif 000008
【図６】
2020527778.tif 000009
【図７Ａ】
2020527778.tif 000010
【図７Ｂ】
2020527778.tif 000011
【図８】
2020527778.tif 000012
【図９】
2020527778.tif 000013
【図１０】
2020527778.tif 000014
【図１１Ａ】
2020527778.tif 000015
【図１１Ｂ】
2020527778.tif 000016
【図１１Ｃ】
2020527778.tif 000017
【図１１Ｄ】
2020527778.tif 000018
【図１２Ａ】
2020527778.tif 000019
【図１２Ｂ】
2020527778.tif 000020
【図１２Ｃ】
2020527778.tif 000021
【図１３】
2020527778.tif 000022
【図１４】
2020527778.tif 000023
【図１５】
2020527778.tif 000024
【図１６】
2020527778.tif 000025
【国際調査報告】
2020527778.tif 000026
2020527778.tif 000027
2020527778.tif 000028