(57)【要約】【課題】  ソフトウェアに手を加えることなく、ループによる待ち状態が他のスレッドの実行を阻害しないようにする。【解決手段】演算器１５０により処理を実行するスレッドを選択的に切り替えるマルチスレッド制御部１１と、スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測部１６１と、このループ予測部１６１によりループを予測された場合に、命令に基づいてループの検出を行なうループ検出部１６２とをそなえ、マルチスレッド制御部１１が、ループ検出部１６２によりループが検出された場合に、演算器１５０により実行中のスレッドを他のスレッドに切り替える。【選択図】        図１
2006040142.tif 000002
【特許請求の範囲】
【請求項１】
１以上の命令をそれぞれそなえた複数のスレッドを、１以上の演算器により並列的に実行可能なプロセッサシステムであって、
該演算器により処理を実行する該スレッドを選択的に切り替えるマルチスレッド制御部と、
該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測部と、
該ループ予測部により該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出部とをそなえ、
該マルチスレッド制御部が、該ループ検出部により該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えることを特徴とする、プロセッサシステム。
【請求項２】
該ループ予測部が、
該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納可能な分岐履歴情報格納部と、
該分岐履歴情報格納部に格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測部と、
該分岐予測部によって行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価部とをそなえ、
該予測評価部による評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうことを特徴とする、請求項１記載のプロセッサシステム。
【請求項３】
該ループ検出部が、
該命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出することを特徴とする、請求項１又は請求項２記載のプロセッサシステム。
【請求項４】
該ループ検出部が、
連続する該命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタをそなえ、
該カウンタの値が所定値以上なった場合に該スピンループを検出することを特徴とする、請求項３記載のプロセッサシステム。
【請求項５】
該ループ検出部が、
先に検出された該ロード命令と後に検出された該ロード命令とが異なる場合には、該カウンタをリセットすることを特徴とする、請求項４記載のプロセッサシステム。
【請求項６】
該ループ検出部が、
前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットすることを特徴とする、請求項４又は請求項５記載のプロセッサシステム。
【請求項７】
該ループ検出部が、
該命令列中にストア命令があるかを監視し、
該ストア命令を検出した場合に、該カウンタをリセットすることを特徴とする、請求項４〜請求項６のいずれか１項に記載のプロセッサシステム。
【請求項８】
該ループ検出部が、
該命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、該ループを検出することを特徴とする、請求項１〜請求項７のいずれか１項に記載のプロセッサシステム。
【請求項９】
１以上の命令をそれぞれそなえた複数のスレッドを、１以上の演算器により並列的に実行可能なプロセッサシステムにおけるスレッド切り替え制御方法であって、
該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測ステップと、
該ループ予測ステップにおいて該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出ステップと、
該ループ検出ステップにおいて該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えるスレッド切り替えステップとをそなえることを特徴とする、スレッド切り替え制御方法。
【請求項１０】
該ループ予測ステップが、
該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納する分岐履歴情報格納ステップと、
該分岐履歴情報格納ステップにおいて格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測ステップと、
該分岐予測ステップにおいて行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価ステップとをそなえ、
該予測評価ステップにおける評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうことを特徴とする、請求項９記載のスレッド切り替え制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサシステムにおけるスレッドの切り替え制御に関する。
【背景技術】
【０００２】
近年、コンピュータアーキテクチャの代表的なものとしては、複雑な処理を一命令で行なうＣＩＳＣ（Complex Instruction Set Computer）アーキテクチャの他、一命令中に実行する処理を簡素化したＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャ，複数の同時処理可能な命令をソフトウェアで１つの長い命令にまとめたＶＬＩＷ（Very Long Instruction Word）アーキテクチャ等が知られている。
【０００３】
また、これらのアーキテクチャを実現するコンピュータの中央演算器装置（ＣＰＵ；Central Processing Unit）における処理手法は、インオーダ実行型とアウトオブオーダ実行型との２つに大別することができる。
図１３はインオーダ実行型の処理方法を説明するための図、図１４はアウトオブオーダ実行型の処理方法を説明するための図である。インオーダ実行型は、図１３に示すように、プログラム順に沿って命令処理を行なう手法であり、アウトオブオーダ実行型は、図１４に示すように、命令間の依存関係を見て、依存関係のない命令ならばプログラム順を追い越してでも処理を行なう手法である。
【０００４】
そして、近年においては、一のプロセッサにおいて一のプログラム（スレッド）を実行するシングルスレッド処理の他に、物理的に一のプロセッサにおいて複数のスレッドを並列的に実行するマルチスレッドプロセッサ方式が注目されている。
図１５（ａ），（ｂ）はマルチスレッドプロセッサ方式を説明するための図であり、図１５（ａ）はシングルスレッド処理を説明するための図、図１５（ｂ）はマルチスレッド処理を説明するための図である。なお、図１５（ｂ）においては、１つのＣＰＵでＡ，Ｂの２つのプログラムを並列的に処理するマルチスレッド処理の例を示している。
【０００５】
一般に、ＣＰＵは、ソフトウェアから可視なレジスタや状態レジスタ（ＣＰＵ状態レジスタ）に加え、加減算や乗算，除算、またメモリデータをレジスタに読み出すロード処理や、レジスタのデータをメモリに書き込むストア処理を実行する資源を有する。マルチスレッドプロセッサとは、１つのＣＰＵ内にソフトウェアから可視なレジスタを多重化し、別々なプログラムを実行するようにしながら、加減算などの命令実行資源を複数のプログラムで共有するものである。
【０００６】
上述の如きマルチスレッド処理を実現するための方式としては、複数のスレッドを同時に実行する、fine grained multithreading方式やSimultaneous multithreading（ＳＭＴ；同時マルチスレッディング）方式（図１６参照）の他、複数のスレッドを同時には実行せず、キャッシュミスのような事象が起きたときに別のスレッドに切り替えて実行する、coarse grained multithreading方式やVertical multithreading（ＶＭＴ；時分割型マルチスレッディング）方式（図１７参照）がある（特許文献１参照）。
【０００７】
図１６はＳＭＴ方式を説明するための図、図１７はＶＭＴ方式を説明するための図である。
ＶＭＴ方式は、処理に長時間かかるキャッシュミスした命令処理を隠蔽することを狙い、キャッシュミスを検出したときに、メモリからキャッシュまでデータを持ってくる処理をキャッシュ制御部（図示省略）が実行している間に、メモリアクセス以外の処理について、実行部や制御部（ともに図示省略）において他のスレッドに切り替え、実行するというものである。又、このＶＭＴ方式においては、キャッシュミスが発生しにくいスレッドに関しては、一定時間経過した時点で他のスレッドに切り替えるようになっている。
【０００８】
さて、例えばマルチプロセッサによる実行を前提とするプログラムには、プロセッサ間の処理の同期をとるために、メモリ上における特定の領域のデータ（共有データ，監視データ）を、他のプロセッサから監視データが期待値に変更されるまで監視し続けるスピンループ（spin-loop）というコードが含まれている場合がある。
図１８はスピンループを説明するための図である。この図１８に示す例では、ＣＰＵ０とＣＰＵ１との２つのプロセッサをそなえたマルチプロセッサにおいて、そのＣＰＵ０においてＣＰＵ１との同期をとるためにスピンループを実行している状態を示している。このようなスピンループの状態では、ハードウェアの観点からは常に命令処理を行なっているものの、図１８に示すように、プログラムの観点からは、処理の進まない待ち（同期待ち）の状態であると言える。
【０００９】
図１９はマルチスレッドプロセッサにおけるスピンループの状態を示す図である。この図１９に示す例では、スレッド０とスレッド１との２つのスレッドを並列的に実行するマルチスレッドプロセッサにおいて、そのスレッド０においてスレッド１との同期をとるためにスピンループを実行している状態を示している。
マルチスレッド処理を行なわないプロセッサにおいては、スピンループ時には、プロセッサはメモリ上のデータが変更されるまで、監視データを監視し続けることの他に何も行なうことはないが、マルチスレッド処理を行なうマルチスレッドプロセッサにおいては、プロセッサは他のスレッドの処理も行なう必要がある。
【００１０】
メモリ（監視データ）の監視処理においては、一般にキャッシュミスが生じないので、マルチスレッドプロセッサにおいて、一旦メモリの監視が始まると、一定時間が経過するまでスレッドの切り替えが行なわれず、それまでの間は処理の進まない（意味の無い）処理を続けることになる。このような意味の無い処理にプロセッサの処理時間を多く割り当てることは、プロセッサの性能を低下させ、又、スレッド間での同期の完了も遅くなる。すなわち、スピンループの待ち状態が他のスレッドの処理を阻害するのである。
【００１１】
マルチスレッドプロセッサの処理効率を向上するために、従来においては、スレッド（プログラム）が待ち状態であって他のスレッドの実行を優先させることをプロセッサに指示するため、例えば命令セットに現在実行しているスレッドの優先度を落とすことを示すような命令（プログラムコード）を追加するとともに、スレッドの待ち状態の箇所に新たに命令を挿入する等のチューニングを行なう等、新しいプログラムコードを用いる手法が知られている。
【特許文献１】特開２００２−１６３１２１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、このような従来のプロセッサにおけるスレッドの切り替え制御手法は、新規に開発するプログラムや、リコンパイルが可能なプログラムに関しては有効であるが、例えばプログラムのソースが失われてしまっているもののように、リコンパイルやプログラム変更ができないものには適用することができないという課題がある。
本発明は、このような課題に鑑み創案されたもので、ソフトウェアに手を加えることなく、ループによる待ち状態が他のスレッドの実行を阻害しないようにすることを目的とする。
【課題を解決するための手段】
【００１３】
このため、本発明のプロセッサシステム（請求項１）は、１以上の命令をそれぞれそなえた複数のスレッドを、１以上の演算器により並列的に実行可能なプロセッサシステムであって、該演算器により処理を実行する該スレッドを選択的に切り替えるマルチスレッド制御部と、該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測部と、該ループ予測部により該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出部とをそなえ、該マルチスレッド制御部が、該ループ検出部により該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えることを特徴としている。
【００１４】
なお、該ループ予測部が、該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納可能な分岐履歴情報格納部と、該分岐履歴情報格納部に格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測部と、該分岐予測部によって行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価部とをそなえ、該予測評価部による評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なってもよい（請求項２）。
【００１５】
また、該ループ検出部が、該命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出してもよく（請求項３）、又、該ループ検出部が、連続する該命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタをそなえ、該カウンタの値が所定値以上なった場合に該スピンループを検出してもよい（請求項４）。
【００１６】
さらに、該ループ検出部が、先に検出された該ロード命令と後に検出された該ロード命令とが異なる場合には、該カウンタをリセットしてもよく（請求項５）、該ループ検出部が、前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットしてもよく（請求項６）、更に、該ループ検出部が、該命令列中にストア命令があるかを監視し、該ストア命令を検出した場合に、該カウンタをリセットしてもよい（請求項７）。
【００１７】
また、該ループ検出部が、該命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、該ループを検出してもよい（請求項８）。
さらに、本発明のスレッド切り替え制御方法（請求項９）は、１以上の命令をそれぞれそなえた複数のスレッドを、１以上の演算器により並列的に実行可能なプロセッサシステムにおけるスレッド切り替え制御方法であって、該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測ステップと、該ループ予測ステップにおいて該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出ステップと、該ループ検出ステップにおいて該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えるスレッド切り替えステップとをそなえることを特徴としている。
【００１８】
なお、該ループ予測ステップが、該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納する分岐履歴情報格納ステップと、該分岐履歴情報格納ステップにおいて格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測ステップと、該分岐予測ステップにおいて行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価ステップとをそなえ、該予測評価ステップにおける評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なってもよい（請求項１０）。
【発明の効果】
【００１９】
本発明によれば、命令列のループが検出された場合に、スレッド切り替えを行なうことにより、ループによる処理の停滞を少なくして、プロセッサの処理を複数のスレッドに効率的に割り当てることができ、処理速度を向上させることができるとともに、ハードウェアによって実現することにより、ソフトウェアに手を加えることなく実現することができ、既存のプロセッサシステムに適用することができて利便性が高いという利点がある。
【発明を実施するための最良の形態】
【００２０】
以下、図面を参照して本発明の実施の形態を説明する。
図１は本発明の一実施形態としてのプロセッサシステムの構成を示すブロック図である。
本発明の一実施形態としてのプロセッサシステムであるＣＰＵ（Central Processing Unit）１は、複数のスレッド（プログラム）を１以上の実行部（演算器）１５０により並列的に実行可能なマルチスレッドプロセッサとして構成されている。
【００２１】
そして、本ＣＰＵ１は、メモリ上における特定の一つの領域に格納されるデータ（共有データ,監視データ）を監視し、監視データの値が期待値になるまでループして待ち続ける、いわゆるスピンループ（spin-loop）を検出可能なハードウェア構成をそなえている。
ここで、本発明ＣＰＵ１によって検出するスピンループとは、メモリ上のデータを1箇所監視し続ける命令列であり、以下の（ａ），（ｂ），（ｃ）および（ｄ）に示す条件を満たす命令列である。
【００２２】
（ａ）固定小数点系のロード命令を１つ有している。
（ｂ）分岐は１つ。
（ｃ）ロードのアドレスが一定（アドレス更新は無し）および
（ｄ）ストア命令は無い（メモリ更新は無い）
SPARC Architecture Manualを参照して、スピンループの代表的な命令列の例を、以下にSPARCの命令セットで示す。
spin-loop :
load  [lock],%l0  ・・・（１）
tst    %l0       ・・・（２）
bne   spin-loop  ・・・（３）
nop             ・・・（４）
ここで、（１）のロード命令は、メモリ上にロック変数が置いてあるロックアドレス  [lock]  からデータをフェッチしてきて、レジスタ%l0 に書き込むことを示している。（２）においては、フェッチしてきたデータが、“0”であるか否かをチェックし、“0”であるか否かを示すコンディションコードを返す。SPARCの命令では、「Orcc」という命令を用いて、“%l0”と“0”のオア（ＯＲ）をとり、“0”であれば、コンディションコードのZ（Zero）ビットを“1”にして返し、“0”でなければZビットを“0”にして返す。
【００２３】
（３）は、（２）のコンディションコードのうちZビットを見て分岐するか否かを判断する条件分岐である。Zビットが“0”、つまり（２）の結果フェッチしてきたデータが“0”でないときには、再び、（１）に戻り、ロック変数がおいてあるメモリデータをフェッチする。（４）は、分岐命令（３）のディレイスロットであり、分岐命令（３）を実行する際に、分岐先に飛ぶ前に実行されるものである。この場合、nop とは、no-operationを意味し、実際は何も処理しない命令である。
【００２４】
本ＣＰＵ１は、図１に示すように、マルチスレッド制御部１１，レジスタ１３，実行部１５０，命令制御部１６，ＴＬＢ（論理アドレス・物理アドレス変換部）１７，Ｌ１命令キャッシュ１８，Ｌ１データキャッシュ１９およびＬ２キャッシュ２０をそなえて構成され、又、バス２２を介してメインメモリ２１と通信可能に接続されている。
ＴＬＢ（Translation Look-aside Buffer；論理アドレス・物理アドレス変換部）１７は、論理アドレスから物理アドレスへの変換で発生するページテーブル参照のペナルティを小さくするために設けられた一種のキャッシュであり、参照されたアドレスと変換情報の履歴を保存しておき、アドレス変換の高速化を実現するものである。
【００２５】
実行部（演算器）１５０は、レジスタウィンドウ１２等を用いて演算等の種々の処理（命令処理）を行なうものであり、例えば種々の演算処理を実行する演算器（実行演算器）として機能するようになっている。
マルチスレッド制御部１１は、実行部１５０により処理を実行するスレッドを選択的に切り替えるものであり、例えば、所定時間が経過する毎や、Ｌ１命令キャッシュ１８やＬ１データキャッシュ１９，Ｌ２キャッシュ２０においてキャッシュミスが生じる度毎に、実行部１５０によって実行中のスレッドを、他のスレッドと切り替えるよう制御するようになっている。
【００２６】
また、マルチスレッド制御部１１は、後述の如く、命令解読部（ループ検出部）１６２によってループ（スピンループ，自己ループ）が検出された場合においても、スレッドの切り替えを行なうようになっている。
メインメモリ２１は、ＣＰＵ１の外部に設けられたられたメモリシステムにそなえられたメモリであって、種々の命令やデータを格納するものであり、バス２２を介してＣＰＵ１と通信可能に接続され、実行部１５０による処理・実行に必要とされる命令やデータがＬ１命令キャッシュ１８，Ｌ１データキャッシュ１９およびＬ２キャッシュ２０に格納されていない場合（キャッシュミス時）には、ＣＰＵ１はバス２２等を介してこのメインメモリ２１から命令やデータを読み出すようになっている。
【００２７】
Ｌ１命令キャッシュ１８は、実行部１５０が実行する命令を格納するための１次キャッシュであり、Ｌ１データキャッシュ１９は、実行部１５０が命令の実行に際して使用された各種データを格納するための１次キャッシュである。Ｌ２キャッシュ２０は、各種命令やデータを格納するための２次キャッシュである。すなわち、本ＣＰＵ１においては、複数のキャッシュ（Ｌ１命令キャッシュ１８，Ｌ１データキャッシュ１９，Ｌ２キャッシュ２０）が階層的にそなえられている。
【００２８】
命令制御部１６は、１次命令キャッシュ１８やＬ２キャッシュ２０，メインメモリ２１から命令を取得して実行部１５０により実行させるための制御を行なうものであり、図１に示すように、命令フェッチ部（ループ予測部）１６１および命令解読部（ループ検出部）１６２をそなえて構成されている。命令フェッチ部１６１は、実行部１５０によって処理する命令コードをＬ１命令キャッシュ１８やＬ２キャッシュ２０，メインメモリ２１から取得（フェッチ）して、命令解読部１６２に渡すものであり、ブランチヒストリ（分岐履歴情報格納部）１６３，分岐予測部１６４，命令供給部１６５および予測評価部１６６をそなえて構成されている。
【００２９】
なお、以下、Ｌ１命令キャッシュ１８とＬ２キャッシュ２０とをまとめて単に命令キャッシュという場合もある。
図２は本ＣＰＵ１の命令制御部１６における信号の流れを示す図、図３は本ＣＰＵ１において実行されるスレッドがメインメモリ２１に格納されている状態の例を示す図、図４は本ＣＰＵ１の命令制御部１６におけるループ予測過程を示す図である。なお、図３に示すスレッドの例においては、アドレス１２番地にはアドレス３２番地に分岐する分岐命令が格納されているものとする。
【００３０】
ブランチヒストリ（分岐履歴情報格納部）１６３は、スレッドにおける分岐命令の処理履歴であり、スレッドの実行に際して生じた全ての分岐処理について、その処理履歴を保存・格納するものである。具体的には、ブランチヒストリ１６３は、図３に示すスレッドにおいて出現した分岐命令について、少なくとも、その分岐元アドレス（例えば１２番地）と分岐先アドレス（例えば３２番地）とを関連付けて登録するとともに、更に、ループである旨を示すフラグであるループタグ（制御信号；詳細は後述）を、その分岐元アドレスおよび分岐先アドレスに対応付けて格納するようになっている。
【００３１】
分岐予測部１６４は、ブランチヒストリ１６３として格納された分岐履歴情報に基づいて、分岐命令に対する予測を行なうものである。具体的には、分岐予測部１６４は、命令キャッシュから命令をフェッチする際に、その命令が格納されているアドレス（番地）に基づいてブランチヒストリ１６３を参照し、同一のアドレスがブランチヒストリ１６３に分岐元アドレスとして登録されており、且つ、そのループタグにフラグが設定されている場合に、その命令がループに含まれる分岐命令である旨の予測を行なう。
【００３２】
命令供給部１６５は、命令キャッシュから転送された命令コードを、ブランチヒストリ１６３から取得された制御信号等とともに命令解読部１６２に供給するものである。命令供給部１６５は、分岐予測部１６４によるブランチヒストリ１６３の参照の結果、同一のアドレスがブランチヒストリ１６３に分岐元アドレスとして登録されており、且つ、そのループタグにフラグが設定されている場合に、その命令コードとともにループ予測がされている旨の制御信号を命令解読部１６２に通知するようになっている。
【００３３】
予測評価部１６６は、分岐予測部１６４によって行なわれた分岐命令に対する予測（分岐予測）について、その予測が的中したか否かを評価するものである。具体的には、予測評価部１６６は、分岐予測部１６４によって行なわれた分岐予測について、実行部１５０による実際の処理結果を参照することにより、その分岐予測が的中したか否かを評価・判断する。
【００３４】
また、命令制御部１６は、分岐予測の連続成功回数カウンタ１６７（図４参照）をそなえている。このカウンタ１６７は、分岐予測部１６４によって予測された各分岐命令に対して、予測評価部１６６によりその分岐予測が的中したと評価された回数（連続回数）を関連付けて登録するものである。
命令制御部１６は、図４に示すように、カウンタ１６７について、予測評価部１６６により分岐予測が的中したと評価された場合にインクリメント（＋１）を行ない、又、予測が的中しなかった（予測失敗）と評価された場合に、その分岐命令にかかる評価回数をリセット（０に戻す）ようになっている。
【００３５】
そして、命令フェッチ部（ループ予測部）１６１は、予測評価部１６６による評価結果に基づいて、その分岐命令に対する予測が所定回数以上連続して的中した場合に、分岐且つループであるとの予測を行ない、ブランチヒストリ１６３におけるその分岐命令に対応するループタグにループと予測した旨のフラグを設定するようになっている。
また、命令フェッチ部１６１は、予測評価部による評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうようになっている。
【００３６】
すなわち、図２に示すように、ＣＰＵ１は、プログラム実行をする際に、命令フェッチ部１６１によって命令キャッシュから命令をフェッチする。このとき、分岐予測機構（分岐予測部１６４）における分岐したことを履歴として登録しておくブランチヒストリ１６３を参照し、分岐することが予測された場合には、分岐先のアドレスを命令フェッチする。命令供給部は１６５には命令キャッシュから命令コードが転送され、更に、ブランチヒストリ１６３にヒットした等の制御情報（ループタグ）も付加して、命令解読部１６２に命令コードが供給される。
【００３７】
また、分岐予測機構の分岐予測部１６４において、命令フェッチして分岐すると予測された命令に対し、分岐命令を実行して分岐予測が実際に成功した数を数え、予測が失敗した場合にリセットするカウンタ１６７が用意される。又、ブランチヒストリ１６３のエントリの中には、この分岐命令が連続して分岐するループに含まれていることを示すループタグのビットが用意されている。
【００３８】
分岐予測が成功したことを数える前述したカウンタ１６７の値が一定数以上になった場合には、その後、分岐予測が成功と判定された分岐命令のブランチヒストリ１６３のエントリにループタグがセットされる。その後、命令供給部１６５が供給する命令列がブランチヒストリ１６３にヒットし、かつループタグのビットが上がっていれば、その後の命令列が分岐予測の当たり続けるループに含まれているということを命令解読部に報告する。これはトラップや割り込みなどがなく、分岐予測が失敗しない間報告を続ける。
【００３９】
図５は本ＣＰＵ１における命令解読部１６２の構成例を模式的に示す図である。
命令解読部１６２は、命令フェッチ部１６１によって取得された命令コードを解読するものである。命令解読部１６２は、図５に示すように、複数（本実施形態では４つ）の命令語レジスタ３１−１〜３１−４と、同じく複数（本実施形態では４つ）のＡＮＤ回路３２と、ＯＲ回路３３をそなえて構成されており、命令語レジスタ３１−１〜３１−４にそれぞれ格納された命令について命令解読を行ない、有効な固定小数点ロード命令であるか否かを判断するようになっている。
【００４０】
なお、以下、命令語レジスタを示す符号としては、複数の命令語レジスタのうち１つを特定する必要があるときには符号３１−１〜３１−４を用いるが、任意の命令語レジスタを指すときには符号３１を用いる。
そして、命令語レジスタ３１−１〜３１−４の少なくともいずれかにおいて、有効な固定小数点ロード命令が検出された場合には、スピン内ロード命令記憶部３４に、その固定小数点ロード命令が格納されるようになっている。これにより、本実施形態においては、命令解読部１６２は、最大4命令を同時に解読することができる。命令解読部１６２へ命令を供給する命令供給部は、ブランチヒストリにヒットした場合、ヒットした命令と分岐先アドレス（ターゲットアドレス）にある命令とを、別のサイクルに供給するように制御するようになっている。つまり上述したスピンループの例では、1ループの命令を同時に命令解読部１６２に供給することができ、次のループ内の命令は別のサイクルに供給するようになっている。
【００４１】
また、通常、スピンループ内において用いられるロード命令は固定小数点レジスタに書き込まれる。以下、本実施形態においては、このような固定小数点レジスタに書き込まれるロード命令を固定小数点系ロード命令と呼ぶ。命令解読部１６２は、供給されている命令列がループであるという報告を命令フェッチ部（ループ予測部）１６１から受けている間に、固定小数点系ロード命令を解読した時に、その固定小数点系ロード命令のオペコードをスピン内ロード命令記憶部（ラッチ）３４に格納するようになっている。
【００４２】
さて、１箇所のメモリデータを監視するスピンループでは、同時に命令解読部１６２へ供給される命令（本実施形態では最大4命令）の中で有効なロード命令は１つのみである。従って、本ＣＰＵ１においては、固定小数点系ロード命令のオペコードを格納するスピン内ロード命令記憶部３４も１命令分だけ用意されるようになっている。
また、ここで有効なロード命令とは、最大4命令を格納する命令語レジスタ３１−１〜３１−４のうち、分岐予測などのため実行されない命令を除いたものを指す。例えば、４命令解読可能な命令解読部１６２の命令を格納する命令語レジスタ３１−１〜３１−４のうち、命令語レジスタ３１−１（命令語レジスタ０）に格納された命令が分岐命令で、且つ分岐すると予測される場合は、命令語レジスタ３１−２（命令語レジスタ1）に格納された命令は分岐命令のディレイスロットとして処理を行なう場合があるが、命令語レジスタ３１−３，３１−４（命令語レジスタ２，３）に格納された命令は実行されない。この場合は、命令語レジスタ０，１に格納された命令が有効な命令であり、命令語レジスタ２，３に格納された命令は有効でない命令となる。
【００４３】
さらに、命令解読部１６２は、図５に示すように、同時解読した命令列中にロード命令が１つだけ含まれており、且つ、そのロード命令が固定小数点系ロード命令の場合のみ、スピン内ロード命令記憶部３４に格納したロード命令のバリッド信号をセットするようになっており、命令列中にロード命令が複数含まれている場合はバリッド信号をセットしないようになっている。
【００４４】
また、命令解読部１６２は、連続する命令列中における同一の固定小数点系ロード命令の連続出現回数を計数するカウンタ（スピン内ロード命令一致回数カウンタ３６（図６参照））をそなえ、このスピン内ロード命令一致回数カウンタ３６の値が所定値以上なった場合にスピンループを検出するようになっている。
図６〜図９はそれぞれ本ＣＰＵ１においてループ予測が報告されている間のロード命令一致回数カウンタ３６の設定手法を説明するための図である。
【００４５】
命令解読部１６２は、バリッド信号がセットされた後に次のロード命令が来た場合は、図６に示すように、この検出したロード命令を再びスピン内ロード命令記憶部３４に格納し、この新たに格納したロード命令が、先に格納したロード命令と一致するか否かを判断するようになっている。そして、これらのロード命令が一致した場合、つまり、命令解読部１６２において同じロード命令が連続して検出された場合に、スピン内ロード命令一致回数カウンタ３６に1を加える（インクリメントする）。
【００４６】
また、命令解読部１６２は、新たに検出された有効な固定小数点系ロード命令が、先にスピン内ロード命令記憶部３４に格納されているロード命令と一致しない場合には、図７に示すように、スピン内ロード命令一致回数カウンタ３６をリセットして“０”にするようになっている。
さらに、命令解読部１６２は、供給されている命令列がループであるという報告を命令フェッチ部１６１より受けている間（ループ予測が報告されている間）に、ロードを含むすべての命令について、ロード命令のメモリアドレスを生成するオペランドレジスタの更新を監視するようになっている。
【００４７】
ロード命令がフェッチしてくるメモリアドレスの生成手法としては、例えばSPARC命令セットでは、（１）２つの固定小数点レジスタRS1,RS2  の和をとって生成する場合と、（２）１つの固定小数点レジスタRS1とオペコード内に直接指定された即値１３ビットとの和をとって生成する場合とがある。
スピン内ロード命令記憶部３４に格納されたロード命令が上記（１）の場合には、命令解読部１６２はレジスタRS1とレジスタRS2との両方の更新を監視し、又、スピン内ロード命令記憶部３４に格納されたロード命令が上記（２）の場合には、命令解読部１６２はレジスタRS1のみの更新を監視するようになっている。
【００４８】
そして、図８に示すように、上記（１），（２）のいずれの場合についても、レジスタの更新が検出されたときには、命令解読部１６２は、ロード命令のアドレスが変更された可能性があるとして、スピン内ロード命令一致回数カウンタ３６を０にリセットするようになっている。又、同時に、格納ロード命令自身のバリッド信号についてもリセットする。
【００４９】
さらに、メモリ上のデータを監視するのみで処理が進まないスピンループを構成する命令列中には、本来、メモリデータの内容を更新するストア命令は含まれない。従って、本ＣＰＵ１においては、図９に示すように、命令解読部１６２は、解読した命令列中にストア命令が現れた場合にも、スピン内ロード命令一致回数カウンタ３６を0にリセットし、又、同時にロード命令自身のバリッド信号のリセットも行なう。
【００５０】
また、命令解読部１６２は、分岐命令実行後に分岐予測が外れたことが判明した時点で、投入された命令列がループから抜ける場合もカウンタを0にリセットするようになっており、又、同時にロード命令自身のバリッド信号のリセットも行なうようになっている。
図１０は本ＣＰＵ１におけるスピンループの検出に基づくスレッド切り替えのフローを模式的に示す図である。
【００５１】
本ＣＰＵ１においては、図１０に示すように、命令解読部１６２が、供給されている命令列がループであるという報告を命令フェッチ部１６１から受けている間において、スピン内ロード命令一致回数カウンタ３６がある一定値（閾値）を越えたことを検出した場合であって、その間、同一ロード命令が連続して検出され、且つ、ロード命令のアドレスも変わらず、更に、ストア命令も存在していない場合に、現在実行している命令列が１箇所のメモリデータを監視している、すなわちスピンループであると判断して、マルチスレッド制御部１１に対してスレッド切り替え要求（スレッド切り替え要求信号）が出されるようになっている。
【００５２】
このスレッド切り替え要求信号は、スピン内ロード命令一致回数カウンタ３６が閾値を超えている間出し続けられる。スレッド制御部１１は、このスレッド切り替え要求信号を受け取り、前回スレッドを切り替えてからの経過時間が所定時間以上であることや、最低でも１つの命令が完了していること等、予め定められた条件（スレッド切り替え条件）が満たされている場合に、実行しているスレッドから他のスレッドへ切り替えを行なう。
【００５３】
また、本ＣＰＵ１は、上述の如き１箇所のメモリデータを監視するスピンループの他に、他のプロセッサや、ＩＯ（Input/Output）からの割り込みが行なわれるまで、自分自身にループし続ける自己ループについても、ハードウェアで検出するようになっている。
図１１は本ＣＰＵ１における自己ループの検出に基づくスレッド切り替えのフローを模式的に示す図である。
【００５４】
このような自己ループの命令列をSPARCの命令セットで示す例として以下に示す。
self-loop :
ba   self-loop    ・・・（１）
nop              ・・・（２）
ここで、（1）の命令baは無条件相対分岐命令（branch always）である。具体的には、このba命令は、SPARC命令における、Branch on Integer Condition Codes(Bicc)と、Branch on Integer Condition Codes(BPcc)とのうちの無条件分岐を指す。
【００５５】
なお、この命令を実行する際は、条件によらず分岐する。又、オペコードに指定された相対的なアドレスを（1）自身の命令アドレスに加えて分岐先のターゲットアドレスとするものであるので、命令解読時にオペコードと自アドレスから分岐先を決定することが可能である。これを直接分岐命令と呼ぶ。それに対して、レジスタ値から分岐先ターゲットアドレスが決定する間接分岐命令では、レジスタ読み出しを行なわないと分岐先が分からないため、命令解読時では分岐先ターゲットアドレスが判明しない。直接分岐で相対アドレス値が“０”である場合には、自分自身に分岐をするものであることが命令解読時に判定することができる。なお、（２）の命令nopは（1）のディレイスロットであり何も処理をしない。
【００５６】
先ず、スピンループの検出の際に用いたブランチヒストリ１６３がヒットし続けていることの報告を命令解読部１６１が受け付け、ループであることを判断する。
命令供給部１６５（命令フェッチ部１６１）は、図１１に示すように、ブランチヒストリ１６３にヒットすると、分岐先の命令を別のサイクルで命令解読部１６２に供給するので、４命令解読可能な命令解読部１６２における命令語レジスタ３１−１〜３１−４において、（１）のba命令は必ず命令語レジスタ３１−１（命令語レジスタ0）に供給されることになる。よって、命令語レジスタ0に関して無条件分岐命令baであり、かつ分岐先の相対アドレスがオールゼロであることを検出する。
【００５７】
命令供給部１６５から、供給されている命令がループに含まれていることの報告を受け、かつ自分自身に分岐する無条件分岐（自己ループ）を検出すると、命令解読部１６２は、マルチスレッド制御部１１にスレッドの切り替えを要求し、マルチスレッド制御部１１は、実行部１５０により実行中のスレッドを他のスレッドに切り替える。
このように、本発明の一実施形態としてのプロセッサシステム（ＣＰＵ１）においては、キャッシュミスや一定時間経過たったことをトリガーにスレッドを切り替えて実行する時分割型のマルチスレッドにおいて、メモリ上の一つのデータを監視し、監視データの値が期待値になるまでループして待ち続けるいわゆるスピンループや、外部からの割り込等が行なわれるまで自分自身への分岐を続けて待つ自己ループをハードウェアによって検出して、スレッドを切り替えることにより、プログラム上の処理は進まない待ち状態のループをハードウェアで検出した場合には、他のスレッドに切り替えることで、マルチスレッドプロセッサの処理効率を向上させることができる。
【００５８】
図１２は本発明の一実施形態としてのプロセッサシステムにより、複数（図１２では２つ）のスレッド０，１との間において、スピンループが検出される度にスレッド切り替えを行なう例を示す図である。
この図１２に示すように、キャッシュミスや一定時間経過たったことをトリガーにスレッドを切り替えて実行する時分割型のマルチスレッドにおいて、いわゆるスピンループや自己ループをハードウェアによって検出し、これらのスピンループや自己ループを検出した際にスレッドを切り替える制御を行なうことにより、特にプログラム上の処理は進まないループをハードウェアで検出し、他のスレッドに切り替えることで、ソフトウェアに手を加えずに待ち状態をプログラムが他のスレッドの実行を阻害しないようにして、マルチスレッドプロセッサの処理効率を向上させることができる。
【００５９】
また、このようなループ状態の検出を行なうための機能やマルチスレッド制御部１１に対する指示要求を行なうための機能をハードウェアによって実現するので、既存のプロセッサシステムにおけるプログラム（スレッド，ソフトウェア）の編集・加工，リコンパイル等を行なう必要がなく実装することができ、利便性が高い。
すなわち、命令列のループが検出された場合に、スレッド切り替えを行なうことにより、ループによる処理の停滞を少なくして、プロセッサの処理を複数のスレッドに効率的に割り当てることができ、処理速度を向上させることができるとともに、ハードウェアによって実現することにより、ソフトウェアに手を加えることなく実現することができ、既存のソフトウェア資源を有効に用いることができて経済的であり、又、既存のプロセッサシステムに適用することができて利便性が高い。
【００６０】
そして、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上述した実施形態においては、ＣＰＵ（プロセッサシステム）１として、複数のスレッド（プログラム）を１以上の実行部（演算器）１５０により並列的に実行可能なマルチスレッドプロセッサを用い、このマルチスレッドプロセッサにおいてスレッドの切り替えを行なう場合に、同期をとるために用いられる共有データ（監視データ）を監視するために生じるスピンループや自己ループをループ検出部によって検出しているが、これに限定されるものではなく、例えば、マルチプロセッサにおいて複数のプロセッサ間の処理の同期をとるために、用いられる共有データ（監視データ）を、監視するために生じるスピンループや自己ループについて同様の処理を行なってもよく、複数の処理を並列的に行なうに際して、これらの複数の処理間で同期をとるために用いられるスピンループや自己ループに適用することができる。
【００６１】
（付記１）  １以上の命令をそれぞれそなえた複数のスレッドを、１以上の演算器により並列的に実行可能なプロセッサシステムであって、
該演算器により処理を実行する該スレッドを選択的に切り替えるマルチスレッド制御部と、
該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測部と、
該ループ予測部により該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出部とをそなえ、
該マルチスレッド制御部が、該ループ検出部により該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えることを特徴とする、プロセッサシステム。
【００６２】
（付記２）  該ループ予測部が、
該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納可能な分岐履歴情報格納部と、
該分岐履歴情報格納部に格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測部と、
該分岐予測部によって行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価部とをそなえ、
該予測評価部による評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうことを特徴とする、付記１記載のプロセッサシステム。
【００６３】
（付記３）  該分岐履歴情報格納部および該分岐予測部が、該命令のフェッチを行なう命令フェッチ部にそなえられることを特徴とする、付記２記載のプロセッサシステム。
（付記４）  該ループ検出部が、
該命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出することを特徴とする、付記１〜付記３のいずれか１項に記載のプロセッサシステム。
【００６４】
（付記５）  該ループ検出部が、
連続する該命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタをそなえ、
該カウンタの値が所定値以上なった場合に該スピンループを検出することを特徴とする、付記４記載のプロセッサシステム。
【００６５】
（付記６）  該ループ検出部が、
先に検出された該ロード命令と後に検出された該ロード命令とが異なる場合には、該カウンタをリセットすることを特徴とする、付記５記載のプロセッサシステム。
（付記７）  該ループ検出部が、
前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットすることを特徴とする、付記５又は付記６記載のプロセッサシステム。
【００６６】
（付記８）  該ループ検出部が、
該命令列中にストア命令があるかを監視し、
該ストア命令を検出した場合に、該カウンタをリセットすることを特徴とする、付記５〜付記７のいずれか１項に記載のプロセッサシステム。
（付記９）  該ループ検出部が、
該命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、該ループを検出することを特徴とする、付記１〜付記８のいずれか１項に記載のプロセッサシステム。
【００６７】
（付記１０）  該ループ検出部が該命令を該演算器により実行可能な状態に解読する命令解読部にそなえられることを特徴とする、付記１〜付記９のいずれか１項に記載のプロセッサシステム。
（付記１１）  １以上の命令をそれぞれそなえた複数のスレッドを、１以上の演算器により並列的に実行可能なプロセッサシステムにおけるスレッド切り替え制御方法であって、
該スレッドにおける分岐命令の処理履歴に基づいて命令列のループを予測するループ予測ステップと、
該ループ予測ステップにおいて該ループを予測された場合に、該命令に基づいて該ループの検出を行なうループ検出ステップと、
該ループ検出ステップにおいて該ループが検出された場合に、該演算器により実行中の該スレッドを他のスレッドに切り替えるスレッド切り替えステップとをそなえることを特徴とする、スレッド切り替え制御方法。
【００６８】
（付記１２）  該ループ予測ステップが、
該スレッドにおける分岐命令の処理履歴を分岐履歴情報として格納する分岐履歴情報格納ステップと、
該分岐履歴情報格納ステップにおいて格納された該分岐履歴情報に基づいて、該分岐命令に対する予測を行なう分岐予測ステップと、
該分岐予測ステップにおいて行なわれた前記分岐命令に対する予測について、当該予測が的中したか否かを評価する予測評価ステップとをそなえ、
該予測評価ステップにおける評価結果に基づいて、前記分岐命令に対する予測が所定回数以上連続して的中した場合に、前記ループの予測を行なうことを特徴とする、付記１１記載のスレッド切り替え制御方法。
【００６９】
（付記１３）  該ループ検出ステップにおいて、
該命令列中において固定小数点レジスタにデータを書き込む固定小数点系ロード命令の検出を行ない、当該固定小数点系ロード命令に基づいてスピンループの発生を検出することを特徴とする、付記１１又は付記１２記載のスレッド切り替え制御方法。
（付記１４）  該ループ検出ステップにおいて、
連続する該命令列中における同一の該固定小数点系ロード命令の連続出現回数を計数するカウンタの値が所定値以上なった場合に該スピンループを検出することを特徴とする、付記１３記載のスレッド切り替え制御方法。
【００７０】
（付記１５）  該ループ検出ステップにおいて、
先に検出された該ロード命令と後に検出された該ロード命令とが異なる場合には、該カウンタをリセットすることを特徴とする、付記１４記載のスレッド切り替え制御方法。
（付記１６）  該ループ検出ステップにおいて、
前記検出された固定小数点系ロード命令がメモリアドレス生成に用いるアドレス生成用レジスタへの書き込み更新を監視し、当該アドレス生成用レジスタに書き込みを検出した場合には、該カウンタをリセットすることを特徴とする、付記１４又は付記１５記載のスレッド切り替え制御方法。
【００７１】
（付記１７）  該ループ検出ステップにおいて、
該命令列中にストア命令があるかを監視し、
該ストア命令を検出した場合に、該カウンタをリセットすることを特徴とする、付記１４〜付記１６のいずれか１項に記載のスレッド切り替え制御方法。
（付記１８）  該ループ検出ステップにおいて、
該命令列中において、分岐命令のターゲットアドレスが自分自身のアドレスを指す相対分岐命令を検出した場合に、該ループを検出することを特徴とする、付記１１〜付記１７のいずれか１項に記載のスレッド切り替え制御方法。
【産業上の利用可能性】
【００７２】
マルチスレッドプロセッサのみならず、例えばマルチプロセッサにおいて複数のＣＰＵ間で同期をとる場合に用いられるスピンループや自己ループの検出時にＣＰＵの切り替えを行なう等、複数の処理を並列的に行なう種々のプロセッサシステム適用することにより、これらの複数の処理を効率に切り替えることができる。
【図面の簡単な説明】
【００７３】
【図１】本発明の一実施形態としてのプロセッサシステムの構成を示すブロック図である。
【図２】本発明の一実施形態としてのプロセッサシステムの命令制御部における信号の流れを示す図である。
【図３】本発明の一実施形態としてのプロセッサシステムにおいて実行されるスレッドがメインメモリに格納されている状態の例を示す図である。
【図４】本発明の一実施形態としてのプロセッサシステムの命令制御部におけるループ予測過程を示す図である。
【図５】本発明の一実施形態としてのプロセッサシステムにおける命令解読部の構成例を模式的に示す図である。
【図６】本発明の一実施形態としてのプロセッサシステムにおいてループ予測が報告されている間のロード命令一致回数カウンタの設定手法を説明するための図である。
【図７】本発明の一実施形態としてのプロセッサシステムにおいてループ予測が報告されている間のロード命令一致回数カウンタの設定手法を説明するための図である。
【図８】本発明の一実施形態としてのプロセッサシステムにおいてループ予測が報告されている間のロード命令一致回数カウンタの設定手法を説明するための図である。
【図９】本発明の一実施形態としてのプロセッサシステムにおいてループ予測が報告されている間のロード命令一致回数カウンタの設定手法を説明するための図である。
【図１０】本発明の一実施形態としてのプロセッサシステムにおけるスピンループの検出に基づくスレッド切り替えのフローを模式的に示す図である。
【図１１】本発明の一実施形態としてのプロセッサシステムにおける自己ループの検出に基づくスレッド切り替えのフローを模式的に示す図である。
【図１２】本発明の一実施形態としてのプロセッサシステムにより、複数のスレッドとの間において、スピンループが検出される度にスレッド切り替えを行なう例を示す図である。
【図１３】インオーダ実行型の処理方法を説明するための図である。
【図１４】アウトオブオーダ実行型の処理方法を説明するための図である。
【図１５】（ａ），（ｂ）はマルチスレッドプロセッサ方式を説明するための図である。
【図１６】ＳＭＴ方式を説明するための図である。
【図１７】ＶＭＴ方式を説明するための図である。
【図１８】スピンループを説明するための図である。
【図１９】マルチスレッドプロセッサにおけるスピンループの状態を示す図である。
【符号の説明】
【００７４】
１    ＣＰＵ（プロセッサシステム）
１１    マルチスレッド制御部
１３    レジスタ
１６    命令制御部
１７    ＴＬＢ
１８    Ｌ１命令キャッシュ
１９    Ｌ１データキャッシュ
２０    Ｌ２キャッシュ
２１    メインメモリ
２２    バス
３２    ＡＮＤ回路
３４    スピン内ロード命令記憶部
３６    スピン内ロード命令一致回数カウンタ
１５０    実行部（演算器）
１６１    命令フェッチ部（ループ予測部）
１６２    命令解読部（ループ検出部）
１６３    ブランチヒストリ（分岐履歴情報格納部）
１６４    分岐予測部
１６５    命令供給部
１６６    予測評価部
１６７    分岐予測の連続成功回数カウンタ
３１−１〜３１−４  命令語レジスタ
【図１】
2006040142.tif 000003
【図２】
2006040142.tif 000004
【図３】
2006040142.tif 000005
【図４】
2006040142.tif 000006
【図５】
2006040142.tif 000007
【図６】
2006040142.tif 000008
【図７】
2006040142.tif 000009
【図８】
2006040142.tif 000010
【図９】
2006040142.tif 000011
【図１０】
2006040142.tif 000012
【図１１】
2006040142.tif 000013
【図１２】
2006040142.tif 000014
【図１３】
2006040142.tif 000015
【図１４】
2006040142.tif 000016
【図１５】
2006040142.tif 000017
【図１６】
2006040142.tif 000018
【図１７】
2006040142.tif 000019
【図１８】
2006040142.tif 000020
【図１９】
2006040142.tif 000021