JP2019519864A - ベクトルレジスタのアクセス - Google Patents

ベクトルレジスタのアクセス Download PDF

Info

Publication number
JP2019519864A
JP2019519864A JP2018568728A JP2018568728A JP2019519864A JP 2019519864 A JP2019519864 A JP 2019519864A JP 2018568728 A JP2018568728 A JP 2018568728A JP 2018568728 A JP2018568728 A JP 2018568728A JP 2019519864 A JP2019519864 A JP 2019519864A
Authority
JP
Japan
Prior art keywords
access
vector
register
column
registers
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
JP2018568728A
Other languages
English (en)
Other versions
JP7213095B2 (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 JP2019519864A publication Critical patent/JP2019519864A/ja
Priority to JP2022004904A priority Critical patent/JP2022062067A/ja
Application granted granted Critical
Publication of JP7213095B2 publication Critical patent/JP7213095B2/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
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address 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/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/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/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/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/30098Register arrangements
    • G06F9/30105Register structure
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • 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/30141Implementation provisions of register files, e.g. ports
    • 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
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

各ベクトルレジスタが複数の部分を含むベクトルを記憶するように構成されたベクトルレジスタのセットを含む装置が提供される。ベクトルレジスタのセットは、複数の列に論理的に分割され、各列は、各ベクトルの同じ部分を記憶するように配置されている。装置はまた、複数のアクセスブロックを備えるレジスタアクセス回路を含む。各アクセスブロックは、ベクトルレジスタのうちの1つにアクセスするとき、ベクトルレジスタのうちの他の少なくとも1つにアクセスするときとは異なる列内の部分にアクセスするように構成される。レジスタアクセス回路は、ベクトルレジスタおよび列のうちのいずれか1つの部分に同時にアクセスするように構成される。

Description

本技術は、データ処理に関する。特に、ベクトルレジスタへのアクセスに関する。
ベクトルレジスタファイルは、それぞれがいくつかの部分を含む1つ以上のベクトルを記憶することができるいくつかのベクトルレジスタを含む。例えば、ベクトルは、赤値、緑値、青値、およびアルファ値を提供することによって画素色を表すことができ、それぞれの値は8ビットである。このようにして、例えば、画像内の各画素の色を表すために、多数の異なる画素色を提供することができる。一度に1つのベクトルレジスタに対して処理を実行することが以前に提案されている。しかしながら、異なるアクセスパターンを提供することが大抵の場合に望ましい。例えば、いくつかの命令は、一度に単一のベクトルの全ての成分(例えば、単一の画素の表現)へのアクセスを望むことがあるが、他の命令は、一度に複数の(例えば4)ベクトルの単一成分(例えば、アルファ値)へのアクセスを望むことがある。
第1の例示的な構成から見ると、それぞれが複数の部分を含むベクトルを記憶するように構成されたベクトルレジスタのセットであって、各列が各ベクトルの同じ部分を記憶するように配置された論理的に複数の列に分割された前記ベクトルレジスタのセットと、各アクセスブロックが前記ベクトルレジスタのうちの1つにアクセスするときに前記ベクトルレジスタのうちの他の少なくとも1つにアクセスするときとは異なる列内の部分にアクセスするように構成された複数のアクセスブロックを含むレジスタアクセス回路とを備え、前記レジスタアクセス回路が、前記ベクトルレジスタおよび前記列のうちのいずれか1つの部分に同時にアクセスするように構成される、装置が提供される。
第2の例示的な構成から見ると、それぞれが複数の部分を含むベクトルを記憶するように構成されたベクトルレジスタのセットであって、各列が各ベクトルの同じ部分を記憶するように配置された論理的に複数の列に分割された前記ベクトルレジスタのセットを提供することと、複数のアクセスブロックを含むレジスタアクセス回路を提供することとを備え、各アクセスブロックが前記ベクトルレジスタのうちの1つにアクセスするときに前記ベクトルレジスタのうちの他の少なくとも1つにアクセスするときとは異なる列内の部分にアクセスするように構成され、前記レジスタアクセス回路が、前記ベクトルレジスタおよび前記列のうちのいずれか1つの部分に同時にアクセスするように構成される、装置を製造する方法が提供される。
第3の例示的な構成から見ると、それぞれが複数の部分を含むベクトルを記憶するベクトルレジスタ手段のセットであって、各列が各ベクトルの同じ部分を記憶するように配置された論理的に複数の列に分割された前記ベクトルレジスタ手段のセットと、前記ベクトルレジスタ手段および前記列のうちのいずれか1つの部分に同時にアクセスするレジスタアクセス手段であって、前記ベクトルレジスタ手段のうちの1つにアクセスするときに前記ベクトルレジスタ手段のうちの他の少なくとも1つにアクセスするときとは異なる列内の部分にアクセスする複数のアクセスブロック手段を含む前記レジスタアクセス手段とを備える、装置が提供される。
本技術は、添付図面に示されている実施形態を参照して、単なる例として、さらに説明される。
図1は、ベクトル命令の処理をサポートするデータ処理装置の例を概略的に示している。 図2は、ベクトル命令の重複実行の例を示している。 図3は、異なるプロセッサ実装間で、または命令の実行の異なるインスタンス間での実行時に、連続するベクトル命令間の重複量をスケーリングする3つの例を示している。 図4は、スカラー命令の実行が2つのベクトル命令間の重複を解消する例を示している。 図5は、ベクトルレジスタのセットが論理的に複数のセクションに配置されることができる方法を概略的に示す図である。 図6は、一実施形態において、メモリからベクトルレジスタにロードされたデータに対してデインターリーブ動作をまとめて実行するためにロード命令の群が配置されることができる方法を概略的に示す図である。 図7Aは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。 図7Bは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。 図7Cは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。 図7Dは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。 図7Eは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。 図7Fは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。 図7Gは、異なるサイズのデータ要素に対する並べ替え命令の群内の個々の命令に関連付けることができる異なるデータ要素アクセスパターンを示している。 図8は、一実施形態にかかる、ストライドが4のベクトルロード命令(VLD4n命令)の1つを実行するときにメモリ内でアクセスされるアドレスを識別するためにパターンIDおよびビートID情報が使用されてアドレスワードオフセットを生成する方法を示す図である。 図9は、一実施形態にかかる、VLD4n命令の実行中にアクセスするためにベクトルレジスタの適切な部分を判定するために使用することができる回路を示している。 図10は、一実施形態にかかる、ベクトルロード命令および積和演算命令が重複されることができる方法を示すタイミング図である。 図11Aは、一実施形態にしたがって提供されることができるロードおよびストア命令の様々な例示的な符号化を示している。 図11Bは、一実施形態にしたがって提供されることができるロードおよびストア命令の様々な例示的な符号化を示している。 図11Cは、一実施形態にしたがって提供されることができるロードおよびストア命令の様々な例示的な符号化を示している。 図11Dは、一実施形態にしたがって提供されることができるロードおよびストア命令の様々な例示的な符号化を示している。 図12は、一実施形態にかかる、並べ替え命令の群を処理するときの図1の命令復号器の動作を示すフロー図である。 図13は、一実施形態にしたがって実行することができるデータ拡大動作を示している。 図14Aは、一実施形態にかかる、述語情報が並べ替え命令の群の実行中に実行される動作に影響を及ぼすために使用されることができる方法を示している。 図14Bは、一実施形態にかかる、述語情報が並べ替え命令の群の実行中に実行される動作に影響を及ぼすために使用されることができる方法を示している。 図15は、一実施形態にかかる書き込みアクセス回路を有するベクトルレジスタファイルの一部を概略的に示している。 図16は、一実施形態にかかる読み取りアクセス回路を有するベクトルレジスタファイルの一部を概略的に示している。 図17は、一実施形態にかかる書き込みアクセス回路を有するベクトルレジスタファイルを概略的に示している。 図18は、一実施形態にかかる読み取りアクセス回路を有するベクトルレジスタファイルを概略的に示している。 図19Aは、ベクトルレジスタファイルがワードを示すテキスト形式で示されている、ベクトルレジスタファイル内の単一ねじれの例を示している。 図19Bは、ベクトルレジスタファイルがバイトを示すテキスト形式で示されている、ベクトルレジスタファイル内の単一ねじれの例を示している。 図20は、ベクトルレジスタファイルがバイト形式で示されている、ベクトルレジスタファイル内の二重ねじれの例を示している。 図21は、一実施形態にかかる、回路が二重ねじれを実行するベクトルレジスタファイルの1つのセクションを概略的に示している。 図22は、一実施形態にかかる、ねじれを実行するプロセスが一般化されて入れ子にされたねじれを任意の回数実行することができる方法を示す図である。 図23は、一実施形態にかかるレジスタアクセス回路の例としての読み取りアクセス回路を概略的に示している。 図24は、一実施形態にかかるレジスタアクセス回路の例としての書き込みアクセス回路を概略的に示している。 図25は、一実施形態にかかる製造方法を示すフローチャートである。 図26は、使用可能な仮想マシンの実装を示している。
添付の図面を参照して実施形態を説明する前に、以下の実施形態の説明および関連する利点を提供する。
1つの例示的な構成によれば、それぞれが複数の部分を含むベクトルを記憶するように構成されたベクトルレジスタのセットであって、各列が各ベクトルの同じ部分を記憶するように配置された論理的に複数の列に分割される前記ベクトルレジスタのセットと、各アクセスブロックが前記ベクトルレジスタのうちの1つにアクセスするときに前記ベクトルレジスタのうちの他の少なくとも1つにアクセスするときとは異なる列内の部分にアクセスするように構成された複数のアクセスブロックを含むレジスタアクセス回路とを備え、前記レジスタアクセス回路が、前記ベクトルレジスタおよび前記列のうちのいずれか1つの部分に同時にアクセスするように構成される、装置が提供される。
ベクトルレジスタのセットは、論理的に(必ずしも物理的にではなく)複数の列に分割され、各列が各ベクトルの同じ部分を記憶すると考えることができる。例えば、それぞれが独自の128ビットベクトルレジスタに記憶されるベクトルの群の場合、第1の列は、それらの各ベクトルの最初の32ビット(0−31)を記憶し、第2の列は、それらの各ベクトルの2番目の32ビット(32−63)などを記憶することができる。ベクトルレジスタが複数のスカラーレジスタを設けることによって実装される場合が時々あるが、列は、スカラーレジスタの幅とは異なる幅を有してもよい。「論理的に分割された」という用語は、そうでなければ物理的な配置を意味することがある「列」などの用語の使用にもかかわらず、レジスタ自体が特定の方法で物理的に配置される必要がないことを強調するために使用される。レジスタアクセス回路は、ベクトルレジスタの部分へのアクセスを提供し、レジスタアクセス回路は、それぞれがベクトルレジスタの異なる部分にアクセスする多数のアクセスブロックを有する。各アクセスブロックは、1つのベクトルレジスタにおける1つの列と他のベクトルレジスタにおける異なる列とにアクセスするように接続され、それによって「ねじれ」を形成する。このようにして、レジスタアクセス回路は、行の少なくとも一部にアクセスし、また列の少なくとも一部にもアクセスすることが可能である。さらにまた、これら2つのアクセス形式のどちらが使用されるかにかかわらず、2つの言及された群のうちの1つと異なる部分がレジスタアクセス回路の複数のポートに設けられるという点で、これらの部分は同時にまたは略同時にアクセス可能である。したがって、回路は、多数の異なるアクセスパターンを提供することができる。
いくつかの実施形態では、ベクトルレジスタのセットは、少なくとも1つのセクションを備え、各セクションは、異なる列を含み、装置は、各セクションについてのレジスタアクセス回路を備え、各レジスタアクセス回路は、そのレジスタアクセス回路に関連するセクション内の部分にアクセスするように構成される。ベクトルレジスタはまた、複数のセクションに論理的に分割されることもでき、それらの各セクションは、複数の異なる列から構成されている。そのようなセクションごとにレジスタアクセス回路が設けられる。このようにして、ベクトルレジスタは分割されることができる。各ベクトルのサイズが各ベクトルレジスタの容量よりも小さい場合には、そのような構成が使用されることができる。1つのレジスタの下半分と他のベクトルレジスタの上半分への同時アクセスを可能にするために、複数のセクションを有する構成が使用されることもできる。これは、第1の命令の第2の部分が第2の命令の第1の部分と同時に実行されるように、レジスタファイルにアクセスする命令の実行が重複する場合に有用であり得る。そのような重複した実行は、より多数の命令のうちのより小さな部分が同時に実行されるように拡張されることができる。
いくつかの実施形態では、各アクセスブロックは、ベクトルレジスタのうちの1つにアクセスするとき、各セクション内に含まれる列の数から1を引いた数に等しい他のベクトルレジスタのいくつかにアクセスするときとは異なる列内の部分にアクセスするように構成される。これらの実施形態では、増加した列数のおかげで、増加した数の部分がある。しかしながら、部分の列または部分の行に同時にアクセスできることが依然として望ましい。したがって、より複雑な「ねじれ」パターンは、M列のセットに対して、それらの列のそれぞれがM個の隣接するベクトルレジスタのセットにおいて一度だけアクセスされるという結果になる。例えば、セクション内に4つの列(または部分)がある場合、そのセクション内の各アクセスブロックは、ベクトルレジスタ0−3にわたって1度しかそれらの列のそれぞれにアクセスしない。
いくつかの実施形態では、第1のアクセスブロックは、第1のベクトルレジスタの第1の列にアクセスし、第2のベクトルレジスタの第2の列にアクセスするように構成され、第2のアクセスブロックは、第1のベクトルレジスタの第2の列にアクセスし、第2のベクトルレジスタの第1の列にアクセスするように構成される。これらの実施形態では、アクセスブロックのうちの1つに関連するねじれは、同じセクション内のアクセスブロックのうちの他の1つによって行われるねじれとは反対である。
いくつかの実施形態では、各セクションは、N列に論理的に分割され、N列は、log(N)個のレベルを有する入れ子状構造に論理的に配置され、Nは4以上であり、2の整数乗であり、第1のレベルでは、N列は、第1のレベルについての少なくとも1列の第1のセットと第1のレベルについての少なくとも1列の第2のセットとの間で等しく分割され、各親レベル内の少なくとも1つの列のセットのそれぞれは、対応する子レベルについての少なくとも1つの列の第1のセットおよびその対応する子レベルについての少なくとも1つの列の第2のセットに再度等しく分割され、各アクセスブロックは、各ベクトルレジスタについて1つの列を訪問するように構成され、1つの列は、各レベルについて、所定数のベクトルレジスタの半分についての少なくとも1つの列の第2のセットを訪問する前に、所定数のベクトルレジスタの半分についての少なくとも1つの列の第1のセットを訪問する制約によって一意的に識別され、所定数は2に等しく、Xは各レベルで異なり、1からlog(N)の範囲内である。そのような実施形態では、単一のねじれは、所与の列または所与の行内の必要な数の部分へのアクセスを提供するのに十分ではない。例えば、所与の行または列内の4つの部分が同時にアクセスされなければならない場合、セクションを4つの列に分割して第2のねじれ内に入れ子状にされた第1のねじれを提供する、すなわち、アクセスパターンの必要なアレイを提供する必要があることがある。実際には、これは、一般に、多数の入れ子状のねじれまで拡張することができ、それによって入れ子状構造を提供する。N列(Nは4以上であり、2の整数乗でもある)を含む入れ子状構造内では、N列は、log(N)個のレベルで論理的に配置されることができる。第1のレベルでは、全ての列が第1のセットと第2のセットとの間で半分ずつ等しく分割される。例えば第1のレベルの後の各レベルなどの各子レベルでは、親レベルからの少なくとも1つの列の各セットは、対応する子レベルについての少なくとも1つの列の第1のセットとその対応する子レベルについての少なくとも1つの列の第2のセットとに等しく分割される。このようにして、各子レベルがその親レベルと比較して列のセット数を2倍にした入れ子状構造が生成される。したがって、第1のレベルと最後の(最上位)レベルを除く全てのレベルは、それぞれそれらの直上および直下のレベルに対する子レベルおよび親レベルの双方である。別の見方をすると、最上位レベルから第1のレベルまでの各下位レベルでは、前のレベルからの列のセットが対になっているため、各下位レベルでは、全ての列が半分に2つに分割されるまでセット数が半分になり、それぞれN/2列を有する。これを念頭に置いて、アクセスパターンが定義されることができる。特に、各アクセスブロックは、各ベクトルレジスタに対して1つの列を訪問するように構成されている。1つの列は、各レベルについて、所定数の半分のベクトルレジスタについての少なくとも1つの列の第2のセットを訪問する前に、所定数の半分のベクトルレジスタについての少なくとも1つの列の第1のセットが訪問されるという制約によって一意的に識別される。したがって、M個の異なる列を訪問することは、少なくともM個の異なるベクトルレジスタを訪問することを必要とする。
所定数は2に等しく、Xは、各レベルで異なり、1からlog(N)の範囲内である。したがって、例えば、3つのレベルを有する実施形態では、第2のレベルにおいて、2つの列の2つの第1のセットと2つの列の2つの第2のセットがある。少なくとも1つの列の2つの第1のセットは、同様の数のベクトルレジスタについて少なくとも1つの列の2つの第2のセットを訪問する前に、1、2、または4つのベクトルレジスタについて訪問される。
いくつかの実施形態では、ベクトルレジスタのセットは、2つのセクションを含み、Nは4の値を有する。2つのセクションのそれぞれにおいて、アクセスパターンは、4つのレジスタごとに繰り返され、2つのレベルのねじれの入れ子をもたらす。
いくつかの実施形態では、レジスタアクセス回路は、ベクトルレジスタに記憶されているデータ要素を出力するための読み取りアクセス回路を備え、レジスタアクセス回路は、データ要素をベクトルレジスタに入力するための書き込みアクセス回路を備える。これらの実施形態のいくつかにおいて、読み取り回路および書き込み回路は、互いに分離されており、ベクトルレジスタにアクセスするときにそれぞれが互いに異なる接続を使用する。
いくつかの実施形態では、読み取りアクセス回路は、複数の列のそれぞれに対して1つのアクセスブロックを備える。列数は、典型的には、同時にアクセスされることが望まれる部分の数を示す。各同時アクセスは、別々のアクセスブロックを必要とする。したがって、いくつかの実施形態では、ベクトルレジスタから読み出すために列ごとに1つのアクセスブロックが提供される。
いくつかの実施形態では、読み取りアクセス回路は、複数の列のそれぞれに対して最大で1つのアクセスブロックを備える。前述のように、アクセスブロックの数は、所与のセクション内で同時に発生することが望まれる行または列への同時アクセスの数を示す。いくつかの実施形態では、同時アクセスの最大数は、ねじれパターンあたり1つである。したがって、それらの実施形態では、これよりも多くのアクセスブロックを提供する必要はない。
いくつかの実施形態では、読み取りアクセス回路内のアクセスブロックは、マルチプレクサを備える。各マルチプレクサへの入力は、そのマルチプレクサが接続されている部分に対応する。それによって、マルチプレクサは、どの入力が選択されたかを示すための選択信号に基づいて、それが接続されている部分間で切り替える。各アクセスブロックは、同時に必要とされない部分に接続するように構成される。このようにして、所望の組み合わせ(例えば、列内の部分または行内の部分)を異なるアクセスブロックに接続することが可能であり、それによってそれらの部分に同時にアクセスすることを可能にする。
いくつかの実施形態では、ベクトルレジスタのセットは、少なくとも1つのセクションを含み、各セクションは異なる列を含み、装置は、各セクションについてのレジスタアクセス回路を備え、各レジスタアクセス回路は、そのレジスタアクセス回路に関連するセクション内の部分にアクセスするように構成され、各セクションについて、読み取りアクセス回路は、読み取りアクセス回路内の各アクセスブロックからの出力を並べ替えるための並べ替え回路を備える。いくつかの実施形態では、説明された方法でアクセスブロックを接続することによって、いくつかの部分が出力される順序は、正しくない可能性がある。通常、この順序は、いくつかの部分の対が入れ替わるようなものである。これを是正するために、アクセスブロックを並べ替えるために並べ替え回路が設けられることができる。
どの並べ替え回路が設けられることができるかについては、いくつかの異なる選択肢がある。しかしながら、いくつかの実施形態では、並べ替え回路は、クロスバーマルチプレクサである。大抵の場合、そのようなマルチプレクサは、ロード命令についてのエンディアンスワップ、ならびにベクトルレジスタにおいてインターリーブされる実数/虚数成分をスワップする必要がある複雑なADD/MUL命令を処理するためにとにかく提供されることができる。したがって、そのようなマルチプレクサの使用は、回路全体のサイズを大きくすることがない。
いくつかの実施形態では、書き込みアクセス回路は、複数の列のそれぞれに対して1つのアクセスブロックを備える。読み取りアクセス回路と同様に、アクセスブロックの数は、通常、所与のセクション内で同時にアクセスされることが望まれる行または列の数を示す。各同時アクセスは、別々のアクセスブロックを必要とする。したがって、いくつかの実施形態では、ベクトルレジスタに書き込むために列ごとに1つのアクセスブロックが設けられる。
いくつかの実施形態では、書き込みアクセス回路は、複数の列のそれぞれに対して最大で1つのアクセスブロックを備える。アクセスブロックの数は、ベクトルレジスタの各部分が同時にアクセスされることができる範囲を制御する。いくつかの実施形態では、同時アクセスの最大数は、各部分(列)に対して1つである。したがって、そのような実施形態では、列ごとに1つよりも多くのアクセスブロックを提供する必要はないことがある。
いくつかの実施形態では、ベクトルレジスタのセットは少なくとも1つのセクションを含み、各セクションは異なる列を含み、装置は、各セクションについてのレジスタアクセス回路を含み、各レジスタアクセス回路は、そのレジスタアクセス回路に関連するセクション内の部分にアクセスするように構成され、各セクションについて、書き込みアクセス回路は、書き込みアクセス回路内の各アクセスブロックへの入力を並べ替えるための並べ替え回路を備える。先に説明したように、読み取りアクセス回路について、いくつかの部分の出力は反転される可能性があるのと同様に、レジスタへの入力もまた、反転される必要がある場合がある。したがって、ユーザが特定の順序で入力を提供することを要求するのではなく、入力は、意図された順序で提供されることができ、並べ替え回路は、データがベクトルレジスタの正しい部分に記憶されるように部分を並べ替えることができる。
どの並べ替え回路が設けられることができるかについては、いくつかの異なる選択肢がある。しかしながら、いくつかの実施形態では、並べ替え回路は、クロスバーマルチプレクサである。大抵の場合、そのようなマルチプレクサは、記憶命令についてのエンディアンスワップ、ならびにベクトルレジスタにおいてインターリーブされる実数/虚数成分をスワップする必要がある複雑なADD/MUL命令を処理するためにとにかく提供されることができる。したがって、そのようなマルチプレクサの使用は、回路全体のサイズを大きくすることがない。
ベクトルレジスタには異なる構成がある。しかしながら、いくつかの実施形態では、ベクトルレジスタは、128ビットレジスタである。
同様に、ベクトルレジスタが実装されることができる多数の異なる方法がある。しかしながら、いくつかの実施形態では、各ベクトルレジスタは、複数の32ビットレジスタを備える。
ここで、特定の実施形態が図面を参照して説明される。
図1は、ベクトル命令の処理をサポートするデータ処理装置2の例を概略的に示している。これは、説明を容易にするための簡略図であり、実際には装置は簡潔にするために図1に示されていない多くの要素を有することができることが理解されよう。装置2は、命令復号器6によって復号された命令に応答してデータ処理を実行するための処理回路4を備える。プログラム命令は、メモリシステム8からフェッチされ、アーキテクチャによって定義された方法で命令を処理するように処理回路4を制御する制御信号を生成するために命令復号器によって復号される。例えば、復号器6は、復号された命令のオペコードおよび命令の任意の追加の制御フィールドを解釈して、適切なハードウェアユニットを作動させて算術演算、ロード/ストア演算または論理演算などの演算を実行させる制御信号を処理回路4に生成することができる。
装置は、処理回路4によって処理されるべきデータ値と処理回路の動作を構成するための制御情報とを格納するためのレジスタのセット10を有する。算術または論理命令に応答して、処理回路4は、レジスタ10からオペランドを読み取り、命令の結果をレジスタ10に書き戻す。ロード/ストア命令に応答して、データ値は、処理回路を介してレジスタ10とメモリシステム8との間で転送される。メモリシステム8は、1つ以上のレベルのキャッシュならびにメインメモリを含むことができる。
レジスタ10は、単一のデータ要素を含むスカラー値を格納するための多数のスカラーレジスタを含むスカラーレジスタファイル12を含む。命令復号器6および処理回路4によってサポートされるいくつかの命令は、スカラーレジスタ12から読み出されたスカラーオペランドを処理してスカラーレジスタに書き戻されるスカラー結果を生成するスカラー命令である。
レジスタ10はまた、それぞれが複数のデータ要素を含むベクトル(本明細書ではベクトル値とも呼ばれる)を格納するためのいくつかのベクトルレジスタを含むベクトルレジスタファイル14を含む。ベクトル命令に応答して、命令復号器6は、処理回路4を制御してベクトルレジスタ14の1つから読み出されたベクトルオペランドの各要素に対して多数レーンのベクトル処理を実行し、スカラーレジスタ12に書き込まれるべきスカラー結果またはベクトルレジスタ14に書き込まれるべきさらなるベクトル結果のいずれかを生成する。いくつかのベクトル命令は、1つ以上のスカラーオペランドからベクトル結果を生成するか、またはスカラーレジスタファイル内のスカラーオペランド、ならびにベクトルレジスタファイル14から読み出されたベクトルオペランドに対するベクトル処理のレーンに対して追加のスカラー演算を実行することができる。したがって、いくつかの命令は、命令の1つ以上のソースレジスタおよび宛先レジスタのうちの少なくとも1つがベクトルレジスタ14であり、1つ以上のソースレジスタおよび宛先レジスタのうちの別のものがスカラーレジスタ12である混合スカラーベクトル命令とすることができる。
ベクトル命令はまた、データ値をベクトルレジスタ14とメモリシステム8内の位置との間で転送させるベクトルロード/ストア命令も含むことができる。ロード/ストア命令は、メモリ内の位置が連続するアドレス範囲に対応する連続ベクトルロード/ストア命令、またはいくつかの離散アドレスを指定して処理回路4を制御してそれらのアドレスのそれぞれからのデータをベクトルレジスタの各要素にロードするかもしくはベクトルレジスタの各要素から個別のアドレスにデータを格納する散乱/集合型ベクトルロード/ストア命令を含むことができる。
処理回路4は、ある範囲の異なるデータ要素サイズを有するベクトルの処理をサポートすることができる。例えば、128ビットベクトルレジスタ14は、例えば16個の8ビットデータ要素、8個の16ビットデータ要素、4個の32ビットデータ要素または2個の64ビットデータ要素に分割されることができる。レジスタバンク10内の制御レジスタは、使用されている現在のデータ要素サイズを指定してもよく、あるいはこれは、実行されるべき所与のベクトル命令のパラメータであってもよい。
レジスタ10はまた、処理回路4の処理を制御するためのいくつかの制御レジスタも含む。例えば、これらは、処理中の現在の実行点に対応する命令のアドレスを示すプログラムカウンタアドレスを格納するためのプログラムカウンタレジスタ16、処理が関数呼び出しの後続処理に関するリターンアドレスを格納するためのリンクレジスタ18、およびスタックデータ構造のメモリシステム8内の位置を示すスタックポインタレジスタ20を含むことができる。当然のことながら、これらは、格納できる制御情報の種類のほんの一部にすぎず、実際にはアーキテクチャの所与の命令セットは、アーキテクチャによって定義されている他の多くの制御パラメータを格納することができる。例えば、制御レジスタは、ベクトルレジスタの全幅、またはベクトル処理の所与のインスタンスに使用されている現在のデータ要素サイズを指定することができる。
処理回路4は、異なるクラスの命令を処理するためのいくつかの異なるハードウェアブロックを含むことができる。例えば、図1に示すように、メモリシステム8と相互作用するロード/ストア命令は、専用ロード/ストアユニット(LSU)25によって処理されることができるとともに、算術または論理命令は、1つ以上の他のユニット30によって処理されることができる。これらの他のユニットは、算術論理ユニット(ALU)を含むことができ、ALU自体は、さらに、乗算を含む演算を実行するための積和演算ユニット(MAC)と、他の種類のALU演算を処理するためのさらなるユニットとに分割されることができる。浮動小数点命令を処理するために浮動小数点ユニットを設けることもできる。ベクトル処理を含まない純粋なスカラー命令もまた、ベクトル命令と比較して別のハードウェアブロックで処理することもでき、または同じハードウェアブロックを再利用することもできる。
デジタル信号処理(DSP)のようないくつかの用途では、おおよそ同数のALUおよびロード/ストア命令が存在することができ、したがって、MACのようないくつかの大きなブロックは、かなりの時間、アイドルのままにされることができる。実行リソースがより高い性能を得るためにベクトルレーンの数に比例して増やされるので、この非効率性は、ベクトルアーキテクチャ上で悪化する可能性がある。より小型のプロセッサ(例えば、単一発行、インオーダーコア)では、完全にスケールアウトされたベクトルパイプラインの面積オーバーヘッドが非常に大きい可能性がある。図2に示すように、使用可能な実行リソースをより効率的に使用しながら領域への影響を最小限に抑えるための1つのアプローチは、命令の実行を重複させることである。この例では、3つのベクトル命令は、ロード命令VLDR、乗算命令VMULおよびシフト命令VSHRを含み、それらの間にデータ依存性があっても、これら全ての命令は、同時に実行することができる。これは、VMULの要素1は、Q1の要素1にのみ依存し、Q1レジスタ全体には依存しないため、VLDRの実行が終了する前にVMULの実行を開始できるためである。命令を重複させることを可能にすることにより、乗算器のような高価なブロックは、より頻繁にアクティブに保たれることができる。
したがって、マイクロアーキテクチャ実装がベクトル命令の実行を重複することを可能にすることが望ましい可能性がある。しかしながら、アーキテクチャが固定量の命令重複があると仮定すると、マイクロアーキテクチャの実装が、アーキテクチャが想定する命令重複の量と実際に一致する場合、これは、高い効率を提供するが、異なる重複を使用するアーキテクチャまたは全く重複しないアーキテクチャを使用する異なるマイクロアーキテクチャにスケーリングされる場合に問題が生じる可能性がある。
代わりに、図3の例に示すように、アーキテクチャは、様々な重複をサポートすることができる。ベクトル命令の実行は、「ビート(beats)」と呼ばれる部分に分割され、各ビートは、所定サイズのベクトルの一部の処理に対応する。ビートは、完全に実行されるかまたは全く実行されないかのいずれかであり、部分的に実行することはできないベクトル命令のアトミック部分である。1ビートで処理されるベクトルの部分のサイズは、アーキテクチャによって定義され、ベクトルの任意の部分とすることができる。図3の例では、ビートは、ベクトル幅の4分の1に対応する処理として定義され、そのため、ベクトル命令あたり4ビートがある。明らかに、これは一例にすぎず、他のアーキテクチャは、例えば2または8などの異なる数のビートを使用してもよい。1ビートに対応するベクトルの部分は、処理されるベクトルのデータ要素サイズと同じサイズ、よりも大きいサイズまたはより小さいサイズとすることができる。したがって、要素サイズが実装ごとに、または実行時に異なる命令間で異なる場合であっても、ビートは、ベクトル処理の一定の幅である。1ビートで処理されるベクトルの部分が複数のデータ要素を含む場合、各要素が独立して処理されることを確実にするために、各要素間の境界でキャリー信号が無効にされることができる。1ビートで処理されるベクトルの部分が要素の一部のみに対応し、ハードウェアが数ビートを並行して計算するのに不十分である場合、1ビートの処理中に生成されるキャリー出力は、2つのビートの結果がともにデータ要素を形成するように、後続ビートへのキャリー入力として入力されることができる。
図3に示すように、処理回路4の異なるマイクロアーキテクチャ実装は、抽象的なアーキテクチャクロックの1つの「ティック(tick)」で異なる数のビートを実行することができる。ここで、「ティック」は、アーキテクチャ状態の前進の単位に対応する(例えば、単純なアーキテクチャでは、各ティックは、次の命令を指すようにプログラムカウンタを更新することを含む、命令の実行に関連する全てのアーキテクチャ状態を更新するインスタンスに対応することができる)。当業者にとって理解されるように、パイプライン化などの既知のマイクロアーキテクチャ技術は、単一のティックがハードウェアレベルで実行するために複数のクロックサイクルを必要とし、実際にハードウェアレベルの単一クロックサイクルは、複数の命令の複数の部分を処理できることを意味することができる。しかしながら、そのようなマイクロアーキテクチャ技術は、アーキテクチャレベルではティックがアトミックであるためにソフトウェアには見えない。簡潔にするために、そのようなマイクロアーキテクチャは、本開示のさらなる説明の間は無視される。
図3の下の例に示すように、いくつかの実装形態は、1ティック内で全てのビートを並行して処理するのに十分なハードウェアリソースを提供することによって、同じティック内のベクトル命令の4ビート全てをスケジュールすることができる。これは、高性能の実装に適することができる。この場合、命令全体が1ティックで完了できるため、アーキテクチャレベルでの命令間のいかなる重複も必要ない。
一方、より面積効率の高い実装では、ティックあたり2ビートしか処理できない、より狭い処理ユニットを提供することができ、図3の中央の例に示すように、命令実行は、第1の命令の第3または第4のビートと並列に実行される第2のベクトル命令の第1および第2のビートと重複されることができ、それらの命令は、処理回路内の異なる実行ユニット上で実行される(例えば、図3では、第1の命令は、ロード/ストアユニット25を使用して実行されるロード命令であり、第2の命令は、他のユニット30のうちの1つを形成するMACユニットを使用して実行される積和命令である)。
さらにエネルギ/面積効率の高い実装では、より狭く、一度に単一ビートしか処理できないハードウェアユニットを提供することができ、この場合、ティックあたり1ビートが処理されることができ、図3の上の例に示されるように、命令実行は1ビートずつ重複されてずらされる(これは、上記図2に示されている例と同じである)。
図3に示されている重複はほんのいくつかの例であり、他の実装も可能であることが理解されるであろう。例えば、処理回路4のいくつかの実装は、同じティック内で並列に複数の命令の二重発行をサポートすることができ、その結果、命令のスループットが向上する。この場合、1つのサイクルでともに始まる2つ以上のベクトル命令は、次のサイクルで始まる2つ以上のベクトル命令と重複されるいくつかのビートを有することができる。
実装ごとに重複量を変えて異なる性能点にスケーリングするのと同様に、ベクトル命令間の重複量もまた、プログラム内のベクトル命令の実行の異なるインスタンス間で実行時に変化させることができる。したがって、処理回路4は、図1に示すように、前の命令に対して所与の命令が実行されるタイミングを制御するためのビート制御回路30を備えることができる。これは、実装がより困難であるか、または命令に利用可能なリソースに依存する特定のコーナーケースにおいて、マイクロアーキテクチャに命令を重複させないことを選択する自由を与える。例えば、同じリソースを必要とし、使用可能な全てのMACまたはALUリソースが既に別の命令によって使用されている特定の種類(例えば、積和命令)のバックツーバック命令がある場合、次の命令の実行を開始するのに十分な空きリソースがない可能性があり、そのため、重複ではなく、最初の命令が完了するまで第2の命令の発行を待機することができる。
図4に示すように、介在するスカラー命令がある場合、2つのベクトル命令間の重複もまた防止されることができる。これは、スカラー命令がベクトル命令の最後のビートの結果に依存し、第2のベクトル命令がその全てのビートのスカラー結果に依存する可能性があるため、ベクトル命令とスカラー命令の重複を避ける方が安全な場合があるためである。
上述したように重複が許可されると、複数の命令が同時に実行される可能性がある。プログラムカウンタ16は、なおも完了しているべき少なくとも1つのビートを有する最も古い未完了命令のアドレスを追跡することができる。プログラムカウンタは、ベクトル命令がその最後のビートを完了したときにインクリメントされることができる。
標準的なベクトルロード/ストア動作および散乱/集合型ベクトルロード/ストア動作を実行することに加えて、指定されたベクトルのデータ要素がメモリシステム8とベクトルレジスタ14のセットとの間で移動されるので、LSU25は、並べ替え動作も実行するように構成され、ベクトルのデータ要素がそれらに対するさらなるベクトル演算の効率的な実行を容易にするような方法でベクトルレジスタ内に配置されることを確実にするのを支援することができる。データ要素は、データ構造を形成するとみなすことができる。例えば、音声データを考慮すると、データ構造は、異なるオーディオチャンネルに関連するいくつかのデータ要素を含むことがある。例えば、単純なステレオオーディオを考慮すると、各データ構造は、左チャンネル用のデータ要素と右チャンネル用のデータ要素とを含むことができる。同様に、画像データを考慮すると、データ構造は、赤、緑、青およびアルファ(RGBA)データ要素成分などの複数の成分を含むことができる。データ要素は、メモリシステム内で特定の方法で編成されることが多いが、それらのデータ要素をベクトルレジスタ内で異なって編成することが望ましい。例えば、各データ構造のデータ要素は、メモリ内で連続して配置されることができるが、ベクトルレジスタ内では、複数のデータ構造からの対応するデータ要素が各ベクトルレジスタ内で連続して配置されるように個々のデータ要素を並べ替えることが望ましい。したがって、前述の画像データの例を考慮すると、1つのベクトルレジスタ内に連続して配置されるべき多数のデータ構造のR成分に関する一連のデータ要素、別のベクトルレジスタ内で連続して配置されるべきG成分に関する一連のデータ要素を配置することなどが望ましい場合がある。そのような例では、ベクトルロード動作中にアクセスされるいくつかのデータ構造内のデータ要素は、それらがメモリからベクトルレジスタに移動されるときにデインターリーブされることができ、その後にベクトルストア動作中にベクトルレジスタからメモリに戻されるときにインターリーブされることができる。
LSU25内でそのような並べ替え動作をサポートすることによって、これは、後続の処理に必要な方法でそれらのデータ要素を配置するためにそれらがベクトルレジスタ内に格納された後にデータ要素に対していくつかの追加操作を実行するために追加命令を実行する必要性を回避するため、性能を大幅に改善することができる。しかしながら、そのようなベクトルロードまたはストア命令によって必要とされる計算量は非常に大きく、特定の実装においては、命令が数サイクルの間停止することを意味することがある。これは、性能の問題を引き起こす可能性があり、メモリと算術演算の重複実行を可能にするシステムではさらに悪化する可能性がある。
後述する実施形態によれば、1つのモノリシックロードまたはストア命令を使用する代わりに、並べ替え命令の群を形成する複数の並べ替え命令の実行の結果として並べ替え動作が実行されるように、並べ替え動作が複数の命令にわたって効果的に分割される。群内の各並べ替え命令は、群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なるデータ要素アクセスパターンを定義する。並べ替えアクセスパターンは、メモリ内でアクセスされるべきデータ要素のアドレスと評価されるべきベクトルレジスタの特定の部分との両方を識別するために使用される。
図5は、一実施形態にかかるベクトルレジスタ14のセットを示している。この実施形態では、8つのベクトルレジスタQ0からQ7が設けられており、図5に示す実施形態では、各ベクトルレジスタは、複数のスカラーレジスタから形成されている。したがって、ベクトルレジスタQ0 50は、4つのスカラーレジスタ55、60、65、70から形成される。スカラーレジスタは、独立してアクセスされることができ、実際にスカラーレジスタ内の個々の部分は、必要に応じてアクセスされることができる。図5の実施形態では、各ベクトルレジスタは、複数のスカラーレジスタから構成されているが、これは必須ではないが、ベクトルレジスタは構成され、ベクトルレジスタセットは、ベクトルレジスタ内の個々の部分が他の部分とは独立して更新できるように構成される。
各ベクトルレジスタ内に格納されるデータ要素の数は、データ要素のサイズに依存し、一実施形態では複数の異なるサイズのデータ要素がサポートされる。例えば、一実施形態では、ベクトルレジスタは128ビット長であり、システムによって処理されるデータ要素は、64ビットデータ要素、32ビットデータ要素、16ビットデータ要素、または8ビットデータ要素とすることができる。これは単に例示的な例であり、他の実施形態では、ベクトルレジスタのサイズおよびサポートされるデータ要素のサイズは異なってもよいことが理解されよう。図5の特定の例を考慮すると、スカラーレジスタ55、60、65、70のそれぞれは、32ビットレジスタであり、したがって、データ要素サイズが32ビット以下の場合、各スカラーレジスタは、1つ以上のデータ要素を格納する。
後でより詳細に説明するように、ベクトルレジスタ14のセットは、論理的には複数のセクション、例えば図5に示す第1のセクション75と第2のセクション80とから構成されるとみなすことができる。ベクトルレジスタは、図5では2つのセクションに論理的に分割されているように示されているが、必要に応じて、3つ以上のセクションに分割されることができる。後でより詳細に説明するように、群内の個々の並べ替え命令に対するアクセスパターンを適切に選択することによって、群内の各並べ替え命令の実行中に、メモリ内の連続ワードに対して別々のアクセスが行われるように構成されることができ、それらの別々のアクセスは、ベクトルレジスタ内の異なるセクション75、80に対して行われるように構成されることができる。これは、そのようなメモリアクセス命令と算術命令との重複を容易にする。例えば、1つのそのような並べ替え命令が第2のセクション80にアクセスしている間に、第1のセクション75にアクセスする算術命令を実行することができる。
図6は、一実施形態にかかる、一群の並べ替え命令がデインターリーブ動作を実行するように構成されることができる方法を示す図である。特に、2つのベクトルロード(VLD)命令は、実行されると、まとめてデインターリーブ動作を実行する命令の群を形成する。これらのVLD命令は、VLD2n命令であり、「2」は2のストライド、すなわち、各データ構造内に2つのデータ要素があることを示す。「VLD20」命令内の「0」は、そのベクトルロード命令が群内の第1の命令であることを識別し、したがって、特定のアクセスパターン識別子を効果的に識別する。同様に、「VLD21」命令は、群内の第2の命令であり、「1」は、異なるアクセスパターン識別子を効果的に提供する。
図6からもわかるように、両方の命令は、それらが32ビットデータ要素上で動作していることを識別し、同じ2つのベクトルレジスタ(この例ではQ0およびQ1)を識別する。ベースアドレスもまた、スカラーレジスタRnの内容によって指定される。第2の命令の末尾の「!」は、その命令の実行もまたレジスタRnのベースアドレスを更新させることを識別する。
図6に示す実施形態によれば、両方のベクトルロード命令に関連するアクセスパターンに2つの64ビット連続メモリアクセスを実行させると仮定する。したがって、メモリワードサイズが32ビットであると仮定すると、第1のアクセスは、2つの連続する32ビットメモリワードにアクセスし、次に、第2のアクセスは、さらに2つの連続する32ビットメモリワードにアクセスする。データ要素のサイズもまた32ビットであるため、これは、各アクセスが2つの連続した32ビットのデータ要素にアクセスすることを意味する。
図6に示される特定のアクセスパターンによれば、第1のVLD2n命令の実行は、LSU25のアクセス/並べ替え動作130によるその第1の命令の第1のアクセスの処理中にデータ構造105にアクセスさせ、そして、その第1の命令の第2のアクセス中にデータ構造120にアクセスさせる。アクセスパターンはまた、図6のレジスタ内容140によって示されるように、第1のデータ構造105の2つのデータ要素(この例では、データ構造は、左右の音声成分からなる音声データを表すと仮定される)を2つのベクトルレジスタQ0およびQ1内の第1のレーンにロードさせる(ここで、「x」は、これらの要素に対して更新が実行されず、以前の値が保持されることを示す)。以下の説明では、ベクトルレジスタ内の算術演算を実行するとき、各レーン内のデータ要素内で並列に演算を実行することができるため、ベクトルレジスタ内の各データ要素位置は、レーンと称される。
レジスタ内容145によって示されるように、第1の命令の第2のアクセスが実行されると、データ構造120のデータ要素は、ベクトルレジスタの最終レーン内に配置される。先に参照した図5から明らかなように、第1のベクトルロード命令の第1のアクセスは、ベクトルレジスタ14の第1のセクション75にアクセスする一方で、第2のアクセスは、第2のセクション80にアクセスする。
同様に、図6に示されるように、第2のベクトルロード命令を実行した結果としてロード/ストアユニット130のアクセス/並べ替え動作が実行されると、第1のアクセスがデータ構造110にアクセスし、レジスタ内容150によって示されるように第2のレーン内に2つのデータ要素を格納し、そして、第2のアクセスがデータ構造115にアクセスし、ベクトルレジスタ内容155によって示されるように第3のレーンにデータ要素を格納する。ここでも同様に、第1のアクセスは、ベクトルレジスタの第1のセクション75にアクセスし、第2のアクセスは、第2のセクション80にアクセスすることがわかる。
図3を参照して前述した4ビート/ティックアプローチを採用し、少なくともクワッドバンクメモリシステムであるメモリシステムを仮定すると、そのようなアクセスパターンは、各ビートに関連付けられたアドレスが異なるメモリバンクにアクセスするため、各命令の第1および第2のアクセスが同時に起こることを可能にする。代わりに図3を参照して前述したように2ビート/ティック構成が使用される場合、各命令に対する第1および第2のアクセスは、次々に起こることができる。メモリが少なくとも2つのメモリバンクを備える場合、図6に示されるパターンの使用は、各アクセス中に2つのメモリバンクがアクセスされることを可能にし、したがって性能を改善する。
並べ替え命令の群をまとめて形成する並べ替え命令のそれぞれに関連するアクセスパターンは様々な形態をとることができる。前述のように、群内の各並べ替え命令は、群内の他の各並べ替え命令によって定義されたデータ要素アクセスパターンとは異なるデータ要素アクセスパターンを定義し、一実施形態では、これは、群内の各並べ替え命令の実行中に異なるデータ要素がメモリと複数のベクトルレジスタとの間で移動されることを保証する。さらに、アクセスパターンは、各並べ替え命令の実行中に2つ以上のベクトルレジスタがアクセスされるように定義される。一実施形態では、アクセスパターンは、各並べ替え命令の実行が並べ替え動作に関与する複数のベクトルレジスタのそれぞれにおいて少なくとも1つのデータ要素にアクセスさせるようなものである。そのようなアプローチは、アクセスパターンを実行することをより簡単にすることができることを見出した。
図7Aから図7Gは、様々な異なるデータ要素サイズについて、群内の異なる並べ替え命令のそれぞれに関連付けることができるアクセスパターンの様々な異なる例を示している。これらは単なる例示であり、多くの異なるアクセスパターンもまた使用可能であることが理解されるであろう。これらの図は、パターンが、群内の各並べ替え命令の実行中にどのようにベクトルレジスタのどの部分がアクセスされるのかを決定し、どのメモリアドレスがアクセスされるのかを示している。図7Aは、32ビットデータ要素およびアクセスベクトルレジスタQ0およびQ1を操作する群内で2つのベクトルロード命令を実行するときに採用されるベクトルレジスタアクセスパターンを示しており、これらのパターンは、図6に概略的に示されるものに対応する。特に、アクセスパターン200は、4つの部分205、210、215、220からなる。第1のベクトルロード命令が実行されると、ブロック205に示すように、第1のアクセスは、ベースアドレスに対してメモリオフセット0および4のアドレスにアクセスし、その内容をスカラーレジスタS0およびS4に格納する。そして、ブロック210に示すように、第1の命令の第2のアクセスは、オフセット24および28でメモリにアクセスし、その内容をスカラーレジスタS3およびS7に格納する。図7Aでは、S0からS7(ベクトルレジスタQ0およびQ1を構成する)がアクセスされるが、アクセスされるスカラーレジスタは、並べ替え命令によって指定されたベクトルレジスタに依存することが理解されよう。別の例では、並べ替え命令は、例えば、宛先ベクトルレジスタとしてQ1およびQ2を指定することができ、その場合、スカラーレジスタS4からS11がアクセスされることになる。
先に説明した図6から明らかなように、第1の命令の実行は、ベースレジスタの内容を更新させず、したがって、第2の命令が実行されると、オフセットは、同じベースアドレスに関して計算される。したがって、ブロック215に示すように、第2の命令の第1のアクセスは、ベースアドレスに関してメモリオフセット8および12のアドレスにアクセスし、取り出されたデータ要素は、スカラーレジスタS1およびS5に格納される。同様に、第2のアクセスは、ブロック220に示すように、内容がスカラーレジスタS2およびS6に格納されている状態で、オフセット16および20でメモリにアクセスさせる。図5の先の説明から明らかなように、説明を容易にするためにスカラーレジスタ番号を参照しているが、それらのスカラーレジスタは、2つのベクトルレジスタQ0およびQ1を効果的に形成し、したがって、スカラーレジスタ番号は、単にベクトルレジスタの様々な部分を識別することが理解される。
図7Bは、ベクトルレジスタQ0からQ3にアクセスする4つのベクトルロード命令の群が4のストライドでベクトルロードを実施するために使用されるとき(すなわち、各データ構造が4つのデータ要素を含む場合、例えば、前述のRGBAの例の場合である)に使用可能な別の一連のベクトルレジスタアクセスパターン225を示している。ここでも同様に、データ要素は、32ビットサイズであると仮定する。第1の命令が実行されると、ボックス230、235によって示される2つのアクセスを実行し、ベースアドレスに関して0および4のオフセットを有する2つのデータ要素を取得し、それらをスカラーレジスタ位置S0およびS4に格納し、そして、第2のアクセスは、ベースアドレスに関してメモリオフセット40および44で2つのデータ要素にアクセスし、それらをスカラーレジスタS10およびS14に格納する。第2の命令が実行されると、2つのブロック240および245によって示されるアクセスを実行する。同様に、第3の命令が実行されると、ブロック250および255によって示される2つのアクセスを実行する。最後に、第4の命令が実行されると、ブロック260および265によって示される2つのアクセスを実行する。
群内のどの命令にどのアクセスパターンが関連付けられているかは、全てのアクセスパターンをまとめて使用する場合には重要ではないことが理解されよう。このコメントは、図7Aから図7Gの全ての例に等しくあてはまる。
VLD2n命令について図6を参照して前述したのと同じ表現を使用すると、図7Bに概略的に示されているアクセスパターンを実行するために使用される4つのベクトルロード命令は、以下の形式をとることができる:
VLD40.32{Q0−Q3}、[Rn]
VLD41.32{Q0−Q3}、[Rn]
VLD42.32{Q0−Q3}、[Rn]
VLD43.32{Q0−Q3}、[Rn]!
図7Bから明らかなように、各VLD4n命令が実行されると、それは図7Bに示されるパターンにしたがって4つのベクトルレジスタの4分の1に書き込む。図7Aおよび図7Bの検討から明らかなように、VLD2nおよびVLD4n命令群の両方に対して、各命令は、2つの64ビット連続メモリアクセスを実行する。さらに、アドレスビット[3:2]は、単一の命令によって実行されるワードアクセスごとに異なり、そのため、そのメモリサブシステムが複数のメモリバンクを採用するとき、メモリサブシステムへのより効率的なアクセスが可能になる。さらに、メモリとレジスタのアクセスパターンは、両方とも、ビット単位のロジックで簡単に計算できるように設計されている。これは、VLD4n命令の群を参照して例として図8および図9において後で説明される。
また、各命令が実行されると、ベクトルレジスタファイルの各半分に64ビットを格納することがわかる。これは、デュアルビートアーキテクチャでは、レジスタファイルの中心線を横切るアクセスがないことを意味し、したがって、命令は、余分な依存性チェックまたは停止を必要とせずに前述のメモリの重複実行および算術演算と互換性がある。これらの要因は、命令を実行することを容易にし、メモリサブシステムの効率的な使用を可能にする。
図7Cおよび7Dは、データ要素サイズが32ビットではなく16ビットであるときに、VLD2nおよびVLD4n群の命令に使用できる等価アクセスパターン300、310を示している。図7Cを考慮すると、アクセスパターン300は、第1のVLD命令の2つのアクセスによってアクセスされるブロック302、304と、第2のVLD命令の2つのアクセスによってアクセスされるブロック306、308とからなる。
同様に、図7Dを考慮すると、アクセスパターン310は、第1の命令の2つのアクセスに関連するブロック312、314、次の命令の2つのアクセスに関連するブロック316、318、第3の命令の2つのアクセスに関連する命令のブロック320、322、および第4の命令の2つのアクセスに関連するブロック324、326からなる。
図7Cおよび図7Dと図7Aおよび図7Bとの比較から明らかなように、ベースアドレスオフセットは、データ要素サイズが、図7Aおよび図7Bの例の場合の32ビットではなく、図7Cおよび図7Dの例の場合の16ビットであることに起因して、図7Aおよび図7Bの各ブロック内で4ずつ増加するのとは対照的に、図7Cおよび図7Dの各ブロックで2ずつ増加する。
前述の例では、各命令は2つのアクセスを実行するが、必要に応じて各命令に対して3つ以上のアクセスを実行することができる。例えば、図7Eは、4つのアクセス(それぞれ32ビット連続アクセス)が各命令に関連付けられている一連の代替アクセスパターン330を示している。ここでも同様に、アクセスは、複数のメモリバンク間で分割されることができる。
図7Fおよび7Gは、データ要素サイズが8ビットであるときにVLD2nおよびVLD4n命令に採用することができる例示的なアクセスパターン400、410を示している。したがって、図7Fを考慮すると、第1のVLD2n命令は、第1のアクセス中にブロック402にアクセスさせ、第2のアクセス中にブロック404にアクセスさせる一方で、第2のVLD2n命令は、第1のアクセス中にブロック406にアクセスさせ、第2のアクセス中にブロック408にアクセスさせる。
図7Gは、4つのVLD4n命令の群に対する一連のアクセスパターン410を示している。第1のVLD4n命令は、第1のアクセス中にブロック412にアクセスさせ、第2のアクセス中にブロック414にアクセスさせる一方で、第2のVLD4n命令は、第1のアクセス中にブロック416にアクセスさせ、第2のアクセス中にブロック418にアクセスさせる。同様に、第3のVLD4n命令は、第1のアクセス中にブロック420にアクセスさせ、第2のアクセス中にブロック422にアクセスさせる一方で、最後のVLD4n命令は、第1のアクセス中にブロック424にアクセスさせ、第2のアクセス中にブロック426にアクセスさせる。前述のように、群内のどの命令にどのアクセスパターンが関連付けられているかは、必要に応じて変更することができる。
図7Aから図7Gは、ベクトルロード命令の群に関連して使用されるアクセスパターンを示しているが、対応するベクトルストア命令の群にも同じアクセスパターンを使用することができ、唯一の違いは、データが、メモリからベクトルレジスタに移動するのではなく、ベクトルレジスタからメモリに戻されることである。
図8は、特定の命令によって指定されたパターン識別子と、命令のどのビートが現在処理されているかを識別するビート識別子ビットとを用いてメモリへのアドレスワードオフセットをどのように生成できるか、したがって、どの程度のパターンまでプロセスが到達したかを示す図である。図示の論理は、図7Bに示すメモリアクセスパターンを生成するために使用されるVLD4n命令の群に使用される。2ビットパターンID値505は、ビートIDのビット1とともに、加算器510の入力に供給される。ビートIDのビット0は、経路520を介して出力され、ビートIDのビート1は、経路500を介して出力される。加算器は、経路515を介した出力を生成する。まとめて、出力500、515、520は、図8に示すアドレスワードオフセットを形成し、したがって4ビットアドレスワードオフセットを生成する。そして、その値に4を乗算してバイトアドレスを取得し、次にこれをアクセスする実際のメモリアドレスを識別するためにレジスタRnのベースアドレスに追加する。
例として、図7Bのブロック230および235によって示される特定のパターンの第1および第2のアクセスを考えると、最初の32ビットビートに対して生成されるアドレスワードオフセットは0000であることが理解されるであろう(このバターンの場合、バターンIDは00であると仮定される)。次のビートでは、ビートIDビット0が0から1に変わるため、オフセットは、0001になる。次のビートでは、ビートIDビット0は0に戻るが、ビートIDビット1は、値1に変わる。これは、アドレスワードオフセットを1010にさせ、4倍されると図7Bのブロック235の第1のワードアクセスについて示されるように40のバイトアドレスオフセットを与える。次に、最後のビートに対して、ビートIDビット0は、1に変化して1011のアドレスワードオフセットを与え、ブロック235において最後のワードアクセスに関連する44のバイトアドレスオフセットを識別する。
図8のアドレス生成論理の上記説明は、32ビットデータ要素が処理される図7Bの例を参照しているが、例えば、図7Dまたは図7Gのアクセスパターンを使用するときの16ビットまたは8ビットのデータ要素など、異なるサイズのデータ要素で処理されるVLD4n命令について同じアドレス生成論理を使用することができる。しかしながら、図7Eの代替アクセスパターンが使用された場合、アドレス生成論理は、それに応じて変更される必要があるであろう。
図9は、VLD4n命令の群を実行するときにアクセスされるべきベクトルレジスタ内の特定の部分を識別するために使用することができる論理を示すブロック図である。前述のビート識別ビットおよびパターン識別ビットに加えて、要素識別ビットも提供されるが、これらのビットは、データ要素サイズが32ビット未満の場合にのみ使用される。様々なビートIDおよびパターンIDビットは、図9に示されるゲート535、540、545を使用して論理的に組み合わされる。xレジスタ識別子は、図5の右側から始めて、ベクトルレジスタ内の4つのスカラーレジスタのどれにアクセスするかを識別する。したがって、00のxレジスタ識別子は、ベクトルレジスタの右端のスカラーレジスタを識別し、01のxレジスタ識別子は、左側の次のスカラーレジスタを識別するなどである。yレジスタオフセットビットは、命令によって識別された第1のQレジスタに対するオフセットを識別する。いくつかの命令は、第1のレジスタとしてQ0を指定することができるが、これは必須ではなく、したがって単に例示として、第1のベクトルレジスタは、Q4であり、次にyレジスタオフセットは、Q4に対して図5に示される垂直方向に指定される。x要素オフセットビットは、データ要素サイズが16または8ビットである状況で、識別されたスカラーレジスタのどの部分がアクセスされるかを識別するために使用される。図9からわかるように、サイズ情報は、各マルチプレクサ550、560、570、580への制御入力として提供され、データ要素サイズが32ビットのとき、両マルチプレクサ570、580からの出力は、論理0の値であるため、x要素オフセットは、影響を受けない。16ビットデータ要素の場合、x要素オフセットビット0は、マルチプレクサ580の出力によって制御され、x要素オフセットビット1は、マルチプレクサ570からの出力によって0に固定される。しかしながら、8ビットデータ要素の場合、マルチプレクサ570、580の両方は、それらの最も低い入力に依存して出力を生成するので、x要素オフセット値の両方のビットが使用される。
先の議論から明らかになるように、パターンID値は、特定の命令のオペコードによって効果的に特定される。ビートIDおよび要素ID情報は、様々な方法で維持されることができ、例えば、各並べ替え命令を実行するときにLSU25によって参照されるローカルカウンタに維持されることができる。
図9の論理は、異なるサイズのデータ要素、例えば図7B、図7Dまたは図7Gのアクセスパターンを使用するときにはそれぞれ32ビット、16ビットまたは8ビットのデータ要素で動作するVLD4n命令に使用することができる。しかしながら、図7Eの代替アクセスパターンを使用した場合は、それに応じて図9の論理を変更する必要がある。
図10は、メモリからのデータをデインターリーブし(例えば、左右オーディオチャンネル)、そのデータに対して積和演算を実行するいくつかの例示的なコードを示している。図からわかるように、VLD2n命令は、2つの命令からなる群として配置され、その群は、図10に示すコードのセクションで2回実行される。図の右側部分に示されているように、これらの新しい並べ替え命令の群は、メモリインターフェースと積和演算ハードウェアの両方を、機能停止なしに100%の時間ビジー状態に保つことを可能にする。図示の例では、1ティックあたり2ビートの配置が使用され、したがって、各VLD命令は、適切な積和命令と重複されることができ、それら2つの命令は、ベクトルレジスタの異なるセクションにアクセスする。
図11Aから図11Dは、2つのストライド(2つのベクトル命令が群を形成するように配置されている場合)および4つのストライド(4つのベクトル命令が群を形成するように配置されている場合)について、一実施形態で提供されることができるベクトルロード命令およびベクトルストア命令の特定の符号化を示している。まず、図11AのVLD2n命令を考えると、各VLD2n命令が実行されると、2つの64ビット連続データブロックがメモリからロードされ、2つの宛先レジスタの一部に書き込まれる。書き込まれる宛先レジスタの部分、およびベースアドレスレジスタからのオフセットは、「pat」パラメータによって決定される。命令が同じベースアドレスと宛先レジスタで2回実行されたが、異なる「pat」値を有する場合、その効果は、メモリからデータをロードし、2のストライドで指定されたレジスタにデインターリーブすることである。ベースアドレスレジスタは、32バイトのデータが処理されたことを示し且つVLD2n命令の次の群に備えてベースレジスタ内のポインタを更新するために、群内の第2の命令の実行時に必要に応じて32だけインクリメントされることができる。
図11BのVLD4n命令を考えると、そのような命令が実行されるたびに、それはまたメモリから2つの64ビット連続データブロックをロードするが、この場合、4つの宛先レジスタの一部にデータを書き込む。書き込まれる宛先レジスタの部分、およびベースアドレスレジスタからのオフセットは、「pat」パラメータによって決定される。命令が同じベースアドレスと宛先レジスタで4回実行されたが、異なる「pat」値を有する場合、その効果は、メモリからデータをロードし、4のストライドで指定されたレジスタにデインターリーブすることである。ベースアドレスレジスタは、群内の最後の命令の実行時に必要に応じて64だけインクリメントされることによって、64バイトのデータが処理されたことを示すことができる。
図11Cのベクトルストア命令(VST2)を考えると、この命令が実行されるたびに、それは2つのソースレジスタの複数の部分からなるメモリに2つの64ビット連続データブロックを保存する。ソースレジスタから読み出される部分、およびベースアドレスレジスタからのオフセットは、「pat」パラメータによって決定される。命令が同じベースアドレスとソースレジスタで2回実行されたが、異なる「pat」値を有する場合、その効果は、指定されたレジスタからのデータを2のストライドでインターリーブし、結果のデータをメモリに保存することである。ベースアドレスレジスタは、必要に応じて32だけインクリメントされることができる。
図11DのVST4命令を考えると、これも同様に、実行されるたびに2つの64ビット連続データブロックをメモリに保存し、この場合、連続ブロックは、4つのソースレジスタの複数部分からのデータから構成される。ソースレジスタから読み出される部分、およびベースアドレスレジスタからのオフセットは、「pat」パラメータによって決定される。命令が同じベースアドレスレジスタとソースレジスタで4回実行されたが、異なる「pat」値を有する場合、その効果は、指定されたレジスタのデータ要素を4のストライドでインターリーブし、結果のデータをメモリに保存することである。ベースアドレスレジスタは、必要に応じて64だけインクリメントされることができる。
図12は、群の前述の並べ替え命令を含む一連のプログラム命令を復号するときの復号器6の動作を示すフロー図である。ステップ650において、現在の命令が分析され、その後、ステップ655において、その命令が群の並べ替え命令であるかどうかが判定される。そうでなければ、ステップ660において、関連する実行ユニットに対する制御信号を生成するために命令に関して標準的な復号動作が実行され、その後、ステップ665において、復号器は、次の命令に移動した後、ステップ650に戻る。
ステップ655において、分析中の現在の命令が群の並べ替え命令であると判定された場合、ステップ670において、その群のどのメンバの命令であるかが識別され、これは、前述の「pat」値を参照することによって達成される。その後、ステップ675において、命令が群のどのメンバであるかに応じてデータ要素アクセスパターン指示が生成され、ステップ680において、データ要素アクセスパターンインジケータを含むロードストアユニットの制御信号を生成するために残りの復号動作が実行される。
一実施形態では、図8および図9の先の説明から理解されるように、ステップ675において生成されたデータ要素アクセスパターンインジケータは、LSUにより命令オペコードから抽出された「pat」ビットによって効果的に単に形成されることができ、そして、適切なメモリアクセスおよびレジスタアクセスパターンを生成するために、ビート識別子(および必要に応じて要素識別子情報)と組み合わせてこの情報を使用する。
ステップ680に続いて、プロセスは、ステップ665を介してステップ650に戻る。
前述のように、群内の1つ以上の命令は、指定されたベースアドレスレジスタ内のベースアドレスを更新するように構成されることができる。特定の一実施形態では、群内の最後の命令がベースアドレスレジスタの更新を実行するために使用され、ベースアドレス値が更新される量は、群内の並べ替え命令によって実行される全てのアクセスを考慮する。
必要に応じて、そのようなロードまたはストア命令を実行するときに実行される動作はまた、データ拡大またはデータ縮小機能を含むように拡張されることもできる。これは、データがベクトルレジスタ内に格納されている形式とは異なる形式でメモリに格納されている場合に有用であり得る。例えば、それは、ベクトルレジスタ内にあるよりも切り捨てられた形式でメモリに格納されてもよい。図13は、データがメモリからベクトルレジスタにロードされるときにデータ拡大を実行しようとするときに実行されることができる一連のステップを示している。特に、群内の各並べ替え命令を実行するときに実行されるメモリへの各アクセス中に、図13のプロセスを実行することができる。ステップ700において、関連データ要素がメモリ位置から取得され、各データ要素が第1のサイズを有する。次に、ステップ705において、第2のサイズのデータ要素を生成するために、それらのデータ要素に対して(例えば、メモリから取得された値をゼロ拡張または符号拡張することによって)データ拡大動作が実行される。
次に、ステップ710において、書き込まれるべきベクトルレジスタ部分がデータ要素アクセスパターン情報(および図9を参照して前述したようにビート情報など)から決定され、次にステップ715において、拡大されたデータ要素がベクトルレジスタの識別された部分に書き込まれる。
必要に応じて同等のデータ絞り込み機能を実行することができ、取得されたデータをゼロまたは符号拡張する代わりに、取得されたデータ要素の切り捨てが実行されることを理解されたい。一実施形態では、データは、メモリからベクトルレジスタに取り出されるときに拡大され、ベクトルレジスタからメモリに戻されるときに縮小されるが、代替実施形態では、データは、メモリから取り出されるときに縮小され、メモリに戻されるときに拡大されてもよい。
必要に応じて、アクセスされたアドレス範囲内の1つ以上のデータ構造を処理から除外させるように、一群の並べ替え命令が述語情報によって限定されることができる。図7Aから図7Gに先に示したアクセスパターンから明らかなように、1つ以上のデータ構造を処理から除外しようとするときに、これが群内の任意の個々の命令に対して実行される処理に何らかの影響を与えるかどうかに関する決定は、アクセスパターンに依存する。例えば、アクセスパターンが図7Bに示される形式を取り得るVLD4n命令群を考え、第2のレーンに配置されるべきデータ構造を処理から除外することが決定される場合、これは、ブロック250に関連するアクセスを実行するVLD4n命令の第1のアクセスおよびブロック260に関連するVLD4n命令の第1のアクセスに影響を与えることがわかる。しかしながら、他のVLD4n命令は、正常に実行されることができる。
一実施形態では、図14Aに示すような述語レジスタ750を使用して述語値を指定することができる。一実施形態では、これは、16ビットレジスタとすることができ、述語レジスタのどのビットが使用されるかは、データ要素のサイズに依存する。例えば、ベクトルレジスタが128ビット幅であり、データ要素が32ビットサイズである場合、ベクトルレジスタあたり4つのデータ要素があり、LSUは、述語情報の評価時に述語レジスタ750の4ビットごとにのみ参照するように構成されることができる。同様に、16ビットデータ要素については、それは1ビットおきに見るように構成されることができる一方で、8ビットデータ要素については、それは述語レジスタの全てのビットを見るように構成されることができる。これは、LSUによって参照されることを要求される述語情報を実装する方法の単なる例であり、述語情報を表現する他の方法が使用されてもよいことが理解されるであろう。
図14Bは、群内の各並べ替え命令の実行中に述語情報がどのように使用されるかを概略的に示すフロー図である。ステップ760において、現在の命令が述語付きであるかどうかが判定される。一実施形態では、述語レジスタ750を設定するために別個の命令が使用され、一実施形態では、その命令はまた、後続の「M」個の命令が記載されるべきであることを識別する。したがって、一例として、そのような命令は、VLD4n命令の群の前に実行されてもよく、4つのVLD4n命令のそれらの群が記載されるべきであることを識別する。
現在の命令が記載されないことが決定されると、プロセスは、ステップ775に進み、そこで、LSUは、必要なロードまたはストア動作および関連する並べ替えを実行するために必要なデータ要素にアクセスするためにメモリへの1つ以上のアクセスを実行する。
しかしながら、ステップ760において現在の命令が記載されると判定された場合、ステップ765において、命令によって処理されているデータ要素サイズに応じて、述語レジスタのどのビットを使用するかが決定される。その後、ステップ770において、関連する述語ビットが現在の命令に関連したアクセスパターン情報とともに分析され、命令を実行するために必要とされるアクセスに対する述語ビットの効果があればそれを決定する。図7Bを参照して説明した上述の例をとると、これは、ブロック250へのアクセスを実行するVLD4n命令が実行されると、その第1のアクセスが必要ではないと判定し、同様に、ブロック260へのアクセスを実行するVLD4n命令が実行されると、その第1のアクセスが必要ではないと判定し、述語情報が第2のレーンに関連するデータ構造の処理から除外しようとしていると仮定することを意味する。
ステップ770における分析に続いて、ステップ775において、必要なデータ要素にアクセスするためにメモリへの1つ以上のアクセスが実行される。言うまでもなく、述語情報は、原則として、1つ以上の並べ替え命令についてアクセスを実行する必要がないことを意味することができ、したがって、これらの例では、ステップ775においてアクセスは実行されないことになる。
上述の実施形態から、ベクトルロード命令およびストア命令を使用して並べ替え動作(インターリーブ演算およびデインターリーブ演算など)を実行しようとするとき、必要な並べ替え動作を実行するために群に配置された複数の別々の命令を使用することによって処理を改善できることが理解されよう。特に、そのようなアプローチは、ロード命令またはストア命令を実行するときに停止サイクルが導入される可能性を大幅に低減することができる。さらに、各命令に関連するアクセスパターンを適切に配置することによって、命令をメモリと算術命令との重複実行を可能にするアーキテクチャと互換性を持たせることができ、したがって性能がさらに向上する。前述のアプローチを採用することによって、命令を容易に実行することができ、メモリサブシステムを効率的に使用することが可能になる。
以下の実施形態は、ベクトルレジスタのセットにアクセスするための新規な構成を説明する。そのようなアプローチは、様々な状況で有用であり得る。一例として、それは、前述の様々なデータ要素アクセスパターンの使用を容易にすることができる。
図15は、一実施形態にかかる書き込みアクセス回路を有するベクトルレジスタファイル800の一部を概略的に示している。ベクトルレジスタファイル800は、多数のベクトルレジスタから構成され、各ベクトルレジスタは、多数のスカラーレジスタから構成されている。図15に示される実施形態では、ベクトルレジスタファイル800の一部は、図15内の行として表される4つのベクトルレジスタ805、810、815、820の一部を示している。各ベクトルレジスタ805、810、815、820は、いくつかのスカラーレジスタを使用することによってベクトルを格納する。例えば、第1のベクトルレジスタ805は、2つのスカラーレジスタ−s0およびs1から部分的に構成される一方で、第2のベクトルレジスタ810は、2つの他のスカラーレジスタ−s4およびs5から部分的に構成されている。ベクトルレジスタファイル800に加えて、(レジスタアクセス回路の一例である)書き込みアクセス回路830が提供される。書き込みアクセス回路は、第1のアクセスブロック835と第2のアクセスブロック840とを含み、図24を参照してより詳細に説明される。各アクセスブロックは、一度にベクトルの一部にアクセスすることができる。したがって、同時にアクセスされる(例えば書き込まれる)ことができるデータ量は制限される。特に、第1のアクセスブロック835と第2のアクセスブロック840で同時に提供されるベクトルレジスタファイル800に同時にデータを書き込むことのみが可能である。この例では、便宜上、1つの部分がスカラーレジスタと同じサイズであると仮定される。図15の実施形態では、レジスタファイル800の一部は、2つの列845、850を含む。各列は、各ベクトルの同じ部分を格納する。この例では、部分サイズは、スカラーレジスタサイズと同じであるため、列は、スカラーレジスタs0、s1、s4、s5、s8、s9、s12、s13と整列する。
図15に示すように、スカラーレジスタは、2つのポート835、840のうちの一方に配線されている。図15の例では、スカラーレジスタs0、s5、s8、およびs13は、第1のアクセスブロック835に配線されているのに対し、スカラーレジスタs1、s4、s9、およびs12は、第2のアクセスブロック840に配線されている。概略的な観点から、図15を参照して示される配線は、多数のねじれを含むことが理解されるであろう。換言すれば、互いの上または下にある全てのスカラーレジスタを同じポートに単に配線するだけではなく、配線の論理的なねじれが発生する。このようにして、書き込みアクセス回路が、スカラーレジスタs0およびs1など、行内にあるスカラーレジスタ(すなわち、同じベクトルレジスタの一部)に同時に書き込むことが可能である。同じ書き込みアクセス回路はまた、スカラーレジスタs0およびs4などの同じ列にあるスカラーレジスタに同時に書き込むこともできる。これは、一対のスカラーレジスタs0およびs4、ならびに一対のスカラーレジスタs0およびs1が異なるポート835、840に配線されているためである。なお、ここでは配線のツイストについて言及しているが、実際には配線が物理的にねじれている必要はない。スカラーレジスタ自体は、配線がまっすぐになるように(同じ論理識別子/アドレスをリネームしながら)物理的に並べ替えることができ、同じ効果を生み出すことができることを理解されたい。
同様の概念が、図16に示すようなレジスタアクセス回路の他の例である読み取りアクセス回路855にもあてはまる。この例では、読み取りアクセス回路855はまた、第1のアクセスブロック860および第2のアクセスブロック865を有する。スカラーレジスタのうちのいくつか−s0、s5、s8、およびs13は、第1のアクセスブロック860に接続される一方で、他のもの−s1、s4、s9、およびs12は、第2のアクセスブロック865に接続される。したがって、スカラーレジスタのうちの2つに同時にアクセスする(例えば、そこから読み取る)ことができ、ねじれ配線によって、レジスタs4およびs5などのベクトルレジスタ805、810、815、820のうちの1つからの2つのレジスタ、またはレジスタs4およびs8などの同じ列にある2つのレジスタのいずれかを読み取ることが可能である。これは、同じ列にあるレジスタが、それらが接続されているアクセスブロックを交互に配置し、また各列のレジスタが、それらが接続されているアクセスブロックを交互に配置しているためである。図15および図16に示す実施形態では、配線は同様の方法で示されているが、図15の書き込みアクセス回路830および図16の読み取りアクセス回路855に関して異なる物理的ワイヤが使用されていることに留意されたい。しかしながら、これは必須ではなく、他の実施形態は、書き込みアクセス回路830および読み取りアクセス回路855の両方に全く同じ配線を使用することができる。
図17は、一実施形態にかかる書き込みアクセス回路を有するベクトルレジスタファイル800を概略的に示している。ベクトルレジスタファイル800は、第1の書き込みアクセス回路880を有する第1のセクション870と、第2の書き込みアクセス回路885を有する第2のセクション875とからなる。書き込み回路880、885のそれぞれは、その関連するセクションの一部である列内の部分にのみアクセスする。例えば、第1の書き込みアクセス回路880は、第1のセクション870の列内の部分にのみアクセスする一方で、第2の書き込みアクセス回路885は、第2のセクション875の列内の部分にのみアクセスする。したがって、ねじれがセクションの境界を横切って延在しないことが理解されるであろう。
図18は、第1の読み取りアクセス回路890および第2の読み取りアクセス回路895を有するベクトルレジスタファイル800を概略的に示している。図17に示す実施形態の場合のように、第1の読み取りアクセス回路890は、第1のセクション870内の列内の部分にアクセスし、第2の読み取りアクセス回路895は、第2のセクション875内の列内の部分にアクセスする。
図19Aは、ベクトルレジスタファイル内の単一のねじれの例を示しており、ベクトルレジスタファイルは、ワードを示すテキスト形式で示されている。図19Aの例では、各ベクトルは、4列にわたって広がる4つの部分を含む。前と同様に、各列は、各ベクトルの同じ部分を格納する。しかしながら、ラベルA、B、C、およびDは、同じポートを介してアクセスされる部分を示すために提供されている。したがって、Q0からQ7までベクトルレジスタを通って上方に進むときにAとラベリングされた円で囲まれた部分が第3列と第4列との間でどのように交互に交替するかがわかる。各部分のパターンは、2、すなわち2列にわたって分布しているため、ベクトルレジスタファイルは、単一ねじれを有すると言われる。
図19Bは、ベクトルレジスタファイル内の単一ねじれの例を示しており、ベクトルレジスタファイルは、バイトを示すテキスト形式で示されている。図19Bは、図19Bがベクトルレジスタファイルをバイト形式で示している以外は図19Aに対応する。特に、各ワードは、4バイトから構成されている(すなわち、各ワードは32ビットである)ことが示されている。各ワードを構成する4バイトは、各ラベルの末尾に番号付きの添え字を追加することによって示されている。例えば、Aとラベリングされたワードは、A0、A1、A2、およびA3とラベリングされたバイトから構成されている。ここでも同様に、単一ねじれパターンは、Aというワードを構成する全てのバイトを取り巻くことによって示されている。また、パターンは、2列にわたって分散していることがわかる。
場合によっては、ベクタレジスタファイルに対してより広い範囲のアクセスパターンを指定する必要がある。例えば、ベクトルがそれぞれ16ビットの8つのデータ要素を含む場合、各ベクトルは128ビットになる。したがって、2つのセクションの場合、各セクションは64ビットになる。したがって、各ベクトルの各アクセス部分は、16ビットである必要があるため、各セクションに64/16=4列が設けられる必要がある。同じ列からの部分に同時にアクセスし、同じ回路が同じ商レジスタからの部分に同時にアクセスできるようにするために、2回以上のねじれを与える必要がある。特に、第2の32ビットねじれパターン内に入れ子にされた第1の16ビットねじれパターンを提供することが必要であろう。
図20は、そのようなパターンの1つを示しており、図19Bに示される合計4列(セクションあたり2)とは対照的に合計8列(セクションあたり4)を使用するが、便宜上、図19Bと同じラベリングを使用する。図20の例は、楕円を含む第1の32ビットのねじれパターンを示しており、A個の要素全てを包含し、1+2列と3+4列を交互に繰り返す。16ビットねじれパターン(長方形で表示)は、より複雑であり、読み取りまたは書き込みアクセス回路のポートの1つに行われる接続を表している。特に、各楕円内の2対の列に対して、アクセス回路は、2つのベクトルレジスタごとに左対と右対を接続することを交互に繰り返す。例えば、ベクトルレジスタQ0では、右楕円の右対が接続されている。これは、さらに2つのベクトルレジスタの後に(すなわち、ベクトルレジスタQ2において)右楕円の左対と交番する。さらに2つのレジスタの後に(すなわち、ベクトルレジスタQ4において)、右楕円の右対が再びアクセスされる。同様のパターンが左楕円に関しても発生する。特に、ベクトルレジスタQ1では、左楕円の右対が接続され、左楕円の左対が接続されるように、これはさらに2つのレジスタの後に(すなわち、ベクトルレジスタQ3において)交番する。この場合もやはり、これは、さらに2つのベクトルレジスタの後に(すなわち、ベクトルレジスタQ5において)左楕円の右対に戻る。別の見方をすると、列1、3、2、および4(列を右から左に数える)は、アクセス回路のポートの1つによってベクトルレジスタQ0からQ3にわたってアクセスされる。換言すれば、アクセスブロックは、各ベクトルレジスタQ0からQ3にわたって各セクション内の異なる列にアクセスする。ベクトルレジスタQ3の後、パターンは繰り返される。
セクション内の各列について、配線パターンが繰り返される前に「通過」しなければならないベクトルレジスタの数は、列数に等しいことが理解されよう。
図20において、「ねじれサイズ」、すなわち、ねじれの影響を受ける部分のサイズがデータ要素サイズと異なり得ることも明らかであることに留意されたい。これは、特定の配線の配置でベクトルレジスタファイルを作成すると、発生する可能性のあるねじれの程度(および列数)が固定されるためである。その時点で、ベクトルレジスタファイルは、データ要素のサイズに依存しなくなる。特に、図20の場合のように、部分サイズが16ビットである場合、図20の場合と同様に、同じレジスタファイルを使用して16ビットデータ要素または32ビットデータ要素を格納することができる。
図21は、一実施形態にしたがって回路が二重ねじれを実行するベクトルレジスタファイル900の1つのセクションを概略的に示している。例えば、図21の概略図は、図20に示す二重ねじれパターンに対応することができる。図21に示す実施形態では、ベクトルレジスタは、それぞれ32ビットの複数のスカラーレジスタs0、s1、s4、s5、s8、s9、s12、s13からなる。しかしながら、各部分のサイズは、16ビットである。その結果、各スカラーレジスタは、2つの部分を格納し、図21に示されるセクションは、4列を含む。図21に示される実施形態は、4つの異なる様式の線905、910、915、920を示している。線905、910、915、920のそれぞれは、配線、またはアクセス回路の同じアクセスブロックに接続されている部分を表す。ライン905のうちの1つが図20に関して示された接続パターンに対応することに留意されたい。その特定のラインは、それぞれ、ベクトルレジスタQ0、Q1、Q2、およびQ3(下から上へ)の列1、3、2、および4(右から左へ)に接続する。図21の最上のベクトルレジスタ(Q3)の上方に示すように、4つのベクトルレジスタの後、各ラインのアクセスパターンは、それ自体を繰り返す。
同時にアクセスする必要のないベクトルレジスタのこれらの部分をレジスタアクセス回路の同じアクセスブロックに配線することにより、行または列の部分に同時にアクセスすることを可能にするために、単一ねじれパターンおよび二重ねじれパターンをどのように実現できるかが示されている。しかしながら、入れ子にされたねじれパターンの概念は、無限に拡張することができる。例えば、第3のレベルの入れ子にされたねじれを追加することによって−部分/列の数を2倍にすることによって、列または行内の単一セクション内の2=8個の8ビット部分に同時にアクセスすることが可能である。
図22は、一実施形態にかかる、ねじれを実行するプロセスを任意の回数だけ入れ子状にねじることを実行するために一般化することができる方法を示す図である。図22は、レジスタファイル925の一部を示している。スカラーレジスタs0、s1、s2、およびs3を含む単一のベクトルレジスタ930が示されている。レジスタファイルは、それぞれ8列を含む2つのセクション935、940を含む。しかしながら、同じ原則を単一のセクションに適用することができる。列は入れ子構造で論理的にグループ化されていると考えることができる。入れ子状構造は、log(N)レベルを有し、Nはセクション内の列数である。したがって、この場合、入れ子状構造は、log(8)=3レベルの945、950、955を有する。レベル数はまた、入れ子の深さにも対応する。したがって、この特定の例では、入れ子は、3レベルの深さになる。第1のレベル945では、N=8の列が少なくとも1つの列の第1のセット980と少なくとも1つの列の第2のセット985との間で等しく分割される。ともに、これらは、第1のレベル945で組み合わされた群980、985を形成する。各親レベル(例えば、第2のレベル950)の各セットは、対応する子レベル(例えば、第3のレベル955)について、少なくとも1つの列の第1のセットと少なくとも1つの列の第2のセットに等しく分割される。例えば、図22では、親レベル950において、少なくとも1つの列の組970のうちの1つが、子レベル955内の少なくとも1つの列の第1のセット960および少なくとも1つの列の第2のセット965に分割される。所与のレベルLにおける組み合わせ群の数は、2に等しい。したがって、親レベルの他のセットにも同じ分割プロセスがあてはまる。
当然のことながら、レベル945、950、および955は、完全に概念的であり、列を次第に大きくなる(または次第に小さくなる)セットにグループ化する目的で単に使用されるにすぎない。
この構造が適切に配置されていると、アクセス回路(次の図で説明)のアクセスブロックとベクタレジスタの様々な部分との間の配線を記述することができる。各アクセスブロックは、各ベクトルレジスタに対して1つの列にアクセスするように構成されている。そのアクセスブロック/ベクトルレジスタの組み合わせについて訪問される1つの列は、各レベルにおいて、同数のベクトルレジスタに対して、少なくとも1つの列の第2のセットを訪問する前に少なくとも1つの列の第1のセットが所定数のベクトルレジスタの半分について訪問されるという要件または制約によって一意的に識別可能である。所定数は2に等しく、Xは、各レベルで異なり、1からlog(N)の範囲内である。したがって、所定数は、2−8の範囲内である。したがって、各アクセスブロックは、例えば、第2のセット985内の同数の列を訪問する前に、第1のセット980内の1−4列を訪問する。同じことが、第2のレベル950における2つの第1のセットおよび2つの第2のセット、ならびに第3のレベル955における4つの第1のセットおよび4つの第2のセットにもあてはまる。
図22に示されている組み合わせ群970、975は、第1のセットの列970および第2のセットの列975から構成され、入れ子状構造の第2のレベルで発生する。したがって、一例では、4つのベクトルレジスタにわたって、1つのアクセスブロックが列960にアクセスし、続いて列965にアクセスし、続いて組み合わせ群975内の2つの列にアクセスすることができる。第2の例では、1つのアクセスブロックが列960にアクセスし、続いて組み合わせ群975内の列のうちの1つ、続いて列965、続いて組み合わせ群975内の他の列にアクセスすることができる。各列は、単一のベクトルレジスタに対する単一のアクセスブロックによってのみ訪問されるので、第1の例では、別のアクセスブロックが組み合わせ群975内の2つの異なる列にアクセスし、その後に列960が続き、次に列965が続く。
配線の一例では、セクション内の各アクセスブロックは、第1のセットからの列を訪問し、別の2M−1個のベクトルレジスタ内で対応する第2のセットからの列を訪問し、Mは所与のレベルである。例えば、第1のアクセスブロックが、21−1=1個のベクトルレジスタ内の第1のレベル945の第1のセット980からの列を訪問するとき、第1のレベル945の対応する第2のセット985内の列が訪問される。換言すれば、各ベクトルレジスタにわたって、アクセスブロックは、第1のセット980および第2のセット985の列の間で交番する。同様に、第2のレベル950において、22−1=2ベクトルレジスタ内の第1のセット970内の列を訪問した後、対応する第2のセット975内の列が訪問されることになる。
したがって、任意の深さの入れ子に対して配線パターンをどのように生成できるかがわかる。
図23は、一実施形態にかかるレジスタアクセス回路の例としての読み取りアクセス回路または読み取りポートを概略的に示している。図23に示す実施形態では、読み取りアクセス回路は、第1のセクションに4つのアクセスブロック990、995、1000、1005を備え、第2のセクションに代替アクセスブロック990’、995’、1000’、1005’を備える。各アクセスブロックは、マルチプレクサとして実装されている。セクションごとに4つのアクセスブロックが存在することは、そのような回路がセクション内に4つの列がある場合に使用されることを示している。換言すれば、そのような回路は、図21に示されるレジスタファイル900のように、二重入れ子が発生するところで使用されるであろう。セクション内の各アクセスブロックは、前述のようにそのセクション内のベクトルレジスタを横切って複数の部分に接続されている。ねじれが生じる場合、部分が出力される順序は、逆にされることができることが理解されるであろう。例えば、図18を参照すると、ベクトルレジスタQ0にアクセスするとき、部分は、s3、s2、s1、s0の順序(すなわち降順)で出てくる。しかしながら、ベクトルレジスタQ1にアクセスするとき、部分は、s6、s7、s4、s5の順序(非降順)で出てくる。これを修正するために、(並べ替え回路の例である)クロスバーマルチプレクサ1010が各セクションに設けられ、そのセクションのアクセスブロック990、995、1000、1005の出力を並べ替えることができる。そして、クロスバーマルチプレクサ1010からの出力は、さらなるマルチプレクサ1015の両方に供給され、スカラー値を提供することを可能にする。出力はまた、ともに併合されて群読み取りポートに供給され、4つの選択された値の全て(すなわち、列または行から)を読み取ることを可能にする。
図24は、一実施形態にかかるレジスタアクセス回路の例としての書き込みアクセス回路を概略的に示している。図23に示される読み取り回路と同様に、図24に示される書き込み回路は、部分の並べ替えに関して同様の問題を有する。特に、部分は、1つの順序でベクトルレジスタファイル900に供給されてもよいが、前述の配線の結果として並べ替えられなければならない場合がある。これを補償するために、ベクトルレジスタファイル900に書き込まれる前に入力を並べ替えるために、クロスバーマルチプレクサ1020(並べ替え回路の例)が設けられる。
図25は、一実施形態にかかる製造方法を示すフローチャート1025である。第1のステップ1030において、ベクトルレジスタのセットが提供される。各ベクトルレジスタは、複数の部分を含むベクトルを格納するように構成される。第2のステップ1035において、ベクトルレジスタの各セクションに対するレジスタアクセス回路が提供される。第3のステップ1040において、各アクセスブロックは、ベクトルレジスタのうちの1つにアクセスするときに他のベクトルレジスタのうちの少なくとも1つにアクセスするときとは異なる列内のベクトルレジスタの部分にアクセスするように構成される。その結果、レジスタアクセス回路は、ベクトルレジスタまたは列内のベクトルレジスタの一部に同時にアクセスするように構成される。
図26は、使用されることができる仮想マシン実装を示している。前述の実施形態は、関連する技術をサポートする特定の処理ハードウェアを動作させるための装置および方法に関して本発明を実施するが、ハードウェア装置のいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム1300をサポートするホストオペレーティングシステム1400を実行しているホストプロセッサ1500上で実行される。通常、大規模で強力なプロセッサは、妥当な速度で実行する仮想マシンの実装を提供する必要がありますが、互換性や再利用の理由のために別のプロセッサにネイティブなコードを実行したい場合など、特定の状況では、そのようなアプローチは妥当である。仮想マシンプログラム1300は、仮想マシンプログラム1300によってモデル化されている装置である実際のハードウェアによって提供されるであろうハードウェアインターフェースと同じである仮想ハードウェアインターフェースをゲストプログラム1200に提供する。したがって、上述の並べ替え命令を含むプログラム命令は、仮想マシンハードウェアとのそれらの相互作用をモデル化するために仮想マシンプログラム1300を使用してゲストプログラム1200内から実行されてもよい。ゲストプログラム1200は、ベアメタルプログラムでもよく、あるいはホストOS1400が仮想マシンアプリケーション1300を実行するのと同様の方法でアプリケーションを実行するゲストオペレーティングシステムであってもよい。異なる種類の仮想マシンが存在し、いくつかの種類では、仮想マシンは、ホストOS1400を必要とせずにホストハードウェア1500上で直接動作することも理解されよう。
本出願において、「・・・ように構成された」という用語は、装置の要素が定義された動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」は、ハードウェアまたはソフトウェアの相互接続の構成または方法を意味する。例えば、装置は、定義された動作を提供する専用のハードウェアを有することができ、またはプロセッサまたは他の処理装置が機能を実行するようにプログラムされることができる。「ように構成された」は、定義された動作を提供するために装置要素が何らかの方法で変更される必要があることを意味しない。
本発明の例示的な実施形態が添付図面を参照して詳細に説明されたが、本発明は、これらの厳密な実施形態に限定されるものではなく、当業者であれば、添付の特許請求の範囲によって定義される本発明の範囲および趣旨から逸脱することなく、様々な変形、追加および変更を行うことができることが理解されるべきである。例えば、従属請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴によって行うことができる。

Claims (20)

  1. それぞれが複数の部分を含むベクトルを記憶するように構成されたベクトルレジスタのセットであって、各列が各ベクトルの同じ部分を記憶するように配置された論理的に複数の列に分割された前記ベクトルレジスタのセットと、
    各アクセスブロックが前記ベクトルレジスタのうちの1つにアクセスするときに前記ベクトルレジスタのうちの他の少なくとも1つにアクセスするときとは異なる列内の部分にアクセスするように構成された複数のアクセスブロックを含むレジスタアクセス回路とを備え、
    前記レジスタアクセス回路が、前記ベクトルレジスタおよび前記列のうちのいずれか1つの複数の部分に同時にアクセスするように構成される、装置。
  2. 前記ベクトルレジスタのセットが、少なくとも1つのセクションを備え、各セクションが、異なる列を含み、
    前記装置が、各セクションについてのレジスタアクセス回路を備え、各レジスタアクセス回路が、そのレジスタアクセス回路に関連する前記セクション内の部分にアクセスするように構成される、
    請求項1に記載の装置。
  3. 各アクセスブロックが、前記ベクトルレジスタのうちの1つにアクセスするとき、各セクション内に含まれる列の数から1を引いた数に等しいいくつかの他の前記ベクトルレジスタにアクセスするときとは異なる列内の部分にアクセスするように構成される、
    請求項2に記載の装置。
  4. 第1のアクセスブロックが、第1のベクトルレジスタの第1の列にアクセスし、第2のベクトルレジスタの第2の列にアクセスするように構成され、第2のアクセスブロックは、前記第1のベクトルレジスタの第2の列にアクセスし、前記第2のベクトルレジスタの第1の列にアクセスするように構成される、
    請求項1〜3のうちいずれか一項に記載の装置。
  5. 各セクションが、N列に論理的に分割され、
    前記N列が、log(N)個のレベルを有する入れ子状構造に論理的に配置され、Nが4以上であり、2の整数乗であり、
    第1のレベルでは、前記N列が、前記第1のレベルについての少なくとも1列の第1のセットと前記第1のレベルについての少なくとも1列の第2のセットとの間で等しく分割され、
    各親レベル内の少なくとも1つの列のセットのそれぞれが、対応する子レベルについての少なくとも1つの列の第1のセットおよびその対応する子レベルについての少なくとも1つの列の第2のセットに再度等しく分割され、
    各アクセスブロックが、各ベクトルレジスタについて1つの列を訪問するように構成され、前記1つの列が、各レベルについて、所定数のベクトルレジスタの半分についての少なくとも1つの列の第2のセットを訪問する前に、前記所定数のベクトルレジスタの半分についての少なくとも1つの列の第1のセットを訪問する制約によって一意的に識別され、
    前記所定数が2に等しく、前記Xが各レベルで異なり、1からlog(N)の範囲内である、
    請求項2または請求項3に記載の装置。
  6. 前記ベクトルレジスタのセットが、2つのセクションを含み、
    Nが4の値を有する、
    請求項5に記載の装置。
  7. 前記レジスタアクセス回路が、前記ベクトルレジスタに記憶されているデータ要素を出力するための読み取りアクセス回路を備え、
    前記レジスタアクセス回路が、前記データ要素を前記ベクトルレジスタに入力するための書き込みアクセス回路を備える、
    請求項1〜6のうちいずれか一項に記載の装置。
  8. 前記読み取りアクセス回路が、複数の列のそれぞれに対して1つのアクセスブロックを備える、
    請求項7に記載の装置。
  9. 前記読み取りアクセス回路が、複数の列のそれぞれに対して最大で1つのアクセスブロックを備える、
    請求項7または請求項8に記載の装置。
  10. 前記読み取りアクセス回路内の前記アクセスブロックがマルチプレクサを備える、
    請求項7〜9のうちいずれか一項に記載の装置。
  11. 前記ベクトルレジスタのセットが、少なくとも1つのセクションを含み、各セクションが異なる列を含み、
    前記装置が、各セクションについてのレジスタアクセス回路を備え、各レジスタアクセス回路が、そのレジスタアクセス回路に関連するセクション内の部分にアクセスするように構成され、
    各セクションについて、前記読み取りアクセス回路が、前記読み取りアクセス回路内の各アクセスブロックからの出力を並べ替えるための並べ替え回路を備える、
    請求項7〜10のうちいずれか一項に記載の装置。
  12. 前記並べ替え回路がクロスバーマルチプレクサである、
    請求項11に記載の装置。
  13. 前記書き込みアクセス回路が、複数の列のそれぞれに対して1つのアクセスブロックを備える、
    請求項7に記載の装置。
  14. 前記書き込みアクセス回路が、複数の列のそれぞれに対して最大で1つのアクセスブロックを備える、
    請求項12または請求項13に記載の装置。
  15. 前記ベクトルレジスタのセットが、少なくとも1つのセクションを含み、各セクションが異なる列を含み、
    前記装置が、各セクションについてのレジスタアクセス回路を備え、各レジスタアクセス回路が、そのレジスタアクセス回路に関連するセクション内の部分にアクセスするように構成され、
    各セクションについて、前記書き込みアクセス回路が、前記書き込みアクセス回路内の各アクセスブロックへの入力を並べ替えるための並べ替え回路を備える、
    請求項13または請求項14に記載の装置。
  16. 前記並べ替え回路がクロスバーマルチプレクサである、
    請求項15に記載の装置。
  17. 前記ベクトルレジスタが128ビットレジスタである、
    請求項1〜16のうちいずれか一項に記載の装置。
  18. 各ベクトルレジスタが複数の32ビットレジスタを備える、
    請求項1〜17のうちいずれか一項に記載の装置。
  19. それぞれが複数の部分を含むベクトルを記憶するように構成されたベクトルレジスタのセットであって、各列が各ベクトルの同じ部分を記憶するように配置された論理的に複数の列に分割された前記ベクトルレジスタのセットを提供することと、
    複数のアクセスブロックを含むレジスタアクセス回路を提供することとを備え、
    各アクセスブロックが前記ベクトルレジスタのうちの1つにアクセスするときに前記ベクトルレジスタのうちの他の少なくとも1つにアクセスするときとは異なる列内の部分にアクセスするように構成され、
    前記レジスタアクセス回路が、前記ベクトルレジスタおよび前記列のうちのいずれか1つの部分に同時にアクセスするように構成される、
    装置を製造する方法。
  20. それぞれが複数の部分を含むベクトルを記憶するベクトルレジスタ手段のセットであって、各列が各ベクトルの同じ部分を記憶するように配置された論理的に複数の列に分割された前記ベクトルレジスタ手段のセットと、
    前記ベクトルレジスタ手段および前記列のうちのいずれか1つの複数の部分に同時にアクセスするレジスタアクセス手段であって、前記ベクトルレジスタ手段のうちの1つにアクセスするときに前記ベクトルレジスタ手段のうちの他の少なくとも1つにアクセスするときとは異なる列内の部分にアクセスする複数のアクセスブロック手段を含む前記レジスタアクセス手段と
    を備える、装置。
JP2018568728A 2016-07-08 2017-06-15 ベクトルレジスタのアクセス Active JP7213095B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2022004904A JP2022062067A (ja) 2016-07-08 2022-01-17 ベクトルレジスタのアクセス

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1611946.3A GB2552154B (en) 2016-07-08 2016-07-08 Vector register access
GB1611946.3 2016-07-08
PCT/GB2017/051752 WO2018007784A1 (en) 2016-07-08 2017-06-15 Vector register access

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2022004904A Division JP2022062067A (ja) 2016-07-08 2022-01-17 ベクトルレジスタのアクセス

Publications (2)

Publication Number Publication Date
JP2019519864A true JP2019519864A (ja) 2019-07-11
JP7213095B2 JP7213095B2 (ja) 2023-01-26

Family

ID=56890758

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2018568728A Active JP7213095B2 (ja) 2016-07-08 2017-06-15 ベクトルレジスタのアクセス
JP2022004904A Pending JP2022062067A (ja) 2016-07-08 2022-01-17 ベクトルレジスタのアクセス

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2022004904A Pending JP2022062067A (ja) 2016-07-08 2022-01-17 ベクトルレジスタのアクセス

Country Status (7)

Country Link
US (1) US10963251B2 (ja)
EP (1) EP3482289A1 (ja)
JP (2) JP7213095B2 (ja)
KR (1) KR102379885B1 (ja)
CN (1) CN109416634B (ja)
GB (1) GB2552154B (ja)
WO (1) WO2018007784A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113808000B (zh) * 2021-11-19 2022-04-26 北京壁仞科技开发有限公司 数据管理装置及数据管理方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005149492A (ja) * 2003-11-18 2005-06-09 Internatl Business Mach Corp <Ibm> 行列ベクトル・レジスタ・アレイの二次元アドレッシング

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58134357A (ja) * 1982-02-03 1983-08-10 Hitachi Ltd ベクトルプロセッサ
US5019968A (en) * 1988-03-29 1991-05-28 Yulan Wang Three-dimensional vector processor
US5887183A (en) * 1995-01-04 1999-03-23 International Business Machines Corporation Method and system in a data processing system for loading and storing vectors in a plurality of modes
US6237083B1 (en) * 1998-02-13 2001-05-22 Advanced Micro Devices, Inc. Microprocessor including multiple register files mapped to the same logical storage and inhibiting sychronization between the register files responsive to inclusion of an instruction in an instruction sequence
US6901422B1 (en) * 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US6898691B2 (en) 2001-06-06 2005-05-24 Intrinsity, Inc. Rearranging data between vector and matrix forms in a SIMD matrix processor
GB2383145B (en) 2001-10-31 2005-09-07 Alphamosaic Ltd Data access in a processor
US6573846B1 (en) * 2001-12-31 2003-06-03 Apple Computer, Inc. Method and apparatus for variable length decoding and encoding of video streams
US20110087859A1 (en) 2002-02-04 2011-04-14 Mimar Tibet System cycle loading and storing of misaligned vector elements in a simd processor
GB2409059B (en) 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
JP3985797B2 (ja) * 2004-04-16 2007-10-03 ソニー株式会社 プロセッサ
US7284092B2 (en) * 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file
US9557994B2 (en) 2004-07-13 2017-01-31 Arm Limited Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number
US7299342B2 (en) * 2005-05-24 2007-11-20 Coresonic Ab Complex vector executing clustered SIMD micro-architecture DSP with accelerator coupled complex ALU paths each further including short multiplier/accumulator using two's complement
US20070011442A1 (en) * 2005-07-06 2007-01-11 Via Technologies, Inc. Systems and methods of providing indexed load and store operations in a dual-mode computer processing environment
US8898212B2 (en) 2008-10-24 2014-11-25 Freescale Semiconductor, Inc Methods and apparatus for reordering data
GB2470780B (en) 2009-06-05 2014-03-26 Advanced Risc Mach Ltd A data processing apparatus and method for performing a predetermined rearrangement operation
US20110072236A1 (en) * 2009-09-20 2011-03-24 Mimar Tibet Method for efficient and parallel color space conversion in a programmable processor
GB2476800A (en) * 2010-01-07 2011-07-13 Linear Algebra Technologies Ltd Sparse matrix vector multiplier using a bit map of non-zero elements to control scheduling of arithmetic operations
CN102012803B (zh) * 2010-11-25 2014-09-10 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
US9098265B2 (en) * 2012-07-11 2015-08-04 Arm Limited Controlling an order for processing data elements during vector processing
US9268571B2 (en) * 2012-10-18 2016-02-23 Qualcomm Incorporated Selective coupling of an address line to an element bank of a vector register file
US9348601B2 (en) 2012-12-26 2016-05-24 Intel Corporation Coalescing adjacent gather/scatter operations
US20150356054A1 (en) 2013-01-10 2015-12-10 Freescale Semiconductor, Inc. Data processor and method for data processing
CN103279327B (zh) * 2013-04-28 2015-11-25 中国人民解放军信息工程大学 面向异构simd扩展部件的自动向量化方法
CN103389967B (zh) * 2013-08-21 2016-06-01 中国人民解放军国防科学技术大学 一种基于sram的矩阵转置的装置及方法
US9207880B2 (en) * 2013-12-27 2015-12-08 Intel Corporation Processor with architecturally-visible programmable on-die storage to store data that is accessible by instruction
JP6253514B2 (ja) 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
US9996347B2 (en) * 2014-12-24 2018-06-12 Intel Corporation Hardware apparatuses and methods relating to elemental register accesses
US9952831B1 (en) * 2017-02-16 2018-04-24 Google Llc Transposing in a matrix-vector processor

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005149492A (ja) * 2003-11-18 2005-06-09 Internatl Business Mach Corp <Ibm> 行列ベクトル・レジスタ・アレイの二次元アドレッシング

Also Published As

Publication number Publication date
JP7213095B2 (ja) 2023-01-26
GB201611946D0 (en) 2016-08-24
WO2018007784A1 (en) 2018-01-11
GB2552154B (en) 2019-03-06
JP2022062067A (ja) 2022-04-19
US20190250914A1 (en) 2019-08-15
US10963251B2 (en) 2021-03-30
KR102379885B1 (ko) 2022-03-30
CN109416634B (zh) 2023-07-18
KR20190026830A (ko) 2019-03-13
EP3482289A1 (en) 2019-05-15
GB2552154A (en) 2018-01-17
CN109416634A (zh) 2019-03-01

Similar Documents

Publication Publication Date Title
US7219214B2 (en) Data processing apparatus and method for moving data elements between a chosen lane of parallel processing in registers and a structure within memory
US9557994B2 (en) Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number
US7761693B2 (en) Data processing apparatus and method for performing arithmetic operations in SIMD data processing
US7689811B2 (en) Method and apparatus for constant generation in SIMD processing
CN109416633B (zh) 用于执行重新排列操作的设备及方法
US20050198473A1 (en) Multiplexing operations in SIMD processing
US20050125641A1 (en) Data processing apparatus and method for moving data between registers and memory
US20050172106A1 (en) Aliasing data processing registers
US20050132165A1 (en) Data processing apparatus and method for performing in parallel a data processing operation on data elements
US7210023B2 (en) Data processing apparatus and method for moving data between registers and memory in response to an access instruction having an alignment specifier identifying an alignment to be associated with a start address
US20050125631A1 (en) Data element size control within parallel lanes of processing
WO2017021675A1 (en) Element size increasing instruction
JP4686435B2 (ja) 演算装置
JP2022062067A (ja) ベクトルレジスタのアクセス

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200221

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210326

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210420

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20210917

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220117

C60 Trial request (containing other claim documents, opposition documents)

Free format text: JAPANESE INTERMEDIATE CODE: C60

Effective date: 20220117

C11 Written invitation by the commissioner to file amendments

Free format text: JAPANESE INTERMEDIATE CODE: C11

Effective date: 20220126

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20220302

C21 Notice of transfer of a case for reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C21

Effective date: 20220303

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20220527

C211 Notice of termination of reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C211

Effective date: 20220531

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20220802

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20221011

C302 Record of communication

Free format text: JAPANESE INTERMEDIATE CODE: C302

Effective date: 20221024

C13 Notice of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: C13

Effective date: 20221026

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221118

C23 Notice of termination of proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C23

Effective date: 20221129

C03 Trial/appeal decision taken

Free format text: JAPANESE INTERMEDIATE CODE: C03

Effective date: 20221223

C30A Notification sent

Free format text: JAPANESE INTERMEDIATE CODE: C3012

Effective date: 20221223

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230116

R150 Certificate of patent or registration of utility model

Ref document number: 7213095

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150