(57)【要約】      （修正有）【課題】マルチスレッドプロセッサにおけるパイプラインのリード命令の読み込み先メモリアドレスの決定前にオペランドキャッシュミス／ヒット予想を行う事で従来よりも早い段階でスレッドの制御を行い、パイプラインのストールを解消する為の方法を提供する。【解決手段】本発明は、マルチスレッドプロセッサにおけるパイプラインのリード命令の読み込み先メモリアドレスの決定前に命令がリード判定回路でリード命令と判別された後に、キャッシュ予想回路で命令アドレスを読み込んで履歴テーブルおよびグローバルカウンタを参照する事でオペランドキャッシュミス／ヒットを予想し、前記命令がキャッシュミスをするリード命令と予想された場合にスレッドの切り替えを行う事でパイプラインのストールを解消する。【選択図】図２
2008015562.tif 000002
【特許請求の範囲】
【請求項１】
マルチスレッドプロセッサにおけるメモリ読み込み命令のオペランドキャッシュミス／ヒット予想方法において、
命令パイプラインにおけるリード命令の読み込み先メモリアドレスの決定前において、メモリからの読み込み時の命令あるいは該命令パイプラインに投入されているスレッドの命令の種別を判定し、
前記判定結果が前記メモリ読み込み命令であったときに該メモリ読み込み命令実行時のオペランドキャッシュミス／ヒットを予測する、
ことを特徴とするオペランドキャッシュミス／ヒット予想方法。
【請求項２】
前記マルチスレッドプロセッサは、前記メモリ読み込み命令のメモリ上の命令アドレスを変換したエントリに前記メモリ読み込み命令の実行時のオペランドキャッシュミス／ヒットの履歴を記憶した履歴テーブルを備え、
該履歴テーブルの前記メモリ読み込み命令のメモリ上の命令アドレスを変換したエントリに記憶されたオペランドキャッシュミス／ヒットの履歴に基づいて前記メモリ読み込み命令実行時のオペランドキャッシュミス／ヒットを予測する、
ことを特徴とする請求項１記載のオペランドキャッシュミス／ヒット予想方法。
【請求項３】
前記マルチスレッドプロセッサは、メモリ読み込み命令の実行時のオペランドキャッシュミス／ヒットによりカウント値がアップダウンするグローバルカウンタをさらに備え、
前記履歴テーブルに記憶された前記メモリ読み込み命令のメモリ上の命令アドレスを変換したエントリに記憶されたオペランドキャッシュミス／ヒットの履歴と前記グローバルカウンタの値に基づいて、前記メモリ読み込み命令実行時のオペランドキャッシュミス／ヒットを予測する、
ことを特徴とする請求項２記載のオペランドキャッシュミス／ヒット予想方法。
【請求項４】
マルチスレッドプロセッサにおけるスレッド制御方法において
メモリ読み込み命令のオペランドキャッシュミス／ヒット予想手段を備え、
命令パイプラインにおけるリード命令の読み込み先メモリアドレスの決定前において、メモリからの読み込み時の命令あるいは該命令パイプラインに投入されているスレッドの命令の種別を判定し、
前記命令パイプラインに投入されているスレッドの命令の種別が前記メモリ読み込み命令であったとき、前記オペランドキャッシュミス／ヒット予想手段により前記メモリ読み込み命令のオペランドキャッシュミス／ヒットを予想し、
オペランドキャッシュミスが予想されたときにスレッドの制御をする
ことを特徴とするスレッド制御方法。
【請求項５】
マルチスレッドプロセッサにおいて、
命令プレデコーダとスレッド制御回路およびメモリ読み込み命令のオペランドキャッシュミス／ヒット予想手段を備え、
前記命令プレデコーダは命令パイプラインにおけるリード命令の読み込み先メモリアドレスの決定前において、メモリからの読み込み時の命令あるいは該命令パイプラインに投入されているスレッドの命令の種別を判定し、前記スレッド制御回路に信号を通知し、
前記スレッド制御回路は、前記命令プレデコーダから通知された命令の種別が前記メモリ読み込み命令のとき、前記オペランドキャッシュミス／ヒット予想手段により前記メモリ読み込み命令のオペランドキャッシュミス／ヒットを予想し、
オペランドキャッシュミスが予想されるときに、前記スレッド制御回路にスレッドの制御をするイベントが発生したことを通知する、
ことを特徴とするマルチスレッドプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプロセッサの高速化に係り、特にキャッシュメモリを有する演算処理回路のメモリにおける読み込み命令のオペランドキャッシュミス／ヒット予想および前記予想結果によるスレッドを制御することによってパイプラインのストールを解消する方法に関する。
【背景技術】
【０００２】
近年のプロセス技術の進歩により、CPUやメモリの高速化は進んでいる。しかし、CPUの高速化に比較しメモリの高速化は穏やかであり、両者の速度差が大きくなっている。この速度差を緩和する為にキャッシュメモリが存在する。このキャッシュメモリは、プロセッサによって高速にデータを読み出す事が可能な記憶素子によって構成されており、メモリデバイスに記憶されているデータの一部を記憶し、プロセッサがメモリデバイスからデータの読み出しを行う場合に、そのデータがキャッシュメモリに記憶されているものであれば、キャッシュメモリからデータを読み出す事で高速な読み出しを可能としている。キャッシュメモリはアクセススピード、記憶できる容量に応じて複数のレベルに分けられている(例えば、一次キャッシュ、二次キャッシュなど)場合があり、レベルの低いほど高速にアクセスできる記憶素子が用いられる。
【０００３】
また一方で、プロセッサは通常行う処理を分割し、細かいステージに分け、各ステージで異なった命令を実行する事によって高速な実行を可能としており、この細かいステージの総称を命令パイプライン(以下、本明細書ではパイプラインとする)と呼んでいる。しかし、このパイプラインで、何らかの原因により次のステージにおける処理を行う事ができないと、そのステージの処理を終了する事ができず、実行が進まなくなる時があり、この事をストールと呼んでいる。
【０００４】
そこで、CPUなどのプロセッサでメモリ読み込み命令(以下、本明細書ではリード命令とする)を実行する場合、一次キャッシュにヒットしなければ、オペランドキャッシュミスとなり二次キャッシュや三次キャッシュと言うような遅いキャッシュメモリやメインメモリにアクセスすることになりパイプラインがストールしてしまい命令実行の速度低下をまねくと言う問題がある。また特に、細分化したプログラムであるスレッドを複数同時実行可能なマルチスレッドプロセッサでは、オペランドキャッシュミスしてメインメモリ等にアクセスするようになると実行するスレッドを切り替え、パイプラインのストールを最小限に抑える事が従来から考えられているが、このような複雑なプロセッサはパイプラインが長い為にスレッドが変更されてから変更されたスレッドの命令が実行されるまでに時間がかかると言う問題がある。さらに、オペランドキャッシュミスあるいはヒットの両方の場合でリード命令の効率の良いスケジューリングが異なっており、多くのCPUではオペランドキャッシュヒットを前提にスケジューリングを行っているためにオペランドキャッシュミスをした場合にはスケジューリングを改めてやり直す必要があり、同様に命令実行の速度低下をまねくと言う問題がある。
【０００５】
このような命令実行の速度低下の問題に対処するため、マルチスレッドプロセッサにおけるパイプラインの命令実行よりも早い段階でリード命令のオペランドキャッシュミス／ヒットを予想する技術が従来からいくつか考案されている。
【０００６】
従来のオペランドキャッシュミス／ヒット予想では、リード命令実行時のキャッシュミス／ヒットによりカウンタ値が増減するグローバルカウンタやリード命令の読み込み先のメモリアドレスに関連づけられたエントリに前記リード命令の実行時のオペランドキャッシュミス／ヒットの履歴を記憶した履歴テーブルを用い、パイプラインのスケジューリングの段階でリード命令のオペランドキャッシュミス／ヒットを予想することでスケジューリングを行っていた（非特許文献１〜５）。
【０００７】
米国特開US2003−0208665 A1公報(特許文献１)では、読み込むメモリのロードアドレスの一部を変換したエントリを有し、リード命令の実行時のオペランドキャッシュミス／ヒットの履歴を記憶したオペランドキャッシュヒット／ミス予想テーブル(CPT)を使う事でリード命令のオペランドキャッシュヒット／ミス予想を試み、スケジュール従属命令にこの予想情報を用いてキャッシュミスするリード命令の実行前に命令のスケジュールをやり直す技術が開示されている。
【０００８】
一方で、従来のマルチスレッドプロセッサにおけるスレッドの切り替え手段としては、オペランドキャッシュミス発生後にデコード段階のデコードされた命令に対してエントリを作成し、そのエントリを命令実行の指標として命令が実行された時にはエントリが消去され、命令が実行されていない時はエントリを残す事で命令実行されていないエントリ数を知る事によってスレッドを切り替える手段が知られている。
【０００９】
しかし、これら従来法のリード命令のオペランドキャッシュミス／ヒットを予想する方法は、マルチスレッドプロセッサにおけるパイプラインのスケジューリング段階以降あるいは読み込み先メモリアドレスの決定後に予想する方法であった。また、スレッド切り替えによってパイプラインのストールを解消する方法でも、通常スレッドを切り替えてから異なったスレッドの命令が実行されるまでに複数クロックかかるので、その間に命令実行が一時的に止まる為に効果は限定的であった。そして、例え本従来法のキャッシュミス／ヒット予想とスレッド切り替え技術を組み合わせたとしても、従来の予想方法は動作の遅いメモリからの読み込みが行われる直前に予想する方法であり、メインメモリにアクセスする事がわかってからスレッドを変更してもパイプラインを命令が伝わっていくまでに複数クロックの時間がかかる事でパイプラインはしばらくストールしてしまい、本従来法の予想とスレッドの切り替えを行う事でパイプラインのストールを大幅に解消する事は実現できなかった。
【特許文献１】米国特開 US 2003-0208665 A1公報
【非特許文献１】IBM Power5 CHIP:A Dual-Core Multithreaded Processor
【非特許文献２】Speculation Techniques for Improving Load Related Instruction Scheduling
【非特許文献３】Bloom Filtering Cache Misses for Accurate Data Speculation and Prefetching
【非特許文献４】The ALPHA 21264 MICROPROCESSOR
【非特許文献５】ACCESS-MODE PREDICTIONS FOR LOW-POWER CACHE DESIGN
【発明の開示】
【発明が解決しようとする課題】
【００１０】
本発明では、従来よりもマルチスレッドプロセッサにおけるパイプラインの早い段階であるリード命令の読み込み先メモリアドレスの決定前に、メモリからの読み込み時の命令あるいは該パイプラインに投入されているスレッドの命令の種別を判定し、実行される命令がリード命令と判断された場合に、オペランドキャッシュミス／ヒット予想を行う方法を提供する。また、前記予想においてオペランドキャッシュミスすると予想されることで従来よりも早い段階でのスレッドの制御を行うことで、パイプラインのストールを大幅に解消する為の方法を提供する。
【課題を解決するための手段】
【００１１】
本発明の上記課題は本発明の第一態様として以下の各手段を備える事で解決できる。
キャッシュミス／ヒット予想においては、マルチスレッドプロセッサにおけるパイプラインのリード命令の読み込み先メモリアドレスの決定前において該パイプラインに投入されているスレッドの命令の種別を判定し、前記判定結果がリード命令であったときに該リード命令実行時のオペランドキャッシュミス／ヒットを予想するオペランドキャッシュミス／ヒット予想手段を備える。
【００１２】
また、前記マルチスレッドプロセッサは、前記リード命令のメモリ上の命令アドレスを変換したエントリに前記リード命令の実行時のオペランドキャッシュミス／ヒットの履歴を記憶した履歴テーブルを用いて、該履歴テーブルの前記リード命令のメモリ上の命令アドレスを変換したエントリに記憶されたオペランドキャッシュミス／ヒットの履歴に基づいて前記リード命令実行時のオペランドキャッシュミス／ヒットを予測する履歴テーブルを用いたオペランドキャッシュミス／ヒット予想手段を備える。
【００１３】
そして、前記マルチスレッドプロセッサは、リード命令の実行時のオペランドキャッシュミス／ヒットによりカウント値がアップダウンするグローバルカウンタをさらに用いることによって前記履歴テーブルに記憶された前記リード命令のメモリ上の命令アドレスを変換したエントリに記憶されたオペランドキャッシュミス／ヒットの履歴と前記グローバルカウンタの値に基づいて、該命令がオペランドキャッシュミス／ヒットを予想するグローバルカウンタを用いたオペランドキャッシュミス／ヒット予想手段を備える。
【００１４】
上記より、オペランドキャッシュミス／ヒット予想を行う事が可能である。
一方で、スレッドの制御においては、パイプラインのリード命令の読み込み先メモリアドレスの決定前において、メモリからの読み込み時の命令あるいは該パイプラインに投入されているスレッドの命令の種別を判定し、前記判定された命令の種別に応じてスレッドの制御するスレッド制御方法を備える。
【００１５】
前記マルチスレッドプロセッサはリード命令のオペランドキャッシュミス／ヒット予想手段を備え、前記メモリからの読み込み時の命令あるいはパイプラインに投入されているスレッドの命令の種別が前記リード命令であったとき、前記オペランドキャッシュミス／ヒット予想手段により前記リード命令のオペランドキャッシュミス／ヒットを予想し、オペランドキャッシュミスが予想されたときにスレッドを制御するスレッド制御方法を備える。
【００１６】
上記により、スレッドの制御が可能となる。
マルチスレッドプロセッサにおいては、命令プレデコーダとスレッド制御回路を備え、前記命令プレデコーダは命令パイプラインのリード命令の読み込み先メモリアドレスの決定前において、メモリからの読み込み時の命令あるいは該命令パイプラインに投入されているスレッドの命令の種別を判定して前記スレッド制御回路に信号を通知し、前記スレッド制御回路は、前記通知された命令の種別に基づいてスレッド制御回路にスレッドの制御のイベントが発生したことを通知する手段を備える。
【００１７】
また、前記マルチスレッドプロセッサは、リード命令のオペランドキャッシュミス／ヒット予想手段を備え、前記スレッド制御回路は、前記命令プレデコーダから通知された命令の種別が前記リード命令のとき、前記オペランドキャッシュミス／ヒット予想手段により前記リード命令のオペランドキャッシュミス／ヒットを予想し、オペランドキャッシュミスが予想されるときに、前記スレッド制御回路にスレッドを制御するイベントが発生したことを通知する手段を備える。
【００１８】
以上より、メモリからの読み込み時の命令あるいはパイプラインにおける命令の種別を判定し、命令がリード命令であった場合にオペランドキャッシュミス／ヒットを予想し、該リード命令がキャッシュミスと予測されることでスレッドを制御することが可能となる。
【００１９】
本発明の主たる前提としては、ある特定の命令アドレスのリード命令が過去複数回連続でキャッシュミスをしていたならば、そのリード命令を実行する際には再度キャッシュミスをすると考える点にある。
【発明の効果】
【００２０】
本発明によれば、マルチスレッドプロセッサにおけるパイプラインのリード命令の読み込み先メモリアドレスの決定前にリード命令のオペランドキャッシュミス／ヒットを予想する事ができる。そして、マルチスレッドプロセッサにおけるパイプラインのリード命令の読み込み先メモリアドレスの決定前にリード命令のオペランドキャッシュミスを予想する事で従来よりも早い段階でのスレッドの制御を行う事ができ、パイプラインのストールを大幅に解消し、なおかつ命令実行の高速化を実現できる。
【００２１】
また、前記オペランドキャッシュミス／ヒット予想結果によりリード命令がオペランドキャッシュミスと予測される場合は、２次キャッシュや３次キャッシュといった遅いキャッシュメモリやメインメモリ等にアクセスする事でレイテンシが長くなる事が予想でき、一方でオペランドキャッシュヒットと予測されれば、一次キャッシュからデータを読み込む事でレイテンシが短くなる事が予想できる。つまり、本発明のオペランドキャッシュミス／ヒット予想を用いる事でレイテンシの長短を予想する事ができる。
【００２２】
さらに、バスを介してメモリにアクセスする場合(例えば、他のプロセッサと共有しているメモリにアクセスする場合など)において、オペランドキャッシュミスすると予想される事によって、バスを介してアクセスを行うメモリに対するリード命令であると予想でき、バスの使用を早い段階で想定し、効率的なスケジューリングを行うことが可能である。
【００２３】
また、本発明の他の形態の１つとして、１クロックから数クロック毎にスレッドを切り替えていき高速な動作を目指すプロセッサである細粒度マルチスレッディングプロセッサの場合においてもオペランドキャッシュミス／ヒット予想でオペランドキャッシュミスと予想された時に、オペランドキャッシュミスと予想されたスレッドでの命令実行を早い段階で止めさせ、オペランドキャッシュミスすると予想されたスレッドへのスレッドを制御し、やめさせる事でパイプラインのストールを事前に解消し、高速な動作をする事が可能となる。
【発明を実施するための最良の形態】
【００２４】
プロセッサがメモリからデータを読み込む際に、オペランドキャッシュミスしてレベルの高いキャッシュメモリ(例えば、二次キャッシュ、三次キャッシュなど)もしくはメインメモリ等からの読み込みでレイテンシが長くかかる読み込みの事を「ハイコストな読み込み」、オペランドキャッシュヒットしてレベルの低いキャッシュメモリ(例えば、一次キャッシュ)などの読み込みでレイテンシが短い読み込みの事を「ローコストな読み込み」として定義し、以下で用いる事とする。
【００２５】
以下では、図面を参照しながら本発明の一態様について説明する。
図１は、本発明のオペランドキャッシュミス／ヒット予想によるスレッド切り替えの全体構成図である。以下に、本発明のオペランドキャッシュミス／ヒット予想によるスレッド制御の構成を説明する。
【００２６】
本発明は、マルチスレッドプロセッサでスレッドの命令を実行しているパイプライン（ａ）、前記命令の種別がリード命令か否かを判定するリード命令判定回路（ｂ）、リード命令が実行された時に命令の命令アドレスに関連づけてハイコストな読み込みかローコストな読み込みかをエントリに記憶している履歴テーブルを備えている履歴回路（ｃ）、ある命令アドレスのリード命令が実行された時にハイコストな読み込みかローコストな読み込みかを数値化しカウントするグローバルカウンタを備えているグローバルカウンタ回路（ｄ）、命令の命令アドレスに対応するアドレス別履歴およびグローバルカウンタから、リード命令の読み込み先がハイコストな読み込みかローコストな読み込みかを予想する予想回路（ｅ）、スレッドを制御する為のスレッド制御回路（ｆ）、バスのスケジューリングを行うバス調停回路（不図示）を備える事によって構成される。ここで、リード命令判定回路（ｂ）は、フィッチされた命令がリード命令か否かを判定する簡単なデコーダ回路からなり、パイプラインにおけるリード命令の読み込み先メモリアドレスの決定するステージよりも前のいずれかのステージに存在し、リード命令のビット列パターンを記憶した素子からなり、該ビット列パターンとリード命令判定回路が存在するステージに送られてきた命令を比較し、リード命令であるか否かの判定をする。すなわち、リード命令のビット列をみて、それがリード命令であると判定するだけでよく、他の命令のデコードはする必要がないものであり、パイプラインの外側にパイプラインを並行動作するように設けられる。また、履歴回路（c）は、メモリアクセスステージに存在し、リード命令の命令アドレスをハッシュした結果において指し示されるエントリで、同じエントリが指し示されたリード命令のメモリ読み込みがハイコストな読み込みであったかローコストな読み込みであったかを単数あるいは複数アクセス前まで記憶する履歴テーブル、リード命令の命令アドレスをハッシュするハッシュ回路とハッシュ回路の結果を基に履歴テーブルにアクセスするアクセス回路からなる。履歴テーブルは、リード命令のメモリ上のアドレスとそのキャッシュミス／ヒットと対応関係をなしている履歴テーブルである。なお、リード命令の命令アドレスは物理アドレスでも仮想アドレスでもよい。さらに、グローバルカウンタ回路(d)は、メモリアクセスステージに存在し、リード命令によるメモリ読み込みがハイコストな読み込みであったか、ローコストな読み込みであったかを記憶するグローバルカウンタ、リード命令によるメモリ読み込みがハイコストであったかローコストな読み込みであったかによりグローバルカウンタを増減させる演算回路、グローバルカウンタにアクセスするアクセス回路からなる。そして、予想回路はプロセッサ内に存在し、履歴テーブルを読んだ結果に基づいてハイコストな読み込みであるかローコストな読み込みであるかを判定する履歴テーブル判定回路、グローバルカウンタを読んだ結果に基づいてハイコストな読み込みであるかローコストな読み込みであるかを判定するグローバルカウンタ判定回路、さらに履歴回路のオペランドキャッシュミス／ヒット予想とグローバルカウンタ回路のオペランド��ャッシュミス／ヒット予想を並列に実行する場合において履歴テーブル判定回路の結果およびグローバルカウンタ判定回路の結果に基づいてハイコストな読みであるかローコストな読みであるかを判定する判定回路からなり、オペランドキャッシュミス／ヒット予想結果が、命令にキャッシュミスすると予想された場合に、スレッド制御回路にスレッドを制御するように信号を通知するスレッド制御信号通知回路からなる。また、スレッド制御回路はプロセッサ内に存在し、送られてきた信号を受け取ってスレッドを制御する回路からなる。
【００２７】
図２は、本発明のオペランドキャッシュミス／ヒット予想によるスレッド制御の簡易フローチャート図を示しており、オペランドキャッシュミス／ヒット予想によるスレッド制御方法を以下で説明する。
【００２８】
マルチスレッドプロセッサにおけるパイプライン（図１ａ）のリード命令の読み込み先メモリアドレスの決定前に、メモリからの読み込み時の命令あるいは該パイプラインに投入されているスレッドの命令の種別をリード命令判定回路（図１ｂ）でリード命令のビット列によってリード命令か否かを判定し（Ａ１）、リード命令であった場合はオペランドキャッシュミス／ヒット予想回路（図１ｅ）で該命令の命令アドレスをキャッシュメモリから読み込み（Ａ２）、読み込んだ命令アドレスを履歴回路（図１ｃ）に送る。命令アドレスは履歴回路（図１ｃ）で受け取られハッシュ関数などを用いてエントリに変換されることで、該命令の実行時のオペランドキャッシュミス／ヒットの履歴を記憶してある履歴テーブル内で過去に同じ命令アドレスを変換したエントリの位置を特定する（Ａ３）。オペランドキャッシュミス／ヒット予想回路（図１ｅ）では、履歴回路（図１ｃ）からの該命令に対応する履歴テーブル内の過去のオペランドキャッシュミス／ヒットの履歴を参照する事によって該命令がキャッシュミスするかキャッシュヒットするかを予想する（Ａ４）。ここでキャッシュミスすると予想された場合は、更に予想精度を向上する為にグローバルカウンタ回路（図１ｄ）のグローバルカウンタを参照して（Ａ５）、該命令がキャッシュミスするかキャッシュヒットするかを予想する（Ａ６）。ここでもキャッシュミスすると予想された場合には、命令プレデコーダがスレッド制御回路（図１ｆ）に信号を与えてスレッドの制御を行う（Ａ７）。ここにおける、履歴回路のキャッシュミス／ヒット予想とグローバルカウンタ回路のキャッシュミス／ヒット予想は並列に実行することも可能である。
【００２９】
図３は、マルチスレッドプロセッサにおけるパイプライン（図１ａ）のリード命令の読み込み先メモリアドレスの決定前に命令をリード命令か否かを判断し、リード命令であった場合にオペランドキャッシュミス／ヒットを予想し、オペランドキャッシュミスであったならばスレッドの制御を行う事でパイプライン（図１ａ）のストールを解消する為のフローチャート図である。以下、図３のフローチャート図の詳細な説明を図１のブロック図を参照しながら説明する。
【００３０】
はじめに、パイプライン（図１ａ）上のリード命令の読み込み先メモリアドレスの決定前(例えば、データがキャッシュに読み込まれた段階、あるいはデコードされる前の段階) においてメモリからの読み込み時の命令あるいは該パイプラインに投入されているスレッドの命令がその命令の種別を判定する為にリード命令判定回路（図１ｂ）に送られる事で、該命令とプロセッサのリード命令のビット列パターンを比較する事によって該命令がリード命令か否かを判断する（Ｂ１）。ここで、該命令がリード命令と判断される場合は、オペランドキャッシュミス／ヒット予想回路（図１ｅ）に該命令の命令アドレスを送るように促す。一方で、該命令がリード命令と判断されない場合は、パイプライン（図１ａ）上の該命令を通常どおりに実行する。
【００３１】
次に、オペランドキャッシュミス／ヒット予想回路（図１ｅ）は、該命令の命令アドレスを取得した（Ｂ２）後、取得した命令アドレスを履歴回路（図１ｃ）に送る（Ｂ３）。
ここにおける、履歴回路（図１ｃ）は、リード命令が実行された際のリード命令の命令アドレスを一定のアルゴリズム(例えば、ハッシュ関数)で変換した結果が示すエントリに、前記リード命令が実行された時にハイコストだったかローコストであったかの判定結果を１アクセスあるいは複数アクセス分記憶している履歴テーブルによって構成されており、記憶する履歴の数はアドレス別アクセス履歴の容量、エントリ数、マッピング法などによって決められる。
【００３２】
履歴回路（図１ｃ）では、前記取得した命令アドレスから例えばハッシュ関数を用いたダイレクトマップ方式やnウェイセットアソシエィテブなどのメモリの局所性を利用した方式などによって該命令アドレスをエントリに変換することにより（Ｂ４）、該命令に対応する過去に同じ命令アドレスを変換したエントリに前記命令の実行時のオペランドキャッシュミス／ヒットの履歴を記憶した履歴テーブル内における位置を特定し参照し（Ｂ５）、計算されたエントリのビット列をオペランドキャッシュミス／ヒット予想回路（図１ｅ）に送る。
【００３３】
オペランドキャッシュミス／ヒット予想回路（図１ｅ）では、履歴回路（図１ｃ）から送られてきたエントリのビット列を読み込み（Ｂ６）、そのビット列によって該命令がハイコストな傾向にあるかローコストな傾向にあるかを判断する（Ｂ７）。ここで、ビット列がハイコストな傾向でない場合は、ローコストなリード命令と認識し、オペランドキャッシュヒットすると予想する事（Ｂ８）で、パイプライン（図１ａ）上の命令を通常どおりに実行する。一方で、ピット列がハイコストな傾向である場合は、オペランドキャッシュミスをするリード命令であると予想する。つまり、ここでは履歴回路（図１ｃ）から該命令の命令アドレスに対応するアクセス履歴を読み込み、記憶されている過去の数アクセスにおいて該命令がハイコストであるかローコストであるかを判断する事でオペランドキャッシュミス／ヒットを予想している。
【００３４】
ここで、オペランドキャッシュミスを予想された該命令のオペランドキャッシュミス／ヒット予想精度の向上をはかる為に、さらに、グローバルカウンタ回路（図１ｄ）のグローバルカウンタを用いる。
【００３５】
グローバルカウンタは、値を保持する記憶素子で構成されており、記憶される値は最大値と最小値を持っている。このグローバルカウンタでは、例えば、リード命令が実行された時に、ローコストな読み込みであった場合、グローバルカウンタの値を任意に設定した値だけを増やし、ハイコストな読み込みであった場合にグローバルカウンタの値を任意に設定した値だけを減らすと言うようなカウント値のアップダウンの手法をとる事で過去に実行されたリード命令を参考にパイプライン（図１ａ）上のリード命令にカウント値をつける事ができる。また、グローバルカウンタのカウンタ値は、リード命令が実行された時に、ローコストな読み込みであった場合、グローバルカウンタの値を任意に設定した値だけを減らし、ハイコストな読み込みであった場合にグローバルカウンタの値を任意に設定した値だけを増やすとしても良い。
【００３６】
オペランドキャッシュミス／ヒット予想回路（図１ｅ）で、上記の履歴回路（図１ｃ）でキャッシュミスをすると予想された該命令に対応するグローバルカウンタのカウント値の読み込みを行い（Ｂ９）、該命令がハイコストなカウント値であるか否かを判断する（Ｂ１０）。もし、カウント値がグローバルカウンタで任意に設定したハイコストの基準値に至っていない場合は、ローコストなリード命令と認識し、オペランドキャッシュヒットすると予想する事（Ｂ１１）で、パイプライン（図１ａ）上の命令を通常どおりに実行する。一方で、カウント値がハイコストな基準値に至っている場合は、ハイコストなリード命令と認識し、リード命令がオペランドキャッシュミスすると予想する（Ｂ１２）。
【００３７】
次に、履歴回路（図１ｃ）とグローバルカウンタ回路（図１ｄ）の両方で該命令のオペランドキャッシュミスを予想された結果をもとに命令プレデコーダはスレッド制御回路（図１ｆ）にスレッドの制御を行うように信号を送る（Ｂ１３）。スレッド制御回路（図１ｆ）では、送られてきた信号によって異なったスレッドを読み込む為の設定を行いスレッドの制御を行う（Ｂ１４）。
【００３８】
このように、履歴回路（図１ｃ）とグローバルカウンタ回路（図１ｄ）を用いる事によってリード命令の読み込み先メモリアドレスの決定前に該命令がリード命令であった場合にオペランドキャッシュミス／ヒットする事を予想でき、該命令のオペランドキャッシュミスが予想された結果を利用しスレッドを制御する事でマルチスレッドプロセッサのリード命令の読み込み先メモリアドレスの決定前にキャッシュミスによって生じるパイプライン（図１ａ）のストールに対処する事ができる。
【００３９】
本発明における実施態様の一つとして、前記オペランドキャッシュミス／ヒット予想とオペランドキャッシュミス予想によるスレッドを制御する処理は１クロックで行われる事が望ましい。
【００４０】
本発明における実施態様の一つとして、パイプライン（図１ａ）上にリード命令判定回路（図１ｂ）およびキャッシュミス／ヒット予想回路（図１ｃ）を備える場合は、命令をパイプライン（図１ａ）に読み込んだ直後に実行されるステージが望ましい。また、パイプライン（図１ａ）に読み込まれた命令は予想回路による予想の対象とし、ハイコストな読み込みと予想された命令がある場合はスレッド制御回路（図１ｆ）によって命令をパイプライン（図１ａ）に読み込むスレッドを変更するようにしても良い。
【００４１】
本発明における他の実施態様の一つとして、ある特定のレベルのキャッシュメモリに予想回路を備える場合は、前記キャッシュメモリにプロセッサに対する命令が読み込まれた場合に、読み込まれた命令をオペランドキャッシュミス／ヒット予想の対象として、ハイコストな読み込みであると予想された場合は、スレッド制御回路（図１ｆ）によって読み込むスレッドを変更し、最も低いレベルのキャッシュにデータが存在しない場合は次に低いレベルのキャッシュへの読み込みを始めるようにしても良い。
【００４２】
本発明におけるさらなる実施態様の一つとして、履歴回路（図１ｃ）、グローバルカウンタ回路（図１ｄ）はリード命令を受けてメモリもしくはキャッシュメモリにアクセス要求を発行するステージであるメモリアクセスステージに備える事が望ましい。また、履歴回路（図１ｃ）、グローバルカウンタ回路（図１ｄ）はハードウェアで切り替えが可能なスレッド毎に備える事にしても良い。例えば、プロセッサにおいて、それぞれスレッド番号が付与されている各スレッドに履歴回路（図１ｃ）およびグローバルカウンタ（図１ｄ）を設けプロセッサによってスレッドを切り替える事としてもよい。
【００４３】
本発明における実施態様の一つとして、アクセス履歴内のテーブル数、過去何回のアクセス分までアクセス履歴として記録するかはプロセッサの設計および予想回路の結果の使用目的で変える事が可能である。
【００４４】
本発明における実施態様の一つとして、リード命令と判断されたパイプライン（図１a）上にある命令がハイコストな読み込みか否かの予想に用いるのであればアクセス履歴は過去８アクセス分を記憶するだけで十分である。また、より高い確率でハイコストな読み込みか否かの予想に用いるのであればアクセス履歴は更に多くのアクセス分を記憶する事が必要となる。本発明における実施態様の一つとしては、履歴回路（図１ｃ）は３２テーブル、過去12アクセス分のアクセス履歴を記憶する事が望ましい。
【００４５】
また、本発明における実施態様の一つとして、リード命令と判断されたパイプライン（図１ａ）上にある命令が履歴回路（図１ｃ）における該命令の命令アドレスをハッシュ関数などで変換したエントリにキャッシュミス／ヒットを記憶している履歴テーブルを参照して、例えばある該命令のアクセス履歴の全てがハイコストな読み込みだった場合は、強いハイコストな読み込みであると予想し、該命令のアクセス履歴の過去数回のみがハイコストな読み込みであった場合は、弱いハイコストな読み込みであると予想とするようにハイコストな読み込みの予想のレベルを段階分けしても良い。
【００４６】
また、本発明における実施態様の一つとして、グローバルカウンタの最小値を０、最大値を１５とし、リード命令が実行された時にローコストな読み込みであった場合に加算する値を１とし、ハイコストな読み込みであった場合に減算する値は２とする構成が望ましい。
【００４７】
次に、本発明における実施態様の一つとして、次回のリード命令に対してのオペランドキャッシュミス／ヒット予想の判断材料として反映させる為に、オペランドキャッシュミス／ヒット予想されて実行されたリード命令のオペランドキャッシュミス／ヒットの結果を履歴回路（図１ｃ）における履歴テーブルへの書き込み、グローバルカウンタ回路（図１ｄ）におけるグローバルカウンタへの書き込みを行うことでリード命令のキャッシュミス／ヒットの実行履歴を記憶するプロセスを示す（図１を参照）。
【００４８】
パイプライン（図１ａ）上でオペランドキャッシュミス／ヒットの予想されたリード命令が実行される事によって実際にオペランドキャッシュミスしたかオペランドキャッシュヒットしたかの実行結果が生じる。前記実行結果に基づいて、パイプライン（図１ａ）上のメモリアクセスステージにおいて前記実行されたリード命令に応じた命令アドレスをハッシュ関数などで変換したエントリと該実行結果を履歴回路（図１ｃ）にある履歴テーブル内の対応しているエントリに書き込み、同様にリード命令に応じた該実行結果をグローバルカウンタ回路（図１ｄ）のグローバルカウンタでカウントすることで次回のリード命令に対してのオペランドキャッシュミス／ヒット予想の判断材料として反映する。
【００４９】
現在、マルチスレッディング技術には粗粒度マルチスレッディングと細粒度マルチスレッディングとがある。そこで、本発明の方法を用いる事で従来法と比較して粗粒度および細粒度マルチスレッディングプロセッサにおけるオペランドキャッシュミスによるパイプラインのストールの大幅な解消をし、プロセッサの高速化を実現できる事を図４と図５で示す。
【００５０】
図４では、粗粒度マルチスレッディング機構においてオペランドキャッシュミスによってパイプラインがストールする時の本発明を用いてオペランドキャッシュミスが予想される事によるスレッド切り替えのスレッド制御方法と従来のスレッド切り替えのスレッド制御方法との比較を例示している。
【００５１】
図４の(A)では、本発明の方法および従来法ともにプロセッサにおけるキャッシュのパイプラインにおいて命令が進行してパイプライン処理が行われている様子が示されている。
【００５２】
図４の(B)では、命令が図４の(A)から複数クロック進んだ時のスレッド１における命令のオペランドキャッシュミス予想時の状態を示しており、本発明の方法ではパイプラインのリード命令の読み込み先メモリアドレスの決定前にスレッド１における命令のオペランドキャッシュミスが予想する事ができスレッド１からスレッド２へのスレッドの切り替えを実行する。一方で従来法では、パイプライン上を命令が進行してパイプライン処理が行われている様子が示されている。
【００５３】
図４の(C)では、スレッド１における命令のオペランドキャッシュミスを予想された図４の(B)後に命令が３クロック進んだパイプライン処理進行時の状態を示しており、本発明の方法ではパイプラインのストールが起こる前にスレッド１からスレッド２へのスレッドの切り替えを実行した為にオペランドキャッシュミスが起こると予想されるスレッド１の使用をやめている様子が示されている。一方で、従来法では、パイプライン上を命令が進行してパイプライン処理が行われている様子が示されている。
【００５４】
図４の(D)では、命令が図４の(C)から４クロック進んだスレッド１における命令のオペランドキャッシュミスによるパイプラインのストール時の状態を示しており、本発明の方法ではあらかじめ命令のスレッド１でのオペランドキャッシュミスを予想しスレッド１からスレッド２へスレッドを切り替えていた為にストール時にも命令実行が続けられる状態となっている。一方で、従来法では、スレッド１でパイプラインのストールが突然起こる為にスレッド１における命令実行が一時的に停止し、スレッド１からスレッド２への切り替えを行う。
【００５５】
図４の(E)では、命令が図４の(D)から３クロック進んだスレッド１における命令のオペランドキャッシュミスによるパイプラインのストール直後の状態を示しているが、本発明の方法ではあらかじめ命令のスレッド１のオペランドキャッシュミスを予想しスレッド１からスレッド２へスレッドを切り替えていた為にスレッド１のパイプラインのストール直後にも命令実行がスムーズに続けられパイプライン処理を実行している。一方で、従来法では、既にスレッド１でパイプラインのストールが起こっている為に命令実行が一時的に停止しており、スレッド切り替えた先のスレッド２の命令の進行は６クロック遅くなっている。
【００５６】
以上より、本発明のパイプラインのリード命令の読み込み先メモリアドレスの決定前でのキャッシュミス予想によるスレッド切り替えを用いる事で、粗粒度マルチスレッドプロセッサにおけるパイプラインのストールによる命令実行の遅れを大幅に解消する事ができると同時にプロセッサの高速化を可能にする事ができる。
【００５７】
図５では、細粒度マルチスレッディング機構においてオペランドキャッシュミスによってパイプラインがストールする時の本発明を用いてキャッシュミス予想される事によるスレッド切り替えのスレッド制御方法と従来のキャッシュミス予想によるスレッド切り替えのスレッド制御方法との比較を例示している。
【００５８】
図５の(A)では、本発明の方法および従来法ともにキャッシュのパイプラインにおいて命令が進行してパイプライン処理が行われている様子が示されている。
図５の(B)では、命令が図５(A)から複数クロック進んだ時にスレッド１における命令のオペランドキャッシュミス予想時の状態を示しており、本発明の方法ではパイプラインのリード命令の読み込み先メモリアドレスの決定前にスレッド１における命令のキャッシュミスを予想する事ができ、スレッド１におけるパイプラインのストールが起こる前にスレッドの切り替えを実行し、オペランドキャッシュミスが起こると予想されるスレッド１の使用をやめる。一方で従来法では、パイプライン上を命令が進行してパイプライン処理が行われている様子が示されている。
【００５９】
図５の(C)では、命令が図５の(B)から４クロック進んだスレッド１における命令のオペランドキャッシュミスを予想された後のパイプライン処理進行時の状態を示しており、本発明の方法ではスレッド１におけるパイプラインのストールが起こる前にスレッドの切り替えの制御を実行し、オペランドキャッシュミスが起こると予想されるスレッド１にスレッドが切り替わらないようにスレッド１の使用をやめて、スレッド２の命令実行を調整している。一方で、従来法では、パイプライン上を命令が進行してパイプライン処理が行われている様子が示されている。
【００６０】
図５の(D)では、命令が図５の(C)から２クロック進んだスレッド１における命令のオペランドキャッシュミスによるパイプラインのストール時の状態を示しており、本発明の方法ではあらかじめスレッド１における命令のオペランドキャッシュミスを予想しスレッドを切り替えの制御をしてスレッド１を使用しないようにしていた為にスレッド１のパイプラインのストール時にも命令実行が続けられる状態となっている。一方で、従来法では、スレッド１でパイプラインのストールが突然起こる為にスレッド１で命令実行が一時的に停止しており、スレッド切り替えの制御を行うことでスレッド１の使用をやめ、スレッド２の命令実行の調整を行う。
【００６１】
図５の(E)では、命令が図５の(D)から４クロック進んだスレッド１における命令のオペランドキャッシュミスによるパイプラインのストール直後の状態を示しているが、本発明の方法ではあらかじめスレッド１での命令のオペランドキャッシュミスを予想しスレッド切り替えの制御をしてスレッド１の使用をやめていた為にスレッド１でのパイプラインのストール直後にも命令実行がスムーズに続けられパイプライン処理が進行している。一方で、従来法では、既にスレッド１でパイプラインのストールが起こっている為に命令実行が一時的に停止している命令がいくつかあり、パイプライン処理は進行しているもののスレッド切り替えの制御をしたスレッド２で命令実行を調整された命令が到達するまで命令実行数は本発明に比べて少なくなっている。
【００６２】
以上より、本発明のパイプラインのリード命令の読み込み先メモリアドレスの決定前のオペランドキャッシュミス予想によるスレッド切り替えの制御を用いる事で細粒度マルチスレッドプロセッサにおけるパイプラインのストールによる命令実行の遅れを大幅に解消する事ができると同時にプロセッサの高速化を可能にする事ができる。
【実施例１】
【００６３】
本実施例では、履歴テーブルとグローバルカウンタを用いてプロセッサのパイプラインのリード命令の読み込み先メモリアドレスの決定前のデコード段階でリード命令のメモリアクセスのオペランドキャッシュミス／ヒット予想を行うことで、予想精度およびオペランドキャッシュミスが起こっている全体に対してなされるオペランドキャッシュミス予想の割合、実用性を有する良い設定を求める事とする。
【００６４】
ここでのオペランドキャッシュミス／ヒットは、L１データキャッシュにアクセスする際に最小限必要なレイテンシでアクセスできない場合、つまりレイテンシが長く他の動作の遅いメモリからデータを読み込む必要があるとされる時はオペランドキャッシュミス、最小限必要なレイテンシでアクセスできる場合、つまりレイテンシが短くL１データキャッシュからデータ読み込みができる時はオペランドキャッシュヒットと定義した。評価には履歴テーブル機能、及びグローバルカウンタ機能を追加したSimpleScalar-3.0dを用いた。そして、デコード時に履歴テーブルに対応するエントリの値およびカウンタ値を記憶し、オペランドキャッシュヒット時にはエントリ値およびカウンタ値で個々にオペランドキャッシュヒット数を記憶する配列の値を増加させ、一方でオペランドキャッシュミス時にはエントリ値およびグローバルカウンタ値で個々にオペランドキャッシュミス数を記憶する配列の値を減少させた。
【００６５】
ベンチマークプログラムとしてMIBenchを用い、AES、basicmath、bf、bitcnts、crc、fft、gs、gsm、ispell、jpeg、lame、qsort、raw、search、sha、susan、tiffの計１７種類のプログラムを使用し、入力ファイル、使用する機能の違いなど５６パターンで評価を行った。履歴テーブルは過去Mアクセスまで記憶し、エントリ数をNとすると(M,N)＝(3,128)、(6,64)、（12,32）の３通り(表１におけるTable Entry)で評価を行った。グローバルカウンタはビット幅A、オペランドキャッシュヒット時にB増加するとし、オペランドキャッシュミス時にC減少するとして、(A,B,C)＝(2,1,1)、(4,1,2)の２通り、およびグローバルカウンタ機能を使用しないnoneの計３通り(表１におけるCounter Type)で評価した。ここで採用した(2,1,1)は標準的な分岐予想に使用される値であり、(4,1,2)は従来のスケジューリング段階でオペランドキャッシュミス／ヒット予想する時に使用された値を参考に決定した。
【００６６】
評価項目として、オペランドキャッシュヒット予想したオペランドキャッシュヒットの正解率PHAH-Ratio、およびオペランドキャッシュミス予想したオペランドキャッシュミスの正解率PMAM-Ratio、全オペランドキャッシュミスに対するオペランドキャッシュミスの割合PMAM/AllM-Ratio、全体の予想正解率All-Ratioを設けた。
【００６７】
以下に、オペランドキャッシュミス／ヒット予想の評価を行った結果を表１で示す。
【００６８】
【表１】
2008015562.tif 000003
【００６９】
MIBenchプログラムの全てのリード命令のオペランドキャッシュミスリード割合は1.6％となった（不表示）。
表１においてMIBenchプログラムを使用し、履歴テーブルのエントリ数(Table Entry)別のオペランドキャッシュヒット予想したオペランドキャッシュヒット正解率PHAH-Ratioは32=64=128であり、オペランドキャッシュミス予想したオペランドキャッシュミス正答率PMAM-Ratioは32>68>128でいずれも予想精度は94.0％を超しており予想精度は高精度である事が示されている。一方で全オペランドキャッシュミスに対するオペランドキャッシュミスの割合PMAM/All-Ratio、全体の予想正解率All-Ratioは128>68>32であり、履歴テーブルのエントリ数を増やす事によって全体として起こるオペランドキャッシュミスに対して予想するオペランドキャッシュミスの数を増やせる事が示されている。
【００７０】
表１においてカウンタタイプ(Counter Type)別のオペランドキャッシュヒット予想したオペランドキャッシュヒット正解率PHAH-Ratioおよびオペランドキャッシュミス予想したオペランドキャッシュミス正解率PMAM-Ratioは(4,1,2)>(2,1,1)>noneの結果となりいずれも94.0％を超しており高精度なオペランドキャッシュミス／ヒット予想を行える事が示されている。また、表１において、全オペランドキャッシュミスに対するオペランドキャッシュミスの割合PMAM/AllM-Ratio はnone>(4,1,2)>>>(2,1,1)、全体の予想正解率All-Ratioはnone>(4,1,2)>(2,1,1)であり(2,1,1)の実用性はほとんどない。つまり、標準的な分岐予想で使用される値を本発明の方法で適用しても全体として起こっているオペランドキャッシュミスに対して予想されるオペランドキャッシュミスは少数であり、予想精度は98.8％と良いものの実用性に欠けていることが示されている。逆にnoneと(4,2,1)の場合では全体として起こっているオペランドキャッシュミスに対して半分くらいオペランドキャッシュミスを予想する事ができている。
【００７１】
表１から、実用性を有する良い設定は、オペランドキャッシュミス予想したオペランドキャッシュミス正解率PMAM-Ratioを重視するならば履歴テーブルのエントリ数を32、カウンタ設定を(4,1,2)とする事が良い。全オペランドキャッシュミスに対するオペランドキャッシュミスの割合PMAM/All-Ratio、全体の予想正解率All-Ratioを重視するならば履歴テーブルのエントリ数を128、カウンタを使用しないとする。
【００７２】
また、SimpleScalar-3.0dを改造したものを使用し、MIBenchによる評価を行う事でオペランドキャッシュミスと予想したリード命令の99.5％がオペランドキャッシュミスをした(不表示)。
【００７３】
以上より、デコード段階におけるリード命令によるメモリアクセスのオペランドキャッシュミス／ヒットを高精度で予想できる事が確かめられた。
また、本発明を用いた結果は、従来のパイプラインのスケジュール段階で同様のグローバルカウンタを用いてオペランドキャッシュミス／ヒット予想したAlpha21264の予想精度の97％と同程度の精度で予想する事が可能となった。
【００７４】
本実施例において、パイプラインのデコード段階で高精度のオペランドキャッシュミス予想が得られ、予想結果に基づいてスレッドの切り替えを行う事で従来のスケジュール段階よりも早い段階でスレッドが切り替わる事によってパイプラインのストールを解消する事が可能となる。
（付記１）
マルチスレッドプロセッサにおけるメモリ読み込み命令のオペランドキャッシュミス／ヒット予想方法において、
命令パイプラインにおけるリード命令の読み込み先メモリアドレスの決定前において、メモリからの読み込み時の命令あるいは該命令パイプラインに投入されているスレッドの命令の種別を判定し、
前記判定結果が前記メモリ読み込み命令であったときに該メモリ読み込み命令実行時のオペランドキャッシュミス／ヒットを予測する、
ことを特徴とするオペランドキャッシュミス／ヒット予想方法。
（付記２）
前記マルチスレッドプロセッサは、前記メモリ読み込み命令のメモリ上の命令アドレスを変換したエントリに前記メモリ読み込み命令の実行時のオペランドキャッシュミス／ヒットの履歴を記憶した履歴テーブルを備え、
該履歴テーブルの前記メモリ読み込み命令のメモリ上の命令アドレスを変換したエントリに記憶されたオペランドキャッシュミス／ヒットの履歴に基づいて前記メモリ読み込み命令実行時のオペランドキャッシュミス／ヒットを予測する、
ことを特徴とする請求項１記載のオペランドキャッシュミス／ヒット予想方法。
（付記３）
前記マルチスレッドプロセッサは、メモリ読み込み命令の実行時のオペランドキャッシュミス／ヒットによりカウント値がアップダウンするグローバルカウンタをさらに備え、
前記履歴テーブルに記憶された前記メモリ読み込み命令のメモリ上の命令アドレスを変換したエントリに記憶されたオペランドキャッシュミス／ヒットの履歴と前記グローバルカウンタの値に基づいて、前記メモリ読み込み命令実行時のオペランドキャッシュミス／ヒットを予測する、
ことを特徴とする請求項２記載のオペランドキャッシュミス／ヒット予想方法。
（付記４）
マルチスレッドプロセッサにおけるスレッド制御方法において
メモリ読み込み命令のオペランドキャッシュミス／ヒット予想手段を備え、
命令パイプラインにおけるリード命令の読み込み先メモリアドレスの決定前において、メモリからの読み込み時の命令あるいは該命令パイプラインに投入されているスレッドの命令の種別を判定し、
前記命令パイプラインに投入されているスレッドの命令の種別が前記メモリ読み込み命令であったとき、前記オペランドキャッシュミス／ヒット予想手段により前記メモリ読み込み命令のオペランドキャッシュミス／ヒットを予想し、
オペランドキャッシュミスが予想されたときにスレッドの制御をする
ことを特徴とするスレッド制御方法。
（付記５）
マルチスレッドプロセッサにおいて、
命令プレデコーダとスレッド制御回路およびメモリ読み込み命令のオペランドキャッシュミス／ヒット予想手段を備え、
前記命令プレデコーダは命令パイプラインにおけるリード命令の読み込み先メモリアドレスの決定前において、メモリからの読み込み時の命令あるいは該命令パイプラインに投入されているスレッドの命令の種別を判定し、前記スレッド制御回路に信号を通知し、
前記スレッド制御回路は、前記命令プレデコーダから通知された命令の種別が前記メモリ読み込み命令のとき、前記オペランドキャッシュミス／ヒット予想手段により前記メモリ読み込み命令のオペランドキャッシュミス／ヒットを予想し、
オペランドキャッシュミスが予想されるときに、前記スレッド制御回路にスレッドの制御をするイベントが発生したことを通知する、
ことを特徴とするマルチスレッドプロセッサ。
（付記６）
前記オペランドキャッシュミス／ヒット予想手段は前記メモリ読み込み命令のメモリ上のアドレスを変換したエントリに前記メモリ読み込み命令の実行時のオペランドキャッシュミス／ヒットの履歴を記憶した履歴テーブルを含み、
該履歴テーブルの前記メモリ読み込み命令のメモリ上のアドレスを変換したエントリに記憶されたオペランドキャッシュミス／ヒットの履歴に基づいて前記メモリ読み込み命令実行時のオペランドキャッシュミス／ヒットを予測し、
オペランドキャッシュミスが予想されたときにスレッドの制御をする、
ことを特徴とする請求項４記載のスレッド制御方法。
（付記７）
前記オペランドキャッシュミス／ヒット予想手段はメモリ読み込み命令の実行時のオペランドキャッシュミス／ヒットによりカウント値がアップダウンするグローバルカウンタをさらに含み、
前記履歴テーブルに記憶された前記メモリ読み込み命令のメモリ上のアドレスを変換したエントリに記憶されたオペランドキャッシュミス／ヒットの履歴と前記グローバルカウンタの値に基づいて、前記メモリ読み込み命令実行時のオペランドキャッシュミス／ヒットを予測し、
オペランドキャッシュミスが予想されたときにスレッドの制御をする、
ことを特徴とする請求項６記載のスレッド制御方法。
（付記８）
前記オペランドキャッシュミス／ヒット予想手段は、前記メモリ読み込み命令のメモリ上のアドレスを変換したエントリに前記メモリ読み込み命令の実行時のオペランドキャッシュミス／ヒットの履歴を記憶した履歴テーブルを含み、
該履歴テーブルの前記メモリ読み込み命令のメモリ上のアドレスを変換したエントリに記憶されたオペランドキャッシュミス／ヒットの履歴に基づいて前記メモリ読み込み命令実行時のオペランドキャッシュミス／ヒットを予測する、
ことを特徴とする請求項５記載のマルチスレッドプロセッサ。
（付記９）
前記オペランドキャッシュミス／ヒット予想手段はメモリ読み込み命令の実行時のオペランドキャッシュミス／ヒットによりカウント値がアップダウンするグローバルカウンタをさらに含み、
前記履歴テーブルに記憶された前記メモリ読み込み命令のメモリ上のアドレスを変換したエントリに記憶されたオペランドキャッシュミス／ヒットの履歴と前記グローバルカウンタの値に基づいて、前記メモリ読み込み命令実行時のオペランドキャッシュミス／ヒットを予測する、
ことを特徴とする請求項８記載のマルチスレッドプロセッサ。
（付記１０）
前記マルチプロセッサが粗粒度マルチスレッディング機構あるいは細粒度マルチスレッディング機構を有する、
ことを特徴とする請求項９記載のマルチスレッドプロセッサ。
（付記１１）
前記メモリ読み込み命令のメモリ上の命令アドレスを変換したエントリに前記メモリ読み込み命令の実行時のオペランドキャッシュミス／ヒットの履歴を記憶した履歴テーブル、およびメモリ読み込み命令の実行時のオペランドキャッシュミス／ヒットによりカウント値がアップダウンするグローバルカウンタをハードウェアで切り替えが可能なスレッド毎に備える
ことを特徴とする、請求項１０記載のマルチスレッドプロセッサ
【図面の簡単な説明】
【００７５】
【図１】キャッシュミス／ヒット予想によるスレッドの制御のフローチャートである。
【図２】キャッシュミス／ヒット予想によるスレッドの制御の全体構成図である。
【図３】キャッシュミス／ヒットによるスレッドの制御の簡易フローチャートである。
【図４】粗粒度マルチスレッディング機構における本発明の方法と従来法との比較図である。
【図５】細粒度マルチスレッディング機構における本発明の方法と従来法との比較図である。
【図１】
2008015562.tif 000004
【図２】
2008015562.tif 000005
【図３】
2008015562.tif 000006
【図４】
2008015562.tif 000007
【図５】
2008015562.tif 000008