JP7007371B2 - ベクトル命令のための要素間アドレス・ハザードの取扱い - Google Patents

ベクトル命令のための要素間アドレス・ハザードの取扱い Download PDF

Info

Publication number
JP7007371B2
JP7007371B2 JP2019513912A JP2019513912A JP7007371B2 JP 7007371 B2 JP7007371 B2 JP 7007371B2 JP 2019513912 A JP2019513912 A JP 2019513912A JP 2019513912 A JP2019513912 A JP 2019513912A JP 7007371 B2 JP7007371 B2 JP 7007371B2
Authority
JP
Japan
Prior art keywords
data
hazard
vector
instruction
transaction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2019513912A
Other languages
English (en)
Other versions
JP2019534504A (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 JP2019534504A publication Critical patent/JP2019534504A/ja
Application granted granted Critical
Publication of JP7007371B2 publication Critical patent/JP7007371B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications

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)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Description

本技法はデータ処理の分野に関する。
いくつかのデータ処理システムは、命令のソース・オペランド又は結果値が複数のデータ要素を含むベクトルであるベクトル命令の処理をサポートしている。単一の命令に応答して多数の全く異なるデータ要素の処理をサポートすることにより、コード密度を改善することができ、また、命令の取込み及び復号化のオーバヘッドを低減することができる。データ値をベクトル・オペランドのそれぞれの要素中にロードし、且つ、単一のベクトル命令を使用する時点でいくつかの要素のデータ値を処理することにより、処理されるべきデータ値のアレイをより効果的に処理することができる。
少なくともいくつかの実例は、
命令に応答してデータ処理を実施するための処理回路機構であって、ベクトル・ロード命令に応答して、データ記憶装置のそれぞれの記憶位置からのデータを、ベクトル値のそれぞれのデータ要素にロードするように構成され、ベクトル・ストア命令に応答して、ベクトル値のそれぞれのデータ要素からのデータをデータ記憶装置のそれぞれの記憶位置に記憶するように構成される処理回路機構を備え、
処理回路機構は、トランザクション開始事象に応答して、1つ又は複数の後続する命令を投機的に実行し、トランザクション終了事象に応答して、トランザクション開始事象に引き続いて投機的に実行された1つ又は複数の後続する命令の投機的結果をコミットし、
装置は、トランザクション開始事象に引き続いて投機的に実行された以前のベクトル・ロード命令に対するデータ要素Jに対応するアドレスと、トランザクション開始事象に引き続いて投機的に実行された以後のベクトル・ストア命令に対するデータ要素Kに対応するアドレスとの間に要素間アドレス・ハザードが生じているかどうかを検出するためのハザード検出回路機構を備え、KはJとは異なり、また、以前のベクトル・ロード命令及び以後のベクトル・ストア命令は、いずれも、処理回路機構によって処理された命令の同じスレッドからのものであり、
ハザード検出回路機構は、要素間アドレス・ハザードの検出に応答して、トランザクション開始事象に引き続く命令のそれ以上の処理を中止するように処理回路機構をトリガし、前記投機的結果がコミットされることを防止するように構成される、装置を提供する。
少なくともいくつかの実例は、
命令に応答してデータを処理するための手段であって、ベクトル・ロード命令に応答して、データ記憶装置のそれぞれの記憶位置からのデータを、ベクトル値のそれぞれのデータ要素にロードするように構成され、また、ベクトル・ストア命令に応答して、ベクトル値のそれぞれのデータ要素からのデータをデータ記憶装置のそれぞれの記憶位置に記憶するように構成される、処理するための手段を備え、
処理するための手段は、トランザクション開始事象に応答して、1つ又は複数の後続する命令を投機的に実行し、また、トランザクション終了事象に応答して、トランザクション開始事象に引き続いて投機的に実行された1つ又は複数の後続する命令の投機的結果をコミットし、
装置は、トランザクション開始事象に引き続いて投機的に実行された以前のベクトル・ロード命令に対するデータ要素Jに対応するアドレスと、トランザクション開始事象に引き続いて投機的に実行された以後のベクトル・ストア命令に対するデータ要素Kに対応するアドレスとの間の要素間アドレス・ハザードを検出するための手段を備え、KはJとは異なり、また、以前のベクトル・ロード命令及び以後のベクトル・ストア命令は、いずれも、処理回路機構によって処理された命令の同じスレッドからのものであり、
検出するための手段は、要素間アドレス・ハザードの検出に応答して、トランザクション開始事象に引き続く命令のそれ以上の処理を中止するように処理のための手段をトリガし、前記投機的結果がコミットされることを防止するように構成される、装置を提供する。
少なくともいくつかの実例は、
トランザクション開始事象に応答して、1つ又は複数の後続する命令を投機的に実行するステップと、
ベクトル・ロード命令に応答して、データ記憶装置のそれぞれの記憶位置からのデータを、ベクトル値のそれぞれのデータ要素にロードするステップと、
ベクトル値のそれぞれのデータ要素からのデータをデータ記憶装置のそれぞれの記憶位置に記憶するためのベクトル・ストア命令に応答して、ベクトル・ロード命令に対するデータ要素Jに対応するアドレスと、ストア命令に対するデータ要素Kに対応するアドレスとの間に要素間アドレス・ハザードが生じているかどうかを検出するステップであって、KはJとは異なり、また、以前のベクトル・ロード命令及び以後のベクトル・ストア命令は、いずれも命令の同じスレッドからのものであるステップと、
要素間アドレス・ハザードの検出に応答して、1つ又は複数の後続する命令のそれ以上の処理を中止し、1つ又は複数の後続する命令の投機的結果がコミットされることを防止するステップと、
トランザクション終了事象に応答して、1つ又は複数の後続する命令の投機的結果をコミットするステップと
を含むデータ処理方法を提供する。
本技法の他の態様、特徴及び利点は、添付の図面に関連して読まれるべき実例についての以下の説明から明らかになるであろう。
ベクトル命令の処理をサポートするデータ処理装置の実例を示す略図である。 連続するベクトル・ロード命令及び連続するベクトル・ストア命令の実例を示す略図である。 ベクトル化されたコードの実行中にトランザクション開始事象に応答する方法を示す流れ図である。 ベクトル・ロード命令に応答してハザード追跡データを更新する方法を示す流れ図である。 トランザクション消去事象に応答してハザード追跡データを消去する方法を示す流れ図である。 要素間アドレス・ハザードを検出する方法を示す流れ図である。 トランザクション終了事象に応答する方法を示す流れ図である。 データと共にキャッシュ内に記憶されたハザード追跡データの第1の実例を示す図である。 連続するロード命令によってアクセスされる最小アドレス及び最大アドレスが格納構造で追跡されるハザード追跡データの第2の実例を示す図である。 非連続(又はギャザー)ベクトル・ロード命令の実例を示す図である。 ハザード追跡データの第3の実例を示す図である。
装置は、ベクトル命令の処理をサポートする処理回路機構を有することができる。ベクトル命令の一実例はベクトル・ロード命令であり、このベクトル・ロード命令に応答して、データ記憶装置のそれぞれの記憶位置からのデータを、ベクトル値のそれぞれのデータ要素にロードされる。別の実例はベクトル・ストア命令であり、処理回路機構は、このベクトル・ストア命令に応答して、ベクトル値のそれぞれのデータ要素からのデータをデータ記憶装置のそれぞれの記憶位置に記憶することができる。例えばベクトル・ロード/ストア命令のために使用されるベクトル値はレジスタに記憶することができる。
処理回路機構は、トランザクション開始事象に応答して、1つ又は複数の後続する命令を投機的に実行し、また、トランザクション終了事象に応答して、トランザクション開始事象に引き続いて投機的に実行されたこれらの1つ又は複数の後続する命令の投機的結果をコミットする。ハザード検出回路機構は、トランザクション開始事象に引き続いて投機的に実行された以前のベクトル・ロード命令に対するデータ要素Jに対応するアドレスと、トランザクション開始事象に引き続いて同じく投機的に実行された以後のベクトル・ストア命令に対するデータ要素Kに対応するアドレスとの間に要素間アドレス・ハザードが生じているかどうかを検出するために提供される。K及びJは互いに等しくない整数値である。以前のベクトル・ロード命令及び以後のベクトル・ストア命令は、いずれも、処理回路機構によって処理された命令の同じスレッドからのものである。ハザード検出回路機構は、要素間アドレス・ハザードの検出に応答して、トランザクション開始事象に引き続く命令のそれ以上の処理を中止するように処理回路機構をトリガし、投機的結果がコミットされることを防止することができる。
処理される命令の同じスレッド内の以後の命令と以前の命令の間のアドレス・ハザードをハザード検出回路機構が検出する必要があることはすぐには明らかではないことがあり得る。このような命令は、通常、逐次的に作用することが予期され、したがってプログラム実行の異なるスレッドによるデータへの並列アクセスのために典型的に使用されるハザード検出又はトランザクション取扱い等の機構は不要であろう。しかしながらベクトル処理をサポートする装置では、ベクトル命令に対して、一連のベクトル命令のためのベクトル処理のそれぞれのレーンにマップされたループの複数の反復を使用して、スカラー・コードで書かれたプログラム・ループの多数の反復をベクトル化することが広く使用されている。したがってベクトル・ロード命令は、ループの多数の連続反復によって処理される入力をベクトル値のそれぞれの要素中にロードすることができ、1つ又は複数のベクトル命令は、次に、処理のそれぞれのレーン内のこれらの要素の各々を処理することができ、また、次に、ベクトル・ストア命令は、個々のレーンの結果をデータ記憶装置内のそれぞれの記憶位置に記憶することができる。これにより、スカラー命令を使用して個々の反復を個別に実行する場合と比較すると、性能を改善することができ、また、命令キャッシング、取込み及び復号化のオーバヘッドを低減することができる。
しかしながらスカラー・ループの異なる反復間には相互依存性が存在していてもよく、例えば以前の反復は、以後の反復に対する入力として使用される値をデータ記憶装置に書き込むことができる。ループに対するこのような反復がベクトル命令の同じシーケンスの異なるレーンにマップされる場合、ベクトル化されるループの以後の反復に対応するレーンは、以前の反復に対応するレーンによって未だ更新されていない値をロードし得るため、結果のうちのいくつかは不適切であることがあり得る。いくつかのハザードはコンパイル時に静的に識別することができるが、いくつかのロード/ストア・アドレスは、データ記憶装置から読み出される他の値に依存しているため、これはすべての潜在的ハザードに対して保護することはできず、したがってハザードが生じるか否かは、ランタイム時に動的に変化し得る。
動的ハザードに対して保護するための1つの手法は、ベクトル・シーケンスの前に追加コードを提供して、それぞれのレーンにおけるロード/ストアによって使用されるアドレスをチェックし、それによりアドレス・ハザードが存在する場合にコードがベクトル化されることを防止することであり得る。しかしながらこのようなチェックは遅く、また、ベクトル化されたループの反復毎にこれらのチェックのペナルティを負うことは性能に対して有害であり得る。別の手法は、コンパイラの場合、異なるレーン内のロード/ストア・アドレス間にハザードが存在し得るため、スカラー・ループをベクトル化してはならないこと、また、その代わりに、スカラー命令を使用して逐次的に実施された元のプログラム・コードにおけるループの個々の反復を使用して処理しなければならないことを保守的に仮定することであり得る。しかしながら実際には要素間アドレス・ハザードは比較的まれであり、ごく少数の事例は適切な結果をもたらし得ないため、したがってこの手法には、ほとんどの事例においてベクトル化を介して達成することができる何らかの潜在的性能利点を棒に振る危険がある。
これらの問題は、トランザクション開始事象に引き続く一連の命令の投機的な実行の開始を処理回路機構に許容し、且つ、トランザクション終了事象に引き続いて、実行された命令の投機的結果のコミットを許容することによって対処することができる。ハザード検出回路機構は、トランザクション開始事象とトランザクション終了事象の間に生じる要素間アドレス・ハザードを検出し、且つ、トランザクション終了事象に到達する前にハザードが検出されると、トランザクション開始事象に引き続く命令のそれ以上の処理の中止をトリガするために提供することができ、したがって投機的結果がコミットされることが防止される。この手法によれば、投機的に実行された結果は、ハザードの事象において破棄することができるため、アドレス・ハザードが存在しない場合におけるコード自体の進行がハザード・チェックのために遅延することはなく、したがってハザードが存在しないことを仮定して安全に命令の実行を継続することができる。また、実際に生じる静的ハザード又は動的ハザードを検出するためのハードウェア・サポートが存在しているため、コンパイラは、最悪事例シナリオを保守的に仮定する必要がなく、したがってループの反復間における相互依存性の可能性が存在する場合であっても、スカラー・ループのベクトル化を許容することができる。したがって性能を改善することができる。
要素間アドレス・ハザードが検出されると、ハザード検出回路機構は、アーキテクチャ状態データを、トランザクション開始事象に応答して捕獲(キャプチャー)されたアーキテクチャ状態データの先行するバージョンに回復するように処理回路機構を同じくトリガすることができる。例えばレジスタ内の、トランザクション開始事象に引き続く命令の処理で生じたデータ値への変更は、トランザクション開始事象の時点で捕獲された以前の状態にロール・バックされ得る。一方、投機的に実施されたすべてのロード/ストア操作の結果も同じく巻き戻すことができる。例えばストア命令と結合した書込みデータは、データ記憶装置のキャッシュ又はメモリ内にバッファすることができる。バッファされたこれらのデータ値は、要素間アドレス・ハザードが検出されると、破棄し、無効にし、又は重ね書きすることができ、或いはトランザクション終了事象に到達すると状態にコミットすることができる。
通常、ハザード検出回路機構は、以前のベクトル・ロード命令のデータ要素Jと、以後のストア命令のデータ要素Kとの間の要素間アドレス・ハザードを検出することができ、KはJとは異なる。いくつかの事例では、ハザード・チェックは、それぞれロード及びストアのための異なるデータ要素位置の任意の対の間のあらゆるアドレス・ハザードをチェックすることができる。それぞれのロード命令及びストア命令におけるベクトル内の異なる位置におけるデータ要素は、典型的にはベクトル化されるスカラー・ループの異なる反復に対応することになり、したがって相互要素ハザードをチェックすることにより、1つの反復がループの別の反復によって設定された値に頼っている事例を検出することができる。
しかしながら実際にはほとんどのコンパイラは、典型的には、シーケンス内のベクトルの最も低い要素から最も高い要素まで、ベクトルの最も低い数の要素(要素0)に割り当てられるスカラー・ループの最も前の反復、及びベクトルの最も高い数の要素(要素N-1、Nはベクトル中の要素の数である)に割り当てられるループの最も後の反復でベクトルを満たすことによってスカラー・コードをベクトル化する。実際、いくつかのベクトル・アーキテクチャは、最初の要素から最後の要素までベクトルを満たすようにコンパイラに要求することができる。通常、スカラー・ループの以後の反復をスカラー・ループの以前の反復によって既に読み取られた値に設定することは問題ではないため、いくつかの事例では、ハザード検出回路機構は、そのハザード検出をK<Jであるハザードの検出に限定することができる(ハザードとなるアドレスは、以前のベクトル・ロード命令のもっと高い要素J、及び以後のベクトル・ストア命令のもっと低い要素Kに対応する)。この手法は、アドレスを比較しなければならない要素の対の数を少なくするため、多くの事例においてハザード追跡を簡略化することができる。また、ハザード検出をK<Jである事例に限定することにより、トランザクションが中止される可能性がより小さいため、同じく性能を改善することができる。それにもかかわらずいくつかのシステムは、これがより適切であると見なされる場合(例えばコンパイラがループ反復を上で説明したボトム-アップ手法とは異なる方法でベクトル・レーンにマップする自由を有している場合)、依然として、ロード及びストアの別様に位置している要素の任意の対のために使用されるアドレス間のハザードを検出することができる。
プログラマ又はコンパイラは、トランザクション開始事象及びトランザクション終了事象を使用して、要素間アドレス・ハザードの危険にさらされている命令のシーケンスを識別することができる。トランザクション開始事象及びトランザクション終了事象は、処理回路機構によってサポートされる専用トランザクション開始命令及び専用トランザクション終了命令であってもよい。例えばトランザクション開始命令及びトランザクション終了命令は、処理回路機構によって処理される命令を復号する命令復号器によってサポートされる固有プログラム命令であってもよい。処理回路機構は、トランザクション開始命令に応答して、上で説明したアーキテクチャ状態の捕獲等の後続する命令の投機的処理のために処理回路機構を準備するための操作を実施することができる。トランザクション終了命令に応答して投機的結果をコミットすることができ、また、アーキテクチャ状態の既に捕獲済みのすべてのバージョンを破棄することができる。したがってプログラマ/コンパイラは、命令をトランザクション開始/終了命令で拘束することにより、トランザクションとして処理されるべき命令を識別することができる。
別法としては、トランザクション開始事象及びトランザクション終了事象を信号発信するための固有命令を提供する代わりに、他の機構を使用することも可能である。例えばトランザクション開始事象は、汎用命令を使用して制御レジスタ内の制御ビットをセットし、それによりトランザクションの開始に印を付けることによって信号発信することができ、また、終了事象は、制御レジスタを更新してトランザクションの終了を信号発信することによって同様の方法で実現することができる。
ハザード追跡記憶回路機構は、トランザクション開始事象に引き続いて投機的に実行された1つ又は複数の以前のベクトル・ロード命令のために使用されたアドレスを追跡するためのハザード追跡データを記憶するために提供することができる。このハザード追跡データは、次に、以後のベクトル・ストア命令に遭遇した際にハザード検出回路機構により使用され、要素間アドレス・ハザードが存在しているかどうかを検出することができる。
いくつかの事例では、ハザード追跡記憶回路機構は、データ記憶装置自体の一部を備えることができる(この場合、データは、ベクトル・ロード命令又はベクトル・ストア命令に応答してアクセスされる)。例えばハザード追跡データは、データ自体と共にキャッシュに記憶することができる。別法としては、ハザード追跡記憶回路機構は、データ記憶装置によって取り扱われるべきロード要求又はストア要求を管理するために使用される、処理回路機構によって発行されるロード命令又はストア命令を待ち行列にするためのロード/ストア待ち行列等のデータ構造の一部を含むことも可能であり、或いはメモリに書き込まれるデータ値を記憶するためのストア・バッファを含むことも可能である。別法としては、ハザード追跡記憶回路機構は、例えばハザード検出回路機構によって維持される専用構造のようなロード要求又はストア要求を管理するために提供される回路機構とは全く別のものであってもよい。
ハザード検出回路機構は、トランザクション開始事象に応答してハザード追跡データを消去することができる。これは、以前のトランザクションによって既にアクセス済みの別のアドレスと同じアドレスを新しいトランザクションがアクセスした場合のハザード検出回路機構によるハザードの検出を防止することができる。別法としては、ハザード追跡データは、トランザクション終了事象に応答して消去することができ、したがってハザード追跡データは、新しいトランザクションの開始時に初期化されることになる。
また、ハザード検出回路機構は、トランザクション開始事象に引き続いて生じる(但し、トランザクション終了事象の前)トランザクション消去事象に応答してハザード追跡データを消去することも可能である。例えばトランザクション消去事象は、トランザクション消去命令によってトリガされ得る(この命令は、命令復号器によってサポートされる固有命令であってもよい)。専用トランザクション消去命令を提供してハザード追跡データを消去することは、1つのトランザクション内における、ベクトル化されたループの複数の反復の実行を許容するためにとりわけ有用であり得る。トランザクション開始事象又はトランザクション終了事象に応答して実施されるアクションは、性能オーバヘッドをもたらし得る。例えばトランザクション開始事象に応答してアーキテクチャ状態を保存する必要があり、一方、トランザクション終了時には投機的結果をコミットする必要があり得る。スカラー・ループがそれぞれN個の要素のベクトルを使用してベクトル化される場合、ベクトル化は、ループのN個の連続反復のブロックに対応する1つのベクトルのレーン内にハザードを導入し得るが、例えば反復N+1は、あらゆる事例において、すべての先行するN個の反復が完了した後に実施されることになるため、ベクトル化は、N個を超える反復を隔てた反復間にはハザードを導入しない。したがって不要な中止を回避するためには、N個の反復が処理されるとハザード追跡データを消去することが場合によっては望ましい。しかしながらループのN個の反復の個々のブロックを個別のトランザクションとして実行すると、N個の反復が完了する毎にトランザクション入口/出口オーバヘッドをもたらし得る。このオーバヘッドは、トランザクション自体を実際に終了させることなくハザード追跡データを消去することができることを信号発信するトランザクション消去命令を提供することによって低減することができる。この方法によれば、ループに対するN個の反復のブロックがベクトル・コード・シーケンス中で処理される毎にトランザクション消去命令を実行することができ、また、ループのN個を超える反復を単一のトランザクション内で処理することができ、その一方でハザードに対して保護される。
通常、ハザード検出回路機構は、トランザクション開始事象に引き続いて投機的に実行されるベクトル・ロード命令のために使用されるアドレスに基づいてハザード追跡データを更新することができる。ハザード検出回路機構は、次に、ハザード追跡データを後続するベクトル・ストア命令によって使用されたアドレスと比較し、要素間アドレス・ハザードが生じたかどうかを検出することができる。
いくつかの事例では、ハザード検出回路機構は、すべてのベクトル・ロード命令に応答してハザード追跡データを更新することはできないが、更新を所定のタイプのベクトル・ロード命令に限定することは可能であり、ハザード追跡データの更新は、その所定のタイプ以外のベクトル・ロード命令に応答して抑制される(追跡データに対する更新は、スカラー・ロード命令に応答して同じく抑制することができる)。例えば所定のタイプのベクトル・ロード命令は、その演算コードによって、命令符号化内のフラグによって、或いは後続するベクトル・ロード命令がハザード検出回路機構を使用して追跡されるべきタイプのベクトル・ロード命令であろうことを信号発信するベクトル・コード内のベクトル・ロード命令の前に置かれるヒント命令等の、ベクトル・ロード命令の符号化には無関係の暗黙の指示によって他のタイプのベクトル・ロード命令から区別することができる。
例えば特定のロードは、すべての後続するストアのアドレスとは異なることが分かっている静的に決定されたアドレスを使用するため、或いはベクトル化されるべきスカラー・ループの異なる反復間に相互依存性が存在しないため、プログラマ又はコンパイラは、しばしば、特定のロードは要素間アドレス・ハザードの原因になる危険がないことに気が付き得る。一方、後続するストアと衝突する危険が存在する特定のロードが存在する場合、所定のタイプのベクトル・ロード命令をそのロードのために使用することができる。ハザード追跡データの更新を所定のタイプのベクトル・ロード命令に限定することにより、これは、追跡されるべきアドレスの数を少なくする(これは、利用可能な追跡記憶容量の使用をより有効にすることができる)。また、以下で考察されるように、いくつかの事例では、アドレス追跡のハードウェア・コストを低減するためにアドレス追跡を比較的不正確にすることができ、例えばアドレス追跡は、個別のアドレスではなく、アドレスのブロックの細分性でロード/ストア・アクセスを追跡することも可能である。これは、すべてのタイプのロードに対するハザードを検出することは、検出された偽りの断定的ハザードに起因する中止がより頻繁になる危険があり得ることを意味しており、ロード及びストアは、アドレスの同じブロックをアクセスするが、同じアドレスを実際にアクセスしない。ハザード検出を所定のタイプのロードに限定することにより、ハザードが生じることはないであろうことをプログラマ/コンパイラが既に示している(所定のタイプのロードを使用しないことを選択することによって)他のタイプのロードに対する偽りの断定的ハザードによってトランザクションが不必要に中止されることはない。
ハザード追跡データを実現するいくつかの方法が存在している。一実例では、ハザード追跡データは多数の追跡入口を含むことができ、個々の追跡入口は、アドレスのそれぞれのブロックに対応し、且つ、アドレスのそのブロック内のあるアドレスがトランザクション開始事象に引き続いて投機的に実行された以前のベクトル・ロード命令のために使用された最も高いデータ要素位置を識別する。この文脈においては、最も高いデータ要素位置は、ベクトル・オペランドの最上位端に最も近い位置を意味している。ハザード検出回路機構は、次に、以後のベクトル・ストア命令に対する所与のデータ要素位置のために使用されたアドレスを含むアドレスのブロックに対応する追跡入口が、上記所与のデータ要素位置より高いデータ要素位置を識別すると、以後のベクトル・ストア命令に対する要素間アドレス・ハザードを検出することができる(これは、要素間ハザード検出を上で言及したK<Jの事例に限定する手法の実例である)。要約すると、アドレスの所与のブロックにアクセスした最も高い要素を追跡し、且つ、後続するストアがより低いデータ要素位置からアドレスのそのブロックへのアクセスを試行するとハザードを信号発信することにより、これは、ループの以後の反復が、ループの以前の反復が値を更新する前に順番を狂わせて値にアクセスした(ハザードを読み取った後に書き込む)事例を検出することができ、その場合、トランザクションの中止をトリガすることができる。
ハザードを追跡するこの手法の場合、1つのオプションは、追跡入口をデータ自体と共にキャッシュ内に記憶することである。即ちデータ記憶装置は、データを記憶するための多数のキャッシュ・ラインを含むキャッシュを備えることができ、また、追跡入口は、個々のキャッシュ・ラインがそのキャッシュ・ラインに対応するアドレスの1つ又は複数のブロックのための追跡入口のうちの1つ又は複数と結合されているキャッシュに記憶することができる。
追跡入口がアドレスのブロックへのアクセスを追跡する細分性は変更することができる。いくつかの事例では、個々のキャッシュ・ラインは単一の追跡入口を備えることができ、したがって以後のストアがロードより低い要素位置からの以前のロードと同じキャッシュ・ラインにアクセスすると、ハザードを検出することができる(ストアが以前のロードと同じキャッシュ・ライン内の異なるアドレスに実際にアクセスしても)。他の実施態様は、もっと細かく細分されたレベルでアクセスを追跡することができ、また、キャッシュ・ラインの異なる部分へのアクセスを追跡するために、キャッシュ・ライン毎に複数の追跡入口を提供して、ハザードのより正確な検出を提供することができる。したがって検出されたハザードは、ロード/ストアが同じアドレスに実際にアクセスしたであろうことを必ずしも意味しているわけではなく、ハザード検出回路機構は、アクセスが衝突する危険を不正確な追跡データに基づいて単純に検出し得た可能性があることは認識されよう。より正確なハザード追跡/それほどは正確ではないハザード追跡のハードウェア・コストと性能利点の間にはトレード・オフが存在している。
キャッシュを使用して、先行するロードによってアクセスされたアドレスを追跡するための追跡入口を記憶する場合、他のデータをキャッシュに記憶する必要がある場合は、所与のキャッシュ・ラインがキャッシュから追い払われることがあり得る。この時点では、対応する追跡入口も同じく追い払われており、したがって先行するロード・アドレスに関する情報が失われる可能性がある。したがってアドレスの対応するブロック内の少なくとも1つのアドレスがトランザクション開始事象以降の以前のベクトル・ロード命令のために使用されたことを示す追跡入口を有するキャッシュ・ラインが追い払われると、ハザード検出回路機構は、ハザードが実際に検出された場合と同様の方法で、トランザクション開始事象に引き続く命令のそれ以上の処理を中止するように処理回路機構をトリガし、投機的結果がコミットされることを防止することができる。実際にはトランザクションは比較的短くすることができ、したがってロード命令によって既にアクセス済みのデータがトランザクションの終了(又は消去命令)に到達する前に追い払われる機会を比較的少なくすることができるが、そのまれな事例においてトランザクションを中止する能力を提供することにより、追跡データはもはやキャッシュには存在しないため、これは、見逃されるハザードに対してガードし、また、追い払われた追跡情報がメモリ又は別の構造中に保持される、より複雑な代替よりも有効であり得る。
別の実例では、ハザード追跡データは1つ又は複数のロード追跡入口を含むことができ、個々のロード追跡入口は、トランザクション開始事象のうちの1つから投機的に実行された対応するベクトル・ロード命令のためにアクセスされた最小アドレス及び最大アドレスのうちの少なくとも1つを識別する。この手法は、ベクトルの最下位要素がロード/ストア操作のための所与のアドレスを使用し、また、ベクトルの後続する要素が、ベクトルの最下位要素に対して使用されたアドレスから連続的に引き続く連続アドレスを使用する、連続するベクトル・ロード命令又はベクトル・ストア命令のために有用であり得る。このような命令の場合、所与のロード命令のために使用された最小アドレス及び最大アドレスのうちの少なくとも1つの識別は、後続するストアが異なる要素位置における対応するアドレスにアクセスすることになるかどうかを決定することができるためには十分であり得る。例えばハザード検出回路機構は、以後のベクトル・ストア命令のための最小アドレスがロード追跡入口のうちの1つによって示された最小アドレスより大きく、且つ、最大アドレス以下である場合、要素間アドレス・ハザードを検出することができる。いくつかの事例では、最小アドレス及び最大アドレスの両方を識別することは場合によっては不要であり、例えばすべてのベクトル命令が固定数の要素を使用している場合、最大アドレスは最小アドレスから暗黙的であり、その逆についても真である。また、いくつかの事例では、最小アドレス及び最大アドレスのうちの一方は、オフセットを介して識別することができ、或いは明確なアドレスとしてではなく、ベクトルの要素の総数として識別することができ、依然として実際の最大アドレス又は最小アドレスの識別を許容する。
ハザードを追跡する別の手法は、トランザクション開始事象に引き続いて投機的に実行された1つ又は複数のベクトル・ロード命令のそれぞれのデータ要素に対してアクセスされた1つ又は複数のアドレスを識別するアドレス・リストを提供することであり得る。例えばアドレス・リストは、アクセスされたアドレスと、これらのアドレスがアクセスされた要素位置との間の相応関係を識別することができる。ハザード検出回路機構は、次に、以後のベクトル・ストア命令に対する所与のデータ要素位置に対応するアドレスが、トランザクション開始事象に引き続いて投機的に実行された以前のベクトル・ロード命令に対するその所与のデータ要素位置以外のデータ要素位置に対応するベクトル・アドレスと同じである場合、要素間アドレス・ハザードを検出することができる。この手法は、ベクトル演算の個々の要素によって使用されるアドレスが、要素の各々のために使用される非連続アドレス即ちアドレス・オフセットを指定することができる別のベクトル入力から誘導される非連続ロード命令又はストア命令のためにとりわけ有用であり得る。この事例では、ベクトルの以後の要素に対するアドレスを以前の要素から決定することはできず、したがってその代わりにアクセスされたアドレスの各々を追跡することができる。それにもかかわらずこの手法は、連続するタイプのロード・ストア命令のために同じく使用することができる。例えば非連続命令がサポートされる場合、両方のタイプのロード/ストア命令のための共通追跡フォーマットを使用することがより有効であり得る。
図1は、ベクトル処理をサポートするデータ処理装置2の実例を概略的に示したものである。装置2は、命令に応答してデータ処理操作を実施する、例えばプロセッサ、CPU(中央処理装置)又はGPU(グラフィック処理装置)等の処理回路機構4を有している。処理回路機構4は、例えば実行される命令を命令キャッシュ8から取り込むための取込み段6、取り込まれた命令を復号して、適切な処理操作を実施するよう、後続する段を制御するための制御信号を生成する復号段10、復号された命令を待ち行列にして、それらに必要なオペランドが利用可能になるまで実行を待機し、利用可能になった時点で実行のためにそれらが発行される発行段12、発行された命令を実行して、レジスタ16、18から読み出されたオペランドを使用して対応する処理操作を実施するための実行段14、及び実行された命令の結果をレジスタ16、18にライトバックするためのライトバック段20を含む多数のパイプライン段を含む処理パイプラインを含む。実行段14は、算術演算又は論理演算を実施するための算術/論理ユニット(ALU)22、浮動小数点演算を実施するための浮動小数点ユニット24、及びロード操作又はストア操作を実施するためのロード/ストア・ユニット26等の異なるタイプの命令を実行するための多数の実行ユニットを含む。他のタイプの処理ユニットを提供することも可能であり、これは単なる一実例にすぎないことは認識されよう。この実例は、パイプライン段の特定の組合せを有しているが、他の実例は追加段を有することも可能である。例えばアウト・オブ・オーダ・プロセッサの場合、命令によって指定されたアーキテクチャ・レジスタ指示子を、ハードウェア内に提供されたレジスタ16、18を識別する物理レジスタ指示子に再マッピングするために、レジスタ・リネーム段を復号段10と発行段12の間に提供することができ、また、リオーダ・バッファ等の追加資源を提供して、命令が取込み段6によってキャッシュ8から取り込まれたプログラム順序とは異なる順序で実行された命令の完了を追跡することも可能である。
パイプライン4は、スカラー・オペランド上で操作を実施するスカラー命令の処理をサポートし、個々のスカラー・オペランドは、単一のデータ値、及び単一のレジスタ内に記憶された多数の独立データ要素を含むベクトル値の処理を必要とし、或いはベクトル値を生成するベクトル命令を含む。個別のスカラー・レジスタ16及びベクトル・レジスタ18は、それぞれスカラー値及びベクトル値を記憶するために提供され得る。いくつかの命令は、スカラー・オペランド及びベクトル・オペランドの両方の処理を必要とする混合命令であってもよく、一方、他の命令は、ベクトルのみ、或いはスカラー・オペランドのみを処理することができる。簡潔にするために図1には示されていないが、いくつかの事例では、実行段14は、それぞれスカラー演算及びベクトル演算を処理するための個別の実行ユニット、例えば個別のスカラーALU及びベクトルALUを含むことができる。ベクトル実行ユニットは、単一の命令に応答して処理のレーンの各々を実施するための回路機構を含むことができる。いくつかの事例では、所与のベクトル命令に応答して複数のレーンの並列処理を実施するために、多数の並列実行ユニットを提供することができ、それにより性能を改善することができる。別の手法は、単一のセットの実行ユニットを使用してレーンの逐次処理を実施するためのものであっても、或いはベクトル処理の2つ以上のレーンのブロックを並列に実施することができる十分な実行ユニットを提供するためのものであってもよいが、フル・ベクトルには、これらの実行ユニットを介したいくつかのサイクルが必要であり得る。したがってベクトル処理は、すべてのレーンを並列に処理しなければならないことを暗に意味していない。ベクトル・レーンの並列処理は性能を改善するが、スカラー・コードと比較すると、たとえすべてのレーンが逐次処理されたとしても、命令キャッシュ8、取込み段6及び復号段10でのより少ない命令の取扱いにおけるオーバヘッドの低減のため、ベクトル化された処理の利点が依然として存在している。
ベクトル演算の一実例は、データをメモリ・システムからベクトルのそれぞれのデータ要素へロードするためのベクトル・ロード命令、又はベクトル・レジスタ18のうちの1つのベクトルのそれぞれのデータ要素からのデータをメモリ・システムに記憶するためのベクトル・ストア命令であってもよい。図1の実例では、メモリ・システムは、レベル1命令キャッシュ8、レベル1データ・キャッシュ28、データ及び命令の両方のために使用される共有レベル2キャッシュ30及び主記憶装置32を含む。これは、可能なメモリ階層構造の一実例にすぎず、他の構成を使用することも可能であることは認識されよう。
図2は、ベクトル・ロード命令及びベクトル・ストア命令の実例を概略的に示したものである。図2の上側の部分に示されているように、ベクトル・ロード命令の場合、多数の処理レーンが実施され、個々の処理レーンは、メモリ・アドレス空間40の所与のアドレスによって識別されたデータ値をデータ記憶装置からターゲット・ベクトル・レジスタZ0の対応するデータ要素へロードする。この実例は、ターゲット・レジスタの最下位要素A[0]のために使用されるアドレスが、スカラー・レジスタ・ファイル16から読み出されたベース・レジスタ値Raにオフセット#40を追加することによって獲得され、また、後続する要素A[1]からA[3]のためのアドレスが要素A[0]によって使用されるアドレスの後に連続的に続く、連続するロード命令を示している。この実例は、(ベース・レジスタ+オフセット)アドレス指定モードを示しているが、他の実施態様は、他のスカラー・レジスタを使用してオフセットを指定することができ、或いは即値アドレスを使用することも可能である。
図2の下側に示されているストア命令の場合、処理の個々のレーンが、ベクトル・レジスタZ1の対応する要素から読み出されたデータ値を、そのレーンに対して計算されたアドレスに対応するデータ記憶装置の記憶位置に記憶する。この場合も、連続するタイプのストア命令に対して、アドレスはアドレス空間40内で連続している。
ベクトル・アーキテクチャが性能を改善する1つの方法は、ループ・ベクトル化を介することである。即ちループの複数の反復{l..l}がベクトルの複数の要素{e…e}内で実行される。これが可能である場合、また、これが可能であるところでは、ループの実行は最大n倍だけ加速することができる(マイクロ-アーキテクチャ実施態様がベクトル・レーンを並列に実行する範囲によって決まる)。
ループを上で説明したようにベクトル化することができない多くの理由が存在している。1つはメモリ・ハザードによるものである。即ちループの反復、例えばlは、消費する必要がある新たしい値l(i+m)を生成する。単純な実例を以下に示す。
「実例1」
Figure 0007007371000001

