JP2002351657A - マルチプロセッサシステム、データ依存投機実行制御装置およびその方法 - Google Patents

マルチプロセッサシステム、データ依存投機実行制御装置およびその方法

Info

Publication number
JP2002351657A
JP2002351657A JP2001154113A JP2001154113A JP2002351657A JP 2002351657 A JP2002351657 A JP 2002351657A JP 2001154113 A JP2001154113 A JP 2001154113A JP 2001154113 A JP2001154113 A JP 2001154113A JP 2002351657 A JP2002351657 A JP 2002351657A
Authority
JP
Japan
Prior art keywords
execution
success
failure
speculative execution
instruction
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
JP2001154113A
Other languages
English (en)
Other versions
JP3729087B2 (ja
Inventor
Mitsufumi Shibayama
充文 柴山
Satoshi Matsushita
智 松下
Atsushi Torii
淳 鳥居
Naoki Nishi
直樹 西
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2001154113A priority Critical patent/JP3729087B2/ja
Priority to US10/151,819 priority patent/US6970997B2/en
Priority to GB0211979A priority patent/GB2378549B8/en
Publication of JP2002351657A publication Critical patent/JP2002351657A/ja
Application granted granted Critical
Publication of JP3729087B2 publication Critical patent/JP3729087B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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, 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, 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution

Abstract

(57)【要約】 【課題】 データ依存投機実行の失敗確率を低減し、プ
ログラムの実行性能を向上できるマルチプロセッサシス
テム、データ依存投機実行制御装置およびその方法を提
供する。 【解決手段】 プロセッサがメモリ操作命令の実行する
際、過去における投機実行の成否結果の履歴を参照し
て、データ投機実行が成功するか失敗するかを予測し、
成功が予測される場合、メモリ操作命令を非プログラム
順序でデータ依存に関して投機的に実行し、失敗が予測
される場合、メモリ操作命令をプログラム順序で確定的
に実行する。過去の投機実行の成否履歴は、記憶手段に
記憶される。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、例えば、マイクロ
プロセッサなどのデータ処理装置におけるマイクロプロ
セッサの性能向上に関わるマルチプロセッサシステム、
データ依存投機実行制御装置およびその方法に関するも
のである。
【0002】
【従来の技術】従来より、マイクロプロセッサの性能向
上技術として、マイクロプロセッサが実行するプログラ
ム中の命令の順序とは異なる順序で命令の実行する、非
プログラム順序実行(アウトオブオーダ実行)技術が広
く使われている。非プログラム順序実行では、プロセッ
サが、実行可能になった命令から実行するため、プログ
ラム中の命令の順序で実行するプログラム順序実行(イ
ンオーダ実行)を行う場合に比べて、プロセッサの性能
を向上させることが可能となる。
【0003】しかし、非プログラム順序実行は、無条件
に行えるわけではない。非プログラム順序実行が可能な
条件として、まず、実行する命令間のレジスタに関する
正依存関係がないことがあげられる。例えば、プログラ
ム順序で前にある命令が変更を行うレジスタを、プログ
ラム順序でそれより後にある命令が参照する場合、前に
ある命令から後にある命令へレジスタに関する正依存関
係があるという。
【0004】この場合、それら2つの命令をプログラム
順序とは逆の順序で実行すると、プログラムの意味が変
わってしまい、正しいプログラムの実行結果を得ること
ができない。すなわち、レジスタに関して正依存関係が
ある場合、非プログラム順序で実行することができな
い。
【0005】同様にして、プログラム順序で前にある命
令が参照するレジスタを、プログラム順序でそれより後
にある命令が変更を行う場合、前にある命令から後にあ
る命令へレジスタに関する逆依存関係があるという。
【0006】また、プログラム順序で前にある命令が変
更を行うレジスタを、プログラム順序でそれより後にあ
る命令も変更を行う場合、前にある命令から後にある命
令へレジスタに関する出力依存関係があるという。いず
れの場合も、それら2つの命令をプログラム順序とは逆
の順序で実行すると、プログラムの意味が変わってしま
い、正しいプログラムの実行結果を得ることができな
い。
【0007】通常、各命令が変更あるいは参照の対象と
するレジスタは、命令のデコード時に判明するため、依
存関係のある命令に対しては、非プログラム順序で実行
を行わないことで対応することが多い。また、逆依存関
係、出力依存関係に対してはレジスタ・リネーミングな
どの技術で、その依存を解消して、非プログラム順序実
行を可能にすることも広く実施されている。
【0008】メモリに対して操作を行うメモリ操作命令
に対しては、非プログラム順序実行に際して、レジスタ
に関する依存関係に加えて、メモリに関する依存関係に
関しての考慮が必要となる。
【0009】通常、メモリ操作命令には、メモリからデ
ータを読み出すロード命令と、メモリへデータを書き込
むストア命令が含まれる。プログラム中に出現する、あ
る2つのロード命令またはストア命令が対象とするアド
レスが互いに異なれば、メモリの異なる位置が読み出
し、または書き込みの対象となる。そのため、これら2
つのロード命令またはストア命令の間には、メモリに関
して依存関係は存在しない。すなわち、それら2つの命
令は、非プログラム順序で実行することが可能である。
【0010】一方、プログラム中に出現する、ある2つ
のロード命令またはストア命令が対象とするアドレスが
同じ場合、メモリの同じ位置が読み出し、または書き込
みの対象となる。そのため、それら2つのロード命令ま
たはストア命令間には、メモリに関して依存関係が存在
する。
【0011】例えば、プログラム順序で前にあるストア
命令が書き込みを行うアドレスに対して、プログラム順
序でそれより後にあるロード命令が読み出しを行う場
合、前にあるストア命令から後にあるロード命令へ、メ
モリに関する正依存関係があるという。
【0012】この場合、それら2つのロード命令、スト
ア命令を、プログラム順序とは逆の順序で実行すると、
プログラムの意味が変わってしまい、正しいプログラム
の実行結果を得ることができない。すなわち、メモリに
関して正依存関係がある場合、非プログラム順序で実行
することができない。
【0013】同様にして、プログラム順序で前にあるロ
ード命令が読み出しを行うアドレスに対して、プログラ
ム順序でそれより後にあるストア命令が書き込みを行う
場合、前にあるロード命令から後にあるストア命令へメ
モリに関する逆依存関係があるという。
【0014】また、プログラム順序で前にあるストア命
令が書き込みを行うアドレスに対して、プログラム順序
でそれより後にあるストア命令も書き込みを行う場合、
前にあるストア命令から後にあるストア命令へメモリに
関する出力依存関係があるという。いずれの場合も、そ
れら2つのロード・ストア命令をプログラム順序とは逆
の順序で実行すると、プログラムの意味が変わってしま
い、正しいプログラムの実行結果を得ることができな
い。
【0015】メモリに関する逆依存関係、および出力依
存関係に対しては、ストア命令が書き込みを行うデータ
を一時的なバッファ(通常、ストアバッファと呼ばれ
る)に一時的に格納するなどの対応で、逆依存関係ある
いは出力依存関係を解消し、非プログラム順序実行を可
能とする技術が、従来より知られている。
【0016】一方、正依存関係が存在する場合は、本質
的に非プログラム順序で実行することができず、プログ
ラム順序で実行することになる。しかしながら、ロード
・ストア命令が対象とするアドレスは、実行時まで不明
である場合が多い。すなわち、デコード時に依存関係が
判明するレジスタの場合と違い、メモリの場合には、実
行時まで依存関係が判明しない場合が多い。そのため、
非プログラム順序で実行できないことによる性能への影
響が大きい。
【0017】その具体例を、図11を参照して説明す
る。図11の(a)は、ロード・ストア命令からなるプ
ログラム例のプログラム順序であり、そのプログラム順
に、アドレスA1に対するロード命令LD1、アドレス
A4’に対するストア命令ST1、アドレスA2に対す
るロード命令LD2、アドレスA3に対するロード命令
LD3、アドレスA4に対するロード命令LD4を示し
ている。
【0018】ここで、ST1の対象アドレスA4’とL
D4の対象アドレスA4が等しい(A4’=A4)とす
ると、ST1とLD4は同じアドレスを対象としてい
て、かつ、LD4よりもST1の方がプログラム順序で
前にあるため、ST1からLD4へ正依存関係が存在す
る。
【0019】つまり、プログラムの意味上、ST1がア
ドレスA4’(=A4)に書き込みを行ったデータを、
LD4がアドレスA4(=A4’)から読み出すことが
期待されている。そのため、それらの実行も先にST
1、その後にLD4のプログラム順序で行われる必要が
ある。
【0020】図11の(b)は、図11の(a)に示し
たプログラム順序の命令列についてのプログラム順序実
行の例である。同図において、左からサイクル番号、そ
のサイクルの実行命令、実行命令の対象アドレスを示
す。ここで、ST1の対象アドレスA4’は、5サイク
ル目まで判明しないと想定すると、1サイクル目にアド
レスA1に対するロード命令LD1、5サイクル目にア
ドレスA4’対するストア命令ST1、6サイクル目に
アドレスA2に対するロード命令LD2、7サイクル目
にアドレスA3に対するロード命令LD3、8サイクル
目にアドレスA4に対するロード命令LD4が実行され
ることになる。
【0021】仮に2サイクル目、または3サイクル目、
または4サイクル目にアドレスA2、またはアドレスA
3、またはアドレスA4が判明していたとしても、LD
2、またはLD3、またはLD4を、2サイクル目、ま
たは3サイクル目、または4サイクル目にST1を追い
越して実行する非プログラム順序実行することはできな
い。
【0022】なぜなら、上述のように、ST1の対象ア
ドレスA4’は、5サイクル目まで判明しないため、5
サイクル目まで、ST1からLD1,LD2,LD3,
LD4への正依存関係の有無も判明しないからである。
【0023】すなわち、図11の(b)に示したプログ
ラム順序実行の例の場合、2サイクル目、3サイクル
目、4サイクル目には、ロード・ストア命令を実行する
ことができず、LD1,LD2,LD3,LD4,ST
1の5命令の実行に8サイクルを要してしまう。
【0024】このように、ロード・ストア命令に関して
非プログラム順序実行を行わない方法では、その実行性
能が低下するという問題がある。そこで、この問題に対
して、従来より知られているものに、正依存関係の有無
が判明するよりも前に、正依存関係が存在しないと仮定
して、投機的に非プログラム順序実行を行う方式があ
る。以下、この方式によるデータの正依存関係に対する
投機的な命令実行を「データ依存投機実行」と表記す
る。
【0025】データ依存投機実行においては、実際に正
依存関係が存在せず、投機実行が成功する場合と、実際
に正依存関係が存在して、投機実行が失敗する場合とが
あり、正依存関係の有無が判明した時点で、そのいずれ
であるかを判定する必要がある。実際に正依存関係が存
在せず、投機実行が成功した場合、そのまま、後続の命
令実行を継続することが可能であり、データ依存投機実
行による非プログラム順序実行を行った分だけ、実行性
能の向上が期待できる。
【0026】一方、実際に正依存関係が存在して、投機
実行が失敗した場合、プログラムの意味が変わってしま
うため、プログラムの正しい実行結果が保証できなくな
る。そのため、データ依存投機実行による非プログラム
順序実行を行った命令の結果を取り消して、プログラム
順序で再実行するなどのデータ依存投機実行の失敗に対
する回復処理が必要となる。
【0027】投機実行が失敗した場合、失敗した命令の
取り消しや回復処理のために、プログラム順序実行する
よりも性能が低下することが多い。しかし、投機実行に
失敗する場合よりも、成功する場合の確率が十分に高け
れば、プログラム全体としての実行性能の向上が期待で
きることになる。
【0028】なお、非プログラム順序実行については、
マイク・ジョンソンによる文献、「スーパースカラ・プ
ロセッサ」(日経BP出版センター、1994年)に詳
細に記載されている。また、データ依存投機実行や投機
実行の失敗による回復処理方法については、例えば、特
開平5−224927号公報や特開平8−314721
号公報に開示されている。
【0029】そこで、データ依存投機実行の具体例を説
明する。図11の(c)は、図11の(a)に示したプ
ログラム順序の命令列に対して、データ依存投機実行を
行い、かつ、投機実行に成功した場合の実行例である。
図11の(b)に示したプログラム順序実行の場合と同
様、ST1の対象アドレスA4’は、5サイクル目まで
判明しないものとする。また、LD2の対象アドレスA
2は、2サイクル目で、LD3の対象アドレスA3は、
3サイクル目で、そして、LD4の対象アドレスA4
は、6サイクル目で判明すると想定する。
【0030】まず、1サイクル目に、アドレスA1に対
するロード命令LD1を実行する。次に、2サイクル目
において、プログラム順序(図11の(a)参照)で
は、ST1を実行するのであるが、対象アドレスA4’
は、まだ不明であるために実行できない。このため、対
象アドレスA2が判明しているLD2を、ST1を追い
越して非プログラム順序で実行する。
【0031】ここで、ST1の対象アドレスA4’は、
まだ不明であるため、ST1からLD2への正依存関係
の有無もまた、不明である。すなわち、LD2は、ST
1に対してデータ依存投機実行する。
【0032】同様にして、3サイクル目においても、S
T1は、まだ実行できないため、対象アドレスA3が判
明しているLD3のデータ依存投機実行する。このと
き、ST1からLD3への正依存関係の有無もまた、不
明である。
【0033】次に、4サイクル目では、ST1およびL
D4ともに、その対象アドレスは不明であるから、いず
れの命令も実行できない。そして、5サイクル目におい
て、ST1の対象アドレスA4’が判明するので、ST
1を実行する。同時に、ST1から、データ依存投機実
行を行ったLD2,LD3に対する正依存関係の有無を
判定する。
【0034】この場合、LD2の対象アドレスA2、お
よびLD3の対象アドレスA3は、ST1の対象アドレ
スA4’と異なるため、LD2およびLD3に対して正
依存関係は存在しない。すなわち、LD2およびLD3
のデータ依存投機実行は、成功したと判断する。従っ
て、後続の命令実行をそのまま継続することができ、次
の6サイクル目に、LD4を実行する。このLD4は、
ST1から正依存関係があるが、プログラム順序で実行
されているので問題は生じない。以上が、データ依存投
機実行が成功した場合である。
【0035】このように、図11の(b)に示したプロ
グラム順序で実行した場合、その実行に8サイクルを要
したのに対して、データ依存投機実行による非プログラ
ム順序実行が成功した場合、実行は、6サイクルで完了
する。そのため、その分だけ、実行性能が向上してい
る。
【0036】一方、図11の(d)は、図11の(a)
に示したプログラム順序の命令列に対して、データ依存
投機実行を行い、かつ、投機実行に失敗した場合の実行
例を示している。ここでも、図11の(b)で示したプ
ログラム順序実行の場合と同様、ST1の対象アドレス
A4’は、5サイクル目まで判明しないものとする。ま
た、LD2の対象アドレスA2は、2サイクル目で、L
D3の対象アドレスA3は、3サイクル目で、LD4の
対象アドレスA4は、4サイクル目で判明すると想定す
る。
【0037】そこで、まず、1サイクル目に、アドレス
A1に対するロード命令LD1を実行する。次に、図1
1の(c)で示したデータ依存投機実行が成功した場合
と同様に、2サイクル目、および3サイクル目におい
て、プログラム順序で次の命令であるST1は、対象ア
ドレスA4’が、まだ不明であるために実行できない。
そのため、対象アドレスが判明しているLD2およびL
D3を、データ依存投機実行による非プログラム順序実
行する。
【0038】次に、4サイクル目では、いまだST1の
対象アドレスA4’は不明であるが、LD4の対象アド
レスA4は判明しているため、LD4のデータ依存投機
実行をする。5サイクル目において、ST1の対象アド
レスA4’が判明するので、ST1を実行する。同時
に、ST1から、データ依存投機実行を行ったLD2,
LD3,LD4に対する正依存関係の有無を判定する。
【0039】この場合、LD2の対象アドレスA2、お
よびLD3の対象アドレスA3は、ST1の対象アドレ
スA4’と異なるため、LD2およびLD3に対して
は、正依存関係は存在しない。しかし、LD4の対象ア
ドレスA4は、ST1の対象アドレスA4’に等しいた
め、ST1からLD4に対して正依存関係が存在する。
【0040】すなわち、正依存関係が存在するにもかか
わらず、非プログラム順序で実行してしまっているの
で、LD4のデータ依存投機実行は、失敗したと判断す
る。この場合、このまま後続の命令の実行を継続する
と、プログラムの正しい実行結果が保証されないので、
データ依存投機実行の、失敗の回復処理の実行が必要で
ある。
【0041】例えば、図11の(d)に示す実行例で
は、5サイクル目においてデータ依存投機実行は失敗し
たと判断されると、まず、データ依存投機実行を行った
2サイクル目から4サイクル目のLD2,LD3,LD
4、および、5サイクル目のST1の実行結果を取り消
す。次に、実行結果を取り消したST1,LD2,LD
3,LD4の再実行を、7サイクル目からプログラム順
序で実行することで、データ依存投機実行の失敗の回復
を行い、その後、後続命令の実行を再開する。
【0042】この場合、LD1,LD2,LD3,LD
4,ST1の5命令の実行に、10サイクルを要するこ
とになり、プログラム順序で実行を行った場合の8サイ
クルより、性能が低下することになる。しかし、データ
依存投機実行に成功した場合は、6サイクルで実行でき
る。そのため、投機実行に失敗する場合よりも成功する
場合の確率が十分に高ければ、プログラム全体としての
実行性能の向上が期待できる。
【0043】このように、プロセッサがデータ依存投機
実行をするには、ロード・ストア命令間のメモリに対す
る正依存関係の有無を判定する機能が必要となる。この
機能を担う装置として、例えば、特開平8−31472
1号公報に開示されているアドレス比較器などのデータ
依存関係検出装置がある。以下、データ依存関係検出装
置を備えたプロセッサにおけるデータ依存投機実行につ
いて説明する。
【0044】図12は、ロード・ストア命令間の正依存
関係を検出するデータ依存関係検出装置を備えるプロセ
ッサの構成を示すブロック図である。同図に示すプロセ
ッサは、プロセッサ制御部120、命令実行部121、
データ依存関係検出装置130を備える。これらの内、
データ依存関係検出装置130は、ロード命令の対象ア
ドレスを格納する複数のアドレスバッファ131、各々
のアドレスバッファ131に接続された複数のアドレス
比較器132、すべてのアドレス比較器132の出力を
入力とする論理和回路133から構成される。
【0045】アドレス比較器132は、アドレスバッフ
ァ131に格納されたロード命令の対象アドレスと、実
行中のストア命令の対象アドレスとの比較を行う。論理
和回路133は、すべてのアドレス比較器132の、出
力の論理和を演算し、それをデータ依存検出結果160
として出力する。
【0046】本プロセッサが命令を実行する場合、プロ
セッサ制御部120は、実行する命令の種別を、実行命
令115を通じて命令実行部121、およびデータ依存
関係検出装置130に出力する。さらに、実行する命令
がメモリ操作命令の場合、プロセッサ制御部120は、
その操作の対象となるアドレスを、対象アドレス114
を通じて命令実行部121、およびデータ依存関係検出
装置130に出力する。さらに、メモリ操作命令をデー
タ依存投機実行する場合、プロセッサ制御部120は、
その旨を、投機実行フラグ113を通じてデータ依存関
係検出装置130に通知する。
【0047】データ依存関係検出装置130によるスト
ア命令からロード命令へのメモリに関する正依存関係の
検出は、以下に示す動作で実現される。まず、プロセッ
サがデータ依存関係に対して、投機的な命令実行を行わ
ず、プログラム順序で確定的に命令実行する状態にある
場合(以下、「確定実行状態」と表記する)、データ依
存関係検出装置130は、何ら動作を行わない。
【0048】それに対して、プロセッサが、データ依存
関係に対して投機的な命令実行を行う状態(以下では、
「投機実行状態」と表記する)にある場合、データ依存
関係検出装置130は、ストア命令からロード命令への
正依存関係の検出処理を行う。プロセッサが、確定実行
状態、または投機実行状態のどちらにあるかは、プロセ
ッサ制御部120からデータ依存関係検出装置130に
入力される投機実行フラグ113で判断する。ロード命
令がデータ依存投機実行された場合、その対象アドレス
を、これまでロード命令の対象アドレスが格納されてい
ない、空いているアドレスバッファ131に格納してい
く。
【0049】次に、ストア命令が実行されると、その対
象アドレスは、すべてのアドレス比較器132に入力さ
れ、その比較器で、アドレスバッファ131に格納され
ている、それ以前にデータ依存投機実行されたロード命
令の対象アドレスと比較する。アドレス比較器132か
ら出力された比較結果は、すべて論理和をとり、データ
依存検出結果116として、プロセッサ制御部120へ
出力される。
【0050】ストア命令の対象アドレスと、アドレスバ
ッファ131に格納されているロード命令の対象アドレ
スのいずれとも一致しない場合、そのストア命令からア
ドレスバッファ131に対象アドレスを格納したロード
命令へ、正依存関係が存在しないと判断することができ
る。そこで、その旨がデータ依存検出結果116として
プロセッサ制御部120へ出力される。この場合、デー
タ依存投機実行が成功したとして、そのまま、後続の命
令の実行を継続することができる。
【0051】一方、ストア命令の対象アドレスと、アド
レスバッファ131に格納されているロード命令の対象
アドレスのいずれかが一致した場合、そのストア命令か
らアドレスバッファ131に対象アドレスを格納したロ
ード命令へ、正依存関係が存在すると判断することがで
きるので、その旨がデータ依存検出結果116としてプ
ロセッサ制御部120へ出力される。この場合、データ
依存投機実行が失敗したとして、プロセッサ制御部12
0はデータ依存投機実行が失敗したことによる回復処理
などを実行する。
【0052】また、ハードウエアによる投機実行の成功
確率を向上させる技術として、従来より知られているも
のに、分岐投機実行に対する分岐予測技術がある。例え
ば、特開平10−171653号公報に記載のものは、
実行するプログラム毎に前回までの分岐の履歴情報から
なる学習情報と、今回の分岐結果からなる正解情報とか
ら重み情報を更新し、それを用いて、次回の分岐予測を
行う方式および装置に関するものである。
【0053】また、特表平11−504458号公報に
は、スーパースカラマイクロプロセッサにおける条件付
き分岐命令の方向指示を、行使された実際の分岐動作の
履歴を記録した履歴レジスタを用いて予測する装置など
が開示されている。
【0054】
【発明が解決しようとする課題】しかしながら、上記従
来のデータ依存投機実行方式は、データ依存投機実行が
失敗する確率が高い場合、データ依存投機実行失敗の回
復処理のために、プログラムの実行性能が低下するとい
う問題がある。
【0055】また、投機実行の成否が、その投機実行の
直後に判明する分岐投機実行と異なり、データ依存投機
実行では、投機実行の成否が投機実行のはるか後に判明
するため、特開平10−171653号や特表平11−
504458号公報に開示された、上記従来の分岐予測
装置を、データ依存投機実行の成否予測に適用すること
は困難である、という問題がある。
【0056】本発明は、上述の課題に鑑みなてされたも
のであり、その目的とするところは、データ依存投機実
行において、データ依存投機実行が失敗する確率を低減
し、同時に、プログラムの実行性能を向上できるマルチ
プロセッサシステム、データ依存投機実行制御装置およ
びその方法を提供することである。
【0057】
【課題を解決するための手段】上記の目的を達成するた
め、本発明は、データ依存投機実行の制御手段(以下、
データ依存投機制御装置と表記する)を提供する。具体
的には、本発明は、メモリ操作命令を非プログラム順序
で、命令間の依存関係に関して投機的に実行するデータ
依存投機実行制御装置において、上記メモリ操作命令の
処理アドレスを受けて、その処理アドレスを一意な番号
に変換するアドレス変換手段と、上記変換された番号に
対応して、上記メモリ操作命令の投機的実行の成否履歴
を記憶する成否履歴記憶手段と、上記成否履歴を参照し
て、上記投機的実行の成否を予測する予測手段と、上記
予測の結果に従って上記メモリ操作命令を実行する実行
手段とを備えるデータ依存投機実行制御装置を提供す
る。
【0058】また、他の発明によれば、複数のプロセッ
サから構成され、スレッド単位で並列処理を行うマルチ
プロセッサシステムにおいて、上記スレッドを構成する
メモリ操作命令の処理アドレスを一意な番号に変換する
アドレス変換手段と、上記変換された番号に対応して、
上記メモリ操作命令の投機的実行の成否履歴を記憶する
成否履歴記憶手段と、上記成否履歴を参照して、上記投
機的実行の成否を予測する予測手段と、上記予測の結果
に従って、上記メモリ操作命令を上記スレッド間の依存
関係に関して投機的に実行する実行手段とを備えるマル
チプロセッサシステムが提供される。
【0059】好ましくは、上記実行手段は、上記予測手
段が上記投機的実行の成功を予測した場合、上記メモリ
操作命令を非プログラム順序で投機的に実行し、上記予
測手段が上記投機的実行の失敗を予測した場合には、上
記メモリ操作命令をプログラム順序で確定的に実行す
る。
【0060】また、好適には、上記予測手段は、上記成
否履歴記憶手段の内容を参照して、過去において投機的
実行が失敗するよりも成功した確率が高ければ、その投
機的実行の成功を予測し、過去において投機的実行が成
功するよりも失敗した確率が高ければ、その投機的実行
の失敗を予測する。
【0061】さらに、他の発明によれば、メモリ操作命
令を非プログラム順序で、命令間の依存関係に関して投
機的に実行するデータ依存投機実行制御方法において、
上記メモリ操作命令の処理アドレスを受けて、その処理
アドレスを一意な番号に変換するステップと、上記変換
された番号に対応して、上記メモリ操作命令の投機的実
行の成否履歴を記憶するステップと、上記成否履歴を参
照して、上記投機的実行の成否を予測するステップと、
上記予測の結果に従って上記メモリ操作命令を実行する
ステップとを備えるデータ依存投機実行制御方法が提供
される。
【0062】
【発明の実施の形態】以下、添付図面を参照しながら、
本発明の実施の形態を詳細に説明する。 [実施の形態1]最初に、本発明の実施の形態1につい
て、図面を参照して詳細に説明する。図1は、本発明の
実施の形態1に係るデータ依存投機制御装置を含むプロ
セッサの構成を示すブロック図である。同図に示すプロ
セッサは、データ依存投機制御装置10、プロセッサ制
御部20、命令実行部21、データ依存関係検出装置3
0により構成される。なお、本プロセッサの他の構成要
素については、図示を省略してある。
【0063】本プロセッサが命令を実行する場合、プロ
セッサ制御部20は、実行する命令の種別を、実行命令
15を通じて、命令実行部21、データ依存投機制御装
置10、およびデータ依存関係検出装置30に出力す
る。さらに、実行する命令がメモリ操作命令の場合、プ
ロセッサ制御部20は、その操作の対象となるアドレス
を、対象アドレス14を通じて、命令実行部21、デー
タ依存投機制御装置10、およびデータ依存関係検出装
置30に出力する。
【0064】さらに、メモリ操作命令をデータ依存投機
実行する場合、プロセッサ制御部20は、その旨を、投
機実行フラグ13を通じて、データ依存投機制御装置1
0、およびデータ依存関係検出装置30に通知する。
【0065】データ依存投機制御装置10は、ハッシュ
関数回路11、および投機実行成否履歴テーブル12よ
り構成される。また、データ依存投機制御装置10は、
プロセッサ制御部20から、投機実行フラグ13、対象
アドレス14、実行命令15を入力する。さらに、デー
タ依存投機制御装置10は、プロセッサ制御部20へ、
データ投機実行成否予測結果17を出力する。
【0066】ハッシュ関数回路11は、mビットで表現
されるメモリ操作命令の対象アドレスを、nビットで表
現される投機実行成否履歴テーブル12のエントリ番号
に変換するハッシュ関数fを実現する論理回路である。
通常、mよりもnの方が小さい(m>n)。ここで、ハ
ッシュ関数fは、同一の入力に対しては、同一の値を持
つことを特徴とする。
【0067】すなわち、N1=f(A1)、かつN2=
f(A2)としたとき、A1=A2であれば、N1=N
2が成立する関数である。従って、ハッシュ関数回路1
1は、同一のロード・ストア命令の対象アドレスに対し
て、必ず同一の命令履歴テーブルのエントリ番号を出力
することを保証する。
【0068】一方、A1≠A2であっても、一般には、
N1≠N2は保証されない。すなわち、異なるロード・
ストア命令の対象アドレスに対して、同一の命令履歴テ
ーブルのエントリ番号が出力される場合が存在する。
【0069】投機実行成否履歴テーブル12は、各々の
エントリが、メモリやフリップフロップなどの記憶手段
で実現された複数のエントリから構成される。各エント
リには、過去に投機実行を行ったメモリ操作命令のアド
レスに対する投機実行の成否結果の履歴を記憶する。投
機実行成否履歴テーブル12が備える、上記エントリの
総数は、ハッシュ関数回路11の出力がnビット幅であ
る場合、2のn乗に等しい数である。この投機実行成否
履歴テーブル12は、ハッシュ関数回路11が出力する
エントリ番号が指し示すエントリに対して、書き込み、
および読み出し処理を行う。
【0070】図2は、図1に示すプロセッサによる命令
実行の手順を示すフローチャートである。上記のプロセ
ッサは、データ依存関係検出装置30によるロード命令
の投機実行の成否判定機能、データ依存投機制御装置1
0による前記投機実行の成否予測および実行制御機能を
有する。命令の実行は、図2のブロック60で開始さ
れ、ブロック69で終了する。
【0071】まず、ブロック61において、プロセッサ
制御部20による命令のデコード、および発行が行われ
る。次に、ブロック62において、発行された命令がロ
ード命令の場合は、ブロック63へ、ロード命令以外の
場合は、ブロック74へ分岐する。発行された命令は、
プロセッサ制御部20が出力する実行命令15により与
えられる。
【0072】また、ブロック63において、前記発行さ
れたロード命令が投機的な実行の場合は、ブロック64
へ、確定的な実行の場合は、ブロック72へ分岐する。
実行が投機的であるか、確定的であるかは、プロセッサ
制御部20の出力する投機実行フラグ13により与えら
れる。そして、このロード命令が投機的な実行の場合、
ブロック64において、データ依存投機制御装置10に
より、投機実行が成功するか失敗するかの予測を行う。
【0073】次に、ブロック65において、前記予測
が、投機実行が“成功”することを予測した場合は、ブ
ロック66へ、“失敗”することを予測した場合には、
ブロック70へ分岐する。投機実行が“成功”すること
を予測した場合、ブロック66において、そのロード命
令を投機的に実行する。そして、ブロック67におい
て、ロード命令を投機実行した旨を、データ依存関係検
出装置30に記憶する。続くブロック68において、投
機実行を行ったという事実により、データ依存投機制御
装置10に記憶されている投機実行成否結果を更新し、
次のブロック69において、ロード命令の投機的な実行
が終了する。
【0074】一方、ブロック64において、ロード命令
の投機実行が“失敗”することを予測した場合、ブロッ
ク70において、そのロード命令の投機的な実行を中止
する。このロード命令は、後にプログラム順序で確定的
に実行されることになる。次のブロック71では、投機
実行を行わなかったという事実により、データ依存投機
制御装置10に記憶されている投機実行成否結果を更新
し、ブロック69において、今回のロード命令の実行
を、中止により終了する。
【0075】他方、ブロック63において、発行された
ロード命令が確定的な実行の場合、ブロック72におい
て、そのロード命令を確定的に実行する。続くブロック
73において、確定的に実行したという事実により、デ
ータ依存投機制御装置10に記憶されている投機実行成
否結果を更新し、ブロック69において、ロード命令の
実行が終了する。
【0076】ブロック74では、発行された命令がスト
ア命令の場合は、ブロック75に分岐し、発行された命
令がロード命令でも、ストア命令でもない場合には、ブ
ロック81に分岐する。すなわち、ストア命令が発行さ
れた場合は、ブロック75において、データ依存関係検
出装置30により、それ以前に投機実行されたロード命
令が、前記ストア命令に関して成功したか、失敗したか
を判定する。そして、ブロック76において、投機実行
が成功した場合は、ブロック77に分岐し、投機実行が
失敗した場合には、ブロック79に分岐する。
【0077】投機実行が成功した場合、ブロック77に
おいて、ストア命令を(確定的に)実行する。次のブロ
ック78において、投機実行が成功したという事実によ
り、データ依存投機制御装置10に記憶されている投機
実行成否結果を更新し、ブロック69において、ストア
命令の実行が終了する。しかし、ブロック76におい
て、ロード命令の投機実行が失敗した場合、ブロック7
9において、投機実行が失敗したという事実により、デ
ータ依存投機制御装置10に記憶されている投機実行成
否結果を更新する。続くブロック80において、投機実
行失敗の回復処理を実行し、ブロック69において、ス
トア命令の実行が終了する。
【0078】ブロック74において、発行された命令が
ロード命令でも、ストア命令でもない場合には、ブロッ
ク81で命令を実行し、ブロック69において終了す
る。この場合、データ依存投機制御装置10、およびデ
ータ依存関係検出装置30は、何ら動作を行わない。
【0079】次に、再び図1を参照して、データ依存投
機制御装置10の動作の詳細を説明する。まず、図2に
示すフローチャート上のブロック64において、投機実
行成否履歴テーブル12に記憶されている投機実行の成
否結果の履歴を参照し、それに基づいて、ロード命令の
投機実行が成功するか、失敗するかの予測を行う。より
詳細には、プロセッサ制御部20から対象アドレス14
により与えられるロード命令の対象アドレスを、ハッシ
ュ関数回路11により投機実行成否履歴テーブル12の
エントリ番号に変換し、投機実行成否履歴テーブル12
に入力する。
【0080】投機実行成否履歴テーブル12は、入力さ
れたエントリ番号に対応するエントリの内容を読み出
し、それに基づいて、前記ロード命令の投機実行の成否
を予測する。また、図2に示すフローチャートにおける
ブロック68,71,73,78,79においては、そ
れぞれの実行フローに基づいて、投機実行成否履歴12
に記憶されている投機実行の成否予測結果の履歴を更新
する。
【0081】より詳細には、プロセッサ制御部20から
対象アドレス14により与えられるロード・ストア命令
の対象アドレスを、ハッシュ関数回路11により投機実
行成否履歴テーブル12のエントリ番号に変換し、投機
実行成否履歴テーブル12に入力する。そこで、投機実
行成否履歴テーブル12は、入力されたエントリ番号に
対応するエントリの内容を読み出し、そのエントリ内容
とそれぞれの実行フローに基づいて、前記エントリ内容
を更新する。
【0082】図3は、投機実行成否履歴テーブル12の
各エントリ内容の状態遷移を示す状態遷移図である。各
エントリは、それぞれ3ビットの記憶素子から構成さ
れ、8つの投機実行成否履歴状態、すなわち、符号90
で示される“強い成功0”、符号91の“強い成功
1”、符号92の“弱い成功0”、符号93の“弱い成
功1”、符号94の“弱い失敗0”、符号95の“弱い
失敗1”、符号96の“強い失敗0”、そして、符号9
7の“強い失敗1”のいずれかの状態を指定する。
【0083】“強い成功0”90は、それまで投機実行
が成功した確率がかなり高く、かつ、そのエントリに割
り当てられる対象アドレスのロード命令が、未だ投機的
に発行されていない状態を示す。また、“強い成功1”
91は、それまで投機実行が成功した確率がかなり高
く、かつ、そのエントリに割り当てられる対象アドレス
のロード命令が、既に投機的に発行されている状態を示
す。
【0084】“弱い成功0”92は、“強い成功0”9
0ほどではないが、それまで、投機実行が失敗したより
も、成功した確率が高く、かつ、そのエントリに割り当
てられる対象アドレスのロード命令が、未だ投機的に発
行されていない状態を示す。“弱い成功1”93は、
“強い成功1”91ほどではないが、それまで、投機実
行が失敗したよりも、成功した確率が高く、かつ、その
エントリに割り当てられる対象アドレスのロード命令
が、既に投機的に発行されている状態を示す。
【0085】“強い失敗0”96は、それまで、投機実
行が失敗した確率がかなり高く、かつ、そのエントリに
割り当てられる対象アドレスのロード命令が、未だ投機
的に発行されていない状態を示す。“強い失敗1”97
は、それまで、投機実行が失敗した確率がかなり高く、
かつ、そのエントリに割り当てられる対象アドレスのロ
ード命令が、既に投機的に発行されている状態を示す。
【0086】また、“弱い失敗0”94は、“強い失敗
0”96ほどではないが、それまで、投機実行が成功し
たよりも、失敗した確率が高く、かつ、そのエントリに
割り当てられる対象アドレスのロード命令が、未だ投機
的に発行されていない状態を示す。“弱い失敗1”95
は、“強い失敗1”97ほどではないが、それまで、投
機実行が成功したよりも、失敗した確率が高く、かつ、
そのエントリに割り当てられる対象アドレスのロード命
令が、既に投機的に発行されている状態を示す。
【0087】上記の投機実行成否履歴テーブル12の各
エントリが保持する8つの状態は、3ビットの記憶素子
で実現することができる。例えば、図3において、“強
い成功0”90は、“000”、“強い成功1”91
は、“001”、“弱い成功0”92は、“010”、
“弱い成功1”93は、“011”、“弱い失敗0”9
4は、“100”、“弱い失敗1”95は、“10
1”、“強い失敗0”96は、”110”、そして、
“強い失敗1”97は、“111”で表現される。
【0088】図2のフローチャートに示す、ブロック6
4における投機実行の成否予測は、参照したエントリ
が、上記8つの状態のいずれにあるかで決定がなされ
る。すなわち、エントリが、“強い成功0”、“強い成
功1”、“弱い成功0”、“弱い成功1”のいずれかに
ある場合は、投機実行が成功する可能性が高いと予測
し、ロード命令を投機的に実行する。
【0089】一方、エントリが、“強い失敗0”、“強
い失敗1”、“弱い失敗0”、“弱い失敗1”のいずれ
かにある場合には、投機実行が失敗する可能性が高いと
予測し、ロード命令の投機実行を中止して、後にプログ
ラム順序で確定的に実行する。
【0090】また、上記8状態間の状態遷移は、図2に
示したフローチャートのブロック68,71,73,7
8,79において、以下のように行う。まず、初期状態
において、すべてのエントリが任意の状態にある。今、
仮に、あるエントリが“弱い成功0”92にあるとす
る。このとき、そのエントリに対応するアドレスを対象
とする投機的なロード命令を発行した場合、ブロック6
8において、エントリの状態を“弱い成功1”93へ遷
移させる。
【0091】この場合、ブロック64の投機実行の成否
予測で、投機実行が成功すると予測されるため、実際に
ロード命令が投機実行されることになる(ブロック6
6)。それ以外の実行フローの場合、すなわち、ブロッ
ク71,73,78,79では、エントリの状態は遷移
しない。
【0092】次に、エントリが、“弱い成功1”93に
ある場合は、そのエントリに対応するアドレスを対象と
するストア命令を実行し、ロード命令の投機実行の失敗
が検出されなければ、ロード命令の投機実行が成功した
として、ブロック78において、エントリの状態を“強
い成功0”90へ遷移させる。
【0093】一方、ロード命令の投機実行の失敗が検出
された場合、ロード命令の投機実行が失敗したとして、
ブロック79において、エントリの状態を、“弱い失敗
0”94へ遷移させる。上記以外の実行フローの場合、
すなわち、ブロック68,71,73では、エントリの
状態は遷移しない。
【0094】エントリが、“強い成功0”90にあると
きには、そのエントリに対応するアドレスを対象とする
投機的なロード命令を発行した場合、ブロック68にお
いて、エントリの状態を、“強い成功1”91へ遷移さ
せる。この場合、ブロック64の投機実行の成否予測
で、投機実行が成功すると予測されるため、実際にロー
ド命令が投機実行されることになる(ブロック66)。
なお、それ以外の実行フローの場合、すなわち、ブロッ
ク71,73,78,79では、エントリの状態は遷移
しない。
【0095】エントリが、“強い成功1”91にある場
合には、そのエントリに対応するアドレスを対象とする
ストア命令を実行し、ロード命令の投機実行の失敗が検
出されなかった場合は、ロード命令の投機実行が成功し
たとして、ブロック78において、エントリの状態は、
“強い成功0”90へ遷移させる。
【0096】他方、ロード命令の投機実行の失敗が検出
された場合は、ロード命令の投機実行が失敗したとし
て、ブロック79において、エントリの状態を、“弱い
成功0”92へ遷移させる。それ以外の実行フローの場
合、すなわち、ブロック68,71,73では、エント
リの状態は遷移しない。
【0097】エントリが、“弱い失敗0”94にあると
きは、そのエントリに対応するアドレスを対象とする投
機的なロード命令を発行した場合、ブロック71におい
て、エントリの状態を、“弱い失敗1”95へ遷移させ
る。この場合、ブロック64の投機実行の成否予測で、
投機実行が失敗すると予測されるため、実際にロード命
令が投機実行されることはない。上記以外の実行フロー
の場合、すなわち、ブロック68,73,78,79で
は、エントリの状態は遷移しない。
【0098】エントリが、“弱い失敗1”95にあると
きは、そのエントリに対応するアドレスを対象とするス
トア命令を実行した場合、ロード命令の投機実行は、失
敗する可能性が高いとして、ブロック78、またはブロ
ック79において、エントリの状態を、“強い失敗0”
96へ遷移させる。この場合、ロード命令の投機実行
は、失敗する可能性が高いと判断するのは、“弱い失敗
0”94から投機的なロードが発行されて、“弱い失敗
1”95に遷移し、かつ、同アドレスのストア命令が実
行されたからである。
【0099】実際は、ブロック64において、投機実行
は失敗すると予測されるため、投機実行は中止され、確
定的に実行されるが、仮にロード命令を投機実行してい
たならば、その投機実行は失敗することになる。
【0100】一方、エントリが、“弱い失敗1”95に
あるとき、そのエントリに対応するアドレスを対象とす
る確定的なロード命令が発行された場合、ロード命令の
投機実行は、成功する可能性が高いとして、ブロック7
1において、エントリの状態を、“弱い成功0”92へ
遷移させる。この場合、ロード命令の投機実行は、成功
する可能性が高いと判断する理由は、“弱い失敗0”9
4から投機的なロードが発行されて、“弱い失敗1”9
5に遷移し、かつ、同アドレスのストア命令が実行され
ずに、確定的なロード命令が発行されたからである。
【0101】この確定的なロード命令は、ブロック64
において、投機実行が失敗すると予測されて、確定的に
実行されたロード命令と考えられ、かつ、その間に同ア
ドレスのストア命令が発行されなかったことから、仮
に、ロード命令を投機実行していたならば、その投機実
行は成功していたことになる。なお、上記以外の実行フ
ローの場合、すなわち、ブロック68,73では、エン
トリの状態は遷移しない。
【0102】次に、エントリが、“強い失敗0”96に
あるときには、そのエントリに対応するアドレスを対象
とする投機的なロード命令を発行した場合、ブロック7
1において、エントリの状態を、“強い失敗1”97へ
遷移させる。この場合、ブロック64の投機実行の成否
予測で、投機実行が失敗すると予測されるため、実際に
ロード命令が投機実行されることはない。上記以外の実
行フローの場合、すなわち、ブロック68,73,7
8,79では、エントリの状態は遷移しない。
【0103】エントリが、“強い失敗1”97にあると
き、そのエントリに対応するアドレスを対象とするスト
ア命令を実行した場合、ロード命令の投機実行は、失敗
する可能性が高いとして、ブロック78、またはブロッ
ク79において、エントリの状態は、“強い失敗0”9
6へ遷移させる。この場合、ロード命令の投機実行は、
失敗する可能性が高いと判断する理由は、“強い失敗
0”96から投機的なロードが発行されて、“強い失敗
1”97に遷移し、かつ、同アドレスのストア命令が実
行されたからである。
【0104】実際には、ブロック64において、投機実
行は失敗すると予測されるため、投機実行は中止され、
確定的に実行されるが、仮に、ロード命令を投機実行し
ていたならば、その投機実行は失敗することになる。
【0105】一方、エントリが、“強い失敗1”97に
あるとき、そのエントリに対応するアドレスを対象とす
る、確定的なロード命令が発行された場合、ロード命令
の投機実行は、成功する可能性が高いとして、ブロック
71において、エントリの状態を、“弱い失敗0”94
へ遷移させる。この場合、ロード命令の投機実行は、成
功する可能性が高いと判断する理由は、“強い失敗0”
96から投機的なロードが発行されて、“強い失敗1”
97に遷移し、かつ、同アドレスのストア命令が実行さ
れずに、確定的なロード命令が発行されたからである。
【0106】この確定的なロード命令は、ブロック64
において、投機実行が失敗すると予測されて、確定的に
実行されたロード命令と考えられ、かつ、その間に同ア
ドレスのストア命令が発行されなかったことから、仮
に、ロード命令を投機実行していたならば、その投機実
行は成功していたことになる。上記以外の実行フローの
場合、すなわち、ブロック68,79では、エントリの
状態は遷移しない。
【0107】以上、投機実行成否履歴テーブル12の各
エントリ内容の状態遷移を説明したが、上述のように、
投機実行が成功する確率が高ければ、“強い失敗”、
“弱い失敗”から“弱い成功”、“強い成功”へ、ま
た、投機実行が失敗する確率が高ければ、“強い成
功”、“弱い成功”から“弱い失敗”、“強い失敗”へ
と遷移して行く。
【0108】ブロック64における投機実行の成否予測
では、“弱い成功”、“強い成功”にあれば成功すると
予測して、ロード命令の投機実行するが、“強い失
敗”、“弱い失敗”にあれば失敗すると予測して、ロー
ド命令の投機実行を中止し、後に、プログラム順序で確
定的に実行する。すなわち、本実施の形態に係るデータ
依存投機制御装置10では、失敗する確率の高い投機実
行は確定的に実行されるため、投機実行が失敗する確率
が低減し、プログラムの実行性能が向上する。
【0109】通常、メモリ操作命令が操作対象とするア
ドレス空間よりも、投機実行成否履歴テーブル12のエ
ントリ数の方が、はるかに小さいため、ハッシュ関数回
路11は、異なるアドレスを対象とする複数のメモリ操
作命令に対して、投機実行成否履歴テーブル12の同一
のエントリ番号を割り当てる。すなわち、異なるアドレ
スを対象とする複数のメモリ操作命令に対して、投機実
行成否履歴テーブル12の同一のエントリで、投機実行
の成否予測を行う場合がある。このような異なるアドレ
スを対象とする複数のメモリ操作命令が、投機実行成否
履歴テーブル12の同一のエントリに割り当てられるこ
とを、“エイリアスが発生する”という。
【0110】かかるエイリアスが発生した場合、投機実
行の成否履歴の蓄積を適切に行えない場合があるので、
投機実行の成否予測の精度、すなわち、予測が的中する
確率が低下することがある。その場合でも、プログラム
の実行結果の正しさは保証される。そのため、プログラ
ムの意味上に問題は生じないが、予測精度の低下の分だ
け、投機実行によるプログラムの実行性能の向上が削減
される、という問題がある。
【0111】このようなことから、エイリアスは、なる
べく発生しない方が望ましい。エイリアスは、ハッシュ
関数回路11のハッシュ関数を適切に選択したり、ある
いは、投機実行成否履歴テーブル12のエントリを十
分、多く実装することにより、低減することが可能であ
る。
【0112】一方、エイリアスの発生を許容する利点と
して、投機実行の成否予測を行えるロード命令の数が、
投機実行成否履歴テーブル12のエントリ数に制限され
ないことがある。このため、多くの場合、エイリアスの
発生を許容せず、投機実行の成否予測が可能なロード命
令数を制限するよりも、本実施の形態による投機実行の
成否予測の方が、投機実行による性能向上の効果が大き
い。
【0113】次に、本実施の形態1に係るデータ依存投
機制御装置の動作の具体例について説明する。なお、こ
こでは、投機実行成否履歴テーブル12は、4つのエン
トリ、すなわち、エントリ0〜3から構成される。ハッ
シュ関数回路11は、例えば、アドレスが8ビットで表
現されるとすると、図5の(a)に示すように、入力さ
れるアドレスの特定の2ビットを出力することで、実現
できる。あるいは、図5の(b)に示すように、特定の
複数ビットの排他的論理和を演算した結果を出力するよ
うにしてもよい。
【0114】図4を参照して、データ依存投機制御装置
10の具体的な動作例を説明する。まず、図4の(a)
は、プログラム例における命令プログラム順序を示す。
このプログラム順序は、ストア命令ST1、ロード命令
LD1、ロード・ストア命令以外の命令、ロード命令L
D2の順序で発行される命令列が繰り返される、ループ
構造を持つプログラムにおいて典型的なものである。図
4の(a)には、ループ0〜2の連続する3つのループ
に含まれる命令列のみを示す。
【0115】ここで、ST1の対象アドレスはA1、L
D1の対象アドレスはA2、LD2の対象アドレスはA
1’である。A1とA1’が等しいとすると、プログラ
ム順序で、ST1の方が前にあるため、ST1からLD
2には、正依存関係が存在する。すなわち、実行時にお
いて、LD2よりもST1が先に実行されて、ST1が
アドレスA1に書き込みを行った結果を、LD2がアド
レスA1’(=A1)から読み出しを行わなければ、プ
ログラムの実行結果の正しさは保証されない。
【0116】プロセッサがデータ依存投機実行状態にあ
る場合、ストア命令からロード命令への正依存関係の有
無が不明であっても、実行可能になった命令から実行さ
れる。図4の(b)は、データ依存投機実行状態におけ
る、図4の(a)に示すプログラム順序の命令列のデー
タ依存投機実行による、非プログラム順序実行例であ
る。同図において、左から順に、サイクル番号、そのサ
イクルの実行命令、その実行命令の対象アドレスを示
す。ここで、ST1の対象アドレスA1は、4サイクル
目まで判明しないと想定する。また、LD1の対象アド
レスA2、およびLD2の対象アドレスA1’は、1サ
イクル目で判明すると想定する。
【0117】図4の(c)は、図4の(b)に示す命令
実行順序に対する、投機実行成否履歴テーブル12の動
作を示している。同図において、左から順に、サイクル
番号、そのサイクルに実行されたメモリ命令が参照する
投機実行成否履歴テーブル12のエントリ番号、そのサ
イクルの投機実行成否履歴テーブル12の状態を示す。
投機実行成否履歴テーブル12の状態については、4つ
のエントリを、右から順に、エントリ0、エントリ1、
エントリ2、エントリ3の内容を示している。
【0118】例えば、ループ0の1サイクル目におい
て、エントリ0の内容は、“100”(弱い失敗0)、
エントリ1の内容は“000”(強い成功0)、エント
リ2の内容は“010”(弱い成功0)、エントリ3の
内容は“000”(強い成功0)である。
【0119】ループ0の1サイクル目では、ST1の発
行順であるが、その対象アドレスA1が判明していない
ため、対象アドレスA2が判明している、次のLD1
を、非プログラム順序で投機実行することを試みる。ま
ず、投機実行に先立ち、データ依存投機制御装置10に
より、投機実行の成否予測を行う(図2のブロック6
4)。より詳細には、まず、LD1のアドレスA2を、
ハッシュ関数回路11により、投機実行成否履歴テーブ
ル12のエントリ番号に変換する。ここで、エントリ番
号0に変換されたとすると、次に、投機実行成否履歴テ
ーブル12より、エントリ0に格納されている成否予測
履歴“100”(弱い失敗0)が読み出される。
【0120】従って、投機実行が失敗することが予測さ
れるので、LD1の投機実行は中止され、後に、プログ
ラム順序で確定的に実行される(図2のブロック7
0)。また、投機実行成否履歴テーブル12のエントリ
0は、“101”(弱い失敗1)に遷移する(図2のブ
ロック71)。
【0121】ループ0の2サイクル目では、いまだ、S
T1は実行できないので、LD1の次のメモリ操作命令
以外の命令を実行する。データ依存投機制御装置10
は、何ら動作を行わない。次に、ループ0の3サイクル
目では、いまだ、ST1は実行できないので、対象アド
レスA1’が判明しているLD2を、非プログラム順序
で投機実行することを試みる。
【0122】まず、投機実行に先立ち、データ依存投機
制御装置10により、投機実行の成否予測を行う(図2
のブロック64)。より詳細には、LD2のアドレスA
1’を、ハッシュ関数回路11により、投機実行成否履
歴テーブル12のエントリ番号に変換する。ここで、エ
ントリ番号2に変換されたとすると、次に、投機実行成
否履歴テーブル12より、エントリ2に格納されている
成否予測履歴“010”(弱い成功0)が読み出され
る。
【0123】従って、投機実行が成功することが予測さ
れるので、LD2は投機的に実行される(図2のブロッ
ク66)。投機実行成否履歴テーブル12のエントリ2
は、“011”(弱い成功1)へ遷移する(図2のブロ
ック68)。
【0124】次に、ループ0の4サイクル目では、ST
1の対象アドレスA1が判明するので、ST1を実行す
る。その際、データ依存関係検出装置30により、それ
まで、データ依存関係に対して投機的に実行されたロー
ド命令の成否を判定する(図2のブロック75)。この
場合、ST1からLD2へ、正依存関係が存在している
にも関わらず、ST1よりもLD2を先に実行してしま
ったため、LD2の投機実行は、失敗している。
【0125】すなわち、LD2は、アドレスA1’(=
A1)から、ST1が、アドレスA1に書き込みを行っ
た値ではなく、ST1が書き込みを行う以前の値を読み
出してしまうため、プログラムの正しい実行結果を得る
ことが保証されないことになる。データ依存投機制御装
置30は、このデータ依存投機実行の失敗を検出し、プ
ロセッサ制御部20へ通知する機能を担う。
【0126】その通知により、プロセッサ制御部20
は、正しいプログラムの実行結果が得られるように、デ
ータ依存投機実行した命令の再実行など、データ依存投
機実行の失敗による回復処理を行う。具体的には、1サ
イクル目から4サイクル目までに実行された、LD1、
メモリ操作命令以外の命令、LD2、ST1の実行結果
を取り消し、6サイクル目から、今度は、プログラム順
序で確定的にそれら取り消した命令を再実行する。すな
わち、6サイクル目にST1、7サイクル目にLD1、
8サイクル目にメモリ操作命令以外の命令、9サイクル
目にLD2を確定的に再実行する。
【0127】一方、データ依存投機制御装置10におい
ては、4サイクル目に、ST1により投機実行の失敗が
検出されたため、投機実行成否履歴テーブル12のエン
トリ2を、“011”(弱い成功1)から“100”
(弱い失敗0)へ遷移させる(図2のブロック79)。
6サイクル目から9サイクル目の確定的に命令実行され
るサイクルでは、データ依存投機制御装置10は、何ら
動作を行わず、投機実行成否履歴テーブル12も、参照
および更新されない。
【0128】以上、ループ0における命令実行、および
データ依存投機制御装置10の動作について説明した。
LD2の投機実行の成否予測は、成功を予測したのに対
して、実際には、投機実行は失敗し、投機実行失敗によ
る回復処理の実行が必要となった。このため、ループ0
においては、ST1,LD1、メモリ操作命令以外の命
令、LD2の4命令の実行に、9サイクルを要した。
【0129】次に、ループ0に続く、ループ1での動作
を説明する。ここでも、ループ0の実行時と同様に、S
T1の対象アドレスA1は、4サイクル目まで判明しな
いと想定する。また、LD1の対象アドレスA2、およ
びLD2の対象アドレスA1’は、1サイクル目で判明
すると想定する。
【0130】ループ1の1サイクル目では、ST1の発
行順であるが、その対象アドレスA1が判明していない
ため、対象アドレスA2が判明している次のLD1を、
非プログラム順序で投機実行することを試みる。まず、
投機実行に先立ち、データ依存投機制御装置10によ
り、投機実行の成否予測を行う(図2のブロック6
4)。投機実行成否履歴テーブル12のエントリ0から
は、“101”(弱い失敗1)が読み出されるので、投
機実行が失敗することが予測される。
【0131】従って、LD1の投機実行は中止され、後
に、プログラム順序で確定的に実行される(図2のブロ
ック70)。この場合、投機実行成否履歴テーブル12
のエントリ0の状態は遷移しない(図2のブロック7
1)。
【0132】ループ1の2サイクル目では、いまだ、S
T1は実行できないので、LD1の次のメモリ操作命令
以外の命令を実行する。データ依存投機制御装置10
は、何ら動作を行わない。次に、ループ1の3サイクル
目では、いまだ、ST1は実行できないので、対象アド
レスA1’が判明しているLD2を、非プログラム順序
で投機実行することを試みる。
【0133】まず、投機実行に先立ち、データ依存投機
制御装置10により、投機実行の成否予測を行う(図2
のブロック64)。投機実行成否履歴テーブル12のエ
ントリ2からは、“100”(弱い失敗0)が読み出さ
れるので、投機実行は、失敗することが予測される。従
って、LD2の投機実行は中止され、後に、プログラム
順序で確定的に実行される(図2のブロック70)。ま
た、投機実行成否履歴テーブル12のエントリ2は、
“101”(弱い失敗1)に遷移する(図2のブロック
71)。
【0134】ループ1の4サイクル目では、ST1の対
象アドレスA1が判明するので、ST1を実行する。そ
の際、データ依存関係検出装置30により、それまでデ
ータ依存関係に対して投機的に実行されたロード命令の
成否を判定する(図2のブロック75)。この場合、S
T1からLD2へ、正依存関係が存在しているが、LD
2は、3サイクル目において、投機実行が失敗すること
が予測されたため、投機実行が中止されている。
【0135】このため、ST1に関して、投機実行が失
敗したロード命令は存在せず、ST1は、確定的に実行
される(図2のブロック77)。また、ストア命令が実
行されたため、投機実行成否履歴テーブル12のエント
リ2は、“101”(弱い失敗1)から“110”(強
い失敗0)へ遷移する(図2のブロック78)。
【0136】ループ1の5サイクル目では、1サイクル
目に投機実行が中止されたLD1が、ST1に対してプ
ログラム順序で、かつ、確定的に実行される。また、投
機実行成否履歴テーブル12のエントリ0は、“10
1”(弱い失敗1)から“010”(弱い成功0)へ遷
移する(図2のブロック73)。次に、ループ1の6サ
イクル目では、3サイクル目に投機実行が中止されたL
D2が、ST1に対してプログラム順序で、かつ、確定
的に実行される。投機実行成否履歴テーブル12のエン
トリ2は、“110”(強い失敗0)のままである(図
2のブロック73)。
【0137】以上が、ループ1における命令実行、およ
びデータ依存投機制御装置10の動作説明である。ここ
では、ループ0の場合と異なり、LD2の投機実行の成
否予測は、正しく失敗を予測したため、LD2の投機実
行失敗が回避された。このため、ループ0においては、
ST1,LD1、メモリ操作命令以外の命令、LD2の
4命令の実行は、6サイクルに改善された。
【0138】次に、ループ1に続くループ2における動
作を説明する。ループ0、ループ1の実行時と同様、S
T1の対象アドレスA1は、4サイクル目まで判明せ
ず、一方、LD1の対象アドレスA2、およびLD2の
対象アドレスA1’は、1サイクル目で判明すると想定
する。
【0139】ループ2の1サイクル目では、ST1の発
行順であるが、その対象アドレスA1が判明していない
ため、対象アドレスA2が判明している、次のLD1
を、非プログラム順序で投機実行することを試みる。ま
ず、投機実行に先立ち、データ依存投機制御装置10に
より、投機実行の成否予測を行う(図2のブロック6
4)。投機実行成否履歴テーブル12のエントリ0から
は、“010”(弱い成功0)が読み出されるので、投
機実行が成功することが予測される。
【0140】従って、LD1は、投機的に実行される
(図2のブロック66)。投機実行成否履歴テーブル1
2のエントリ0は、“011”(弱い成功1)に遷移す
る(図2のブロック68)。
【0141】ループ2の2サイクル目では、いまだ、S
T1は実行できないので、LD1の次のメモリ操作命令
以外の命令を実行する。データ依存投機制御装置10
は、何ら動作を行わない。次に、ループ2の3サイクル
目では、いまだ、ST1は実行できないので、対象アド
レスA1’が判明しているLD2を、非プログラム順序
で投機実行することを試みる。
【0142】まず、投機実行に先立ち、データ依存投機
制御装置10により、投機実行の成否予測を行う(図2
のブロック64)。投機実行成否履歴テーブル12のエ
ントリ2からは、“110”(強い失敗0)が読み出さ
れるので、投機実行が失敗することが予測される。従っ
て、LD2の投機実行は中止され、後に、プログラム順
序で、確定的に実行される(図2のブロック70)。ま
た、投機実行成否履歴テーブル12のエントリ2は、
“111”(強い失敗1)に遷移する(図2のブロック
71)。
【0143】ループ2の4サイクル目では、ST1の対
象アドレスA1が判明するので、ST1を実行する。そ
の際、データ依存関係検出装置30により、それまで、
データ依存関係に対して投機的に実行されたロード命令
の成否を判定する(図2のブロック75)。この場合、
ST1からLD2へ、正依存関係が存在しているが、L
D2は、3サイクル目において、投機実行が失敗するこ
とが予測されたため、投機実行が中止されている。
【0144】このため、ST1に関して、投機実行が失
敗したロード命令は存在せず、ST1は、確定的に実行
される(図2のブロック77)。また、ストア命令が実
行されたため、投機実行成否履歴テーブル12のエント
リ2は、“111”(強い失敗1)から“110”(強
い失敗0)へ遷移する(図2のブロック78)。
【0145】次に、ループ2の5サイクル目では、3サ
イクル目に投機実行が中止されたLD2が、ST1に対
してプログラム順序で、かつ、確定的に実行される。投
機実行成否履歴テーブル12のエントリ2は、“11
0”(強い失敗0)のままである(図2のブロック7
3)。
【0146】以上、ループ2における命令実行、および
データ依存投機制御装置10の動作について説明した。
ここでも、ループ1の場合と同様に、LD2の投機実行
の成否予測は、正しく失敗を予測したため、LD2の投
機実行失敗が回避された。さらに、ループ1の場合とは
異なり、LD1の投機実行の成否予測は、正しく成功を
予測したため、LD1は、投機的に実行し、かつ、成功
した。
【0147】このため、ループ2においては、ST1,
LD1、メモリ操作命令以外の命令、LD2の4命令の
実行は、5サイクルに改善された。また、この例の場
合、5サイクルが最小の実行サイクル数である。
【0148】以上説明したように、本実施の形態によれ
ば、データ依存投機制御装置10は、投機実行が失敗す
ると予測されるロード命令は、投機実行を行わず、プロ
グラム順序で確定的に実行する。その結果、投機実行が
失敗する確率が低減され、プログラムの実行性能を向上
できる。
【0149】すなわち、データ依存投機制御装置10
は、過去における投機実行の成否結果の履歴を参照し
て、投機実行の成否を予測し、成功すると予測した場合
には、投機的に実行を行うが、失敗すると予測した場
合、投機実行を中止し、後に、プログラム順序で確定的
に実行する。よって、このデータ依存投機制御装置10
によれば、失敗する確率の高い投機実行は確定的に実行
されるため、投機実行が失敗する確率が低減され、プロ
グラムの実行性能を向上することができるという効果を
得ることができる。上記の具体例では、ループ0からル
ープ2へループを繰り返すのに伴って、4命令の実行サ
イクルが、9サイクルから5サイクルに改善された。
【0150】さらに、本実施の形態1に係るデータ依存
投機制御装置10に特徴的なのは、投機実行の成否予測
を行うに際して、ロード・ストア命令の対象アドレスに
関して、エイリアスの存在を許容することで、対象アド
レスそのものを、すべて記憶する必要をなくしたことで
ある。これにより、投機実行の成否予測が可能なロード
命令数に制限がなく、必要なハードウエア量も小さく、
少ないハードウエア量でも、データ依存投機実行による
実行性能の向上を享受することができる。
【0151】また、投機実行の成否予測を行うに際し
て、ロード・ストア命令間の対象アドレスの比較を必要
とせず、参照される投機実行成否履歴テーブル12のエ
ントリは、高々1つなので、投機実行の成否予測の処理
時間が短いという特徴がある。このため、プロセッサの
動作周波数を高速化することが容易になる。
【0152】[実施の形態2]以下、本発明の実施の形
態2について、図面を参照して詳細に説明する。図6
は、本発明の実施の形態2に係るデータ依存投機制御装
置の構成を示すブロック図である。このデータ依存投機
制御装置は、マルチプロセッサシステムにより実行され
るスレッド並列処理のデータ依存投機実行において、デ
ータ依存投機実行の制御手段を提供する。
【0153】ここで、スレッド並列処理とは、単一のプ
ログラム、あるいは複数のプログラムを、スレッドと呼
ぶ複数のプログラムの部分単位に分割し、それぞれのス
レッドを、複数のプロセッサなどで並列に処理すること
で、プログラムの実行を高速化する、プログラム処理の
高速化方法の一つである。
【0154】スレッドは、プログラムの一部分単位であ
り、複数の命令からなる命令列なので、複数のスレッド
間で、順序関係が定義される場合がある。例えば、同一
のプログラムに属する2つのスレッドを、それぞれT
0,T1としたとき、T0とT1の間には、そのプログ
ラム中の位置関係により、明確に順序関係が存在する。
仮に、プログラムにおいて、T0がT1よりも前に位置
しているならば、プログラムの意味上、T0がT1より
も前に実行されることを期待されていることになる。
【0155】逆に、プログラムにおいて、T1がT0よ
りも前に位置しているならば、プログラムの意味上、T
1がT0よりも前に実行されることを期待されているこ
とになる。しかし、T0、およびT1に含まれる命令間
に依存関係が存在しない場合、T0とT1間の順序関係
を無視した順序で実行しても、プログラムの意味は変わ
らない。そのため、正しいプログラムの実行結果を得る
ことができる。
【0156】スレッド並列処理では、上述した性質を利
用して、プログラムの正しい実行結果を保証しつつ、ス
レッド間の順序関係によらずに、スレッドの実行を並列
に行うことで、プログラム実行を高速化する。命令単位
の非プログラム順序実行と対比して、スレッド単位の非
プログラム順序実行と位置づけられる。
【0157】スレッド単位の非プログラム順序実行にお
いても、正しいプログラムの実行結果を得るためには、
スレッドが含む命令間の依存関係の解消や保証が必要で
ある。しかしながら、命令単位の非プログラム順序実行
と同様に、特にメモリに関する正依存関係に対しては、
本質的にプログラム順序で実行する必要があり、かつ、
確定的にプログラム順序実行すると、非プログラム順序
実行の実行性能向上の効果が十分、得られないという問
題がある。
【0158】特に、スレッド単位の非プログラム順序実
行では、複数の命令からなるスレッド単位で、非プログ
ラム順序実行が妨げられるので、より問題は深刻であ
る。そこで、この問題への対応としては、命令単位の非
プログラム順序実行と同様に、データ依存投機実行が有
効である。すわなち、スレッドが含む命令間の正依存関
係の有無が判明するよりも以前に、正依存関係が存在し
ないと仮定して、投機的にスレッドの非プログラム順序
実行を行う、スレッド単位のデータ依存投機実行であ
る。
【0159】スレッド単位のデータ依存投機実行を実現
するためには、順序関係が存在するスレッド対に関し
て、順序が前のスレッドが含むストア命令から、順序が
後のスレッドが含むロード命令への正依存関係を検出す
る機能を必要とする。本実施の形態2におけるデータ依
存関係検出装置は、このスレッド間の正依存関係を検出
する機能を有する。
【0160】一方、スレッド単位のデータ依存投機実行
においても、データ依存投機実行が失敗する確率が高い
場合、データ依存投機実行失敗の回復処理のために、プ
ログラムの実行性能が低下してしまう、という問題があ
る。
【0161】そこで、本実施の形態2におけるデータ依
存投機制御装置は、スレッド単位のデータ依存投機実行
に際し、過去における命令についての、投機実行の予測
結果の履歴を参照して、投機実行の成否を予測する。そ
して、成功すると予測した場合には、投機的に命令を実
行するが、失敗すると予測した場合、投機実行を中止
し、後に、プログラム順序で、確定的に命令実行する。
【0162】すなわち、本実施の形態2におけるデータ
依存投機制御装置によれば、マルチプロセッサシステム
におけるスレッド並列処理において、失敗する確率の高
い命令の投機実行は、確定的に実行される。そのため、
投機実行が失敗する確率が低減し、プログラムの実行性
能を向上させることができる。
【0163】そこで、図6を参照して、本実施の形態2
におけるデータ依存投機制御装置の構成を説明する。図
6に示すデータ依存投機制御装置は、4つのプロセッ
サ、すなわち、プロセッサ50,51,52,53、ス
レッド制御部54、および、データ依存投機制御装置5
5により構成されるマルチプロセッサ構成を有する。な
お、プロセッサ50〜53の構成は、すべて同一である
ため、図6では、プロセッサ51,52,53の内部構
成は、その図示を省略している。
【0164】スレッド制御部54は、プロセッサ50〜
53各々が実行するスレッドの割り当てや、スレッド間
の順序関係の通知、スレッドのデータ依存投機実行が失
敗した場合の回復処理の指示など、スレッド並列処理、
およびデータ依存投機実行の制御を行う。そして、プロ
セッサ50〜53は、データ依存関係検出装置57、プ
ロセッサ制御部56、および、命令実行部21を含む。
【0165】本実施の形態2では、スレッド単位の投機
実行は行うが、スレッド内のスレッドを構成する命令単
位での投機実行を行わないものとする。そのため、デー
タ依存関係検出装置57は、スレッド間の正依存関係を
検出する機能を備えるが、スレッド内のスレッドを構成
する命令間の正依存関係を検出する機能は備えていな
い。また、データ依存投機制御装置55は、4つのプロ
セッサ50〜53で共有され、各プロセッサのスレッド
単位の投機実行の制御を行う。
【0166】プログラムをプロセッサ50〜53により
スレッド並列処理するにあたり、スレッド制御部54
は、プロセッサ50〜53各々が実行すべきスレッドの
割り当てを行う。また、プロセッサ50〜53それぞれ
に、そのスレッド実行は、データ依存投機実行か否かを
示す投機実行フラグ40や、他の3つのプロセッサが実
行するスレッドとの順序関係を示すスレッド順序41を
出力する。加えて、スレッド制御部54は、各プロセッ
サへ出力する投機実行フラグ40を、データ依存投機制
御装置55にも出力する。
【0167】各プロセッサが、スレッド制御部54より
割り当てられたスレッドを実行する場合、各プロセッサ
のプロセッサ制御部56は、実行する命令の種別を、実
行命令45を通じて、命令実行部21、データ依存関係
検出装置57、他の3つのプロセッサ、および、データ
依存投機制御装置55に出力する。
【0168】さらに、実行する命令がメモリ操作命令の
場合、プロセッサ制御部56は、その対象アドレス46
を、命令実行部21、データ依存関係検出装置57、他
の3つのプロセッサ、および、データ依存投機制御装置
55に出力する。従って、各プロセッサが備えるデータ
依存関係検出装置57は、それぞれのプロセッサが実行
する命令種別、および、他の3つのプロセッサが実行す
る命令種別を実行命令45から入力する。
【0169】さらに、それら実行命令がメモリ操作命令
の場合、その対象アドレスを、それぞれ対象アドレス4
6から入力する。同時に、データ依存投機制御装置55
は、各4つのプロセッサ50〜53が実行する命令種別
をそれぞれ、実行命令45から入力する。それらの実行
命令がメモリ操作命令の場合、その対象アドレスをそれ
ぞれ対象アドレス46から入力する。
【0170】例えば、プロセッサ50が、スレッド制御
部54より割り当てられたスレッドを実行する際、プロ
セッサ50のプロセッサ制御部56は、実行命令45を
通じて実行する命令の種別を、プロセッサ50の命令実
行部21、およびデータ依存関係検出装置57に加え
て、他の3つのプロセッサ(プロセッサ51、プロセッ
サ52、プロセッサ53)、および、データ依存投機制
御装置55に出力する。
【0171】同時に、プロセッサ50のデータ依存関係
検出装置57は、他の3つのプロセッサ(プロセッサ5
1、プロセッサ52、プロセッサ53)が実行する命令
種別を、実行命令45を通じて、それぞれ入力する。さ
らに、実行する命令がメモリ操作命令の場合、プロセッ
サ50のプロセッサ制御部56は、その対象アドレス
を、対象アドレス46を通じて、プロセッサ50の命令
実行部21、およびデータ依存関係検出装置57に加え
て、他の3つのプロセッサ、および、データ依存投機制
御装置55に出力する。
【0172】同時に、他の3つのプロセッサが実行する
命令が、メモリ操作命令の場合、プロセッサ50のデー
タ依存関係検出装置57は、その対象アドレスを、対象
アドレス46を通じて、それぞれ入力する。
【0173】各プロセッサが備えるデータ依存関係検出
装置57は、各プロセッサが実行するスレッドの順序関
係に基づいて、他の3つのプロセッサが実行するスレッ
ドの中で、自プロセッサが実行するスレッドよりも順序
が前のスレッドが含むストア命令から、自プロセッサが
実行するスレッドが含むロード命令への、正依存関係を
検出する機能を備える。
【0174】図7は、図6のデータ依存関係検出装置5
7の一構成を示すブロック図である。同図において、本
データ依存関係検出装置57が入力する実行命令45の
うち、自プロセッサのプロセッサ制御部56から入力さ
れるものを実行命令45a、他の3つのプロセッサから
入力されるものを実行命令45bと表記している。同様
に、データ依存関係検出装置57が入力する対象アドレ
ス46のうち、自プロセッサのプロセッサ制御部56か
ら入力されるものを対象アドレス46a、他の3つのプ
ロセッサから入力されるものを対象アドレス46bと表
記している。
【0175】データ依存関係検出装置57は、自プロセ
ッサが実行したロード命令の対象アドレスを格納する複
数のアドレスバッファ31、3つのアドレス一致検出回
路35、および、先行スレッド選択回路34から構成さ
れる。アドレス一致検出回路35は、さらに、各々のア
ドレスバッファ31に接続された複数のアドレス比較器
32、すべてのアドレス比較器32の出力をその入力と
する論理和回路33から構成される。このアドレス一致
検出回路35は、各アドレスバッファ31に格納され
た、自プロセッサが実行したロード命令の対象アドレス
と、他のプロセッサが実行中のストア命令の対象アドレ
スとの比較を行う。
【0176】自プロセッサ以外の、他の3つのプロセッ
サが同時にアドレス比較を実行可能とするため、データ
依存関係検出装置57は、3つのアドレス一致検出回路
35を備える。先行スレッド選択回路34は、3つのア
ドレス一致検出回路35の出力、他の3つのプロセッサ
からの実行命令45b、スレッド制御部54からの投機
実行フラグ40、スレッド順序41を参照する。そし
て、他の3つのプロセッサが実行するスレッドの中で、
自プロセッサが実行するスレッドよりも順序が前のスレ
ッドが含むストア命令から、自プロセッサが実行するス
レッドが含むロード命令への正依存関係の検出結果を選
択し、それをデータ依存検出結果49として、スレッド
制御部54へ出力する。
【0177】データ依存関係検出装置57による、他の
プロセッサが実行する先行するスレッドが含むストア命
令から、自プロセッサが実行するスレッドが含むロード
命令へのメモリに関する正依存関係(以下、スレッド間
の正依存関係と表記する)の検出は、以下に示す動作で
実現される。
【0178】まず、各プロセッサが、スレッド間のデー
タ依存関係に対して、プログラム順序で確定的に命令実
行する場合、データ依存関係検出装置57は、何ら動作
を行わない。それに対して、各プロセッサが、スレッド
間のデータ依存関係に対して、投機的な命令実行をする
場合、データ依存関係検出装置57は、スレッド間の正
依存関係の検出処理を行う。各プロセッサが、スレッド
実行に関して、確定実行状態、または投機実行状態のど
ちらにあるかは、スレッド制御部54から各プロセッサ
のデータ依存関係検出装置57に入力される投機実行フ
ラグ40で判断する。
【0179】まず、投機実行状態において、自プロセッ
サがロード命令を実行した場合、その対象アドレスを、
これまでロード命令の対象アドレスが格納されていな
い、空いているアドレスバッファ31に格納していく。
一方、他のプロセッサで、メモリ操作命令が実行される
と、その対象アドレスは、プロセッサ毎に別のアドレス
一致検出回路35それぞれに入力される。
【0180】各アドレス一致検出回路35では、入力さ
れた前記対象アドレスが、すべてのアドレス比較器32
に入力され、アドレスバッファ31に格納されている、
自プロセッサで、それ以前に実行されたロード命令の対
象アドレスと比較される。アドレス比較器32から出力
された比較結果は、すべて、論理和回路33により論理
和をとり、その結果を先行スレッド選択回路34へ出力
する。
【0181】先行スレッド選択回路34は、自プロセッ
サが投機実行状態にあり、かつ、自プロセッサが実行す
るスレッドよりも先行するスレッドを実行する他のプロ
セッサでストア命令が実行され、かつ、そのストア命令
の対象アドレスを入力するアドレス一致検出回路35
で、アドレスの一致が検出された場合、データ依存が検
出されたとして、データ依存検出結果49を通じて、そ
の旨をスレッド制御部54へ出力する。この場合、スレ
ッド投機実行が失敗したとして、スレッド制御部54
は、スレッド投機実行が失敗したことによる回復処理の
制御を開始する。
【0182】一方、先行スレッド選択回路34は、自プ
ロセッサが投機実行状態にあり、かつ、自プロセッサが
実行するスレッドよりも先行するスレッドを実行する他
のプロセッサでストア命令が実行され、かつ、そのスト
ア命令の対象アドレスを入力するアドレス一致検出回路
35で、アドレスの一致が検出されなかった場合、デー
タ依存が検出されなかったとして、データ依存検出結果
49を通じて、その旨をスレッド制御部54へ出力す
る。この場合、スレッド投機実行が成功したとして、そ
のまま、スレッド実行を継続することができる。
【0183】スレッド制御部54は、プロセッサ50〜
53のいずれかより、データ依存投機実行の失敗の通知
を受け取ると、その失敗通知を出力したプロセッサ、お
よび、その失敗通知を出力したプロセッサが実行してい
たスレッドよりも、プログラム順序で後に位置するスレ
ッドを実行しているプロセッサに対して、データ依存投
機実行の失敗による回復処理の実行要求を出力する。デ
ータ依存投機実行の失敗による回復処理の実行要求の出
力対象となった各プロセッサでは、データ依存投機実行
の失敗による回復処理の実行要求が、回復処理実行要求
47を通じて、プロセッサ制御部56に通知される。
【0184】データ依存投機実行の失敗を通知したプロ
セッサだけではなく、データ依存投機実行を失敗したス
レッドよりプログラム順序が後のスレッドを実行してい
るプロセッサに対しても、データ依存投機実行の失敗に
よる回復処理の実行を要求するのは、以下の理由によ
る。
【0185】すなわち、データ依存投機実行の失敗を通
知したプロセッサは、正依存関係に違反して、ロード命
令をデータ依存投機実行した可能性がある。そのため、
データ依存投機実行の失敗を通知したプロセッサが実行
していた、データ依存投機実行に失敗したスレッドの実
行結果は、正しくない可能性がある。従って、データ依
存投機実行に失敗したスレッドの実行結果を参照してい
る可能性のある、それよりもプログラム順序で後に位置
するスレッドの実行結果もまた、正しくない可能性があ
る。
【0186】同様に、データ依存投機実行に失敗したス
レッドの実行結果を参照している可能性のある上記スレ
ッドの実行結果を参照している可能性のある、それより
も、さらにプログラム順序で後に位置するスレッドの実
行結果もまた、正しくない可能性がある。
【0187】すなわち、データ依存投機実行の失敗を通
知したプロセッサが実行していたスレッドよりも、プロ
グラム順序が後に位置するすべてのスレッドの実行結果
は正しくない可能性がある。このため、データ依存投機
実行の失敗を通知したプロセッサだけでなく、データ依
存投機実行に失敗したスレッドよりプログラム順序が後
のスレッドを実行しているプロセッサに対しても、デー
タ依存投機実行の失敗による回復処理の実行を要求し、
スレッドの実行結果の正しさを保証する。
【0188】一方、投機実行の失敗による回復処理の実
行要求の対象になったプロセッサでは、投機実行を行っ
たスレッドの再実行するなど、データ依存投機実行の失
敗による回復処理を実行することで、スレッドの実行結
果の正しさを保証する。
【0189】上述したように、各プロセッサが備えるデ
ータ依存関係検出装置57は、自プロセッサが実行する
スレッドよりプログラム順序で先行するスレッドに含ま
れるストア命令から、自プロセッサが実行するスレッド
に含まれるロード命令への正依存関係を検出する機能を
有する。この機能は、データ依存関係検出装置57が、
自プロセッサがロード命令をデータ依存投機実行する際
に書き込みを行うポートを備えるとともに、他のプロセ
ッサがストア命令を実行する際に読み出し、およびアド
レス比較を行う複数のポートを備えることで実現され
る。そして、この機能により、スレッド並列処理におい
て、スレッド単位のデータ依存投機実行の実現を可能と
することで、スレッド単位の並列実行による、プログラ
ム実行のさらなる高速化が可能となる。
【0190】データ依存投機制御装置55は、スレッド
単位のデータ依存投機実行において、ロード命令を投機
的に実行するに際し、過去のスレッドの投機実行の成否
結果の履歴を参照して、投機実行の成否を予測し、成功
すると予測した場合には、投機的にスレッドを実行す
る。しかし、失敗すると予測した場合には、投機実行を
中止し、後に、プログラム順序で確定的にスレッド実行
するよう制御を行う機能を提供する。
【0191】データ依存投機制御装置55は、図6に示
すように、4つのハッシュ関数回路59、投機実行成否
履歴テーブル58から構成される。また、4つのプロセ
ッサ50〜53からの入力として、これら4つのプロセ
ッサ50〜53それぞれに対応する4つの実行命令4
5、対象アドレス46、および、データ依存検出結果4
9を入力する。
【0192】データ依存投機制御装置55は、スレッド
制御部54からの入力として、4つのプロセッサ50〜
53それぞれに対応する4つの投機実行フラグ40を入
力する。さらに、4つのプロセッサ50〜53への出力
として、4つのプロセッサ50〜53それぞれに対応す
る4つのデータ投機実行成否予測結果48を出力する。
【0193】4つのハッシュ関数回路59は、メモリ操
作命令の対象アドレスを、投棄実行成否履歴テーブル5
8のエントリ番号に変換する、ハッシュ関数fを実現す
る論理回路である。ここで、ハッシュ関数fは、同一の
入力に対しては、同一の値を持つことを特徴とする。す
なわち、N1=f(A1)、かつ、N2=f(A2)と
したとき、A1=A2であれば、N1=N2が成立する
関数である。
【0194】4つのハッシュ関数回路59は、それぞれ
プロセッサ50〜53に割り当てられ、それぞれ対応す
るプロセッサが実行するメモリ操作命令の対象アドレス
を、投棄実行成否履歴テーブル58のエントリ番号に変
換する。投機実行成否履歴テーブル58は、3ビットの
情報を格納できるメモリやフリップフロップなどの記憶
手段で実現された、複数のエントリから構成される。備
えるエントリの総数は、そのハッシュ関数回路の出力が
nビット幅である場合、2のn乗に等しい数である。
【0195】投機実行成否履歴テーブル58は、ハッシ
ュ関数回路59が出力するエントリ番号が指し示すエン
トリに対して、書き込みおよび読み出し処理を行う、4
つの読み出し・書き込みポートを備える。すなわち、4
つの読み出し処理、あるいは書き込み処理を、独立、か
つ同時に行うことができる。
【0196】次に、スレッド並列処理におけるスレッド
の投機実行に関して、各プロセッサ50〜53におけ
る、自プロセッサに発行された命令に対する動作、およ
び他のプロセッサに発行された命令に対する動作を説明
する。
【0197】図8は、自プロセッサに発行された命令に
対する自プロセッサ、およびデータ依存投機制御装置5
5の動作手順を示すフローチャートである。なお、図
中、ブロック115は、他プロセッサにおける処理を説
明するために示してある。
【0198】自プロセッサに発行された命令に対する動
作は、図8のブロック100で開始され、ブロック10
8で終了する。まず、ブロック101において、プロセ
ッサ制御部56より発行された命令がロード命令と判断
された場合、ブロック102へ分岐し、ロード命令以外
の場合には、ブロック113へ分岐する。発行命令は、
プロセッサ制御部56が出力する実行命令45により与
えられる。
【0199】ブロック102において、自プロセッサが
スレッドの投機実行状態にある場合は、ブロック103
へ分岐し、確定実行状態にある場合は、ブロック111
へ分岐する。投機的であるか、あるいは確定的であるか
は、スレッド制御部54が出力する投機実行フラグ40
により与えられる。そして、自プロセッサが投機実行状
態にある場合、ブロック103において、データ依存投
機制御装置55により、投機実行が成功するか、失敗す
るかの予測を行う。
【0200】ここで、投機実行が“成功”することを予
測した場合は、ブロック105へ進み、“失敗”するこ
とを予測した場合には、ブロック109へ分岐する。す
なわち、投機実行が“成功”することを予測した場合、
ブロック105において、そのロード命令を投機的に実
行する。次のブロック106において、ロード命令を投
機実行した旨を、自プロセッサのデータ依存関係検出装
置57に記憶する。
【0201】ブロック107において、投機実行を行っ
たという事実により、データ依存投機制御装置55に記
憶されている投機実行成否結果を更新し、続くブロック
108において、ロード命令の投機的な実行が終了す
る。
【0202】一方、ブロック104において、ロード命
令の投機実行が“失敗”することを予測した場合、ブロ
ック109において、そのロード命令の投機的な実行を
中止する。このロード命令、および、このロード命令よ
りも後続の命令は、後に、自プロセッサよりも先行する
スレッドの実行がすべて完了した後、プログラム順序で
確定的に実行される。
【0203】ブロック110では、投機実行を行わなか
ったという事実により、データ依存投機制御装置55に
記憶されている投機実行成否結果を更新し、ブロック1
08において、今回のロード命令の実行を、中止によ
り、とりあえず終了する。
【0204】ブロック102において、自プロセッサが
確定実行状態にあると判断された場合、ブロック111
において、そのロード命令を確定的に実行する。次のブ
ロック112において、確定的に実行を行ったという事
実により、データ依存投機制御装置55に記憶されてい
る投機実行成否結果を更新し、ブロック108におい
て、ロード命令の実行が終了する。
【0205】ブロック113では、自プロセッサに発行
された命令が、ストア命令である場合は、ブロック11
4に分岐し、発行された命令がロード命令でも、ストア
命令でもない場合は、ブロック119に分岐する。すな
わち、発行された命令がストア命令である場合、ブロッ
ク114において、そのストア命令を実行する。さら
に、ブロック115において、自プロセッサが実行する
スレッドよりも後続のスレッドを実行するプロセッサに
おいて、各プロセッサのデータ依存関係検出装置57に
より、そのストア命令に関する投機実行の成否判定が行
われる。
【0206】他プロセッサでの成否判定の結果により、
ブロック116において、投機実行の失敗が検出されな
かった場合は、ブロック117に分岐し、投機実行の失
敗が検出された場合は、ブロック118に分岐する。他
プロセッサにおける投機実行の成否判定の結果は、デー
タ依存投機制御装置55において、データ依存検出結果
49を通じて、参照することができる。
【0207】他プロセッサで、投機実行の失敗が検出さ
れなかった場合、ブロック117において、投機実行が
成功したという事実により、データ依存投機制御装置5
5に記憶されている投機実行成否結果を更新し、ブロッ
ク108において、本動作を終了する。しかし、他プロ
セッサで、投機実行の失敗が検出された場合には、ブロ
ック118において、投機実行が失敗したという事実に
より、データ依存投機制御装置55に記憶されている投
機実行成否結果を更新し、ブロック108において、本
動作を終了する。
【0208】一方、ブロック113において、発行され
た命令がロード命令でも、ストア命令でもない場合は、
ブロック119で命令を実行し、ブロック108におい
て終了する。この場合、データ依存投機制御装置55
は、動作を行わない。
【0209】再び、図6を参照して、データ依存投機制
御装置55の詳細な動作を説明する。まず、図8に示し
たフローチャート内のブロック103において、投機実
行成否履歴テーブル58に記憶されている投機実行の成
否予測結果の履歴を参照し、それに基づいて、ロード命
令の投機実行が成功するか、失敗するかの予測を行う。
より詳細には、各プロセッサのプロセッサ制御部56か
ら、対象アドレス46により与えられるロード命令の対
象アドレスを、ハッシュ関数回路59により、投機実行
成否履歴テーブル58のエントリ番号に変換し、それを
投機実行成否履歴テーブル58に入力する。投機実行成
否履歴テーブル58は、入力されたエントリ番号に対応
するエントリの内容を読み出し、それに基づいて、上記
ロード命令の投機実行の成否を予測する。
【0210】図8のブロック107,110,112,
117,118では、それぞれの実行フローに基づい
て、投機実行成否履歴テーブル58に記憶されている投
機実行についての成否予測結果の履歴の更新を行う。よ
り詳細には、各プロセッサのプロセッサ制御部56か
ら、対象アドレス46により与えられるロード・ストア
命令の対象アドレスを、ハッシュ関数回路59により、
投機実行成否履歴テーブル58のエントリ番号に変換
し、それを投機実行成否履歴テーブル58に入力する。
【0211】投機実行成否履歴テーブル58は、入力さ
れたエントリ番号に対応するエントリの内容を読み出
し、そのエントリ内容とそれぞれの実行フローに基づい
て、前記エントリ内容を更新する。なお、投機実行成否
履歴テーブル58の各エントリの状態遷移は、図3に示
す、実施の形態1に係る投機実行成否履歴テーブル12
と同じである。
【0212】本実施の形態の場合、同図中のロード命令
は、自プロセッサが実行するロード命令、同図中のスト
ア命令は、自プロセッサよりも先行するスレッドに含ま
れる、他プロセッサが実行するストア命令に対応する。
【0213】投機実行成否履歴テーブル58の各エント
リは、図3に示すように、それぞれ3ビットの記憶素子
から構成される。なお、これら3ビットで表される8つ
の投機実行成否履歴状態は、上記実施の形態1と同じで
あるため、ここでは、その説明を省略する。
【0214】スレッド並列処理における投機的な命令実
行において、図8に示すフローチャート上のブロック1
03における投機実行の成否予測は、参照したエントリ
が、上記の8状態のいずれにあるかで決定する。すなわ
ち、エントリが“強い成功0”、“強い成功1”、”弱
い成功0”、“弱い成功1”のいずれかにある場合は、
投機実行が成功する可能性が高いと予測して、ロード命
令を投機的に実行する。
【0215】エントリが、“強い失敗0”、“強い失敗
1”、“弱い失敗0”“弱い失敗0”のいずれかにある
場合は、投機実行が失敗する可能性が高いと予測し、ロ
ード命令の投機実行を中止し、後に、プログラム順序
で、確定的に実行する。
【0216】また、上記8状態間の状態遷移は、図8に
示すブロック107,110,112,117,118
において、以下のように行う。まず、初期状態では、す
べてのエントリは、任意の状態にある。今、仮に、ある
エントリが、“弱い成功0”92にあるとする。このと
き、そのエントリに対応するアドレスを対象とする投機
的なロード命令を発行した場合、ブロック107におい
て、エントリの状態を、“弱い成功1”93へ遷移させ
る。
【0217】この場合、ブロック103の投機実行の成
否予測で、投機実行が成功すると予測されるため、実際
にロード命令が投機実行されることになる(ブロック1
05)。なお、それ以外の実行フローの場合、すなわ
ち、ブロック110,112,117,118では、エ
ントリの状態は遷移しない。
【0218】次に、エントリが、“弱い成功1”93に
ある場合には、そのエントリに対応するアドレスを対象
とするストア命令を、他プロセッサが実行し、自プロセ
ッサのロード命令の、投機実行の失敗が検出されなかっ
た場合は、ロード命令の投機実行が成功したとして、ブ
ロック117において、エントリの状態を、“強い成功
0”90へ遷移させる。
【0219】ロード命令の投機実行の失敗が検出された
場合は、ロード命令の投機実行が失敗したとして、ブロ
ック118において、エントリの状態を、“弱い失敗
0”94へ遷移させる。上記以外の実行フローの場合、
すなわち、ブロック107,110,112では、エン
トリの状態は遷移しない。
【0220】また、エントリが、“強い成功0”90に
あるときには、そのエントリに対応するアドレスを対象
とする投機的なロード命令を発行した場合、ブロック1
07において、エントリの状態を、“強い成功1”91
へ遷移させる。この場合、ブロック103の投機実行の
成否予測で、投機実行が成功すると予測されるため、実
際に、ロード命令が投機実行されることになる(ブロッ
ク105)。それ以外の実行フローの場合、すなわち、
ブロック110,112,117,118では、エント
リの状態は遷移しない。
【0221】次に、エントリが、“強い成功1”91に
ある場合、そのエントリに対応するアドレスを対象とす
るストア命令を、他プロセッサが実行し、自プロセッサ
のロード命令の、投機実行の失敗が検出されなかった場
合は、ロード命令の投機実行が成功したとして、ブロッ
ク117において、エントリの状態は、“強い成功0”
90に遷移する。
【0222】ロード命令の投機実行の失敗が検出された
場合は、ロード命令の投機実行が失敗したとして、ブロ
ック118において、エントリの状態を、“弱い成功
0”92へ遷移させる。それ以外の実行フローの場合、
すなわち、ブロック107,110,112では、エン
トリの状態は遷移しない。
【0223】エントリが、“弱い失敗0”94にあると
きには、そのエントリに対応するアドレスを対象とする
投機的なロード命令を発行した場合、ブロック110に
おいて、エントリの状態を、“弱い失敗1”95へ遷移
させる。この場合、ブロック103の投機実行の成否予
測で、投機実行が失敗すると予測されるため、実際に、
ロード命令が投機実行されることはない。なお、上記以
外の実行フローの場合、すなわち、ブロック107,1
12,117,118では、エントリの状態は遷移しな
い。
【0224】次に、エントリが、“弱い失敗1”95に
あるとき、そのエントリに対応するアドレスを対象とす
るストア命令を、他プロセッサが実行した場合、ロード
命令の投機実行は、失敗する可能性が高いとして、ブロ
ック117、またはブロック118において、エントリ
の状態を、“強い失敗1”96へ遷移させる。この場
合、ロード命令の投機実行は、失敗する可能性が高いと
判断する理由は、“弱い失敗0”94から投機的なロー
ドが発行されて、“弱い失敗1”95に遷移し、かつ、
同アドレスのストア命令が実行されたからである。
【0225】実際には、ブロック103において、投機
実行は失敗すると予測されるため、投機実行は中止さ
れ、確定的に実行されるが、仮に、ロード命令を投機実
行していたならば、その投機実行は失敗することにな
る。
【0226】一方、エントリが、“弱い失敗1”95に
あるとき、そのエントリに対応するアドレスを対象とす
る確定的なロード命令が発行された場合、ロード命令の
投機実行は、成功する可能性が高いとして、ブロック1
10において、エントリの状態を、“弱い成功0”92
へ遷移させる。この場合、ロード命令の投機実行は、成
功する可能性が高いと判断する理由は、“弱い失敗0”
94から投機的なロードが発行されて、“弱い失敗1”
95に遷移し、かつ、同アドレスのストア命令が実行さ
れずに、確定的なロード命令が発行されたからである。
【0227】この確定的なロード命令は、ブロック10
3において、投機実行が失敗すると予測されて、確定的
に実行されたロード命令と考えられ、かつ、その間に、
同アドレスのストア命令が発行されなかったので、仮
に、ロード命令を投機実行していたならば、その投機実
行は、成功していたことになる。なお、上記以外の実行
フローの場合、すなわち、ブロック107,112で
は、エントリの状態は遷移しない。
【0228】エントリが、“強い失敗0”96にあると
きは、そのエントリに対応するアドレスを対象とする投
機的なロード命令を発行した場合、ブロック110にお
いて、エントリの状態を、“強い失敗1”97へ遷移さ
せる。この場合、ブロック103の投機実行の成否予測
で、投機実行が失敗すると予測されるため、実際に、ロ
ード命令が投機実行されることはない。上記以外の実行
フローの場合(ブロック107,112,117,11
8)では、エントリの状態は遷移しない。
【0229】エントリが、“強い失敗1”97にあると
きに、そのエントリに対応するアドレスを対象とするス
トア命令を、他プロセッサが実行した場合、ロード命令
の投機実行は、失敗する可能性が高いとして、ブロック
117、またはブロック118において、エントリの状
態は、“強い失敗0”96に遷移する。
【0230】上記の場合に、ロード命令の投機実行は、
失敗する可能性が高いと判断する理由は、“強い失敗
0”96から投機的なロードが発行されて、“強い失敗
1”97に遷移し、かつ、同アドレスのストア命令が実
行されたからである。実際には、ブロック103におい
て、投機実行は、失敗すると予測されるため、投機実行
は中止され、確定的に実行される。しかし、仮に、ロー
ド命令を投機実行していたならば、その投機実行は、失
敗することになる。
【0231】エントリが、“強い失敗1”97にあると
き、そのエントリに対応するアドレスを対象とする確定
的なロード命令が発行された場合、ロード命令の投機実
行は、成功する可能性が高いとして、ブロック110に
おいて、エントリの状態を、“弱い失敗0”94へ遷移
させる。この場合、ロード命令の投機実行は、成功する
可能性が高いと判断する理由は、“強い失敗0”96か
ら投機的なロードが発行されて、“強い失敗1”97に
遷移し、かつ、同アドレスのストア命令が実行されず
に、確定的なロード命令が発行されたからである。
【0232】上記の確定的なロード命令は、ブロック1
03において、投機実行が失敗すると予測されて、確定
的に実行されたロード命令と考えられ、かつ、その間
に、同アドレスのストア命令が発行されなかったので、
仮に、ロード命令を投機実行していたならば、その投機
実行は、成功していたことになる。なお、上記以外の実
行フローの場合、すなわち、ブロック107,112で
は、エントリの状態は遷移しない。
【0233】以上、投機実行成否履歴テーブル58の各
エントリ内容の状態遷移を説明したが、ここでも、投機
実行が成功する確率が高ければ、“強い失敗”、“弱い
失敗”から“弱い成功”、“強い成功”へ、また、投機
実行が失敗する確率が高ければ、“強い成功”、“弱い
成功”から“弱い失敗”、“強い失敗”へと遷移して行
く。
【0234】ブロック103における投機実行の成否予
測では、“弱い成功”、“強い成功”にあれば成功する
と予測して、ロード命令の投機実行するが、“強い失
敗”、“弱い失敗”にあれば失敗すると予測して、ロー
ド命令の投機実行を中止し、後に、プログラム順序で確
定的に実行する。すなわち、本実施の形態に係るデータ
依存投機制御装置55では、スレッド並列処理におけ
る、スレッド間の正依存関係に対する投機実行に関して
も、失敗する確率の高い投機実行は、確定的に実行され
る。そのため、投機実行が失敗する確率が低減され、プ
ログラムの実行性能が向上する。
【0235】次に、本実施の形態2に係る、スレッド並
列処理におけるデータ依存投機実行の具体例を説明す
る。図9は、プログラム例における、命令のプログラム
順序を示す。このプログラム例は、ロード命令LD1,
LD2,LD3,LD4,LD5,ストア命令ST1,
ST2,ST3、および、ロード・ストア命令以外の命
令を含む16命令からなるプログラムの部分列が繰り返
される、ループ構造を持つプログラムの典型的な例であ
る。
【0236】図9において、ループ0〜1という、連続
する2つのループに含まれる命令列のみを示す。また、
図中、空欄の四角は、ロード・ストア命令以外の命令を
示す。ループ内のプログラム順序は、順に、ロード命令
LD1、ロード・ストア命令以外の命令が2つ、ストア
命令ST1、ロード・ストア命令以外の命令、ロード命
令LD2、ストア命令ST2、ロード・ストア命令以外
の命令が3つ、ロード命令LD3、ロード命令LD4、
ロード命令LD5、ストア命令ST3、ロード・ストア
命令以外の命令が2つの順序である。
【0237】ここで、LD1の対象アドレスはA1、L
D2の対象アドレスはA2、LD3の対象アドレスはA
3、LD4の対象アドレスはA4、LD5の対象アドレ
スはA5、ST1の対象アドレスはA3、ST2の対象
アドレスはA1、そして、ST3の対象アドレスはA3
である。
【0238】ここでは、図9に示すプロクラム順序のプ
ログラム例を、図6に示す4つのプロセッサ(プロセッ
サ50,51,52,53)において、スレッド単位で
データ依存投機実行する。具体的には、図9に示す16
命令から構成されるループを、4命令から構成される4
つのスレッドに分割し、それぞれを、4つのプロセッサ
で並列実行する。
【0239】すなわち、プログラム順序で、順に、ロー
ド命令LD1、ロード・ストア命令以外の命令が2つ、
そして、ストア命令ST1という4命令列をスレッド0
とし、ロード・ストア命令以外の命令、ロード命令LD
2、ストア命令ST2、ロード・ストア命令以外の命令
の4命令列をスレッド1とし、ロード・ストア命令以外
の命令が2つ、ロード命令LD3、ロード命令LD4の
4命令列をスレッド2とし、ロード命令LD5、ストア
命令ST3、ロード・ストア命令以外の命令が2つとい
う4命令列をスレッド3として、スレッド0をプロセッ
サ52で、スレッド1をプロセッサ51で、スレッド2
をプロセッサ50で、スレッド3をプロセッサ53で並
列に実行する。なお、各プロセッサが実行するスレッド
の割り当ては、スレッド制御部54によって行われる。
【0240】上記の場合、スレッド0〜3を構成する命
令間に、依存関係が存在しなければ、4つのプロセッサ
によるスレッド並列処理により、16命令を4サイクル
で実行することができる。しかし、LD3とST1の対
象アドレスは、同じA3であり、プログラム順序でST
1の方が前にあるため、ST1からLD3には、データ
依存関係が存在する。
【0241】すなわち、実行時において、LD3よりも
ST1が前に実行されて、ST1がアドレスA3に書き
込みを行った結果を、LD3がアドレスA3から読み出
さなければ、プログラムの実行結果の正しさは保証され
ない。スレッド単位の並列処理においては、ST1を含
むスレッド0からLD3を含むスレッド2へ、正依存関
係が存在することになる。
【0242】しかしながら、通常、各プロセッサへスレ
ッドを割り当てる時点では、ST1からLD3への正依
存関係、すなわち、スレッド0からスレッド2への存在
は判明しない。このため、確定的にスレッドの並列実行
をすると、正依存関係が無いことが判明していないスレ
ッド間では、プログラム順序で、スレッドを逐次、実行
することで、正依存関係を保証する必要がある。そのた
め、スレッドの並列処理によるプログラム実行の高速性
を充分、得ることができない。
【0243】スレッド単位のデータ依存投機実行では、
スレッド間の正依存関係の存在の有無が判明していなく
ても、投機的にスレッドの並列実行をする。データ依存
投機実行が成功する確率が充分、高ければ、スレッドの
並列処理によるプログラム実行の高速化が達成される。
【0244】図10の(a)は、図9に示すプログラム
順序の命令列、スレッド列のデータ依存投機実行による
スレッド並列実行の例であり、左から順に、サイクル番
号、スレッド2を実行するプロセッサ50のそのサイク
ルの実行命令、その実行命令の対象アドレス、スレッド
1を実行するプロセッサ51のそのサイクルの実行命
令、その実行命令の対象アドレス、スレッド0を実行す
るプロセッサ52のそのサイクルの実行命令、その実行
命令の対象アドレス、スレッド3を実行するプロセッサ
53のそのサイクルの実行命令、その実行命令の対象ア
ドレスである。
【0245】すなわち、スレッド2を実行するプロセッ
サ50では、1サイクル目、および2サイクル目にロー
ド・ストア命令以外の命令、3サイクル目にLD3、4
サイクル目にLD4が実行される。スレッド1を実行す
るプロセッサ51では、1サイクル目にロード・ストア
命令以外の命令、2サイクル目にLD2、3サイクル目
にST2、4サイクル目にロード・ストア命令以外の命
令が実行される。
【0246】スレッド0を実行するプロセッサ52で
は、1サイクル目にLD1、2サイクル目にロード・ス
トア命令以外の命令、3サイクル目にロード・ストア命
令以外の命令、4サイクル目にST1が実行される。ス
レッド3を実行するプロセッサ53では、1サイクル目
にLD5、2サイクル目にST3、3サイクル目、およ
び4サイクル目にロード・ストア命令以外の命令が実行
される。
【0247】ここで、スレッド0は、プログラム順序で
最も前に位置するスレッドであるため、スレッド1〜3
に含まれるストア命令からスレッド0に含まれるロード
命令への、正依存関係は存在しない。すなわち、プロセ
ッサ52は、確定的にスレッド0を実行することができ
る。
【0248】一方、スレッド1〜3に関しては、正依存
関係の有無が不明であるため、プロセッサ50、プロセ
ッサ51、およびプロセッサ53は、スレッド1〜3を
データ依存投機実行することになる。図10の(a)に
示す例では、仮に、データ依存投機実行が成功した場
合、16命令からなるプログラムが、4サイクルで実行
されることになり、大幅なプログラム実行性能の向上が
達成される。
【0249】しかしながら、図10の(a)における、
ループ0に示す実行例の場合、正依存関係のあるST
1,LD3について、LD3が、3サイクル目にプロセ
ッサ50で実行され、ST1が、4サイクル目にプロセ
ッサ52で実行される。そのため、正依存関係が保証さ
れておらず、正しいプログラムの実行結果が得られな
い。
【0250】換言すれば、プロセッサ50におけるスレ
ッド2のデータ依存投機実行は、失敗している。プロセ
ッサ50の備えるデータ依存関係検出装置57は、プロ
セッサ52が実行したST1から、プロセッサ50が実
行したLD3への、正依存関係の存在を検出し、スレッ
ド2のデータ依存投機実行が失敗したことを、スレッド
制御部54に通知する機能を担う。
【0251】スレッド制御部54は、プロセッサ50よ
り、データ依存投機実行が失敗した旨を通知されると、
正しいプログラムの実行結果が得られるように、プロセ
ッサ50、およびデータ依存投機実行が失敗したスレッ
ド2より、プログラム順序で後に位置するスレッド3を
実行するプロセッサ53に対して、スレッドの実行結果
の取り消しやスレッドの再実行など、データ依存投機実
行失敗による回復処理を要求する。
【0252】図10の(b)は、データ依存投機制御装
置55の動作を示す図である。同図において、左から順
に、サイクル番号、プロセッサ毎のそのサイクルにアク
セスした投機実行成否履歴テーブル58のエントリ番
号、そのサイクルの投機実行成否履歴テーブル58の状
態をそれぞれ示す。プロセッサ毎のアクセスしたエント
リ番号は、左から順に、プロセッサ50、プロセッサ5
1、プロセッサ52、プロセッサ53がアクセスしたエ
ントリ番号を示している。
【0253】投機実行成否履歴テーブル58は、4つの
エントリから構成されるとして、4つのエントリの状態
を、右から順に、エントリ0、エントリ1、エントリ
2、エントリ3の内容を示している。例えば、ループ0
の1サイクル目においては、すべてのエントリの内容
は、“010”(弱い成功0)である。
【0254】ループ0の1サイクル目では、プロセッサ
50において、スレッド2に含まれるロード・ストア命
令以外の命令、プロセッサ51において、スレッド1に
含まれるロード・ストア命令以外の命令、プロセッサ5
2において、スレッド0に含まれるLD1、プロセッサ
53において、スレッド3に含まれるLD5が発行され
る。ここで、プロセッサ53に発行されたLD5は、プ
ロセッサ53で実行するスレッド3よりも先行するスレ
ッド、すなわち、スレッド0、スレッド1、スレッド2
が含むストア命令からの正依存関係の有無が不明であ
る。従って、LD5は、正依存関係に関して、投機的に
実行することを試みる。
【0255】まず、投機実行に先立ち、プロセッサ53
は、データ依存投機制御装置55により、投機実行の成
否予測を行う(図8のブロック103)。より詳細に
は、まず、LD5のアドレスA5を、ハッシュ関数回路
59により投機実行成否履歴テーブル58のエントリ番
号に変換する。今、エントリ番号1に変換されたとする
と、次に、投機実行成否履歴テーブル58より、エント
リ1に格納されている成否予測履歴“010”(弱い成
功0)が読み出される。従って、投機実行が成功するこ
とが予測されるので、LD5は、投機的に実行される
(図8のブロック105)。
【0256】一方、プロセッサ52で実行されるスレッ
ド0は、最も先行するスレッドであるため、LD1は、
プロセッサ52において、確定的に実行される(図8の
ブロック111)。ここで、LD1の対象アドレスA1
は、ハッシュ関数回路59により、投機実行成否履歴テ
ーブル58のエントリ番号1に変換されるとすると、投
機実行成否履歴テーブル58のエントリ1は、プロセッ
サ52、およびプロセッサ53から同時にアクセスされ
る。
【0257】しかし、データ依存投機制御装置55は、
プロセッサ毎に独立した4つのポートを備えているた
め、プロセッサ52、およびプロセッサ53からの処理
を同時に実行することができる。この場合、プロセッサ
53が投機的にLD5を実行したため、エントリ1の内
容は、“011”(弱い成功1)に遷移する。
【0258】次に、ループ0の2サイクル目では、プロ
セッサ50において、スレッド2に含まれるロード・ス
トア命令以外の命令、プロセッサ51において、スレッ
ド1に含まれるLD2、プロセッサ52において、スレ
ッド0に含まれるロード・ストア命令以外の命令、プロ
セッサ53において、スレッド3に含まれるST3が実
行される。
【0259】ここで、プロセッサ51に発行されたLD
2は、プロセッサ51で実行するスレッド1よりも先行
するスレッド0が含むストア命令に対して、投機的であ
るため、プロセッサ51は、データ依存投機制御装置5
5により、投機実行の成否予測を行う(図8のブロック
103)。より詳細には、まず、LD2のアドレスA2
を、ハッシュ関数回路59により、投機実行成否履歴テ
ーブル58のエントリ番号に変換する。
【0260】ここで、エントリ番号2に変換されたとす
ると、次に、投機実行成否履歴テーブル58より、エン
トリ2に格納されている成否予測履歴“010”(弱い
成功0)が読み出される。従って、投機実行が成功する
ことが予測されるので、LD2は、投機的に実行される
(図8のブロック105)。この場合、エントリ2の内
容は、“011”(弱い成功1)に遷移する(図8のブ
ロック107)。
【0261】一方、プロセッサ53で実行されるST3
に関しては、プロセッサ53以外の3つのプロセッサ5
0〜52が実行するスレッドは、いずれも、プロセッサ
53が実行するスレッド3に先行するので、ST3によ
り、投機実行失敗は検出されず、投機実行成否履歴テー
ブル58のエントリ3の内容は、“010”(弱い成功
0)のまま、遷移しない(図8のブロック117)。
【0262】ループ0の3サイクル目では、プロセッサ
50において、スレッド2に含まれるLD3、プロセッ
サ51において、スレッド1に含まれるST2、プロセ
ッサ52において、スレッド0に含まれるロード・スト
ア命令以外の命令、プロセッサ53において、スレッド
3に含まれるロード・ストア命令以外の命令が実行され
る。
【0263】ここで、プロセッサ50に発行されたLD
3は、プロセッサ50で実行するスレッド2よりも先行
する、スレッド0、およびスレッド1が含むストア命令
に対して、投機的であるため、プロセッサ50は、デー
タ依存投機制御装置55により、投機実行の成否予測を
行う(図8のブロック103)。より詳細には、まず、
LD3のアドレスA3を、ハッシュ関数回路59によ
り、投機実行成否履歴テーブル58のエントリ番号に変
換する。
【0264】ここで、エントリ番号3に変換されたとす
ると、次に、投機実行成否履歴テーブル58より、エン
トリ3に格納されている成否予測履歴“010”(弱い
成功0)が読み出される。従って、投機実行が成功する
ことが予測されるので、LD3は、投機的に実行される
(図8のブロック105)。この場合、エントリ3の内
容は、“011”(弱い成功1)に遷移する(図8のブ
ロック107)。
【0265】プロセッサ51で実行されるST2に対し
ては、ST2が含まれるスレッド1よりも後続のスレッ
ド2を実行するプロセッサ50、およびスレッド3を実
行するプロセッサ53において、各々のプロセッサが備
えるデータ依存関係検出装置57により、投機実行の成
否判定が行われる(図8のブロック115)。この場
合、いずれのプロセッサにおいても、投機実行失敗が検
出されないため、ST2に関しては、投機実行が成功し
たとして、投機実行成否履歴テーブル58のエントリ1
は、“000”(強い成功0)へ遷移する(図8のブロ
ック117)。
【0266】次に、ループ0の4サイクル目では、プロ
セッサ50において、スレッド2に含まれるLD4、プ
ロセッサ51において、スレッド1に含まれるロード・
ストア命令以外の命令、プロセッサ52において、スレ
ッド0に含まれるST1、プロセッサ53において、ス
レッド3に含まれるロード・ストア命令以外の命令が実
行される。ここで、プロセッサ50に発行されたLD4
は、プロセッサ50で実行するスレッド2よりも先行す
るスレッド0、およびスレッド1が含むストア命令に対
して投機的であるため、プロセッサ50は、データ依存
投機制御装置55により、投機実行の成否予測を行う
(図8のブロック103)。
【0267】より詳細には、まず、LD4のアドレスA
4を、ハッシュ関数回路59により投機実行成否履歴テ
ーブル58のエントリ番号に変換する。ここで、エント
リ番号0に変換されたとすると、次に、投機実行成否履
歴テーブル58より、エントリ0に格納されている成否
予測履歴“010”(弱い成功0)が読み出される。従
って、投機実行が成功することが予測されるので、LD
4は、投機的に実行される(図8のブロック105)。
なお、この場合、エントリ0の内容は、“011”(弱
い成功1)に遷移する(図8のブロック107)。
【0268】他方、プロセッサ52で実行されるST1
に対しては、ST1が含まれるスレッド0よりも後続の
スレッド1を実行するプロセッサ51、スレッド2を実
行するプロセッサ50、およびスレッド3を実行するプ
ロセッサ53において、各々のプロセッサが備えるデー
タ依存関係検出装置57により、投機実行の成否判定が
行われる(図8のブロック115)。
【0269】この場合、ST1と対象アドレスが同じA
3であるLD3が、プロセッサ50において、ST1よ
りも先のサイクル3で投機的に実行されており、かつ、
LD3は、ST1よりもプログラム順序で後にあるた
め、このLD3の投機実行は、失敗していることが、プ
ロセッサ50の備えるデータ依存関係検出装置57によ
り検出され、それが、データ依存検出結果49を通じ
て、スレッド制御部54に通知される。この通知によ
り、スレッド制御部54は、正しいプログラムの実行結
果が得られるように、プロセッサ50、およびプロセッ
サ50よりも後続のスレッドを実行していたプロセッサ
53に対して、データ依存投機実行の失敗による回復処
理の実行を指示する。
【0270】回復処理を実行するプロセッサ50、およ
びプロセッサ53では、1サイクル目から4サイクル目
までに実行した命令の実行結果を取り消し、6サイクル
目からスレッドを再度、実行する。
【0271】一方、投機実行成否履歴テーブル58にお
いては、4サイクル目に、ST1に関して投機実行の失
敗が検出されたことにより、エントリ3は、“100”
(弱い失敗0)に遷移する(図8のブロック118)。
【0272】プロセッサ50における、スレッド2の投
機実行失敗による回復処理は、プロセッサ50におい
て、6サイクル目にロード・ストア命令以外の命令、7
サイクル目にロード・ストア命令以外の命令、8サイク
ル目にLD3、9サイクル目にLD4が再実行される。
この回復処理による、スレッド2の再実行においては、
スレッド2が最も先行するスレッドであるため、確定的
な実行が可能である。
【0273】プロセッサ53における、スレッド3の投
機実行失敗による回復処理は、6サイクル目にLD5、
7サイクル目にST3、8サイクル目にロード・ストア
命令以外の命令、9サイクル目にロード・ストア命令以
外の命令が実行される。この回復処理によるスレッド3
の再実行においては、スレッド2との依存関係が不明で
あるため、スレッド3は、再び投機的に実行する。
【0274】スレッド3の回復処理における、投機実行
に関する投機実行成否履歴テーブル58の動作の詳細
を、以下に説明する。まず、6サイクル目において、L
D5に対して、プロセッサ53は、データ依存投機制御
装置55により、投機実行の成否予測を行う(図8のブ
ロック103)。投機実行成否履歴テーブル58のエン
トリ1からは、“000”(強い成功0)が読み出され
る。従って、投機実行が成功することが予測されるの
で、LD5は、投機的に実行される(図8のブロック1
05)。この場合、エントリ1の内容は、“001”
(強い成功1)に遷移する(図8のブロック107)。
【0275】次に、7サイクル目において、ST3が実
行される。投機実行成否履歴テーブル58のエントリ3
は、“100”(弱い失敗0)のまま遷移しない。
【0276】以上が、ループ0における命令実行、およ
びデータ依存投機制御装置55の動作である。ここで
は、スレッド2に含まれるLD3の投機実行の成否予測
は、成功を予測したのに対して、実際には、投機実行は
失敗し、スレッド2、および、それより後続のスレッド
3の投機実行失敗による回復処理の実行が必要となっ
た。このため、ループ0においては、スレッド0〜3の
16命令を、プロセッサ50〜53で実行するのに、9
サイクルを要した。
【0277】次に、ループ0に続くループ1における動
作を説明する。ループ1の1サイクル目では、プロセッ
サ50において、スレッド2に含まれるロード・ストア
命令以外の命令、プロセッサ51において、スレッド1
に含まれるロード・ストア命令以外の命令、プロセッサ
52において、スレッド0に含まれるLD1、プロセッ
サ53において、スレッド3に含まれるLD5が発行さ
れる。ここで、プロセッサ53に発行されたLD5は、
プロセッサ53で実行するスレッド3よりも先行するス
レッド、すなわち、スレッド0、スレッド1、スレッド
2が含むストア命令からの正依存関係の有無が不明であ
る。従って、LD5は、正依存関係に関して投機的に実
行することを試みる。
【0278】まず、投機実行に先立ち、プロセッサ53
は、データ依存投機制御装置55により、投機実行の成
否予測を行う(図8のブロック103)。投機実行成否
履歴テーブル58のエントリ1からは、“001”(強
い成功1)が読み出される。従って、投機実行が成功す
ることが予測されるので、LD5は、投機的に実行され
る(図8のブロック105)。
【0279】一方、プロセッサ52で実行されるスレッ
ド0は、最も先行するスレッドであるため、LD1は、
プロセッサ52において、確定的に実行される(図8の
ブロック111)。投機実行成否履歴テーブル58のエ
ントリ1は、“001”(強い成功1)のまま遷移しな
い。
【0280】次に、ループ1の2サイクル目では、プロ
セッサ50において、スレッド2に含まれるロード・ス
トア命令以外の命令、プロセッサ51において、スレッ
ド1に含まれるLD2、プロセッサ52において、スレ
ッド0に含まれるロード・ストア命令以外の命令、プロ
セッサ53において、スレッド3に含まれるST3が実
行される。
【0281】ここで、プロセッサ51に発行されたLD
2は、プロセッサ51で実行するスレッド1よりも先行
するスレッド0が含むストア命令に対して、投機的であ
るため、プロセッサ51は、データ依存投機制御装置5
5により、投機実行の成否予測を行う(図8のブロック
103)。投機実行成否履歴テーブル58のエントリ2
からは、“011”(弱い成功1)が読み出される。
【0282】従って、投機実行が成功することが予測さ
れるので、LD2は、投機的に実行される(図8のブロ
ック105)。この場合、エントリ2は、“011”
(弱い成功1)のまま遷移しない(図8のブロック10
7)。
【0283】一方、プロセッサ53で実行されるST3
に関しては、プロセッサ53以外の3つのプロセッサ5
0〜52が実行するスレッドは、いずれも、プロセッサ
53が実行するスレッド3に先行するので、ST3によ
る投機実行の失敗は、検出されなお。投機実行成否履歴
テーブル58より、エントリ3の内容は、“100”
(弱い失敗0)のまま遷移しない(図8のブロック11
7)。
【0284】ループ1の3サイクル目では、プロセッサ
50において、スレッド2に含まれるLD3、プロセッ
サ51において、スレッド1に含まれるST2、プロセ
ッサ52において、スレッド0に含まれるロード・スト
ア命令以外の命令、プロセッサ53において、スレッド
3に含まれるロード・ストア命令以外の命令が実行され
る。ここで、プロセッサ50に発行されたLD3は、プ
ロセッサ50で実行するスレッド2よりも先行するスレ
ッド0、およびスレッド1が含むストア命令に対して、
投機的である。そのため、プロセッサ50は、データ依
存投機制御装置55により、投機実行の成否予測を行う
(図8のブロック103)。
【0285】投機実行成否履歴テーブル58のエントリ
3からは、“100”(弱い失敗0)が読み出されるの
で、投機実行が失敗することが予測される。従って、L
D3の投機的な実行は中止され、後に、プログラム順序
で、確定的に実行される(図8のブロック109)。こ
の場合、エントリ3の内容は、“101”(弱い失敗
1)に遷移する(図8のブロック110)。
【0286】プロセッサ51で実行されるST2に対し
ては、ST2が含まれるスレッド1よりも後続のスレッ
ド2を実行するプロセッサ50、およびスレッド3を実
行するプロセッサ53において、各々のプロセッサが備
えるデータ依存関係検出装置57により、投機実行の成
否判定が行われる(図8のブロック115)。この場
合、いずれのプロセッサにおいても、投機実行失敗が検
出されないため、ST2に関しては、投機実行が成功し
たとして、投機実行成否履歴テーブル58のエントリ1
は、“000”(強い成功0)へ遷移する(図8のブロ
ック117)。
【0287】ループ1の4サイクル目において、スレッ
ド2を実行するプロセッサ50では、スレッド2よりも
プログラム順序で先行するスレッド0、およびスレッド
1の実行がまだ完了していないため、3サイクル目に投
機実行が中止されたLD3を、それらスレッド0、およ
びスレッド1との依存関係に関して、確定的に実行する
ことはできない。そのため、LD3の実行は待機とな
る。
【0288】一方、プロセッサ51では、スレッド1に
含まれるロード・ストア命令以外の命令、プロセッサ5
2では、スレッド0に含まれるST1、プロセッサ53
では、スレッド3に含まれるロード・ストア命令以外の
命令が実行される。プロセッサ52で実行されるST1
に対しては、ST1が含まれるスレッド0よりも後続の
スレッド1を実行するプロセッサ51、スレッド2を実
行するプロセッサ50、およびスレッド3を実行するプ
ロセッサ53において、各々のプロセッサが備えるデー
タ依存関係検出装置57により、投機実行の成否判定が
行われる(図8のブロック115)。
【0289】ループ0の場合と異なり、ループ1では、
LD3の投機実行が中止されているため、ST1に関し
て、投機実行の失敗は検出されない。従って、スレッド
0、スレッド1およびスレッド3の実行は、4サイクル
目で完了する。また、ST1に関して、投機実行成否履
歴テーブル58のエントリ3は、“110”(強い失敗
0)に遷移する(図8のブロック117)。
【0290】ループ1の5サイクル目では、プロセッサ
50において、3サイクル目に投機実行が失敗すること
が予測されて、実行が延期されていたLD3の確定的な
実行が可能になる。そのため、LD3が確定的に実行さ
れる。ループ1の6サイクル目では、プロセッサ50に
おいて、LD4が確定的に実行される。
【0291】上述したように、本実施の形態2に係るデ
ータ依存投機制御装置55は、マルチプロセッサシステ
ムによるスレッド並列処理において、投機実行が失敗す
ると予測されるロード命令は、投機実行を行わずにプロ
グラム順序で確定的に実行する。その結果、投機実行が
失敗する確率が低減され、プログラムの実行性能が向上
する。
【0292】すなわち、ループ1における命令実行、お
よびデータ依存投機制御装置の動作において、スレッド
2に含まれるLD3の投機実行の成否予測は、正しく失
敗を予測したことで、LD3の投機実行の失敗が回避さ
れる。そのため、ループ0においては、スレッド0〜3
の16命令を、プロセッサ50〜53で実行するのに9
サイクルを要したのに対して、ループ1では6サイクル
に改善された。
【0293】かかるデータ依存投機制御装置55によれ
ば、マルチプロセッサシステム上のスレッド並列処理に
おいて、スレッド単位のデータ依存投機実行するに際し
て、過去の命令の、投機実行の成否結果の履歴を参照し
て、投機実行の成否を予測し、成功すると予測した場合
には、投機的に命令を実行するが、失敗すると予測した
場合、その投機実行を中止し、後に、プログラム順序
で、確定的にスレッド実行する。よって、このデータ依
存投機制御装置55によれば、マルチプロセッサシステ
ムにおけるスレッド並列処理において、失敗する確率の
高い命令の投機実行は確定的に実行されるため、投機実
行が失敗する確率が低減され、プログラムの実行性能を
大幅に向上させることができる。
【0294】具体的には、16命令からなるプログラム
例に対して、4つのプロセッサでスレッド並列処理を行
うと、データ依存投機実行が失敗するループ0の場合で
9サイクル、投機実行の成否予測が成功するループ1で
は、6サイクルで実行が完了し、プログラムの実行性能
は大幅に向上する。かかる例では、説明のため各スレッ
ドを4命令構成としたが、通常、数十命令から数万命令
で構成されるので、より多くのロード命令がデータ依存
投機実行されることになる。そのため、本実施の形態に
係るデータ依存投機制御装置55は、実際の使用場面に
おいては、その性能向上により大きな効果を奏すると考
えられる。
【0295】さらに、本実施の形態に係るデータ依存投
機制御装置55は、投機実行の成否予測を行うに際し
て、ロード・ストア命令の対象アドレスに関して、エイ
リアスの存在を許容することで、対象アドレスそのもの
をすべて記憶することが不要になる。これにより、投機
実行の成否予測が可能なロード命令数に制限がなく、必
要なハードウエア量も小さく、少ないハードウエア量で
も、データ依存投機実行による実行性能の向上を享受す
ることができる。
【0296】また、投機実行の成否予測を行うに際し
て、ロード・ストア命令間の対象アドレスの比較を必要
とせず、参照される投機実行成否履歴テーブル58のエ
ントリは、高々1つなので、投機実行の成否予測の処理
時間が短い。このため、プロセッサの動作周波数を高速
化することが容易である。
【0297】さらに、本実施の形態に係るデータ依存投
機制御装置55は、スレッド制御部54が出力するスレ
ッド順序40に基づいて、正依存検出する対象のスレッ
ドを選択する機能を有する。そのため、スレッド間の順
序に柔軟に対応して、スレッド間の正依存関係を適切に
検出できる、という効果を奏する。
【0298】
【発明の効果】以上説明したように、本発明に係るデー
タ依存投機制御装置によれば、データ依存投機実行時に
おいて、過去における投機実行の成否結果の履歴を参照
して、投機実行の成否を予測し、成功すると予測した場
合には投機的に実行するが、失敗すると予測した場合に
は、投機実行を中止し、後にプログラム順序で確定的に
実行する。すなわち、プロセッサがメモリ操作命令の実
行する際に、データ投機実行が成功するか失敗するかを
予測し、成功が予測される場合には、メモリ操作命令を
非プログラム順序でデータ依存に関して投機的に実行
し、失敗が予測される場合には、メモリ操作命令をプロ
グラム順序で確定的に実行する。そのため、本データ依
存投機制御装置は、過去の投機実行の成否履歴を記憶し
た記憶手段を含み、データ依存投機実行の成否予測は、
過去の投機実行の成否結果に基づいて実行される。
【0299】かかる構成により、データ依存投機実行が
失敗すると予測されるメモリ操作命令、つまり、失敗す
る確率の高い投機実行は、プログラム順序で確定的に実
行されるため、データ依存投機実行が失敗する確率が低
減するだけでなく、過去のデータ依存投機実行の予測結
果をもとに、高精度な成否予測ができる。その結果、プ
ログラムの実行性能が向上するという効果がある。換言
すれば、本発明における上記の効果は、以下の理由によ
る。
【0300】(1)データ依存投機実行が失敗した場
合、その回復処理のために、プログラム順序で確定的に
実行するよりも実行性能が低下する場合が多い。すなわ
ち、データ依存投機実行を行って失敗するならば、デー
タ依存投機実行を行わずに、プログラム順序で確定的に
実行する方が、実行性能が高い。
【0301】(2)一般に、プログラム中でデータ依存
投機実行に失敗する場合の多いメモリ操作命令は、再び
失敗する確率が高く、逆に、プログラム中でデータ依存
投機実行に成功する場合の多いメモリ操作命令は、再び
成功する確率が高いという性質がある。すなわち、本発
明の成否予測は、過去のデータ依存投機実行の予測結果
を基づくものである。
【0302】また、他の発明に係る、複数のプロセッサ
から構成され、スレッド単位で並列処理を行うマルチプ
ロセッサシステムでのスレッド並列処理においても、ス
レッド単位のデータ依存投機実行するに際して、過去に
おける命令の投機実行の成否結果の履歴を参照して、投
機実行の成否を予測し、成功すると予測した場合は、投
機的に命令を実行するが、失敗すると予測した場合に
は、投機実行を中止し、後にプログラム順序で確定的に
スレッド実行する。
【0303】つまり、各プロセッサが、スレッド間の命
令に関して非プログラム順序で、データ依存に関して投
機的にメモリ操作命令の実行する際、データ投機実行が
成功するか失敗するかを予測し、成功が予測される場
合、メモリ操作命令を非プログラム順序でデータ依存投
機的に実行し、失敗が予測される場合には、メモリ操作
命令をプログラム順序で確定的に実行する。
【0304】ここでも、データ依存投機実行の成否予測
は、過去の投機実行の成否結果に基づいて実行され、こ
のような構成とすることで、失敗する確率の高い命令の
投機実行は、確定的に実行される。そのため、マルチプ
ロセッサシステムによるスレッド並列処理においても、
投機実行が失敗する確率が低減され、プログラムの実行
性能を向上することができる。
【0305】また、本発明に係るデータ依存投機制御装
置によれば、投機成否予測に際して、ロード命令の対象
アドレスは、例えば、ハッシュ関数回路により、投機実
行成否履歴テーブル(成否履歴記憶手段)の特定のエン
トリに重複を許して割り当てるため、実行されたロード
命令の対象アドレス自体をすべて記憶しておく必要がな
い。また、ストア命令の対象アドレスと比較するための
アドレス比較器も不要となる。よって、投機実行の成否
予測に必要なハーウェア量が小さくなる。
【0306】さらに、投機実行の成否予測をすることの
できるロード命令の数が、データ依存投機制御装置のハ
ーウェア量に制限されないため、少ないハーウェア量で
も、データ依存投機実行による実行性能を向上できる。
また、投機実行の成否予測に際し、ロード・ストア命令
の対象アドレス間の比較が不要であり、投機実行成否履
歴テーブル(成否履歴記憶手段)から読み出すエントリ
は、高々1つであるため、成否予測の処理時間が短くな
り、プロセッサの動作周波数の高速化が容易になる。
【図面の簡単な説明】
【図1】本発明の実施の形態1に係るデータ依存投機制
御装置を含むプロセッサの構成を示すブロック図であ
る。
【図2】図1に示すプロセッサによる命令実行の手順を
示すフローチャートである。
【図3】実施の形態1に係る投機実行成否履歴テーブル
の各エントリ内容の状態遷移を示す状態遷移図である。
【図4】実施の形態1に係るデータ依存投機制御装置の
具体的な動作例を説明するための図である。
【図5】実施の形態1に係るデータ依存投機制御装置が
備えるハッシュ関数回路を示す図である。
【図6】本発明の実施の形態2に係るデータ依存投機制
御装置の構成を示すブロック図である。
【図7】図6のデータ依存関係検出装置の一構成を示す
ブロック図である。
【図8】実施の形態2に係るデータ依存投機制御装置の
動作手順を示すフローチャートである。
【図9】データ依存投機制御装置の具体的動作例を示す
図である。
【図10】データ依存投機制御装置の具体的動作例を示
す図である。
【図11】データ依存投機実行の動作を説明するための
図である。
【図12】ロード・ストア命令間の正依存関係を検出す
る、従来のデータ依存関係検出装置を備えるプロセッサ
の構成を示すブロック図である。
【符号の説明】
10 データ依存投機制御装置 11 ハッシュ関数回路 12 投機実行成否履歴テーブル 13 投機実行フラグ 14 対象アドレス 15 実行命令 20 プロセッサ制御部 21 命令実行部 30 データ依存関係検出装置 31 アドレスバッファ 32 アドレス比較器 33 論理和回路 34 先行スレッド選択回路 35 アドレス一致検出回路 40 投機実行フラグ 50,51,52,53 プロセッサ 54 スレッド制御部 55 データ依存投機制御装置 56 プロセッサ制御部 57 データ依存関係検出装置 58 投棄実行成否履歴テーブル 59 ハッシュ関数回路
───────────────────────────────────────────────────── フロントページの続き (72)発明者 鳥居 淳 東京都港区芝五丁目7番1号 日本電気株 式会社内 (72)発明者 西 直樹 東京都港区芝五丁目7番1号 日本電気株 式会社内 Fターム(参考) 5B013 AA12 BB18 CC01 DD00 5B045 GG11

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 メモリ操作命令を非プログラム順序で、
    命令間の依存関係に関して投機的に実行するデータ依存
    投機実行制御装置において、 前記メモリ操作命令の処理アドレスを受けて、その処理
    アドレスを一意な番号に変換するアドレス変換手段と、 前記変換された番号に対応して、前記メモリ操作命令の
    投機的実行の成否履歴を記憶する成否履歴記憶手段と、 前記成否履歴を参照して、前記投機的実行の成否を予測
    する予測手段と、 前記予測の結果に従って前記メモリ操作命令を実行する
    実行手段とを備えることを特徴とするデータ依存投機実
    行制御装置。
  2. 【請求項2】 前記実行手段は、前記予測手段が前記投
    機的実行の成功を予測した場合、前記メモリ操作命令を
    非プログラム順序で投機的に実行し、前記予測手段が前
    記投機的実行の失敗を予測した場合には、前記メモリ操
    作命令をプログラム順序で確定的に実行することを特徴
    とする請求項1記載のデータ依存投機実行制御装置。
  3. 【請求項3】 前記予測手段は、前記成否履歴記憶手段
    の内容を参照して、過去において投機的実行が失敗する
    よりも成功した確率が高ければ、その投機的実行の成功
    を予測し、過去において投機的実行が成功するよりも失
    敗した確率が高ければ、その投機的実行の失敗を予測す
    ることを特徴とする請求項2記載のデータ依存投機実行
    制御装置。
  4. 【請求項4】 前記アドレス変換手段は、入力されるア
    ドレスの所定ビットをそのまま出力することで、任意の
    アドレスを前記所定ビットで規定される番号に変換する
    ことを特徴とする請求項2記載のデータ依存投機実行制
    御装置。
  5. 【請求項5】 前記アドレス変換手段は、入力されるア
    ドレスの所定の複数ビットの排他的論理和演算を行い、
    その演算結果を出力することで、任意のアドレスを前記
    出力で規定される番号に変換することを特徴とする請求
    項2記載のデータ依存投機実行制御装置。
  6. 【請求項6】 複数のプロセッサから構成され、スレッ
    ド単位で並列処理を行うマルチプロセッサシステムにお
    いて、 前記スレッドを構成するメモリ操作命令の処理アドレス
    を一意な番号に変換するアドレス変換手段と、 前記変換された番号に対応して、前記メモリ操作命令の
    投機的実行の成否履歴を記憶する成否履歴記憶手段と、 前記成否履歴を参照して、前記投機的実行の成否を予測
    する予測手段と、 前記予測の結果に従って、前記メモリ操作命令を前記ス
    レッド間の依存関係に関して投機的に実行する実行手段
    とを備えることを特徴とするマルチプロセッサシステ
    ム。
  7. 【請求項7】 前記実行手段は、前記予測手段が前記投
    機的実行の成功を予測した場合、前記メモリ操作命令を
    非プログラム順序で投機的に実行し、前記予測手段が前
    記投機的実行の失敗を予測した場合には、前記メモリ操
    作命令をプログラム順序で確定的に実行することを特徴
    とする請求項6記載のマルチプロセッサシステム。
  8. 【請求項8】 前記予測手段は、前記成否履歴記憶手段
    の内容を参照して、過去において投機的実行が失敗する
    よりも成功した確率が高ければ、その投機的実行の成功
    を予測し、過去において投機的実行が成功するよりも失
    敗した確率が高ければ、その投機的実行の失敗を予測す
    ることを特徴とする請求項7記載のマルチプロセッサシ
    ステム。
  9. 【請求項9】 前記アドレス変換手段は、入力されるア
    ドレスの所定ビットをそのまま出力することで、任意の
    アドレスを前記所定ビットで規定される番号に変換する
    ことを特徴とする請求項7記載のマルチプロセッサシス
    テム。
  10. 【請求項10】 前記アドレス変換手段は、入力される
    アドレスの所定の複数ビットの排他的論理和演算を行
    い、その演算結果を出力することで、任意のアドレスを
    前記出力で規定される番号に変換することを特徴とする
    請求項7記載のマルチプロセッサシステム。
  11. 【請求項11】 メモリ操作命令を非プログラム順序
    で、命令間の依存関係に関して投機的に実行するデータ
    依存投機実行制御方法において、 前記メモリ操作命令の処理アドレスを受けて、その処理
    アドレスを一意な番号に変換するステップと、 前記変換された番号に対応して、前記メモリ操作命令の
    投機的実行の成否履歴を記憶するステップと、 前記成否履歴を参照して、前記投機的実行の成否を予測
    するステップと、 前記予測の結果に従って前記メモリ操作命令を実行する
    ステップとを備えることを特徴とするデータ依存投機実
    行制御方法。
  12. 【請求項12】 前記実行ステップでは、前記予測ステ
    ップにおいて前記投機的実行の成功を予測した場合、前
    記メモリ操作命令を非プログラム順序で投機的に実行
    し、前記投機的実行の失敗を予測した場合には、前記メ
    モリ操作命令をプログラム順序で確定的に実行すること
    を特徴とする請求項11記載のデータ依存投機実行制御
    方法。
  13. 【請求項13】 前記予測ステップでは、前記記憶ステ
    ップで記憶した成否履歴を参照して、過去において投機
    的実行が失敗するよりも成功した確率が高ければ、その
    投機的実行の成功を予測し、過去において投機的実行が
    成功するよりも失敗した確率が高ければ、その投機的実
    行の失敗を予測することを特徴とする請求項12記載の
    データ依存投機実行制御方法。
JP2001154113A 2001-05-23 2001-05-23 マルチプロセッサシステム、データ依存投機実行制御装置およびその方法 Expired - Fee Related JP3729087B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2001154113A JP3729087B2 (ja) 2001-05-23 2001-05-23 マルチプロセッサシステム、データ依存投機実行制御装置およびその方法
US10/151,819 US6970997B2 (en) 2001-05-23 2002-05-22 Processor, multiprocessor system and method for speculatively executing memory operations using memory target addresses of the memory operations to index into a speculative execution result history storage means to predict the outcome of the memory operation
GB0211979A GB2378549B8 (en) 2001-05-23 2002-05-23 Processor multiprocessor system and method for data dependence speculative execution

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001154113A JP3729087B2 (ja) 2001-05-23 2001-05-23 マルチプロセッサシステム、データ依存投機実行制御装置およびその方法

Publications (2)

Publication Number Publication Date
JP2002351657A true JP2002351657A (ja) 2002-12-06
JP3729087B2 JP3729087B2 (ja) 2005-12-21

Family

ID=18998515

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001154113A Expired - Fee Related JP3729087B2 (ja) 2001-05-23 2001-05-23 マルチプロセッサシステム、データ依存投機実行制御装置およびその方法

Country Status (3)

Country Link
US (1) US6970997B2 (ja)
JP (1) JP3729087B2 (ja)
GB (1) GB2378549B8 (ja)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8122222B2 (en) 2008-04-18 2012-02-21 International Business Machines Corporation Access speculation predictor with predictions based on a scope predictor
US8122223B2 (en) 2008-04-18 2012-02-21 International Business Machines Corporation Access speculation predictor with predictions based on memory region prior requestor tag information
US8127106B2 (en) 2008-04-18 2012-02-28 International Business Machines Corporation Access speculation predictor with predictions based on a domain indicator of a cache line
US8131974B2 (en) 2008-04-18 2012-03-06 International Business Machines Corporation Access speculation predictor implemented via idle command processing resources
JP2013239166A (ja) * 2012-05-04 2013-11-28 Apple Inc ロードストア依存関係予測器のコンテンツマネージメント
WO2014123127A1 (en) * 2013-02-06 2014-08-14 Square Enix Holdings Co., Ltd. Image processing apparatus, method of controlling the same, program and storage medium
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing
US10572387B2 (en) 2018-01-11 2020-02-25 International Business Machines Corporation Hardware control of CPU hold of a cache line in private cache where cache invalidate bit is reset upon expiration of timer

Families Citing this family (91)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7035880B1 (en) 1999-07-14 2006-04-25 Commvault Systems, Inc. Modular backup and retrieval system used in conjunction with a storage area network
US7003641B2 (en) 2000-01-31 2006-02-21 Commvault Systems, Inc. Logical view with granular access to exchange data managed by a modular data and storage management system
US7434219B2 (en) 2000-01-31 2008-10-07 Commvault Systems, Inc. Storage of application specific profiles correlating to document versions
US6658436B2 (en) 2000-01-31 2003-12-02 Commvault Systems, Inc. Logical view and access to data managed by a modular data and storage management system
JP3729064B2 (ja) * 2000-11-29 2005-12-21 日本電気株式会社 データ依存関係検出装置
US7107298B2 (en) 2001-09-28 2006-09-12 Commvault Systems, Inc. System and method for archiving objects in an information store
US7120762B2 (en) * 2001-10-19 2006-10-10 Wisconsin Alumni Research Foundation Concurrent execution of critical sections by eliding ownership of locks
US6931515B2 (en) * 2002-07-29 2005-08-16 Hewlett-Packard Development Company, L.P. Method and system for using dynamic, deferred operation information to control eager deferral of control-speculative loads
US7398355B1 (en) 2003-02-13 2008-07-08 Sun Microsystems, Inc. Avoiding locks by transactionally executing critical sections
US7269693B2 (en) * 2003-02-13 2007-09-11 Sun Microsystems, Inc. Selectively monitoring stores to support transactional program execution
US7089374B2 (en) * 2003-02-13 2006-08-08 Sun Microsystems, Inc. Selectively unmarking load-marked cache lines during transactional program execution
US6938130B2 (en) * 2003-02-13 2005-08-30 Sun Microsystems Inc. Method and apparatus for delaying interfering accesses from other threads during transactional program execution
US7269717B2 (en) * 2003-02-13 2007-09-11 Sun Microsystems, Inc. Method for reducing lock manipulation overhead during access to critical code sections
US7418577B2 (en) * 2003-02-13 2008-08-26 Sun Microsystems, Inc. Fail instruction to support transactional program execution
US7269694B2 (en) 2003-02-13 2007-09-11 Sun Microsystems, Inc. Selectively monitoring loads to support transactional program execution
US7454569B2 (en) 2003-06-25 2008-11-18 Commvault Systems, Inc. Hierarchical system and method for performing storage operations in a computer network
US7546324B2 (en) 2003-11-13 2009-06-09 Commvault Systems, Inc. Systems and methods for performing storage operations using network attached storage
US8892821B2 (en) * 2003-12-10 2014-11-18 International Business Machines Corporation Method and system for thread-based memory speculation in a memory subsystem of a data processing system
US7415597B2 (en) * 2004-09-08 2008-08-19 Advanced Micro Devices, Inc. Processor with dependence mechanism to predict whether a load is dependent on older store
US8171474B2 (en) 2004-10-01 2012-05-01 Serguei Mankovski System and method for managing, scheduling, controlling and monitoring execution of jobs by a job scheduler utilizing a publish/subscription interface
US7664933B2 (en) * 2005-01-17 2010-02-16 Denso Corporation Microcomputer and encoding system for instruction code and CPU
US20060218542A1 (en) * 2005-03-28 2006-09-28 Jiangning Liu Redundant store-load instruction elimination based on stack location insensitive sequences
US7707451B2 (en) * 2005-06-28 2010-04-27 Alcatel-Lucent Usa Inc. Methods and devices for recovering from initialization failures
US20070006048A1 (en) * 2005-06-29 2007-01-04 Intel Corporation Method and apparatus for predicting memory failure in a memory system
US20070234014A1 (en) * 2006-03-28 2007-10-04 Ryotaro Kobayashi Processor apparatus for executing instructions with local slack prediction of instructions and processing method therefor
US7930695B2 (en) * 2006-04-06 2011-04-19 Oracle America, Inc. Method and apparatus for synchronizing threads on a processor that supports transactional memory
US7734669B2 (en) 2006-12-22 2010-06-08 Commvault Systems, Inc. Managing copies of data
US20080162889A1 (en) * 2007-01-03 2008-07-03 International Business Machines Corporation Method and apparatus for implementing efficient data dependence tracking for multiprocessor architectures
US8291197B2 (en) * 2007-02-12 2012-10-16 Oracle America, Inc. Aggressive loop parallelization using speculative execution mechanisms
US7613908B2 (en) * 2007-02-23 2009-11-03 Intel Corporation Selective hardware lock disabling
US20080244544A1 (en) * 2007-03-29 2008-10-02 Naveen Neelakantam Using hardware checkpoints to support software based speculation
JP4896837B2 (ja) * 2007-08-20 2012-03-14 株式会社東芝 携帯可能電子装置および携帯可能電子装置の制御方法
US8396838B2 (en) 2007-10-17 2013-03-12 Commvault Systems, Inc. Legal compliance, electronic discovery and electronic document handling of online and offline copies of data
US7844807B2 (en) 2008-02-01 2010-11-30 International Business Machines Corporation Branch target address cache storing direct predictions
US8086831B2 (en) * 2008-02-01 2011-12-27 International Business Machines Corporation Indexed table circuit having reduced aliasing
US7877586B2 (en) * 2008-02-01 2011-01-25 International Business Machines Corporation Branch target address cache selectively applying a delayed hit
US7962722B2 (en) * 2008-02-01 2011-06-14 International Business Machines Corporation Branch target address cache with hashed indices
US7865705B2 (en) * 2008-02-01 2011-01-04 International Business Machines Corporation Branch target address cache including address type tag bit
US8645670B2 (en) * 2008-02-15 2014-02-04 International Business Machines Corporation Specialized store queue and buffer design for silent store implementation
US8769048B2 (en) 2008-06-18 2014-07-01 Commvault Systems, Inc. Data protection scheduling, such as providing a flexible backup window in a data protection system
US8352954B2 (en) 2008-06-19 2013-01-08 Commvault Systems, Inc. Data storage resource allocation by employing dynamic methods and blacklisting resource request pools
US9128883B2 (en) 2008-06-19 2015-09-08 Commvault Systems, Inc Data storage resource allocation by performing abbreviated resource checks based on relative chances of failure of the data storage resources to determine whether data storage requests would fail
US8725688B2 (en) 2008-09-05 2014-05-13 Commvault Systems, Inc. Image level copy or restore, such as image level restore without knowledge of data object metadata
US20100070474A1 (en) 2008-09-12 2010-03-18 Lad Kamleshkumar K Transferring or migrating portions of data objects, such as block-level data migration or chunk-based data migration
US20100070730A1 (en) * 2008-09-17 2010-03-18 Sebastian Pop Minimizing memory access conflicts of process communication channels
US8266477B2 (en) * 2009-01-09 2012-09-11 Ca, Inc. System and method for modifying execution of scripts for a job scheduler using deontic logic
JP5453883B2 (ja) * 2009-03-31 2014-03-26 富士通株式会社 運用管理システム、プロセス解析装置、プロセス解析プログラムおよびプロセス解析方法
US9021198B1 (en) 2011-01-20 2015-04-28 Commvault Systems, Inc. System and method for sharing SAN storage
US8849762B2 (en) 2011-03-31 2014-09-30 Commvault Systems, Inc. Restoring computing environments, such as autorecovery of file systems at certain points in time
EP2738681A4 (en) * 2011-07-27 2014-07-30 Fujitsu Ltd ELECTRONIC DEVICE, METHOD FOR ACCESSING THIS DEVICE AND PROGRAM THEREFOR
US9268596B2 (en) 2012-02-02 2016-02-23 Intel Corparation Instruction and logic to test transactional execution status
US10157184B2 (en) 2012-03-30 2018-12-18 Commvault Systems, Inc. Data previewing before recalling large data files
US8990817B1 (en) * 2012-09-06 2015-03-24 Symantec Corporation Predicting outcome of operations of multi-tier applications
US9158691B2 (en) 2012-12-14 2015-10-13 Apple Inc. Cross dependency checking logic
US9633216B2 (en) 2012-12-27 2017-04-25 Commvault Systems, Inc. Application of information management policies based on operation with a geographic entity
US10140129B2 (en) 2012-12-28 2018-11-27 Intel Corporation Processing core having shared front end unit
US9361116B2 (en) 2012-12-28 2016-06-07 Intel Corporation Apparatus and method for low-latency invocation of accelerators
US9417873B2 (en) 2012-12-28 2016-08-16 Intel Corporation Apparatus and method for a hybrid latency-throughput processor
US9053025B2 (en) * 2012-12-28 2015-06-09 Intel Corporation Apparatus and method for fast failure handling of instructions
US10346195B2 (en) 2012-12-29 2019-07-09 Intel Corporation Apparatus and method for invocation of a multi threaded accelerator
GB2509830B (en) * 2013-02-11 2014-12-24 Imagination Tech Ltd Speculative load issue
US9459968B2 (en) 2013-03-11 2016-10-04 Commvault Systems, Inc. Single index to query multiple backup formats
US9535774B2 (en) 2013-09-09 2017-01-03 International Business Machines Corporation Methods, apparatus and system for notification of predictable memory failure
US9798596B2 (en) 2014-02-27 2017-10-24 Commvault Systems, Inc. Automatic alert escalation for an information management system
US9648100B2 (en) 2014-03-05 2017-05-09 Commvault Systems, Inc. Cross-system storage management for transferring data across autonomous information management systems
US9823978B2 (en) 2014-04-16 2017-11-21 Commvault Systems, Inc. User-level quota management of data objects stored in information management systems
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US9740574B2 (en) 2014-05-09 2017-08-22 Commvault Systems, Inc. Load balancing across multiple data paths
US11249858B2 (en) 2014-08-06 2022-02-15 Commvault Systems, Inc. Point-in-time backups of a production application made accessible over fibre channel and/or ISCSI as data sources to a remote application by representing the backups as pseudo-disks operating apart from the production application and its host
US9852026B2 (en) 2014-08-06 2017-12-26 Commvault Systems, Inc. Efficient application recovery in an information management system based on a pseudo-storage-device driver
US9444811B2 (en) 2014-10-21 2016-09-13 Commvault Systems, Inc. Using an enhanced data agent to restore backed up data across autonomous storage management systems
WO2016151774A1 (ja) * 2015-03-24 2016-09-29 富士通株式会社 情報処理装置、情報処理システムおよび情報処理装置の制御プログラム
US9766825B2 (en) 2015-07-22 2017-09-19 Commvault Systems, Inc. Browse and restore for block-level backups
US10514925B1 (en) 2016-01-28 2019-12-24 Apple Inc. Load speculation recovery
US10296368B2 (en) 2016-03-09 2019-05-21 Commvault Systems, Inc. Hypervisor-independent block-level live browse for access to backed up virtual machine (VM) data and hypervisor-free file-level recovery (block-level pseudo-mount)
US10437595B1 (en) 2016-03-15 2019-10-08 Apple Inc. Load/store dependency predictor optimization for replayed loads
US10324727B2 (en) * 2016-08-17 2019-06-18 Arm Limited Memory dependence prediction
US10521351B2 (en) 2017-01-12 2019-12-31 International Business Machines Corporation Temporarily suppressing processing of a restrained storage operand request
US10621090B2 (en) 2017-01-12 2020-04-14 International Business Machines Corporation Facility for extending exclusive hold of a cache line in private cache
US10838821B2 (en) 2017-02-08 2020-11-17 Commvault Systems, Inc. Migrating content and metadata from a backup system
US10740193B2 (en) 2017-02-27 2020-08-11 Commvault Systems, Inc. Hypervisor-independent reference copies of virtual machine payload data based on block-level pseudo-mount
US10891069B2 (en) 2017-03-27 2021-01-12 Commvault Systems, Inc. Creating local copies of data stored in online data repositories
US10776329B2 (en) 2017-03-28 2020-09-15 Commvault Systems, Inc. Migration of a database management system to cloud storage
US11074140B2 (en) 2017-03-29 2021-07-27 Commvault Systems, Inc. Live browsing of granular mailbox data
US10664352B2 (en) 2017-06-14 2020-05-26 Commvault Systems, Inc. Live browsing of backed up data residing on cloned disks
US10795927B2 (en) 2018-02-05 2020-10-06 Commvault Systems, Inc. On-demand metadata extraction of clinical image data
US10789387B2 (en) 2018-03-13 2020-09-29 Commvault Systems, Inc. Graphical representation of an information management system
US10860443B2 (en) 2018-12-10 2020-12-08 Commvault Systems, Inc. Evaluation and reporting of recovery readiness in a data storage management system
US10606603B1 (en) * 2019-04-08 2020-03-31 Ye Tao Methods and apparatus for facilitating a memory mis-speculation recovery
US11308034B2 (en) 2019-06-27 2022-04-19 Commvault Systems, Inc. Continuously run log backup with minimal configuration and resource usage from the source machine
CN112783617B (zh) * 2020-12-10 2024-03-29 国电南京自动化股份有限公司 一种适用于轨道交通监控应用的带虚拟执行的顺序控制方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5487156A (en) 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
JP3146077B2 (ja) 1991-11-15 2001-03-12 松下電器産業株式会社 プロセッサ
US5509135A (en) * 1992-09-25 1996-04-16 Digital Equipment Corporation Multi-index multi-way set-associative cache
US5666506A (en) * 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US5625835A (en) * 1995-05-10 1997-04-29 International Business Machines Corporation Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US5742805A (en) * 1996-02-15 1998-04-21 Fujitsu Ltd. Method and apparatus for a single history register based branch predictor in a superscalar microprocessor
JP2970553B2 (ja) * 1996-08-30 1999-11-02 日本電気株式会社 マルチスレッド実行方法
JPH10171653A (ja) 1996-10-09 1998-06-26 Nkk Corp 情報処理装置の分岐予測方式及びそれを用いた装置
US5781752A (en) 1996-12-26 1998-07-14 Wisconsin Alumni Research Foundation Table based data speculation circuit for parallel processing computer
US5987595A (en) * 1997-11-25 1999-11-16 Intel Corporation Method and apparatus for predicting when load instructions can be executed out-of order
JPH11212788A (ja) * 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US6108770A (en) 1998-06-24 2000-08-22 Digital Equipment Corporation Method and apparatus for predicting memory dependence using store sets

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8122222B2 (en) 2008-04-18 2012-02-21 International Business Machines Corporation Access speculation predictor with predictions based on a scope predictor
US8122223B2 (en) 2008-04-18 2012-02-21 International Business Machines Corporation Access speculation predictor with predictions based on memory region prior requestor tag information
US8127106B2 (en) 2008-04-18 2012-02-28 International Business Machines Corporation Access speculation predictor with predictions based on a domain indicator of a cache line
US8131974B2 (en) 2008-04-18 2012-03-06 International Business Machines Corporation Access speculation predictor implemented via idle command processing resources
JP2013239166A (ja) * 2012-05-04 2013-11-28 Apple Inc ロードストア依存関係予測器のコンテンツマネージメント
KR101555166B1 (ko) 2012-05-04 2015-09-22 애플 인크. 로드―저장 의존성 예측기 내용 관리
JP2015232902A (ja) * 2012-05-04 2015-12-24 アップル インコーポレイテッド ロードストア依存関係予測器のコンテンツマネージメント
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing
WO2014123127A1 (en) * 2013-02-06 2014-08-14 Square Enix Holdings Co., Ltd. Image processing apparatus, method of controlling the same, program and storage medium
JP2015515651A (ja) * 2013-02-06 2015-05-28 株式会社スクウェア・エニックス・ホールディングス 情報処理装置、制御方法、プログラム、及び記録媒体
US10572387B2 (en) 2018-01-11 2020-02-25 International Business Machines Corporation Hardware control of CPU hold of a cache line in private cache where cache invalidate bit is reset upon expiration of timer

Also Published As

Publication number Publication date
GB2378549B8 (en) 2005-07-19
US20020178349A1 (en) 2002-11-28
US6970997B2 (en) 2005-11-29
GB0211979D0 (en) 2002-07-03
GB2378549A (en) 2003-02-12
JP3729087B2 (ja) 2005-12-21
GB2378549B (en) 2005-06-08

Similar Documents

Publication Publication Date Title
JP3729087B2 (ja) マルチプロセッサシステム、データ依存投機実行制御装置およびその方法
JP3729064B2 (ja) データ依存関係検出装置
US6182210B1 (en) Processor having multiple program counters and trace buffers outside an execution pipeline
JP3547482B2 (ja) 情報処理装置
EP1040421B1 (en) Out-of-pipeline trace buffer for instruction replay following misspeculation
JP3209205B2 (ja) プロセッサにおけるレジスタ内容の継承装置
JP3014773B2 (ja) プロセサアーキテクチャ
JP4553936B2 (ja) アウト・オブ・オーダーのdmaコマンドキューにおけるコマンド順序の設定に関する技術
US20030033511A1 (en) Processor having multiple program counters and trace buffers outside an execution pipeline
JP2911278B2 (ja) プロセッサ
JP2002508568A (ja) 不適正順序マルチスレッド実行を実行するロード命令およびストア命令を順序付けるシステム
JPS623340A (ja) 分岐方法
KR20000076584A (ko) 컴퓨터 프로세싱 시스템에서의 로드 연산을 재순서화하기위한 방법 및 장치
US20040015904A1 (en) Method and apparatus for optimizing load memory accesses
US10545765B2 (en) Multi-level history buffer for transaction memory in a microprocessor
US6862676B1 (en) Superscalar processor having content addressable memory structures for determining dependencies
US7844799B2 (en) Method and system for pipeline reduction
JPH1097423A (ja) ループ処理の並列実行制御に適したレジスタ構成を有するプロセッサ
JP2001092657A (ja) 中央演算装置、コンパイル方法、及びコンパイルプログラムを記録した記録媒体
JP2002055814A (ja) 適切な発行先に命令を発行する命令発行装置
KR100837400B1 (ko) 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치
US20230409331A1 (en) Load reissuing using an alternate issue queue
KR102170966B1 (ko) 고성능 비순차 실행 코어의 리오더 버퍼 관리 장치 및 방법
JP5392810B2 (ja) 命令発行制御装置及び命令発行制御方法
US7783863B1 (en) Graceful degradation in a trace-based processor

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040618

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050621

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050815

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050926

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091014

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091014

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101014

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111014

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121014

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131014

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees