JPH1196005A - 並列処理装置 - Google Patents

並列処理装置

Info

Publication number
JPH1196005A
JPH1196005A JP27391997A JP27391997A JPH1196005A JP H1196005 A JPH1196005 A JP H1196005A JP 27391997 A JP27391997 A JP 27391997A JP 27391997 A JP27391997 A JP 27391997A JP H1196005 A JPH1196005 A JP H1196005A
Authority
JP
Japan
Prior art keywords
thread
instruction
branch
execution
execution unit
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.)
Pending
Application number
JP27391997A
Other languages
English (en)
Inventor
Atsushi Torii
淳 鳥居
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 JP27391997A priority Critical patent/JPH1196005A/ja
Publication of JPH1196005A publication Critical patent/JPH1196005A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)

Abstract

(57)【要約】 【課題】並列処理装置において、待機中のスレッド実行
部を活用して条件分岐命令の、条件成立側、非成立側の
双方を投機的に実行し、条件成立時にどちらかの処理を
選択することによって高速化を図る分岐命令処理方法及
び装置に提供。 【解決手段】並列処理装置において、条件分岐命令をフ
ェッチした際に、システム中の他の待機中のスレッド実
行部において分岐側のアドレスを開始アドレスとする投
機実行スレッドを起動し、レジスタ値をコピーして実行
を行い、一方、条件分岐命令を実行したスレッド実行部
は条件非成立時の処理を投機的に継続して行う。条件分
岐命令の条件が確定した際に、その条件の成否によって
投機実行している処理のいずれかを確定し他方を破棄す
る。これによって分岐予測が当たりにくい分岐命令を高
速に実行することを可能とする。同時にプログラム中で
並列実行を行いにくい部分でスレッド実行部を有効に使
用することを可能とする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は情報処理装置に関
し、特に複数のスレッドを同時に実行する高性能マイク
ロプロセッサのスレッドの実行制御方法に関する。
【0002】
【従来の技術】近年の高性能マイクロプロセッサは、1
サイクルに複数の命令を同時に実行するスーパスカラ機
能を備え、命令レベルの並列処理を行うことによって、
性能向上を実現している。さらに、命令レベル並列処理
のさらなる向上のために、プログラムコードの非順序実
行(out−of−order execution)
を導入している。非順序実行とは、プログラムコードの
順序にかかわらず、計算に必要なデータの揃った命令か
ら実行を行うものである。
【0003】更に、実行可能な命令を増やすために、レ
ジスタの逆依存性などを解消するレジスタ・リネーミン
グ(register renaming)、条件分岐
命令を挟んでの非順序実行を実現する分岐予測と投機的
実行(speculative execution)
などの高度な機能が提案され且つ導入されている。
【0004】しかしながら、このような高度な実行方法
を用いた場合にも、分岐予測が外れる場合には、投機的
実行がキャンセルされてしまい、性能向上が制約されて
しまう、という問題が生じる。
【0005】このような問題に対して、分岐予測機構の
工夫による予測精度の高度化の研究、例えば文献(C,
H.Perleberg and A,J.Smit
h,“Branch Target Buffer D
esign and Optimization,”
IEEE Trans.on Computers,V
ol.42,No.4,pages 396−412,
April 1993)など、分岐予測が外れた際の回
復処理の高速化の提案が数多く行われている。
【0006】これらの機能を用いた場合にも、分岐の予
測精度を100%にすることは不可能であり、本質的に
予測が当りにくい振舞をするプログラムに対する性能向
上は難しいものとなっている。
【0007】out−of−order実行を行わない
パイプラインプロセッサにおいては、条件分岐の条件成
立/不成立の両方向の命令を、フェッチ、デコードしパ
イプラインに空きスロットが生じないように工夫した提
案がいくつか行われている。
【0008】例えば特開平6−250843号公報(発
明の名称:「演算処理方法および演算処理装置」)に
は、命令フェッチ部を複数系統設け、分岐が成立した場
合と成立しない場合の両方向の命令を同時に先取りし、
いずれかの命令を選択する方式が提案されている。しか
しながら、この方式は、命令を仮実行する訳ではないの
で、out−of−order実行にふさわしい方式と
は言い難い。
【0009】一方、問題の持つ並列性を活用し、単一の
プログラムを複数の命令流(スレッド)群に分割して、
それらを並列に実行することによって、性能を向上させ
るプログラム実行方法として、マルチスレッド実行方法
が挙げられる。マルチスレッド実行方法では、あらかじ
めスレッドの生成や終了、同期などの並列化をプログラ
ム中で行う。つまり、プログラムを実行する前に並列化
を行うという点が、命令レベル並列処理とは本質的に異
なる。
【0010】しかしながら、プログラムの並列化の過程
において、プログラム実行前に並列処理が出来ないと判
断する部分は当然存在する。この割合が大きい場合に
は、マルチスレッド並列実行の効果が期待できない。こ
のことは、アムダールの法則として良く知られている。
【0011】複数のスレッド実行部を備えた並列処理装
置において、マルチスレッド実行を行う場合、プログラ
ム中の逐次部分では一つのスレッド実行部以外は待機状
態となり、性能向上に寄与しない。
【0012】並列処理可能な部分を増やす方法として、
スレッドの粒度を細かくするという方法が考えられる。
このようなマルチスレッド実行方法として、本願出願人
は、MUSCATアーキテクチャを提案している。文献
(情報処理学会並列処理シンポジウム1997予稿集p
p.XX−pp.XX 1997/5/28予稿集発
行)参照。このMUSCATでは、スレッドの投機実行
をサポートしており、実行が確定していないスレッドを
投機的に実行することが可能である。
【0013】
【発明が解決しようとする課題】しかしながら、このよ
うなスレッドの細粒度化や投機的実行をサポートした場
合にも、命令間の制御の依存性やデータの依存性が強
く、相変わらず並列化によって性能向上が困難な部分が
残る。また、マルチスレッド並列実行が可能な部分にお
いても、スレッド内に存在する本質的に予測精度が向上
しないような条件分岐命令は存在する。このような条件
分岐命令の存在によって、スレッドの投機的実行の成功
率が低下して、性能向上を妨げるという問題が生じる。
【0014】したがって、本発明は、上記問題点に鑑み
てなされたものであって、その目的は、並列処理装置に
おいて、待機中のスレッド実行部を活用して条件分岐命
令の、条件成立側、非成立側の双方を投機的に実行し、
条件成立時にどちらかの処理を選択することによって高
速化を図る並列処理装置及び分岐命令処理方法を提供す
ることにある。
【0015】
【課題を解決するための手段】前記目的を達成するた
め、本発明は、複数のスレッド実行部を持つ並列処理装
置上のスレッド実行部を有効に利用して、条件分岐命令
以降の命令を分岐側と非分岐側の両者を投機的に実行
し、条件分岐命令確定時点で、誤った側の実行を取り消
すことにより、実質的に分岐予測が外れることなく実行
を継続することを可能とし性能向上を達成するものであ
る。以下、このような処理方式を「分岐両実行」と呼ぶ
ことにする。
【0016】より詳細には、本発明は、並列処理装置に
おいて、条件分岐命令をフェッチした際に、システム中
で他の待機中のスレッド実行部において分岐側のアドレ
スを開始アドレスとする投機実行スレッドを起動し、レ
ジスタ値をコピーして実行を行い、一方、条件分岐命令
を実行したスレッド実行部は条件非成立時の処理を投機
的に継続して行い、条件分岐命令の条件が確定した際
に、その条件の成否によって、投機実行している処理の
いずれかを確定し、他方を破棄する。これによって分岐
予測が当たりにくい分岐命令を高速に実行することを可
能とすると同時に、プログラム中で並列実行を行い難い
部分でスレッド実行部を有効に使用することを可能とし
たものである。
【0017】
【発明の実施の形態】本発明の実施の形態について以下
に説明する。まず、本発明の原理について以下に説明す
る。コード中に存在する条件分岐命令は、プログラマや
コンパイラによってコードが生成される際に静的に予測
できるもの、動的な履歴からある程度の確率で予測でき
るもの、ほとんど予測があたらないものに分けることが
可能である。本発明においては、これらの予測結果から
静的予測結果から分岐両実行するものを指定する方式、
分岐の予測および結果の履歴から分岐両実行するものを
決定する方式を併せて提案する。これによって、分岐予
測の成功率が低い分岐のみを分岐両実行し、分岐予測が
外れることによる性能向上阻害要因の解消を図るもので
ある。
【0018】本発明の並列処理装置は、その好ましい実
施の形態において、複数の命令列から構成されるスレッ
ドが同時に存在し前記複数スレッドが論理的に複数のス
レッド実行部によって並列に実行される並列処理装置に
おいて、プログラムコード中の条件分岐命令が、分岐す
るか否かを決定する以前に、新たに分岐先のアドレスを
開始地点とするスレッドを他のスレッド実行部において
投機的に起動して実行し、前記条件分岐命令を実行した
スレッド実行部においては該条件分岐命令が分岐しない
ものとして、前記条件分岐命令以降の命令を投機的に実
行し、前記条件分岐命令が決定し、分岐することが判明
した場合には、前記条件分岐命令を実行したスレッドの
前記条件分岐命令以降の命令を取り消し、分岐しないこ
とが判明した場合には、前記新たに生成したスレッドの
実行を取り消すようにしたものである。
【0019】すなわち、本発明の実施の形態において
は、条件分岐命令をフェッチした際に、システム中の他
の待機中のスレッド実行部において分岐側のアドレスを
開始アドレスとする投機実行スレッドを起動し、レジス
タ値をコピーして実行を行う。
【0020】一方、前記条件分岐命令を実行したスレッ
ド実行部は、条件非成立時の処理を投機的に継続して行
う。
【0021】そして、条件分岐命令の条件が確定した際
に、その条件の成否によって投機実行している処理のい
ずれかを確定し他方を破棄する。
【0022】これによって、分岐予測が当たりにくい分
岐命令を高速に実行することを可能とする。同時に、プ
ログラム中で並列実行を行いにくい部分でスレッド実行
部を有効に使用することを可能とする。
【0023】
【実施例】上記した本発明の実施の形態についてより具
体的に説明すべく、本発明の実施例について図面を参照
して以下に説明する。
【0024】図1は、本発明の並列処理装置の一実施例
のシステム構成を示すブロック図である。図1を参照す
ると、本発明の一実施例は、2スレッド並列実行型の並
列処理システムであり、スレッド実行部#0(2a)、
スレッド実行部#1(2b)はスレッド管理部1と接続
される。また、スレッド実行部#0(2a)、#1(2
b)は、命令キャッシュメモリ3とデータキャッシュ4
を共有している。なお、複数のスレッド実行部を符号2
でまとめて示すこともある。
【0025】各スレッド実行部#0(2a)、#1(2
b)は、ともに、複数同時デコード/実行可能なスーパ
スカラ型プロセッサとして構成されており、いずれも、
命令デコーダ5、リオーダバッファ6、レジスタファイ
ル7、データセレクタ8、命令キュー9、演算ユニット
10、及び、アドレス計算ユニット11を備えて構成さ
れる。
【0026】また、スレッド実行部#0(2a)、#1
(2b)の各々のレジスタファイル7はレジスタコピー
バス12によって接続されている。
【0027】図2は、本発明の一実施例におけるスレッ
ド管理部1の内部構成を示したブロック図である。図2
を参照すると、スレッド管理部1は、スレッド状態テー
ブル13、分岐実行管理テーブル15、スレッド状態決
定論理20、及び、分岐投機実行管理論理21を備えて
構成されている。
【0028】スレッド状態テーブル13は、スレッド実
行部#0(2a)、#1(2b)毎の実行状態を示す状
態ビット14を持っており、「待機」/「通常実行(確
定実行)」/「投機実行」という状態を格納する。ま
た、分岐実行管理テーブル15は、有効ビット16、分
岐命令実行スレッド番号17、命令識別番号18、及
び、投機スレッド実行スレッド番号19を備えて構成さ
れる。
【0029】各スレッド実行部#0(2a)、#1(2
b)は、プログラムコードの非順序実行が可能である。
命令は命令デコーダ5でデコードされると、この命令の
結果を蓄えるために、リオーダバッファ6の1エントリ
を確保する。
【0030】また、この命令が参照するレジスタ番号と
同じ番号が他のエントリに格納されているか否かを調
べ、一致するレジスタ番号が存在する場合には、結果の
データもしくはエントリ番号をデータセレクタ8に出力
する。一致するエントリが存在しない場合には、レジス
タファイル7からレジスタ値をデータセレクタ8に出力
する。
【0031】データセレクタ8は、リオーダバッファ
6、レジスタファイル7のデータ出力を選択して、命令
キュー9に格納する。
【0032】命令キュー9は、命令が参照するレジスタ
の値がすべて確定した時点で演算ユニット10もしくは
アドレス計算ユニット11に対して命令を発行する。
【0033】計算終了の結果データは命令デコード時に
確保したリオーダバッファ6に格納される。また、命令
キュー9にリオーダバッファ6のエントリ番号が格納さ
れており、リオーダバッファ6の格納エントリ番号が一
致した場合には、命令キュー9にもデータが格納され
る。
【0034】リオーダバッファ6は、プログラムコード
順にレジスタファイル7に演算が終了した結果を書き込
んで、エントリをクリアする。以上の動作は、従来の非
順序実行方式の一例に従っている。
【0035】本発明の一実施例は、このようなスレッド
実行部2を複数持つ構造のマルチスレッド型のプロセッ
サとして構成されたものであり、後述するように、この
マルチスレッド型プロセッサで条件分岐命令を高速に実
行するようにしたものである。
【0036】以下、本発明の一実施例において具体的な
動作を説明するために、本発明の一実施例の並列処理シ
ステムにおいて、図3に示すプログラムコードを実行し
た際の動作を説明する。なお、図3には、プログラムコ
ードとして、命令アドレス、命令(アセンブリ言語のニ
ューモニック)、該命令の注釈が示されている。
【0037】図3を参照すると、このプログラムコード
においては、0x10番地に条件分岐命令(branc
h.eq r7,r1,0x30)が配置されており、
この条件分岐命令において、レジスタ(以下、レジスタ
をrと記す)r7の内容とr1の内容が一致する場合に
は、0x10番地の次に、0x30番地の命令実行する
ものである。
【0038】図4、及び図5は、図3に示すプログラム
コードを実行した際のパイプライン実行の様子を示す図
である。図4は、0x10番地の条件分岐命令の条件不
成立の場合、図5は、0x10番地の条件分岐命令の条
件成立の場合をそれぞれ示している。図4、及び図5に
おいて、「F」は命令フェッチ動作、「D」は命令デコ
ード動作、「B」は命令キュー9内に蓄えられている状
態、「E」は演算動作、「A」はアドレス計算動作、
「W」はリオーダバッファ6からレジスタファイル7へ
の書き込み動作、「X」は命令の実行取り消しを示して
おり、図中の最上行の数字はサイクル数を示している。
W動作は、プログラム順序に行われるので、E動作によ
る演算結果は一旦リオーダバッファ6に格納される。
【0039】サイクル0において、スレッド実行部#0
(2a)は、0x0番地、0x4番地の2つの命令をフ
ェッチする。この時点では、スレッド実行部#1(2
b)に割り付けられたスレッドは存在しない。
【0040】続いて、サイクル1では、スレッド実行部
#0(2a)において、0x8番地、0xc番地(ヘキ
サデシマル表示)の命令がフェッチされ、0x0番地、
0x4番地の命令がデコードされる。
【0041】サイクル2では、スレッド実行部#0(2
a)において0x10番地、0x14番地の命令がフェ
ッチされ、0x8番地、0xc番地の命令がデコードさ
れる。ここで、0x10番地の命令は、条件分岐命令で
あるため、スレッド管理部1に対して、分岐側の命令、
すなわち0x30番地を開始アドレスとするスレッドの
生成を要求する。
【0042】スレッド管理部1は、この時点、すなわち
サイクル2の時点で、スレッドを実行していない複数の
スレッド実行部の中から、0x30番地を開始とするス
レッドを新たに実行するスレッド実行部を決定する。こ
れは、スレッド状態テーブル13の状態ビット14で
「待機状態」を示しているスレッド実行部を探して決定
される。図1に示した構成は、スレッド実行部#0(2
a)、#1(2b)からなる2セット構成であるが、更
に多くの構成で、複数の待機状態のスレッド実行部が存
在する場合には、その中から一つを選択する。これらの
処理は、スレッド状態決定論理20によって決定され
る。
【0043】さて、図1に示した本発明の一実施例で
は、スレッド実行部を2セット備えているので、新たに
スレッド実行するスレッド実行部は、スレッド実行部#
1(2b)となる。
【0044】したがって、次のサイクル3の時点で、ス
レッド実行部#1(2b)は、0x30番地、0x34
番地の2つの命令のフェッチを開始する。同時に、スレ
ッド実行部#0(2a)は非分岐側の命令、すなわち0
x18番地、0x1c番地のフェッチを継続する。
【0045】スレッド実行部#0(2a)では、0x1
4番地をサイクル2でフェッチしているが、これ以降の
実行は投機的に行われ、いつでも実行が取り消せるよう
にする必要がある。また、スレッド実行部#1(2b)
のスレッドはスレッド自体を取り消すことが可能な投機
実行スレッドとなる。これによって、サイクル3から0
x10番地の分岐命令が確定するまでは、非分岐側の命
令と分岐側の命令が同時に、かつ、投機的に実行される
ことになる。
【0046】スレッド管理部1では、このような条件分
岐による投機スレッドを生成した場合には、その情報を
分岐実行管理テーブル15(図2参照)に登録し、該当
エントリの有効ビット16を「有効状態」に設定する。
登録する内容は、条件分岐命令を実行したスレッド実行
部2番号と、分岐先アドレスを開始とする投機スレッド
を起動したスレッド実行部2番号、および、当該条件分
岐命令を識別するための番号である。
【0047】本実施例の場合には、図2の分岐実行管理
テーブル15の分岐命令実行実行部番号17は#0、投
機スレッド実行実行部番号19は#1となる。また、分
岐命令識別番号18は、投機スレッドを生成したスレッ
ド実行部2の中で、条件分岐命令を識別するために付番
した番号である。
【0048】図4、図5に示した例では、サイクル7に
おいて、0x10番地の分岐命令の条件が確定する。条
件が成立しなかった場合には、図4に示したように、次
のサイクル8において、スレッド実行部#1(2b)で
実行しているスレッドの実行は取り消される。
【0049】このスレッドの取り消しの処理は以下の手
順で行われる。まず、リオーダバッファ6からスレッド
管理部1に対して、命令識別番号とその分岐条件が成立
しなかったことを伝達する。
【0050】分岐投機実行管理論理21は、受け取った
命令識別番号から該当する分岐命令を分岐実行管理テー
ブル15の命令識別番号18の一致するエントリをサー
チし、一致するエントリの投機スレッド実行実行部番号
19を特定し、スレッド状態決定論理20に伝達する。
【0051】スレッド状態決定論理20は、スレッド状
態テーブル13の投機スレッド実行実行部番号19に対
応する状態ビット14を待機状態にし、該当スレッド実
行部2に対してスレッド取り消し信号を発行する。
【0052】一方、0x10番地の分岐命令の条件が成
立した場合には、図5に示したように、次のサイクル8
において、スレッド実行部#0(2a)で実行している
命令の内、0x10番地以降の命令、図5に示す例で
は、0x14番地から0x28番地の命令の実行が取り
消され、スレッドの実行は0x10番地をもって終了
し、スレッド実行部#1(2b)のスレッドの実行が継
続される。
【0053】この場合、リオーダバッファ6からスレッ
ド管理部1に対して、命令識別番号とその分岐条件が成
立したことを伝達する。分岐投機実行管理論理21は、
受け取った命令識別番号から該当する分岐命令を分岐実
行管理テーブル15の命令識別番号18の一致するエン
トリをサーチし、一致するエントリの投機スレッド実行
実行部番号19を特定し、スレッド状態決定論理20に
伝達する。
【0054】スレッド状態決定論理20は、スレッド状
態テーブル13の投機スレッド実行実行部番号19に対
応する状態ビット14を確定実行状態とする。これらの
動作によって、分岐条件の成否や予測結果によらずに効
率的に実行することが可能になる。
【0055】このように、条件分岐命令の非分岐側と分
岐側の双方を実行するためには、図1に示したハードウ
ェアは以下に示す動作が必要である。
【0056】まず、条件分岐命令をフェッチした段階で
その命令が条件分岐命令であり、スレッド管理部1に対
して、分岐側のアドレスを開始とするスレッド生成要求
を行う必要がある。これは、条件分岐命令が命令キャッ
シュメモリ3に格納される際に、あらかじめ条件分岐命
令であることを記しておくことによって行う。
【0057】次に、分岐側のアドレスを開始とするスレ
ッドは、条件分岐命令時点におけるレジスタファイル7
の内容を参照する必要がある。図1に示した実施例で
は、スレッド実行部#1(2b)で実行を開始したスレ
ッドが実際にレジスタファイル7を参照する前に、図
4、図5に示した例では、サイクル4で、レジスタコピ
ーバス12を用いてスレッド実行部#0(2a)のレジ
スタファイル7からスレッド実行部#1(2b)のレジ
スタファイル7にレジスタ内容のコピーが行われる。
【0058】レジスタファイル7の内容のコピーを行っ
た時点では、レジスタに書き込みが終了していない命
令、図4、図5に示す例では、0x4番地、0x8番
地、0xc番地の命令の結果はスレッド実行部#0(2
a)のリオーダバッファ6からスレッド実行部#1(2
b)のレジスタファイル7にも書き込む必要がある。ま
た、0x30番地の命令が用いるr11の値は、サイク
ル5にスレッド実行部#0(2a)のレジスタファイル
7に書き込まれると共に、スレッド実行部#1(2b)
の命令キュー9にも供給される。これによって、0x3
0番地の命令は、0x08番地命令の結果を受けとるこ
とが可能となり、次のサイクル6で実行に移される。
【0059】したがって、条件分岐命令をフェッチし
て、分岐側アドレスを開始アドレスとするスレッドを実
行するスレッド実行部2は条件分岐命令を実行したスレ
ッド実行部2の命令実行結果を命令キュー4およびレジ
スタファイル7で受け取る必要がある。
【0060】また、命令デコーダ5から、リオーダバッ
ファ6の参照は、双方のスレッド実行部2のリオーダバ
ッファ6に対して行う必要がある。リオーダバッファ6
の参照結果は、データセレクタ8に集められ、図6に示
す論理によって必要なデータが選択される。図6は、デ
ータセレクタ8のデータ選択論理を示すフローチャート
であり、リオーダバッフ#1、もしくは#0からのデー
タ供給がある場合には、該当するリオーダバッファのデ
ータを選択し(ステップ601〜604)、それ以外の
場合、レジスタファイル#1のデータを選択する。
【0061】データは、演算結果もしくはリオーダバッ
ファ6のエントリ番号からなり、エントリ番号の場合
は、命令キュー9内で演算結果を取り込む。
【0062】また、条件分岐によって生成されたスレッ
ドを実行するスレッド実行部2、すなわち図4、図5に
示した例の場合、スレッド実行部#1(2b)では、分
岐が確定するまでの間は、実行が完了した命令でもW動
作によるレジスタファイル7の更新を行うことも可能で
あるが、ストア命令によるデータキャッシュメモリ4へ
の書き込みは抑止される。
【0063】さて、上記した実施例では、スレッドを実
行していない空き状態のスレッド実行部が存在しない場
合の動作を定義していない。従って、空き状態スレッド
実行部が存在しない場合の対応を別途とる必要がある。
【0064】本発明の第2の実施例は、空き状態のスレ
ッド実行部が存在しない場合には、通常の非順序実行型
のマイクロプロセッサと同様に、分岐予測を行って分岐
以降の命令の投機的実行を行うものである。
【0065】図7は、本発明の第2の実施例の構成を示
す図である。
【0066】図7を参照すると、本発明の第2の実施例
の並列処理システムは、図1に示した前記実施例(第1
の実施例)の並列処理システムに対して、分岐予測機構
26を付加した構造となっている。その他は、図1に示
した第1の実施例の構成と同様である。
【0067】本発明の第2の実施例において、分岐予測
機構26は、過去に実行した条件分岐命令の条件の成
立、非成立の履歴を記憶しておき、今後実行する条件分
岐命令の条件の成否を予測するものである。この分岐予
測機構26は、命令デコーダ27、スレッド管理部2
2、演算ユニット32、命令キャッシュ24に接続され
ている。
【0068】図8は、本発明による条件分岐命令の実行
方法を示すフローチャートである。命令デコーダ5は、
条件分岐命令を検出すると、分岐予測機構26に対し
て、分岐の予測結果を問い合わせる。この時、スレッド
管理部22から、待機状態のスレッド実行部23の存在
の有無を問い合わせる。待機状態のスレッド実行部23
が存在する場合には(ステップ801のYES)、前記
第1の実施例と同じ方法で、分岐先を開始アドレスとす
る投機状態のスレッドを生成する(ステップ802)。
一方、待機状態のスレッド実行部23が存在しない場合
には、分岐予測機構26内からの履歴情報から条件の成
否を予測し、その予測結果に基づいて分岐先もしくは分
岐命令後を投機的に実行する(ステップ803〜80
5)。
【0069】本発明の第2の実施例においては、システ
ム全体に待機中のスレッド実行部2が存在する場合は条
件分岐命令の分岐側と非分岐側の両者を投機的に実行
し、存在しない場合には過去の履歴に基づいた予測によ
って分岐を投機的に実行することが可能になる。
【0070】次に、本発明の第3の実施例について説明
する。前記第1、及び第2の実施例では、実行するプロ
グラムの条件分岐命令の頻度が高い場合には、条件分岐
命令による投機実行スレッドによってスレッド実行部2
が使用される頻度が高くなり、本来の並列実行に支障が
出たり、過去の履歴に基づいた分岐予測が当たりにくい
条件分岐命令が投機スレッド生成による両実行が行えな
くなる可能性がある。
【0071】そこで、本発明の第3の実施例では、プロ
グラムコード生成時に投機スレッドを生成して実行する
条件分岐命令をあからじめ指定する方法を提案する。
【0072】本発明の第3の実施例においては、条件分
岐命令が過去の履歴によって予想しにくいとコード生成
時に判断した場合には、その情報をコードに付加する。
コードへの情報の付加方法は、条件分岐命令を両実行/
予測実行の2種類に分ける方法や、命令フォーマット内
の特定ビットに組み込むことなどが考えられる。
【0073】図9は、特定ビットにこの情報を組み込ん
だ例である。図9に示す例では、条件分岐命令に命令フ
ィールド35とレジスタ指定フィールド36と共に、分
岐実行方法指定フィールド37を追加している。分岐実
行方法指定フィールド37は1ないし数ビットから構成
される。このフィールドに両実行分岐を推奨するような
値がセットされている場合には、図1又は図7のスレッ
ド管理部1又は22に対して、分岐側のアドレスを開始
アドレスとする投機スレッドの起動を依頼する。セット
されていない場合には、通常の分岐命令と同様の取り扱
いをし、投機スレッドの生成は行わない。上記第2の実
施例に、第3の実施例を適用する場合には、分岐実行方
法指定フィールド37を複数ビットとして、分岐予測機
構26との予測と組み合わせて投機スレッド生成による
分岐実行を行うか否かを決定する拡張も可能である。
【0074】最後に、本発明の第4の実施例について説
明する。本発明の第4の実施例は、過去の条件分岐命令
実行の履歴から実行時に投機スレッド生成による分岐実
行を行うか否かを決定するものである。
【0075】本発明の第4の実施例の並列システム全体
の構成は、図7と同様であるが、分岐予測機構26は分
岐予測の成否の履歴を保持できるように拡張されてい
る。
【0076】図10は、本発明の第4の実施例におい
て、分岐予測機構26内の履歴を保持する分岐履歴テー
ブル38の構成の一例を示す図である。図10を参照す
ると、分岐履歴テーブル38は、分岐命令アドレス3
9、分岐予測状態40、予測成否履歴41のエントリを
複数持ち、エントリ数分の条件分岐命令の履歴から分岐
命令の予測を行う。予測は、分岐予測状態40から決定
し、2ビットで表現する場合には、分岐条件が強く成立
する(ST)、弱く成立する(WT)、弱く成立しない
(WN)、強く成立しない(SN)の4状態で表し、そ
の後の分岐実行結果に基づいて状態遷移を行う。
【0077】一方、予測成否履歴41は、過去数回分の
予測の成功/失敗の履歴を保持しており、分岐予測の決
定には関わらない。
【0078】本発明の第4の実施例では、条件分岐命令
をデコードした際に、分岐予測機構26(図7参照)に
その情報が送られる。分岐予測機構26は、分岐履歴テ
ーブル38の該当するアドレスの条件分岐命令の予測成
否履歴41(図10参照)を調べる。その結果、当該分
岐命令の予測失敗比率が高いことが判明した場合には、
スレッド実行部23に対して、分岐先アドレスを開始ア
ドレスとする投機スレッドの起動を要求する。
【0079】一方、予測の成功比率が高い場合には、通
常の条件分岐命令と同様に、分岐予測状態40から分岐
側、非分岐側のどちらかを予測して投機的に実行する。
両実行、予測実行のどちらで条件分岐命令を実行した場
合でも、条件が確定した際に分岐予測状態40を更新す
ると共に、分岐予測状態40から予測の成否を判定し、
予測成否履歴41を交信する。
【0080】これにより実行時の過去の履歴に基づい
て、予測のしにくい条件分岐命令だけ、効率的に分岐両
実行を行うことが可能になり、効率的な実行が可能にな
る。
【0081】
【発明の効果】以上説明したように本発明によれば、プ
ログラムコードの非順序実行の時に問題になる条件分岐
命令の予測ミスによるペナルティを減らすことが可能に
なる、という効果を奏する。
【0082】本発明は並列システムで用いることを前提
としており、分岐命令の両実行は待機状態のスレッド実
行部が存在する際に行われる。並列処理においては、プ
ログラムの並列化が施しにくい逐次部分の存在が全体の
性能向上を大きく制約することになる。本発明による分
岐両実行方法は、待機中のスレッド実行部が多く存在す
る逐次部分の処理速度向上に寄与する。また、コード生
成時や実行時の履歴から両実行を行う条件分岐命令を決
定することにより、分岐予測が当たりにくい分岐命令を
特定して両実行することが可能となり、さらにプログラ
ムの実行効率を向上させることが可能となる。
【図面の簡単な説明】
【図1】本発明の一実施例の構成を示すブロック図であ
る。
【図2】本発明の一実施例のスレッド管理部の構成を示
すブロック図である。
【図3】本発明の一実施例を説明するための図であり、
プログラムコードの一例を示す図である。
【図4】本発明の一実施例を説明するための図であり、
パイプライン実行の様子(分岐条件不成立の場合)を説
明するための図である。
【図5】本発明の一実施例を説明するための図であり、
パイプライン実行の様子(分岐条件成立の場合)を説明
するための図である。
【図6】本発明の一実施例におけるデータセレクタのデ
ータ選択論理を示すフローチャートである。
【図7】本発明の第2の実施例の構成を示すブロック図
である。
【図8】本発明の第2の実施例の分岐実行方法を説明す
るためのフローチャートである。
【図9】本発明の第3の実施例における命令の一例を示
す図である。
【図10】本発明の第4の実施例における分岐履歴テー
ブルの構成の一例を示す図である。
【符号の説明】 1 スレッド管理部 2a スレッド実行部#0 2b スレッド実行部#1 3 命令キャッシュメモリ 4 データキャッシュメモリ 5 命令デコーダ 6 リオーダバッファ 7 レジスタファイル 8 データセレクタ 9 命令キュー 10 演算ユニット 11 アドレス計算ユニット 12 レジスタコピーバス 13 スレッド状態テーブル 14 状態ビット 15 分岐実行管理テーブル 16 有効ビット 17 分岐命令実行実行部番号 18 命令識別番号 19 投機スレッド実行実行部番号 20 スレッド状態決定論理 21 分岐投機実行管理論理 22 スレッド管理部 23a スレッド実行部#0 23b スレッド実行部#1 24 命令キャッシュメモリ 25 データキャッシュメモリ 26 分岐予測機構 27 命令デコーダ 28 リオーダバッファ 29 レジスタファイル 30 データセレクタ 31 命令キュー 32 演算ユニット 33 アドレス計算ユニット 34 レジスタコピーバス 35 命令フィールド 36 レジスタ指定フィールド 37 分岐実行方法指定フィールド 38 分岐履歴テーブル 39 分岐命令アドレス 40 分岐予測状態 41 予測成否履歴

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】複数の命令列から構成されるスレッドが同
    時に存在し、前記複数スレッドが論理的に複数のスレッ
    ド実行部によって並列に実行される並列処理装置の分岐
    処理方法であって、 プログラムコード中の条件分岐命令が分岐するか否かを
    決定する以前に、新たに分岐先のアドレスを開始地点と
    するスレッドを他のスレッド実行部において投機的に起
    動して実行し、 前記条件分岐命令を実行するスレッドは分岐しないもの
    として、前記条件分岐命令以降の命令を投機的に実行
    し、 前記条件分岐命令の条件が確定し、分岐することが判明
    した場合、前記条件分岐命令を実行したスレッドの前記
    条件分岐命令以降の命令を取り消し、分岐しないことが
    判明した場合には、前記新たに生成したスレッドの実行
    を取り消す、ことを特徴とする分岐命令処理方法。
  2. 【請求項2】前記条件分岐命令を検出した際に、スレッ
    ドを実行していないスレッド実行部の存在の有無をスレ
    ッド管理部に問い合せ、スレッドを実行していない待機
    状態のスレッド実行部が存在する場合には、前記待機状
    態のスレッド実行部において前記分岐先のアドレスを開
    始地点とするスレッドを投機的に起動して実行し、一
    方、待機状態のスレッド実行部が存在しない場合には、
    前記条件分岐命令を実行したスレッド実行部において、
    分岐以降の命令もしくは分岐先の命令を投機的に実行す
    る、ことを特徴とする請求項1記載の分岐命令処理方
    法。
  3. 【請求項3】分岐先のアドレスを開始地点とするスレッ
    ドを他のスレッド実行部に対して生成することを、前記
    条件分岐命令によって予め指定し、前記条件分岐命令を
    実行した場合に限って、投機的なスレッドを生成する、
    ことを特徴とする請求項1又は2記載の分岐処理方法。
  4. 【請求項4】前記分岐先のアドレスを開始地点とするス
    レッドを他のスレッド実行部に対して生成することを、
    分岐予測の結果から決定し、スレッドを生成して投機的
    に実行すると決定した場合に限って、投機的なスレッド
    を生成する、ことを特徴とする請求項2記載の分岐処理
    方法。
  5. 【請求項5】複数の命令列から構成されるスレッドが同
    時に存在し、前記複数スレッドが論理的に複数のスレッ
    ド実行部によって並列に実行される並列処理装置におい
    て、 条件分岐命令が分岐するか否かを決定する以前に、新た
    に分岐先のアドレスを開始地点とするスレッドを待機状
    態にある他のスレッド実行部において投機的に起動して
    実行し、 前記条件分岐命令を実行したスレッド実行部は分岐条件
    非成立時の処理である前記条件分岐命令以降の命令を投
    機的に実行し、 前記条件分岐命令の条件が確定し、分岐することが判明
    した場合、前記前記条件分岐命令を実行したスレッドの
    前記条件分岐命令以降の命令を取り消し、分岐しないこ
    とが判明した場合には、前記新たに生成したスレッドの
    実行を取り消すように構成されてなる、ことを特徴とす
    る並列処理装置。
  6. 【請求項6】前記条件分岐命令を検出した際に、スレッ
    ドを実行していないスレッド実行部の存在の有無を、前
    記複数のスレッド実行部における命令の実行を管理する
    スレッド管理部に問い合せ、スレッドを実行していない
    待機状態のスレッド実行部が存在する場合には、前記待
    機状態のスレッド実行部において前記分岐先のアドレス
    を開始地点とするスレッドを投機的に起動して実行し、
    存在しない場合には前記条件分岐命令を実行したスレッ
    ド実行部において、分岐以降の命令もしくは分岐先の命
    令を投機的に実行する、ことを特徴とする請求項5記載
    の並列処理装置。
  7. 【請求項7】分岐先のアドレスを開始地点とするスレッ
    ドを他のスレッド実行部に対して生成することを、前記
    条件分岐命令によって予め指定し、前記条件分岐命令を
    実行した場合に限って、投機的なスレッドを生成する、
    ことを特徴とする請求項5記載の並列処理装置。
  8. 【請求項8】前記分岐先のアドレスを開始地点とするス
    レッドを他のスレッド実行部に対して生成することを、
    分岐予測の結果から決定し、スレッドを生成して投機的
    に実行すると決定した場合に限って、投機的なスレッド
    を生成する、ことを特徴とする請求項5記載の並列処理
    装置。
