JP7253492B2 - データ処理装置における乗累算 - Google Patents

データ処理装置における乗累算 Download PDF

Info

Publication number
JP7253492B2
JP7253492B2 JP2019543976A JP2019543976A JP7253492B2 JP 7253492 B2 JP7253492 B2 JP 7253492B2 JP 2019543976 A JP2019543976 A JP 2019543976A JP 2019543976 A JP2019543976 A JP 2019543976A JP 7253492 B2 JP7253492 B2 JP 7253492B2
Authority
JP
Japan
Prior art keywords
data processing
register
data
registers
contents
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.)
Active
Application number
JP2019543976A
Other languages
English (en)
Other versions
JP2020508512A (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 JP2020508512A publication Critical patent/JP2020508512A/ja
Application granted granted Critical
Publication of JP7253492B2 publication Critical patent/JP7253492B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/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
    • 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
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/30101Special purpose registers
    • 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
    • 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/30112Register structure comprising data of variable length
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30163Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
    • 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/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

本開示は、データ処理に関する。特に、それは、算術演算を行うデータ処理装置に関する。
算術演算を行うためにデータ処理装置が必要とされることがある。これらの算術演算には、例えば、各種の状況で応用性を見いだすことができる行列乗算演算を含むことができる。そのような行列乗算の実装の1つの特徴は、スループットが(ロード/ストア・バウンドよりもむしろ)非常にコンピュート・バウンドであるということである。このことは、ベクトル長が増して、より多くの作業データがレジスタ・ファイルに記憶可能になるにつれて、ますます当てはまることである。例えば、256ビット・ベクトルが32ビット浮動小数点値を含む場合、ベクトル・ロード当たり(少なくとも32個のレジスタを必要とする)6回のベクトル乗算が実行され得る。行列乗算性能を上げるために、ベクトル長が増やされて、対応する性能の改善を与え得るが、より長いベクトルがより大きなレジスタ・ファイルを必要とし、更により大きなベクトルをロードすることが必要とされる場合、より複雑なロード/ストア・ユニットを必要とすることがある。より多くのベクトル乗算機能ユニットを追加することも行列乗算性能を上げ得るが、これによりプロセッサの他の部分への要求が大きくなる。例えば、各乗算/累算演算が3つのレジスタ読出ポート及び1つのレジスタ書込ポートを必要とするので、4つの乗算/累算ユニットは合計12個の読出ポート及び4つの書込ポートを必要とすることになる。これに加えて、フロント・エンド・デコード及びディスパッチ・ロジックは、これらの機能ユニットにディスパッチするために一度にいくつかの命令を処理できる必要があり(例えば4つの乗算器に確実に送り込むために必要とされる「5幅」問題("five-wide" issue))、したがって特に複雑である必要がある。
本明細書に記載される少なくとも1つの実例は、複数のデータ要素をそれぞれが記憶する複数のレジスタを有するレジスタ記憶回路と、データ処理命令に応答して制御信号を生成するデコーダ回路であって、データ処理命令が、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個の累算レジスタを指定する、デコーダ回路と、制御信号に応答してデータ処理動作を行う処理回路であって、データ処理動作が、第1のソース・レジスタの内容からN個のデータ要素を抽出すること、N個のデータ要素の各々と第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含む、処理回路とを備える、データ処理装置を提供する。
本明細書に記載される少なくとも1つの実例は、データ処理命令に応じて制御信号を生成するステップであって、データ処理命令が、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個の累算レジスタを指定する、ステップと、制御信号に応じてデータ処理動作を行うステップであって、データ処理動作が、第1のソース・レジスタの内容からN個のデータ要素を抽出すること、N個のデータ要素の各々と第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含む、ステップとを含む、データ処理装置を動作させる方法を提供する。
本明細書に記載される少なくとも1つの実例は、少なくとも1つのデータ処理命令を備えるプログラムを非一時的に記憶したコンピュータ可読記憶媒体であって、少なくとも1つのデータ処理命令が、データ処理装置によって実行されると、データ処理命令に応じて制御信号を生成することであって、データ処理命令が、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個の累算レジスタを指定する、生成することと、制御信号に応じてデータ処理動作を行うことであって、データ処理動作が、第1のソース・レジスタの内容からN個のデータ要素を抽出すること、N個のデータ要素の各々と第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含む、データ処理動作を行うこととを生じさせる、コンピュータ可読記憶媒体を提供する。
本明細書に記載される少なくとも1つの実例は、複数のレジスタのレジスタに複数のデータ要素を記憶するための手段と、データ処理命令に応じて制御信号を生成するための手段であって、データ処理命令が、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個の累算レジスタを指定する、手段と、制御信号に応じてデータ処理動作を行うための手段であって、処理動作が、第1のソース・レジスタの内容からN個のデータ要素を抽出すること、N個のデータ要素の各々と第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含む、手段とを備える、データ処理装置を提供する。
本発明は、単に例として、添付図面に例示されたその実施例を参照して、更に述べられる。
本技術の様々な実例を具象化することができるデータ処理装置を概略的に例示する図である。 1つの実施例におけるデータ準備命令の使用を概略的に例示する図である。 図2の実施例の変形を概略的に例示する図である。 実例のデータ処理命令を概略的に例示する図である。 1つの実施例におけるそのデータ処理命令の実行の実装を示す図である。 一部の実施例における演算ユニットへのデータ要素の経路指定が提供され得るやり方を概略的に例示する図である。 一部の実施例における演算ユニットへのデータ要素の経路指定が提供され得るやり方を概略的に例示する図である。 図4A及び4Bを参照しつつ述べられるデータ処理命令の更なる実例並びにその実行を概略的に例示する図である。 図4A及び4Bを参照しつつ述べられるデータ処理命令の更なる実例並びにその実行を概略的に例示する図である。 実例のデータ処理命令を概略的に例示する図である。 1つの実施例におけるそのデータ処理命令の実行の実装を示す図である。 1つの実施例の方法に従ってとられる一連のステップを示す図である。 1つの実施例に係るデータ処理命令の実行を概略的に例示する図である。 そのような命令の2つの実例を示す図である。 図9Bのデータ処理命令の実行の実施例における一部の変形例を概略的に例示する図である。 1つの実施例における「点乗積」データ処理命令に対する2つの128ビット・ソース・レジスタを持つより複雑な実例を概略的に例示する図である。 図11の実施例の変形を示す図である。 図11及び12に図示される実例の更なる変形を示す図である。 1つの実施例の方法に従ってとられる一連のステップを示す図である。 一部の実施例によって提供されるデータ処理命令の実行を概略的に例示する図である。 対応する実例の命令を示す図である。 単純な行列乗算演算の形態で、図15Aの実施例の実例の可視化を示す図である。 第1及び第2のソース・レジスタの各々から2つのデータ要素だけが引き出される、図15Aに図示される実例のより単純な変形を示す図である。 ソース・レジスタの各々からより多くのデータ要素が抽出される、図15Aに図示される実例の別の変形を示す図である。 行われる一部の具体的な乗算演算の一層の詳細を与える、データ処理命令の実行の例示の実施例を示す図である。 2つのソース・レジスタの内容が2つの独立レーンにおけるデータ要素を含むとして扱われる、データ処理命令の実行の例示の実施例を示す図である。 1つの実施例の方法に従ってとられる一連のステップを示す図である。 1つの実施例に従う仮想マシン実装を示す図である。
本明細書に記載される少なくとも1つの例示の実施例は、複数のデータ要素をそれぞれが記憶する複数のレジスタを有するレジスタ記憶回路と、データ処理命令に応答して制御信号を生成するデコーダ回路であって、データ処理命令が、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個の累算レジスタを指定する、デコーダ回路と、制御信号に応答してデータ処理動作を行う処理回路であって、データ処理動作が、第1のソース・レジスタの内容からN個のデータ要素を抽出すること、N個のデータ要素の各々と第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含む、データ処理回路とを備える、データ処理装置を提供する。
提供される命令、及びデータ処理装置に設けられてそれをサポートする対応する回路は、したがって複数回の(N回の)乗算が、事実上レジスタ幅のN倍の乗算器が活用され得るような方式で行われることを可能にする。換言すれば、レジスタ・ファイルをN倍大きくする必要なしに、レジスタのN倍のベクトル長の計算密度が達成される。その上、ソース・オペランドが共有されるので、この手法は半分の読出ポートを使用するだけでN回の乗算を達成する。例えば、4倍(N=4)の乗算器を実装する際に、本技術はこれらの4回の乗算を達成するが、6つのレジスタ読出ポート及び4つの書込ポートを必要とするだけである(これは、4つの独立した乗算器が必要とする半分の読出ポートである)。更には、デコード及び発行するのがN個の命令(各乗算のために1つ)よりもむしろ1つの命令だけであるので、装置のデコード及びディスパッチ機構は簡易化される。
第2のソース・レジスタの内容がN個のデータ要素の各々との乗算に使用される方式は異なってもよいが、一部の実施例において各データ要素にそのそれぞれの部分が乗算されてもよい。その上、第1のソース・レジスタの内容からのN個のデータ要素の抽出は様々に構成されてもよいが、一部の実施例において同じデータ要素が複製されてN個のデータ要素を提供する。したがって一部の実施例において、処理回路は、制御信号に応答して、第1のソース・レジスタから抽出されるデータ要素の複数のインスタンスを供給するデータ要素操作回路を備え、ここで乗算を行うことは、データ要素の複数のインスタンスに第2のソース・レジスタの内容のそれぞれの部分を乗算することを含む。
そのようなデータ要素操作回路は、要件に応じて第1のソース・レジスタから抽出されるデータ要素の異なる倍数のコピー・インスタンスを提供してもよい。例えば一部の実施例において、データ要素操作回路は制御信号に応答してデータ要素のM個のインスタンスを供給し、ここでM個のインスタンスのサイズが複数のレジスタのレジスタ・サイズより小さい。言い換えれば、データ要素の複数のインスタンスはレジスタ幅の一部分を占有するだけでもよい。この部分は、実装される計算が必要とするように、例えば2分の1、4分の1又は任意の他の整数分の1であり得る。
データ要素の複数のインスタンスが全レジスタ幅を占有しない場合、その幅に一致するために更なるデータ要素が第1のソース・レジスタから抽出されてコピーされる場合もある。例えば一部の実施例において、データ要素操作回路は制御信号に応答して、第1のソース・レジスタから抽出される一組のデータ要素の各データ要素に対するそれぞれのM個のインスタンスを供給し、ここで一組のデータ要素に対するM個のインスタンスの総サイズがレジスタ・サイズに等しい。そこで例えば、K個のデータ要素が抽出されて、各々M回複製されれば、要素の総数はK*Mであり、これはレジスタ・サイズに等しいことになる。
一組のデータ要素は第1のソース・レジスタから様々選択されてもよいが、一部の実施例において一組のデータ要素は、レジスタ・サイズの繰返し下位部分内の選択されるデータ要素によって与えられる。K個のデータ要素が抽出される上述の実例では、それゆえレジスタ内にK個の下位部分(又は「データ群」)がある。例えば、第1のソース・レジスタが、仮に、4つの下位部分へ細分される場合、一組のデータ要素は、それらの下位部分の各々の、仮に、第1順序のデータ要素によって与えられ得る。言い換えれば、各下位部分の1つのデータ要素がデータ要素操作回路によって複製されて、各下位部分の全体にわたって繰り返す同じデータ要素を提供する。
しかしながらデータ要素操作回路に関するこの方式の下位部分への細分の必要はなく、1つの抽出されたデータ要素がレジスタ幅全体にわたって複製されてもよい。したがって、一部の実施例においてデータ要素の複数のインスタンスの合計サイズが複数のレジスタのレジスタ・サイズに等しい。本技術は、K個の群への分割及びそれらの群の各々内で複製することがハードウェアで実装するのがより容易でありそうであることを更に認識するが、これは必ずしも必要でなく、その結果一部の実施例において事実上K=1且つM=ベクトル幅である。
本技術はNが様々な値をとって実装されてもよいが、Nが2から8の範囲にあるときに良好な費用便益トレードオフが一般に達成されることが見いだされている。一部の具体的な実施例においてNは2である。一部の具体的な実施例においてNは4である。
データ処理動作における各乗算の結果の、それぞれの対象レジスタの内容への適用は、計算要件に応じて様々に行われてもよい。一部の実施例において、データ処理動作において各乗算の結果をそれぞれの対象レジスタの内容に適用することは、各乗算の結果をそれぞれの対象レジスタの内容に加算することを含む。一部の実施例において、データ処理動作において各乗算の結果をそれぞれの対象レジスタの内容に適用することは、各乗算の結果をそれぞれの対象レジスタの内容から減算することを含む。一部の実施例において、データ処理動作において各乗算の結果をそれぞれの対象レジスタの内容に適用することは、それぞれの対象レジスタの内容を各乗算の結果と置き換えることを含む。
提案される手法は、各乗算の結果が一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用され、命令におけるその一組のN個の累算レジスタの表現の効率的な符号化を可能にし、効率的に単純なレジスタ・ファイル設計も可能にすることができる。例えば一部の実施例において、一組のN個の累算レジスタは連続的にアドレス指定されるレジスタである。一部の実施例において、一組のN個の累算レジスタの第1の累算レジスタのインデックスはNの非負整数倍である。そのような実施例はアドレス指定を容易にし、その上複数の独立ポートを持つものより単純なレジスタ・ファイル設計を可能にする。
同様に、第1のソース・レジスタの内容から抽出されるデータ要素のアドレス指定においても効率性が得られてもよく、一部の実施例において、第1のソース・レジスタの内容から抽出されるN個のデータ要素は連続的にアドレス指定されるデータ要素である。一部の実施例において、第1のソース・レジスタの内容から抽出されるN個のデータ要素の第1のデータ要素のインデックスはNの非負整数倍である。
第1のソース・レジスタから抽出されるN個のデータ要素の各々に第2のソース・レジスタの内容を乗算するためにデータ処理動作において行われる乗算は、それ自体各種の構成をとってもよい。一部の実施例において、N個のデータ要素の各々と第2のソース・レジスタの内容との乗算は、第1のソース・レジスタ及び第2のソース・レジスタから少なくとも第1のデータ要素対及び第2のデータ要素対を抽出することと、少なくとも第1のデータ要素対及び第2のデータ要素対を乗算する乗算演算を行うことと、一組のN個の累算レジスタの入力累算器レジスタから累算器値をロードすることと、乗算演算の結果を累算器値に加算することとを含む。言い換えれば、第1及び第2のソース・レジスタの各々から2つのデータ要素が抽出される実例では、ペアワイズ乗算演算が第1の乗算演算で第1及び第2のソース・レジスタの各々から抽出される第1のデータ要素を乗算し、更に第2の乗算演算で第1及び第2のソース・レジスタの各々から抽出される第2のデータ要素を別に乗算するように、各ソース・レジスタから抽出されるデータ要素のペアワイズ乗算演算が行われてもよい。これらの乗算演算の結果は次いで累算器値と合算される。したがって、結果の拡大を見込んだ、特に密な点乗積計算が行われる。
本明細書に記載される少なくとも1つの例示の実施例は、データ処理命令であって、複数のレジスタにおいて:第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個の累算レジスタを指定するデータ処理命令に応じて制御信号を生成することと、制御信号に応じてデータ処理動作であって、第1のソース・レジスタの内容からN個のデータ要素を抽出すること、N個のデータ要素の各々と第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含むデータ処理動作を行うこととを含む、データ処理装置を動作させる方法を提供する。
本明細書に記載される少なくとも1つの例示の実施例は、データ処理装置によって実行されると:データ処理命令であって、複数のレジスタにおいて:第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個の累算レジスタを指定するデータ処理命令に応じた、制御信号の生成と、制御信号に応じた、データ処理動作であって、第1のソース・レジスタの内容からN個のデータ要素を抽出すること、N個のデータ要素の各々と第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含むデータ処理動作の遂行とを生じさせる少なくとも1つのデータ処理命令を備えるプログラムを非一時的に記憶したコンピュータ可読記憶媒体を提供する。
本明細書に記載される少なくとも1つの例示の実施例は、複数のレジスタのレジスタに複数のデータ要素を記憶するための手段と、データ処理命令であって、複数のレジスタにおいて:第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個の累算レジスタを指定するデータ処理命令に応じて制御信号を生成するための手段と、制御信号に応じてデータ処理動作であって、第1のソース・レジスタの内容からN個のデータ要素を抽出すること、N個のデータ要素の各々と第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含むデータ処理動作を行うための手段とを備えるデータ処理装置を提供する。
本明細書に記載される少なくとも1つの例示の実施例は、データ処理装置上で実行されるコンピュータ・プログラムによって提供される仮想マシンであって、上述のデータ処理装置の1つに対応する命令実行環境を提供する仮想マシンを提供する。
一部の特定の実施例がここで図を参照しつつ記載されることになる。
図1は、本技術の様々な実例を具象化することができるデータ処理装置を概略的に例示する。データ処理装置は、それ自体が実行する一連の命令に応答してデータ項目にデータ処理動作を行う処理回路12を備える。これらの命令は、データ処理装置がアクセスできるメモリ14から読み出され、当業者が精通しているであろう方式で、この目的のために取出し回路16が設けられる。取出し回路16によって読み出される更なる命令がデコード回路18に渡され、それが、処理回路12の構成及び動作の様々な態様を制御するように配置される制御信号を生成する。一組のレジスタ20及びロード/ストア・ユニット22も図示される。当業者は図1が表す全体構成に精通しているであろうから、その更なる詳細説明は単に簡潔さの目的でこれにより省略される。レジスタ20は、図1に例示される実施例において、整数倍数24及びデータ群25サイズの一方又は両方のための記憶域を含むことができ、その使用については一部の具体的な実施例を参照しつつ以下により詳細に記載されることになる。命令の実行中に処理回路12によって必要とされるデータ及びそれらのデータ処理命令の結果として生成されるデータ値は、ロード/ストア・ユニット22によりメモリ14に対して読み書きされる。一般に、図1におけるメモリ14は、本技術の命令が、典型的に、処理回路がやがて実行する既定の一連の命令(「プログラム」)の一部として記憶され得るコンピュータ可読記憶媒体の一例とみなされることができることにも留意されたい。処理回路は、しかしながら、RAMにおいて、ROMにおいて、ネットワーク・インタフェースを介して等といった各種の異なるソースからそのようなプログラムにアクセスしてもよい。本開示は、処理回路12が実行することができる様々な新規な命令を説明し、後続の図は、これらの命令の本質、それらの命令の実行をサポートするためのデータ処理回路の変形例等の更なる説明を提供する。
図2は、データ準備命令32の使用を概略的に例示する。データ準備命令32は、オペコード部分34(それをデータ準備命令として定義する)、レジスタ指定子36及び記憶場所指定子38を含む。本実施例のデータ処理装置によるこの命令の実行により、メモリ30に記憶され(指定される記憶場所によって参照されて、例えば既定のデータ群サイズに応じて、2つ以上のアドレスにわたって延びる)且つ(本例示させる実施例において)2つのデータ要素b0及びb1(図中42及び44と表示される)を備える、データ群40が識別される。更に、命令の実行により、このデータ群40が指定されるレジスタへコピーされ、その上各々データ要素b0及びb1から構成される繰返しデータ群46、48、50及び52によって図2に図示されるように、そのレジスタの幅にわたって複製される。
図3は、図2の実施例の変形を概略的に例示し、そのようなデータ準備命令により異なるサイズのデータ群がコピー及び複製されてもよいことを実証する。図3の例示される実例では、命令60は同じ構造を有する、すなわちオペコード62、レジスタ指定子64及び指定される記憶場所66を含む。命令60の実行により記憶場所66がアクセスされ、そこに記憶されるデータ群68(すなわち例えばその記憶場所から始まって所定数のデータ要素にわたって延びる)はデータ要素c0、c1、c2及びc3(図中70、72、74及び76と表示される)を備える。このデータ群68はコピーされ、対象レジスタの幅にわたって複製され、且つこのデータ群78、80、82及び84の繰返しコピーによって図示される。図1に戻って参照すると、データ群サイズがレジスタ20内の専用の記憶場所25に保持される値によって予め定義されることができることに留意されたい。最後に、図2及び3の実例がいかなる特定のデータ群幅又は複製の倍数にも限定されないことが認識されるべきである。しかしながら、現代の状況で有用である1つの実例だけについて述べると、複製は128ビットの幅にわたって起こり得る。Cambridge、UKのARM(登録商標)Limitedによって提供されるスケーラブル・ベクトル拡張(SVE:Scalable Vector Extensions)との関連では、この幅はSVEベクトル粒度に対応する。同じくARM(登録商標)Limitedによって提供されるASMID命令との関連では、これはASIMDレジスタのサイズに対応する。したがって、本技術は以下の群型のロード及び複製を可能にする:2つの64ビット・データ要素、4つの32ビット・データ要素、8つの16ビット・データ要素又は16個の8ビット・データ要素。
図4Aは、実例のデータ処理命令を概略的に例示し、図4Bは、1つの実施例におけるそのデータ処理命令の実行の実装を図示する。このデータ処理命令は、オペコード102、第1のレジスタ指定子104、第2のレジスタ指定子106、インデックス指定子108及び、任意選択の変形として、結果レジスタ指定子110を含む。図4Bは、この命令の実行により、レジスタA及びレジスタB内のデータ群がアクセスされ、ここでレジスタA内の各データ群内の全てのデータ要素、すなわちこの実例では第1のデータ群112内のデータ要素a0及びa1並びに第2のデータ群114内のデータ要素a2及びa3がアクセスされる一方、レジスタBではデータ群116及び118の各々で、選択されるデータ要素だけ、すなわちデータ要素b1がアクセスされることを例示する。このようにアクセスされるこれらのデータ要素は、レジスタBからとられるデータ要素及びレジスタAからとられるデータ群に関してデータ処理動作を適用する演算ユニット120、122、124及び126によって図4Bに表される、処理回路の演算回路に渡される。上述したように、命令100は結果レジスタ(識別子110による)を指定してもよく、これらの演算の結果は結果レジスタ128のそれぞれのデータ要素に書き込まれる。実際、一部の実施例において、結果レジスタ128及びレジスタAは1つの同じレジスタであってもよく、例えばそのレジスタの内容に関して乗累算演算が行われるようにする(破線矢印により図4に概略的に図示される)。図4Bに図示されるレジスタが、実例の命令によってアクセスされる部分を越えて(両側に)潜在的に延びるとして意図的に例示されることにも留意されたい。これは、一部の実装例(上述のスケーラブル・ベクトル拡張(SVE)など)では、ベクトル・サイズが指定されなくてもよいという事実に対応する。例えば、図4Bを、SVE実例で、仮に、2つの64ビット・データ要素(b0及びb1)の群に対する命令の動作を描くとしてとると、宛先のためのベクトル・サイズは128ビットから2048ビットまで(128ビットきざみで)何でもあり得る。
図4Bに図示される実例が、選択される(繰り返される)データ要素がレジスタBの内容から使用される特定の実例を与える一方、一般にレジスタB内のいずれかのデータ要素が演算ユニット120~126のいずれかに対する入力として使用される能力が多目的で柔軟なデータ処理装置に提供されるのが明らかに好ましいことが認識されるべきである。図5A及び5Bは、これが達成され得る2つのやり方を概略的に例示する。図5Aは、一組の演算ユニット140、142、144及び146(例えば融合積和ユニットであってもよい)に接続される、例えばそれぞれのデータ要素をレジスタに記憶してもよい一組の記憶素子130、132、134及び136を図示する。記憶ユニット130~136と機能ユニット140~146との間の接続は、直接であるのもマルチプレクサ148を介して仲介されるのも図5Aに図示される。したがって、この構成は、個々の記憶ユニット130~136のいずれかの内容が各それぞれの機能ユニットへの第1の入力として機能ユニット140~146のいずれかに提供されることができ、且つ記憶ユニット130~136の内容が機能ユニット140~146の第2の入力としてそれぞれ提供され得ると定める。機能ユニット140~146によって行われる処理の結果は、例えばそれぞれのデータ要素をレジスタに記憶してもよい記憶ユニット150~156に転送される。マルチプレクサ148及び機能ユニット140~146の各々は、上述の柔軟な入力の選択を可能にするために例示される制御信号によって制御される。
図5Bは、記憶ユニット160、162、164及び166の各々が、各々それぞれの制御信号によって制御され且つその結果がそれぞれの記憶ユニット180、182、184及び186に渡される機能ユニット170、172、174及び176の各々に直接接続される、図5Aのものに代替の構成を概略的に例示する。図5Bによってとられる手法は、図5Bの実例のマルチプレクサ148を使用する必要性及びそれと関連する遅延を回避するが、より複雑な配線が必要とされる代償を払う。図5A及び図5Bの実例の両方とも、したがって、特に関係するデータ要素の数が増す場合に、完全に柔軟且つ構成可能な一組の入力記憶ユニット、演算ユニット及び出力記憶ユニットを実装しようとするときに生じるであろう複雑さを例示する。例えば、図5Aの実例をとり、入力記憶ユニット、演算ユニット及び出力記憶ユニットの数を2倍にして各々8にすると、結果として8倍の入力マルチプレクサが必要となるであろう。他方で、図5Bの手法をとるそのような8幅実装例は、各入力記憶ユニットから各演算ユニットまで8つの経路、すなわち合計で64本の経路を必要とすることになる他に、各演算ユニットが8つの異なる入力を受けて、それらの間で選択することが可能である必要がある。したがって、レジスタ幅にわたってデータ部分(例えばデータ群)を再使用する本技術の実施例によってとられる手法が、必要とされる制御ユニットへの入力の多重性及び複雑さに限界が課されることを可能にすることが理解されるであろう。その上、上述のSVE/ASIMD状況では、図4Aのグループ化要素対ベクトル命令(grouped element-by-vector instruction)が、選択及び複製がSVEベクトル粒度内にとどまり、ASIMDが(例えば「FMLA(要素による)」命令を使用して)128ビット内でこれをする機構を既に有するので、等価な通常のベクトル演算と比較して特別なレイテンシなしで、単一のマイクロ演算として実装可能であると予期され得ることが留意されるべきである。そのため図4Aに図示される命令は、通常のベクトル演算が後に続く一連の別の複製(DUP:duplication)命令より効率的であると予期され得る。
図6A及び6Bは、実例が図4A及び4Bを参照しつつ述べられたデータ処理命令の2つの更なる実例を概略的に例示する。図6Aの実例では、命令200は、オペコード202、第1のレジスタ指定子204、第2のレジスタ指定子206、即インデックス値208及び結果レジスタ指定子210を含む。図6Aの下部はこの命令200の実行を概略的に例示し、ここでレジスタBの繰返し下位部分(データ群)内の指定されるデータ要素(インデックス1)が選択され、このデータ要素にレジスタAのそれぞれのデータ群によって表されるベクトルが乗算されて、結果レジスタの内容を占めるそれぞれの結果データ群を生成する。図6Aにおいて、それぞれのデータ要素とデータ群との間で行われる演算は、上記の実例の場合これが乗算であるとされるが、他の演算が可能であり且つ企図されることを示す一般的な演算記号
Figure 0007253492000001

によって図示される。
本技術は、1つのベクトルを指定するだけのそのようなデータ処理命令に限定されず、図6Bは、オペコード222、第1のレジスタ指定子224、第2のレジスタ指定子226、第3のレジスタ指定子228及びインデックス指定子230を含むデータ処理命令220が提供される実例を図示する。図6Bの下部は、図6Aに図示されるものと類似の方法で、どのようにして第1のレジスタ(B)内の選択されるデータ要素(b1)がレジスタA及びCからとられるデータ群(ベクトル)と組み合わされて結果値が生成されるかを図示する。単に変形を例示する目的で、図6Bの実例における結果レジスタは命令220に指定されていないが、むしろデフォルト(所定)の結果レジスタがこの目的で一時的に使用される。更にまた、一般的な演算子記号
Figure 0007253492000002

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

Claims (21)

  1. 複数のデータ要素をそれぞれが記憶する複数のレジスタを有するレジスタ記憶回路と、
    データ処理命令に応答して制御信号を生成するデコーダ回路であって、前記データ処理命令が、前記複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個(N>1)の累算レジスタを指定する、デコーダ回路と、
    前記制御信号に応答してデータ処理動作を行う処理回路であって、前記データ処理動作が、前記第1のソース・レジスタの内容からN個のデータ要素を抽出すること、前記N個のデータ要素の各々と前記第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を前記一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含む、処理回路と
    を備え
    前記一組の前記N個の累積レジスタの前記それぞれの対象レジスタは、前記N個のデータ要素の各々と前記第2のソース・レジスタの内容との前記乗算のそれぞれにおいて、別々の対象レジスタである、データ処理装置。
  2. 前記処理回路が、前記制御信号に応答して、前記データ要素の複数のインスタンスからなる前記N個のデータ要素を提供するために、前記第1のソース・レジスタから抽出されるデータ要素を複製するデータ要素操作回路を備え、
    前記乗算を行うことが、前記データ要素の前記複数のインスタンスのそれぞれに、前記第2のソース・レジスタの内容の対応する部分を乗算することを含む、
    請求項1に記載のデータ処理装置。
  3. 前記データ要素操作回路が前記制御信号に応答して前記データ要素のM個のインスタンスを供給し、前記M個のインスタンスのサイズが前記複数のレジスタのレジスタ・サイズより小さい、請求項2に記載のデータ処理装置。
  4. 前記データ要素操作回路が前記制御信号に応答して、前記第1のソース・レジスタから抽出される一組のデータ要素の各データ要素に対するそれぞれのM個のインスタンスを供給し、前記一組のデータ要素に対する前記M個のインスタンスの総サイズが前記レジスタ・サイズに等しい、請求項3に記載のデータ処理装置。
  5. 前記一組のデータ要素が、前記レジスタ・サイズの繰返し下位部分内の選択されるデータ要素によって与えられる、請求項4に記載のデータ処理装置。
  6. 前記データ要素の前記複数のインスタンスの合計サイズが前記複数のレジスタのレジスタ・サイズに等しい、請求項2に記載のデータ処理装置。
  7. Nが2から8の範囲にある、請求項1から6までのいずれか一項に記載のデータ処理装置。
  8. Nが2である、請求項7に記載のデータ処理装置。
  9. Nが4である、請求項7に記載のデータ処理装置。
  10. 前記データ処理動作において各乗算の前記結果を前記それぞれの対象レジスタの内容に適用することが、各乗算の前記結果を前記それぞれの対象レジスタの内容に加算することを含む、請求項1から9までのいずれか一項に記載のデータ処理装置。
  11. 前記データ処理動作において各乗算の前記結果を前記それぞれの対象レジスタの内容に適用することが、各乗算の前記結果を前記それぞれの対象レジスタの内容から減算することを含む、請求項1から9までのいずれか一項に記載のデータ処理装置。
  12. 前記データ処理動作において各乗算の前記結果を前記それぞれの対象レジスタの内容に適用することが、前記それぞれの対象レジスタの内容を各乗算の前記結果と置き換えることを含む、請求項1から9までのいずれか一項に記載のデータ処理装置。
  13. 前記一組のN個の累算レジスタが連続的にアドレス指定されるレジスタである、請求項1から12までのいずれか一項に記載のデータ処理装置。
  14. 前記一組のN個の累算レジスタの第1の累算レジスタのインデックスがNの非負整数倍である、請求項13に記載のデータ処理装置。
  15. 前記第1のソース・レジスタの内容から抽出される前記N個のデータ要素が連続的にアドレス指定されるデータ要素である、請求項1から14までのいずれか一項に記載のデータ処理装置。
  16. 前記第1のソース・レジスタの内容から抽出される前記N個のデータ要素の第1のデータ要素のインデックスがNの非負整数倍である、請求項15に記載のデータ処理装置。
  17. 前記N個のデータ要素の各々と前記第2のソース・レジスタの内容との前記乗算が、
    前記第1のソース・レジスタ及び前記第2のソース・レジスタから少なくとも第1のデータ要素対及び第2のデータ要素対を抽出することと、
    前記少なくとも第1のデータ要素対及び第2のデータ要素対を乗算する乗算演算を行うことと、
    前記一組のN個の累算レジスタの入力累算器レジスタから累算器値をロードすることと、
    前記乗算演算の結果を前記累算器値に加算することと
    を含む、請求項1から16までのいずれか一項に記載のデータ処理装置。
  18. データ処理命令に応じて制御信号を生成するステップであって、前記データ処理命令が、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個(N>1)の累算レジスタを指定する、ステップと、
    前記制御信号に応じてデータ処理動作を行うステップであって、前記データ処理動作が、前記第1のソース・レジスタの内容からN個のデータ要素を抽出すること、前記N個のデータ要素の各々と前記第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を前記一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含む、ステップと
    を含み、
    前記一組の前記N個の累積レジスタの前記それぞれの対象レジスタは、前記N個のデータ要素の各々と前記第2のソース・レジスタの内容との前記乗算のそれぞれにおいて、別々の対象レジスタである、データ処理装置を動作させる方法。
  19. 少なくとも1つのデータ処理命令を備えるプログラムを非一時的に記憶したコンピュータ可読記憶媒体であって、前記少なくとも1つのデータ処理命令がデータ処理装置によって実行されると、
    データ処理命令に応じて制御信号を生成することであって、前記データ処理命令が、複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個(N>1)の累算レジスタを指定する、生成することと、
    前記制御信号に応じてデータ処理動作を行うことであって、データ処理動作が、前記第1のソース・レジスタの内容からN個のデータ要素を抽出すること、前記N個のデータ要素の各々と前記第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を前記一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含む、データ処理動作を行うことと
    を生じさせ
    前記一組の前記N個の累積レジスタの前記それぞれの対象レジスタは、前記N個のデータ要素の各々と前記第2のソース・レジスタの内容との前記乗算のそれぞれにおいて、別々の対象レジスタである、コンピュータ可読記憶媒体。
  20. 複数のレジスタのレジスタに複数のデータ要素を記憶するための手段と、
    データ処理命令に応じて制御信号を生成するための手段であって、前記データ処理命令が、前記複数のレジスタにおいて、第1のソース・レジスタ、第2のソース・レジスタ及び一組のN個(N>1)の累算レジスタを指定する、手段と、
    前記制御信号に応じてデータ処理動作を行うための手段であって、前記データ処理動作が、前記第1のソース・レジスタの内容からN個のデータ要素を抽出すること、前記N個のデータ要素の各々と前記第2のソース・レジスタの内容との乗算を行うこと、及び各乗算の結果を前記一組のN個の累算レジスタのそれぞれの対象レジスタの内容に適用することを含む、手段と
    を備え
    前記一組の前記N個の累積レジスタの前記それぞれの対象レジスタは、前記N個のデータ要素の各々と前記第2のソース・レジスタの内容との前記乗算のそれぞれにおいて、別々の対象レジスタである、データ処理装置。
  21. データ処理装置上で実行されるコンピュータ・プログラムによって提供される仮想マシンであって、請求項1から17まで又は請求項20のいずれか一項に記載のデータ処理装置に対応する命令実行環境を提供する仮想マシン。
JP2019543976A 2017-02-23 2018-01-26 データ処理装置における乗累算 Active JP7253492B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GR20170100082 2017-02-23
GR20170100082 2017-02-23
PCT/GB2018/050225 WO2018154268A1 (en) 2017-02-23 2018-01-26 Multiply-accumulation in a data processing apparatus

Publications (2)

Publication Number Publication Date
JP2020508512A JP2020508512A (ja) 2020-03-19
JP7253492B2 true JP7253492B2 (ja) 2023-04-06

Family

ID=61132823

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019543976A Active JP7253492B2 (ja) 2017-02-23 2018-01-26 データ処理装置における乗累算

Country Status (6)

Country Link
US (1) US11513796B2 (ja)
EP (1) EP3586226B1 (ja)
JP (1) JP7253492B2 (ja)
KR (1) KR102425668B1 (ja)
CN (1) CN110300956B (ja)
WO (1) WO2018154268A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102584031B1 (ko) * 2017-02-23 2023-10-04 에이알엠 리미티드 데이터 처리장치에서의 요소 바이 벡터 연산
US11829729B2 (en) 2019-09-05 2023-11-28 Micron Technology, Inc. Spatiotemporal fused-multiply-add, and related systems, methods and devices
US11934824B2 (en) 2019-09-05 2024-03-19 Micron Technology, Inc. Methods for performing processing-in-memory operations, and related memory devices and systems
CN112579042B (zh) * 2019-09-29 2024-04-19 广州希姆半导体科技有限公司 计算装置及方法、芯片、电子设备及计算机可读存储介质
TW202141290A (zh) 2020-01-07 2021-11-01 韓商愛思開海力士有限公司 記憶體中處理(pim)系統和pim系統的操作方法
US11537861B2 (en) 2020-06-23 2022-12-27 Micron Technology, Inc. Methods of performing processing-in-memory operations, and related devices and systems
WO2022150058A1 (en) * 2021-01-07 2022-07-14 Groq, Inc. Numerical precision in digital multiplier circuitry
CN113485750B (zh) * 2021-06-29 2024-01-23 海光信息技术股份有限公司 数据处理方法及数据处理装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005174301A (ja) 2003-12-09 2005-06-30 Arm Ltd レジスタとメモリとの間でデータを移動するためのデータ処理装置及び方法
JP2006293741A (ja) 2005-04-12 2006-10-26 Sanyo Electric Co Ltd プロセッサ
JP2007317179A (ja) 2006-05-08 2007-12-06 Nvidia Corp 帯域幅要件が軽減された行列乗算

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4683547A (en) 1984-10-25 1987-07-28 International Business Machines Corporation Special accumulate instruction for multiple floating point arithmetic units which use a putaway bus to enhance performance
US7120781B1 (en) * 2000-06-30 2006-10-10 Intel Corporation General purpose register file architecture for aligned simd
US7873812B1 (en) * 2004-04-05 2011-01-18 Tibet MIMAR Method and system for efficient matrix multiplication in a SIMD processor architecture
US8290044B2 (en) * 2006-05-10 2012-10-16 Qualcomm Incorporation Instruction for producing two independent sums of absolute differences
US8650240B2 (en) 2009-08-17 2014-02-11 International Business Machines Corporation Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture
US8458442B2 (en) 2009-08-26 2013-06-04 International Business Machines Corporation Method and structure of using SIMD vector architectures to implement matrix multiplication
GB2474901B (en) 2009-10-30 2015-01-07 Advanced Risc Mach Ltd Apparatus and method for performing multiply-accumulate operations
US20120113133A1 (en) * 2010-11-04 2012-05-10 Shpigelblat Shai System, device, and method for multiplying multi-dimensional data arrays
US10459843B2 (en) * 2016-12-30 2019-10-29 Texas Instruments Incorporated Streaming engine with separately selectable element and group duplication

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005174301A (ja) 2003-12-09 2005-06-30 Arm Ltd レジスタとメモリとの間でデータを移動するためのデータ処理装置及び方法
JP2006293741A (ja) 2005-04-12 2006-10-26 Sanyo Electric Co Ltd プロセッサ
JP2007317179A (ja) 2006-05-08 2007-12-06 Nvidia Corp 帯域幅要件が軽減された行列乗算

Also Published As

Publication number Publication date
US11513796B2 (en) 2022-11-29
WO2018154268A1 (en) 2018-08-30
KR20190119076A (ko) 2019-10-21
CN110300956A (zh) 2019-10-01
CN110300956B (zh) 2024-06-28
KR102425668B1 (ko) 2022-07-28
JP2020508512A (ja) 2020-03-19
US20190369989A1 (en) 2019-12-05
EP3586226B1 (en) 2023-07-05
EP3586226A1 (en) 2020-01-01

Similar Documents

Publication Publication Date Title
JP7253492B2 (ja) データ処理装置における乗累算
EP3586227B1 (en) Widening arithmetic in a data processing apparatus
JP7253506B2 (ja) レジスタ・ベースの行列乗算
KR102584031B1 (ko) 데이터 처리장치에서의 요소 바이 벡터 연산
EP3655852B1 (en) Vector interleaving in a data processing apparatus
GR20170200089U (el) Πολλαπλασιασμος-συσσωρευση σε μια διαταξη επεξεργασιας δεδομενων

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210119

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211210

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220309

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220803

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221031

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: 20230302

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: 7253492

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150