JP4287799B2 - プロセッサシステムおよびスレッド切り替え制御方法 - Google Patents

プロセッサシステムおよびスレッド切り替え制御方法 Download PDF

Info

Publication number
JP4287799B2
JP4287799B2 JP2004222043A JP2004222043A JP4287799B2 JP 4287799 B2 JP4287799 B2 JP 4287799B2 JP 2004222043 A JP2004222043 A JP 2004222043A JP 2004222043 A JP2004222043 A JP 2004222043A JP 4287799 B2 JP4287799 B2 JP 4287799B2
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.)
Expired - Fee Related
Application number
JP2004222043A
Other languages
English (en)
Other versions
JP2006040142A (ja
Inventor
利雄 吉田
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2004222043A priority Critical patent/JP4287799B2/ja
Priority to US10/990,385 priority patent/US7165254B2/en
Priority to EP04257278A priority patent/EP1622004A3/en
Publication of JP2006040142A publication Critical patent/JP2006040142A/ja
Application granted granted Critical
Publication of JP4287799B2 publication Critical patent/JP4287799B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address 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
    • 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
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

Description

本発明は、プロセッサシステムにおけるスレッドの切り替え制御に関する。
近年、コンピュータアーキテクチャの代表的なものとしては、複雑な処理を一命令で行なうCISC(Complex Instruction Set Computer)アーキテクチャの他、一命令中に実行する処理を簡素化したRISC(Reduced Instruction Set Computer)アーキテクチャ,複数の同時処理可能な命令をソフトウェアで1つの長い命令にまとめたVLIW(Very Long Instruction Word)アーキテクチャ等が知られている。
また、これらのアーキテクチャを実現するコンピュータの中央演算器装置(CPU;Central Processing Unit)における処理手法は、インオーダ実行型とアウトオブオーダ実行型との2つに大別することができる。
図13はインオーダ実行型の処理方法を説明するための図、図14はアウトオブオーダ実行型の処理方法を説明するための図である。インオーダ実行型は、図13に示すように、プログラム順に沿って命令処理を行なう手法であり、アウトオブオーダ実行型は、図14に示すように、命令間の依存関係を見て、依存関係のない命令ならばプログラム順を追い越してでも処理を行なう手法である。
そして、近年においては、一のプロセッサにおいて一のプログラム(スレッド)を実行するシングルスレッド処理の他に、物理的に一のプロセッサにおいて複数のスレッドを並列的に実行するマルチスレッドプロセッサ方式が注目されている。
図15(a),(b)はマルチスレッドプロセッサ方式を説明するための図であり、図15(a)はシングルスレッド処理を説明するための図、図15(b)はマルチスレッド処理を説明するための図である。なお、図15(b)においては、1つのCPUでA,Bの2つのプログラムを並列的に処理するマルチスレッド処理の例を示している。
一般に、CPUは、ソフトウェアから可視なレジスタや状態レジスタ(CPU状態レジスタ)に加え、加減算や乗算,除算、またメモリデータをレジスタに読み出すロード処理や、レジスタのデータをメモリに書き込むストア処理を実行する資源を有する。マルチスレッドプロセッサとは、1つのCPU内にソフトウェアから可視なレジスタを多重化し、別々なプログラムを実行するようにしながら、加減算などの命令実行資源を複数のプログラムで共有するものである。
上述の如きマルチスレッド処理を実現するための方式としては、複数のスレッドを同時に実行する、fine grained multithreading方式やSimultaneous multithreading(SMT;同時マルチスレッディング)方式(図16参照)の他、複数のスレッドを同時には実行せず、キャッシュミスのような事象が起きたときに別のスレッドに切り替えて実行する、coarse grained multithreading方式やVertical multithreading(VMT;時分割型マルチスレッディング)方式(図17参照)がある(特許文献1参照)。
図16はSMT方式を説明するための図、図17はVMT方式を説明するための図である。
VMT方式は、処理に長時間かかるキャッシュミスした命令処理を隠蔽することを狙い、キャッシュミスを検出したときに、メモリからキャッシュまでデータを持ってくる処理をキャッシュ制御部(図示省略)が実行している間に、メモリアクセス以外の処理について、実行部や制御部(ともに図示省略)において他のスレッドに切り替え、実行するというものである。又、このVMT方式においては、キャッシュミスが発生しにくいスレッドに関しては、一定時間経過した時点で他のスレッドに切り替えるようになっている。
さて、例えばマルチプロセッサによる実行を前提とするプログラムには、プロセッサ間の処理の同期をとるために、メモリ上における特定の領域のデータ(共有データ,監視データ)を、他のプロセッサから監視データが期待値に変更されるまで監視し続けるスピンループ(spin-loop)というコードが含まれている場合がある。
図18はスピンループを説明するための図である。この図18に示す例では、CPU0とCPU1との2つのプロセッサをそなえたマルチプロセッサにおいて、そのCPU0においてCPU1との同期をとるためにスピンループを実行している状態を示している。このようなスピンループの状態では、ハードウェアの観点からは常に命令処理を行なっているものの、図18に示すように、プログラムの観点からは、処理の進まない待ち(同期待ち)の状態であると言える。
図19はマルチスレッドプロセッサにおけるスピンループの状態を示す図である。この図19に示す例では、スレッド0とスレッド1との2つのスレッドを並列的に実行するマルチスレッドプロセッサにおいて、そのスレッド0においてスレッド1との同期をとるためにスピンループを実行している状態を示している。
マルチスレッド処理を行なわないプロセッサにおいては、スピンループ時には、プロセッサはメモリ上のデータが変更されるまで、監視データを監視し続けることの他に何も行なうことはないが、マルチスレッド処理を行なうマルチスレッドプロセッサにおいては、プロセッサは他のスレッドの処理も行なう必要がある。
メモリ(監視データ)の監視処理においては、一般にキャッシュミスが生じないので、マルチスレッドプロセッサにおいて、一旦メモリの監視が始まると、一定時間が経過するまでスレッドの切り替えが行なわれず、それまでの間は処理の進まない(意味の無い)処理を続けることになる。このような意味の無い処理にプロセッサの処理時間を多く割り当てることは、プロセッサの性能を低下させ、又、スレッド間での同期の完了も遅くなる。すなわち、スピンループの待ち状態が他のスレッドの処理を阻害するのである。
マルチスレッドプロセッサの処理効率を向上するために、従来においては、スレッド(プログラム)が待ち状態であって他のスレッドの実行を優先させることをプロセッサに指示するため、例えば命令セットに現在実行しているスレッドの優先度を落とすことを示すような命令(プログラムコード)を追加するとともに、スレッドの待ち状態の箇所に新たに命令を挿入する等のチューニングを行なう等、新しいプログラムコードを用いる手法が知られている。
特開2002−163121号公報
しかしながら、このような従来のプロセッサにおけるスレッドの切り替え制御手法は、新規に開発するプログラムや、リコンパイルが可能なプログラムに関しては有効であるが、例えばプログラムのソースが失われてしまっているもののように、リコンパイルやプログラム変更ができないものには適用することができないという課題がある。
本発明は、このような課題に鑑み創案されたもので、ソフトウェアに手を加えることなく、ループによる待ち状態が他のスレッドの実行を阻害しないようにすることを目的とする。
このため、本発明のプロセッサシステム(請求項1)は、1以上の命令をそれぞれ含む複数のスレッドを、1以上の演算器により並列的に実行可能なプロセッサシステムであって、該演算器により処理を実行するスレッドを選択的に切り替えるマルチスレッド制御部と、スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測部と、該ループ予測部によりループ予測された場合に、予測されたループの検出を行なうループ検出部とをそなえ、該ループ予測部は、分岐命令に対する予測を行なうとともに、分岐命令に対する予測が的中したか否かを評価し、前記分岐命令に対する予測が所定回数以上連続して的中した場合にループの予測を行ない、該マルチスレッド制御部、該ループ検出部によりループが検出された場合に、該演算器により実行中のスレッドを他のスレッドに切り替えることを特徴としている。
なお、該ループ予測部が、スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納可能な分岐履歴情報格納部と、該分岐履歴情報格納部に格納された分岐履歴情報に基づいて、分岐命令に対する予測を行なう分岐予測部と、該分岐予測部によって行なわれた分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価部とをそなえ、該予測評価部による評価結果に基づいて、分岐命令に対する予測が所定回数以上連続して的中した場合に、ループの予測を行なってもよい(請求項2)。
また、該ループ検出部が、命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出してもよく(請求項3)、又、該ループ検出部が、連続する命令列中における同一の固定小数点系ロード命令の連続出現回数を計数するカウンタをそなえ、該カウンタの値が所定値以上なった場合にスピンループを検出してもよい(請求項4)。
さらに、該ループ検出部が、先に検出されたロード命令と後に検出されたロード命令とが異なる場合には、該カウンタをリセットしてもよく(請求項5)、該ループ検出部が、前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットしてもよく(請求項6)、更に、該ループ検出部が、命令列中にストア命令があるかを監視し、ストア命令を検出した場合に、該カウンタをリセットしてもよい(請求項7)。
また、該ループ検出部が、命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、ループを検出してもよい(請求項8)。
さらに、本発明のスレッド切り替え制御方法(請求項9)は、1以上の命令をそれぞれ含む複数のスレッドを、1以上の演算器により並列的に実行可能なプロセッサシステムにおけるスレッド切り替え制御方法であって、分岐命令に対する予測を行ない、分岐命令に対する予測が所定回数以上連続して的中した場合に、スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測ステップと、該ループ予測ステップにおいてループを予測された場合に、予測されたループの検出を行なうループ検出ステップと、該ループ検出ステップにおいてループが検出された場合に、該演算器により実行中のスレッドを他のスレッドに切り替えるスレッド切り替えステップとをそなえることを特徴としている。
なお、該ループ予測ステップが、スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納する分岐履歴情報格納ステップと、該分岐履歴情報格納ステップにおいて格納された分岐履歴情報に基づいて、分岐命令に対する予測を行なう分岐予測ステップと、該分岐予測ステップにおいて行なわれた分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価ステップとをそなえ、該予測評価ステップにおける評価結果に基づいて、分岐命令に対する予測が所定回数以上連続して的中した場合に、ループの予測を行なってもよい(請求項10)。
また、該ループ検出ステップにおいて、命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出してもよく(請求項11)。又、該ループ検出ステップにおいて、連続する命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタの値が所定値以上になった場合にスピンループを検出してもよい(請求項12)。
さらに、該ループ検出ステップにおいて、先に検出されたロード命令と後に検出されたロード命令とが異なる場合には、該カウンタをリセットしてもよく(請求項13)、該ループ検出ステップにおいて、命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、ループを検出してもよい(請求項14)。
本発明によれば、命令列のループが検出された場合に、スレッド切り替えを行なうことにより、ループによる処理の停滞を少なくして、プロセッサの処理を複数のスレッドに効率的に割り当てることができ、処理速度を向上させることができるとともに、ハードウェアによって実現することにより、ソフトウェアに手を加えることなく実現することができ、既存のプロセッサシステムに適用することができて利便性が高いという利点がある。
以下、図面を参照して本発明の実施の形態を説明する。
図1は本発明の一実施形態としてのプロセッサシステムの構成を示すブロック図である。
本発明の一実施形態としてのプロセッサシステムであるCPU(Central Processing Unit)1は、複数のスレッド(プログラム)を1以上の実行部(演算器)150により並列的に実行可能なマルチスレッドプロセッサとして構成されている。
そして、本CPU1は、メモリ上における特定の一つの領域に格納されるデータ(共有データ,監視データ)を監視し、監視データの値が期待値になるまでループして待ち続ける、いわゆるスピンループ(spin-loop)を検出可能なハードウェア構成をそなえている。
ここで、本発明CPU1によって検出するスピンループとは、メモリ上のデータを1箇所監視し続ける命令列であり、以下の(a),(b),(c)および(d)に示す条件を満たす命令列である。
(a)固定小数点系のロード命令を1つ有している。
(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”にして返す。
(3)は、(2)のコンディションコードのうちZビットを見て分岐するか否かを判断する条件分岐である。Zビットが“0”、つまり(2)の結果フェッチしてきたデータが“0”でないときには、再び、(1)に戻り、ロック変数がおいてあるメモリデータをフェッチする。(4)は、分岐命令(3)のディレイスロットであり、分岐命令(3)を実行する際に、分岐先に飛ぶ前に実行されるものである。この場合、nop とは、no-operationを意味し、実際は何も処理しない命令である。
本CPU1は、図1に示すように、マルチスレッド制御部11,レジスタ13,実行部150,命令制御部16,TLB(論理アドレス・物理アドレス変換部)17,L1命令キャッシュ18,L1データキャッシュ19およびL2キャッシュ20をそなえて構成され、又、バス22を介してメインメモリ21と通信可能に接続されている。
TLB(Translation Look-aside Buffer;論理アドレス・物理アドレス変換部)17は、論理アドレスから物理アドレスへの変換で発生するページテーブル参照のペナルティを小さくするために設けられた一種のキャッシュであり、参照されたアドレスと変換情報の履歴を保存しておき、アドレス変換の高速化を実現するものである。
実行部(演算器)150は、レジスタウィンドウ12等を用いて演算等の種々の処理(命令処理)を行なうものであり、例えば種々の演算処理を実行する演算器(実行演算器)として機能するようになっている。
マルチスレッド制御部11は、実行部150により処理を実行するスレッドを選択的に切り替えるものであり、例えば、所定時間が経過する毎や、L1命令キャッシュ18やL1データキャッシュ19,L2キャッシュ20においてキャッシュミスが生じる度毎に、実行部150によって実行中のスレッドを、他のスレッドと切り替えるよう制御するようになっている。
また、マルチスレッド制御部11は、後述の如く、命令解読部(ループ検出部)162によってループ(スピンループ,自己ループ)が検出された場合においても、スレッドの切り替えを行なうようになっている。
メインメモリ21は、CPU1の外部に設けられたられたメモリシステムにそなえられたメモリであって、種々の命令やデータを格納するものであり、バス22を介してCPU1と通信可能に接続され、実行部150による処理・実行に必要とされる命令やデータがL1命令キャッシュ18,L1データキャッシュ19およびL2キャッシュ20に格納されていない場合(キャッシュミス時)には、CPU1はバス22等を介してこのメインメモリ21から命令やデータを読み出すようになっている。
L1命令キャッシュ18は、実行部150が実行する命令を格納するための1次キャッシュであり、L1データキャッシュ19は、実行部150が命令の実行に際して使用された各種データを格納するための1次キャッシュである。L2キャッシュ20は、各種命令やデータを格納するための2次キャッシュである。すなわち、本CPU1においては、複数のキャッシュ(L1命令キャッシュ18,L1データキャッシュ19,L2キャッシュ20)が階層的にそなえられている。
命令制御部16は、1次命令キャッシュ18やL2キャッシュ20,メインメモリ21から命令を取得して実行部150により実行させるための制御を行なうものであり、図1に示すように、命令フェッチ部(ループ予測部)161および命令解読部(ループ検出部)162をそなえて構成されている。命令フェッチ部161は、実行部150によって処理する命令コードをL1命令キャッシュ18やL2キャッシュ20,メインメモリ21から取得(フェッチ)して、命令解読部162に渡すものであり、ブランチヒストリ(分岐履歴情報格納部)163,分岐予測部164,命令供給部165および予測評価部166をそなえて構成されている。
なお、以下、L1命令キャッシュ18とL2キャッシュ20とをまとめて単に命令キャッシュという場合もある。
図2は本CPU1の命令制御部16における信号の流れを示す図、図3は本CPU1において実行されるスレッドがメインメモリ21に格納されている状態の例を示す図、図4は本CPU1の命令制御部16におけるループ予測過程を示す図である。なお、図3に示すスレッドの例においては、アドレス12番地にはアドレス32番地に分岐する分岐命令が格納されているものとする。
ブランチヒストリ(分岐履歴情報格納部)163は、スレッドにおける分岐命令の処理履歴であり、スレッドの実行に際して生じた全ての分岐処理について、その処理履歴を保存・格納するものである。具体的には、ブランチヒストリ163は、図3に示すスレッドにおいて出現した分岐命令について、少なくとも、その分岐元アドレス(例えば12番地)と分岐先アドレス(例えば32番地)とを関連付けて登録するとともに、更に、ループである旨を示すフラグであるループタグ(制御信号;詳細は後述)を、その分岐元アドレスおよび分岐先アドレスに対応付けて格納するようになっている。
分岐予測部164は、ブランチヒストリ163として格納された分岐履歴情報に基づいて、分岐命令に対する予測を行なうものである。具体的には、分岐予測部164は、命令キャッシュから命令をフェッチする際に、その命令が格納されているアドレス(番地)に基づいてブランチヒストリ163を参照し、同一のアドレスがブランチヒストリ163に分岐元アドレスとして登録されており、且つ、そのループタグにフラグが設定されている場合に、その命令がループに含まれる分岐命令である旨の予測を行なう。
命令供給部165は、命令キャッシュから転送された命令コードを、ブランチヒストリ163から取得された制御信号等とともに命令解読部162に供給するものである。命令供給部165は、分岐予測部164によるブランチヒストリ163の参照の結果、同一のアドレスがブランチヒストリ163に分岐元アドレスとして登録されており、且つ、そのループタグにフラグが設定されている場合に、その命令コードとともにループ予測がされている旨の制御信号を命令解読部162に通知するようになっている。
予測評価部166は、分岐予測部164によって行なわれた分岐命令に対する予測(分岐予測)について、その予測が的中したか否かを評価するものである。具体的には、予測評価部166は、分岐予測部164によって行なわれた分岐予測について、実行部150による実際の処理結果を参照することにより、その分岐予測が的中したか否かを評価・判断する。
また、命令制御部16は、分岐予測の連続成功回数カウンタ167(図4参照)をそなえている。このカウンタ167は、分岐予測部164によって予測された各分岐命令に対して、予測評価部166によりその分岐予測が的中したと評価された回数(連続回数)を関連付けて登録するものである。
命令制御部16は、図4に示すように、カウンタ167について、予測評価部166により分岐予測が的中したと評価された場合にインクリメント(+1)を行ない、又、予測が的中しなかった(予測失敗)と評価された場合に、その分岐命令にかかる評価回数をリセット(0に戻す)ようになっている。
そして、命令フェッチ部(ループ予測部)161は、予測評価部166による評価結果に基づいて、その分岐命令に対する予測が所定回数以上連続して的中した場合に、分岐且つループであるとの予測を行ない、ブランチヒストリ163におけるその分岐命令に対応するループタグにループと予測した旨のフラグを設定するようになっている。
また、命令フェッチ部161は、予測評価部による評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうようになっている。
すなわち、図2に示すように、CPU1は、プログラム実行をする際に、命令フェッチ部161によって命令キャッシュから命令をフェッチする。このとき、分岐予測機構(分岐予測部164)における分岐したことを履歴として登録しておくブランチヒストリ163を参照し、分岐することが予測された場合には、分岐先のアドレスを命令フェッチする。命令供給部は165には命令キャッシュから命令コードが転送され、更に、ブランチヒストリ163にヒットした等の制御情報(ループタグ)も付加して、命令解読部162に命令コードが供給される。
また、分岐予測機構の分岐予測部164において、命令フェッチして分岐すると予測された命令に対し、分岐命令を実行して分岐予測が実際に成功した数を数え、予測が失敗した場合にリセットするカウンタ167が用意される。又、ブランチヒストリ163のエントリの中には、この分岐命令が連続して分岐するループに含まれていることを示すループタグのビットが用意されている。
分岐予測が成功したことを数える前述したカウンタ167の値が一定数以上になった場合には、その後、分岐予測が成功と判定された分岐命令のブランチヒストリ163のエントリにループタグがセットされる。その後、命令供給部165が供給する命令列がブランチヒストリ163にヒットし、かつループタグのビットが上がっていれば、その後の命令列が分岐予測の当たり続けるループに含まれているということを命令解読部に報告する。これはトラップや割り込みなどがなく、分岐予測が失敗しない間報告を続ける。
図5は本CPU1における命令解読部162の構成例を模式的に示す図である。
命令解読部162は、命令フェッチ部161によって取得された命令コードを解読するものである。命令解読部162は、図5に示すように、複数(本実施形態では4つ)の命令語レジスタ31−1〜31−4と、同じく複数(本実施形態では4つ)のAND回路32と、OR回路33をそなえて構成されており、命令語レジスタ31−1〜31−4にそれぞれ格納された命令について命令解読を行ない、有効な固定小数点ロード命令であるか否かを判断するようになっている。
なお、以下、命令語レジスタを示す符号としては、複数の命令語レジスタのうち1つを特定する必要があるときには符号31−1〜31−4を用いるが、任意の命令語レジスタを指すときには符号31を用いる。
そして、命令語レジスタ31−1〜31−4の少なくともいずれかにおいて、有効な固定小数点ロード命令が検出された場合には、スピン内ロード命令記憶部34に、その固定小数点ロード命令が格納されるようになっている。これにより、本実施形態においては、命令解読部162は、最大4命令を同時に解読することができる。命令解読部162へ命
令を供給する命令供給部165は、ブランチヒストリにヒットした場合、ヒットした命令と分岐先アドレス(ターゲットアドレス)にある命令とを、別のサイクルに供給するように制御するようになっている。つまり上述したスピンループの例では、1ループの命令を同時に
命令解読部162に供給することができ、次のループ内の命令は別のサイクルに供給するようになっている。
また、通常、スピンループ内において用いられるロード命令は固定小数点レジスタに書き込まれる。以下、本実施形態においては、このような固定小数点レジスタに書き込まれるロード命令を固定小数点系ロード命令と呼ぶ。命令解読部162は、供給されている命令列がループであるという報告を命令フェッチ部(ループ予測部)161から受けている間に、固定小数点系ロード命令を解読した時に、その固定小数点系ロード命令のオペコードをスピン内ロード命令記憶部(ラッチ)34に格納するようになっている。
さて、1箇所のメモリデータを監視するスピンループでは、同時に命令解読部162へ供給される命令(本実施形態では最大4命令)の中で有効なロード命令は1つのみである。従って、本CPU1においては、固定小数点系ロード命令のオペコードを格納するスピン内ロード命令記憶部34も1命令分だけ用意されるようになっている。
また、ここで有効なロード命令とは、最大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に格納された命令は有効でない命令となる。
さらに、命令解読部162は、図5に示すように、同時解読した命令列中にロード命令が1つだけ含まれており、且つ、そのロード命令が固定小数点系ロード命令の場合のみ、スピン内ロード命令記憶部34に格納したロード命令のバリッド信号をセットするようになっており、命令列中にロード命令が複数含まれている場合はバリッド信号をセットしないようになっている。
また、命令解読部162は、連続する命令列中における同一の固定小数点系ロード命令の連続出現回数を計数するカウンタ(スピン内ロード命令一致回数カウンタ36(図6参照))をそなえ、このスピン内ロード命令一致回数カウンタ36の値が所定値以上なった場合にスピンループを検出するようになっている。
図6〜図9はそれぞれ本CPU1においてループ予測が報告されている間のロード命令一致回数カウンタ36の設定手法を説明するための図である。
命令解読部162は、バリッド信号がセットされた後に次のロード命令が来た場合は、図6に示すように、この検出したロード命令を再びスピン内ロード命令記憶部34に格納し、この新たに格納したロード命令が、先に格納したロード命令と一致するか否かを判断するようになっている。そして、これらのロード命令が一致した場合、つまり、命令解読部162において同じロード命令が連続して検出された場合に、スピン内ロード命令一致回数カウンタ36に1を加える(インクリメントする)。
また、命令解読部162は、新たに検出された有効な固定小数点系ロード命令が、先にスピン内ロード命令記憶部34に格納されているロード命令と一致しない場合には、図7に示すように、スピン内ロード命令一致回数カウンタ36をリセットして“0”にするようになっている。
さらに、命令解読部162は、供給されている命令列がループであるという報告を命令フェッチ部161より受けている間(ループ予測が報告されている間)に、ロードを含むすべての命令について、ロード命令のメモリアドレスを生成するオペランドレジスタの更新を監視するようになっている。
ロード命令がフェッチしてくるメモリアドレスの生成手法としては、例えばSPARC命令セットでは、(1)2つの固定小数点レジスタRS1,RS2 の和をとって生成する場合と、(2)1つの固定小数点レジスタRS1とオペコード内に直接指定された即値13ビットとの和をとって生成する場合とがある。
スピン内ロード命令記憶部34に格納されたロード命令が上記(1)の場合には、命令解読部162はレジスタRS1とレジスタRS2との両方の更新を監視し、又、スピン内ロード命令記憶部34に格納されたロード命令が上記(2)の場合には、命令解読部162はレジスタRS1のみの更新を監視するようになっている。
そして、図8に示すように、上記(1),(2)のいずれの場合についても、レジスタの更新が検出されたときには、命令解読部162は、ロード命令のアドレスが変更された可能性があるとして、スピン内ロード命令一致回数カウンタ36を0にリセットするようになっている。又、同時に、格納ロード命令自身のバリッド信号についてもリセットする。
さらに、メモリ上のデータを監視するのみで処理が進まないスピンループを構成する命令列中には、本来、メモリデータの内容を更新するストア命令は含まれない。従って、本CPU1においては、図9に示すように、命令解読部162は、解読した命令列中にストア命令が現れた場合にも、スピン内ロード命令一致回数カウンタ36を0にリセットし、又、同時にロード命令自身のバリッド信号のリセットも行なう。
また、命令解読部162は、分岐命令実行後に分岐予測が外れたことが判明した時点で、投入された命令列がループから抜ける場合もカウンタを0にリセットするようになっており、又、同時にロード命令自身のバリッド信号のリセットも行なうようになっている。
図10は本CPU1におけるスピンループの検出に基づくスレッド切り替えのフローを模式的に示す図である。
本CPU1においては、図10に示すように、命令解読部162が、供給されている命令列がループであるという報告を命令フェッチ部161から受けている間において、スピン内ロード命令一致回数カウンタ36がある一定値(閾値)を越えたことを検出した場合であって、その間、同一ロード命令が連続して検出され、且つ、ロード命令のアドレスも変わらず、更に、ストア命令も存在していない場合に、現在実行している命令列が1箇所のメモリデータを監視している、すなわちスピンループであると判断して、マルチスレッド制御部11に対してスレッド切り替え要求(スレッド切り替え要求信号)が出されるようになっている。
このスレッド切り替え要求信号は、スピン内ロード命令一致回数カウンタ36が閾値を超えている間出し続けられる。スレッド制御部11は、このスレッド切り替え要求信号を受け取り、前回スレッドを切り替えてからの経過時間が所定時間以上であることや、最低でも1つの命令が完了していること等、予め定められた条件(スレッド切り替え条件)が満たされている場合に、実行しているスレッドから他のスレッドへ切り替えを行なう。
また、本CPU1は、上述の如き1箇所のメモリデータを監視するスピンループの他に、他のプロセッサや、IO(Input/Output)からの割り込みが行なわれるまで、自分自身にループし続ける自己ループについても、ハードウェアで検出するようになっている。
図11は本CPU1における自己ループの検出に基づくスレッド切り替えのフローを模式的に示す図である。
このような自己ループの命令列をSPARCの命令セットで示す例として以下に示す。
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)とのうちの無条件分岐を指す。
なお、この命令を実行する際は、条件によらず分岐する。又、オペコードに指定された相対的なアドレスを(1)自身の命令アドレスに加えて分岐先のターゲットアドレスとするものであるので、命令解読時にオペコードと自アドレスから分岐先を決定することが可能である。これを直接分岐命令と呼ぶ。それに対して、レジスタ値から分岐先ターゲットアドレスが決定する間接分岐命令では、レジスタ読み出しを行なわないと分岐先が分からないため、命令解読時では分岐先ターゲットアドレスが判明しない。直接分岐で相対アドレス値が“0”である場合には、自分自身に分岐をするものであることが命令解読時に判定することができる。なお、(2)の命令nopは(1)のディレイスロットであり何も処理をしない。
先ず、スピンループの検出の際に用いたブランチヒストリ163がヒットし続けていることの報告を命令解読部161が受け付け、ループであることを判断する。
命令供給部165(命令フェッチ部161)は、図11に示すように、ブランチヒストリ163にヒットすると、分岐先の命令を別のサイクルで命令解読部162に供給するので、4命令解読可能な命令解読部162における命令語レジスタ31−1〜31−4において、(1)のba命令は必ず命令語レジスタ31−1(命令語レジスタ0)に供給されることになる。よって、命令語レジスタ0に関して無条件分岐命令baであり、かつ分岐先の相対アドレスがオールゼロであることを検出する。
命令供給部165から、供給されている命令がループに含まれていることの報告を受け、かつ自分自身に分岐する無条件分岐(自己ループ)を検出すると、命令解読部162は、マルチスレッド制御部11にスレッドの切り替えを要求し、マルチスレッド制御部11は、実行部150により実行中のスレッドを他のスレッドに切り替える。
このように、本発明の一実施形態としてのプロセッサシステム(CPU1)においては、キャッシュミスや一定時間経過たったことをトリガーにスレッドを切り替えて実行する時分割型のマルチスレッドにおいて、メモリ上の一つのデータを監視し、監視データの値が期待値になるまでループして待ち続けるいわゆるスピンループや、外部からの割り込等が行なわれるまで自分自身への分岐を続けて待つ自己ループをハードウェアによって検出して、スレッドを切り替えることにより、プログラム上の処理は進まない待ち状態のループをハードウェアで検出した場合には、他のスレッドに切り替えることで、マルチスレッドプロセッサの処理効率を向上させることができる。
図12は本発明の一実施形態としてのプロセッサシステムにより、複数(図12では2つ)のスレッド0,1との間において、スピンループが検出される度にスレッド切り替えを行なう例を示す図である。
この図12に示すように、キャッシュミスや一定時間経過たったことをトリガーにスレッドを切り替えて実行する時分割型のマルチスレッドにおいて、いわゆるスピンループや自己ループをハードウェアによって検出し、これらのスピンループや自己ループを検出した際にスレッドを切り替える制御を行なうことにより、特にプログラム上の処理は進まないループをハードウェアで検出し、他のスレッドに切り替えることで、ソフトウェアに手を加えずに待ち状態をプログラムが他のスレッドの実行を阻害しないようにして、マルチスレッドプロセッサの処理効率を向上させることができる。
また、このようなループ状態の検出を行なうための機能やマルチスレッド制御部11に対する指示要求を行なうための機能をハードウェアによって実現するので、既存のプロセッサシステムにおけるプログラム(スレッド,ソフトウェア)の編集・加工,リコンパイル等を行なう必要がなく実装することができ、利便性が高い。
すなわち、命令列のループが検出された場合に、スレッド切り替えを行なうことにより、ループによる処理の停滞を少なくして、プロセッサの処理を複数のスレッドに効率的に割り当てることができ、処理速度を向上させることができるとともに、ハードウェアによって実現することにより、ソフトウェアに手を加えることなく実現することができ、既存のソフトウェア資源を有効に用いることができて経済的であり、又、既存のプロセッサシステムに適用することができて利便性が高い。
そして、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上述した実施形態においては、CPU(プロセッサシステム)1として、複数のスレッド(プログラム)を1以上の実行部(演算器)150により並列的に実行可能なマルチスレッドプロセッサを用い、このマルチスレッドプロセッサにおいてスレッドの切り替えを行なう場合に、同期をとるために用いられる共有データ(監視データ)を監視するために生じるスピンループや自己ループをループ検出部によって検出しているが、これに限定されるものではなく、例えば、マルチプロセッサにおいて複数のプロセッサ間の処理の同期をとるために、用いられる共有データ(監視データ)を、監視するために生じるスピンループや自己ループについて同様の処理を行なってもよく、複数の処理を並列的に行なうに際して、これらの複数の処理間で同期をとるために用いられるスピンループや自己ループに適用することができる。
(付記1) 1以上の命令をそれぞれそなえた複数のスレッドを、1以上の演算器により並列的に実行可能なプロセッサシステムであって、
該演算器により処理を実行する該スレッドを選択的に切り替えるマルチスレッド制御部と、
該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測部と、
該ループ予測部により該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出部とをそなえ、
該マルチスレッド制御部が、該ループ検出部により該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えることを特徴とする、プロセッサシステム。
(付記2) 該ループ予測部が、
該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納可能な分岐履歴情報格納部と、
該分岐履歴情報格納部に格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測部と、
該分岐予測部によって行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価部とをそなえ、
該予測評価部による評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうことを特徴とする、付記1記載のプロセッサシステム。
(付記3) 該分岐履歴情報格納部および該分岐予測部が、該命令のフェッチを行なう命令フェッチ部にそなえられることを特徴とする、付記2記載のプロセッサシステム。
(付記4) 該ループ検出部が、
該命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出することを特徴とする、付記1〜付記3のいずれか1項に記載のプロセッサシステム。
(付記5) 該ループ検出部が、
連続する該命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタをそなえ、
該カウンタの値が所定値以上なった場合に該スピンループを検出することを特徴とする、付記4記載のプロセッサシステム。
(付記6) 該ループ検出部が、
先に検出された該ロード命令と後に検出された該ロード命令とが異なる場合には、該カウンタをリセットすることを特徴とする、付記5記載のプロセッサシステム。
(付記7) 該ループ検出部が、
前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットすることを特徴とする、付記5又は付記6記載のプロセッサシステム。
(付記8) 該ループ検出部が、
該命令列中にストア命令があるかを監視し、
該ストア命令を検出した場合に、該カウンタをリセットすることを特徴とする、付記5〜付記7のいずれか1項に記載のプロセッサシステム。
(付記9) 該ループ検出部が、
該命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、該ループを検出することを特徴とする、付記1〜付記8のいずれか1項に記載のプロセッサシステム。
(付記10) 該ループ検出部が該命令を該演算器により実行可能な状態に解読する命令解読部にそなえられることを特徴とする、付記1〜付記9のいずれか1項に記載のプロセッサシステム。
(付記11) 1以上の命令をそれぞれそなえた複数のスレッドを、1以上の演算器により並列的に実行可能なプロセッサシステムにおけるスレッド切り替え制御方法であって、
該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測ステップと、
該ループ予測ステップにおいて該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出ステップと、
該ループ検出ステップにおいて該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えるスレッド切り替えステップとをそなえることを特徴とする、スレッド切り替え制御方法。
(付記12) 該ループ予測ステップが、
該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納する分岐履歴情報格納ステップと、
該分岐履歴情報格納ステップにおいて格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測ステップと、
該分岐予測ステップにおいて行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価ステップとをそなえ、
該予測評価ステップにおける評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうことを特徴とする、付記11記載のスレッド切り替え制御方法。
(付記13) 該ループ検出ステップにおいて、
該命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出することを特徴とする、付記11又は付記12記載のスレッド切り替え制御方法。
(付記14) 該ループ検出ステップにおいて、
連続する該命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタの値が所定値以上なった場合に該スピンループを検出することを特徴とする、付記13記載のスレッド切り替え制御方法。
(付記15) 該ループ検出ステップにおいて、
先に検出された該ロード命令と後に検出された該ロード命令とが異なる場合には、該カウンタをリセットすることを特徴とする、付記14記載のスレッド切り替え制御方法。
(付記16) 該ループ検出ステップにおいて、
前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットすることを特徴とする、付記14又は付記15記載のスレッド切り替え制御方法。
(付記17) 該ループ検出ステップにおいて、
該命令列中にストア命令があるかを監視し、
該ストア命令を検出した場合に、該カウンタをリセットすることを特徴とする、付記14〜付記16のいずれか1項に記載のスレッド切り替え制御方法。
(付記18) 該ループ検出ステップにおいて、
該命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、該ループを検出することを特徴とする、付記11〜付記17のいずれか1項に記載のスレッド切り替え制御方法。
マルチスレッドプロセッサのみならず、例えばマルチプロセッサにおいて複数のCPU間で同期をとる場合に用いられるスピンループや自己ループの検出時にCPUの切り替えを行なう等、複数の処理を並列的に行なう種々のプロセッサシステム適用することにより、これらの複数の処理を効率に切り替えることができる。
本発明の一実施形態としてのプロセッサシステムの構成を示すブロック図である。 本発明の一実施形態としてのプロセッサシステムの命令制御部における信号の流れを示す図である。 本発明の一実施形態としてのプロセッサシステムにおいて実行されるスレッドがメインメモリに格納されている状態の例を示す図である。 本発明の一実施形態としてのプロセッサシステムの命令制御部におけるループ予測過程を示す図である。 本発明の一実施形態としてのプロセッサシステムにおける命令解読部の構成例を模式的に示す図である。 本発明の一実施形態としてのプロセッサシステムにおいてループ予測が報告されている間のロード命令一致回数カウンタの設定手法を説明するための図である。 本発明の一実施形態としてのプロセッサシステムにおいてループ予測が報告されている間のロード命令一致回数カウンタの設定手法を説明するための図である。 本発明の一実施形態としてのプロセッサシステムにおいてループ予測が報告されている間のロード命令一致回数カウンタの設定手法を説明するための図である。 本発明の一実施形態としてのプロセッサシステムにおいてループ予測が報告されている間のロード命令一致回数カウンタの設定手法を説明するための図である。 本発明の一実施形態としてのプロセッサシステムにおけるスピンループの検出に基づくスレッド切り替えのフローを模式的に示す図である。 本発明の一実施形態としてのプロセッサシステムにおける自己ループの検出に基づくスレッド切り替えのフローを模式的に示す図である。 本発明の一実施形態としてのプロセッサシステムにより、複数のスレッドとの間において、スピンループが検出される度にスレッド切り替えを行なう例を示す図である。 インオーダ実行型の処理方法を説明するための図である。 アウトオブオーダ実行型の処理方法を説明するための図である。 (a),(b)はマルチスレッドプロセッサ方式を説明するための図である。 SMT方式を説明するための図である。 VMT方式を説明するための図である。 スピンループを説明するための図である。 マルチスレッドプロセッサにおけるスピンループの状態を示す図である。
符号の説明
1 CPU(プロセッサシステム)
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 (14)

  1. 1以上の命令をそれぞれ含む複数のスレッドを、1以上の演算器により並列的に実行可能なプロセッサシステムであって、
    該演算器により処理を実行するスレッドを選択的に切り替えるマルチスレッド制御部と、
    レッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測部と、
    該ループ予測部によりループ予測された場合に、予測されたループの検出を行なうループ検出部とをそなえ、
    該ループ予測部は、分岐命令に対する予測を行なうとともに、分岐命令に対する予測が的中したか否かを評価し、前記分岐命令に対する予測が所定回数以上連続して的中した場合にループの予測を行ない、
    該マルチスレッド制御部、該ループ検出部によりループが検出された場合に、該演算器により実行中のスレッドを他のスレッドに切り替えることを特徴とする、プロセッサシステム。
  2. 該ループ予測部が、
    レッドにおける分岐命令の処理履歴を分岐履歴情報として格納可能な分岐履歴情報格納部と、
    該分岐履歴情報格納部に格納された分岐履歴情報に基づいて、分岐命令に対する予測を行なう分岐予測部と、
    該分岐予測部によって行なわれた分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価部とをそなえ、
    該予測評価部による評価結果に基づいて、分岐命令に対する予測が所定回数以上連続して的中した場合に、ループの予測を行なうことを特徴とする、請求項1記載のプロセッサシステム。
  3. 該ループ検出部が、
    令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出することを特徴とする、請求項1又は請求項2記載のプロセッサシステム。
  4. 該ループ検出部が、
    連続する命令列中における同一の固定小数点系ロード命令の連続出現回数を計数するカウンタをそなえ、
    該カウンタの値が所定値以上なった場合にスピンループを検出することを特徴とする、請求項3記載のプロセッサシステム。
  5. 該ループ検出部が、
    先に検出されたロード命令と後に検出されたロード命令とが異なる場合には、該カウンタをリセットすることを特徴とする、請求項4記載のプロセッサシステム。
  6. 該ループ検出部が、
    前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットすることを特徴とする、請求項4又は請求項5記載のプロセッサシステム。
  7. 該ループ検出部が、
    令列中にストア命令があるかを監視し、
    トア命令を検出した場合に、該カウンタをリセットすることを特徴とする、請求項4〜請求項6のいずれか1項に記載のプロセッサシステム。
  8. 該ループ検出部が、
    令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、ループを検出することを特徴とする、請求項1〜請求項7のいずれか1項に記載のプロセッサシステム。
  9. 1以上の命令をそれぞれ含む複数のスレッドを、1以上の演算器により並列的に実行可能なプロセッサシステムにおけるスレッド切り替え制御方法であって、
    分岐命令に対する予測を行ない、分岐命令に対する予測が所定回数以上連続して的中した場合に、スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測ステップと、
    該ループ予測ステップにおいてループ予測された場合に、予測されたループの検出を行なうループ検出ステップと、
    該ループ検出ステップにおいてループが検出された場合に、該演算器により実行中のスレッドを他のスレッドに切り替えるスレッド切り替えステップとをそなえることを特徴とする、スレッド切り替え制御方法。
  10. 該ループ予測ステップが、
    レッドにおける分岐命令の処理履歴を分岐履歴情報として格納する分岐履歴情報格納ステップと、
    該分岐履歴情報格納ステップにおいて格納された分岐履歴情報に基づいて、分岐命令に対する予測を行なう分岐予測ステップと、
    該分岐予測ステップにおいて行なわれた分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価ステップとをそなえ、
    該予測評価ステップにおける評価結果に基づいて、分岐命令に対する予測が所定回数以上連続して的中した場合に、ループの予測を行なうことを特徴とする、請求項9記載のスレッド切り替え制御方法。
  11. 該ループ検出ステップにおいて、
    命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出することを特徴とする、請求項9又は請求項10記載のスレッド切り替え制御方法。
  12. 該ループ検出ステップにおいて、
    連続する命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタの値が所定値以上になった場合にスピンループを検出することを特徴とする、請求項11記載のスレッド切り替え制御方法。
  13. 該ループ検出ステップにおいて、
    先に検出されたロード命令と後に検出されたロード命令とが異なる場合には、該カウンタをリセットすることを特徴とする、請求項12記載のスレッド切り替え制御方法。
  14. 該ループ検出ステップにおいて、
    命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、ループを検出することを特徴とする、請求項9〜請求項13のいずれか1項に記載のスレッド切り替え制御方法。
JP2004222043A 2004-07-29 2004-07-29 プロセッサシステムおよびスレッド切り替え制御方法 Expired - Fee Related JP4287799B2 (ja)

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 JP2006040142A (ja) 2006-02-09
JP4287799B2 true 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)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7587584B2 (en) * 2003-02-19 2009-09-08 Intel Corporation Mechanism to exploit synchronization overhead to improve multithreaded performance
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
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
US7636819B2 (en) * 2005-08-23 2009-12-22 Advanced Micro Devices, Inc. Method for proactive synchronization within a 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
US8935489B2 (en) 2010-01-19 2015-01-13 Rambus Inc. Adaptively time-multiplexing memory references from multiple processor cores
CN103262027B (zh) * 2010-10-12 2016-07-20 索夫特机械公司 用于存储具有可可靠预测的指令序列的分支的指令序列缓冲器
TWI541721B (zh) 2010-10-12 2016-07-11 軟體機器公司 使用指令序列緩衝器來增強分支預測效能的方法、系統及微處理器
WO2012147168A1 (ja) * 2011-04-26 2012-11-01 富士通株式会社 システム、および検出方法
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
US9658855B2 (en) 2014-10-10 2017-05-23 Fujitsu Limited Compile method and compiler apparatus
US9411363B2 (en) * 2014-12-10 2016-08-09 Intel Corporation Synchronization in a computing device
US9348595B1 (en) 2014-12-22 2016-05-24 Centipede Semi Ltd. Run-time code parallelization with continuous monitoring of repetitive instruction sequences
US10180841B2 (en) 2014-12-22 2019-01-15 Centipede Semi Ltd. Early termination of segment monitoring in run-time code parallelization
WO2016103092A1 (en) * 2014-12-22 2016-06-30 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
US10296346B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences based on pre-monitoring
US10296350B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences
US9715390B2 (en) 2015-04-19 2017-07-25 Centipede Semi Ltd. Run-time parallelization of code execution based on an approximate register-access specification
JP6477216B2 (ja) 2015-05-08 2019-03-06 富士通株式会社 演算装置、スレッド切替方法、及びマルチスレッドプログラム
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

Family Cites Families (13)

* Cited by examiner, † Cited by third party
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 富士通株式会社 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ

Also Published As

Publication number Publication date
US20060026411A1 (en) 2006-02-02
JP2006040142A (ja) 2006-02-09
US7165254B2 (en) 2007-01-16
EP1622004A2 (en) 2006-02-01
EP1622004A3 (en) 2008-02-06

Similar Documents

Publication Publication Date Title
JP4287799B2 (ja) プロセッサシステムおよびスレッド切り替え制御方法
US10191741B2 (en) System and method for mitigating the impact of branch misprediction when exiting spin loops
JP5917616B2 (ja) 事前通知技術を用いる、プログラムのシーケンシャルフローを変更するための方法および装置
JP4642305B2 (ja) マルチスレッド・プロセッサ内の複数のスレッドに入り、出る方法と装置
US6157988A (en) Method and apparatus for high performance branching in pipelined microsystems
US7870369B1 (en) Abort prioritization in a trace-based processor
US7587584B2 (en) Mechanism to exploit synchronization overhead to improve multithreaded performance
KR101100145B1 (ko) 명령실행 제어장치 및 명령실행 제어방법
US20020091915A1 (en) Load prediction and thread identification in a multithreaded microprocessor
US20080052500A1 (en) Processor with branch predictor
US20070101102A1 (en) Selectively pausing a software thread
US9996469B2 (en) Methods for prefetching data and apparatuses using the same
US10628160B2 (en) Selective poisoning of data during runahead
US20170139718A1 (en) System and method of speculative parallel execution of cache line unaligned load instructions
JP5201140B2 (ja) 同時マルチスレッドの命令完了制御装置
JP2019197442A (ja) 演算処理装置及び演算処理装置の制御方法
JP7064135B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP2020119504A (ja) 分岐予測器
US7328327B2 (en) Technique for reducing traffic in an instruction fetch unit of a chip multiprocessor
US20220197662A1 (en) Accessing A Branch Target Buffer Based On Branch Instruction Information
US6738897B1 (en) Incorporating local branch history when predicting multiple conditional branch outcomes
EP3278212A1 (en) Parallelized execution of instruction sequences based on premonitoring
US10296350B2 (en) Parallelized execution of instruction sequences
KR102639414B1 (ko) 멀티스레딩 프로세서 및 이의 동작 방법
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: 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