スカラー・コードでは、このループは以下のように実現することができる。
「実例2」
Figure 0007007371000002

これは、以下のベクトル演算にベクトル化することができる。
「実例3」
Figure 0007007371000003

ベクトル命令構文は、
「実例4」
Figure 0007007371000004

に多少似ていると言える(簡潔にするために、ここではロード及びストアに対する断定は無視されている)。
この深慮のない手法は、反復iと反復i+3の間にハザードが存在しているため(実例3の太字で示されている演算によって示されている)、元のスカラー・バージョンの意味を維持しない。サイクル0におけるアドレス[a、#64]からのロードは、次にサイクル2で記憶される、サイクル1でなされた増分を反映しないため、これは不正確な結果をもたらす。
上記実例では、これらの依存性は静的に決定することができる。しかしながら一般的な事例では、サイクル0におけるロード及びサイクル2におけるストアのために使用されるアドレスは、間接的処理(別のメモリ・アクセス)に由来するものであってもよく、その場合、依存性はランタイム時にのみ決定することができる。これらは動的依存性と呼ばれている。多くの事例ではこのような動的依存性は極めてまれであるが、残念なことにはこのような事例では、コンパイラは保守的になる傾向があり、ループをベクトル化しない。これは、依存性が存在しない場合、ほとんどの事例において潜在的性能改善が失われることを意味している。
その代わりに、本明細書において説明されている手法は、通常、依存性は存在せず、また、ループ・ベクトル化による性能利得からの利点も存在しないことを仮定しているが、このような要素間依存性が実際に生じると、それらが検出され、且つ、解決されることを保証する機構を提供する。このような依存性を取り扱うための代替手法は、明示的アドレス比較命令を使用して潜在的衝突ロードを注釈することによって依存性を常に試験することであろう。しかしながらこれらの操作はコストをもたらし、また、このような命令のマイクロ-アーキテクチャ実施態様は遅い。
その代わりに依存性トランザクションの概念が導入されている。依存性トランザクション(DTX:dependency transaction)内では、依存性が検出されてもアーキテクチャ状態をロール・バックすることができる限り、コードを安全にベクトル化することができ、トランザクションの終了時に安全にコミットするポイントに至るまでの間、あらゆる投機的更新が見られることを防止することができる。このような概念を上記実例に適用することにより、アセンブリ・コードは、
「実例5」
Figure 0007007371000005

に多少似ていると言える。
トランザクション開始(thazard)命令を実行すると、ハードウェアは、アーキテクチャ状態のチェックポイントを取るか、或いはアーキテクチャ状態の何らかの部分を取り、且つ、キャッシュを特殊なトランザクション-エイリアス・モードに置くことになる。キャッシュは、潜在的に安全ではない操作からの投機的メモリ更新を構造内にバッファすることができる(例えばレベル1専用データ・キャッシュ)。投機は、トランザクション終了(tend)命令が実行され、且つ、トランザクションが首尾よくコミットするか、又はトランザクションが自己中止されるか、或いは衝突のために中止するまで継続する。
トランザクション開始命令とトランザクション終了命令の間に投機的に実行される命令を含む依存性トランザクション(DTX)の場合、要素間アドレス・ハザード(相互要素衝突とも呼ばれる)が検出される。相互要素衝突は、ライト・アフタ・リード・ハザードとして見ることができ、リードは要素iからのものであり、また、ライトは要素i-jからのものである(jは正である)。このようなハザードは、実例3のコードの中に見ることができる。要素0(サイクル3)におけるストアは、要素3(サイクル0)における以前のロードによって読まれている。衝突は、何らかの連続するベクトル・ストア命令によってアクセスされる最も低いアドレスが(先行する)連続するベクトル・ロード命令によってアクセスされる最も高いアドレス以下であり、且つ、ベクトル・ロード命令によってアクセスされる最も低いアドレスより高い場合、依存性トランザクションにおいて生じる。
要素追跡は、通常のメモリ操作又はキャッシュ可能なメモリ操作毎に(或いはいくつかの実施態様では、以下で考察される所定のタイプのロード等の限定されたセットのメモリ操作に対してのみ)提供される。個々のこのようなメモリ操作は、その操作を生成する要素(ベクトル・レーン)を指定する情報を捕獲することができる。この要素は、何らかの後続するメモリ操作がメモリ・アドレス空間の同じアドレス(又はより多くの不正確なマッピングが使用される場合、アドレスの同じブロック)と抵触する最大要素を識別することができるよう、構造の中に捕獲され得る。
例えば要素は64ビット要素細分性で追跡することができ、また、所与のキャッシュ・ラインにアクセスする最大要素は、キャッシュ・ラインを使用してL1キャッシュに記憶される。即ちキャッシュ・ライン毎に1つの「最大要素」が捕獲される。ベクトル毎の要素の数は(VLb/64b)であり、VLbはベクトル長であり、したがって512ビット・ベクトル・アーキテクチャの場合、8個の全く異なる要素が追跡されることになり、また、追跡ビットは、キャッシュ・ライン毎に3ビットを含むことになる。
「実例6」
キャッシュ・ライン-アドレス・タグ、コヒーレンス状態、TM状態(トランザクション・メモリ目的のためにハザードを追跡するための状態)及びDTXエイリアス状態を示す。
Figure 0007007371000006
上記実例3を参照すると、キャッシュ・ライン・エイリアス・ビットは、個々のベクトル・ロード命令の後に更新される。
「実例7」
Figure 0007007371000007

ld1d z0.d、[a、#40]
//サイクル0 ldr x0、[a、#64]|ldr x0、[a、#56]|ldr x0、[a、#48]|ldr x0、[a、#40]
Figure 0007007371000008

//範囲#0~#63内のアドレスにアクセスする最大要素は要素2であり、また、範囲#64~127内のアドレスにアクセスする最大要素は要素3である。
add z0.d、z0.d、#4
//サイクル1 これはベクトル・ロード操作ではないため、キャッシュ・ライン・エイリアス・インデックスに対する変更はない。
st1d z0.d、[a、#64]
//サイクル2 str x0、[a、#88]|str x0、[a、#80]|str x0、[a、#72]|str x0、[a、#64]
Figure 0007007371000009

//要素3が、依存性ハザードが存在したことを意味する、反復の順序を外れてこのキャッシュ・ラインにアクセスしたため、要素0を有するstr@#64は後続し得ない。
ストア(サイクル3)の時点では、メモリ記憶位置[a、#64]における第2のキャッシュ・ライン内のデータは、以後のロードによって、反復の順序を外れて読まれたことは明らかである。この時点でキャッシュは、プロセッサ4にDTX中止を信号発信する。プロセッサ4は、必要なアクションを取ってアーキテクチャ状態をロール・バックし、また、キャッシュは投機的修正を一掃し、且つ、エイリアス・ビットを消去する。この時点でプロセッサ4は、進行の実施を保証するために、スカラー・コードを使用して、或いは分割サイズ(ベクトル・ループの所与の反復で処理されるベクトル要素の数)を小さくすることによって再試行することができる。DTX中止(或いは他の形態のトランザクション中止)がない場合、コードは投機的メモリ修正を安全に発行する。これは、トランザクションの終了に印を付けるトランザクション終了(tcommit)命令を使用して達成することができる。
要約すると、プログラマは、トランザクション開始事象及びトランザクション終了事象を定義して、レーン間ハザードの可能性があり得るベクトル命令のシーケンスを拘束することができ、また、トランザクションの開始と終了の間で、図1に示されているように装置2内に提供されたハザード検出回路機構50は、ロード命令及びストア命令によってアクセスされるアドレスを追跡することができ、また、ベクトル・ロード命令及び後続するベクトル・ストア内の異なる要素位置における要素間でレーン間ハザードが検出されると、トランザクションの処理を中止することができる。ハザード追跡記憶装置52は、アクセスされたアドレスを追跡するための追跡データを記憶するために提供することができる。ハザード追跡記憶装置52は独立したデータ構造として提供することができるが、他の実例ではハザード追跡データは、L1データ・キャッシュ28内等のデータ記憶装置自体の一部に記憶することができるため、ハザード追跡記憶装置52は図1には点線で示されている。いくつかの事例では、ハザード検出回路機構15は、ロード/ストア・ユニット26内、又はキャッシュ28と結合したキャッシュ・コントローラ内等の、ロード操作及びストア操作を制御するための制御回路機構の一部の中に提供することも可能である。
図3から7で考察される以下の流れ図は、このような依存性トランザクションの取扱いの実例を提供している。
図3は、トランザクションの開始時に実施される操作を示したものである。ステップ60で処理回路機構4は、トランザクション開始事象が生じたかどうか、例えばトランザクション開始命令に遭遇したかどうかを検出する。トランザクション開始事象に応答して、ステップ62で処理迂遠4は、現在のアーキテクチャ状態の少なくともサブセットを捕獲する。例えばスカラー・レジスタ16及びベクトル・レジスタ18の少なくともいくつかの内容をメモリ・システム28、30、32に保存することができ、したがってトランザクションを中止しなければならない場合に、以後にデータを回復することができる。別法としては、専用のセットの回復レジスタを提供して、アーキテクチャ状態の現在のスナップショットをバックアップし、それによりデータをメモリ・システムに保存する必要を回避することも可能である。現在のアーキテクチャ状態は、制御レジスタの内容、例えば現在の実行点を示すプログラム・カウンタ、例外の取扱いに引き続いて処理を戻さなければならない戻りアドレスを指定しているリンク・レジスタ、又はプロセッサの現在の状態を表している他の情報等の他の情報を含むことも可能である。
ステップ64でハザード追跡記憶装置52内のハザード追跡データが消去される。例えば追跡ハザード・データが更新され、したがって追跡ハザード・データは、現在のトランザクション内のベクトル・ロード命令によって既にアクセスされているアドレスをもはや一切示していない。ステップ66で実行の現在のスレッドの処理が投機的に継続し、したがって引き続いて実行された命令の結果は、状態に未だコミットされていない。スカラー・レジスタ又はベクトル・レジスタ内の値を更新するALU、浮動小数点、ロード命令又は他のタイプの命令の事例では、これらを通常通りに単純に実行してターゲット・レジスタを更新することができ、また、これは、このような命令の結果は、依然として、アーキテクチャ状態の既に捕獲済みのスナップショットを使用して巻き戻しすることができる、という意味で投機的に実施される。データをメモリ・システムに書き込むためのストア操作の場合、メモリに書き込まれる値は、ロード・ストア・ユニット26内、又はキャッシュ28、30又はメモリ32内の構造内のいずれかにバッファすることができ、それにより結果が依然として投機的である間におけるメモリの実際の更新を防止することができる。次に、図4から7に示されている事象のうちの1つが生じるまでトランザクションの処理が継続する。
図4は、トランザクション開始事象に引き続いて、また、トランザクション終了事象の前に遭遇するベクトル・ロード命令の処理を示したものである。ステップ70でこのようなベクトル・ロード命令が検出されると、ステップ72で、そのロード命令が所定のタイプのロード命令であるかどうかが検出される。所定のタイプのベクトル・ロードは、例えば特定の演算コードを有するベクトル・ロードであっても、或いはそのベクトル・ロードが所定のタイプのベクトル・ロードであることを識別する制御パラメータを指定するベクトル・ロードであってもよく、或いは所定のタイプのベクトル・ロードは、このベクトル・ロードが所定のタイプの命令であることのヒントを提供するためにそのベクトル・ロードの直前に修正命令が実行されたかどうかに基づいて検出され得る。所定のタイプの命令が検出されると、ステップ74でハザード検出回路機構50は、ベクトル・ロード命令のそれぞれの要素に対して使用されたアドレスに基づいてハザード追跡記憶装置52内のハザード追跡データを更新する。次にステップ76でベクトル・ロード命令が投機的に実行される。一方、ベクトル・ロードが所定のタイプのベクトル・ロードではない場合、方法はステップ72から直接ステップ76へ進行し、ステップ74におけるハザード追跡データを更新するステップを省略する。
他の実施例では、ステップ72を省略し、その代わりにステップ74で、すべてのタイプのベクトル・ロードに対してハザード追跡データを更新することも可能である。しかしながらハザード追跡データの更新を特定のタイプのロードに限定することは、ハザード追跡のオーバヘッドを低減し、また、ハザードが検出される機会を少なくするために有用であり得る。ハザードが追跡されるべき所定のタイプとしてのベクトル・ロードの印付けをサポートするシステムの場合、プログラマは、それらが要素間アドレス・ハザードを生成しないことが分かっているロードに対するハザード追跡のオーバヘッドを回避するために、所定のタイプの使用をハザードが予期される事例に限定することができる。
図5に示されているように、トランザクションを処理している間、処理回路機構4又はハザード検出回路機構50は、トランザクション消去事象が生じたかどうかを検出することができる(図5のステップ80)。トランザクション消去事象が生じると、ステップ82で、ステップ64と同じ方法でハザード追跡記憶装置52内のハザード追跡データが消去される。これは、トランザクションの終了に未だ到達していない場合であっても追跡データを消去するための機構を提供する。単一のトランザクション内で実行されるべきループの複数の反復を許容し、それによりトランザクション取扱いのオーバヘッドを低減するため、これは有用である。トランザクション消去事象は、例外、或いは制御レジスタをセットする命令等のハザード追跡データを安全に消去することができることを信号発信する任意の事象であってもよい。しかしながらトランザクション消去事象を表現するとりわけ有用な方法の1つは、追跡データを消去するための専用のトランザクション消去命令(tclear)を提供することである。プログラマ又はコンパイラは、次に、ベクトル命令のシーケンス内でトランザクション消去命令を使用して、ベクトル化されるループの対応する反復に従ってベクトルのデータの価値が処理される毎に追跡データを消去することができる。
図6は、トランザクション開始事象に引き続いて、且つ、トランザクション終了事象の前にベクトル・ストア命令に遭遇した場合に実施されるハザード検出操作を示したものである。ステップ90でこのような命令が検出されると、ステップ92でハザード検出回路機構50は、ベクトル・ストア命令の要素Kと以前のロード命令の要素Jの間に要素間アドレス・ハザードが存在しているかどうかを検出し、KはJに等しくない。いくつかの事例では、ハザードは、KがJ未満であるハザードに限定することができる。以前のロード及び後続するストアは、いずれも、処理回路機構4によって実行される命令の同じスレッド内であることに留意されたい。ステップ92でアドレス・ハザードが検出されない場合、ステップ93で通常通りストア操作が投機的に実行される。
ハザードが検出されると、ステップ94でハザード検出回路機構50は、トランザクション内の命令のそれ以上の処理を中止するように処理回路機構4をトリガし、トランザクション内の既に実行済みの命令によって生成された投機的結果がコミットされることを防止する。これは、メモリ・システム内に投機的にバッファされた書込みデータを破棄することによって実施することができる。また、既に捕獲済みのアーキテクチャ状態は、トランザクションを開始する前に動作していた状態にプロセッサを巻き戻すためにレジスタ16、18に回復される。したがって投機的に実行された命令の効果が逆転される。
トランザクションが中止されると、これは、例えば例外の使用を介してプロセッサ4に信号発信することができる。例外ハンドラーは、次に、順方向の前進を保証するべく必要なアクションを取ることができる。例えば順方向の前進がなされることを保証するために、スカラー・コードを使用して等価処理操作を再試行することができ、或いはベクトル長を短くすることができる(同じメモリ記憶位置へのアクセスは、ベクトルの1つの部分で書込みが実施され、一方、他の部分で読出しが実施されるようなものであり得るため、例えばN個の要素の代わりにN/2個のデータ要素のグループにおける必要な操作を処理することにより、要素間アドレス・ハザードの機会を少なくすることができる)。それにもかかわらずアドレス・ハザードはまれであるため、いくつかのトランザクションを時折り中止するコストは、ベクトル化されたコードとして処理されるべきスカラー・ループの複数の反復を可能にすることによって達成することができる性能改善と比較すると重大なものではない。
図7は、トランザクションの終了時におけるトランザクション終了事象に到達すると実施されるアクションを示したものである。ステップ100で検出されたトランザクション終了事象に応答して、ステップ102でプロセッサ4は、トランザクションの開始以降に実行された命令のすべての投機的に生成された結果をコミットする。アーキテクチャ状態の既に捕獲済みのスナップショットは、破棄するか、或いは重ね書きを許容することができる。次に、すべてのバッファされたメモリ・ライトをキャッシュ28、30又はメモリ32によって実際のメモリ記憶装置に書き込むことができる。ステップ104で、後続する命令が、ハザード追跡/検出機構50、52を使用することなく非投機的に実行される。
図8は、ロード命令によって使用されたアドレスを追跡するための追跡データの第1の実例を示したものである(上で示した実例6に対応している)。この実例では、ハザード追跡のための追跡入口は、対応するデータと共にL1データ・キャッシュ28内に記憶される。個々のキャッシュ・ライン110は、キャッシュされたデータのアドレスの少なくとも一部を識別するキャッシュ・タグ112、対応するデータのコヒーレンス性状態(例えばデータが共有されているか、又は独自のものであるかどうか、或いはデータがきれいであるか、又は汚れているかどうか)を示すコヒーレンス性状態データ、及びキャッシュされたデータと結合した他の状態データ116(例えばトランザクション・メモリ・アドレス追跡目的のためのデータ)を含む。更に、個々のキャッシュ・ライン110は、トランザクションの開始以降に実行された以前のベクトル・ロード命令が対応するキャッシュ・ラインからのデータにアクセスした最も高いデータ要素位置を指定するエイリアス値118を記憶する。したがって所与のロードに遭遇すると、要素毎にアクセスされるデータを含むキャッシュ・ラインが更新され、そのキャッシュ・ラインに対するエイリアス・ビット119をセットし、その要素がエイリアス・ビット118によって既に示されている要素位置より高い場合、そのデータがアクセスされた要素を示す。後続するストア命令に遭遇すると、書込みが実施されている現在のデータ要素より高いデータ要素位置をエイリアス・ビットが示しているキャッシュ・ラインにデータが書き込まれる場合、ハザードが検出され、また、これは、トランザクションの中止をトリガすることができる。図8は、キャッシュ・ライン毎にエイリアス・ビットが提供される実例を示したものであるが、これは、ハザードのいくつかの偽りの断定的検出をもたらすことがあり、以前のロードが後続するストアと比較してキャッシュ・ラインの異なる部分に実際にアクセスした場合であってもハザードのフラグが立てられる。偽りの断定的ハザードの数は、例えばキャッシュ・ラインの異なる部分のための複数のエイリアス欄118を使用して、より細かい細分性でキャッシュ・ラインに注釈を付けることによって少なくすることができる。しかしながらエイリアス欄を記憶し、更新し、且つ、比較するための追加回路機構と、達成される性能改善の間にはトレード・オフが存在している。
図9は、ハザード追跡記憶装置52のための別の実例を示したものである。エイリアス・ビットをキャッシュに追加する代わりに、ハザード検出論理をロード/ストア待ち行列、ストア・バッファ、等々の他の構造に追加することができ、或いは全く異なる構造を導入することも可能である。連続するベクトル・ロードに遭遇すると、この構造(又はバッファ)は、アクセスされた最大アドレス及び最小アドレス{MaxAddr、MinAddr}を記録することができ、また、後続するストアが到着すると、ストアの最も低いアドレス*Aが入口に対してチェックされる。条件(MinAddr<A<=MaxAddr)を維持している場合、衝突が検出され、中止がトリガされる。
図10に示されているように、別のタイプのロードは、連続していない要素の各々に対するアドレスを使用することができる。これは、非連続(又はギャザー)ロードと呼ぶことができる。同様に、非連続ベクトル・ストア命令は、ベクトルのそれぞれの要素からのデータ値を非連続アドレスを有するメモリ記憶位置に記憶することができる。個々の要素に対するアドレスは、例えば入力要素の各々に対する異なるアドレス・オフセットを指定する第2のベクトル・オペランドZ1から誘導することができる。非連続ロード/ストア命令の場合、図8に示されている手法は依然として機能するが、図9に対する代替として、図11に示されている手法を使用することも可能であり、バッファは、最大/最小アドレスではなく、個々の要素に対して使用された実際のアドレスを記憶する。アドレスは、これらのアドレスがアクセスされたデータ要素位置との相応関係で記憶される(例えば図11の実例では、追跡構造の列nのアドレスが以前のロードのデータ要素nからアクセスされた)。後続するストア命令に対して、ハザード・チェック回路機構50は、次に、ストアによって使用されたアドレスのセットをバッファの内容に対してチェックし、ストアの所与の要素が以前のロードに対するより高い要素によって使用されたアドレスと同じアドレスにアクセスする衝突を識別することができる。
いくつかの事例では、プログラマ又はコンパイラは、入れ子型トランザクションを導入することができ、1つのトランザクションが開始した後、その第1のトランザクションが終了する前に別のトランザクション開始事象が検出される。いくつかのハードウェア実施態様は、このような入れ子型トランザクションをサポートしてアーキテクチャ状態の複数のスナップショットを維持することができ、したがって内部トランザクションが中止すると、その状態は、外部トランザクションの開始まで巻き戻すのではなく、その内部トランザクションの開始点へ回復されるにすぎない。しかしながら入れ子型トランザクションをサポートするために必要な追加回路オーバヘッドは必ずしも正当化され得ず、いくつかのより単純な実施態様は、内部トランザクションの中止が検出されると、プロセッサ状態を外部トランザクションの開始まで単純に巻き戻すことができる。したがっていくつかの実施態様は、入れ子型トランザクションを単一のより大きいトランザクションに有効にロールすることができる。
ハザード検出回路機構50は、スカラー・ループを一連のベクトル命令中にベクトル化する人工産物として、実行の所与のスレッド中に導入されたレーン間アドレス・ハザードを検出する。他の機構を処理装置2内に予め提供することができる、プログラム実行の独立スレッド間のライト・アフタ・リード・ハザード又はライト・アフタ・ライト・ハザード等の他のタイプのアドレス・ハザードを検出する必要はない。例えばいくつかのシステムは、多重プロセッサ・システム内で実行されている処理の異なるスレッド間の衝突を管理するためハードウェア・トランザクション・メモリ・サポートを予め有することができる。処理の独立したスレッドが個別の実行ユニットを使用して並列に実施されている場合、1つの実行ユニットが所与のアドレスを読み出し、或いは書き込むことができ、その間に別の実行ユニットが同じアドレスに同じくアクセスしてハザードをもたらす危険が存在する。ハードウェア・トランザクション・メモリ技法は、このようなハザードを検出すると、衝突が存在しないことを仮定して投機的に進行する操作を許容し、次に、衝突が検出されると、トランザクションを中止して処理を実行の以前の時点に巻き戻すことにより、投機的処理を使用して性能を改善することができる。衝突することなく処理がトランザクションの終了に到達すると、投機的結果をコミットすることができる。本明細書において説明されている形態の依存性トランザクションは、異なる処理要素間の衝突を処理するためのトランザクション・メモリ・トランザクションを取り扱うために既に提供されている回路機構のうちの少なくともいくつかを使用してサポートすることができる。例えばアーキテクチャ状態のスナップショットを捕獲するための、或いはメモリ・システムへの書込みをバッファするための回路機構のうちのいくつかを再使用することができる。しかしながらトランザクション・メモリ技法とは異なり、要素間ハザードを検出するために使用されるハザード検出回路機構50及びハザード追跡記憶装置52は異なっていてもよく、また、検出されるハザードは、独立したスレッド間ではなく、通常はハザードの発生を誰も予期しないであろうプログラム実行の単一のスレッド内に存在してもよい。
本出願においては、「…ように構成された」という語は、定義された操作を実施することができる構成を装置の要素が有していることを意味するべく使用されている。この文脈においては、「構成」は、ハードウェア又はソフトウェアの配置又はこれらの相互接続の方法を意味している。例えば装置は、定義された操作を提供する専用ハードウェアを有することができ、或いはプロセッサ又は他の処理デバイスは、機能を実施するようにプログラムすることができる。「ように構成された」は、定義された操作を提供するために装置要素を何らかの方法で変更しなければならないことを暗に意味していない。
本発明の例証実施例について、本明細書において、添付の図面を参照して詳細に説明したが、本発明はこれらの厳密な実施例に制限されないこと、また、当業者は、添付の特許請求の範囲によって定義されている本発明の範囲及び精神を逸脱することなく、様々な変更及び修正をそれらに実施することができることを理解されたい。

Claims (14)

  1. 命令に応答してデータ処理を実施するための処理回路機構であって、ベクトル・ロード命令に応答して、データ記憶装置のそれぞれの記憶位置からのデータを、ベクトル値のそれぞれのデータ要素をロードするように構成され、ベクトル・ストア命令に応答して、ベクトル値のそれぞれのデータ要素からのデータを前記データ記憶装置のそれぞれの記憶位置に記憶するように構成される処理回路機構を備えた装置であって、
    前記処理回路機構が、トランザクション開始事象に応答して、1つ又は複数の後続する命令を投機的に実行し、トランザクション終了事象に応答して、前記トランザクション開始事象に引き続いて投機的に実行された前記1つ又は複数の後続する命令の投機的結果をコミットし、
    前記装置が、前記トランザクション開始事象に引き続いて投機的に実行された以前のベクトル・ロード命令に対するデータ要素Jに対応するアドレスと、前記トランザクション開始事象に引き続いて投機的に実行された以後のベクトル・ストア命令に対するデータ要素Kに対応するアドレスとの間に要素間アドレス・ハザードが生じているかどうかを検出するためのハザード検出回路機構を備え、KがJとは異なり、前記以前のベクトル・ロード命令及び前記以後のベクトル・ストア命令が、いずれも、前記処理回路機構によって処理された命令の同じスレッドからのものであり、
    前記ハザード検出回路機構が、前記要素間アドレス・ハザードの検出に応答して、前記トランザクション開始事象に引き続く前記命令のそれ以上の処理を中止するように前記処理回路機構をトリガし、前記投機的結果がコミットされることを防止するように構成され、
    前記トランザクション開始事象に引き続いて投機的に実行された1つ又は複数の前記以前のベクトル・ロード命令のために使用されたアドレスを追跡するためのハザード追跡データを記憶するためのハザード追跡記憶回路機構を備え、
    前記ハザード追跡データが複数の追跡入口を含み、個々の追跡入口が、アドレスのそれぞれのブロックに対応し、且つ、アドレスの前記対応するブロック内のアドレスが、前記トランザクション開始事象に引き続いて投機的に実行された前記以前のベクトル・ロード命令のために使用された最も高いデータ要素位置を識別する、装置。
  2. 前記ハザード検出回路機構が、前記要素間アドレス・ハザードの検出に応答して、アーキテクチャ状態データを、前記トランザクション開始事象に応答して捕獲されたアーキテクチャ状態データの先行するバージョンに回復するように前記処理回路機構をトリガするように構成される、請求項1に記載の装置。
  3. K<Jである、請求項1及び2のいずれか一項に記載の装置。
  4. 前記ハザード追跡記憶回路機構が前記データ記憶装置の一部を備える、請求項1から3のいずれか一項に記載の装置。
  5. 前記ハザード検出回路機構が、前記トランザクション開始事象に応答して前記ハザード追跡データを消去するように構成される、請求項1から4のいずれか一項に記載の装置。
  6. 前記ハザード検出回路機構が、前記トランザクション開始事象に引き続いて実行されるトランザクション消去命令に応答して前記ハザード追跡データを消去するように構成される、請求項からまでのいずれか一項に記載の装置。
  7. 前記ハザード検出回路機構が、前記トランザクション開始事象に引き続いて投機的に実行されたベクトル・ロード命令に応答して、前記ベクトル・ロード命令のために使用されたアドレスに基づいて前記ハザード追跡データを更新する、請求項からまでのいずれか一項に記載の装置。
  8. 前記ハザード検出回路機構が、前記ベクトル・ロード命令の中から予め選択された所定のタイプのベクトル・ロード命令に応答して前記ハザード追跡データを更新し、前記所定のタイプのベクトル・ロード命令以外のベクトル・ロード命令に応答して前記ハザード追跡データの更新を抑制するように構成される、請求項に記載の装置。
  9. 前記ハザード検出回路機構が、前記以後のベクトル・ストア命令の所与のデータ要素位置に対して使用されたアドレスを含むアドレスのブロックに対応する前記追跡入口が前記所与のデータ要素位置より高いデータ要素位置を識別すると、前記トランザクション開始事象に引き続いて投機的に実行された以後のベクトル・ストア命令に対する前記要素間アドレス・ハザードを検出するように構成される、請求項1から8のいずれか一項に記載の装置。
  10. 前記データ記憶装置が、データを記憶するための複数のキャッシュ・ラインを備えるキャッシュを備え、前記追跡入口が前記キャッシュに記憶され、個々のキャッシュ・ラインが前記キャッシュ・ラインに対応するアドレスの1つ又は複数のブロックのための前記追跡入口のうちの1つ又は複数と結合される、請求項1から9のいずれか一項に記載の装置。
  11. 前記ハザード検出回路機構が、アドレスの前記対応するブロックの少なくとも1つのアドレスが前記トランザクション開始事象に引き続いて投機的に実行された以前のベクトル・ロード命令のために使用されたことを示す追跡入口と結合した前記キャッシュからのキャッシュ・ラインの追払いに応答して、前記トランザクション開始事象に引き続く前記命令のそれ以上の処理を中止するように前記処理回路機構をトリガし、前記投機的結果がコミットされることを防止するように構成される、請求項10に記載の装置。
  12. 前記トランザクション開始事象がトランザクション開始命令を含み、前記トランザクション終了事象がトランザクション終了命令を含む、請求項1から11までのいずれかに記載の装置。
  13. 命令に応答してデータを処理するための手段であって、ベクトル・ロード命令に応答して、データ記憶装置のそれぞれの記憶位置からのデータを、ベクトル値のそれぞれのデータ要素をロードするように構成され、ベクトル・ストア命令に応答して、ベクトル値のそれぞれのデータ要素からのデータを前記データ記憶装置のそれぞれの記憶位置に記憶するように構成される、処理するための手段を備えた装置であって
    処理するための前記手段が、トランザクション開始事象に応答して、1つ又は複数の後続する命令を投機的に実行し、トランザクション終了事象に応答して、前記トランザクション開始事象に引き続いて投機的に実行された前記1つ又は複数の後続する命令の投機的結果をコミットし、
    前記装置が、前記トランザクション開始事象に引き続いて投機的に実行された以前のベクトル・ロード命令に対するデータ要素Jに対応するアドレスと、前記トランザクション開始事象に引き続いて投機的に実行された以後のベクトル・ストア命令に対するデータ要素Kに対応するアドレスとの間の要素間アドレス・ハザードを検出するための手段を備え、KがJとは異なり、前記以前のベクトル・ロード命令及び前記以後のベクトル・ストア命令が、いずれも、前記処理するための手段によって処理された命令の同じスレッドからのものであり、
    検出するための手段が、前記要素間アドレス・ハザードの検出に応答して、前記トランザクション開始事象に引き続く前記命令のそれ以上の処理を中止するように処理のための前記手段をトリガし、前記投機的結果がコミットされることを防止するように構成され
    前記トランザクション開始事象に引き続いて投機的に実行された1つ又は複数の前記以前のベクトル・ロード命令のために使用されたアドレスを追跡するためのハザード追跡データを記憶するためのハザード追跡記憶回路機構を備え、
    前記ハザード追跡データが複数の追跡入口を含み、個々の追跡入口が、アドレスのそれぞれのブロックに対応し、且つ、アドレスの前記対応するブロック内のアドレスが、前記トランザクション開始事象に引き続いて投機的に実行された前記以前のベクトル・ロード命令のために使用された最も高いデータ要素位置を識別する、装置。
  14. トランザクション開始事象に応答して、1つ又は複数の後続する命令を投機的に実行するステップと、
    ベクトル・ロード命令に応答して、データ記憶装置のそれぞれの記憶位置からのデータを、ベクトル値のそれぞれのデータ要素にロードするステップと、
    ベクトル値のそれぞれのデータ要素からのデータを前記データ記憶装置のそれぞれの記憶位置に記憶するためのベクトル・ストア命令に応答して、前記ベクトル・ロード命令に対するデータ要素Jに対応するアドレスと、前記ストア命令に対するデータ要素Kに対応するアドレスとの間に要素間アドレス・ハザードが生じているかどうかを検出するステップであって、KがJとは異なり、以前の記ベクトル・ロード命令及び以後の記ベクトル・ストア命令が、いずれも命令の同じスレッドからのものであるステップと、
    前記要素間アドレス・ハザードの検出に応答して、前記1つ又は複数の後続する命令のそれ以上の処理を中止し、前記1つ又は複数の後続する命令の投機的結果がコミットされることを防止するステップと、
    トランザクション終了事象に応答して、前記1つ又は複数の後続する命令の前記投機的結果をコミットするステップと
    を含み、
    更に、前記トランザクション開始事象に引き続いて投機的に実行された1つ又は複数の前記以前のベクトル・ロード命令のために使用されたアドレスを追跡するためのハザード追跡データを記憶するステップを含み、
    前記ハザード追跡データが複数の追跡入口を含み、個々の追跡入口が、アドレスのそれぞれのブロックに対応し、且つ、アドレスの前記対応するブロック内のアドレスが、前記トランザクション開始事象に引き続いて投機的に実行された前記以前のベクトル・ロード命令のために使用された最も高いデータ要素位置を識別する、データ処理方法。
JP2019513912A 2016-09-20 2017-08-14 ベクトル命令のための要素間アドレス・ハザードの取扱い Active JP7007371B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1615959.2 2016-09-20
GB1615959.2A GB2554096B (en) 2016-09-20 2016-09-20 Handling of inter-element address hazards for vector instructions
PCT/GB2017/052387 WO2018055326A1 (en) 2016-09-20 2017-08-14 Handling of inter-element address hazards for vector instructions

Publications (2)

Publication Number Publication Date
JP2019534504A JP2019534504A (ja) 2019-11-28
JP7007371B2 true JP7007371B2 (ja) 2022-01-24

Family

ID=57288580

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019513912A Active JP7007371B2 (ja) 2016-09-20 2017-08-14 ベクトル命令のための要素間アドレス・ハザードの取扱い

Country Status (8)

Country Link
US (1) US10922084B2 (ja)
EP (1) EP3516502B1 (ja)
JP (1) JP7007371B2 (ja)
KR (1) KR102344010B1 (ja)
CN (1) CN109690476B (ja)
GB (1) GB2554096B (ja)
TW (1) TWI758319B (ja)
WO (1) WO2018055326A1 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2554096B (en) * 2016-09-20 2019-03-20 Advanced Risc Mach Ltd Handling of inter-element address hazards for vector instructions
GB2570466B (en) * 2018-01-25 2020-03-04 Advanced Risc Mach Ltd Commit window move element
US11068247B2 (en) * 2018-02-06 2021-07-20 Microsoft Technology Licensing, Llc Vectorizing conditional min-max sequence reduction loops
GB2572579B (en) * 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Speculative side-channel hint instruction
EP3588280B1 (en) 2018-06-25 2021-09-08 ARM Limited Handling load-exclusive instructions in apparatus having support for transactional memory
US10783031B2 (en) * 2018-08-20 2020-09-22 Arm Limited Identifying read-set information based on an encoding of replaceable-information values
GB2585202B (en) * 2019-07-01 2021-11-24 Advanced Risc Mach Ltd An apparatus and method for speculatively vectorising program code
US11314510B2 (en) 2020-08-14 2022-04-26 International Business Machines Corporation Tracking load and store instructions and addresses in an out-of-order processor

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150100754A1 (en) 2013-10-09 2015-04-09 Arm Limited Data processing apparatus and method for performing speculative vector access operations
WO2016009168A1 (en) 2014-07-15 2016-01-21 Arm Limited Call stack maintenance for a transactional data processing execution mode
US20160188382A1 (en) 2014-12-24 2016-06-30 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for data speculation execution

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2364404B (en) * 2000-07-01 2002-10-02 Marconi Comm Ltd Method of detecting malicious code
JP4202673B2 (ja) * 2002-04-26 2008-12-24 株式会社東芝 システムlsi開発環境生成方法及びそのプログラム
US7472285B2 (en) * 2003-06-25 2008-12-30 Intel Corporation Apparatus and method for memory encryption with reduced decryption latency
JP3988144B2 (ja) * 2004-02-23 2007-10-10 日本電気株式会社 ベクトル処理装置、及び、追い越し制御回路
US8078847B2 (en) * 2007-05-14 2011-12-13 Apple Inc. Detecting memory-hazard conflicts during vector processing
US8019976B2 (en) * 2007-05-14 2011-09-13 Apple, Inc. Memory-hazard detection and avoidance instructions for vector processing
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US8209525B2 (en) * 2008-08-15 2012-06-26 Apple Inc. Method and apparatus for executing program code
US9262171B2 (en) * 2009-06-30 2016-02-16 Oracle America, Inc. Dependency matrix for the determination of load dependencies
US8549504B2 (en) * 2010-09-25 2013-10-01 Intel Corporation Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US8868885B2 (en) * 2010-11-18 2014-10-21 Ceva D.S.P. Ltd. On-the-fly permutation of vector elements for executing successive elemental instructions
US8639889B2 (en) * 2011-01-31 2014-01-28 International Business Machines Corporation Address-based hazard resolution for managing read/write operations in a memory cache
US9021233B2 (en) * 2011-09-28 2015-04-28 Arm Limited Interleaving data accesses issued in response to vector access instructions
US9389860B2 (en) * 2012-04-02 2016-07-12 Apple Inc. Prediction optimizations for Macroscalar vector partitioning loops
US9330011B2 (en) * 2013-09-20 2016-05-03 Via Alliance Semiconductor Co., Ltd. Microprocessor with integrated NOP slide detector
US9552205B2 (en) * 2013-09-27 2017-01-24 Intel Corporation Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions
CN103699434B (zh) * 2013-12-17 2018-05-08 天津国芯科技有限公司 一种适用于多应用之间安全访问的mpu及其多应用之间安全访问的方法
US9720667B2 (en) * 2014-03-21 2017-08-01 Intel Corporation Automatic loop vectorization using hardware transactional memory
CN104052635A (zh) * 2014-06-05 2014-09-17 北京江南天安科技有限公司 一种基于安全预警的风险态势预测方法及系统
CN104317637A (zh) * 2014-10-16 2015-01-28 安徽理工大学 基于多智能体的虚拟矿工安全行为建模及应急仿真系统
US10387156B2 (en) 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
GB2540940B (en) * 2015-07-31 2018-01-03 Advanced Risc Mach Ltd An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank
GB2554096B (en) * 2016-09-20 2019-03-20 Advanced Risc Mach Ltd Handling of inter-element address hazards for vector instructions
US10866805B2 (en) * 2018-01-03 2020-12-15 Arm Limited Speculation barrier instruction

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150100754A1 (en) 2013-10-09 2015-04-09 Arm Limited Data processing apparatus and method for performing speculative vector access operations
WO2016009168A1 (en) 2014-07-15 2016-01-21 Arm Limited Call stack maintenance for a transactional data processing execution mode
US20160188382A1 (en) 2014-12-24 2016-06-30 Elmoustapha Ould-Ahmed-Vall Systems, apparatuses, and methods for data speculation execution

Also Published As

Publication number Publication date
WO2018055326A1 (en) 2018-03-29
KR20190051036A (ko) 2019-05-14
GB201615959D0 (en) 2016-11-02
EP3516502B1 (en) 2021-04-28
CN109690476B (zh) 2023-02-28
TWI758319B (zh) 2022-03-21
US20190258489A1 (en) 2019-08-22
EP3516502A1 (en) 2019-07-31
US10922084B2 (en) 2021-02-16
GB2554096A (en) 2018-03-28
TW201814504A (zh) 2018-04-16
JP2019534504A (ja) 2019-11-28
KR102344010B1 (ko) 2021-12-28
GB2554096B (en) 2019-03-20
CN109690476A (zh) 2019-04-26

Similar Documents

Publication Publication Date Title
JP7007371B2 (ja) ベクトル命令のための要素間アドレス・ハザードの取扱い
JP3096423B2 (ja) スーパースカラまたはvliwプロセッサにおけるメモリ操作の順序替えのための方法及び装置
EP2674856B1 (en) Zero cycle load instruction
KR101025354B1 (ko) 가상 트랜잭션 메모리를 위한 글로벌 오버플로우 방법
US6189088B1 (en) Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
US9798590B2 (en) Post-retire scheme for tracking tentative accesses during transactional execution
TWI617980B (zh) 具有動態配送窗以及分散式架構的虛擬載入儲存佇列
US6772317B2 (en) Method and apparatus for optimizing load memory accesses
JP7281491B2 (ja) トランザクショナル比較及び破棄命令
TWI786181B (zh) 在例外遮罩更新指令之後允許未中止的交易處理
US11119925B2 (en) Apparatus and method for managing capability metadata
US9122485B2 (en) Predicting a result of a dependency-checking instruction when processing vector instructions
US9400655B2 (en) Technique for freeing renamed registers
US10185561B2 (en) Processor with efficient memory access
US8924693B2 (en) Predicting a result for a predicate-generating instruction when processing vector instructions
JP7481328B2 (ja) トランザクショナル・メモリのための装置及びデータ処理方法
CN111164572B (zh) 数据处理装置和方法
JP3748191B2 (ja) 計算機とその制御方法
CN114174986A (zh) 用于推测性向量化程序代码的装置和方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200807

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210831

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210907

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211206

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220106

R150 Certificate of patent or registration of utility model

Ref document number: 7007371

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150