JP2006040142A - プロセッサシステムおよびスレッド切り替え制御方法 - Google Patents
プロセッサシステムおよびスレッド切り替え制御方法 Download PDFInfo
- Publication number
- JP2006040142A JP2006040142A JP2004222043A JP2004222043A JP2006040142A JP 2006040142 A JP2006040142 A JP 2006040142A JP 2004222043 A JP2004222043 A JP 2004222043A JP 2004222043 A JP2004222043 A JP 2004222043A JP 2006040142 A JP2006040142 A JP 2006040142A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- loop
- branch
- prediction
- thread
- 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
Links
- 238000000034 method Methods 0.000 title claims description 42
- 238000012545 processing Methods 0.000 claims abstract description 66
- 238000001514 detection method Methods 0.000 claims abstract description 39
- 238000011156 evaluation Methods 0.000 claims description 27
- 230000002401 inhibitory effect Effects 0.000 abstract 1
- 238000010586 diagram Methods 0.000 description 18
- 238000012544 monitoring process Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 10
- 238000006243 chemical reaction Methods 0.000 description 5
- 238000003672 processing method Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Debugging And Monitoring (AREA)
Abstract
【解決手段】演算器150により処理を実行するスレッドを選択的に切り替えるマルチスレッド制御部11と、スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測部161と、このループ予測部161によりループを予測された場合に、命令に基づいてループの検出を行なうループ検出部162とをそなえ、マルチスレッド制御部11が、ループ検出部162によりループが検出された場合に、演算器150により実行中のスレッドを他のスレッドに切り替える。
【選択図】 図1
Description
図13はインオーダ実行型の処理方法を説明するための図、図14はアウトオブオーダ実行型の処理方法を説明するための図である。インオーダ実行型は、図13に示すように、プログラム順に沿って命令処理を行なう手法であり、アウトオブオーダ実行型は、図14に示すように、命令間の依存関係を見て、依存関係のない命令ならばプログラム順を追い越してでも処理を行なう手法である。
図15(a),(b)はマルチスレッドプロセッサ方式を説明するための図であり、図15(a)はシングルスレッド処理を説明するための図、図15(b)はマルチスレッド処理を説明するための図である。なお、図15(b)においては、1つのCPUでA,Bの2つのプログラムを並列的に処理するマルチスレッド処理の例を示している。
VMT方式は、処理に長時間かかるキャッシュミスした命令処理を隠蔽することを狙い、キャッシュミスを検出したときに、メモリからキャッシュまでデータを持ってくる処理をキャッシュ制御部(図示省略)が実行している間に、メモリアクセス以外の処理について、実行部や制御部(ともに図示省略)において他のスレッドに切り替え、実行するというものである。又、このVMT方式においては、キャッシュミスが発生しにくいスレッドに関しては、一定時間経過した時点で他のスレッドに切り替えるようになっている。
図18はスピンループを説明するための図である。この図18に示す例では、CPU0とCPU1との2つのプロセッサをそなえたマルチプロセッサにおいて、そのCPU0においてCPU1との同期をとるためにスピンループを実行している状態を示している。このようなスピンループの状態では、ハードウェアの観点からは常に命令処理を行なっているものの、図18に示すように、プログラムの観点からは、処理の進まない待ち(同期待ち)の状態であると言える。
マルチスレッド処理を行なわないプロセッサにおいては、スピンループ時には、プロセッサはメモリ上のデータが変更されるまで、監視データを監視し続けることの他に何も行なうことはないが、マルチスレッド処理を行なうマルチスレッドプロセッサにおいては、プロセッサは他のスレッドの処理も行なう必要がある。
本発明は、このような課題に鑑み創案されたもので、ソフトウェアに手を加えることなく、ループによる待ち状態が他のスレッドの実行を阻害しないようにすることを目的とする。
さらに、本発明のスレッド切り替え制御方法(請求項9)は、1以上の命令をそれぞれそなえた複数のスレッドを、1以上の演算器により並列的に実行可能なプロセッサシステムにおけるスレッド切り替え制御方法であって、該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測ステップと、該ループ予測ステップにおいて該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出ステップと、該ループ検出ステップにおいて該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えるスレッド切り替えステップとをそなえることを特徴としている。
図1は本発明の一実施形態としてのプロセッサシステムの構成を示すブロック図である。
本発明の一実施形態としてのプロセッサシステムであるCPU(Central Processing Unit)1は、複数のスレッド(プログラム)を1以上の実行部(演算器)150により並列的に実行可能なマルチスレッドプロセッサとして構成されている。
ここで、本発明CPU1によって検出するスピンループとは、メモリ上のデータを1箇所監視し続ける命令列であり、以下の(a),(b),(c)および(d)に示す条件を満たす命令列である。
(b)分岐は1つ。
(c)ロードのアドレスが一定(アドレス更新は無し)および
(d)ストア命令は無い(メモリ更新は無い)
SPARC Architecture Manualを参照して、スピンループの代表的な命令列の例を、以下にSPARCの命令セットで示す。
spin-loop :
load [lock],%l0 ・・・(1)
tst %l0 ・・・(2)
bne spin-loop ・・・(3)
nop ・・・(4)
ここで、(1)のロード命令は、メモリ上にロック変数が置いてあるロックアドレス [lock] からデータをフェッチしてきて、レジスタ%l0 に書き込むことを示している。(2)においては、フェッチしてきたデータが、“0”であるか否かをチェックし、“0”であるか否かを示すコンディションコードを返す。SPARCの命令では、「Orcc」という命令を用いて、“%l0”と“0”のオア(OR)をとり、“0”であれば、コンディションコードのZ(Zero)ビットを“1”にして返し、“0”でなければZビットを“0”にして返す。
TLB(Translation Look-aside Buffer;論理アドレス・物理アドレス変換部)17は、論理アドレスから物理アドレスへの変換で発生するページテーブル参照のペナルティを小さくするために設けられた一種のキャッシュであり、参照されたアドレスと変換情報の履歴を保存しておき、アドレス変換の高速化を実現するものである。
マルチスレッド制御部11は、実行部150により処理を実行するスレッドを選択的に切り替えるものであり、例えば、所定時間が経過する毎や、L1命令キャッシュ18やL1データキャッシュ19,L2キャッシュ20においてキャッシュミスが生じる度毎に、実行部150によって実行中のスレッドを、他のスレッドと切り替えるよう制御するようになっている。
メインメモリ21は、CPU1の外部に設けられたられたメモリシステムにそなえられたメモリであって、種々の命令やデータを格納するものであり、バス22を介してCPU1と通信可能に接続され、実行部150による処理・実行に必要とされる命令やデータがL1命令キャッシュ18,L1データキャッシュ19およびL2キャッシュ20に格納されていない場合(キャッシュミス時)には、CPU1はバス22等を介してこのメインメモリ21から命令やデータを読み出すようになっている。
図2は本CPU1の命令制御部16における信号の流れを示す図、図3は本CPU1において実行されるスレッドがメインメモリ21に格納されている状態の例を示す図、図4は本CPU1の命令制御部16におけるループ予測過程を示す図である。なお、図3に示すスレッドの例においては、アドレス12番地にはアドレス32番地に分岐する分岐命令が格納されているものとする。
命令制御部16は、図4に示すように、カウンタ167について、予測評価部166により分岐予測が的中したと評価された場合にインクリメント(+1)を行ない、又、予測が的中しなかった(予測失敗)と評価された場合に、その分岐命令にかかる評価回数をリセット(0に戻す)ようになっている。
また、命令フェッチ部161は、予測評価部による評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうようになっている。
命令解読部162は、命令フェッチ部161によって取得された命令コードを解読するものである。命令解読部162は、図5に示すように、複数(本実施形態では4つ)の命令語レジスタ31−1〜31−4と、同じく複数(本実施形態では4つ)のAND回路32と、OR回路33をそなえて構成されており、命令語レジスタ31−1〜31−4にそれぞれ格納された命令について命令解読を行ない、有効な固定小数点ロード命令であるか否かを判断するようになっている。
そして、命令語レジスタ31−1〜31−4の少なくともいずれかにおいて、有効な固定小数点ロード命令が検出された場合には、スピン内ロード命令記憶部34に、その固定小数点ロード命令が格納されるようになっている。これにより、本実施形態においては、命令解読部162は、最大4命令を同時に解読することができる。命令解読部162へ命令を供給する命令供給部は、ブランチヒストリにヒットした場合、ヒットした命令と分岐先アドレス(ターゲットアドレス)にある命令とを、別のサイクルに供給するように制御するようになっている。つまり上述したスピンループの例では、1ループの命令を同時に命令解読部162に供給することができ、次のループ内の命令は別のサイクルに供給するようになっている。
また、ここで有効なロード命令とは、最大4命令を格納する命令語レジスタ31−1〜31−4のうち、分岐予測などのため実行されない命令を除いたものを指す。例えば、4命令解読可能な命令解読部162の命令を格納する命令語レジスタ31−1〜31−4のうち、命令語レジスタ31−1(命令語レジスタ0)に格納された命令が分岐命令で、且つ分岐すると予測される場合は、命令語レジスタ31−2(命令語レジスタ1)に格納された命令は分岐命令のディレイスロットとして処理を行なう場合があるが、命令語レジスタ31−3,31−4(命令語レジスタ2,3)に格納された命令は実行されない。この場合は、命令語レジスタ0,1に格納された命令が有効な命令であり、命令語レジスタ2,3に格納された命令は有効でない命令となる。
図6〜図9はそれぞれ本CPU1においてループ予測が報告されている間のロード命令一致回数カウンタ36の設定手法を説明するための図である。
さらに、命令解読部162は、供給されている命令列がループであるという報告を命令フェッチ部161より受けている間(ループ予測が報告されている間)に、ロードを含むすべての命令について、ロード命令のメモリアドレスを生成するオペランドレジスタの更新を監視するようになっている。
スピン内ロード命令記憶部34に格納されたロード命令が上記(1)の場合には、命令解読部162はレジスタRS1とレジスタRS2との両方の更新を監視し、又、スピン内ロード命令記憶部34に格納されたロード命令が上記(2)の場合には、命令解読部162はレジスタRS1のみの更新を監視するようになっている。
図10は本CPU1におけるスピンループの検出に基づくスレッド切り替えのフローを模式的に示す図である。
図11は本CPU1における自己ループの検出に基づくスレッド切り替えのフローを模式的に示す図である。
self-loop :
ba self-loop ・・・(1)
nop ・・・(2)
ここで、(1)の命令baは無条件相対分岐命令(branch always)である。具体的には、このba命令は、SPARC命令における、Branch on Integer Condition Codes(Bicc)と、Branch on Integer Condition Codes(BPcc)とのうちの無条件分岐を指す。
命令供給部165(命令フェッチ部161)は、図11に示すように、ブランチヒストリ163にヒットすると、分岐先の命令を別のサイクルで命令解読部162に供給するので、4命令解読可能な命令解読部162における命令語レジスタ31−1〜31−4において、(1)のba命令は必ず命令語レジスタ31−1(命令語レジスタ0)に供給されることになる。よって、命令語レジスタ0に関して無条件分岐命令baであり、かつ分岐先の相対アドレスがオールゼロであることを検出する。
このように、本発明の一実施形態としてのプロセッサシステム(CPU1)においては、キャッシュミスや一定時間経過たったことをトリガーにスレッドを切り替えて実行する時分割型のマルチスレッドにおいて、メモリ上の一つのデータを監視し、監視データの値が期待値になるまでループして待ち続けるいわゆるスピンループや、外部からの割り込等が行なわれるまで自分自身への分岐を続けて待つ自己ループをハードウェアによって検出して、スレッドを切り替えることにより、プログラム上の処理は進まない待ち状態のループをハードウェアで検出した場合には、他のスレッドに切り替えることで、マルチスレッドプロセッサの処理効率を向上させることができる。
この図12に示すように、キャッシュミスや一定時間経過たったことをトリガーにスレッドを切り替えて実行する時分割型のマルチスレッドにおいて、いわゆるスピンループや自己ループをハードウェアによって検出し、これらのスピンループや自己ループを検出した際にスレッドを切り替える制御を行なうことにより、特にプログラム上の処理は進まないループをハードウェアで検出し、他のスレッドに切り替えることで、ソフトウェアに手を加えずに待ち状態をプログラムが他のスレッドの実行を阻害しないようにして、マルチスレッドプロセッサの処理効率を向上させることができる。
すなわち、命令列のループが検出された場合に、スレッド切り替えを行なうことにより、ループによる処理の停滞を少なくして、プロセッサの処理を複数のスレッドに効率的に割り当てることができ、処理速度を向上させることができるとともに、ハードウェアによって実現することにより、ソフトウェアに手を加えることなく実現することができ、既存のソフトウェア資源を有効に用いることができて経済的であり、又、既存のプロセッサシステムに適用することができて利便性が高い。
例えば、上述した実施形態においては、CPU(プロセッサシステム)1として、複数のスレッド(プログラム)を1以上の実行部(演算器)150により並列的に実行可能なマルチスレッドプロセッサを用い、このマルチスレッドプロセッサにおいてスレッドの切り替えを行なう場合に、同期をとるために用いられる共有データ(監視データ)を監視するために生じるスピンループや自己ループをループ検出部によって検出しているが、これに限定されるものではなく、例えば、マルチプロセッサにおいて複数のプロセッサ間の処理の同期をとるために、用いられる共有データ(監視データ)を、監視するために生じるスピンループや自己ループについて同様の処理を行なってもよく、複数の処理を並列的に行なうに際して、これらの複数の処理間で同期をとるために用いられるスピンループや自己ループに適用することができる。
該演算器により処理を実行する該スレッドを選択的に切り替えるマルチスレッド制御部と、
該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測部と、
該ループ予測部により該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出部とをそなえ、
該マルチスレッド制御部が、該ループ検出部により該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えることを特徴とする、プロセッサシステム。
該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納可能な分岐履歴情報格納部と、
該分岐履歴情報格納部に格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測部と、
該分岐予測部によって行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価部とをそなえ、
該予測評価部による評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうことを特徴とする、付記1記載のプロセッサシステム。
(付記4) 該ループ検出部が、
該命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出することを特徴とする、付記1〜付記3のいずれか1項に記載のプロセッサシステム。
連続する該命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタをそなえ、
該カウンタの値が所定値以上なった場合に該スピンループを検出することを特徴とする、付記4記載のプロセッサシステム。
先に検出された該ロード命令と後に検出された該ロード命令とが異なる場合には、該カウンタをリセットすることを特徴とする、付記5記載のプロセッサシステム。
(付記7) 該ループ検出部が、
前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットすることを特徴とする、付記5又は付記6記載のプロセッサシステム。
該命令列中にストア命令があるかを監視し、
該ストア命令を検出した場合に、該カウンタをリセットすることを特徴とする、付記5〜付記7のいずれか1項に記載のプロセッサシステム。
(付記9) 該ループ検出部が、
該命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、該ループを検出することを特徴とする、付記1〜付記8のいずれか1項に記載のプロセッサシステム。
(付記11) 1以上の命令をそれぞれそなえた複数のスレッドを、1以上の演算器により並列的に実行可能なプロセッサシステムにおけるスレッド切り替え制御方法であって、
該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測ステップと、
該ループ予測ステップにおいて該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出ステップと、
該ループ検出ステップにおいて該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えるスレッド切り替えステップとをそなえることを特徴とする、スレッド切り替え制御方法。
該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納する分岐履歴情報格納ステップと、
該分岐履歴情報格納ステップにおいて格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測ステップと、
該分岐予測ステップにおいて行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価ステップとをそなえ、
該予測評価ステップにおける評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうことを特徴とする、付記11記載のスレッド切り替え制御方法。
該命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出することを特徴とする、付記11又は付記12記載のスレッド切り替え制御方法。
(付記14) 該ループ検出ステップにおいて、
連続する該命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタの値が所定値以上なった場合に該スピンループを検出することを特徴とする、付記13記載のスレッド切り替え制御方法。
先に検出された該ロード命令と後に検出された該ロード命令とが異なる場合には、該カウンタをリセットすることを特徴とする、付記14記載のスレッド切り替え制御方法。
(付記16) 該ループ検出ステップにおいて、
前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットすることを特徴とする、付記14又は付記15記載のスレッド切り替え制御方法。
該命令列中にストア命令があるかを監視し、
該ストア命令を検出した場合に、該カウンタをリセットすることを特徴とする、付記14〜付記16のいずれか1項に記載のスレッド切り替え制御方法。
(付記18) 該ループ検出ステップにおいて、
該命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、該ループを検出することを特徴とする、付記11〜付記17のいずれか1項に記載のスレッド切り替え制御方法。
11 マルチスレッド制御部
13 レジスタ
16 命令制御部
17 TLB
18 L1命令キャッシュ
19 L1データキャッシュ
20 L2キャッシュ
21 メインメモリ
22 バス
32 AND回路
34 スピン内ロード命令記憶部
36 スピン内ロード命令一致回数カウンタ
150 実行部(演算器)
161 命令フェッチ部(ループ予測部)
162 命令解読部(ループ検出部)
163 ブランチヒストリ(分岐履歴情報格納部)
164 分岐予測部
165 命令供給部
166 予測評価部
167 分岐予測の連続成功回数カウンタ
31−1〜31−4 命令語レジスタ
Claims (10)
- 1以上の命令をそれぞれそなえた複数のスレッドを、1以上の演算器により並列的に実行可能なプロセッサシステムであって、
該演算器により処理を実行する該スレッドを選択的に切り替えるマルチスレッド制御部と、
該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測部と、
該ループ予測部により該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出部とをそなえ、
該マルチスレッド制御部が、該ループ検出部により該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えることを特徴とする、プロセッサシステム。 - 該ループ予測部が、
該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納可能な分岐履歴情報格納部と、
該分岐履歴情報格納部に格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測部と、
該分岐予測部によって行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価部とをそなえ、
該予測評価部による評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうことを特徴とする、請求項1記載のプロセッサシステム。 - 該ループ検出部が、
該命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出することを特徴とする、請求項1又は請求項2記載のプロセッサシステム。 - 該ループ検出部が、
連続する該命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタをそなえ、
該カウンタの値が所定値以上なった場合に該スピンループを検出することを特徴とする、請求項3記載のプロセッサシステム。 - 該ループ検出部が、
先に検出された該ロード命令と後に検出された該ロード命令とが異なる場合には、該カウンタをリセットすることを特徴とする、請求項4記載のプロセッサシステム。 - 該ループ検出部が、
前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットすることを特徴とする、請求項4又は請求項5記載のプロセッサシステム。 - 該ループ検出部が、
該命令列中にストア命令があるかを監視し、
該ストア命令を検出した場合に、該カウンタをリセットすることを特徴とする、請求項4〜請求項6のいずれか1項に記載のプロセッサシステム。 - 該ループ検出部が、
該命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、該ループを検出することを特徴とする、請求項1〜請求項7のいずれか1項に記載のプロセッサシステム。 - 1以上の命令をそれぞれそなえた複数のスレッドを、1以上の演算器により並列的に実行可能なプロセッサシステムにおけるスレッド切り替え制御方法であって、
該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測ステップと、
該ループ予測ステップにおいて該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出ステップと、
該ループ検出ステップにおいて該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えるスレッド切り替えステップとをそなえることを特徴とする、スレッド切り替え制御方法。 - 該ループ予測ステップが、
該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納する分岐履歴情報格納ステップと、
該分岐履歴情報格納ステップにおいて格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測ステップと、
該分岐予測ステップにおいて行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価ステップとをそなえ、
該予測評価ステップにおける評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうことを特徴とする、請求項9記載のスレッド切り替え制御方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004222043A JP4287799B2 (ja) | 2004-07-29 | 2004-07-29 | プロセッサシステムおよびスレッド切り替え制御方法 |
US10/990,385 US7165254B2 (en) | 2004-07-29 | 2004-11-18 | Thread switch upon spin loop detection by threshold count of spin lock reading load instruction |
EP04257278A EP1622004A3 (en) | 2004-07-29 | 2004-11-24 | Processor system and thread switching control method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004222043A JP4287799B2 (ja) | 2004-07-29 | 2004-07-29 | プロセッサシステムおよびスレッド切り替え制御方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2006040142A true JP2006040142A (ja) | 2006-02-09 |
JP4287799B2 JP4287799B2 (ja) | 2009-07-01 |
Family
ID=35148900
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004222043A Expired - Fee Related JP4287799B2 (ja) | 2004-07-29 | 2004-07-29 | プロセッサシステムおよびスレッド切り替え制御方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7165254B2 (ja) |
EP (1) | EP1622004A3 (ja) |
JP (1) | JP4287799B2 (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012147168A1 (ja) * | 2011-04-26 | 2012-11-01 | 富士通株式会社 | システム、および検出方法 |
JP2016212639A (ja) * | 2015-05-08 | 2016-12-15 | 富士通株式会社 | 演算装置、スレッド切替方法、及びマルチスレッドプログラム |
US9658855B2 (en) | 2014-10-10 | 2017-05-23 | Fujitsu Limited | Compile method and compiler apparatus |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7487502B2 (en) | 2003-02-19 | 2009-02-03 | Intel Corporation | Programmable event driven yield mechanism which may activate other threads |
US7849465B2 (en) * | 2003-02-19 | 2010-12-07 | Intel Corporation | Programmable event driven yield mechanism which may activate service threads |
US7587584B2 (en) * | 2003-02-19 | 2009-09-08 | Intel Corporation | Mechanism to exploit synchronization overhead to improve multithreaded performance |
US20050060517A1 (en) * | 2003-09-12 | 2005-03-17 | Morrow Michael W. | Switching processor threads during long latencies |
US7664933B2 (en) * | 2005-01-17 | 2010-02-16 | Denso Corporation | Microcomputer and encoding system for instruction code and CPU |
US20070050563A1 (en) * | 2005-08-23 | 2007-03-01 | Advanced Micro Devices, Inc. | Synchronization arbiter for proactive synchronization within a multiprocessor computer system |
US7395418B1 (en) * | 2005-09-22 | 2008-07-01 | Sun Microsystems, Inc. | Using a transactional execution mechanism to free up processor resources used by a busy-waiting thread |
JP4519082B2 (ja) * | 2006-02-15 | 2010-08-04 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理方法、動画サムネイル表示方法、復号化装置、および情報処理装置 |
US20070239498A1 (en) * | 2006-03-30 | 2007-10-11 | Microsoft Corporation | Framework for modeling cancellation for process-centric programs |
US8230203B2 (en) * | 2007-03-30 | 2012-07-24 | Intel Corporation | Detecting spin loops in a virtual machine environment |
US20080307208A1 (en) * | 2007-06-07 | 2008-12-11 | Fujitsu Limited | Application specific processor having multiple contexts |
US8407425B2 (en) | 2007-12-28 | 2013-03-26 | Intel Corporation | Obscuring memory access patterns in conjunction with deadlock detection or avoidance |
US9201673B2 (en) * | 2008-07-30 | 2015-12-01 | Microsoft Technology Licensing, Llc | Efficient detection and response to spin waits in multi-processor virtual machines |
WO2011090537A2 (en) * | 2010-01-19 | 2011-07-28 | Rambus Inc. | Adaptively time-multiplexing memory references from multiple processor cores |
WO2012051262A2 (en) | 2010-10-12 | 2012-04-19 | Soft Machines, Inc. | An instruction sequence buffer to enhance branch prediction efficiency |
US9733944B2 (en) * | 2010-10-12 | 2017-08-15 | Intel Corporation | Instruction sequence buffer to store branches having reliably predictable instruction sequences |
US8762776B2 (en) | 2012-01-05 | 2014-06-24 | International Business Machines Corporation | Recovering from a thread hang |
US9081629B2 (en) * | 2013-05-19 | 2015-07-14 | Frank Eliot Levine | Excluding counts on software threads in a state |
US9921848B2 (en) * | 2014-03-27 | 2018-03-20 | International Business Machines Corporation | Address expansion and contraction in a multithreading computer system |
US9354883B2 (en) * | 2014-03-27 | 2016-05-31 | International Business Machines Corporation | Dynamic enablement of multithreading |
US9411363B2 (en) * | 2014-12-10 | 2016-08-09 | Intel Corporation | Synchronization in a computing device |
US10180841B2 (en) | 2014-12-22 | 2019-01-15 | Centipede Semi Ltd. | Early termination of segment monitoring in run-time code parallelization |
EP3238040A4 (en) * | 2014-12-22 | 2018-09-26 | Centipede Semi Ltd. | Run-time code parallelization with continuous monitoring of repetitive instruction sequences |
US9348595B1 (en) | 2014-12-22 | 2016-05-24 | Centipede Semi Ltd. | Run-time code parallelization with continuous monitoring of repetitive instruction sequences |
US9208066B1 (en) * | 2015-03-04 | 2015-12-08 | Centipede Semi Ltd. | Run-time code parallelization with approximate monitoring of instruction sequences |
US10296350B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences |
US10296346B2 (en) | 2015-03-31 | 2019-05-21 | Centipede Semi Ltd. | Parallelized execution of instruction sequences based on pre-monitoring |
US9715390B2 (en) | 2015-04-19 | 2017-07-25 | Centipede Semi Ltd. | Run-time parallelization of code execution based on an approximate register-access specification |
US10275254B2 (en) | 2017-03-08 | 2019-04-30 | International Business Machines Corporation | Spin loop delay instruction |
US10691487B2 (en) | 2018-04-25 | 2020-06-23 | International Business Machines Corporation | Abstraction of spin-locks to support high performance computing |
CN117389629B (zh) * | 2023-11-02 | 2024-06-04 | 北京市合芯数字科技有限公司 | 分支预测方法、装置、电子设备及介质 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4979105A (en) * | 1988-07-19 | 1990-12-18 | International Business Machines | Method and apparatus for automatic recovery from excessive spin loops in an N-way multiprocessing system |
US5335330A (en) * | 1990-05-14 | 1994-08-02 | Matsushita Electric Industrial Co., Ltd. | Information processing apparatus with optimization programming |
JP2687765B2 (ja) | 1991-07-04 | 1997-12-08 | 日本電気株式会社 | 分岐予測方式 |
US5887178A (en) * | 1994-08-29 | 1999-03-23 | Matsushita Electronics Corporation | Idle state detector and idle state detecting method for a microprocessor unit for power savings |
US5740410A (en) * | 1995-12-15 | 1998-04-14 | Cyrix Corporation | Static clock generator |
US6003128A (en) * | 1997-05-01 | 1999-12-14 | Advanced Micro Devices, Inc. | Number of pipeline stages and loop length related counter differential based end-loop prediction |
JP3570855B2 (ja) * | 1997-05-29 | 2004-09-29 | 株式会社日立製作所 | 分岐予測装置 |
US6018759A (en) * | 1997-12-22 | 2000-01-25 | International Business Machines Corporation | Thread switch tuning tool for optimal performance in a computer processor |
JP2002163121A (ja) | 2000-11-22 | 2002-06-07 | Toshiba Corp | 仮想マルチスレッドプロセッサ及びスレッド実行方法 |
JP3890910B2 (ja) | 2001-03-21 | 2007-03-07 | 株式会社日立製作所 | 命令の実行結果予測装置 |
US20040123075A1 (en) * | 2002-12-19 | 2004-06-24 | Yoav Almog | Extended loop prediction techniques |
US7496915B2 (en) * | 2003-04-24 | 2009-02-24 | International Business Machines Corporation | Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes |
JP4376692B2 (ja) * | 2004-04-30 | 2009-12-02 | 富士通株式会社 | 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ |
-
2004
- 2004-07-29 JP JP2004222043A patent/JP4287799B2/ja not_active Expired - Fee Related
- 2004-11-18 US US10/990,385 patent/US7165254B2/en not_active Expired - Fee Related
- 2004-11-24 EP EP04257278A patent/EP1622004A3/en not_active Withdrawn
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012147168A1 (ja) * | 2011-04-26 | 2012-11-01 | 富士通株式会社 | システム、および検出方法 |
JP5725169B2 (ja) * | 2011-04-26 | 2015-05-27 | 富士通株式会社 | システム、および検出方法 |
US9658855B2 (en) | 2014-10-10 | 2017-05-23 | Fujitsu Limited | Compile method and compiler apparatus |
JP2016212639A (ja) * | 2015-05-08 | 2016-12-15 | 富士通株式会社 | 演算装置、スレッド切替方法、及びマルチスレッドプログラム |
US10387190B2 (en) | 2015-05-08 | 2019-08-20 | Fujitsu Limited | System and method of executing a plurality of threads using thread switching on execution time-out using instruction re-write |
Also Published As
Publication number | Publication date |
---|---|
US20060026411A1 (en) | 2006-02-02 |
EP1622004A2 (en) | 2006-02-01 |
JP4287799B2 (ja) | 2009-07-01 |
US7165254B2 (en) | 2007-01-16 |
EP1622004A3 (en) | 2008-02-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4287799B2 (ja) | プロセッサシステムおよびスレッド切り替え制御方法 | |
JP4642305B2 (ja) | マルチスレッド・プロセッサ内の複数のスレッドに入り、出る方法と装置 | |
JP5313279B2 (ja) | 非アラインドメモリアクセス予測 | |
US12086245B1 (en) | Processor that prevents speculative execution across translation context change boundaries to mitigate side channel attacks | |
US7587584B2 (en) | Mechanism to exploit synchronization overhead to improve multithreaded performance | |
US9304776B2 (en) | System and method for mitigating the impact of branch misprediction when exiting spin loops | |
US6907520B2 (en) | Threshold-based load address prediction and new thread identification in a multithreaded microprocessor | |
US6493741B1 (en) | Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit | |
US7870369B1 (en) | Abort prioritization in a trace-based processor | |
US11797673B2 (en) | Processor that mitigates side channel attacks by expeditiously initiating flushing of instructions dependent upon a load instruction that causes a need for an architectural exception | |
US11868469B2 (en) | Processor that mitigates side channel attacks by preventing all dependent instructions from consuming architectural register result produced by instruction that causes a need for an architectural exception | |
US20080052500A1 (en) | Processor with branch predictor | |
US11907369B2 (en) | Processor that mitigates side channel attacks by preventing cache memory state from being affected by a missing load operation by inhibiting or canceling a fill request of the load operation if an older load generates a need for an architectural exception | |
US10310859B2 (en) | System and method of speculative parallel execution of cache line unaligned load instructions | |
US20070101102A1 (en) | Selectively pausing a software thread | |
US9996469B2 (en) | Methods for prefetching data and apparatuses using the same | |
JP2019197442A (ja) | 演算処理装置及び演算処理装置の制御方法 | |
EP2159691B1 (en) | Simultaneous multithreaded instruction completion controller | |
JP7064135B2 (ja) | 演算処理装置及び演算処理装置の制御方法 | |
US20220197662A1 (en) | Accessing A Branch Target Buffer Based On Branch Instruction Information | |
US7328327B2 (en) | Technique for reducing traffic in an instruction fetch unit of a chip multiprocessor | |
US10929137B2 (en) | Arithmetic processing device and control method for arithmetic processing device | |
WO2002029556A2 (en) | Incorporating local branch history when predicting multiple conditional branch outcomes | |
EP3278212A1 (en) | Parallelized execution of instruction sequences based on premonitoring | |
KR102639414B1 (ko) | 멀티스레딩 프로세서 및 이의 동작 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061218 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20081021 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20081118 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090119 |
|
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: 20090317 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20090327 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120403 Year of fee payment: 3 |
|
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: 20120403 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130403 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140403 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees |