JP2020527778A - レジスタ・ベースの行列乗算 - Google Patents

レジスタ・ベースの行列乗算 Download PDF

Info

Publication number
JP2020527778A
JP2020527778A JP2019571000A JP2019571000A JP2020527778A JP 2020527778 A JP2020527778 A JP 2020527778A JP 2019571000 A JP2019571000 A JP 2019571000A JP 2019571000 A JP2019571000 A JP 2019571000A JP 2020527778 A JP2020527778 A JP 2020527778A
Authority
JP
Japan
Prior art keywords
matrix
register
data elements
data element
source
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2019571000A
Other languages
English (en)
Other versions
JP7253506B2 (ja
Inventor
ヘナー マンセル、デイビッド
ヘナー マンセル、デイビッド
ホルム、ルネ
マイケル コールフィールド、イアン
マイケル コールフィールド、イアン
ミラノビッチ、エレナ
Original Assignee
エイアールエム リミテッド
エイアールエム リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エイアールエム リミテッド, エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2020527778A publication Critical patent/JP2020527778A/ja
Application granted granted Critical
Publication of JP7253506B2 publication Critical patent/JP7253506B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag

Abstract

データ処理装置において行列乗算を実行するための装置、行列乗算命令、装置を動作させる方法、及び仮想マシン実施を含む技術が開示される。少なくとも4つのデータ要素を記憶するための各レジスタは、行列乗算命令によって参照され、行列乗算命令に応答して、行列乗算演算が実行される。データ要素の第1及び第2の行列が、第1及び第2ソース・レジスタから抽出され、第1の行列のそれぞれの行及び第2の行列のそれぞれの列に作用する複数の点乗積演算が実行され、結果データ要素の正方行列が生成され、これらは宛先レジスタに適用される。所定の数のレジスタ・オペランドのより高い計算密度が、要素毎ベクトル技術に関して達成される。

Description

本開示は、データ処理装置に関する。より具体的には、本開示は、データ処理装置における行列乗算のパフォーマンスに関する。
現代のデータ処理装置は通常、データ処理装置のデータ処理動作の主題であるデータ値を保持できる多数のレジスタを備える。データ処理装置は、このようなレジスタの内容を値の配列として扱い、たとえば、レジスタが512ビットを保持する記憶容量を有する場合、データ処理装置はこれを16の32ビット値の配列として扱い得る。データ処理装置は、その後、たとえば、その配列の個々に指定された要素へ、又は、たとえば、指定された値で各要素を乗じるために、SIMD(単一命令複数データ(single instruction multiple data))方式で、値の配列のそれぞれの要素に、データ処理動作を適用することができる。
1つの例示的な実施例では、装置が存在し、この装置は、複数のレジスタを有するレジスタ記憶回路構成であって、各レジスタは、少なくとも4つのデータ要素を記憶する、レジスタ記憶回路構成と、行列乗算命令に応答して制御信号を生成する復号器回路構成であって、行列乗算命令は、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ、及び宛先レジスタを指定する、復号器回路構成と、制御信号に応答して、行列乗算演算を実行するデータ処理回路構成とを備え、行列乗算演算は、第1のソース・レジスタからデータ要素の第1の行列を抽出することと、第2のソース・レジスタからデータ要素の第2の行列を抽出することと、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第1の行列のそれぞれの行と、データ要素の第2の行列のそれぞれの列とに作用する、実行することと、結果データ要素の正方行列を、宛先レジスタに適用することとを含む。
別の例示的な実施例では、データ処理装置を動作させる方法があり、この方法は、行列乗算命令に応答して制御信号を生成することであって、行列乗算命令は、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも4つのデータ要素を記憶することができる、生成することと、制御信号に応答して、行列乗算演算を実行することとを含み、行列乗算演算は、第1のソース・レジスタからデータ要素の第1の行列を抽出することと、第2のソース・レジスタからデータ要素の第2の行列を抽出することと、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第1の行列のそれぞれの行と、データ要素の第2の行列のそれぞれの列とに作用する、実行することと、結果データ要素の正方行列を、宛先レジスタに適用することとを含む。
別の例示的な実施例では、装置が存在し、この装置は、行列乗算命令に応答して制御信号を生成するための手段であって、行列乗算命令は、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも4つのデータ要素を記憶することができる、生成するための手段と、制御信号に応答して、行列乗算演算を実行するための手段とを備え、実行するための手段は、第1のソース・レジスタからデータ要素の第1の行列を抽出するための手段と、第2のソース・レジスタからデータ要素の第2の行列を抽出するための手段と、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行するための手段であって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第1の行列のそれぞれの行と、データ要素の第2の行列のそれぞれの列とに作用する、実行するための手段と、結果データ要素の正方行列を、宛先レジスタに適用するための手段とを備える。
本技術はさらに、添付の図面に例示されるその実施例を参照して、単なる実例として記載される。
本技術の様々な実例を具現化し得るデータ処理装置を概略的に例示する図である。 ソース・レジスタAからの指定された要素と、ソース・レジスタBからの値の配列とを使用して、アキュムレータ・レジスタCに記憶するための4つの要素を生成するための要素毎ベクトル(vector−by−element)技術を概略的に例示する図である。 本技術の1つの実施例を概略的に例示する図であり、本技術に従って、宛先レジスタCに累積される要素の正方行列を生成するために、ソース・レジスタAから取得されたデータ要素の正方行列が、ソース・レジスタBから取得された要素の正方行列によって乗じられる、図である。 図2Bに示されるような行列乗算演算をサポートするために1つの実施例で提供される回路構成を概略的に例示する図である。 4×4行列が4×4行列の対の乗算により生成される本技術の1つの実施例を例示する図である。 ソース要素サイズが結果要素サイズと異なり、2×2行列を生成するために、要素の2×8行列が、要素の8×2行列によって乗じられる本技術の実施例を例示する図である。 本技術に従って4×4行列を形成するために、互いに乗じられる一対の4×4行列を概略的に例示する図である。 図6に例示されるものと同じソース・レジスタ及び宛先レジスタについて、本技術に従う4つの別個の2×2行列乗算のパフォーマンスを概略的に例示する図である。 1つの実施例において図7Aの実例を実施する回路構成のさらなる詳細を概略的に例示する図である。 本技術の1つの実施例において、ソフトウェアで定義された最大ベクトル長を課すことと、2つの2×2行列乗算が実行されるように、図6及び図7に例示されるものと同じソース・レジスタ及び宛先レジスタの使用制限とを概略的に例示する図である。 8×8行列を生成するために、2×8行列によって乗じられる8×2行列を概略的に示し、4×4行列を生成するために、4×2行列と2×4行列との4つの行列乗算演算のパフォーマンスを等価的に例示する図である。 指定された宛先レジスタの一部のみを占める正方結果行列を生成するために使用される本技術によって提供される命令と、その部分が命令内で指定される変形とを概略的に例示する図である。 ソース・レジスタの一部からオペランド行列を抽出し、その行列を、別のソース・レジスタのそれぞれの部分から取得した行列とともに使用して行列乗算演算を実行し、2つの結果正方行列を生成する、本技術によって提供される命令の動作を概略的に例示する図である。 おのおのから2つのそれぞれの平方ソース行列を提供するために使用され、互いに乗じられて2つの平方結果行列を生成する、2つのソース・レジスタのそれぞれの部分を概略的に例示する図である。 データ値が、指定されたメモリ位置からロードされ、宛先レジスタの各半分にコピーされる本技術によって使用されるコピー・ロード動作を概略的に例示する図である。 1つの実施例において図11A及び図11Bの実例をサポートするいくつかの回路構成の実例的な詳細を概略的に例示する図である。 指定されたソース・レジスタの2つの半分の内容の交換が、命令にフラグを設定するか設定しないことにより選択的に実行され得る、本技術により提供される命令の動作を概略的に例示する図である。 指定されたソース・レジスタの2つの半分の内容の交換が、命令にフラグを設定するか設定しないことにより選択的に実行され得る、本技術により提供される命令の動作を概略的に例示する図である。 1つの実施例において図12A及び図12Bの実例をサポートするいくつかの回路構成の例示的な詳細を概略的に例示する図である。 行列乗算のための1つのオペランド行列が2つのソース・レジスタにより提供される、本技術による行列乗算演算のパフォーマンスを概略的に例示する図である。 図13に示される技術の変形を概略的に例示し、両オペランド行列が、2つのソース・レジスタによって提供され、結果として得られる正方行列が、2つの宛先レジスタにわたって記憶される図である。 使用され得る仮想マシン実施を概略的に例示する図である。 1つの実施例の方法に従って行われる一連のステップを示す図である。
少なくともいくつかの実施例は、装置を提供し、この装置は、複数のレジスタを有するレジスタ記憶回路構成であって、各レジスタは、少なくとも4つのデータ要素を記憶する、レジスタ記憶回路構成と、行列乗算命令に応答して制御信号を生成する復号器回路構成であって、行列乗算命令は、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ、及び宛先レジスタを指定する、復号器回路構成と、制御信号に応答して、行列乗算演算を実行するデータ処理回路構成とを備え、行列乗算演算は、第1のソース・レジスタからデータ要素の第1の行列を抽出することと、第2のソース・レジスタからデータ要素の第2の行列を抽出することと、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第1の行列のそれぞれの行と、データ要素の第2の行列のそれぞれの列とに作用する、実行することと、結果データ要素の正方行列を、宛先レジスタに適用することとを含む。
本技術は、行列乗算命令、及びその命令に応答する装置内の対応する回路構成を提供することにより、装置のレジスタに保持された行列要素を表すデータ値を使用して行列乗算演算のパフォーマンスを促進し、これは、命令で指定されたレジスタの内容が、データ要素の行列として取り扱われるアプローチを実施する。このようにして、行列乗算命令に応答して、データ処理回路構成は、指定された第1及び第2のソース・レジスタからそれぞれ、データ要素の第1及び第2の行列を抽出する。さらに、データ処理回路構成は、その後、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行する。行列乗算の性質から、これら点乗積演算のおのおのは、データ要素の一方のオペランド行列のそれぞれの行と、データ要素の他方のオペランド行列のそれぞれの列とを参照して、正方行列のそれぞれの結果データ要素に対して実行されることが理解されよう。結果として得られる行列は正方であり、すなわち、(2×2構成において)少なくとも4つのデータ要素を備えているが、本技術は、結果データ要素の任意の正方行列(すなわち、3×3、4×4、5×5等)の生成に適用可能であることが留意されるべきである。結果として得られる生成された結果データ要素の結果の正方行列は、命令で指定された宛先レジスタに適用され、その宛先レジスタが保持する行列表現は装置によって理解される。
さらに、本技術によって採用されるアプローチは、表現の単なる1つ、すなわち、所定のレジスタの内容の意味的意味の恣意的な選択ではないことが留意されるべきである。これは、レジスタが複数のデータ要素を保持するデータ処理装置において行列乗算を実行する代替技術を参照して理解され得る。この代替技術では、2つのソース・レジスタの内容に対して「要素毎ベクトル」演算を実行することにより、様々な行列乗算が実行され得、ここで、指定された要素は1つのソース・レジスタから抽出され、要素のベクトルは別のソース・レジスタから抽出される。このようにして、単一の行列行(又は、同等に単一の行列列)の生成に対応する点乗積演算が実行され得る。その後、結果行列のさらなる行(又は列)に対応して、このような演算が実行され得る。しかしながら、本技術は、この代替技術の実施と、本技術の実施とのさらなる相違は、ベクトルが4つの要素を備えている実例に適用された場合、記載された要素毎ベクトル演算は、通常、(2つのソース・レジスタ及び宛先アキュムレータ・レジスタに対応する)3つのベクトル読取りと、4つの並列的な乗累積演算(multiply−accumulate operation)(すなわち、結果行列の行に対応する、生成されたベクトルにおける各要素の生成について1つ)と、(生成されたベクトルを宛先レジスタへ書き込むことに対応する)最終的な1つのベクトル書込みとを含むことを認識する。これは、本技術に従う行列乗算命令が使用される状況と比較され得、ここでは、結果データ要素の正方行列を生成するために、第1のソース・レジスタからのデータ要素の第1の行列は、第2のソース・レジスタからのデータ要素の第2の行列によって乗じられ、その後、(いくつかの実施例では)指定された宛先レジスタに累積され得る。したがって、上述した代替技術と同様に、この実例における本技術の実施はまた、(2つのソース・レジスタのおのおののためと、アキュムレータ宛先レジスタのための)3つのベクトル読取りと、(累積の結果を、宛先アキュムレータ・レジスタへ書き戻すための)1つのベクトル書込みとを必要とする。しかしながら、行列乗算の実施では、本技術の行列乗算命令は8つの演算を開始する(すなわち、2×2正方行列の生成のこの実例では、結果正方行列における各結果データ要素に対して2つのデータ要素乗算が実行され、これは、行列内のこの位置の既存の値で累積される値を生成するために、ともに総和される)。したがって、同じレジスタ・アクセスについて、本技術は、より高密度の乗累積演算を実施する。さらに、2×2正方行列の生成の上述した実例において、この乗累積演算の密度が倍加されるが、この比は、生成される正方行列のサイズに比例することが留意されるべきである。たとえば、結果データ要素の4×4正方行列を生成する際に、本技術の命令は、64の乗累積演算を、言い換えれば、同じ数のレジスタ・アクセスについて、要素毎ベクトルによるアプローチよりも4倍多くの乗累積を開始する。
本技術は、結果データ要素の正方行列を、行列乗算命令で指定された宛先レジスタに適用することを提案し、これは多くの手法で実行され得る。いくつかの実施例では、結果データ要素の正方行列を、宛先レジスタに適用することは、結果データ要素の正方行列を宛先レジスタに記憶することを含む。言い換えると、結果データ要素の正方行列は、その宛先レジスタのいかなる既存の内容にも関係なく、宛先レジスタに直接記憶され、その内容を上書きし得る。装置によって実行されるデータ処理動作の性質に応じて、宛先レジスタの既存の内容を考慮する必要がある場合と、ない場合とがある。したがって、宛先レジスタの内容が考慮されるべき他の実例、特に宛先レジスタが、対応するデータ要素の正方行列を既に保持している場合、結果データ要素の生成された正方行列が、宛先レジスタに保持されている既存の正方行列を使用して累積されるべきであり、したがって、いくつかの実施例では、結果データ要素の正方行列を、宛先レジスタに適用することは、結果データ要素の正方行列を、宛先レジスタに記憶された結果データ要素の以前に記憶された正方行列とともに累積することを含む。
ソース・レジスタ又は宛先レジスタのいずれかの内容が解釈される方式のさらなる柔軟性も提案されている。特に、(第1及び第2のソース・レジスタから取得された)データ要素の第1及び第2の行列のデータ要素のビット長は、結果データ要素の正方行列のデータ要素のビット長と同じである必要はないと提案されている。それにも関わらず、いくつかの実施例では、これらは実際に同じであり得る。したがって、いくつかの実施例では、データ要素の第1の行列の各データ要素と、データ要素の第2の行列の各データ要素は、結果データ要素の正方行列の各データ要素の結果要素のビット長に等しいソース要素のビット長を有する。逆に、他の実施例では、データ要素の第1の行列の各データ要素と、データ要素の第2の行列の各データ要素は、結果データ要素の正方行列の各データ要素の結果要素のビット長とは異なるソース要素のビット長を有する。たとえば、1つの例示的な実例を挙げると、128ビットのレジスタを使用するデータ処理装置において、32ビットのデータ要素の2×2行列を表す、32ビットのデータ要素の正方行列が記憶され得る。このような結果正方行列は、2つの2×2行列の行列乗算によって実際に生成され得るが、これらソース行列の要素もまた、32ビットのデータ要素であり、本技術は、結果データ要素のこの正方行列もまた、16ビットのデータ要素を有する2つのソース行列の行列乗算によって生成され得る(すなわち、16ビットのデータ要素の2×4行列が、16ビットのデータ要素の4×2行列によって乗じられた結果、32ビットのデータ要素の2×2行列となる)ことも提案する。同様に、32ビットのデータ要素のこの2×2結果行列は、8ビットのデータ要素の2×8行列と8×2行列の乗算によっても生成され得る。
したがって、さらに本技術は、ソース要素のビット長が、結果要素のビット長と2倍異なり得ることを想定しているが、いくつかの実施例では、ソース要素のビット長が、結果要素のビット長と2倍よりも大きく異なり得ることを想定していることが認識されるべきである。実際、本技術によって提案される命令が実施されるべき文脈に応じて、本技術は、ソース要素のビット長が、実際に単に単一ビット、すなわち、ソース・オペランド行列における1ビットのデータ要素さえも想定していることが留意されるべきである。また、入力データ値の精度がほとんど重要ではない文脈に自明的に適合するこのような実例は、3要素での実施(したがって、ここでは、ソース要素は、−1、0、1のセットから値を取得し得る)も想定されているが、本技術によってサポートされている並列処理は、はるかに関連性が高い場合がある。
実施に応じて、データ要素の事前決定されたビット長があり得、これに従って、装置は、本技術を実施する際に使用するソース・レジスタ又は宛先レジスタのいずれかの内容を解釈する。しかしながら、上記議論で強調されているように、このビット長には柔軟性もあり得る。さらに、結果データ要素の正方行列のデータ要素の所定のビット長に対して、これは宛先レジスタのサイズに直接対応し得る場合もあり得るが、本技術はさらに、結果要素の正方行列の次元が、行列乗算命令で指定されるバリエーションを提供する。たとえば、これにより、結果データ要素の正方行列が、宛先レジスタの全容量よりも小さい行列乗算演算を実行できる。さらに、装置が、所定のベクトル長を有する実例では、所定のベクトル長に一致するように、結果要素の正方行列の特定の次元を指定する行列乗算命令は、サポート可能な結果要素の正方行列の次元における上限を表すであろう。したがって、たとえば、128ビットのベクトル長の装置では、これは、4つの32ビットのデータ要素の正方行列を生成する演算を実行する必要がある行列乗算命令が実行されることを可能にするが、16の8ビットのデータ要素の正方行列(すなわち、4×4の正方行列)が生成される、さらなる可能性があるであろう。しかしながら、4つの32ビットのデータ要素の1つの正方行列が、128ビットのベクトル長の装置で生成され得る行列のサイズの上限(少なくとも4つの要素を必要とする)を表す場合、この命令は、より大きなベクトルをサポートする別の装置でも実行され得、128ビットのベクトル長の装置用に記述されたプログラムが、同じ又はより大きなベクトル長の他の装置間で移植可能であるという利点を与える。実際、装置の根本となるアーキテクチャが、英国ケンブリッジのARM(登録商標)社によって提供されるARMv8−Aアーキテクチャのためのスケーラブル・ベクトル・エクステンション(SVE:Scalable Vector Extension)によって提供されるような、可変(「スケーラブル」)ベクトル長を有すると定義され得る場合、したがって装置の範囲が、その後構築され得ることがあり、可能なベクトル長の範囲であるが、そのアーキテクチャにすべて同等に準拠し、したがって、これら装置は、異なるベクトル長を有し得る場合であっても、同じ命令が、これら装置のいずれかで一貫して実行される。
さらに、結果データ要素の正方行列の次元を指定する行列乗算命令の機能によりさらに、結果データ要素の正方行列が必ずしも宛先レジスタの容量を満たさない上述した変形をサポートできる。たとえば、再び128ビットのベクトル長の実例を使用すると、これは、8ビットのデータ要素の4×4行列を収容できるが、行列乗算命令は、実行される行列乗算演算を、2×2正方結果行列の生成に限定し、したがって、4つの8ビットのデータ要素が、その後、(容量の4分の1のみを占有する)ベクトル長に記憶され得ることも想定される。
データ要素の第1の行列のデータ要素、データ要素の第2の行列、及び行列乗算演算から生じるデータ要素は、様々な形態をとり得る。いくつかの実施例では、これらは浮動小数点値であり得るが、他の実施例では、整数値であり得る。これら整数値は、符号なしでも符号付きでもよい。
上記議論から、ソース行列(すなわち、データ要素の第1の行列と、データ要素の第2の行列)は、特にこれら行列のそれぞれの次元に関して、様々な形態及び構成を取り得ることが理解されよう。したがって、いくつかの実施例では、データ要素の第1の行列と、データ要素の第2の行列は、正方行列である。他の実施例では、データ要素の第1の行列と、データ要素の第2の行列は、非正方の長方行列である。
装置において定義されたベクトル長を使用することは、多数のデータ要素を記憶するデータ処理ベクトル・レジスタ(ここでは、ともに「ベクトル」と称される)が、この長さを超えない処理のためのベクトルのみを保持できることを意味し、通常、ベクトルの構成データ要素の合計サイズに制約を課し、合計で、そのベクトル長の合計サイズを超えることはできない。それにも関わらず、上記のように、利用可能なベクトル長は、装置ごとに異なる場合があり、ここでもまた、様々なベクトル長で実行できる移植可能なソフトウェアを有する利点がある。
これに関連して、本技術は、処理するベクトル長を制限するようにユーザが装置を構成し得る実施例を想定している。言い換えると、装置のプログラマは、許可された最大ベクトル長を有するように構成でき、装置で実行される後続のデータ処理動作は、課された最大ベクトル長を遵守する必要がある。したがって、いくつかの実施例では、復号器回路構成はさらに、構成命令に応答して構成制御信号を生成し、構成命令は、最大ベクトル長を指定し、データ処理回路構成は、構成制御信号に応答して、結果データ要素の合計サイズが、最大ベクトル長を超えないように、後続する行列乗算演算に制約を課す。たとえば、装置が「512」ビットなどの「ネイティブ」なベクトル長を有する状況では、この構成命令により、ソフトウェア制限を、装置によって実行されるデータ処理動作に適用できるようになり、これに従って、たとえば、256ビットの最大ベクトル長に制限され得る。したがって、この制約下で実行するソフトウェアの一部が、256ビットのベクトルを想定している場合、最大ベクトル長を課すメカニズムを使用して、それがより長いベクトル、たとえば、上述した実例における512ビットのネイティブなベクトル長、又は256ビットの制限よりも長い他の任意のベクトル長をたまたま有する装置で実行されることを保証することもできる。
この種のソフトウェアによって最大ベクトル長を課すことは、様々な手法で(最大ベクトル長に関して)後続する行列乗算演算に制約を課し得る。たとえば、いくつかの実施例では、後続する行列乗算演算に制約を課すことは、結果データ要素の合計サイズが、最大ベクトル長を超えない次元を有する結果データ要素の正方行列の生成を含む。したがって、たとえば、宛先レジスタの「ネイティブ」な容量が、データ要素の4×4行列を記憶できる場合(又は、その全容量、すなわち同じサイズのデータ要素の3×3行列又は2×2行列を占有しない場合)、データ要素の4×4行列が、定義された最大ベクトル長に対して大きすぎる場合、この状況においてソフトウェアで定義された最大ベクトル長を課すことは、データ要素の2×2又は3×3の正方行列のみが生成されるように、行列乗算演算に制約を課す。
代替的又は追加的に、他の実施例では、このようなソフトウェアで定義された最大ベクトル長により、結果データ要素の正方行列の数が制限される可能性がある。したがって、この時点において、本技術は、結果データ要素の正方行列の生成をもたらす行列乗算演算を実行させる行列乗算演算を提案しているが、これは行列乗算命令に応じて生成される結果データ要素のさらなる正方行列の可能性を排除しないことは注目に値する。単なる1つの実例を挙げると、宛先レジスタが、結果正方行列のサイズの2倍の容量を有する状況では、行列乗算命令に応じて行列乗算演算が実施され得る。これは、宛先レジスタの記憶容量を完全に使用するために、2つの正方行列を生成する。しかしながら、上述したソフトウェアで定義された最大ベクトル長の文脈ではさらに、これは、その後、行列乗算命令に応じて生成され得る正方行列の数に制約を課し得る。上記議論に照らして、結果要素の合計サイズは、宛先レジスタの記憶容量よりも小さい場合があることが認識される。
結果データ要素の正方行列の次元が、行列乗算命令で指定される実施例の文脈において、これは、宛先レジスタ容量に直接対応し得、したがって、このような実施例では、行列乗算命令において指定された次元を有する結果データ要素の正方行列は、宛先レジスタの記憶容量に対応する。
上述したように、本技術は、宛先レジスタの記憶容量が、結果データ要素の結果正方行列を記憶するのに必要な容量よりも大きい実施例も提案する。一般に、本技術によって使用されるレジスタはおのおの、少なくとも4つのデータ要素を記憶する容量を有しており、いくつかの実施例では、宛先レジスタは、少なくとも8つのデータ要素を収容し、結果データ要素の少なくとも第2の正方行列を記憶するための記憶容量を有する。したがって、生成された結果正方行列は、おのおの4つのデータ要素を有し得、両行列は、8つのデータ要素を記憶するための記憶容量を有する宛先に記憶され得るが、他の実例では、結果正方行列は、9つのデータ要素(3×3行列)を有し得、18のデータ要素を収容する記憶容量を有する宛先レジスタに記憶され得るか、又は、おのおのが16のデータ要素(4×4行列)を有する2つの正方行列が、32のデータ要素を収容する記憶容量を有する宛先レジスタに記憶され得る、という具合である。さらに、宛先レジスタには、結果データ要素の2つよりも多くの正方行列を収容する記憶容量を有し得ることが認識される。
したがって、結果データ要素の正方行列の次元が、行列乗算命令で指定される実施例の文脈において、宛先レジスタの記憶容量は、行列乗算命令で指定された次元を有する結果データ要素の1つよりも多くの正方行列を記憶でき得る。
宛先レジスタの記憶容量が1つよりも多くの結果正方行列を記憶するのに十分な実施例では、結果データ要素の生成された正方行列は、様々な手法で宛先レジスタに適用され得る。たとえば、いくつかの実施例では、データ処理回路構成は、制御信号に応答して、結果データ要素の正方行列を、宛先レジスタの第1の部分に適用する。さらに、宛先レジスタのその第1の部分は、いくつかの手法で定義され得、いくつかの実施例では、データ処理回路構成のために事前に決定される、すなわち、データ処理回路構成は、結果データ要素の正方行列が適合する宛先レジスタの所定の部分を常に選択する一方、他の実施例では、行列乗算命令はさらに、宛先レジスタの第1の部分を指定する。言い換えれば、宛先レジスタのどの部分を使用するかの選択は、プログラマに公開され得る。宛先レジスタの第1の「部分」は、特定の状況に応じて、宛先レジスタの全記憶容量の異なる部分を表し得るが、これは、たとえば、宛先レジスタの半分又は4分の1であり得ることが認識される。
宛先レジスタが、結果データ要素の(すなわち、結果データ要素の正方行列の)合計サイズよりも大きな記憶容量を有する実例では、いくつかの実施例において、データ処理回路構成はさらに、制御信号に応答して、第2の行列乗算演算を実行して、結果データ要素の第2の正方行列を生成し、結果データ要素の第2の正方行列を、宛先レジスタの第2の部分に適用する。したがって、1つの行列乗算命令に応答して、1つよりも多くの行列乗算演算が実行され、1つよりも多くの結果正方行列が生成され、これは、宛先レジスタのそれぞれの部分に適用される。
したがって、行列乗算命令に応答して1つよりも多くの行列乗算演算が実行される場合、本技術は、これら行列乗算演算のおのおののそれぞれのソース(オペランド)行列が導出される様々な手法を想定している。たとえば、いくつかの実施例では、第1のソース・レジスタからのデータ要素の第1の行列は、第1のソース・レジスタの第1の部分から抽出され、データ処理回路構成は、制御信号に応答して、第2のソース・レジスタの第1の部分から、データ要素の第2の行列を抽出することと、結果データ要素の正方行列を、宛先レジスタの第1の部分に適用することとを含む第1の行列乗算演算として行列乗算演算を実行し、データ処理回路構成は、制御信号に応答して、第2のソース・レジスタの第2の部分から、データ要素の第2の行列を抽出することと、結果データ要素の正方行列を、宛先レジスタの第2の部分に適用することとを含む第2の行列乗算演算を実行する。
或いは、他の実施例では、データ処理回路構成は、制御信号に応答して、第1のソース・レジスタの第1の部分から、データ要素の第1の行列を抽出することと、第2のソース・レジスタの第1の部分から、データ要素の第2の行列を抽出することと、結果データ要素の正方行列を、宛先レジスタの第1の部分に適用することとを含む第1の行列乗算演算として行列乗算演算を実行し、データ処理回路構成は、制御信号に応答して、第1のソース・レジスタの第2の部分から、データ要素の第1の行列を抽出することと、第2のソース・レジスタの第2の部分から、データ要素の第2の行列を抽出することと、結果データ要素の正方行列を、宛先レジスタの第2の部分に適用することとを含む第2の行列乗算演算を実行する。
言い換えると、特定の実施に応じて、2つの行列乗算演算は、(第1のソース・レジスタの第1の部分から抽出された)同じ第1のオペランド行列を取り出し、これを、それぞれの行列乗算演算において、第2のソース・レジスタから抽出された第1及び第2の行列へ適用し得るか、又は、第1のソース・レジスタから2つのソース行列を抽出し、第2のソース・レジスタから2つのソース行列を抽出し得、これらはそれぞれ乗じられ、第1及び第2の結果行列を形成する。
繰り返すが、上記の説明と同様に、結果行列が適用され得る宛先レジスタの一部は、第1のソース・レジスタのそれぞれの部分が、それぞれの行列乗算演算に使用される実施例において、様々に定義及び指定され得、この第1の部分もまた、様々に定義され得る。いくつかの実施例では、第1のソース・レジスタの第1の部分は、データ処理回路構成のために事前に決定される。他の実施例では、行列乗算命令はさらに、第1のソース・レジスタの第1の部分を指定する。
データ処理装置が行列乗算命令に応答して、第1の行列乗算演算を実行して、第1の結果正方行列を生成し、第2の行列乗算演算を実行して、第2の結果正方行列を生成する実施例では、本技術は、実行されている単なる2つの行列乗算演算に限定されず、いくつかの実施例では、データ処理回路構成はさらに、制御信号に応答して、少なくとも1つのさらなる行列乗算演算を実行し、結果データ要素の少なくともさらなる正方行列を生成する。
さらに、装置が行列乗算命令に応答して1つよりも多くの行列乗算演算を実行するこのような実施例では、ソース・レジスタのそれぞれの部分を使用して、ソース行列のそれぞれのデータ要素を提供する様々な手法が存在し得るのみならず、本技術はさらに、行列乗算命令の前に実行される追加の命令の使用を提案する。これは、後続する行列乗算演算のためにソース・レジスタの1つの内容を準備する。具体的には、いくつかの実施例では、復号器回路構成は、行列乗算命令に先行するコピー・ロード命令に応答して、メモリ位置及び第1のソース・レジスタを指定して、コピー・ロード制御信号を生成し、データ処理回路構成は、コピー・ロード制御信号に応答して、データ要素の第1の正方行列を、指定されたメモリ位置から、第1のソース・レジスタの第1の部分にロードすることと、データ要素の第1の正方行列を、第1のソース・レジスタの第2の部分にコピーすることであって、第2のソース・レジスタからのデータ要素の第2の行列は、第2のソース・レジスタの第1の部分から抽出される、コピーすることと、を含むコピー・ロード動作を実行する。言い換えれば、このような実施例では、行列乗算命令が後に続くコピー・ロード命令の実行の結果として、データ要素の同じ正方行列が、その後、行列乗算命令の結果として実行される第1及び第2の行列乗算演算のおのおのにおける第1のオペランド行列として使用されることが理解されよう。
上述したように、その「部分」が取り出される、議論された実施例で使用され得る所定のレジスタの割合は、様々な形態を取り得るが、いくつかの特定の実施例では、第1のソース・レジスタの第1の部分は、第1のソース・レジスタの第1の半分であり、第2のソース・レジスタの第1の部分は、第2のソース・レジスタの第1の半分であり、宛先レジスタの第1の部分は、宛先レジスタの第1の半分である。
これら割合がそれぞれのレジスタの半分であるこのような実施例では、本技術はさらに、本技術で使用され得るレジスタ内容スワッピング命令の提供をさらに想定し、このようないくつかの実施例では、データ処理回路構成はさらに、レジスタ内容スワッピング命令に応答して、レジスタ内容スワッピング動作を実行し、第1のソース・レジスタ及び第2のソース・レジスタの一方の第1の半分と第2の半分との内容を交換する。したがって、このレジスタ内容スワッピング命令の使用により、第1及び第2のソース・レジスタの一方の半分がスワップされ得、これによって、第1の行列乗算演算が実行された後、第2の行列乗算演算が実行される前にスワップが生じ得る。これは、第1及び第2の結果正方行列を生成するために、第1及び第2のソース・レジスタのそれぞれの半分が互いに乗じられる方式に関して、さらなる程度の柔軟性を提供する。
それにも関わらず、本技術は、このようなレジスタ内容スワッピング命令が明示的に定義されることが不可欠であることを想定しておらず、いくつかの実施例では、データ処理回路構成はさらに、制御信号に応答して、第1の行列乗算演算の後、第2の行列乗算演算の前に、レジスタ内容スワッピング動作を実行して、第1のソース・レジスタ及び第2のソース・レジスタの一方の第1の半分と第2の半分との内容を交換する。言い換えれば、追加のレジスタ内容スワッピング命令を使用せずに、いくつかの実施例では、第1及び第2の行列乗算演算の実行中にスワッピングが自動的に実行され得る。
実際、いくつかの実施例では、このレジスタ・スワッピング動作が実行されるか否かは、プログラマに利用可能な選択肢であり、したがって、このような実施例では、行列乗算命令は、レジスタ内容スワッピング動作が実行されるべきか否かを指定する。さらに、いくつかの実施例では、行列乗算命令は、第1のソース・レジスタと第2のソース・レジスタのどちらがレジスタ内容スワッピング動作の対象となるべきかを指定する。
データ要素の第1の行列が、1対1様式で第1のソース・レジスタから抽出される、つまり、第1の行列のすべてのデータ要素が、第1のソース・レジスタからのみ抽出される場合がある。しかしながら、本技術はさらに、行列乗算命令がさらに第3のソース・レジスタを指定する実施例を提供し、ここでは、行列乗算演算が、第1のソース・レジスタ及び第3のソース・レジスタから、データ要素の第1の行列を抽出することを含む。たとえば、このような実施例では、データ要素の第1の行列の第1の半分が、第1のソース・レジスタから抽出される一方、データ要素の第1の行列の第2の半分が、第3のソース・レジスタから抽出される場合があり得る。同様の原理が、第2のソース・レジスタからのデータ要素の第2の行列の抽出に適合し、したがって、いくつかの実施例では、行列乗算命令はさらに、第4のソース・レジスタを指定し、ここでは、行列乗算演算は、第2のソース・レジスタ及び第4のソース・レジスタから、データ要素の第2の行列を抽出することを含む。実際、同じ原理が行列乗算命令における宛先レジスタの指定にも適合し、したがって、いくつかの実施例では、行列乗算命令はさらに、さらなる宛先レジスタを指定し、ここでは、行列乗算演算は、宛先レジスタとさらなる宛先レジスタとの間の結果データ要素分割の正方行列を適用することを含む。これは、行列乗算演算のソース・オペランド行列を提供するデータ要素の第1及び第2の行列のおのおのが、1つよりも多くのソース・レジスタから導出され得るという点で、本技術によって提案される行列乗算命令の使用に柔軟性のさらなる態様を提供し、生成された結果データ要素の正方行列は、1つよりも多くの宛先レジスタに等しく適用され得、したがって、これらオペランド及び結果行列のそれぞれのサイズ、及びそれらが導出される、又は適用されるそれぞれのレジスタに関して、より大きな柔軟性を提供する。
少なくともいくつかの実施例は、データ処理装置を動作させる方法を提供し、この方法は、行列乗算命令に応答して制御信号を生成することであって、行列乗算命令は、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも4つのデータ要素を記憶することができる、生成することと、制御信号に応答して、行列乗算演算を実行することとを含み、行列乗算演算は、第1のソース・レジスタからデータ要素の第1の行列を抽出することと、第2のソース・レジスタからデータ要素の第2の行列を抽出することと、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第1の行列のそれぞれの行と、データ要素の第2の行列のそれぞれの列とに作用する、実行することと、結果データ要素の正方行列を、宛先レジスタに適用することとを含む。
少なくともいくつかの実施例は、装置を提供し、この装置は、行列乗算命令に応答して制御信号を生成するための手段であって、行列乗算命令は、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも4つのデータ要素を記憶することができる、生成するための手段と、制御信号に応答して、行列乗算演算を実行するための手段とを備え、実行するための手段は、第1のソース・レジスタからデータ要素の第1の行列を抽出するための手段と、第2のソース・レジスタからデータ要素の第2の行列を抽出するための手段と、結果データ要素の正方行列を生成するために、複数の点乗積演算を実行するための手段であって、各点乗積演算は、結果データ要素の正方行列のそれぞれの結果データ要素を生成するために、データ要素の第1の行列のそれぞれの行と、データ要素の第2の行列のそれぞれの列とに作用する、実行するための手段と、結果データ要素の正方行列を、宛先レジスタに適用するための手段とを備える。
少なくともいくつかの実施例は、上述した実施例のいずれかに従って、装置に対応する命令実行環境を提供するようにホスト・データ処理装置を制御するためのプログラム命令を含む仮想マシン・コンピュータ・プログラムを提供する。
少なくともいくつかの実施例は、上述した実施例のいずれかに従う方法が実行される命令実行環境を提供するようにホスト・データ処理装置を制御するためのプログラム命令を含む仮想マシン・コンピュータ・プログラムを提供する。
少なくともいくつかの実施例は、上述した実施例のいずれかの仮想マシン・コンピュータ・プログラムが非一時的な様式で記憶されるコンピュータ可読記憶媒体を提供する。
次に、いくつかの特定の実施例が、図面を参照して記載される。
図1は、本技術の様々な実例を具現化し得るデータ処理装置10を概略的に例示する。データ処理装置は、実行する一連の命令に応じてデータ項目に対してデータ処理動作を実行する処理回路構成12を備える。これら命令は、データ処理装置がアクセスしたメモリ14から検索され、当業者が精通している方式で、この目的のためのフェッチ回路構成16が提供される。さらに、フェッチ回路構成16によって検索された命令は、復号回路構成18に渡され、復号回路構成18は、処理回路構成12の構成及び動作の様々な態様を制御するように構成された制御信号を生成する。レジスタ20のセット及びロード/ストア・ユニット22も示される。一般に、処理回路構成12は、パイプライン様式で配置され得るが、その詳細は本技術には関係ない。当業者は、図1が表す一般的な構成に精通しているので、単に簡潔さの目的のために、そのさらなる詳細な記載はここでは省略される。図1に見られ得るように、レジスタ20はおのおの、多数のデータ要素のためのストレージを備え、これによって、処理回路構成は、データ処理動作を、指定されたレジスタ内の指定されたデータ要素に、又は、指定されたレジスタ内の指定されたデータ要素のグループ(「ベクトル」)に適用できるようになる。特に、例示されたデータ処理装置は、レジスタ20に保持されたデータ要素で形成された行列に関する行列乗算演算のパフォーマンスに関連しており、その詳細な説明は、いくつかの特定の実施例を参照して以下により詳細に続く。命令の実行において処理回路構成12によって必要とされるデータ値、及びそれらデータ処理命令の結果として生成されるデータ値は、ロード/ストア・ユニット22によってメモリ14に書き込まれ、そこから読み取られる。また、一般に、図1のメモリ14は、通常、事前定義され、その後、処理回路構成が実行する一連の命令(「プログラム」)の一部として、本技術の命令が記憶され得るコンピュータ可読記憶媒体の実例として理解され得ることに留意されたい。しかしながら、処理回路構成は、RAMにおいて、ROMにおいて、ネットワーク・インターフェース等を経由して、種々の異なるソースからこのようなプログラムにアクセスし得る。本開示は、処理回路構成12が実行できる様々な新規の命令を記載し、以下の図はさらに、これら命令の性質、これら命令の実行をサポートするためのデータ処理回路構成におけるバリエーション等を提供する。
図2A及び図2Bは、本技術、特に、レジスタの多数のデータ要素が行列の要素の二次元配列として取り扱われるアプローチを例示する。図2Bの実例では、レジスタA、B、Cのおのおのにおける4つのデータ要素が、2×2行列の要素として取り扱われる。これは、レジスタA、B、及びCの4つのデータ要素が、要素の単純な1次元配列として、すなわち、ベクトルとして取り扱われる図2Aにおける例とは対照的である。1つのソース・レジスタからの1つのデータ要素(ソースAにおける要素0)と、データ要素のベクトル(ソースBの4つのデータ要素)とを、要素毎ベクトルによる乗累積演算のオペランドとして指定される技術を使用して、図2Aは、レジスタCに累積するためにどのようにしてデータ要素のベクトルが生成されるのかを示す。このデータ要素のベクトルは、たとえば行列の行を表し得、したがって、この解釈で例示されていることは、要素毎ベクトル演算によって生成される4×4結果行列の1行の計算を表すと考慮され得る。言い換えると、データ要素の完全な4×4行列の計算では、対応するさらなる3行を生成するために、さらに3つのこのような要素毎ベクトル演算を必要とする。
これは、レジスタのおのおののベクトルが、おのおの2×2行列を表す4つのデータ要素を保持するとして取り扱われる本技術に従って、図2Bで採用されるアプローチと対照的である。レジスタCに累積される2×2行列を生成するために、ソース・レジスタAに保持された2×2行列と、ソース・レジスタBに保持された2×2行列を使用して、行列乗算が実行される。図2A及び図2Bを参照して特に注意すべき点は、両方とも3つのベクトル読取りと、1つのベクトル書込み(すなわち、レジスタA、B、Cからの読取りと、レジスタCへの書込み)を伴うことである。もちろん、ここでの「ベクトル」の読取り又は書込みに関する強調は、読取り又は書込みに関連するデータ要素の多様性であり、データ要素のグループが必ずしもベクトルを表すと解釈される必要はないことに留意されたい。なぜなら、これは、正確には、図2Aと図2B、すなわち図2Aにおけるベクトル解釈と、図2Bにおける行列解釈との比較の強調であるからである。言い換えると、図2Aと図2Bとは両方とも、各読取り又は書込み動作において、最大4つのデータ要素が、読み取り又は書き込みされる、読取り及び書込み動作を表すが、図2Aに示される動作では、これらは4つの乗累積演算を含む一方、図2Bでは、これらは8つの乗累積演算であることが示されることに留意されたい。これら乗累積演算は、このような計算を実施するために一般的に使用される回路構成の特定のユニットが、(1つが乗算で、1つが累積である)2つの独立したデバイスではなく、「融合乗累積」(FMA:fused multiply−accumulate)デバイスであるため、本明細書では「融合乗累積」とも称されることに留意されたい。したがって、本技術によって提供される行列乗算命令は、より高い計算密度を指定できることを理解されたい。本技術は、ベクトル処理の文脈で実施され得ること、すなわち、レジスタの内容の上述した「解釈」が、そのベクトル処理のサポートを提供する装置のベクトル長の範囲内で行われることを認識することも重要である。したがって、図2Bの実例では、2×2行列を表す4つのデータ要素を保持するために必要な幅はベクトル長であり、例示された処理は、その後、装置がサポートできる限り多くのベクトルの別個の独立したベクトルに対して繰り返される。このベクトル処理の概念は、以下の実例のすべてに適用可能であるが、通常、図面の明確化のために、1つのベクトル長の価値のデータ値と処理のみが例示される。
図3は、図2Bに例示される動作の種類をサポートするために提供される回路構成の構成を概略的に例示する。第1のソース・レジスタ30(A)及び第2のソース・レジスタ32(B)は、例示されるように、(復号回路構成18により生成される関連する制御信号の制御下で)おのおのがソース・レジスタAからの2つの入力と、ソース・レジスタBからの2つの入力とを取得する、4つの同一のユニット34に接続されており、これら入力を使用して点乗積演算を実行する。これらユニット34はまた、(復号回路構成18によって生成された関連する制御信号の制御下で)結果が累積されるレジスタ36(C)にも接続される。したがって、アキュムレータCから読み取られた値は、各ユニット34へのさらなる入力を形成し、これによって、これは、加算回路構成40において、乗算回路構成ユニット38によって実行された乗算の結果と総和され、その後、その結果が、アキュムレータCの関連要素へ(すなわち、レジスタ36内に)書き戻される。当業者によく知られているように、ユニット34のおのおのは、融合乗加算回路によって表され得る。
図4は、(図2Bと比較して)結果4×4行列を生成する2つの4×4行列の乗算へのアプローチの拡張を例示するために認識される例を示す。アキュムレータCに累積される、結果として得られた行列の16の要素のための対応する要素生成演算が示される。したがって、この4×4行列乗算をトリガする単一の行列乗算命令に応答して、64の演算が実行されることに留意されたい(Cの16の要素のおのおのの計算に対して4つの乗累積部分がある)。さらに、これらレジスタの内容が、1つのベクトルの読取り/書込みで、読み取り及び書き込みされ得る場合、図4に示される計算密度は、図2Bの実例よりもいまだに8倍高い。これは、上記の要素毎ベクトル演算が実行されるアプローチと比較され、これに従って、16の要素ベクトルは、16要素の1次元配列として取り扱われるであろう。SIMD(単一命令複数データ)命令を使用して16の並列演算を開始するアプローチでは、Cに累積された4×4行列の完全な計算のために必要な64の演算を完了するために、さらに3つの命令が必要とされる。さらに、これら命令のおのおのは、3つのベクトル読取りと、1つのベクトル書込みとを含むであろう。これは、本技術のアプローチと比較されるべきであり、図4に示される実例では、4倍以上の融合乗累積演算の係数が、同じ数のレジスタ・オペランド、すなわち、3つのベクトル読取りと、1つのベクトル書込みのみで、行列乗算命令によって指定される。したがって、一般に、本技術の行列乗算命令の使用は、余分なレジスタ・ファイル帯域幅を必要とせずに、行列乗算アプリケーションのための、より高い計算スループットを容易にすることが認識されるだろう。
ソース・レジスタのおのおのに保持されている行列のデータ要素と、宛先レジスタに累積されているデータ要素とが、同じサイズを有し得る場合もあり得るが、そうである必要はない。さらに、(図2B及び図4を参照して上述した実例におけるように)ソース行列は、結果データ要素の正方行列と同じ次元を有し得るが、そうである必要はない。図5は、これら両方のポイントを例示する。図5は、使用されるレジスタが128ビットのレジスタである実例を示す。さらに、ソース・レジスタは、この容量を使用して、16の8ビット要素をおのおの記憶し、アキュムレータ・レジスタは、この容量を使用して、4つの32ビット要素を記憶する。したがって、例示されるように、表される行列乗算は、2×8ソース行列と8×2ソース行列の間で行列乗算演算を実行し、2×2結果行列を生成することを含む。ソース行列と結果行列との次元の差は、他の実例では小さくなり得、たとえば、ここでは、2×4行列が、4×2行列によって乗じられて、2×2行列を生成するか、又は、たとえば、図5の実例における変形として、2×16行列が、16×2行列によって乗じられて、2×2結果行列を生成する、より極端にさえもなり得る。128ビットのレジスタを備えた装置において実施されるこの実例を続けると、ソース行列と結果行列におけるデータ要素サイズ間の非対称性はさらに大きくなり、つまり、各ソース行列の32のデータ要素はおのおの4ビット要素となることが留意される。本技術はこの点で特に柔軟性があり、所定のレジスタ内容によって表されるデータ要素の数と、各データ要素の対応するサイズとの間のこのトレードオフは、本技術の命令を使用するプログラマが、命令が使用されているコンピュータの文脈に応じてバランスを取ることができるトレードオフを表す。極端な例では、データ要素が、非常に限定されたサイズを有し得、この場合、命令によって提供されるコンピュータの並列性が、より重要になるが、可能性の範囲の反対側では、ソース行列データ要素と結果行列データ要素との間で、同じデータ要素サイズが維持され得、この場合、ソース行列データ要素の精度が、より重要になる。さらに、計算の文脈が適切な場合、ソース行列の各データ要素が最小限に表される実施(たとえば、バイナリ又はターナリ)も提供され得ることが留意されるべきである。
図6は、本技術の行列乗算命令によって開始される行列乗算演算のさらなる実例を概略的に例示する。図6は、512ビットのサイズを有するレジスタ50を示し、このレジスタがその一部を形成するデータ処理装置における最大「ベクトル長」も512ビットとなる。さらに、このレジスタは、16の32ビットのデータ要素を含むものとして取り扱われるように示される。図6の下部では、これら16のデータ要素は、ソース・レジスタA及びBのおのおのと、宛先レジスタCとにおけるデータ要素の4×4行列として解釈されるとして示される。したがって、図6は、レジスタA、B、及びCを指定し、ソース・レジスタA及びBのおのおのから取得した4×4行列を乗算して、宛先レジスタCに適用される4×4行列を生成するために、対応する64の演算(図4及び上述した記載を参照)を発生させる32ビットの浮動小数点(FP)の行列乗算命令の演算を例示する。図6の例示では、4×4行列のおのおのが、4つのデータ要素の4つのブロックで表されているが、記載された行列乗算の実例では、これは重要ではなく、むしろ以下の図7Aとの比較を容易にするために単に提供されたことが留意されるべきである。
図7Aに戻って示すように、同じ512ビットのレジスタ50が、ラベル付けされた4つの部分52、54、56、及び58で示される。ソース・レジスタA、ソース・レジスタB、及び宛先レジスタCのこれら4つの部分は、図7Aにおける4つのデータ要素のグループを囲む破線でグラフィック的に例示される。したがって、宛先レジスタCに記憶されるべき4つの2×2結果行列のおのおのは、個別の行列乗算演算によって生成される。さらに、図7Aの実例では、これらは4つの別個の行列乗算命令によって開始されるものとして示され、おのおのは、(行列乗算演算が浮動小数点の32ビットのデータ値を使用して2×2行列を生成することを指定することに加えて、)宛先レジスタ、ソース・レジスタ、及び各レジスタの一部を指定する。このようにして、第1の行列乗算演算は、2つのソース・レジスタの第1の部分から取得した2×2行列を使用して実行され、結果は、宛先レジスタCの第1の部分に記憶される。さらに3つのこのような行列乗算演算は、その後、3つのさらなる行列乗算命令によって指定され、各命令は、レジスタの3つのさらなる部分の1つを指名する。
図7Bは、図7Aの処理を実施するために使用される回路構成の実例を概略的に例示する。レジスタA、B、及びCは、それぞれ4部分レジスタ70、71、及び76として示される。4入力マルチプレクサ72及び73は、レジスタA及びBのおのおのの、それぞれ4部分に接続され、各マルチプレクサは、命令から導出された「部分」値によって制御される。このように選択された2つの部分は、図3の実例の形態であり得る行列乗算回路構成74への2つの入力を形成する。結果として得られる結果行列の4つの要素は、レジスタCのそれぞれ4部分に接続されるマルチプレクサ75への単一の入力を形成する。マルチプレクサ75は、命令から派生した「部分」値によっても制御され、結果行列の4つの要素を、レジスタCの部分の1つに導く。レジスタの特定の部分から選択し、レジスタの特定の部分に結果を書き込むためのこのタイプの回路構成は、本明細書に記載される他の実例の処理をサポートするために同様に提供され得る。
それゆえ、図7Aの実例に関して、特定の行列乗算命令が、データ処理動作を、ソース・レジスタと宛先レジスタとの両方の一部に制限することを選択し得ることが認識される。しかしながら、同様の制限は、「ネイティブ」な(ハードウェア・ベースの)ベクトル長よりも短くなるように使用できるベクトル長を制限するソフトウェアによってデータ処理装置に適用される構成からも生じ得る。また図8は、512ビットのレジスタ50を示し、この実例では、最大ベクトル長を256ビットに制限する、ソフトウェアで定義された最大ベクトル長60が適用されていることが例示される。この最大ベクトル長は、「定義されたソフトウェア」であり、ここでは、関連する制御信号を生成して、この最大ベクトル長60の値を設定することにより、復号回路構成18が応答する命令が提供される。この最大ベクトル長にこのように制約が課されると、これにより、装置が実行できる行列乗算演算にも制約が課される。さらに図6の実例を使用すると、図6の実例の4×4行列を記憶するために必要な(まだ32ビットのデータ要素を有している)512ビットのスペースが利用可能ではないため、この4×4行列乗算が実行されないことがわかる。しかしながら、図7Aの実例を参照すると、2つの2×2行列を記憶する容量が、利用可能であり、これが図8に表される。それにも関わらず、宛先レジスタCに記憶するための1つ又は複数の結果行列を生成するために、ソース・レジスタAの8つのデータ要素が、ソース・レジスタBのデータ要素によって行列乗算され得る多くの手法があることがさらに理解される。これら可能性はさらに、以下の図11A〜図11C及び図12A〜図12Cを参照して説明される。それにも関わらず、図8を参照して、ソフトウェアで定義された最大ベクトル長を課すことは、図8に示される宛先レジスタCの利用可能な部分の2つの半分における正方行列の両方が、単一の行列乗算命令に応答して実行される実例で実行された、行列乗算演算の数に制限を課したとみなされ得ることが留意されるべきである。或いは、これは、この256ビットの最大ベクトル長が課された状態で(32ビットのデータ要素の)4×4行列を生成できないという点で、生成される行列の次元の制限として理解され得るため、システムは、1つ又は2つの2×2行列の生成によって行列乗算命令に応答するように制約が課される。
レジスタの容量とデータ要素のサイズが許す場合、本技術の1つ又は複数の行列乗算命令に応答して実行され得る異なる行列乗算演算に関してかなりの柔軟性があり得る。図9は、ソース・レジスタAとソース・レジスタBとのおのおのから最大16のデータ要素が抽出されることを例示する。おのおのの場合で、これらはさらに、ソースAとソースBのそれぞれ半分から取得された8つのデータ要素をおのおの含む2つの部分に部分分割される可能性があるとして例示される。512ビットのレジスタの実例に基づいて、1つの実例では、図9に例示されるデータ要素の全セットは、単一の行列乗算演算に関与され得、主に、ここでは、8ビットのデータ要素の8×8行列が、ソースBからの32ビットのデータ要素の2×8行列を乗じられたソースAからのデータ要素の32ビットの8×2行列の結果として生成される。しかしながら、この実例では、いくつかの置換が可能である。たとえば、図9における4つの正方形の各グループが、1つのデータ要素のみを表すビューでは、それに従って、ソースAからの128ビットのデータ要素の4×1行列が、レジスタBからの128ビットのデータ要素の1×4行列を乗じられ、32ビットのデータ要素の4×4行列を生成する。さらに、ソースA又はソースBのいずれかの2つのラベル付けされた部分の一方のみを使用して、ソース行列の要素を提供し、その後、対応する正方行列が生成され得る。たとえば、ソースA(0)とソースB(0)のみがオペランド行列のデータ要素を提供する場合、対応するより小さな結果行列も、その後、生成され得る。繰り返すが、個々のデータ要素のサイズと、所定の行列を形成するデータ要素の数とのトレードオフもまた変動し得る。
図10は、特定の行列乗算演算によって生成された正方結果行列を記憶するために必要な記憶容量よりも、宛先レジスタの記憶容量が大きい別の実例を例示する。例示されるように、ここでは、2×4行列に4×2行列を乗じて2×2行列を生成すると、そのストレージの宛先レジスタの容量の半分のみを必要とする結果データ要素のセットが生成され、宛先レジスタの部分0に適用されている図10にグラフィック的に示される。図10の下部は、宛先レジスタが、行列乗算命令において単に指名されている場合に、デフォルトにより生じる可能性があることを例示し、行列乗算演算においてこの部分が明示的に指名されている第2の実例が与えられる。
図11A及び図11Bは、所定の行列乗算演算の結果が、宛先レジスタの全容量を占有しない正方結果行列となる場合を示すいくつかのさらなる実例を例示する。具体的には、図11A及び図11Bの実例では、考慮される2×2行列乗算演算はおのおの、宛先レジスタCの半分のみを占有する2×2結果行列を生成する。これらがFP32(すなわち、浮動小数点32ビット命令)として例示されている場合、これら実例は、最大容量が256ビットのレジスタを表す。これは、たとえば、レジスタのネイティブな容量であり得るか、又は、図8を参照して上述したように、最大ベクトル長に、ソフトウェアが制限を課した結果である可能性がある。したがって、図11Aの実例では、ソース・レジスタA及びBと、宛先レジスタCとを単に指定する第1の命令が示される。この命令を実行した結果として、装置はデフォルトで、例示された2×2の行列データ要素を含むソース・レジスタAの一部のみを選択できる。図11Aにグラフィック的に示されるように、これにソース・レジスタBの内容のそれぞれの部分を乗じて、宛先レジスタCの2つのそれぞれの部分に適用する2つの結果正方行列を生成できる。図11Aに示される他の実例の命令では、使用される図Aの部分は、命令において明示的に指名され(すなわち、部分「0」)、これが、2つのそれぞれの行列乗算演算において、ソース・レジスタBの2つの半分に適用され、宛先レジスタCのそれぞれの部分に記憶されている2つの正方結果行列を生成する。
図11Bは、宛先レジスタCのそれぞれの部分に適用するための2つの結果正方行列を生成するために、ソース・レジスタAとソース・レジスタBの2つの部分のそれぞれの内容が、単一の行列乗算演算に応答して使用され得る別の方式を例示する。図11Bの実例では、ソース・レジスタAの第1の部分が、ソース・レジスタBの第1の部分によって行列乗算され、結果として得られる正方2×2行列が、宛先レジスタCの第1の部分に適用される。同様に、並行して、ソース・レジスタAの第2の部分が、ソース・レジスタBの第2の部分によって乗じられ、宛先レジスタCの第2の部分に適用される第2の正方結果行列を生成する。
図11Cは、いくつかの実施例におけるさらなる命令、すなわち、データ値が検索されて、指定されたレジスタAの1つの部分に記憶されるメモリ位置を指定するコピー・ロード命令の動作を概略的に例示する。データ値は、レジスタAの他の部分にもコピーされる。このコピーは、レジスタAの両方の半分に同じ値を直接ロードするロードによって、又は、レジスタの第1の半分から、ロード後に実行されるレジスタAの第2の半分へのコピーによって実施され得る。本技術の文脈において、このコピー・ロード命令は、図11A及び図11Bに示されるアプローチに関する柔軟性を可能にする。たとえば、図11Bの行列乗算命令を実行する前に図11Cのコピー・ロードを実行することによって、同じ内容がソース・レジスタAの各半分に存在し、したがって、その効果は、図11Aの効果と同じになる。つまり、ソース・レジスタAの半分から取得された内容が、ソース・レジスタBの2つの半分のそれぞれの内容によって乗じられ、宛先レジスタCのそれぞれの半分に適用される2つの正方結果行列を生成する。
図11Dは、図11Aの第2の実例の命令をサポートする1つの実施例に提供される例示的な回路構成を概略的に例示する。ソース・レジスタA及びBは、それぞれ2部分のレジスタ120及び122として示される。2入力マルチプレクサ124は、レジスタAのそれぞれの2つの部分に接続されている。マルチプレクサは、命令によって設定された「要素選択」信号によって(図11Aの第2の命令例示では「0」として)制御される。このように選択された部分は、行列乗算回路構成126及び128の各インスタンスへの1つの入力を形成する(これは、図3の実例の形態であり得る)。行列乗算回路構成126及び128のそれぞれに対する他の入力は、ソース・レジスタ122(B)のそれぞれの部分である。結果として得られる2つの2×2行列は、レジスタ130(C)のそれぞれの部分に書き込まれる。比較すると、「固定部分」の実例(図11Aの第1の命令の実例)の場合、部分0は両方の乗算回路構成に直接ルーティングされ、図11Bの実例では、レジスタAからのルーティングは、レジスタBに関して図11Dに示されるものと同じになるであろう(すなわち、部分0から行列乗算回路0、及び部分1から行列乗算回路1)。
本技術はまた、それを引き起こすデータ処理動作の一部として、所定のソース・レジスタの2つの半分の内容のスワップ(少なくとも、実質的なスワップ−以下を参照)を引き起こすことができる別の行列乗算命令も提案する。これは、図12A及び図12Bの実例に示され、ここでは、命令は、ソース・レジスタAとソース・レジスタBを指定し、ソース・レジスタAの第1の部分から取得した2×2行列と、ソース・レジスタBの第1の部分から取得した2×2行列とをともに乗じる第1の行列乗算演算を実行する。これは、宛先レジスタCの第1の部分に記憶される。また、ソース・レジスタAの第2の部分から取得した2×2行列と、ソース・レジスタBの第2の部分から取得した2×2行列とをともに乗じる第2の行列乗算演算が実行される。これは、宛先レジスタCの第2の部分に記憶される。図12Aの実例では、スワップ・フラグは設定されないため、スワップは行われない。
図12Bの実例では、スワップ・フラグが設定される。これにより、少なくとも行列乗算演算を実行するために、ソース・レジスタAの2つの部分の内容がスワップされる。そのため、たとえば、ソース・レジスタAの部分にアクセスする順序を一時的に切り替えるだけでこれを行うことができ、その結果、命令は、その後、最初に、ソース・レジスタAの第2の部分を、第1の行列乗算演算に使用し、ソース・レジスタAの第1の部分を、第2の行列乗算演算に使用する。それにも関わらず、ソース・レジスタAの2つの部分は、必要に応じて明示的にスワップされ得るが、処理速度が主な目的である場合、関与する追加の処理ステップにとって、それは魅力的なオプションにならないかもしれない。いずれにせよ、図12Bに見られ得るように、スワップ・フラグを設定すると、図12Aで生成されたものとは反対の対角行列が生成される。したがって、ソース・レジスタAの第1の部分から取得された2×2行列(ただし、このステップの前にAの第1及び第2の部分が「スワップ」されたことに留意されたい)と、ソース・レジスタBの第1の部分から取得された2×2行列とをともに乗じる第1の行列乗算演算が実行される。これは、宛先レジスタDの第1の部分に記憶される。その後、ソース・レジスタAの第2の部分から取得された2×2行列(繰り返すが、これは、Aの「スワップされた」バージョンにあることに留意されたい)と、ソース・レジスタBの第2の部分から取得された2×2行列とをともに乗じる第2の行列乗算演算が実行される。これは、宛先レジスタDの第2の部分に記憶される。したがって、図12A及び図12Bの「スワップ可能」命令により、プログラマは、スワップ・フラグを設定又は設定解除する単純なメカニズムによって、行列の反対側の対角線の生成を切り替えることができる。さらに、設定解除バージョンと設定バージョンとの両方を実行することにより、必要に応じて、ソース・レジスタA及びBのおのおのにおける2つのソース行列の完全な行列乗算の結果を形成する4つの2×2部分行列の全セットが生成され得る。上述した図12A及び図12Bの実例では、この全結果は、(おのおのに2×2部分行列の対角線ペアを有する)レジスタC及びDの内容によって与えられる。関連する処理に関して、このアプローチの利点は、内部ループ(ほとんどの処理時間が費やされる)において、必要なアクションのみがA及びBをロードし、2つのMMUL動作(すなわち、未スワップ・バージョン及びスワップ済バージョン)を実行することである。2つの宛先(C及びD)は、結果行列を、従来とは異なる方式(おのおの、対角線半分)で記憶するが、これは内部ループの外側で改正され、これは、プログラムのパフォーマンスへの影響を少なくする。
図12Cは、図12A及び図12Bの実例をサポートする1つの実施例で提供される例示的な回路構成を概略的に例示する。ソース・レジスタA及びBは、それぞれ2部分のレジスタ80及び81として示される。2入力マルチプレクサ82及び83は、両方ともレジスタAのそれぞれ2つの部分に接続されており、入力としてのこれら部分の順序は、2つのマルチプレクサ間で反転されることに留意されたい。マルチプレクサ82及び83は両方とも、命令から導出された「スワップ」値(すなわち、オン又はオフ=1又は0)によって制御される。このように選択された2つの部分はおのおの、行列乗算回路構成84及び85の各インスタンスへの1つの入力を形成する(これは、図3の実例の形態であり得る)。行列乗算回路構成84及び85のおのおのに対する他の入力は、ソース・レジスタBのそれぞれの部分である。結果として得られる2つの2×2行列は、レジスタC(図12Aの場合−スワップなし)又はレジスタD(図12Bの場合−スワップ)のそれぞれの部分へ書き込まれる。
前述の実例では、ソース・レジスタのペアは1つしかなく、おのおのが行列乗算演算でともに乗算される2つの行列のいずれかを提供する。しかしながら、本技術はさらに、オペランド行列の少なくとも1つが、1つよりも多くのソース・レジスタから抽出される実例を提供する。この実例は図13に与えられ、ここでは、データ要素の2×4行列が抽出される第1のソース・レジスタAが指定されているが、2つのソース・レジスタ、つまりB1及びB2が指定されている。したがって、これらは、2つの独立した4×2行列、或いはその代わりに、1つの結合された4×4行列のいずれかを表すと考慮され得る。ソース・レジスタB1及びB2の内容の表示にどちらがビューされていても、これらソース・レジスタのそれぞれの内容は、ソース・レジスタAから導出された2×4行列で行列乗算され、(図13においてC1及びC2とラベル付けされた)2つの正方結果行列が生成され、これらは、その後、図13に示されるように、宛先レジスタのそれぞれ半分に適用される。したがって、さらにソース・レジスタB1及びB2の内容のビューに応じて、宛先レジスタの内容は、結果の2×4行列又は2つの独立した2×2行列のいずれかであると考慮され得る。
しかしながら、1つよりも多くのレジスタにわたる行列のこの分布は、ソース行列の1つだけに限定されず、図14は、このアプローチが、ソース・オペランドと、結果として得られる行列との両方に適用される実例を概略的に例示する。図14にグラフィック的に示される動作では、命令が4つのソース・レジスタA1、A2、B1、及びB2を指定し、2つの宛先レジスタC1及びC2も指定した。したがって、例示されるように、16のデータ要素は、ソース・レジスタA1及びA2に保持され、16のデータ要素は、ソース・レジスタB1及びB2に保持され、16のデータ要素は、宛先レジスタC1及びC2に記憶され得る。したがって、6つのレジスタすべてを指定する単一の行列乗算命令に応答して、4×4行列に4×4行列を乗じて、結果4×4行列を生成し、これは、その後、2つの半分で、宛先レジスタC1及びC2に適用される。
図15は、使用され得る仮想マシンの実施を例示する。前述の実施例は、関連する技術をサポートする特定の処理ハードウェアを動作させる装置及び方法に関して本発明を実施するが、ハードウェア・デバイスのいわゆる仮想マシン実施を提供することも可能である。これら仮想マシン実施は、仮想マシン(VM)プログラム510をサポートするホスト・オペレーティング・システム(OS)520を動作させるホスト・プロセッサ(ハードウェア)530で動作する。通常、妥当な速度で実行する仮想マシンの実施を提供するには、大規模で強力なプロセッサが必要であるが、このようなアプローチは、互換性や再利用のための理由で、別のプロセッサにネイティブなコードを実行したい場合など、特定の状況で正当化され得る。仮想マシン・プログラム510は、コンピュータ可読記憶媒体(非一時的媒体であり得る)に記憶され得、仮想マシン・プログラム510によってモデル化されているデバイスである実際のハードウェアによって提供されるアプリケーション・プログラム・インターフェースと同じ、アプリケーション・プログラム・インターフェース(命令実行環境)を、アプリケーション・プログラム500に提供する。したがって、上述した行列乗算命令のいずれかを含むプログラム命令は、仮想マシン・プログラム510を使用してアプリケーション・プログラム500内から実行され、仮想マシン・ハードウェアとの相互作用をモデル化することができる。
図16は、本技術の行列乗算命令が、メモリから検索するデータ処理命令のシーケンス内の装置によって検索されることに応答して、1つの実施例の方法に従って行われるステップのシーケンスを示す。フローは、これら行列乗算命令の1つが受信されるステップ100で開始する。ここで「受信」とは、命令がメモリからフェッチされ復号される処理であると理解され得、さらに、特定の動作が実行され得るように、復号回路構成による処理回路構成とレジスタとの関連制御信号の生成を含む。これらにより、図16に示されるこの手順の次のステップを実行できる。したがって、次のステップ102は、行列乗算命令で指定された第1のソース・レジスタからのデータ要素の第1の行列の抽出を含む。次のステップ104において、データ要素の第2の行列が、行列乗算命令で指定された第2のソース・レジスタから抽出される。図16は、本技術を実施するときに一般的に実行される一連のステップを示し、上述した実施例のいずれかからの詳細は、図16の関連するステップにインポートされ得ることが認識されるべきである。たとえば、ステップ102及び104における第1及び第2のソース・レジスタからの第1及び第2の行列の抽出は、本技術の関連する実施例を実施するときに、第1及び第2のソース・レジスタのいずれか又は両方の指定された部分からこれら行列を抽出することを含み得る。しかしながら、第1及び第2の行列は、第1及び第2のソース・レジスタから抽出されるため、図のステップ106及び108によって表される反復処理が実行され得、ここでは、点乗積演算が、第1の行列の所定の行と、第2の行列の所定の列とに対して実行され、結果行列内の所定の位置のデータ要素を生成する。結果行列のさらなるデータ要素を生成するために実行されるべきさらなる点乗積演算が残っている場合、フローは、これらが実行されるために、ステップ108から106にループ・バックする。それにも関わらず、図11の106及び108のステップは、例示の簡素化のために順次実行されるように示されるが、本技術は、この反復的な順次的なアプローチに正確には限定されず、たとえば、図3に示される例示的な回路構成から容易に理解され得るように、この手順のそれぞれの「反復」は、実際には互いに並行して実行され得ることが認識されるべきである。正方結果行列を形成するデータ要素の全セットが生成されると、たとえば、その宛先レジスタの既存の内容との累積によって、行列乗算命令で指定された宛先レジスタに適用される(ステップ110)。
簡単に全体を要約すると、データ処理装置において行列乗算を実行するための装置、行列乗算命令、装置を動作させる方法、及び仮想マシン実施を含む技術が開示される。少なくとも4つのデータ要素を記憶するための各レジスタは、行列乗算命令によって参照され、行列乗算命令に応答して、行列乗算演算が実行される。データ要素の第1及び第2の行列が、第1及び第2ソース・レジスタから抽出され、第1の行列のそれぞれの行及び第2の行列のそれぞれの列に作用する複数の点乗積演算が実行され、結果データ要素の正方行列が生成され、これらは宛先レジスタに適用される。所定の数のレジスタ・オペランドのより高い計算密度が、要素毎ベクトル技術に関して達成される。
本出願では、「〜ように構成された」という用語は、装置の要素が、定義された動作を実行できる構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの相互接続の構成又は方式を意味する。たとえば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又は、プロセッサ又は他の処理デバイスが機能を実行するようにプログラムされ得る。「〜ように構成された」は、定義された動作を提供するために、装置要素を何らかの手法で変更する必要があることを意味しない。
添付の図面を参照して例示的な実施例が本明細書において詳細に記載されたが、本発明はこれら正確な実施例に限定されず、添付の特許請求の範囲によって定義されるような本発明の範囲及び精神から逸脱することなく、当業者による様々な変更、追加、及び修正が有効化され得ることが理解されるべきである。たとえば、本発明の範囲から逸脱することなく、従属請求項の特徴と、独立請求項の特徴との様々な組合せが行われ得る。

Claims (44)

  1. 装置であって、
    複数のレジスタを有するレジスタ記憶回路構成であって、各レジスタは、少なくとも4つのデータ要素を記憶する、レジスタ記憶回路構成と、
    行列乗算命令に応答して制御信号を生成する復号器回路構成であって、前記行列乗算命令は、前記複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ、及び宛先レジスタを指定する、復号器回路構成と、
    前記制御信号に応答して、行列乗算演算を実行するデータ処理回路構成とを備え、前記行列乗算演算は、
    前記第1のソース・レジスタからデータ要素の第1の行列を抽出することと、
    前記第2のソース・レジスタからデータ要素の第2の行列を抽出することと、
    結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の前記正方行列のそれぞれの結果データ要素を生成するために、データ要素の前記第1の行列のそれぞれの行と、データ要素の前記第2の行列のそれぞれの列とに作用する、実行することと、
    結果データ要素の前記正方行列を、前記宛先レジスタに適用することとを含む、装置。
  2. 結果データ要素の前記正方行列を、前記宛先レジスタに適用することは、結果データ要素の前記正方行列を前記宛先レジスタに記憶することを含む、請求項1に記載の装置。
  3. 結果データ要素の前記正方行列を、前記宛先レジスタに適用することは、結果データ要素の前記正方行列を、前記宛先レジスタに記憶された結果データ要素の以前に記憶された正方行列とともに累積することを含む、請求項1に記載の装置。
  4. データ要素の前記第1の行列の各データ要素と、データ要素の前記第2の行列の各データ要素は、結果データ要素の前記正方行列の各データ要素の結果要素のビット長に等しいソース要素のビット長を有する、請求項1から3までのいずれか一項に記載の装置。
  5. データ要素の前記第1の行列の各データ要素と、データ要素の前記第2の行列の各データ要素は、結果データ要素の前記正方行列の各データ要素の結果要素のビット長とは異なるソース要素のビット長を有する、請求項1から3までのいずれか一項に記載の装置。
  6. 前記ソース要素のビット長が、前記結果要素のビット長と2倍異なる、請求項5に記載の装置。
  7. 前記ソース要素のビット長が、前記結果要素のビット長と2倍よりも大きく異なる、請求項5に記載の装置。
  8. 前記行列乗算命令は、結果データ要素の前記正方行列の次元を指定する、請求項1から7までのいずれか一項に記載の装置。
  9. データ要素の前記第1の行列の前記データ要素、データ要素の前記第2の行列の前記データ要素、及び結果データ要素は、浮動小数点値である、請求項1から8までのいずれか一項に記載の装置。
  10. データ要素の前記第1の行列の前記データ要素、データ要素の前記第2の行列の前記データ要素、及び結果データ要素は、整数値である、請求項1から8までのいずれか一項に記載の装置。
  11. データ要素の前記第1の行列の前記データ要素、データ要素の前記第2の行列の前記データ要素、及び結果データ要素は、符号のない整数値である、請求項10に記載の装置。
  12. データ要素の前記第1の行列の前記データ要素、データ要素の前記第2の行列の前記データ要素、及び結果データ要素は、符号付きの整数値である、請求項10に記載の装置。
  13. データ要素の前記第1の行列と、データ要素の前記第2の行列は、正方行列である、請求項1から12までのいずれか一項に記載の装置。
  14. データ要素の前記第1の行列と、データ要素の前記第2の行列は、非正方の長方行列である、請求項1から12までのいずれか一項に記載の装置。
  15. 前記復号器回路構成はさらに、構成命令に応答して構成制御信号を生成し、前記構成命令は、最大ベクトル長を指定し、前記データ処理回路構成は、前記構成制御信号に応答して、前記結果データ要素の合計サイズが、前記最大ベクトル長を超えないように、後続する行列乗算演算に制約を課す、請求項1から14までのいずれか一項に記載の装置。
  16. 前記後続する行列乗算演算に制約を課すことは、前記結果データ要素の合計サイズが、前記最大ベクトル長を超えない次元を有する結果データ要素の前記正方行列の生成を含む、請求項15に記載の装置。
  17. 前記後続する行列乗算演算に制約を課すことは、前記結果データ要素の合計サイズが、前記最大ベクトル長を超えない、結果データ要素の正方行列の数を生成することを含む、請求項15に記載の装置。
  18. 前記結果要素の合計サイズが、前記宛先レジスタの記憶容量未満である、請求項15から17までのいずれか一項に記載の装置。
  19. 前記行列乗算命令において指定された次元を有する結果データ要素の前記正方行列は、前記宛先レジスタの記憶容量に対応する、請求項8に記載の装置、又は、請求項8に従属する場合、請求項9から18までのいずれか一項に記載の装置。
  20. 前記宛先レジスタは、少なくとも8つのデータ要素を収容し、結果データ要素の少なくとも第2の正方行列を記憶するための記憶容量を有する、請求項1から18までのいずれか一項に記載の装置。
  21. 前記宛先レジスタの記憶容量は、前記行列乗算命令で指定された次元を有する結果データ要素の1つよりも多くの正方行列を記憶できる、請求項8に記載の装置、又は、請求項8に従属する場合、請求項9から18までのいずれか一項に記載の装置。
  22. 前記データ処理回路構成は、前記制御信号に応答して、結果データ要素の前記正方行列を、前記宛先レジスタの第1の部分に適用する、請求項20又は21に記載の装置。
  23. 前記宛先レジスタの前記第1の部分は、前記データ処理回路構成のために事前に決定される、請求項22に記載の装置。
  24. 前記行列乗算命令はさらに、前記宛先レジスタの前記第1の部分を指定する、請求項22に記載の装置。
  25. 前記データ処理回路構成はさらに、前記制御信号に応答して、第2の行列乗算演算を実行して、結果データ要素の前記第2の正方行列を生成し、結果データ要素の前記第2の正方行列を、前記宛先レジスタの第2の部分に適用する、請求項20に従属する場合、請求項22から24までのいずれか一項に記載の装置。
  26. 前記第1のソース・レジスタからのデータ要素の前記第1の行列は、前記第1のソース・レジスタの第1の部分から抽出され、前記データ処理回路構成は、前記制御信号に応答して、
    前記第2のソース・レジスタの第1の部分から、データ要素の前記第2の行列を抽出することと、
    結果データ要素の前記正方行列を、前記宛先レジスタの第1の部分に適用することとを含む第1の行列乗算演算として前記行列乗算演算を実行し、
    前記データ処理回路構成は、前記制御信号に応答して、
    前記第2のソース・レジスタの第2の部分から、データ要素の前記第2の行列を抽出することと、
    結果データ要素の前記正方行列を、前記宛先レジスタの前記第2の部分に適用することとを含む前記第2の行列乗算演算を実行する、請求項25に記載の装置。
  27. 前記データ処理回路構成は、前記制御信号に応答して、
    前記第1のソース・レジスタの第1の部分から、データ要素の前記第1の行列を抽出することと、
    前記第2のソース・レジスタの第1の部分から、データ要素の前記第2の行列を抽出することと、
    結果データ要素の前記正方行列を、前記宛先レジスタの第1の部分に適用することとを含む第1の行列乗算演算として前記行列乗算演算を実行し、前記データ処理回路構成は、前記制御信号に応答して、
    前記第1のソース・レジスタの第2の部分から、データ要素の前記第1の行列を抽出することと、
    前記第2のソース・レジスタの第2の部分から、データ要素の前記第2の行列を抽出することと、
    結果データ要素の前記正方行列を、前記宛先レジスタの前記第2の部分に適用することとを含む前記第2の行列乗算演算を実行する、請求項25に記載の装置。
  28. 前記第1のソース・レジスタの前記第1の部分は、前記データ処理回路構成のために事前に決定される、請求項26又は27に記載の装置。
  29. 前記行列乗算命令はさらに、前記第1のソース・レジスタの前記第1の部分を指定する、請求項26又は27に記載の装置。
  30. 前記データ処理回路構成はさらに、前記制御信号に応答して、少なくとも1つのさらなる行列乗算演算を実行し、結果データ要素の少なくともさらなる正方行列を生成する、請求項26から29までのいずれか一項に記載の装置。
  31. 前記復号器回路構成は、前記行列乗算命令に先行するコピー・ロード命令に応答して、メモリ位置及び前記第1のソース・レジスタを指定して、コピー・ロード制御信号を生成し、前記データ処理回路構成は、前記コピー・ロード制御信号に応答して、
    データ要素の前記第1の正方行列を、前記指定されたメモリ位置から、前記第1のソース・レジスタの前記第1の部分にロードすることと、
    データ要素の前記第1の正方行列を、前記第1のソース・レジスタの前記第2の部分にコピーすることであって、前記第2のソース・レジスタからのデータ要素の前記第2の行列は、前記第2のソース・レジスタの前記第1の部分から抽出される、コピーすることと、を含むコピー・ロード動作を実行する、請求項26から30までのいずれか一項に記載の装置。
  32. 前記第1のソース・レジスタの前記第1の部分は、前記第1のソース・レジスタの第1の半分であり、前記第2のソース・レジスタの前記第1の部分は、前記第2のソース・レジスタの第1の半分であり、前記宛先レジスタの前記第1の部分は、前記宛先レジスタの第1の半分である、請求項26から31までのいずれか一項に記載の装置。
  33. 前記データ処理回路構成はさらに、レジスタ内容スワッピング命令に応答して、レジスタ内容スワッピング動作を実行し、前記第1のソース・レジスタ及び前記第2のソース・レジスタの一方の前記第1の半分と第2の半分との内容を交換する、請求項27に従属する場合、請求項32に記載の装置。
  34. 前記データ処理回路構成はさらに、前記制御信号に応答して、前記第1の行列乗算演算の後、前記第2の行列乗算演算の前に、レジスタ内容スワッピング動作を実行して、前記第1のソース・レジスタ及び前記第2のソース・レジスタの一方の前記第1の半分と第2の半分との内容を交換する、請求項27に従属する場合、請求項32に記載の装置。
  35. 前記行列乗算命令は、前記レジスタ内容スワッピング動作が実行されるべきか否かを指定する、請求項34に記載の装置。
  36. 前記行列乗算命令は、前記第1のソース・レジスタと前記第2のソース・レジスタのどちらが前記レジスタ内容スワッピング動作の対象となるべきかを指定する、請求項34又は35に記載の装置。
  37. 前記行列乗算命令がさらに、第3のソース・レジスタを指定し、前記行列乗算演算は、前記第1のソース・レジスタ及び前記第3のソース・レジスタから、データ要素の前記第1の行列を抽出することを含む、請求項1から36までのいずれか一項に記載の装置。
  38. 前記行列乗算命令はさらに、第4のソース・レジスタを指定し、前記行列乗算演算は、前記第2のソース・レジスタ及び前記第4のソース・レジスタから、データ要素の前記第2の行列を抽出することを含む、請求項1から37までのいずれか一項に記載の装置。
  39. 前記行列乗算命令はさらに、さらなる宛先レジスタを指定し、前記行列乗算演算は、前記宛先レジスタと、前記さらなる宛先レジスタとの間の結果データ要素分割の前記正方行列を適用することを含む、請求項1から38までのいずれか一項に記載の装置。
  40. データ処理装置を動作させる方法であって、
    行列乗算命令に応答して制御信号を生成することであって、前記行列乗算命令は、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも4つのデータ要素を記憶することができる、生成することと、
    前記制御信号に応答して、行列乗算演算を実行することとを含み、前記行列乗算演算は、
    前記第1のソース・レジスタからデータ要素の第1の行列を抽出することと、
    前記第2のソース・レジスタからデータ要素の第2の行列を抽出することと、
    結果データ要素の正方行列を生成するために、複数の点乗積演算を実行することであって、各点乗積演算は、結果データ要素の前記正方行列のそれぞれの結果データ要素を生成するために、データ要素の前記第1の行列のそれぞれの行と、データ要素の前記第2の行列のそれぞれの列とに作用する、実行することと、
    結果データ要素の前記正方行列を、前記宛先レジスタに適用することとを含む、方法。
  41. 装置であって、
    行列乗算命令に応答して制御信号を生成するための手段であって、
    前記行列乗算命令は、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ、及び宛先レジスタを指定し、各レジスタは、少なくとも4つのデータ要素を記憶することができる、生成するための手段と、
    前記制御信号に応答して、行列乗算演算を実行するための手段とを備え、実行するための手段は、
    前記第1のソース・レジスタからデータ要素の第1の行列を抽出するための手段と、
    前記第2のソース・レジスタからデータ要素の第2の行列を抽出するための手段と、
    結果データ要素の正方行列を生成するために、複数の点乗積演算を実行するための手段であって、各点乗積演算は、結果データ要素の前記正方行列のそれぞれの結果データ要素を生成するために、データ要素の前記第1の行列のそれぞれの行と、データ要素の前記第2の行列のそれぞれの列とに作用する、実行するための手段と、
    結果データ要素の前記正方行列を、前記宛先レジスタに適用するための手段とを備えた、装置。
  42. 請求項1から39までのいずれか一項に記載の装置に対応する命令実行環境を提供するようにホスト・データ処理装置を制御するためのプログラム命令を含む仮想マシン・コンピュータ・プログラム。
  43. 請求項40に記載の方法が実行される命令実行環境を提供するようにホスト・データ処理装置を制御するためのプログラム命令を含む仮想マシン・コンピュータ・プログラム。
  44. 請求項42又は43に記載の仮想マシン・コンピュータ・プログラムが非一時的な様式で記憶されるコンピュータ可読記憶媒体。
JP2019571000A 2017-06-28 2018-06-08 レジスタ・ベースの行列乗算 Active JP7253506B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1710332.6 2017-06-28
GB1710332.6A GB2563878B (en) 2017-06-28 2017-06-28 Register-based matrix multiplication
PCT/GB2018/051573 WO2019002811A1 (en) 2017-06-28 2018-06-08 REGISTRY-BASED MATRIX MULTIPLICATION

Publications (2)

Publication Number Publication Date
JP2020527778A true JP2020527778A (ja) 2020-09-10
JP7253506B2 JP7253506B2 (ja) 2023-04-06

Family

ID=59523560

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019571000A Active JP7253506B2 (ja) 2017-06-28 2018-06-08 レジスタ・ベースの行列乗算

Country Status (8)

Country Link
US (2) US11288066B2 (ja)
EP (1) EP3646169B1 (ja)
JP (1) JP7253506B2 (ja)
KR (1) KR102583997B1 (ja)
CN (1) CN110770701B (ja)
GB (1) GB2563878B (ja)
IL (1) IL271174B1 (ja)
WO (1) WO2019002811A1 (ja)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018174934A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatus for matrix move
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
US10528642B2 (en) * 2018-03-05 2020-01-07 International Business Machines Corporation Multiple precision integer multiple by matrix-matrix multiplications using 16-bit floating point multiplier
US10970076B2 (en) * 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US10853067B2 (en) 2018-09-27 2020-12-01 Intel Corporation Computer processor for higher precision computations using a mixed-precision decomposition of operations
US10963246B2 (en) * 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US11615307B2 (en) * 2018-12-06 2023-03-28 MIPS Tech, LLC Neural network data computation using mixed-precision
US20200210517A1 (en) * 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
JP7296574B2 (ja) * 2019-03-04 2023-06-23 パナソニックIpマネジメント株式会社 プロセッサ及びプロセッサの制御方法
US11334647B2 (en) * 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US11119772B2 (en) * 2019-12-06 2021-09-14 International Business Machines Corporation Check pointing of accumulator register results in a microprocessor
US20210200711A1 (en) * 2019-12-28 2021-07-01 Intel Corporation System and Method for Configurable Systolic Array with Partial Read/Write
US11355175B2 (en) 2020-04-09 2022-06-07 Micron Technology, Inc. Deep learning accelerator and random access memory with a camera interface
US11726784B2 (en) 2020-04-09 2023-08-15 Micron Technology, Inc. Patient monitoring using edge servers having deep learning accelerator and random access memory
US11887647B2 (en) * 2020-04-09 2024-01-30 Micron Technology, Inc. Deep learning accelerator and random access memory with separate memory access connections
US11874897B2 (en) 2020-04-09 2024-01-16 Micron Technology, Inc. Integrated circuit device with deep learning accelerator and random access memory
CN114168895A (zh) * 2020-09-11 2022-03-11 北京希姆计算科技有限公司 矩阵计算电路、方法、电子设备及计算机可读存储介质
CN112182496B (zh) * 2020-09-24 2022-09-16 成都海光集成电路设计有限公司 用于矩阵乘法的数据处理方法及装置
CN112433760B (zh) * 2020-11-27 2022-09-23 海光信息技术股份有限公司 数据排序方法和数据排序电路
CN112434255B (zh) * 2020-12-03 2023-12-08 成都海光微电子技术有限公司 向量-矩阵运算和数据处理方法、乘法器和处理器芯片
CN116109468B (zh) * 2023-04-04 2023-07-21 南京砺算科技有限公司 图形处理单元及指令编译方法、存储介质、终端设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040111587A1 (en) * 2002-12-09 2004-06-10 Nair Gopalan N Apparatus and method for matrix data processing
US6901422B1 (en) * 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US7873812B1 (en) * 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US20110153707A1 (en) * 2009-12-23 2011-06-23 Boris Ginzburg Multiplying and adding matrices
US20120124332A1 (en) * 2010-11-11 2012-05-17 Fujitsu Limited Vector processing circuit, command issuance control method, and processor system
US20130159665A1 (en) * 2011-12-15 2013-06-20 Verisilicon Holdings Co., Ltd. Specialized vector instruction and datapath for matrix multiplication

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7003542B2 (en) * 2002-01-02 2006-02-21 Intel Corporation Apparatus and method for inverting a 4×4 matrix
US20040122887A1 (en) * 2002-12-20 2004-06-24 Macy William W. Efficient multiplication of small matrices using SIMD registers
US7610466B2 (en) * 2003-09-05 2009-10-27 Freescale Semiconductor, Inc. Data processing system using independent memory and register operand size specifiers and method thereof
US7275148B2 (en) * 2003-09-08 2007-09-25 Freescale Semiconductor, Inc. Data processing system using multiple addressing modes for SIMD operations and method thereof
US7792895B1 (en) * 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8631224B2 (en) * 2007-09-13 2014-01-14 Freescale Semiconductor, Inc. SIMD dot product operations with overlapped operands
US8626815B1 (en) * 2008-07-14 2014-01-07 Altera Corporation Configuring a programmable integrated circuit device to perform matrix multiplication
US8458442B2 (en) * 2009-08-26 2013-06-04 International Business Machines Corporation Method and structure of using SIMD vector architectures to implement matrix multiplication
US9600281B2 (en) * 2010-07-12 2017-03-21 International Business Machines Corporation Matrix multiplication operations using pair-wise load and splat operations
WO2013095504A1 (en) * 2011-12-22 2013-06-27 Intel Corporation Matrix multiply accumulate instruction

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6901422B1 (en) * 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US20040111587A1 (en) * 2002-12-09 2004-06-10 Nair Gopalan N Apparatus and method for matrix data processing
US7873812B1 (en) * 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US20110153707A1 (en) * 2009-12-23 2011-06-23 Boris Ginzburg Multiplying and adding matrices
US20120124332A1 (en) * 2010-11-11 2012-05-17 Fujitsu Limited Vector processing circuit, command issuance control method, and processor system
US20130159665A1 (en) * 2011-12-15 2013-06-20 Verisilicon Holdings Co., Ltd. Specialized vector instruction and datapath for matrix multiplication

Also Published As

Publication number Publication date
US20220291923A1 (en) 2022-09-15
KR102583997B1 (ko) 2023-10-04
IL271174A (en) 2020-01-30
EP3646169A1 (en) 2020-05-06
KR20200019942A (ko) 2020-02-25
GB2563878B (en) 2019-11-20
US11288066B2 (en) 2022-03-29
GB2563878A (en) 2019-01-02
CN110770701A (zh) 2020-02-07
EP3646169B1 (en) 2022-08-31
WO2019002811A1 (en) 2019-01-03
JP7253506B2 (ja) 2023-04-06
US20200117450A1 (en) 2020-04-16
CN110770701B (zh) 2023-11-17
GB201710332D0 (en) 2017-08-09
IL271174B1 (en) 2024-03-01

Similar Documents

Publication Publication Date Title
JP2020527778A (ja) レジスタ・ベースの行列乗算
KR102492356B1 (ko) 데이터 처리장치에서의 산술 확대
JP7253492B2 (ja) データ処理装置における乗累算
JP7148526B2 (ja) データ処理装置におけるベクトルによる要素演算
KR102659495B1 (ko) 벡터 프로세서 및 그 제어 방법
TWI766056B (zh) 用於資料處理的方法、設備、電腦程式及電腦可讀取儲存媒體
TW202305588A (zh) 用於向量組合指令之處理設備、方法、及電腦程式
TW202340947A (zh) 用於處置儲存在陣列儲存器中之資料元素之技術
GB2617828A (en) Technique for handling data elements stored in an array storage

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210601

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220818

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221117

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230303

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230327

R150 Certificate of patent or registration of utility model

Ref document number: 7253506

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150