(57)【要約】  本発明は、複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサである。パイプライン処理部１〜４は、実行権を得た前記スレッドの前記命令をフェッチするフェッチ部と前記フェッチ部でフェッチされた命令をデコードするデコード部と前記デコード部でデコードされた命令を実行する演算実行部とを備える。命令保持部１４−０，１４−１は、前記実行権を得た前記スレッドの前記ウェイト命令の実行時に、前記ウェイト命令の次に処理する処理命令の命令フェッチの情報を保持する。実行スレッド選択部５は、ウェイト指示に基づき実行すべきスレッドを選択し、前記ウェイト命令の実行時からのウェイト状態が解除された時に、前記命令保持部に保持された前記処理命令の前記命令フェッチの情報に基づき前記処理命令のデコードから実行する。
2020121416.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサであって、
実行権を得た前記スレッドの前記命令をフェッチするフェッチ部と前記フェッチ部でフェッチされた命令をデコードするデコード部と前記デコード部でデコードされた命令を実行する演算実行部とを備えたパイプライン処理部と、
前記実行権を得た前記スレッドの前記ウェイト命令の実行時に、前記ウェイト命令の次に処理する処理命令の命令フェッチの情報を保持する命令保持部と、
ウェイト指示に基づき実行すべきスレッドを選択し、前記ウェイト命令の実行時からのウェイト状態が解除された時に、前記命令保持部に保持された前記処理命令の前記命令フェッチの情報に基づき前記処理命令のデコードから実行する実行スレッド選択部と、
を備えるプロセッサ。
【請求項２】
前記命令保持部は、前記複数のスレッドの個数と同数設けられる請求項１記載のプロセッサ。
【請求項３】
前記デコード部でデコードされた結果が前記ウェイト命令である場合に、前記ウェイト命令に対応するスレッドに対して前記ウェイト指示を出力するウェイト制御部を備え、
前記実行スレッド選択部は、前記ウェイト制御部からの前記ウェイト指示に基づき実行すべきスレッドを選択し、選択された前記スレッドに対応する前記命令保持部に前記処理命令の前記命令フェッチの情報を保持させ、選択された前記スレッドに対して前記ウェイト状態を解除する指示が入力されたとき、選択された前記スレッドに対応する前記命令保持部に保持された前記処理命令の前記命令フェッチの情報に基づき前記処理命令のデコードから実行する請求項２記載のプロセッサ。
【請求項４】
前記命令保持部は、前記複数のスレッドの個数よりも少ない個数設けられ、前記複数のスレッドの内の優先順位が高い前記スレッドにのみ前記命令保持部を割り当てる請求項１記載のプロセッサ。
【請求項５】
前記命令保持部は、前記処理命令が有効か無効かを示すバリッドと前記処理命令に対応するスレッド番号を示すタグとフェッチされた前記処理命令との情報を格納する複数のキャッシュラインを有するキャッシュからなり、
前記デコード部でデコードされた命令が前記ウェイト命令で且つフェッチされた前記処理命令とデコードされた前記処理命令とが同一のスレッドにある場合で且つ前記バリッドに基づき前記複数のキャッシュラインのいずれかのキャッシュラインを選択し、選択されたキャッシュラインに前記フェッチされた前記処理命令を書き込む選択回路と、
前記実行スレッド選択部からウェイト解除すべきスレッドの実行指示を受けると、前記タグと前記ウェイト解除すべきスレッドとが一致する場合で且つ前記バリッドに基づき前記選択されたキャッシュラインから前記フェッチされた前記処理命令を読み出して前記デコード部に出力する判定部と、
を備える請求項１記載のプロセッサ。
【請求項６】
複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理方法であって、
実行権を得た前記スレッドの前記命令をフェッチし、フェッチされた命令をデコードし、デコードされた命令を実行するパイプライン処理を行うステップと、
前記実行権を得た前記スレッドの前記ウェイト命令の実行時に、前記ウェイト命令の次に処理する処理命令の命令フェッチの情報を命令保持部に保持する命令保持ステップと、
ウェイト指示に基づき実行すべきスレッドを選択し、前記ウェイト命令の実行時からのウェイト状態が解除された時に、前記命令保持部に保持された前記処理命令の前記命令フェッチの情報に基づき前記処理命令のデコードから実行する実行スレッド選択ステップと、
を備えるパイプライン処理方法。
【請求項７】
前記命令保持部は、前記複数のスレッドの個数と同数設けられる請求項６記載のパイプライン処理方法。
【請求項８】
前記デコードされた結果が前記ウェイト命令である場合に、前記ウェイト命令に対応するスレッドに対して前記ウェイト指示を出力するウェイト制御ステップを備え、
前記実行スレッド選択ステップは、前記ウェイト指示に基づきスレッドを選択し、選択された前記スレッドに対応する前記命令保持部に前記処理命令の前記命令フェッチの情報を保持させ、選択された前記スレッドに対して前記ウェイト状態を解除する指示が入力されたとき、選択された前記スレッドに対応する前記命令保持部に保持された前記処理命令の前記命令フェッチの情報に基づき前記処理命令のデコードから実行する請求項７記載のパイプライン処理方法。
【請求項９】
前記命令保持部は、前記複数のスレッドの個数よりも少ない個数設けられ、前記複数のスレッドの内の優先順位が高い前記スレッドにのみ前記命令保持部を割り当てる請求項６記載のパイプライン処理方法。
【請求項１０】
前記命令保持部は、前記処理命令が有効か無効かを示すバリッドと前記処理命令に対応するスレッド番号を示すタグとフェッチされた前記処理命令との情報を格納する複数のキャッシュラインを有するキャッシュからなり、
前記デコードされた命令が前記ウェイト命令で且つフェッチされた前記処理命令とデコードされた前記処理命令とが同一のスレッドにある場合で且つ前記バリッドに基づき前記複数のキャッシュラインのいずれかのキャッシュラインを選択し、選択されたキャッシュラインに前記フェッチされた前記処理命令を書き込む選択ステップと、
前記実行スレッド選択ステップからウェイト解除すべきスレッドの実行指示を受けると、前記タグと前記ウェイト解除すべきスレッドとが一致する場合で且つ前記バリッドに基づき前記選択されたキャッシュラインから前記フェッチされた前記処理命令を読み出して前記デコード部に出力する判定ステップと、
を備える請求項６記載のパイプライン処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パイプライン処理するとともに、ウェイト命令を実行するプロセッサ及びパイプライン処理方法に関する。
【背景技術】
【０００２】
プロセッサでは、処理速度を向上するためにパイプライン処理が行われている。パイプライン処理は、命令をフェッチし、命令をデコードして演算を実行する処理であり、命令Ａのフェッチが終わってデコードを開始すると、同時に命令Ｂのフェッチを開始する処理である。【０００３】
即ち、パイプライン処理においては、複数の命令を並行して処理することが行われている。複数の命令は、プロセッサとは別に構成される命令メモリに格納され、任意のアドレスと結び付けられる。【０００４】
パイプライン処理では、実行された命令の結果によっては、その後の命令順や操作が変わることがある。このとき、パイプライン内で処理されている命令を一掃する作業が必要である。これをパイプラインフラッシュと呼ぶ。この例の一つがウェイト（待機）命令を処理する場合である。【０００５】
パイプラインでウェイト命令を実行すると、パイプラインは演算の処理を一旦、停止し、パイプラインフラッシュして、待機する。即ち、ウェイト命令の次の命令は、ウェイト状態が外部から解除されるまで実行しない。そして、ウェイト状態から復帰（起動）する時に、次の命令を最初の「命令フェッチ」からやり直す。【０００６】
次に、図８を参照しながら、従来のウェイト命令実行時のプロセッサのパイプライン処理を説明する。図８において、ＦＥは、フェッチであり、ＤＥはデコードであり、ＥＸは、演算実行であり、ＷＢ１，ＷＢ２は、データのレジスタへの書き込みである。【０００７】
例えば、命令Ｃ１のフェッチが終わってデコードを開始すると、同時にウェイト命令ＷＡＩＴのフェッチを開始する。次に、ウェイト命令ＷＡＩＴのデコードを開始すると、同時に命令Ｃ３をパイプラインフラッシュする。そして、ウェイトを解除して、命令Ｃ３を再フェッチしている。【０００８】
また、特許文献１に記載された従来のウェイト命令を実行するプロセッサが知られている。このプロセッサは、ウェイト命令を備え、ウェイト命令を実行すると、プロセッサ内の処理を停止させる状態であるウェイトステート状態に移行し、ウェイトステート離脱要求信号を受信すると、ウェイトステート状態から離脱し、プログラムカウンタが指し示す命令から引き続き実行する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００８−２９９７４０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、図８に示すパイプライン処理では、ウェイト命令を実行すると、演算の処理を停止して待機し、ウェイト状態から復帰時に、次の命令を命令フェッチからやり直していた。このため、タイムロスが生じ、処理速度が遅くなる。【００１１】
本発明の課題は、タイムロスが生じることを抑制し、処理速度を向上させることができるプロセッサ及びパイプライン処理方法を提供することにある。
【課題を解決するための手段】
【００１２】
本発明に係るプロセッサは、複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサであって、実行権を得た前記スレッドの前記命令をフェッチするフェッチ部と前記フェッチ部でフェッチされた命令をデコードするデコード部と前記デコード部でデコードされた命令を実行する演算実行部とを備えたパイプライン処理部と、前記実行権を得た前記スレッドの前記ウェイト命令の実行時に、前記ウェイト命令の次に処理する処理命令の命令フェッチの情報を保持する命令保持部と、ウェイト指示に基づき実行すべきスレッドを選択し、前記ウェイト命令の実行時からのウェイト状態が解除された時に、前記命令保持部に保持された前記処理命令の前記命令フェッチの情報に基づき前記処理命令のデコードから実行する実行スレッド選択部とを備える。【００１３】
また、本発明のパイプライン処理方法は、複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理方法であって、実行権を得た前記スレッドの前記命令をフェッチし、フェッチされた命令をデコードし、デコードされた命令を実行するパイプライン処理を行うステップと、前記実行権を得た前記スレッドの前記ウェイト命令の実行時に、前記ウェイト命令の次に処理する処理命令の命令フェッチの情報を命令保持部に保持する命令保持ステップと、ウェイト指示に基づき実行すべきスレッドを選択し、前記ウェイト命令の実行時からのウェイト状態が解除された時に、前記命令保持部に保持された前記処理命令の前記命令フェッチの情報に基づき前記処理命令のデコードから実行する実行スレッド選択ステップとを備える。
【発明の効果】
【００１４】
本発明によれば、命令保持部は、実行権を得たスレッドのウェイト命令の実行時に、ウェイト命令の次に処理する処理命令の命令フェッチの情報を保持し、実行スレッド選択部は、ウェイト指示に基づき実行すべきスレッドを選択し、ウェイト命令の実行時からのウェイト状態が解除された時に、命令保持部に保持された処理命令の命令フェッチの情報に基づき処理命令のデコードから実行する。従って、タイムロスが生じることを抑制し、処理速度を向上させることができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、本発明のウェイト命令実行時のプロセッサのパイプライン処理を示す図である。
【図２】図２は、本発明の実施例１に係るプロセッサ内のパイプライン構成図である。
【図３】図３は、従来のプロセッサのマルチスレッドのパイプライン処理を示す図である。
【図４】図４は、実施例１に係るプロセッサのマルチスレッドのパイプライン処理を示す図である。
【図５】図５は、本発明の実施例２に係るプロセッサ内のパイプライン構成図である。
【図６】図６は、本発明の実施例３に係るプロセッサ内のパイプライン構成図である。
【図７】図７は、本発明の実施例３に係るプロセッサ内のキャッシュライン内の情報を示す図である。
【図８】図８は、従来のウェイト命令実行時のプロセッサのパイプライン処理を示す図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施の形態のプロセッサ及びパイプライン処理方法について、図面を参照しながら詳細に説明する。
【００１７】
パイプライン処理は、複数の命令を並行して処理する。以下の実施例では、複数のスレッドに属する命令を処理するマルチスレッドについて説明するが、本発明は、マルタスレッド以外にも適用可能である。
【００１８】
（本発明の概要）
まず、図１に示す本発明のウェイト命令実行時のプロセッサのパイプライン処理を用いて、本発明の概要を説明する。なお、従来の図８に示すパイプライン処理と本発明の図１に示すパイプライン処理とを対比させて説明する。
【００１９】
従来の図８に示すパイプライン処理では、ウェイト命令ＷＡＩＴの次の命令Ｃ３をパイプラインフラッシュし、ウェイト解除時には再フェッチを行っていた。
【００２０】
これに対して、本発明は、図１に示すように、命令Ｃ３をパイプラインフラッシュせず、ウェイト命令ＷＡＩＴの実行ＥＸ時に、ウェイト命令ＷＡＩＴの次の命令Ｃ３の命令フェッチの情報を保持する。
【００２１】
そして、ウェイト命令ＷＡＩＴの実行ＥＸ時からのウェイト状態が解除された時に、保持された命令Ｃ３の命令フェッチの情報に基づき命令Ｃ３のデコードから処理を実行する。
【００２２】
従って、タイムロスが生じることを抑制し、処理速度を向上させることができる。また、ウェイト状態からの起動を早くすることができる。
【００２３】
（実施例１）
次に、本発明のプロセッサ及びパイプライン処理方法の実施例について説明する。図２は、本発明の実施例１に係るプロセッサ内のパイプライン構成図である。実施例１に係るプロセッサは、複数のスレッドを処理し、ウェイト命令を含み前記スレッドのスレッド番号に対応した命令を実行して並行に処理するパイプライン処理を行うプロセッサである。パイプライン処理は、命令フェッチ（Ｆ）１、デコード（Ｄ）２、演算実行（Ｅ）３、結果格納（Ｗ）４からなる。例えば、命令Ａのフェッチが終わってデコードを開始すると、同時に命令Ｂのフェッチを開始する処理である。
【００２４】
命令フェッチ（Ｆ）１は、本発明のフェッチ部に相当し、スレッド（ＴＨ）１１、プログラムカウンタ（ＰＣ）１２、命令メモリ１３、レジスタ１５を有する。レジスタ１５には、コードＴＨ０，ＴＨ１で示される複数の命令バッファ１４−０，１４−１が設けられる。複数の命令バッファ１４−０，１４−１は、複数のスレッドＴＨ０，ＴＨ１と対応して同数個設けられている。
【００２５】
デコード（Ｄ）２は、本発明のデコード部に相当し、セレクタ２０、命令デコーダ２１、ウェイト制御部２２を備える。演算実行（Ｅ）３は、本発明の演算実行部に相当し、レジスタ読み出し部３１、データ読み出し部３２、演算制御部３３を備える。
【００２６】
複数のスレッドＴＨ０〜ＴＨ１は、複数の命令のアドレスと結び付けられている。なお、実施例１では、スレッドを２個としたが、スレッドは、３個以上設けても良い。
【００２７】
命令フェッチ（Ｆ）１において、スレッド（ＴＨ）１１は、フェッチされた命令のスレッド番号である。ＰＣ１２は、現在処理中の命令が格納されている命令メモリ１３上のアドレスである。命令メモリ１３は、ＰＣ１２のアドレスに対応して各スレッド（例えば、ＴＨ１）に属する一連の複数の命令を格納する。
【００２８】
複数の命令バッファ１４−０〜１４−１は、本発明の命令保持部に対応し、複数のスレッドＴＨ０〜ＴＨ１の個数と同数設けられ、実行権を得たスレッドのウェイ命令を実行する時に、ウェイト命令の次に処理する処理命令の命令フェッチの情報を保持する。
【００２９】
セレクタ２０は、実行スレッド選択部５で選択されたスレッドに対応する命令バッファ１４−０又は命令バッファ１４−１を選択する。
【００３０】
命令デコーダ２１は、セレクタ２０によって選択された命令バッファに格納された命令をデコードして、デコード結果をウェイト制御部２２に出力する。ウェイト制御部２２は、命令デコーダ２１からのデコード結果がウェイト命令である場合に、ウェイト命令に対応するスレッドに対してウェイト指示を出力する。
【００３１】
ウェイト指示を入力したスレッドは、実行スレッド選択部５に対してウェイト指示を出力する。実行スレッド選択部５は、ウェイト指示に基づき実行すべきスレッドを選択し、選択されたスレッドに対応する命令バッファ１４−０又は命令バッファ１４−１に対して、ウェイト命令の次に処理する処理命令の命令フェッチの情報を保持させる。
【００３２】
また、スレッドに対してウェイト状態を解除する解除イベントが入力されたとき、スレッドは、実行スレッド選択部５に対してウェイト状態を解除するための解除指示を出力する。
【００３３】
実行スレッド選択部５は、セレクタ２０を制御することにより、選択されたスレッドに対応する命令バッファ１４−０又は命令バッファ１４−１から命令フェッチ情報を読み出して、命令フェッチ情報を命令デコーダ２１に出力させる。
【００３４】
命令デコーダ２１は、命令バッファ１４−０又は命令バッファ１４−１からの命令フェッチの情報に基づき処理命令のデコードから実行する。
【００３５】
レジスタ読み出し部３１は、レジスタ１５に格納されたＴＨ（１１）スレッド番号のレジスタのデータを読み出してレジスタ書き込み部４１に出力する。データ読み出し部３２は、命令デコーダ２１でデコードされた命令のデータを読み出してレジスタ書き込み部４１と演算制御部３３に出力する。演算制御部３３は、データ読み出し部３２で読み出され且つデコードされた命令を実行し、実行結果をレジスタ書き込み部４１に出力する。
【００３６】
加算部２５は、レジスタ１５に格納されたプログラムカウンタＰＣ１２の値を変更して、変更結果をＰＣ１２に出力する。結果格納（Ｗ）４は、データをレジスタに書き込むレジスタ書き込み部４１を有する。
【００３７】
次に、このように構成された実施例１のプロセッサ及びパイプライン処理方法の動作を、図２及び図４を参照しながら詳細に説明する。図２では、スレッドのウェイト命令ＷＡＩＴがフェッチされてから、ウェイト状態から復帰するまでの流れを示している。図４では、スレッドＴＨ１のウェイト命令ＷＡＩＴがフェッチされる例を示している。ここでは、スレッドＴＨ１のウェイト命令ＷＡＩＴについて説明するが、スレッドＴＨ２のウェイト命令ＷＡＩＴの場合もスレッドＴＨ１のウェイト命令ＷＡＩＴの場合と同じある。
【００３８】
まず、命令バッファ１４−０，１４−１には、命令メモリ１３からフェッチされた命令のコードが格納される。実行スレッド選択部５は、命令を実行すべきスレッドＴＨ１を決定して、実行指示をスレッド１１とセレクタ２０とに出力する。これに従って、命令バッファ１４−０，１４−１の内の命令バッファ１４−１がセレクタ２０により選択されて、命令バッファ１４−１から命令デコーダ２１に命令コードが送られる。
【００３９】
命令デコーダ２１により命令がウェイト命令ＷＡＩＴであると判定されると、ウェイト制御部２２からスレッドＴＨ１にウェイト指示が送られる。スレッドＴＨ１は、ウェイト状態になる。実行スレッド選択部５は、ウェイト指示に基づきスレッドＴＨ１を選択し、スレッドＴＨ１に対応する命令バッファ１４−１に、スレッドＴＨ１のウェイト命令ＷＡＩＴの次の命令Ｃ２の命令フェッチ情報を保持させる。ウェイト状態でも、命令Ｃ２の命令フェッチ情報は保持される。
【００４０】
次に、ウェイト解除のための外部信号がスレッドＴＨ１に届くと、スレッドＴＨ１は、実行要求を実行スレッド選択部５に出力する。実行スレッド選択部５は、スレッドＴＨ１の命令Ｃ２の実行指示を「命令デコード」ステージに出力する。
【００４１】
この実行指示によって、ウェイトが解除されたスレッドＴＨ１の命令バッファ１４−１に保持された命令Ｃ２の命令フェッチ情報が読み出されて、セレクタ２０を介して命令デコーダ２１に命令Ｃ２の命令フェッチ情報が送られる。これにより、命令デコーダ２１による「命令デコード」ステージから命令Ｃ２の処理を再開することができる。
【００４２】
従って、再フェッチは不要となる。これにより、命令をパイプラインフラッシュしてしまい、もう一度フェッチからやり直すというタイムロスをなくすことができる。このため、タイムロスの発生を抑制し、処理速度を向上させることができる。また、ウェイト状態からの起動を早くすることができる。
【００４３】
次に、図３を参照しながら、従来のマルチスレッドのパイプライン処理を説明する。ウェイト命令ＷＡＩＴの次の命令Ｃ２は、捨てられ（×で示した。）、ウェイト状態が解除された時には、再び、命令Ｃ２の命令フェッチから処理を実行している。このため、もう一度フェッチからやり直すというタイムロスが発生し、処理速度が遅くなる。
【００４４】
（実施例２）
図５は、本発明の実施例２に係るプロセッサ内のパイプライン構成図である。実施例２のプロセッサにおいて、２つの命令バッファ１４−０，１４−１が、複数のスレッドＴＨ０〜ＴＨＮ（Ｎ≧３）の個数よりも少ない個数設けられることを特徴とする。また、命令フェッチ１にセレクタ１６を設けている。
【００４５】
複数のスレッドＴＨ０〜ＴＨＮは、スレッドＴＨ０＞スレッドＴＨ１＞・・・＞スレッドＴＨＮの順で優先順位が高い。優先順位が高いスレッドにのみ命令バッファを割り当てる。実施例２では、スレッドＴＨ０，ＴＨ１のみに命令バッファ１４−０，１４−１が設けられている。
【００４６】
セレクタ１６は、スレッドがスレッドＴＨ０である場合には、命令バッファ１４−０を選択し、命令メモリ１３からの命令の命令フェッチ情報を命令バッファ１４−０に保持する。セレクタ１６は、スレッドがスレッドＴＨ１である場合には、命令バッファ１４−１を選択し、命令メモリ１３からの命令の命令フェッチ情報を命令バッファ１４−１に保持する。
【００４７】
次に、スレッドＴＨ０のウェイトを解除する時には、命令バッファ１４−０から命令の命令フェッチ情報を読み出し、スレッドＴＨ１のウェイトを解除する時には、命令バッファ１４−１から命令の命令フェッチ情報を読み出し、命令デコーダ２１による「命令デコード」ステージから命令の処理を再開することができる。
【００４８】
これに対して、スレッドＴＨ０，ＴＨ１以外のスレッドＴＨ２〜ＴＨＮのウェイトを解除する時には、再度、命令フェッチを行う。
【００４９】
このように命令バッファ１４−０，１４−１が、複数のスレッドＴＨ０〜ＴＨＮの個数よりも少ない個数設けられるので、ハードウェア増加を抑制することができる。また、実施例２のプロセッサ及びパイプライン処理方法においても、実施例１のプロセッサ及びパイプライン処理方法と同様な効果が得られる。
【００５０】
（実施例３）
図６は、本発明の実施例３に係るプロセッサ内のパイプライン構成図である。実施例３に係るプロセッサは、命令バッファをキャッシュ構造で形成したことを特徴とする。キャッシュ構造は、ダイレクトマップ構造の場合には、前記実施例２相当である。本発明は、ウェイト命令の次のフェッチされた命令のみを格納するだけでよいので、本発明は、複数のキャッシュラインを対応させたセットアソシアティブ方式を採る必要はない。
【００５１】
全部のキャッシュラインにタグの内容とアクセスするアドレスとが一致しているかどうかを検査する検査回路を設け、検査回路で並列に検査するフルアソシアティブ方式を採用する場合が本発明に適している。
【００５２】
実施例３に係るプロセッサは、格納先選択回路１６、キャッシュ（キャッシュメモリ）１７、命令バッファ１８、セレクタ２０ａ，２０ｂ、ヒット判定部２３を備える。
【００５３】
キャッシュ１７は、併設された複数のキャッシュライン１７−１〜１７−ｎから構成されており、ウェイト命令の次の命令の命令フェッチ情報のみを格納する。ウェイト命令の次の命令の命令フェッチ情報のみをキャッシュライン１７−１〜１７−ｎに格納すればよく、過去の命令をキャッシュライン１７−１〜１７−ｎに格納しておく必要がない。このため、キャッシュエントリ数は、スレッド数以下であれば十分である。
【００５４】
キャッシュライン１７−１〜１７−ｎは、図７に示すように、Ｖ、タグ、データの情報、（場合によってはキャッシュされた順番を示す情報）を有する。Ｖ（Valid、バリッド）は、命令が有効か無効かを示す。Ｖは、格納先選択回路１６により選択され、命令がキャッシュライン１７−１〜１７−ｎに書き込まれたときに有効（Ｖ＝１）となる。Ｖは、ウェイト命令からの解除により、本エントリから命令が読み出されたときに無効（Ｖ＝０）となる。タグは、データ読み出し時のデータ検索（選択）に使用される情報である。ここでは、格納される命令に対応するスレッド番号がタグに書き込まれる。命令は、ウェイト命令の次のフェッチされた命令である。
【００５５】
格納先選択回路１６ａは、本発明の選択回路に相当し、フェッチした命令をキャッシュ１７へ格納するかどうかを判定し、また、どのキャッシュラインへ命令を格納するかを判定する。格納先選択回路１６ａは、命令デコーダ２１でデコードされた命令がウェイト命令で且つフェッチされる命令とデコードされる命令が同一スレッドにある場合で且つバリッドＶに基づき、複数のキャッシュライン１７−１〜１７−ｎの中からキャッシュラインを選択し、選択されたキャッシュラインにフェッチされた命令を書き込む。
【００５６】
キャッシュライン１７−１〜１７−ｎの中に、Ｖ＝０のキャッシュラインがある場合には、当該キャッシュラインにフェッチされた命令を書き込み、Ｖ＝０のキャッシュラインがない場合には、最も古い命令を追い出して追い出したキャッシュラインにフェッチされた命令を書き込む。キャッシュ１７は、最も古い命令を判定できる情報又は構造を採る。キャッシュ１７をＦＩＦＯ（First In First Out）構造にすることにより、最も古い命令は、ＦＩＦＯの先頭であることから、最も古い命令の判定は、容易である。
【００５７】
デコードされた命令がウェイト命令でない場合には、フェッチされた命令は通常の命令バッファ１８に格納される。これは、ウェイト命令の次の命令によってキャッシュ１７を汚染することを避けるためである。
【００５８】
ヒット判定部２３は、本発明の判定部に相当し、実行スレッド選択部５ｂからウェイト解除によって発生する実行指示を受け取ると、キャッシュライン１７−１〜１７−ｎのバリッドＶ及びタグに基づきウェイト解除直後のデコードすべき命令を選択する。 
【００５９】
ヒット判定部２３は、キャッシュライン１７−１〜１７−ｎの命令が有効（Ｖ＝１）で、且つタグとウェイト解除すべきスレッドが一致する場合には、当該キャッシュラインからフェッチされた命令を読み出すための選択信号をセレクタ２０ａ（第１セレクタ）に出力する。セレクタ２０ａは、選択信号に従って、当該キャッシュラインからフェッチされた命令を読み出す。
【００６０】
また、ヒット判定部２３は、同時にキャッシュ１７に、ウェイト解除すべき命令が存在することを示すためのヒット信号をセレクタ２０ｂに出力する。セレクタ２０ｂは、ヒット信号に基づきキャッシュ１７を選択する、即ち、キャッシュ１７にヒットすれば、キャッシュ１７のキャッシュライン１７−１〜１７−ｎからの命令を命令デコーダ２１に出力する。
【００６１】
一方、ヒット信号がヒット判定部２３からセレクタ２０ｂに送られない場合、即ち、キャッシュメモリ１７にヒットしない場合には、セレクタ２０ｂは、命令バッファ１８を選択する。この場合には、再度、命令メモリ１３からの命令をフェッチし、命令バッファ１８にフェッチした命令を格納し、その後、命令デコーダ２１に当該命令を出力する。
【００６２】
このように実施例３のプロセッサ及びパイプライン処理方法によれば、実施例２のプロセッサ及びパイプライン処理方法と同様な効果が得られる。また、キャッシュ１７にしたので、実施例２のときよりもフレキシビリティが高くなる。
【符号の説明】
【００６３】
１  命令フェッチ（Ｆ）
２  デコード（Ｄ）
３  演算実行（Ｅ）
４  結果格納（Ｗ）
５，５ａ，５ｂ  実行スレッド選択部
１１  スレッド（ＴＨ）
１２  プログラムカウンタ（ＰＣ）
１３  命令メモリ
１４−０，１４−１  命令バッファ
１５  レジスタ
１６  セレクタ
１６ａ  格納先選択回路
１７  キャッシュメモリ
１７−１〜１７−ｎ  キャッシュライン
１８  命令バッファ
２０，２０ａ，２０ｂ  セレクタ
２１  命令デコーダ
２２  ウェイト制御部
２３  ヒット判定部
２５  加算部
３１レジスタ読み出し部
３２  データ読み出し部
３３  演算制御部
４１  レジスタ書き込み部
ＴＨ０〜ＴＨＮ  スレッド
Ｃ１〜Ｃ３  命令
【図１】
2020121416.tif 000003
【図２】
2020121416.tif 000004
【図３】
2020121416.tif 000005
【図４】
2020121416.tif 000006
【図５】
2020121416.tif 000007
【図６】
2020121416.tif 000008
【図７】
2020121416.tif 000009
【図８】
2020121416.tif 000010
【国際調査報告】
2020121416.tif 000011
2020121416.tif 000012
2020121416.tif 000013
2020121416.tif 000014