JP27391997A 1997-09-19 1997-09-19 並列処理装置 Pending JPH1196005A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP27391997A JPH1196005A (ja) 1997-09-19 1997-09-19 並列処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP27391997A JPH1196005A (ja) 1997-09-19 1997-09-19 並列処理装置

Publications (1)

Publication Number Publication Date
JPH1196005A true JPH1196005A (ja) 1999-04-09

Family

ID=17534406

Family Applications (1)

Application Number Title Priority Date Filing Date
JP27391997A Pending JPH1196005A (ja) 1997-09-19 1997-09-19 並列処理装置

Country Status (1)

Country Link
JP (1) JPH1196005A (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003514274A (ja) * 1999-11-01 2003-04-15 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 接近して結合される多重プロセッサのための高速マルチスレッディング
JP2006154971A (ja) * 2004-11-25 2006-06-15 Matsushita Electric Ind Co Ltd プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。
US8108859B2 (en) 2004-04-21 2012-01-31 Fujitsu Limited Processor for controlling tread switching
US8806184B2 (en) 2010-03-25 2014-08-12 Fujitsu Limited Branch prediction method and branch prediction circuit performing the method
JP5630798B1 (ja) * 2014-04-11 2014-11-26 株式会社Murakumo プロセッサーおよび方法
JP2016507092A (ja) * 2013-01-15 2016-03-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 分岐予測のための信頼性閾値ベースの対抗分岐パス実行
US20220300610A1 (en) * 2019-06-20 2022-09-22 Technion Research & Development Foundation Limited Secured speculative execution processor

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003514274A (ja) * 1999-11-01 2003-04-15 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 接近して結合される多重プロセッサのための高速マルチスレッディング
US8108859B2 (en) 2004-04-21 2012-01-31 Fujitsu Limited Processor for controlling tread switching
JP2006154971A (ja) * 2004-11-25 2006-06-15 Matsushita Electric Ind Co Ltd プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。
US8806184B2 (en) 2010-03-25 2014-08-12 Fujitsu Limited Branch prediction method and branch prediction circuit performing the method
JP2016507092A (ja) * 2013-01-15 2016-03-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 分岐予測のための信頼性閾値ベースの対抗分岐パス実行
JP5630798B1 (ja) * 2014-04-11 2014-11-26 株式会社Murakumo プロセッサーおよび方法
US20220300610A1 (en) * 2019-06-20 2022-09-22 Technion Research & Development Foundation Limited Secured speculative execution processor

Similar Documents

Publication Publication Date Title
JP5889986B2 (ja) 実行された命令の結果を選択的にコミットするためのシステムおよび方法
US10296346B2 (en) Parallelized execution of instruction sequences based on pre-monitoring
KR100783828B1 (ko) 단일 스레드 프로그램의 암시적 멀티스레디드 실행을 행할수 있는 멀티스레디드 프로세서
US6697932B1 (en) System and method for early resolution of low confidence branches and safe data cache accesses
US7454598B2 (en) Controlling out of order execution pipelines issue tagging
US7711934B2 (en) Processor core and method for managing branch misprediction in an out-of-order processor pipeline
US6687812B1 (en) Parallel processing apparatus
US20060259742A1 (en) Controlling out of order execution pipelines using pipeline skew parameters
JPH10133873A (ja) 複数の分岐予測方式のうちの選択された1つを使用して条件分岐命令を投機的に実行するためのプロセッサおよび方法
US7257700B2 (en) Avoiding register RAW hazards when returning from speculative execution
JPH08147165A (ja) マルチコンテキストをサポートするプロセッサおよび処理方法
JP2005521924A5 (ja)
US20060149931A1 (en) Runahead execution in a central processing unit
CN112214241B (zh) 一种分布式指令执行单元的方法及系统
US10545765B2 (en) Multi-level history buffer for transaction memory in a microprocessor
JP2000322257A (ja) 条件分岐命令の投機的実行制御方法
US20050223201A1 (en) Facilitating rapid progress while speculatively executing code in scout mode
JP3518510B2 (ja) リオーダバッファの管理方法及びプロセッサ
JPH1196005A (ja) 並列処理装置
US20100306513A1 (en) Processor Core and Method for Managing Program Counter Redirection in an Out-of-Order Processor Pipeline
US20100100709A1 (en) Instruction control apparatus and instruction control method
JPH08263288A (ja) パイプライン・プロセッサ内において、誤って予測された実行分岐後にアネックス内のヤング・ビットを回復する方法及び装置
EP3278212A1 (en) Parallelized execution of instruction sequences based on premonitoring
WO2007084202A2 (en) Processor core and method for managing branch misprediction in an out-of-order processor pipeline
US10296350B2 (en) Parallelized execution of instruction sequences

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 19990525