JP2020502669A - ベクトル生成命令 - Google Patents

ベクトル生成命令 Download PDF

Info

Publication number
JP2020502669A
JP2020502669A JP2019531916A JP2019531916A JP2020502669A JP 2020502669 A JP2020502669 A JP 2020502669A JP 2019531916 A JP2019531916 A JP 2019531916A JP 2019531916 A JP2019531916 A JP 2019531916A JP 2020502669 A JP2020502669 A JP 2020502669A
Authority
JP
Japan
Prior art keywords
vector
instruction
value
elements
scalar
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
JP2019531916A
Other languages
English (en)
Other versions
JP7048612B2 (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 JP2020502669A publication Critical patent/JP2020502669A/ja
Application granted granted Critical
Publication of JP7048612B2 publication Critical patent/JP7048612B2/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/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/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
    • 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/355Indexed addressing
    • G06F9/3552Indexed addressing using wraparound, e.g. modulo or circular addressing
    • 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/355Indexed addressing
    • G06F9/3555Indexed addressing using scaling, e.g. multiplication of index

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の要素がスカラ開始値に依存し、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに従うように、ベクトルを生成するように構成されている。ベクトル生成命令は様々な状況で有用であり得、特定の使用例はメモリ内で循環アドレッシングモードを実装するためのものであり、ベクトル生成命令を関連付けられたベクトルメモリアクセス命令に連結することができる。そのような手法はそのような循環アドレッシングをサポートするためにメモリアクセスパス内にさらなるロジックを用意する必要性を除去することができる。

Description

本技法は、データ処理の分野に関する。より詳細には、ベクトル命令の処理に関する。
いくつかのデータ処理システムは、ソースオペランド又は命令の結果値が複数の要素を含むベクトルについて、ベクトル命令の処理をサポートしている。単一の命令に応答していくつかの別個の要素を処理することをサポートすることにより、コード密度が改善され得、命令をフェッチ及び復号するオーバーヘッドが削減される。データ値をベクトルオペランドの個別の要素にロードすること、及びデータ値いくつかの要素を単一のベクトル命令を使用して一度に処理することにより、処理されることになるデータ値の配列は、より効率的に処理され得る。
少なくともいくつかの実例は、ベクトル処理演算を実施する処理回路と、処理回路を制御するためにベクトル命令を復号し、ベクトル命令によって指定されるベクトル処理演算を実施する、命令復号器とを備え、命令復号器は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、複数の要素を含むベクトルを生成するように処理回路を制御し、処理回路は、前記複数の要素のうちの第1の要素がスカラ開始値に依存し、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに従うように、ベクトルを生成するように構成されている、装置を提供する。
少なくともいくつかの実例が、ベクトル処理演算を実施する処理回路と、処理回路を制御するためにベクトル命令を復号し、ベクトル命令によって指定されるベクトル処理演算を実施する、命令復号器とを有する装置を動作させる方法であって、方法は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令を復号するステップと、前記復号するステップに応答して、複数の要素を含むベクトルを生成するように処理回路を制御するステップであって、処理回路は、前記複数の要素のうちの第1の要素がスカラ開始値に依存し、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに従うように、ベクトルを生成する、ステップを含む、方法を提供する。
少なくともいくつかの実例が、ベクトル処理演算を実施するための処理手段と、処理手段を制御するためにベクトル命令を復号し、ベクトル命令によって指定されるベクトル処理演算を実行するための、命令復号器手段とを備え、制御のための命令復号器手段は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、処理手段は複数の要素を含むベクトルを生成し、処理手段は前記複数の要素のうちの第1の要素がスカラ開始値に依存し、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに従うように、ベクトルを生成する、装置を提供する。
少なくともいくつかの実例は、上で議論した装置に対応する命令実行環境を提供するためのホストデータ処理装置を制御するためのプログラム命令を含む仮想マシンコンピュータプログラムを提供する。
仮想マシンコンピュータプログラムを記憶するコンピュータ可読記憶媒体が、提供されてもよい。記憶媒体は非一時的な記憶媒体であってもよい。
本技法は、その実施例を参照して添付の図面に図示されるように、実例としてのみ、さらに説明される。
一実施例による装置のブロック図である。 一実施例によるベクトル生成命令内で与えられるフィールドを概略的に図示している。 一実施例によるベクトル生成命令の特定の実例のために生成され得る要素のベクトルを概略的に図示している。 一実施例によるベクトル生成命令を実行する時に実施される処理を図示する流れ図である。 一実施例により、ベクトル生成命令によって生成されたベクトルが、メモリアドレス空間内で循環バッファを特定するためにベクトルアクセス命令への入力としてどのように使用され得るかを概略的に図示している。 一実施例による、図1のベクトル生成回路の構成をより詳細に図示するブロック図である。 一実例の実施例による、図6の加算器回路及び修正回路の構成を概略的に図示している。 一実例の実施例による、図6の加算器回路及び修正回路の構成を概略的に図示している。 一実例の実施例による、図6の加算器回路及び修正回路の構成を概略的に図示している。 ベクトル命令のオーバーラップした実行の実例を示す。 異なるプロセッサ実装形態間の、又は命令の実行の異なる場合の間のランタイムにおける、連続するベクトル命令同士のオーバーラップの量をスケーリングさせる3つの実例を示す。 一実施例による、ベクトル生成命令のラップ機能がどのように選択的に無効にされるかを概略的に図示する流れ図である。 一実施例による、一組のスカラレジスタに関連付けられて使用され得る読み取りアクセス回路の構成を概略的に図示している。 さらなる一実施例による装置のブロック図である。 説明した実施例による図12で示したフラグ情報記憶装置の実例の構成を図示している。 説明した実施例による図12で示したフラグ情報記憶装置の実例の構成を図示している。 一実施例による、ベクトルメモリアクセス演算を実行する時、フラグ情報がどのように使用され得るかを図示する流れ図である。 説明した実施例において使用され得るフラグ情報の異なる実例の構成を図示している。 説明した実施例において使用され得るフラグ情報の異なる実例の構成を図示している。 説明した実施例において使用され得るフラグ情報の異なる実例の構成を図示している。 一実施例による、フラグ情報を無効化させ得る指定された事象を示す流れ図である。 一実施例による、フラグ情報を無効化させ得る指定された事象を示す流れ図である。 説明した実施例によるフラグ情報をポピュレートするために使用され得る異なるメカニズムを図示する流れ図である。 説明した実施例によるフラグ情報をポピュレートするために使用され得る異なるメカニズムを図示する流れ図である。 説明した実施例によるフラグ情報をポピュレートするために使用され得る異なるメカニズムを図示する流れ図である。 使用され得る仮想マシンの実装形態を示している。
添付の図面を参照して実施例を議論する前に、以下に実施例の説明を与える。
現在利用可能な大部分のデジタル信号プロセッサ(DSP:Digital Signal Processors)は、メモリへのアドレッシングモードである、時にはモジュロ(modulo)とも呼ばれるいくつかの循環の形態をサポートしている。境界チェックを実施するアルゴリズムの必要性を除去し、他の最適化を許可するため、そのような特徴は有用である。
実例の使用例はFIRフィルタである。これは、N個の先行する結果を重みづけした合計から新しい結果を作成する一般的なDSP演算である。線形なメモリ構成では、新しいサンプルのブロックが処理される必要がある都度、それ以前の結果にアクセスする必要がある。これは、N個の最後の結果を線形バッファの開始にコピーし、そこから処理することによって行われ得る。しかしながら、循環メモリを利用する際は、処理は単に古い結果において開始し、終了に達するとラップしてバッファのスタートに戻るので、そのようなコピーするステップはもはや必要ない。したがって、循環バッファはそのような演算をよりずっと効率的なやり方で実施することを可能にする。
メモリへの循環アドレッシングモードをサポートするための知られている一手法は、プロセッサとメモリの間のパスにおいて提供されるアドレス生成ユニット(AGU:Address Generation Unit)内でさらなるロジックを提供することである。しかしながら、処理効率が複数のデータ値をベクトルオペランドのそれぞれの要素にロードし、データ値いくつかの要素を一度に処理することによって向上され得るベクトル処理システムでは、メモリへのアクセスパスは著しく時間制約的なものとなり得、それに応じてそのパス内で余剰なロジックを持続させて演算の循環アドレッシングモードをサポートすることが困難となり得る。したがって、ベクトル処理システム内でメモリへの循環アドレッシングをサポートするための改善されたメカニズムを提供することが望ましい。
一実施例によると、ベクトル処理演算を実施する処理回路と、処理回路を制御するためにベクトル命令を復号し、ベクトル命令によって指定されるベクトル処理演算を実施するための、命令復号器とを有する装置が提供される。命令復号器は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、複数の要素を含むベクトルを生成するように処理回路を制御する。処理回路は、第1の要素がスカラ開始値に依存し、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じて及び必要な時にラップするように制約される規則的に進行するシーケンスに従うように、ベクトルを生成するように構成されている。
そのようなベクトル生成命令の使用は、循環アドレッシングをサポートするためにメモリアクセスパス内でさらなるロジックを提供する必要なく、後続のメモリアクセス命令の入力オペランドとして使用し、メモリ内でそのような循環アドレッシングを直接実装することができる要素のベクトルを生成するための非常に効率的なメカニズムを提供する。別個の命令の使用を通じて循環アドレッシングモードを実装することによって、循環アドレッシングの使用、並びにシステム内で使用できる循環バッファの数及びサイズにおいてかなりの柔軟性を提供する。
説明した実施例のベクトル生成命令によると、ベクトルオペランドはベクトル生成命令への入力としては要求されず、その代わりに、シーケンス内のそれぞれの値がラップ制御情報から決定された境界内に収まることを保証するために、スカラ開始値から生成された規則的に進行するシーケンスがラップするために要求されるかどうか、及びいつ要求されるかを判断するために使用されるラップ制御情報を参照して、要素の出力ベクトル全体が入力されたスカラ開始値から生成される。
スカラ開始値が指定され得るいくつかのやり方があるが、一実施例において、ベクトル生成命令はスカラ開始値を提供する第1のスカラレジスタを指定する。これはスカラ開始値の指定に関してかなりの柔軟性を提供する。さらには、これは命令についての入力ベクトルを指定する必要性を回避することによって、装置内でベクトルレジスタの使用における制約を軽減することができ、これは最適に使用されることを必要とするベクトルレジスタが乏しいリソースでよくあることである。
ベクトル生成命令はベクトル生成命令によって生み出された要素のベクトルを消費するよう意図された命令と密に連結でき、ひいてはベクトル生成命令によって生成される要素のベクトルが比較的短時間、後続の命令がその要素のベクトルをソースオペランドとして消費するまで、保持されることだけを必要とすることを保証するため、ベクトルレジスタの利用は、説明した実施例のベクトル生成命令を使用してさらに最適化することができる。
ベクトル生成命令内でラップ制御情報を特定し得る、いくつかのやり方がある。例えば、1つ又は複数の即値を使用して指定することができるが、一実施例においては、レジスタの内容を参照して指定される。その場合、ラップ制御情報はベクトルレジスタ内で指定することができるが、一実施例においてはさらなるスカラレジスタの内容によって指定される。
ラップ制御情報は、規則的に進行するシーケンスを生成する際に、その範囲内で値が保持されることが必要とされる境界を決定するために使用される。ラップ制御情報は第1の及び第2の境界の両方を決定できるようにするために十分な情報を与えることができるが、一実施例においては処理回路がラップ制御情報を使用して第1の境界を決定し、一方で第2の境界は予め定められる。例えば、一実施例において、第2の境界はゼロ値であってもよい。そのような実施例においては、ラップ制御情報は第1の境界を決定するために使用されるサイズ指標を与えることができる。サイズ指標は様々な形態を取ることができる。例えば、第1及び第2の境界によって定義されるバッファのサイズを特定するために使用することができ、ひいては処理回路がそれぞれの値がその指定されたバッファサイズのバッファによって定義される境界内にとどまることを保証するために規則的に進行するシーケンスがラップする必要があるポイントを決定することを可能にする。或いは、サイズ指標を使用して、その値を論理ゼロ値にラップさせる(規則的に増加するシーケンスについて)あろう規則的に進行するシーケンス内の値をより直接的に特定するために、又は値がゼロに等しくなる時までラップされる値(規則的に減少するシーケンスについて)を特定するために、ラップポイントインジケータを特定することができる
一実施例において、規則的に進行するシーケンス内の各値同士の差異は予め定められてもよい。しかしながら、代替的な実施例においては、ベクトル生成命令は、規則的に進行するシーケンス内で隣接する要素の値同士の差異を決定するために使用される調整量を特定する。ベクトル生成命令内で調整量を指定できるようにすることにより、これは循環アドレッシングを実装するために好適なベクトルの生成に関して著しく改善された柔軟性を提供する。例えば、調整量はメモリ内でアクセスされることになるデータ値のサイズを考慮するために変化し得、したがってアクセスされることになるデータ値のアドレスを決定するために使用することが簡易な要素のベクトルを生成できるようにする。
一実施例において、ベクトル生成命令によって生成される要素のベクトルを使用してアクセスされることになるメモリアドレスを直接指定することができる。しかしながら、一実施例においては、その代わりに、アクセスされることになる実際のメモリアドレスを特定するために、要素のベクトルが次に基底アドレスと結合されるオフセットを指定する。オフセットのベクトルを生成することにより、そのオフセットのベクトルを異なる基底アドレスと結合するだけで、原理的には同一のベクトルはメモリ内の複数の異なる循環バッファを特定するために使用することができるため、これはさらに向上した柔軟性を与える。循環バッファの数に対する唯一の制限は、そのようなベクトルオフセットを記憶するために使用される利用可能なベクトルの数である。さらに、原理的には、バッファは所望によりオーバーラップするように構成することができる。
基底レジスタからオフセットを指定するために要素のベクトルを使用することにより、また所望のように調整量を変化できるようにすることにより、上述の手法を使用して原理的には任意のサイズ及びメモリ内で任意の位置(一実施例においては、サイズは調整量の倍数であるように制約される)にあり得る循環バッファをメモリ内で定義することができる。これは、ひいては循環バッファの使用においてかなりの柔軟性を提供する。
所望であればベクトル生成命令に課すことができる、様々な制約がある。例えば、ラップ制御情報から決定されるバッファサイズを調整量の倍数であるように制約することにより、ベクトル生成命令を実行する際に要素のベクトルを生成するように要求される回路を簡略化できる。一実施例においては、スカラ開始値もまた調整量の倍数であるように制約することができる。そのような制約を使用することにより、ベクトル生成命令を実行する際に要素のベクトルを生成するために使用される回路において著しい簡略化を可能にする。特に、ラップポイントを検出するように要求されるコンポーネントは、条件を超えるか又は条件より小さいかを検出することが必要な回路よりもむしろ等価性チェック回路を使用して実装することができる。
さらに、所望であれば、ベクトルを生成する際に遭遇するかもしれない潜在的なラップポイントの数を制限するためにバッファサイズを制約することができる。例えば、一実施例においては、バッファサイズはベクトル内の要素の数を調整量で乗じて決定したサイズ値を超えるように制約される。そのように制約することで、そのベクトルではせいぜい1つのラップしか起こらないように保証することができる。
一実施例においては、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に増加するシーケンスに従うように、前記ベクトルを生成するためにベクトル生成命令に応じて復号器回路により処理回路が制御される。しかしながら、代替的に、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に減少するシーケンスに従うように、前記ベクトルを生成するためにベクトル生成命令に応じて復号器回路により処理回路が制御されてもよい。ラップ制御情報によって定義されるような上限境界又は下限境界のいずれかに、いつ遭遇するかをチェックすることができる回路を提供することにより、要素が正にインクリメントするシーケンス又は負にインクリメントするシーケンスに従うベクトルを作成することが可能であり、それによってこれらのベクトルを使用していずれかの方向に「踏み込んだ(walked)」循環バッファを特定することができる。一実施例においては、ベクトル生成命令の2つの異なる変数を定義することができ、1つは必要に応じてラップするように制約される規則的に増加するシーケンスの生成する結果となり、一方、もう1つは必要に応じてラップするように制約される規則的に減少するシーケンスを生成するために使用される。
説明した実施例のベクトル生成命令は様々な状況で有用であり得る。しかしながら、前述のように、特定の使用例はメモリ内で循環アドレッシングモードを実装するためのものであり得、ベクトル生成命令を関連付けられたベクトルメモリアクセス命令に連結することができる。特に、一実施例においては、復号器回路はベクトルメモリアクセス命令に応答して処理回路を制御して、メモリ内で、複数のアドレス要素を含む入力アドレスベクトルオペランドによって決定されるアドレスにおいて複数のデータ値にアクセスしてもよい。そのような構成において、装置を前述のベクトル生成命令及び関連付けられたベクトルメモリアクセス命令の両方を含む命令のシーケンスを実行するように構成することができ、関連付けられたベクトルメモリアクセス命令は、ベクトル生成命令によって生成されたベクトルを、入力アドレスベクトルオペランドとして特定する。そのような手法によって、複数のデータ値がメモリ内の循環バッファ内でアクセスされることを保証する。
特定の一実施例において、関連付けられたベクトルメモリアクセス命令は、循環バッファの開始アドレスを提供する基底アドレスを特定し、入力アドレスベクトルオペランドは、アクセスされることになる各アドレスを特定するために、複数のアドレス要素として、基底アドレスと結合されるアドレスオフセットのベクトルを指定する。循環バッファの位置が、基底アドレスによって決定されるため、前述のように、そのような手法はメモリ内の循環バッファの位置に関して著しい柔軟性を提供し、次いでベクトル生成命令によって生成される要素のベクトルを使用して、その基底アドレスを参照して特定される循環バッファ内でデータ値がアクセスされるシーケンスを特定する。
一実施例においては、ベクトル命令の実行を「ビート」と称される部分に分割することができ、各ビートは予め定められるサイズのベクトルの部分の処理に相当する。ビートは、完全に実行される又は全く実行されない、及び部分的に実行することができない、のいずれかである、ベクトル命令の微小な部分である。1つのビート内で処理されるベクトルの部分のサイズはアーキテクチャによって定義されることができ、ベクトルの任意の部分であり得る。
そのような一実施例において、所与のベクトル命令に応じて、処理回路はそれぞれがベクトル値の一部に相当する複数の処理のビートを実行するように構成され、また処理回路は前記ベクトル生成命令、及び前記関連付けられたベクトルメモリアクセス命令のオーバーラップした実行をサポートするように構成され、ここにおいて、関連付けられたベクトルメモリアクセス命令の第1のビートのサブセットはベクトル生成命令の第2のビートのサブセットと並列に実行される。ベクトル生成命令及び関連付けられたベクトルメモリアクセス命令のオーバーラップした実行を可能にすることにより、著しいパフォーマンス改善を提供することができる。
ベクトル生成命令が要素のベクトルを生成する際にラップ挙動をサポートされるようにする一方で、一実施例においては、ラップ挙動を選択的に無効にすることができる。特に、一実施例においては、命令復号器はベクトル生成命令を復号する際に検出された指定された条件に応答して、処理回路によるラップ制御情報の使用を無効とし、それによって、処理回路は前記複数の要素のうちの第1の要素がスカラ開始値に依存するようなベクトルを生成するように、また複数の要素の値がいかなるラップ制約なしに規則的に進行するシーケンスに従うように、構成される。したがって、指定された条件に遭遇すると、ベクトル生成命令を使用して、規則的に増加するシーケンスであれ規則的に減少するシーケンスであれ、要素が規則的に進行するシーケンスに従うベクトルを生成することができる。これはベクトル生成命令の使用においてさらなる柔軟性を提供する。
指定された条件は様々な形態を取り得るが、一実施例においては、指定された条件は予約値を使用してベクトル生成命令内のラップ制御情報を特定する時に検出される。したがって、これは効果的にラップ制御情報が無効化されていることを特定する。予約値は様々な形態を取ることができる。例えば、一実施例においては、予約値は許容されない即値であり得、一方、代替的な実施例においては、予約値はラップ制御情報のために特定される予め定められたレジスタの形態を取ってもよく、その予め定められるレジスタは正当にラップ制御情報を提供するために使用することができないレジスタである。
一実施例においては、スカラ開始値及びラップ制御情報の両方は装置によって提供される一組のスカラレジスタ内のスカラレジスタを参照してベクトル生成命令内で特定される。特定の一実施例において、スカラ開始値及びラップ制御情報を特定するために使用されるスカラレジスタの選択は、命令が実行される際に要求される情報へのアクセス時間を短縮する目的で制約される。例えば、一実施例においては、スカラ開始値及びラップ制御情報の特定に使用される第1及び第2のスカラレジスタの指定は、それぞれ、第1のスカラレジスタが、第2のスカラレジスタが選ばれる一組内のレジスタの第2のグループとオーバーラップしない前記一組のスカラレジスタ内の、スカラレジスタの第1のグループから選択されるように制約される。このやり方で第1及び第2のスカラレジスタの選択を制約することによって、一組のスカラレジスタにアクセスするために使用されるアクセス回路を、第1及び第2のスカラレジスタの両方の内容に、より少ない読み取りポートで同時にアクセスできるように、又はレジスタファイルが2つの独立したバンクに分かれるように構成することができ、それによりハードウェア及び潜在的にエリアの観点からより低コストで両方のレジスタへのアクセスを生み出す。
一実施例においては、処理回路を制御してベクトル生成命令によって、複数の要素のそれぞれを生成するステップのシーケンスを繰り返し実行することにより、要求されるベクトルを生成することができる。しかしながら、代替的な実施例において、複数の要素を並列に生成できるようにするために処理を並列化することができ、それによって、パフォーマンスを改善する。特に、一実施例においては、処理回路は、スカラ開始値から導出した入力値及び規則的に進行する調整値のシーケンスを使用して前記ベクトルについての複数の候補要素を生成するための加算器回路と、それぞれの候補要素から前記ベクトル内に含めるための出力要素を生成するための修正回路とを備える。それぞれの候補要素について、修正回路はラップ条件が存在するかどうかを判断するように構成され、前記ラップ条件が存在する場合は、出力要素を生成するためにラップ制御情報に基づいて候補要素を修正するための算術演算を実施し、そうでなければ修正されない候補要素を出力要素として使用する。
そのような手法により、複数の計算を並列に実施することができる。実際、所望であれば、ベクトルの要素のすべてが並列に生成できるように、加算器回路及び修正回路を構成することができる。代替的に、小型化された加算器回路及び修正回路を使用してもよく、複数の要素を並列に決定するようにでき、加算器回路及び修正回路を通してさらなる繰り返しを実施することでベクトルによって要求されるあらゆる残りの要素を計算する。
特定の実施例においては、複数の要素の値が、それぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に減少するシーケンスに従うように、ベクトルを生成するためにベクトル生成命令に応じて復号器回路により処理回路が制御され、加算器回路は入力値から調整値のうち関連付けられる1つを減算することによりそれぞれの候補要素を生成するために別個の加算器ブロックを備える。各加算器ブロックからのキャリーアウト信号を使用して、関連付けられている候補要素についてラップ条件が存在するかどうかを判断する。したがって、そのような実施例においては、ラップ条件が存在するかどうかについての判断が各加算器ブロックからのキャリーアウト信号から直接的に推論できるので、修正回路を著しく簡略化することができる。これは、ラップ条件が存在する場合を検出するためにより複雑化された比較回路を修正回路に含める要求を回避する。
一実施例においては、ベクトル生成命令の実行が、複数の要素が規則的に増加するシーケンスに従い、やはり必要に応じてラップするように制約されるベクトルの生成を引き起こす時、類似の原理を採用することができる。特に、一実施例においては、入力値はスカラ開始値からラップ制御情報から導出した上限値を減算することによって、スカラ開始値から導出される。加算器回路は、調整値の関連付けられている1つを入力値に加算することによりそれぞれの候補要素を生成するための別個の加算器ブロックを備え、各加算器ブロックからのキャリーアウト信号を使用して、関連付けられている候補要素についてラップ条件が存在するかどうかを判断する。
したがって、この実施例においては、入力値は、スカラ開始値から上限値を初期減算することを実施することにより修正される。初期減算を実施することにより、次いで加算器回路を使用して調整値のうち関連付けられた1つを入力値に加算する際、各加算器ブロックからのキャリーアウト信号を再度使用してラップ条件が存在するかどうかを判定できる。ラップ条件が存在する場合、修正回路は次いで候補要素を修正する。したがって、入力値の適切な調整により、キャリーアウト信号を使用することにより可能とされた修正回路への簡略化は、規則的に増加するシーケンスが生成される時でさえも保持される。
一実施例においては、ラップ条件が存在する場合、修正回路は、出力要素を生成するために、ラップ制御情報から導出した上限値を候補要素へ加算することを前記算術演算として実施するように構成される。したがって、処理回路が規則的に増加するシーケンス又は規則的に減少するシーケンスを生成する両方の場合において、キャリーアウト信号が設定されている時、修正回路をラップ制御情報から導出した上限値を関連付けられている候補要素に加算するように、同じやり方で構成することができる。
次に、図面を参照して特定の実施例を説明する。
図1はベクトル命令の処理をサポートするデータ処理装置2の実例を概略的に図示している。これは説明を容易にするために簡略化された図であり、実際には装置は図1に簡略化のため示されない多くの要素を含み得ることが諒解されよう。装置2は命令復号器6によって復号された命令に応じて桁上げ出力データ処理のための処理回路4を備える。メモリシステム8からプログラム命令がフェッチされ、命令復号器により復号され、アーキテクチャによって定義されるやり方で命令を処理するために処理回路4を制御する制御信号を生成する。例えば、復号器6は復号された命令のオペコード及び命令のあらゆるさらなる制御フィールドを解釈して、処理回路4に適切なハードウェアユニットをアクティブ化させて、算術演算、ロード/ストア演算又は論理演算などの演算を実施させるための制御信号を生成する。装置は一組のスカラレジスタ10及び一組のベクトルレジスタ12を有する。また、処理回路の動作を設定するために使用される制御情報を記憶するための他のレジスタ(図示せず)を有してもよい。算術又は論理命令に応じて、処理回路は典型的にはレジスタ10、12からソースオペランドを読み取り、命令の結果を元のレジスタ10、12に書き込む。ロード/ストア命令に応じて、データ値は処理回路4内で、レジスタ10、12とメモリシステム8との間をロード/ストアユニット18を介して転送される。メモリシステム8はメインメモリ同様に1つ又は複数のキャッシュのレベルを含むことができる。
一組のスカラレジスタ10は単一のデータ要素を備えるスカラ値を記憶するためのいくつかのスカラレジスタを備える。命令復号器6及び処理回路4によってサポートされるいくつかの命令は、スカラレジスタ10から読み取られたスカラオペランドを処理し、スカラレジスタに書き込み返されるスカラ結果を生成するスカラ命令であってもよい。
一組のベクトルレジスタ12はいくつかのベクトルレジスタを含み、それぞれは複数の要素を備えるベクトル値を記憶するように構成される。ベクトル命令に応じて、命令復号器6は処理回路4を制御して、ベクトルレジスタ12のうちの1つから読み取られたベクトルオペランドの各要素に対してベクトル処理のいくつかのレーンを実施し、スカラレジスタ10に書き込むためのスカラ結果又はベクトルレジスタ12に書き込むためのさらなるベクトル結果のいずれかを生成することができる。いくつかのベクトル命令は1つ又は複数のスカラオペランドからベクトル結果を生成することができ、又はスカラレジスタファイル内のスカラオペランドに対してさらなるスカラ演算、同様にベクトルレジスタファイル12から読み取られたベクトルオペランドに対してベクトル処理のレーンを実行することができる。したがって、いくつかの命令はスカラ−ベクトル命令の混合であってもよく、それに関して、命令の1つ又は複数の転送元レジスタ及び転送先レジスタのうち少なくとも1つはベクトルレジスタ12であり、1つ又は複数の転送元レジスタ及び転送先レジスタのもう1つはスカラレジスタ10である。
ベクトル命令はまたベクトルレジスタ12とメモリシステム8内の位置の間でデータ値を転送させるベクトルロード/ストア命令を含む。ロード/ストア命令は、メモリ内の位置がアドレスの隣接する範囲に対応する、隣接するロード/ストア命令、又はいくつかの個別のアドレスを指定して処理回路4を制御し、それらのアドレスのそれぞれからベクトルレジスタのそれぞれの要素にデータをロードするか、若しくはベクトルレジスタのそれぞれの要素からのデータを個別のアドレスに記憶する、スキャッター/ギャザータイプのベクトルのロード/ストア命令を含むことができる。
処理回路4は異なるデータ要素サイズの範囲を伴うベクトルの処理をサポートすることができる。例えば、128ビットのベクトルレジスタ12は16個の8ビットのデータ要素、8個の16ビットのデータ要素、4個の32ビットのデータ要素又は2つの64ビットのデータ要素に区切ることができる。制御レジスタを使用して現在のデータ要素のサイズを使用するように指定することができ、又は代替的にこれは実行される所与のベクトル命令のパラメータであってもよい。
処理回路4は様々なクラスの命令を処理するためのいくつかの別個のハードウェアブロックを含むことができる。例えば、メモリシステム8と対話するロード/ストア命令は専用のロード/ストアユニット18によって処理することができ、一方算術又は論理命令は算術論理ユニット(ALU:Arithmetic Logic Unit)によって処理することができる。ALU自身はさらに乗算を含む演算を実施するための乗算累積ユニット(MAC:Multiply−Accumulate Unit)及びALU演算の他の種類を処理するためのさらなるユニットに区切ることができる。浮動小数点ユニットもまた浮動小数点命令を取り扱うために提供することができる。いかなるベクトル処理も含まない純粋なスカラ命令はまた、ベクトル命令と対照の別個のハードウェアブロックによって、又は同一のハードウェアブロックの再利用によって、取り扱うことができる。
残りの図面を参照してより詳細に議論するように、一実施例によると、ベクトル生成回路16は、装置2によって実行される命令のシーケンス内に含まれ得るベクトル生成命令によって要求される演算を実施するように構成される処理回路4内に提供される。ベクトル生成回路16は処理回路4内に専用のブロックを備えることができるか、又はALUなどの他の回路ブロックのうちの1つの中に組み込むことができる。
本明細書で説明される実施例のうちのいくつかによると、新しい種類のベクトル生成命令をスカラ開始値及びラップ制御情報を特定するように定義することができる。そのような命令が命令復号器6によって復号される際、制御信号が処理回路4に送信され、ベクトル生成回路16に複数の要素を含むベクトルを生成させ、次いで典型的にはその生成されたベクトルはベクトルレジスタ12のうちの1つに記憶される。ベクトルの第1の要素がスカラ開始値に依存し、複数の要素の値が、次いでそれぞれの値がラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに従うように、ベクトル生成回路16はベクトルを生成するように構成されている。規則的に進行するシーケンスは規則的に増加するシーケンス又は規則的に減少するシーケンスであってもよく、また一実施例においては、ベクトル生成命令の異なる変数は増加するシーケンス及び減少するシーケンスの両方について指定される。
そのように生成された要素のベクトルは様々な状況で有用であり得る。しかしながら、そのようなベクトルが非常に有用である特定の一使用例は、前述のベクトルのギャザー/スキャッターロード/ストア命令についての入力オペランドとして、である。特に、一実施例においては、ベクトル生成命令によって生成されるベクトルはギャザー/スキャッター演算を実施させるようなそのようなベクトルのロード/ストア命令についての入力オペランドとして提供されるオフセットのベクトルとして使用することができる。そのような命令は典型的にはまた基底アドレスを指定するスカラ入力を受信し、オフセットのベクトルは次いでその基底アドレスを参照してアクセスされるメモリ内のアドレスのそれぞれを生成するために使用される。そのようなベクトルのロード又はストア命令がメモリ内の任意のアドレスの一組にアクセスするために使用できる一方、上述のベクトル生成命令によって生成されるオフセットのベクトルを使用する際、これはアドレスのシーケンスがメモリ内の循環バッファにあると特定されることを可能にする。したがって、このメカニズムは、メモリアクセスパスにさらなる回路を追加する必要なしに、メモリ内の循環アドレッシングモードを採用するための非常に効率的な技法を提供し、ひいてはそのようなさらなる回路がそのパス内にもたらすであろう潜在的なパフォーマンスへの影響を回避する。これはメモリアクセスパスがしばしばシステム内の重大なタイミングパスとなるベクトル処理システムに著しい利益をもたらす。
やはり図1に示されるように、所望により命令復号器6及び処理回路4の演算を制御するためにビート制御回路20を設けてもよい。特に、いくつかの実施例においては、ベクトル命令の実行を「ビート」と称される部分に分割することができ、各ビートは予め定められるサイズのベクトルの部分の処理に相当する。図8及び図9を参照して後により詳細に議論するように、これはベクトル命令のオーバーラップする実行を可能にし、それによりパフォーマンスを改善することができる。
図2は上で議論した種類のベクトル生成命令内に提供され得るフィールドを概略的に図示している。特に、命令50は命令のオペコードを指定する第1のフィールド52を含むことができる。これを使用して命令がベクトル生成命令であることを特定することができ、またインクリメントする又はデクリメントする変数など、命令の異なる変数を特定するために使用することもできる。特定の一実施例において、ベクトル生成命令のインクリメントする変数はベクトルインクリメントラップ複製(VIWDUP:vector increment and wrap duplicate)命令と称され、一方デクリメントする方面の変数はベクトルデクリメントラップ複製(VDWDUP:vector decrement and wrap duplicate)命令と称される。「複製(duplicate)」との称し方は、ベクトルの要素のそれぞれについて決定された値がスカラシード値から導出され、それぞれの要素についての実際の値はこの場合、先行する要素の値をインクリメント又はデクリメントした方面の変数であり、この時、初期要素値はスカラシード値から導出されることを特定すること意図しているだけである。
一実施例においては、ベクトル内のデータ値のサイズを特定するためにサイズ情報フィールド53が命令内に用意される。特に、処理回路が異なるサイズのデータ値がベクトル内で処理されるようにすると、次いでそのようなフィールドは現在の命令が関連する特定のデータ値サイズを特定するために使用することができる。代替的な実施例において、データ値サイズは予め定められ得るため、そのようなサイズ情報は必要とされなくてもよい。
転送先ベクトルレジスタフィールド54は、命令を実行することにより生成される要素のベクトルが書き込まれるベクトルレジスタ(例えば、図2ではレジスタQdと示される)を特定する。フィールド55はスカラ開始値を与え、一実施例においては、スカラレジスタのうち1つを参照して特定される(図2の実例では、スカラレジスタRnとして示される)。
ラップ制御情報フィールド56もまた境界を特定するために使用されるラップ情報、すなわち値の規則的に増加するシーケンス又は規則的に減少するシーケンスがラップする必要があるポイントを特定するために提供される。特定の一実施例において、ラップ制御情報を使用して第1の境界を決定し、第2の境界は予め定められる。より詳細には、一実施例においては、第2の境界はゼロ値であると仮定する。そのような実施例においては、ラップ制御情報は例えば本明細書ではバッファサイズ又は「BUFSIZE」と称されるサイズ情報を提供することができ、第2の境界を予め定めるとすると、これは第1の境界の値を特定できるようにする。ラップ制御情報は命令内の即値として指定することができ、又は代わりにレジスタを参照して特定することができ、スカラレジスタ10のうちの1つ若しくはベクトルレジスタ12のうちの1つのいずれかである。一実施例においては、ラップ制御情報はさらなるスカラレジスタによって指定され、図2の実例ではスカラレジスタRmと示されている。
一実施例においては、ベクトル処理にかけられるデータ値は予め定められるサイズであってもよいが、代替的な実施例においてデータ値サイズは、いくつかの命令を実行する時はデータ値が第1のサイズであると仮定され、一方で他の命令を実行する時はそれらが異なるサイズであると仮定されるように、変化してもよい。異なるデータ値サイズをサポートする実施例において、次いでベクトル生成命令50は一実施例においては、即値として指定され得る調整量フィールド57を含むことができるが、代替的にはレジスタの内容によって指定され得る。命令が実施されると、調整量は規則的に進行するシーケンス内で各要素が増加又は減少させられる量を決定する。前述のように、一実施例においては、ベクトル生成命令によって生成されるベクトルは後続のベクトルのロード又はストア命令のためのアドレスオフセットのベクトルとして使用され、したがって、調整量はその後続のベクトルのロード又はストア命令によってアクセスされるデータ値のサイズを考慮して設定され得る。例えば、一実施例において調整量は、続いてアクセスされるデータ値がバイトサイズのデータ値である場合、1に設定され、データ値が16ビットのエンティティである場合は2に設定され、データ値が32ビットのエンティティである場合は4に設定される。
ベクトル生成命令を実行する時に要素のベクトルが生成されるやり方を、図3の特定の実例を参照してより詳細に図示する。この実例において、ベクトル生成命令はVIWDUP命令、すなわちインクリメントする変数であると仮定する。図3に示すように、論理バッファ70はゼロ値を有すると仮定される第2の境界、及びバッファサイズ80を参照して特定される第1の境界を有すると特定される。スカラ開始値75は開始値として使用される論理バッファ内の特定のポイントを特定する。図3に図示した実例において、バッファサイズは16、すなわち16バイトと仮定し、ベクトル長は128ビットと仮定する。バッファサイズは単純に説明のために比較的小さくなるように選択されているが、これによって図3に示される3つの実例のそれぞれについての演算のラップ挙動を図示することが助けられるからである。実際には、ベクトルのあらゆる特定の場合を生成する際に起こるラップの発生が減少するようにバッファサイズは著しく大きくてもよい。
実例1で図示するように、調整量は1と仮定する、すなわち関連付けられるデータ値サイズは8ビットであり、スカラ開始値は9に設定されることを示し、これは16のエントリを含み、1エントリは8ビットのサイズになされたデータ値のそれぞれに対応する、実例1に示されるベクトルの生成をもたらす。見ての通り、ベクトル内の要素は規則的に増加するシーケンスに従うが、値が第1の境界値までインクリメントされているポイントにおいてラップし、そのポイントでシーケンスはゼロに戻り、次いでその後増加する。
実例2は調整量を2に設定する状況を示し、すなわち関連付けられるデータ値が16ビットのサイズであることを特定している。この場合、スカラ開始値は10であり、8要素を有し、1要素が128ビットのベクトル内で16ビットのサイズになされたデータ値のそれぞれに対応する図3で示すベクトルの生成をもたらすと仮定する。やはり、値が第1の境界値までインクリメントされたところでラップポイントがあることが分かるが、代わりに次いで論理ゼロ値にラップし戻されている。
実例3は調整量が4に設定される実例を示しており、データ値サイズは32ビットであることを示している。この実例では、初期のスカラ開始値は8であり、ベクトル内に4要素あり、1要素が128ビットのベクトル内で32ビットのデータ値のそれぞれに対応する、図3で示す要素のベクトルの生成をもたらす。やはり、適切なポイントでラップが起こることが分かる。
この種類のベクトルを生成するための特定の命令の使用は、メモリ内の循環バッファの指定に関してかなりの柔軟性を提供する。原理的には、そのような循環バッファは任意のサイズであり得、メモリ内で任意の位置にあり得、実際に、所望であれば、複数のバッファをメモリアドレス空間内でオーバーラップするように定義することができる。
一実施例においては、ベクトル生成演算を実装するために要求される回路を簡略化のために、バッファサイズ及びスカラ開始値の指定にいくつかの制約を課すことができる。例えば、一実施例においては、バッファサイズは調整量の倍数であると制約することができる。加えて、所望であれば、スカラ開始値は調整量の倍数であると制約することができる。これらの2つの制約が図3に図示した3つの実例に課されていることが分かる。そのような制約を使用して、ラップポイントを検出するように要求される回路は、少なくともいくつかの実施例において、条件を超えるか又は条件より小さいかを検出することが必要な回路よりもむしろ等価性チェック回路を使用して実装することができる。
VIWDUP又はVDWDUPいずれかの命令を実行する時に実装される機能性を、以下のように示すことができる:
上記の機能性は図4の流れ図を参照してより詳細に議論する。ステップ100において、ラップ機能を有するベクトル生成命令が実行され、その後ステップ105においてスカラレジスタRnが読み取られて初期オフセット、すなわちスカラ開始値を取得する。加えて、ステップ110において、スカラレジスタRmが読み取られてバッファサイズ情報を取得する。その後、ステップ115において、変数「e」がゼロに等しくなるよう設定され、次いでステップ120において結果ベクトルレジスタ内のe番目の要素が現在のオフセット値に等しくなるよう設定される。次いで実施される後続のステップは、実行されるベクトル生成命令がインクリメント方面かデクリメント方面かに依存する。
ステップ125においてインクリメント方面であると決定されると、次いでステップ130において、オフセットは即値すなわち調整量分インクリメントされ、その後ステップ135において今度はオフセットがバッファサイズに等しいかどうかを判断する。オフセットがバッファサイズに等しい場合、次いでステップ145に進むのに先立ってステップ140においてオフセットがゼロに再設定され、そうでない場合、処理は直接ステップ145に進む。ステップ145において、eの値が最大値に達しているかどうか判断され、これは予め定められた長さのベクトル内のデータ値の数に依存する(データ値サイズから決定されるように)。eがまだ最大値に達していない場合、次いで処理がステップ120に戻る前にeはステップ150でインクリメントされる。
ステップ125において、実行されている命令がデクリメント方面かどうかが判断され、次いでステップ155においてオフセットが現在ゼロに等しいかどうかを判断する。オフセットがゼロに等しい場合、次いでオフセットはステップ160においてバッファサイズから即値を減算した値に等しくなるように調整される。しかしながら、ステップ155においてオフセットがゼロに等しくないと判断される場合、次いでオフセットはステップ165において即値分デクリメントされる。ステップ160又は165に続いて、次いで処理はステップ145に進む。
ステップ145においてeが最大値に達していると判断されると、次いでベクトルの要素のすべてが生成され、それに応じて結果ベクトルQdは所望の複数の要素を含むことになる。処理は次いでステップ170に進み、一実施例においては、レジスタRn内のオフセット値が更新される。ステップ170は任意選択であるが、次の繰り返しに関してレジスタRnが次いで既にその次の繰り返しに適切な開始値を含むため、ベクトル生成命令が例えばループ本体内で繰り返し実行されている場合は有用であり得る。
図4に示される手法に代替的なものとして、いくつかの実施例においては、スカラレジスタRnは各繰り返しの間に更新されてもよい。したがって、この実施例においては、ボックス170はステップ145からの経路「No」にあると考えることができる。eがその最大値に等しいと判断される最後の繰り返しに続いて、処理は次いで経路「Yes」を辿り、やはり図4に示される手順に従ってレジスタRnの内容を更新する。
一実施例においては、転送元レジスタRmはバッファサイズを指定するが、代替的な実施例においては、バッファのサイズから即値を減算したものに等しい値を与えることによって、直接ラップポイント値を指定することができる。そのような構成においては、前述のVIWDUP命令についての機能性は次のようになる:
この手法は潜在的にハードウェア要求を削減することができ、オフセットのインクリメントでラップを並列に実施させるかどうかの判断を可能にするであろう。
VDWDUP命令について対応する機能性は以下の通りである:
図5は上述のやり方で生成された要素のベクトルが次いでどのようにベクトルメモリアクセス命令について入力オペランドとして使用することができるかを図示している。特に、図5の実例においては、ベクトルメモリアクセス命令は、アドレスオフセットQmのベクトルによって指定されるメモリ内の位置からデータ値の収集を実施するように構成されるベクトルロード命令であると仮定する。得られたデータ値は次いで結果ベクトルQd内の要素として記憶される。スカラレジスタRnはメモリ内に基底アドレスを含み、これはアクセスされる個別のアドレスを特定するためにオフセットのベクトルと結合される。ベクトル生成命令については、ベクトルアクセス命令は処理されるデータ値のサイズを特定するためのサイズフィールドを含むことができる。
そのようなベクトルロード命令はメモリ内の任意のアドレスからデータ値を収集するために使用することができる一方、ベクトル転送元レジスタQmがVIWDUP又はVDWDUP命令の実行によって生成されるベクトルであると設定される時、次いで実際にアクセスされるアドレスはメモリ内の循環バッファに対応すると理解されよう。したがって、例えば前述のVIWDUP命令によって生成される要素のベクトルが図5の要素200に示されるようなものである状況、すなわち前述のベクトルが128ビット長、データ値が32ビットのデータ値である図3の実例3における結果と同一のものを考慮すると、次いで図5で示すように、循環バッファはメモリアドレス空間内でアクセスされるが、その循環バッファの開始位置はレジスタRn内で与えられるスカラ値に依存する。したがって、そのスカラ値が第1の値205を有している場合、循環バッファは要素210で示されるような形態を取り、別の実例の場合スカラ値は値215を有し、次いで循環バッファは要素220によって示される。したがって、この手法は循環バッファがメモリアドレス空間内に定義される場合に関してかなりの柔軟性を提供する。オフセット200のベクトルを使用する際、この場合データは関連する循環バッファから検索され、結果ベクトルレジスタQd内に記憶され、図5に示す形態225を取る。
図4を参照して前述のようにVIWDUP又はVDWDUP命令のいずれかを実行する際実施される機能性は繰り返しシーケンスとして実装することができ、ベクトルの1つの要素が各繰り返しにおいて生成され、いくつかの実施例においてはベクトル生成回路は複数の要素が並列に生成されることができるように構成され得る。
図6はベクトル生成回路の1つのそのような構成を図示するブロック図である。この実例においては、一実施例においては複数の別個の加算器ブロックを含んでもよい加算器回路250が用意され、各加算器ブロックは出力ベクトルについて候補要素を生成するように構成されている。次いで加算器ブロックのそれぞれに対応する別個の修正ブロックを有する修正回路260が提供され、ラップ条件がその候補要素の値について検出されるかどうかによって各修正ブロックは対応する加算器ブロックによって出力される候補要素を選択的に修正する。加算器回路はスカラ開始値250及び様々な即値の倍数を受信する。修正回路260はラップ制御情報を受信する。
一実施例においては、加算器回路250及び関連付けられている修正回路260の両方はベクトルの要素のすべてについての値を並列に計算できるようにするために十分なブロックを含むことができる。代替的には、少なくともいくつかのデータ値サイズについて、加算器回路及び修正回路は要素のすべての値を並列に計算するために十分なブロックを有していないが、要素のすべてについてのその値は加算器回路及び修正回路を2回又はそれ以上の通過することの結果として計算することができることもある。
図6に示される実例において、ベクトルはM個の要素を有し、加算器回路250及び修正回路250はベクトルの要素のすべてを並列に生成できると仮定する。
図7Aは、VIWDUP命令すなわち命令のインクリメント方面を処理する際使用される図6のベクトル生成回路16の一実例の形態を図示している。この場合の加算器回路は一連の加算器ブロック300、302、304、306を備え、それらのそれぞれには即値の関連付けられる倍数及び現在のオフセットすなわちスカラ開始値が与えられている。要求される数の加算器ブロック(ベクトルの要素のすべてが並列に生成されると仮定)はデータ値サイズに依存していることが諒解されよう。図3を参照して前述の3つの実例に関して、生成されるベクトルはデータ値サイズによって(またベクトル長が128ビットであると仮定して)4個の要素、8個の要素又は16個の要素のいずれかを有することが分かり、またしたがって、一連のうち最後の加算器306は即値の3倍、即値の7倍又は即値の15倍に対応する第2の入力のいずれかを受信する。
一実施例においては、16個の加算器ブロック、及び16個の修正ブロックを有する単一のベクトル生成回路が提供され得、すべてのブロックが要求されない場合では、ブロックのうち一定数をオフにすることができる。したがって、4個の要素を有するベクトルを生成する際、ブロックの四分の一だけがアクティブ化される必要があり、8個の要素を有するベクトルを生成する際、ブロックの半分がアクティブ化される必要があり、16個の要素を有するベクトルを生成する際、ブロックのすべてがアクティブ化される。
次いで、加算器ブロック300のそれぞれは、修正回路260内の関連付けられる比較ブロック310、312、314、316への1つの入力として先に進める候補要素を生成するために、指定された即値の倍数を現在のオフセットに加算する。各比較ブロックへの他の入力は、この実例の実施例においてはバッファサイズ値である。各比較ブロックは次いで関連付けられる加算器ブロックからの出力がバッファサイズよりも大きいか又はバッファサイズに等しいかどうかを判断する。加えて、関連付けられる加算器ブロックから受信した入力からバッファサイズを減算したものに等しい値を計算する(図7Aで「a−b」として表記)。各マルチプレクサ回路320、322、324、326は次いで関連付けられる加算器ブロックからの出力及び関連付けられる修正ブロックから出力「a−b」を受信し、比較ブロックによって実施される比較の出力に依存して制御される。したがって、加算器の出力がバッファサイズよりも小さいと判断される場合、加算器からの出力が関連付けられるマルチプレクサからの出力であり、一方加算器からの出力がバッファサイズよりも大きいか又はバッファサイズに等しいと判断される場合、修正ブロックからの出力がマルチプレクサからの出力、すなわち関連付けられる加算器ブロックによって出力される値からバッファサイズを減算したものに対応する出力である。
ある実施例におけるVDWDUP命令に要求される演算を実施するために使用され得る回路の実例を図7Bに示す。やはり、一連の加算器ブロック330、332、334、336が提供され、やはりこれらは1つの入力として現在のオフセット、また他の入力として即値の倍数を受信する。しかしながら、この実例においては受信される倍数は即値の負の倍数であり、加算器に現在のオフセット値からその即値の倍数の減算を実施させる。加算器ブロックからの出力は修正回路へと先に進められ、加えてキャリーアウト信号もまた修正回路へと伝搬される。この実例において、修正回路は比較ブロックを含む必要がないが、その代わり1つの入力として関連付けられる加算器ブロック330、332、334、336からの出力を受信し、第2の入力としてバッファサイズ情報を受信する、さらなる加算器ブロック340、342、344、346を含むことができる。さらなる加算器ブロックのそれぞれは、次いでバッファサイズ値を加算器ブロックからの出力に加算し、その値を第2の入力として関連付けられるマルチプレクサ350、352、354、356に提供し、各マルチプレクサの第1の入力は加算器回路250の加算器ブロック330、332、334、336からの出力である。加算器ブロック330、332、334、336のいずれかからの出力が負値である場合、キャリービットがこれを示し、これはそれに応じて、キャリービットが負値を示す場合、マルチプレクサが加算器ブロック330、332、334、336からの元々の出力の代わりに関連付けられる修正回路ブロック340、342、344、346からの出力を選択するように、マルチプレクサを制御するために使用される。
図7A及び図7Bの上記比較から分かるように、VDWDUP命令を実装する際に使用される回路は加算器からのキャリー信号の使用によって著しく簡略化することができ、ひいては比較回路の必要性を回避できる。図7Cは、VIWDUP命令を実装する際に使用され得、またキャリー信号を比較回路を回避するために使用することもできる、代替的な回路の構成を図示している。図7Cに示すように、加算器ブロック360、362、364、366のそれぞれは図7Aの実例の回路に従って現在のオフセット及び即値の倍数を受信するが、加えて第3の入力「−BufSize」を受信する。結果として、これは効果的に加算器に開始において現在のオフセットからバッファサイズの減算を行わせ、結果として加算器からの出力のいくらかが、キャリービット信号によって示される、負となることが可能である。コンポーネント370、372、374、376は図7Bのコンポーネント340、342、344、346に対応する。負であるあらゆる出力について、関連付けられるマルチプレクサ380、382、384、386は、加算器ブロック360、362、364、366からの元々の出力の代わりに、コンポーネント370、372、374、376からの調整された出力を選択する。
したがって、図7Cの回路を採用する際、ベクトルの要素を並列に、また比較回路の必要なしに生成するために、VIWDUP命令の実行は非常に効率的に実施することができる。2つの代わりに3つの数字を加算することは、全部の加算器の列を使用してキャリー伝搬加算器へ入力するために3つの入力を2つの被加算値に「減らす」ことにより加算器360、362、364、366内で容易に適応される。
さらには、同一の回路を、入力「−BufSize」をゼロに設定し、即値の倍数が加算される代わりに減算されるように構成するだけで、VDWDUP演算を実施するために使用することができることに留意すべきである。
デジタル信号処理(DSP)などのいくつかの適用例においては、概ね等しい数のALU及びロード/ストア命令があってもよく、したがって、MACなどのいくらか大きいブロックは著しく長い時間アイドルのままであり得る。この非効率性はベクトルアーキテクチャでは悪化することがあるが、それは実行リソースがより高いパフォーマンスを獲得するためにベクトルレーンの数でスケーリングされるからである。小型プロセッサ(例えば、シングル命令発行、イン・オーダーコア)では完全にスケールアウトされたベクトルパイプラインのエリアオーバーヘッドが法外なものになり得る。利用可能な実行リソースのより良く使用しつつエリアの影響を最小化するための1つの手法は、図8に示すように命令の実行をオーバーラップさせることである。この実例においては、3つのベクトル命令はロード命令VLDR、乗算命令VMUL、及びシフト命令VSHRを含み、すべてこれらの命令は相互にデータ依存性があるが、同時に実行していることができる。なぜならVMULの要素1がQ1レジスタの全体ではなくQ1の要素1に依存しているだけであり、それでVMULの実行はVLDRの実行が終わってしまう前に開始することができる。命令をオーバーラップできるようにすることで、乗算器のような高価なブロックをより長くアクティブにしておくことができる。
したがって、ベクトル命令の実行をオーバーラップするためにマイクロアーキテクチャ的な実装形態を可能にすることが望ましくなり得る。しかしながら、アーキテクチャが命令のオーバーラップの固定量を仮定するものであれば、マイクロアーキテクチャ的な実装形態が実際にアーキテクチャによって仮定される命令のオーバーラップの量に一致する場合は高い効率性をもたらし、一方で異なるオーバーラップを使用する、又は全くオーバーラップしない、異なるようにスケーリングされたマイクロアーキテクチャは問題を引き起こす可能性がある。
代わりに、アーキテクチャは図9の実例で示されるような異なる範囲のオーバーラップをサポートすることができる。ベクトル命令の実行を「ビート」と称される部分に分割し、各ビートは予め定められるサイズのベクトルの部分の処理に対応する。ビートは、完全に実行される又は全く実行されない、及び部分的に実行することができない、のいずれでもある、ベクトル命令の微小な部分である。1つのビート内で処理されるベクトルの部分の大きさはアーキテクチャによって定義され、ベクトルの任意の端数である。図9の実例においては、ビートはベクトル幅の四分の一の処理に相当する処理として定義され、そのため1ベクトル命令当たり4つのビートがある。明らかに、これはただの一実例であり、他のアーキテクチャは異なる数のビート、例えば、2つ又は8つを使用することができる。1ビートに相当するベクトルの部分は同一のサイズ、処理されるベクトルの要素サイズよりも大きい、又は小さくてもよい。したがって、要素サイズが実装形態ごとに、又は異なる命令同士のランタイムで変化しても、ビートはベクトル処理の一定の固定幅である。1ビート中の処理されるベクトルの部分が複数の要素を含む場合、キャリー信号は各要素が独立的に処理されることを保証するために個別の要素間の境界において無効とされることがある。1ビート中の処理されるベクトルの部分が要素の一部分のみに相当し、ハードウェアがいくつかのビートを並列に計算するためには不十分である場合、処理の1ビートの間に生成されるキャリー出力は、2つのビートの結果が共に1つの要素を形成するようにキャリー入力として後続の処理のビートに入力することができる。
図9に示すように、処理回路4の異なるマイクロアーキテクチャ的な実装形態は、抽象的なアーキテクチャ上のクロックの1「ティック(tick)」の間に異なる数のビートを実行することができる。ここで、「ティック」はアーキテクチャ的に状態が前進する単位に相当する(例えば、単純なアーキテクチャでは各ティックは命令を実行することに関連付けられるすべてのアーキテクチャ状態が更新される場合に相当し、プログラムカウンタが次の命令をポイントするように更新することを含む)。当業者であればパイプライン化などの知られているマイクロアーキテクチャ技法は単一のティックはハードウェアレベルで実施するには複数のクロックサイクルを必要とし、実際にはハードウェアレベルでの単一のクロックサイクルは複数の命令の複数の部分を処理することができることを意味することが諒解されよう。しかしながら、ティックはアーキテクチャレベルでは非常に微細であるため、そのようなマイクロアーキテクチャ技法はソフトウェアには見えないものである。簡略化のため、本開示のさらなる説明ではそのようなマイクロアーキテクチャは無視する。
図9の下段の実例に示すように、いくつかの実装形態は、1ティック内ですべてのビートを並列に処理するために十分なハードウェアリソースを用意することによって、同一ティック中のベクトル命令の4つすべてのビートをスケジューリングすることができる。これはより高パフォーマンスな実装形態に好適である。この場合、全体的な命令が1ティック内に完了することができるため、アーキテクチャレベルでは命令同士にいかなるオーバーラップも必要がない。
一方で、より良いエリア効率的な実装形態は1ティック当たり2ビートしか処理できない狭い処理ユニットを提供し、図9の中段の実例に示すように、命令実行は、第1の命令の第3又は第4のビートと並列に実行される第2のベクトル命令の第1及び第2のビートとオーバーラップさせることができ、これらの命令は処理回路内では異なる実行ユニット上で実行される(例えば、図9においては、第1の命令はベクトル生成回路を提供するユニット内で実行されるベクトルのインクリメント及びラップ命令であり、第2の命令はロード/ストアユニットを使用して実行されるロード命令である)。
さらになおエネルギー/エリア効率的な実装形態は、より狭く、一度に単一のビートしか処理できないハードウェアユニットを提供してもよく、この場合、1ティック当たり1ビートを処理することができ、命令の実行はオーバーラップし、例えば、図9の上段の実例で示すように2ビート分すれ違う。
図9で示すようなオーバーラップはただの実例であって、他の実装形態もまた可能であることが諒解されよう。例えば、処理回路4のいくつかの実装形態は同一のティック内に複数の命令を並列に二重発行することをサポートすることができ、命令のより高いスループットがある。この場合、1サイクル内で共に開始される2つ又はそれ以上のベクトル命令は、次のサイクル内で開始される2つ又はそれ以上のベクトル命令とオーバーラップするいくつかのビートを有することができる。
異なるパフォーマンスポイントにスケーリングするために実装形態ごとにオーバーラップの量が変化させることと同様に、ベクトル命令同士のオーバーラップの量もまたプログラム内のベクトル命令の実行の異なる瞬間同士の間のランタイムで変化することができる。したがって、処理回路4及び命令復号器6は、先行する命令に対して所与の命令が実行されるタイミングを制御するために使用される図1に示すようなビート制御回路20を参照することができる。これは実装することがより困難なあるへんぴな場合又は命令にとって利用可能なリソースに依存して、マイクロアーキテクチャに命令をオーバーラップさせない選択する自由を与える。例えば、同一のリソース及びすべての利用可能なMAC又はALUリソースが既に別の命令によって使用されていることを要求する所与の種類のバックツーバック命令(例えば、乗累算)がある場合、次の命令の実行を開始するために十分に自由なリソースがないことがあり、それで、第2の命令の発行はオーバーラップするのではなく、むしろ第1の命令が完了してしまうのを待機することができる。
それに応じて、図9の上記説明から、ベクトル生成命令及び関連付けられるメモリアクセス命令がどのように実行されるかについて、かなりの柔軟性があることが分かるが、ベクトルメモリアクセス命令に、ベクトル生成命令によって生成されたベクトルを比較的速く消費させるようにこれらは密に連結し得る。ベクトルレジスタの数は典型的には乏しいリソースであるため、これは有用であり得、それに応じてベクトル生成命令によって生成されたベクトルをベクトルレジスタ内で長期間保持することを要求することによってではなく、ベクトルレジスタリソースを解放することができる。ベクトル生成命令自身の形態もまたこの利益を達成することを支援するものであるが、それはベクトルオペランドがベクトル生成命令へのソースオペランドとして要求されず、代わりにベクトル生成命令はその入力を即値又はスカラレジスタのいずれかから取得するからである。
いくつかの実施例において、ベクトル生成命令によって提供されるラップ機能性は選択的に無効とされることが可能であり、これは図10の流れ図を参照して実例によって図示されている。特に、ステップ400において、ベクトル生成命令が実行され、ステップ405においてスカラレジスタRm(すなわち、ラップ制御情報を指定するレジスタ)が予約値に設定されたかどうかを判断する。例えば、スカラレジスタのうち1つ又は複数がそのようなラップ制御情報を指定するためには有効でないスカラレジスタである可能性があり、それに応じてレジスタRmをこれらのレジスタの1つに設定することによって、これはラップ機能性が無効とされるものと特定する。ある特定の実例において、これはプログラムカウンタのレジスタをレジスタRmとして指定することにより達成され得る。レジスタRmが予約値を指定しない場合、ステップ410で示されるように、処理は通常通り続けられ、例えば、図4の前述の処理を実装する。しかしながら、レジスタRmが予約値である場合、ステップ415においてラッピングが無効とされ、ステップ420においてベクトル生成回路はオフセット及び即(すなわち、調整量)値を使用して値のインクリメント又はデクリメントするシーケンスを生成するが、いかなるラップ制約も伴わない。これはVIWDUP及びVDWDUP命令(ラッピングが無効とされる変数においてはVIDUP及びVDDUP命令と称され得る)の使用にさらなる柔軟性をもたらすことができる。
スカラレジスタRm及びRnの指定を制約することにより、さらなるパフォーマンス及び効率性の利益が実現され得る。特に、1つのスカラレジスタが、他のレジスタが選ばれるスカラレジスタのグループとオーバーラップしていないスカラレジスタの第1のグループ内にあるように制約される場合、もしレジスタがそのように制約されていなかったら要求されているであろうよりも少ない読み取りポートによって、又は2つの独立したバンクに分けられるレジスタファイルによって、のいずれかで、スカラレジスタファイル10の読み取りアクセス回路を使用して両方のレジスタの内容に同時にアクセスすることが可能であり得る。これを図11に概略的に図示しており、2つのグループは偶数及び奇数のレジスタである。したがって、R0 455、R2 456等の偶数レジスタのすべては1つのグループ内にあり、R1 460、R3 470等の奇数レジスタのすべてはさらなるグループ内にある。スカラ開始値がレジスタによってこれらのグループのうちの1つに指定されるように制約される場合、他のグループ内でレジスタによってラップ制御情報が指定されるが、図11の読み取りアクセス回路450によって示されるように、マルチプレクサ475及び480からの出力を使用して単一の読み取りポートを介して奇数レジスタ及び偶数レジスタ両方の内容にアクセスすることが可能である。これらの値が最後のマルチプレクサ485に入力される前に、これらの値を取り出す(tap off)ことにより、これが達成されるが、最後のマルチプレクサ485は所望であれば、なお単一のレジスタに出力を読み取らせる。
図11において、偶数レジスタのグループ及び奇数レジスタのグループの観点で実例が図示されるが、より一般的には、レジスタがオフセットを指定するように、及びレジスタがバッファサイズをスカラレジスタセットのオーバーラップしない部分から開始されるように指定するように、制約することにより同一の利益が達成され得る。
以下は、上で議論した提案された命令がどのように効率的に使用されて循環メモリを使用し得るかを図示する実例のコードのシーケンスである:
はじめの3つのMove命令はスカラレジスタr8、r9、及びr10の内容を論理ゼロ値に初期化するために使用され、次いでWLSTP命令は、リンクレジスタにループの数を記憶するループを設定している。次いで、VLDRW命令はスカラレジスタ(「srcCoeff」として示される)で指定されたアドレスから隣接するデータのロードを実施し、結果データ値をベクトルレジスタq0に記憶し、次いで命令はまたスカラレジスタ内のアドレスをインクリメントする。VIWDUP命令は次いで前述のように演算し、ベクトルレジスタq7に記憶されるオフセットのベクトルを生成する。データ値サイズが32ビットであるため、即値は4である。後続のVLDRW命令は次いでベクトルレジスタq7の内容及び転送元レジスタ(「srcSamplesCircular」と称される)内の指定された基底アドレスを使用し、次いでベクトルレジスタq1内に記憶されるメモリ内のデータ値にアクセスする。次いでベクトルの乗累演算が実施されるが、q0内の各要素をq1内の対応する要素と乗算し、次いでレジスタr8及びr9内に保持されるスカラ値内で和を求める。この処理はループの複数の繰り返しを通して必要なループ数が実施されてしまうまで続けられる。
前述のように、実施され得るベクトルメモリアクセス演算のうち1種類は、複数のアドレス要素を含むアドレスベクトルオペランドから決定されたアドレスにおけるメモリ内の複数のデータ値にアクセスする。アドレスベクトルオペランドがアクセスされることになる個別のアドレスを直接指定する一方で、アドレスベクトルオペランドはしばしばオフセットのベクトルを指定し、それはアクセスされることになるアドレスを特定するために基底アドレスと結合される。そのような演算は、任意のメモリ位置にあるデータにアクセスできるようにし、メモリ内のアドレスからベクトルの個別の要素内にデータをロードする際にギャザー演算、又はベクトルからの個別の要素を特定されたアドレス位置に記憶する際はスキャッター演算としばしば称される。
そのようなスキャッター又はギャザー演算に関与するアドレスは任意であり得るという事実のため、そのような演算の処理は、一連の独立したロード又はストア演算が実施されるように、典型的には様々なアクセス要求がシリアル化されていることを必要とする。アクセスが実際に任意である場合、これは合理的で必須である。しかしながら、そのようなスキャッター又はギャザータイプのメモリアクセス演算が使用されるが、アクセスされることになるアドレスの少なくともいくつかが実際に連続的で、それに応じてデータ値の複数が、メモリ内の隣接するアドレスへの単一のアクセスを介してアクセスされ得る場合が増えていることが理解されてきた。これについての特定のある実例は、ギャザー又はスキャッター演算を実施する際に次いで使用されるオフセットのベクトルを生成するために前述のベクトルインクリメント及びラップ又はベクトルデクリメント及びラップ命令を使用する時であり、なぜならアドレスはラップポイントに達する所以外は連続的となるからである。
しかしながら、ベクトル処理システムにおいては、メモリへのアクセスパスはしばしばクリティカルなタイミングパスであり、それに応じてベクトルメモリアクセス演算が処理される時にアドレスを分析するためにメモリアクセスパス内に回路を提供することは実際的でないことが典型的である。
残りの図面を参照して説明するように、一定の実施例はこの問題を軽減するためのメカニズムを提供することができる。図12は一定のアドレスのシーケンスがいつ隣接するかを特定すること、ひいてはそのような状況で必要とされるアクセスの数を減らすことにおいてロード/ストアユニットを支援することを目的としたコンポーネントを組み込む実例の実施例を概略的に図示している。図12を図1と比較することから分かるように、図12は本質的には図1の装置2であるが、いくつかさらなるコンポーネントを備える装置2’を図示している。特に、処理回路4’は図1の処理回路4内に提供されるコンポーネントのすべてを含むが、加えてベクトルレジスタ12のうち1つについて記憶するために生成されたベクトルが指定された隣接性の判断基準を満たす複数の要素を含むとの判断に対してフラグ情報を設定するように構成され得るフラグ設定回路500を有する。フラグ設定回路によって生成されたフラグ情報は様々な位置に記憶することができる。例えば、フラグ情報記憶装置505はフラグ情報を記憶するためのフラグ設定回路に関連して設けることができる。代替的に、フラグ情報記憶装置510は、必要なフラグ情報をキャプチャするために各ベクトルレジスタに関連していくつかのさらなるビットを与えることによって、ベクトルレジスタファイル12内に効率的に組み込まれる。
特定のベクトルレジスタについて、フラグ設定回路500がフラグ情報を設定して少なくともそのベクトルレジスタの部分が、値が指定された隣接性の判断基準を満たす要素を有していることを特定する場合、続いてロード/ストアユニットがそのレジスタを参照して指定されたオフセットのベクトルを使用してギャザー又はスキャッター演算を実施する際、フラグ情報を利用し、どのアドレス要素が隣接しているか、ひいてはギャザー又はスキャッター演算を実施するために必要とされるメモリシステム8へのアクセス回数を潜在的に減らすかを判断することができる。設定するべきフラグ情報が存在しない場合、ロード/ストアユニットは標準的なやり方でギャザー又はスキャッター演算を取り扱うことになる。これはロード/ストアユニット18に各アドレス要素を隣接していないアドレスを特定することとして扱うよう要求すること、ひいては各アドレス要素について別個のアクセスを実施することを伴い得る。代替的に、少なくとも部分的にアクセスの最適化することを求めて、いくつかの他のコンポーネントがメモリアクセスパス内に設けられてもよい。そのようなさらなる回路が設けられる程度まで、本明細書で説明されるフラグ情報メカニズムに加えて使用することができる。
フラグ設定回路500が存在するか存在しないかを判断することを求める指定された隣接性の判断基準は、様々な形態を取ってよいが、一実施例においては、少なくともベクトル内の要素のサブセットが規則的に進行するシーケンスに従う値を有することを必要とする。次いで、処理回路がベクトル内のどの要素が規則的に進行するシーケンスに従う値を有するかどうか判断できるようにするためのフラグ情報が設定される。
図13Aは一実施例によるフラグ情報記憶装置505内に与えられるエントリを図示している。この実例において、複数のエントリが与えられ、各エントリはエントリが関連するレジスタを特定するためのレジスタIDフィールド515、及び1つ又は複数の有効フラグを含む有効フラグフィールド517を有する。一実施例において、単一の有効フラグがベクトル全体に関連して使用されてもよく、ベクトル内の要素のすべてが規則的に進行するシーケンスに従う場合に設定されるだけである。代替的に、複数の有効フラグが有効フラグフィールド517内に与えられてもよく、各フラグはベクトルの異なる部分に関連付けられ、また関連付けられる部分が規則的に進行するシーケンスに従う要素を含むかどうかに依存して設定されている。所望であれば、規則的に進行するシーケンスが複数の部分同士に広がっているかどうかを特定するためにさらなる情報がまたキャプチャされ得る。したがって、実例としてベクトル内の4つの部分に関連する4つの有効フラグが存在し、有効フラグが部分2及び3の両方が規則的に進行するシーケンスに従う要素を含むことを示す場合、フラグ情報は、所望であれば、部分3の規則的に進行するシーケンスが、部分2の規則的に進行するシーケンスの中断されない継続であるかどうかをさらにキャプチャすることができる。
探されている規則的に進行するシーケンスは様々な形態を取ることができるが、一実施例においては、隣接するメモリアドレスが規則的に進行するシーケンスに従う値から得られる(これらの値がメモリアクセス動作のためのアドレス要素として使用される場合)ようなものである。前述のように、単一のデータ値サイズだけがサポートされることもあってよく、したがって、規則的に進行するシーケンスはそのデータ値サイズを考慮する連続的なアドレスを特定する値に関連することになる。しかしながら、代替的な実施例において、複数の異なるデータ値サイズがサポートされてもよく、その場合、フラグ情報が関連するデータ値のサイズを特定するためにサイズフィールド519が各エントリ内に設けられ得る。特に、データ値が1つのサイズのものである時は、値のシーケンスが隣接するアドレスを表現するために使用することができるが、データ値が異なるサイズのものである時は、同一の値のシーケンスは必ずしも隣接するアドレスを表現しないことが諒解されよう。
別の実例として、システムは複数のデータ値サイズをサポートすることもあるが、説明される実施例のフラグ設定メカニズムは特定のサイズのデータ値に関して実装されただけである。例えば、処理されることになるデータ値がバイトサイズのデータ値である時、フラグ設定技法を実装するが、データ値があらゆるより大きなサイズのものである時はフラグ設定技法を実装しない、と決定されることがあってもよい。そのような場合、サイズ情報フィールド519を必要としなくてもよい。
同様に、フラグ設定技法の使用が1つ又は複数の特定のベクトルレジスタに限定され、フラグ情報記憶装置の各エントリが特定のレジスタに直接的に関連付けられていてもよい。この事象では、必ずしもレジスタ識別子フィールド515を用意しなくてもよい。
さらに代替的な実施例において、特に最後に使用されたベクトルについてのフラグ情報を提供するために、フラグ情報は単一のレジスタのみについて保持されてもよい。そのような実施例においては、メモリアクセス命令にすぐ先行する命令が連続的なオフセットを表現できる要素のベクトルを生成するようなやり方でコードが構造化されている場合、実装形態は同一のベクトルがメモリアクセス命令のためのオフセットレジスタとして使用されることを確認し、それに応じてフラグ情報を読み取るだけである。やはり、これはフラグ情報内でレジスタ識別子をキャプチャさせるあらゆる特定の必要性を回避する。
図13Bはベクトルレジスタファイル12のベクトルレジスタと組み合わせて設けられる代替的なフラグ情報記憶装置510の実例の構成を図示している。各ベクトルレジスタ520について、そのレジスタに関連付けられる1つ又は複数の有効フラグを記憶するための対応する有効フラグフィールド522が設けられてもよい。必要であればサイズ情報フィールド524もまた設けられてもよい。そのような手法によって、ベクトルレジスタファイル12内のベクトルレジスタのそれぞれについて、有効フラグ情報は潜在的に同時に保持される。
図14は、ベクトルメモリアクセス演算を実行する時、フラグ情報がどのように使用されるかを図示する流れ図である。ステップ550において、ベクトルメモリアクセス演算が実施されるかどうかが判断される。特に、一実施例においては、この時点で、ロード/ストアユニット18は実施するためのベクトルメモリギャザー又はスキャッター演算を有していると判断する。固有にメモリ内の隣接するアドレスを特定するベクトルロード又はストア命令の他の種類については、フラグ情報の必要性がなく、これらのアクセスは知られているアドレスの隣接する性質の有利性を取った標準的なやり方で取り扱うことができる。しかしながら、前述のように、スキャッター又はギャザータイプの演算については、これらは潜在的にメモリ内の任意のアドレスに対するものであり、しかしアドレスオフセット情報を提供するために使用されるベクトルレジスタに関連付けられるフラグ情報の存在は、ロード/ストアユニットにアドレス要素のうちいずれかが実際に隣接するアドレスに関連し、必要とされるアクセスの数を潜在的に減らすためにその情報を使用するかどうかを判断できるようにし得る。
それに応じてステップ555において、フラグ情報がアドレスベクトルオペランドを提供するベクトルレジスタに関連付けられるかどうかが判断され、一実施例においては、これは次いでアクセスするアドレスを特定するために基底アドレスに結合されるアドレスオフセットのベクトルである。フラグ情報がそのベクトルレジスタに関連付けられている場合、ステップ560においてフラグ情報はデータ値にアクセスするために必要とされるメモリへのアクセスの数を決定する際ロード/ストアユニット18によって使用される。しかしそうでなければ、処理はステップ565に進み、データ値にアクセスするために標準的なやり方でギャザー又はスキャッター演算が実施される。
図15A〜図15Cはベクトルギャザー演算を指定するベクトルロード命令への入力として提供されるオフセット値についての様々な実例を図示している。この実例において、ベクトルロード命令が4つの32ビットデータ値を128ビット転送先レジスタQdにロードしており、オフセット情報が転送元ベクトルレジスタQm内に与えられ、基底アドレスがスカラレジスタRnに指定されていると仮定する。図15Aの実例においては、オフセット570のベクトルは、4つの32ビットのデータ値についての隣接するアドレスを生成するために使用され得る値の規則的に増加するシーケンスを与えると仮定する。この実例ではまた、フラグ情報572が、規則的に進行するシーケンスがベクトル幅全体に関連することを特定するように設定される単一の有効フラグを有していると仮定する。サイズ情報フィールドはまた仮定されたデータサイズが32ビットであることを特定するために設定され、レジスタIDフィールドはフラグ情報がレジスタQmに関連することを特定するために設定される。ベクトルロード命令が32ビットの量で動作しているため、フラグ情報が参照される際、サイズ情報が一致しているかどうか、及びレジスタIDが転送元レジスタQmに一致しているかどうかが判断される。有効フラグが設定されているため、したがってロード/ストアユニットは、アドレス要素のすべてが基底アドレスと結合するとメモリ内の隣接するアドレスが特定されるような規則的に進行するシーケンスに従うということを知る。
ロード/ストアユニット18がどのように情報を使用するかは、利用可能なメモリアクセス帯域幅を含むファクタの数に依存することになる。例えば、64ビットメモリアクセス帯域幅がサポートされている場合、図15Aに示される情報に基づいてロード/ストアユニットは2つの64ビットアクセスを実施することができ、それぞれ2つの隣接するアドレスに向けられており、したがって2つのデータ値がそれぞれのアクセスによって検索されることを可能にしている。代わりに128ビットメモリアクセス帯域幅がサポートされている場合、ロード/ストアユニット18は、単一のアクセスを介して4つすべてのデータ値を検索するために、4つの隣接するアドレスに向けられる1つの128ビットのアクセスを実施することができる。
図15Bは第2の実例を図示しており、フラグ情報は有効フラグフィールド内に2つの有効フラグを有しており、それに応じてフラグ情報は特定の実例の要素のベクトル574について、576の形態を取る。したがってこの実例においては、少なくとも64ビットのメモリアクセスがサポートされている場合、ロード/ストアユニットははじめの2つのデータ値を検索するために単一のアクセスを発行することができる。第3のデータ値及び第4のデータ値を取得するために、次いで別個のアクセスが典型的には必要とされることになる。
両方の有効フラグが設定されている事象においては、転送元ベクトルレジスタQmの下半分及び上半分の両方が要求される進行するシーケンスに従う要素を含むため、2つの半分同士に連続性があるかどうかを特定するために任意選択でいくつかのさらなる情報がキャプチャされ得る。例えば、Qmが要素20、16、4、0を保持する場合、両方の有効フラグが設定されることになるが、このさらなる情報は設定されないこともある一方で、Qmが値12、8、4、0を保持している場合、両方の有効フラグが設定されることになり、さらにこのさらなるフラグは2つの半分同士の連続性を特定するために設定されることがある。これは一定の状況において有用であり得る。例えば、メモリアクセスパスが128ビットの帯域幅を有している場合、このさらなる情報は2つの64ビットの隣接するアクセスが発行される必要があるかどうかを判断するため、又は単一の128ビットの隣接するアクセスが発行され得るかどうか判断するために使用され得る。
図15Cはなおさらなる実例を図示しており、転送元のオフセットのベクトルは580の形態を取り、フラグ情報は582の形態を取る。この場合、フラグ情報フィールドは単に一連のフラグを含むのではなく、代わりに要素のうちどれが隣接するアドレスを表現するかを特定するために十分な情報を提供する。この実例において、ベクトル内のはじめの3つの要素は要求されるパターンを有しており、その情報がフラグフィールド内でキャプチャされ得る。これは様々なやり方でキャプチャされ得ることが諒解されよう。例えば、隣接性の開始要素及び終了要素が特定され得、又はその後隣接するいくつかの要素と共に隣接性シーケンスについての開始要素が特定され得る。
一実施例においては、フラグ設定回路500は、1つ又は複数の指定された事象の発生があるとフラグ情報を無効化するように構成され得る。特に、一実施例においては、図16Aに示すように、ステップ600において例外が発生したと判断された場合、ステップ605においてフラグ情報が無効化される。したがって、例外はフラグ情報を無効化させる指定される事象のうちの1つを形成する。
図16Bは指定される事象の別の実例を図示しており、この場合、指定される事象は処理回路がそれに関連付けられるフラグ情報を有するベクトルレジスタに書き込む時である。書き込み動作が発生していたとすると、フラグ情報はもはや正確であるとは考えられず、それに応じて無効化される。ステップ610において、現在の命令がベクトルレジスタに書き込みをするかどうかが判断され、書き込みが行われる場合、ステップ615においてそのベクトルレジスタについて有効なフラグ情報を記憶するかどうかを判断する。記憶すると判断した場合、そのベクトルレジスタについてのフラグ情報はステップ620において無効化される。その後、ステップ625において命令が実行される。ステップ610又はステップ615のいずれかから「NO」経路を辿る場合、処理は直接ステップ625に進み、命令を実行し、あらゆるフラグ情報が保持される。
そのような事象が発生するとフラグ情報が無効化されるように構成することで、これはフラグ情報がアーキテクチャ的に可視である必要がないこと、並びに例外の周りで保存及び復元される必要がないことを意味する。これはフラグ設定メカニズムの実装形態を簡略化する。
フラグ設定回路500をトリガして要素のベクトルについてのフラグ情報を生成するために使用され得るいくつかのメカニズムがある。図17は1つの実例の構成を図示しており、フラグ設定回路は前述のVIWDUP又はVDWDUP命令のうち1つの実行が起こるとトリガされる。特に、ステップ650において、これらの命令のうち1つを実行するかどうかを判断し、ステップ655においてベクトル生成回路16がその命令を実行する一方、生成されたベクトル内でラップが発生するかどうかを特定するためにフラグ設定回路500に情報を与え、そうである場合、そのラップはそのベクトル内で発生した。
ステップ660において、フラグ設定回路はその情報を分析し、それに応じて関連するレジスタについてフラグ情報を設定する。特に、ラップが発生しない場合、ベクトルが同一のデータ値サイズに関連する後続のギャザー又はスキャッター演算への入力として使用され、それに応じて有効フラグ又は複数の有効フラグが設定され得る場合、VIWDUP又はVDWDUP命令について特定されたデータ値サイズについて、要素のベクトルは隣接するアドレスを表現することが知られる。同様に、ラップするポイントがある場合、ベクトル内のどの要素が隣接するアドレスを表現するかなお判断することができ、またそれに応じてフラグ情報が設定され得る。そのような場合、隣接するアドレスに関連する要素を含むベクトルの少なくとも部分を特定するためにいずれの有効フラグが設定され得るかに関して生み出されることになるフラグ情報の性質及び粒度に依存する。
図18はフラグ設定回路500を呼び出すために使用され得る別のメカニズムを図示しており、図17の手法の代わりか、又は図17の手法の使用に加えるかのいずれかである。ステップ665において、復号する新しい命令が存在するかどうかを判断し、存在する場合、復号回路はステップ670においてその命令の実行が、要素が規則的に進行するシーケンスに従う値を有するベクトルを作成するかどうかを判断する。例えば、実行されると規則的に進行するシーケンスを作成することが知られている一定の命令があってもよく、それを使用して特定のデータ値サイズに関して隣接するアドレスについてのアドレスオフセットを表現することができる。ステップ670においてそのような判断がなされる場合、ステップ675において復号器回路は制御信号をフラグ設定回路に送信し、フラグ設定回路に関連するベクトルレジスタについてのフラグ情報を設定させ、その際処理回路4’内で命令が続けて実行される。加えて、ステップ680において制御信号が生成され、処理がステップ665に戻る前に命令に必要とされる演算を処理回路に実施させる。ステップ670において、命令の実行が、要素が規則的に進行するシーケンスに従う値を有するベクトルを作成することを保証されないと判断された場合、処理はステップ675を迂回して直接ステップ680に進む。
図19はフラグ設定回路を呼び出すために使用され得るなおさらなるメカニズムを図示しており、図17及び図18で議論したメカニズムの代わり、又はそれに加えてのいずれかである。この実例において、ステップ685において、ベクトルがメモリからロードされているかが判断される。ベクトルがメモリからベクトルレジスタのうち1つにロードされていると判断されると、ステップ690においてフラグ設定回路内の比較回路を呼び出すことができ、ベクトルの要素を分析して少なくとも要素のサブセットが規則的に進行するシーケンスに従う値を有するかどうかを特定する(これは様々な異なる可能性のあるデータ値サイズについて分析することができる)。次いで、それに応じてフラグ設定回路によって実施された分析の結果としてフラグ情報が設定され得る。図19で特定される比較演算はメモリへのクリティカルアクセスパス上になく、システムの演算に便利なポイントにあり処理回路のパフォーマンスに影響しない回路によって実施され得ることが諒解されよう。フラグ情報が生成されていると、そのベクトルが続いてギャザー又はスキャッター演算のためのアドレスオフセットの入力ベクトルとして使用される場合、ギャザー又はスキャッター演算を処理するために必要とされる潜在的にメモリへのアクセス回数を減らすためにフラグ情報が参照され得る。
以下のコードシーケンスはフラグ設定メカニズムがどのようにパフォーマンスを改善できるかの実例を図示している:
VIWDUP命令の実行は単調にインクリメントするベクトル値を作成し、これがラップするのは稀な場合だけである。一実例の実装形態において、フラグ設定回路は1ワード(すなわち、32ビット)当たり1つのフラグを設定することができ、そのワード内すべての要素が単調にインクリメントしていることを表している。次いでベクトルロード命令が続いて実行される際、これらのフラグが読み取られ得、通常通りギャザーロードを処理する代わりに、これらのフラグが連続する要素を示すならどこでもというよりも隣接するロードが発行され得る。
図20は使用され得る仮想マシンの実装形態を図示している。前述の説明される実施例は考慮される技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本技法を実装している一方、ハードウェアデバイスのいわゆる仮想マシンの実装形態を提供することも可能である。これらの仮想マシンの実装形態は、仮想マシンプログラム730をサポートするホストオペレーティングシステム740を実行させるホストプロセッサ750上で実行する。典型的には、適度な速度で実行する仮想マシンの実装形態を提供するためには大きくパワーのあるプロセッサが要求されるが、そのような手法は一定の状況で正当化されることがあり、例えば互換性又は再利用目的のために別のプロセッサにとってネイティブなコードを実行する願望がある場合などである。仮想マシンプログラム730は仮想のハードウェアインターフェースをゲストプログラム720に提供し、これは仮想マシンプログラム730によってモデル化されるデバイスである現実のハードウェアによって提供されるハードウェアインターフェースと同じである。したがって、上述のメモリアクセスを制御するために使用されるものを含むプログラム命令は、仮想マシンプログラム730を使用してゲストプログラム720内から実行され、その仮想マシンハードウェアとの対話をモデル化することができる。ゲストプログラム720はベアメタルなプログラムであってもよく、又は代替的にはHostOS740がどのように仮想マシンアプリケーション730を実行するかと同様のやり方でアプリケーションを実行するゲストオペレーティングシステムであってもよい。異なる種類の仮想マシンが存在し、いくつかの種類においては、仮想マシンはホストOS740の必要なしに直接ホストハードウェア750上で実行することもまた諒解されよう。
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる設定を有することを意味するために使用される。この文脈において、「設定」はハードウェア又はソフトウェアの構成又は内部接続のやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
本発明の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの精密な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び精神を逸脱することなく、その様々な変形、付加、及び修正がそこになされ得ることを理解されたい。例えば、従属請求項の特徴と独立請求項の特徴との様々な組み合わせが、本発明の範囲を逸脱することなくなされ得る。

Claims (23)

  1. ベクトル処理演算を実施する処理回路と、
    ベクトル命令を復号し、前記ベクトル命令によって指定される前記ベクトル処理演算を実施するように前記処理回路を制御するための命令復号器と
    を備え、
    前記命令復号器は、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、複数の要素を含むベクトルを生成するように前記処理回路を制御し、前記処理回路は、前記複数の要素のうちの第1の要素が前記スカラ開始値に依存し、それぞれの値が前記ラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成するように構成されている、装置。
  2. 前記ベクトル生成命令が、前記スカラ開始値を提供する第1のスカラレジスタを指定する、請求項1に記載の装置。
  3. 前記ラップ制御情報が、即値及びレジスタのうち1つを参照して前記ベクトル生成命令内で特定される、請求項1又は2に記載の装置。
  4. 前記処理回路が、前記ラップ制御情報を使用して第1の境界を決定するように構成され、第2の境界は予め定められる、請求項1から3までのいずれか一項に記載の装置。
  5. 前記ラップ制御情報が、前記第1の境界を決定するために使用されるサイズ指標を提供し、前記第2の境界がゼロ値である、請求項4に記載の装置。
  6. 前記ベクトル生成命令が、前記規則的に進行するシーケンス内で隣接する要素の値同士の差異を決定するために使用される調整量を特定する、請求項1から5までのいずれか一項に記載の装置。
  7. 前記ベクトル生成命令が、
    − 前記ラップ制御情報から決定されるバッファサイズが前記調整量の倍数であるという条件、
    − 前記スカラ開始値が前記調整量の倍数であるという条件、
    − 前記バッファサイズが前記ベクトル内の要素の数を前記調整量で乗算することにより決定されるサイズ値を超えるという条件
    のうち少なくとも1つを満たすように制約される、請求項6に記載の装置。
  8. 前記処理回路が、前記復号器回路により、前記ベクトル生成命令に応じて、それぞれの値が前記ラップ制御情報から決定された前記境界内にあることを保証するために必要に応じてラップするように制約される規則的に増加するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成するように制御される、請求項1から7までのいずれか一項に記載の装置。
  9. 前記処理回路が、前記復号器回路により、前記ベクトル生成命令に応じて、それぞれの値が前記ラップ制御情報から決定された前記境界内にあることを保証するために必要に応じてラップするように制約される規則的に減少するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成するように制御される、請求項1から7までのいずれか一項に記載の装置。
  10. 前記復号器回路が、ベクトルメモリアクセス命令に応答して、メモリ内で、複数のアドレス要素を含む入力アドレスベクトルオペランドによって決定されるアドレスにおいて複数のデータ値にアクセスするように前記処理回路を制御し、
    前記装置が、前記ベクトル生成命令及び関連付けられたベクトルメモリアクセス命令の両方を含む命令のシーケンスを実行するように構成され、前記関連付けられたベクトルメモリアクセス命令が、前記ベクトル生成命令によって生成された前記ベクトルを、前記入力アドレスベクトルオペランドとして特定し、前記複数のデータ値が前記メモリ内の循環バッファ内でアクセスされるようにする、
    請求項1から9までのいずれか一項に記載の装置。
  11. 前記関連付けられたベクトルメモリアクセス命令が、前記循環バッファの開始アドレスを与える基底アドレスを特定し、前記入力アドレスベクトルオペランドが、アクセスされることになる各アドレスを特定するために、前記複数のアドレス要素として、前記基底アドレスと結合されるアドレスオフセットのベクトルを指定する、請求項10に記載の装置。
  12. 所与のベクトル命令に応じて、前記処理回路が、それぞれがベクトル値の一部に対応する複数の処理のビートを実行するように構成され、
    処理回路が、前記ベクトル生成命令、及び前記関連付けられたベクトルメモリアクセス命令のオーバーラップした実行をサポートするように構成され、ここにおいて、前記関連付けられたベクトルメモリアクセス命令の第1のビートのサブセットは前記ベクトル生成命令の第2のビートのサブセットと並列に実行される、
    請求項10又は11に記載の装置。
  13. 前記命令復号器が、前記ベクトル生成命令を復号する際に検出された指定された条件に応答して、前記処理回路による前記ラップ制御情報の使用を無効とし、それによって、前記処理回路は、前記複数の要素のうちの前記第1の要素が前記スカラ開始値に依存し、前記複数の要素の前記値がいかなるラップ制約なしに規則的に進行するシーケンスに従うように前記ベクトルを生成するように構成される、請求項1から12までのいずれか一項に記載の装置。
  14. 前記指定された条件が、前記ラップ制御情報を特定するために予約値が使用されることを含む、請求項13に記載の装置。
  15. 一組のスカラレジスタをさらに備え、
    前記ベクトル生成命令が、前記スカラ開始値を提供する第1のスカラレジスタ、前記ラップ制御情報を特定する第2のスカラレジスタを指定し、前記第1及び第2のスカラレジスタの指定は、前記第2のスカラレジスタが選ばれる前記一組内のレジスタの第2のグループとオーバーラップしない前記一組内のスカラレジスタの第1のグループから前記第1のレジスタが選択されるように制約される、請求項1から14までのいずれか一項に記載の装置。
  16. 前記処理回路が、前記スカラ開始値から導出した入力値及び規則的に進行する調整値のシーケンスを使用して前記ベクトルについての複数の候補要素を生成するための加算器回路と、
    それぞれの候補要素から、前記ベクトル内に含めるための出力要素を生成するための修正回路とを備え、それぞれの候補要素について、前記修正回路がラップ条件が存在するかどうかを判断するように構成され、前記ラップ条件が存在する場合は、前記出力要素を生成するために前記ラップ制御情報に基づいて前記候補要素を修正するための算術演算を実施し、そうでなければ、修正されない前記候補要素を前記出力要素として使用する、請求項1から15までのいずれか一項に記載の装置。
  17. 前記処理回路が、前記復号器回路により、前記ベクトル生成命令に応じて、それぞれの値が前記ラップ制御情報から決定された前記境界内にあることを保証するために必要に応じてラップするように制約される規則的に減少するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成するように制御され、
    前記加算器回路は、前記入力値から前記調整値のうち関連付けられる1つを減算することによりそれぞれの候補要素を生成するために別個の加算器ブロックを備え、各加算器ブロックからのキャリーアウト信号が、前記関連付けられている候補要素について前記ラップ条件が存在するかどうかを判断するために使用される、請求項16に記載の装置
  18. 前記処理回路が、前記復号器回路により、前記ベクトル生成命令に応じて、それぞれの値が前記ラップ制御情報から決定された前記境界内にあることを保証するために必要に応じてラップするように制約される規則的に増加するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成するように制御され、
    前記入力値が、前記スカラ開始値から前記ラップ制御情報から導出した上限値を減算することによって、前記開始アドレスから導出され、
    前記加算器回路が、前記調整値のうち関連付けられる1つを前記入力値に加算することによりそれぞれの候補要素を生成するために別個の加算器ブロックを備え、各加算器ブロックからのキャリーアウト信号が、前記関連付けられている候補要素について前記ラップ条件が存在するかどうかを判断するために使用される、請求項16に記載の装置。
  19. 前記修正回路は、前記ラップ条件が存在する場合、前記出力要素を生成するために、前記ラップ制御情報から導出した上限値を前記候補要素へ加算することを前記算術演算として実施するように構成される、請求項16から18までのいずれか一項に記載の装置。
  20. ベクトル処理演算を実施する処理回路と、ベクトル命令を復号し、前記ベクトル命令によって指定される前記ベクトル処理演算を実施するように前記処理回路を制御するための命令復号器とを有する装置を動作させる方法であって、
    スカラ開始値及びラップ制御情報を特定するベクトル生成命令を復号するステップと、
    前記復号するステップに応答して、複数の要素を含むベクトルを生成するように前記処理回路を制御するステップであって、前記処理回路が、前記複数の要素のうちの第1の要素が前記スカラ開始値に依存し、それぞれの値が前記ラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに前記複数の要素の前記値が従うように、前記ベクトルを生成する、ステップ
    を含む、方法。
  21. ベクトル処理演算を実施するための処理手段と、
    ベクトル命令を復号し、前記ベクトル命令によって指定される前記ベクトル処理演算を実施するように前記処理手段を制御するための命令復号器手段と
    を備え、
    前記命令復号器手段が、スカラ開始値及びラップ制御情報を特定するベクトル生成命令に応答し、前記処理手段が複数の要素を含むベクトルを生成するように制御し、前記処理手段が、前記複数の要素のうちの第1の要素がスカラ開始値に依存し、それぞれの値が前記ラップ制御情報から決定された境界内にあることを保証するために必要に応じてラップするように制約される規則的に進行するシーケンスに前記複数の要素の値が従うように、前記ベクトルを生成する、装置。
  22. 請求項1から19までのいずれか一項に記載の装置に対応する命令実行環境を提供するようにホストデータ処理装置を制御するためのプログラム命令を含む、仮想マシンコンピュータプログラム。
  23. 請求項22に記載の仮想マシンコンピュータプログラムを記憶するコンピュータ可読記憶媒体。
JP2019531916A 2016-12-22 2017-11-08 ベクトル生成命令 Active JP7048612B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1621965.1 2016-12-22
GB1621965.1A GB2558220B (en) 2016-12-22 2016-12-22 Vector generating instruction
PCT/GB2017/053355 WO2018115807A1 (en) 2016-12-22 2017-11-08 Vector generating instruction

Publications (2)

Publication Number Publication Date
JP2020502669A true JP2020502669A (ja) 2020-01-23
JP7048612B2 JP7048612B2 (ja) 2022-04-05

Family

ID=58360452

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019531916A Active JP7048612B2 (ja) 2016-12-22 2017-11-08 ベクトル生成命令

Country Status (9)

Country Link
US (1) US11714641B2 (ja)
EP (1) EP3559803B1 (ja)
JP (1) JP7048612B2 (ja)
KR (1) KR102458467B1 (ja)
CN (1) CN110073332B (ja)
GB (1) GB2558220B (ja)
IL (1) IL267038B (ja)
TW (1) TWI770079B (ja)
WO (1) WO2018115807A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7141401B2 (ja) * 2017-08-24 2022-09-22 ソニーセミコンダクタソリューションズ株式会社 プロセッサおよび情報処理システム
US11126691B1 (en) 2020-06-23 2021-09-21 Arm Limited Apparatus and method for generating a vector of elements with a wrapping constraint
CN118012354B (zh) * 2024-04-10 2024-07-02 芯来智融半导体科技(上海)有限公司 数据写入方法、装置、设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130275727A1 (en) * 2011-12-22 2013-10-17 Seth Abraham Processors, Methods, Systems, and Instructions to Generate Sequences of Integers in which Integers in Consecutive Positions Differ by a Constant Integer Stride and Where a Smallest Integer is Offset from Zero by an Integer Offset

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4819152A (en) * 1985-04-05 1989-04-04 Raytheon Company Method and apparatus for addressing a memory by array transformations
US5197130A (en) 1989-12-29 1993-03-23 Supercomputer Systems Limited Partnership Cluster architecture for a highly parallel scalar/vector multiprocessor system
US6397318B1 (en) * 1998-04-02 2002-05-28 Cirrus Logic, Inc. Address generator for a circular buffer
US6760830B2 (en) 2000-12-29 2004-07-06 Intel Corporation Modulo addressing
US6604169B2 (en) * 2001-06-01 2003-08-05 Microchip Technology Incorporated Modulo addressing based on absolute offset
US7610466B2 (en) * 2003-09-05 2009-10-27 Freescale Semiconductor, Inc. Data processing system using independent memory and register operand size specifiers and method thereof
US8051226B2 (en) * 2008-06-13 2011-11-01 Freescale Semiconductor, Inc. Circular buffer support in a single instruction multiple data (SIMD) data processor
US8060724B2 (en) 2008-08-15 2011-11-15 Freescale Semiconductor, Inc. Provision of extended addressing modes in a single instruction multiple data (SIMD) data processor
US8793472B2 (en) * 2008-08-15 2014-07-29 Apple Inc. Vector index instruction for generating a result vector with incremental values based on a start value and an increment value
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US9552206B2 (en) 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
US10803009B2 (en) * 2011-07-14 2020-10-13 Texas Instruments Incorporated Processor with table lookup processing unit
US9268569B2 (en) 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict
US9378065B2 (en) 2013-03-15 2016-06-28 Advanced Elemental Technologies, Inc. Purposeful computing
US9430369B2 (en) 2013-05-24 2016-08-30 Coherent Logix, Incorporated Memory-network processor with programmable optimizations
US9330011B2 (en) 2013-09-20 2016-05-03 Via Alliance Semiconductor Co., Ltd. Microprocessor with integrated NOP slide detector
US9507601B2 (en) 2014-02-19 2016-11-29 Mediatek Inc. Apparatus for mutual-transposition of scalar and vector data sets and related method
US9898292B2 (en) 2015-02-25 2018-02-20 Mireplica Technology, Llc Hardware instruction generation unit for specialized processors

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130275727A1 (en) * 2011-12-22 2013-10-17 Seth Abraham Processors, Methods, Systems, and Instructions to Generate Sequences of Integers in which Integers in Consecutive Positions Differ by a Constant Integer Stride and Where a Smallest Integer is Offset from Zero by an Integer Offset

Also Published As

Publication number Publication date
KR102458467B1 (ko) 2022-10-25
GB201621965D0 (en) 2017-02-08
WO2018115807A1 (en) 2018-06-28
EP3559803A1 (en) 2019-10-30
TWI770079B (zh) 2022-07-11
GB2558220B (en) 2019-05-15
US11714641B2 (en) 2023-08-01
CN110073332A (zh) 2019-07-30
IL267038B (en) 2021-07-29
TW201823972A (zh) 2018-07-01
JP7048612B2 (ja) 2022-04-05
KR20190094195A (ko) 2019-08-12
EP3559803B1 (en) 2021-05-12
CN110073332B (zh) 2023-03-07
US20190369995A1 (en) 2019-12-05
GB2558220A (en) 2018-07-11
IL267038A (en) 2019-07-31

Similar Documents

Publication Publication Date Title
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
JP5699554B2 (ja) ベクトル処理回路、命令発行制御方法、及びプロセッサシステム
CN108319559B (zh) 用于控制矢量内存存取的数据处理装置及方法
US10628155B2 (en) Complex multiply instruction
US9965275B2 (en) Element size increasing instruction
JP7048612B2 (ja) ベクトル生成命令
JP3817436B2 (ja) プロセッサおよびリネーミング装置
US20200371793A1 (en) Vector store using bit-reversed order
US11347506B1 (en) Memory copy size determining instruction and data transfer instruction
WO2023148467A1 (en) Technique for performing memory access operations
JP2006302324A (ja) データ処理装置
JP2005134987A (ja) パイプライン演算処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201029

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210929

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211026

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220125

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220324

R150 Certificate of patent or registration of utility model

Ref document number: 7048612

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150