(57)【特許請求の範囲】
【請求項１】
複数のスレッドの命令を実行する演算処理装置であって、
命令をデコードすることにより、前記デコードされた命令及びデコードされた前記命令に対応するスレッドの識別子を出力する命令デコーダと、
前記命令デコーダによりデコードされた命令及びデコードされた前記命令に対応するスレッドの識別子を複数のエントリのうちのいずれかに記憶するリザベーションステーションと、
前記リザベーションステーションに記憶されている命令を実行する第１の演算器とを有し、
前記リザベーションステーション内の前記複数のエントリのうちの第１のエントリは、前記第１のエントリに記憶されている命令を前記第１の演算器に出力する場合、前記第１のエントリに記憶されている命令の実行サイクル数が閾値以上である場合には、前記第１のエントリとは異なる第２のエントリに対して前記第１の演算器の使用不可信号を出力し、
前記リザベーションステーションは、前記第１の演算器の使用不可信号が出力された後、使用不可中断条件を満たした場合には、前記第１の演算器の実行を中断させ、前記第１の演算器の状態を記憶素子に退避させ、前記第１の演算器の使用不可信号の出力を中断させるコントローラを有し、
前記第２のエントリは、前記第２のエントリが記憶するスレッドの識別子が、前記第１のエントリが記憶するスレッドの識別子と異なり、かつ前記第２のエントリが記憶する命令が、前記リザベーションステーションの中で最も古い未終了の命令であり、かつ前記第１の演算器の使用不可信号の出力が中断されている場合、前記第２のエントリに記憶されている命令を前記第１の演算器に出力し、
前記第１の演算器は、前記第２のエントリが出力した命令の実行が終了すると、前記記憶素子に退避した状態に戻し、前記第１のエントリの命令の実行を再開することを特徴とする演算処理装置。
【請求項２】
前記使用不可中断条件は、前記第１の演算器の使用不可信号が出力されてから一定時間経過していることの条件であることを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記使用不可中断条件は、前記第１のエントリが記憶する前記スレッドの識別子とは異なる前記スレッドの識別子のエントリの数が一定数以上であることの条件であることを特徴とする請求項１記載の演算処理装置。
【請求項４】
前記第１の演算器は、前記第２のエントリが出力した命令の実行が終了すると、終了信号を前記コントローラに出力し、
前記コントローラは、前記終了信号を入力すると、前記第１の演算器の使用不可信号の出力を前記第１のエントリに再開させることを特徴とする請求項１〜３のいずれか１項に記載の演算処理装置。
【請求項５】
前記第１のエントリは、前記第１の演算器が前記第１のエントリの命令の実行を終了すると、前記第１の演算器の使用不可信号の出力を終了することを特徴とする請求項４記載の演算処理装置。
【請求項６】
前記第１のエントリは、前記第１のエントリが記憶する命令が、前記リザベーションステーションの中で最も古い未終了の命令であり、かつ前記第１のエントリに記憶されている命令の実行サイクル数が閾値以上である場合に、前記第１のエントリに記憶されている命令を前記第１の演算器に出力し、前記第２のエントリに対して前記第１の演算器の使用不可信号を出力することを特徴とする請求項１〜５のいずれか１項に記載の演算処理装置。
【請求項７】
さらに、前記命令デコーダによりデコードされた命令のうちの前記第１の演算器が実行する命令とは異なる種類の命令を実行する第２の演算器と、
前記命令デコーダによりデコードされた命令のうちの実行が終了していない命令の識別子を前記スレッドの識別子毎に順に記憶するキューとを有し、
前記リザベーションステーションは、前記第２の演算器が実行する命令を記憶せず、前記第１の演算器が実行する命令を記憶し、
前記キューは、前記第１及び第２の演算器が実行する命令の識別子を記憶し、
前記第１のエントリは、前記第１のエントリが記憶する前記スレッドの識別子に対応する前記キューの先頭の命令の識別子が前記第１のエントリが記憶する命令を示す場合、かつ前記第１のエントリに記憶されている命令の実行サイクル数が閾値以上である場合に、前記第１のエントリに記憶されている命令を前記第１の演算器に出力し、前記第２のエントリに対して前記第１の演算器の使用不可信号を出力することを特徴とする請求項１〜６のいずれか１項に記載の演算処理装置。
【請求項８】
さらに、前記第１の演算器の未確定の実行結果を記憶するバッファと、
前記第１の演算器の実行が終了すると、前記バッファに記憶されている実行結果を確定して記憶するレジスタとを有し、
前記第１の演算器は、前記バッファ内の実行結果のうちの使用可能な実行結果を用いて前記命令を実行することを特徴とする請求項７記載の演算処理装置。
【請求項９】
前記第１の演算器は、浮動小数点演算器であることを特徴とする請求項１〜８のいずれか１項に記載の演算処理装置。
【請求項１０】
複数のスレッドの命令を実行する演算処理装置であって、
命令をデコードすることにより、前記デコードされた命令及びデコードされた前記命令に対応するスレッドの識別子を出力する命令デコーダと、
前記命令デコーダによりデコードされた命令及びデコードされた前記命令に対応するスレッドの識別子を複数のエントリのうちのいずれかに記憶するリザベーションステーションと、
前記リザベーションステーションに記憶されている命令を実行する第１の演算器とを有する演算処理装置の処理方法であって、
前記リザベーションステーション内の前記複数のエントリのうちの第１のエントリが、前記第１のエントリに記憶されている命令を前記第１の演算器に出力する場合、前記第１のエントリに記憶されている命令の実行サイクル数が閾値以上である場合には、前記第１のエントリとは異なる第２のエントリに対して前記第１の演算器の使用不可信号を出力し、
前記リザベーションステーション内のコントローラが、前記第１の演算器の使用不可信号が出力された後、使用不可中断条件を満たした場合には、前記第１の演算器の実行を中断させ、前記第１の演算器の状態を記憶素子に退避させ、前記第１の演算器の使用不可信号の出力を中断させ、
前記第２のエントリが、前記第２のエントリが記憶するスレッドの識別子が、前記第１のエントリが記憶するスレッドの識別子と異なり、かつ前記第２のエントリが記憶する命令が、前記リザベーションステーションの中で最も古い未終了の命令であり、かつ前記第１の演算器の使用不可信号の出力が中断されている場合、前記第２のエントリに記憶されている命令を前記第１の演算器に出力し、
前記第１の演算器が、前記第２のエントリが出力した命令の実行が終了すると、前記記憶素子に退避した状態に戻し、前記第１のエントリの命令の実行を再開することを特徴とする演算処理装置の処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の処理方法に関する。
【背景技術】
【０００２】
マルチスレッドプロセッサを採用したコンピュータの処理方法が開示されている（特許文献１参照）。スレッドが活性化されているアクティブ・スレッド状態は、少なくとも１つのハードウェア・レジスタに記憶される。少なくとも１つのバックグラウンド・スレッドの実行状況を表すバックグラウンド・スレッド状態は、少なくとも１つのハードウェア・レジスタに格納される。マルチスレッドプロセッサで少なくとも１つのアクティブ・スレッドが実行される。上記の少なくとも１つのアクティブ・スレッドのアクティブ・スレッド状態は、マルチスレッドプロセッサで上記の少なくとも１つのアクティブ・スレッドを実行することによって生成される後の状態で置換される。アクティブ・スレッドの置換されたアクティブ・スレッド状態は、少なくとも１つのバックグラウンド・スレッドのバックグラウンド・スレッド状態と比較される。これにより、少なくとも１つのアクティブ・スレッドのアクティブ・スレッド状態の後の状態による置換が、マルチスレッドプロセッサに、少なくとも１つのバックグラウンド・スレッドに実行を切り替えさせるかどうかを判定する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００１−５２１２１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
１個の演算器は、複数のスレッドの命令を実行することができる。しかし、複数のスレッドのうちの１個のスレッドの命令の実行サイクル数が長い場合、その１個のスレッドの命令が１個の演算器を独占してしまう。この場合、他のスレッドの命令は長時間待機状態になり、他のスレッドのサービスの質（ＱｏＳ：Quality of Service）が著しく低下してしまう。
【０００５】
１つの側面では、本発明の目的は、スレッドの命令の待機時間を短縮することができる演算処理装置及び演算処理装置の処理方法を提供することである。
【課題を解決するための手段】
【０００６】
演算処理装置は、複数のスレッドの命令を実行する演算処理装置であって、命令をデコードすることにより、前記デコードされた命令及びデコードされた前記命令に対応するスレッドの識別子を出力する命令デコーダと、前記命令デコーダによりデコードされた命令及びデコードされた前記命令に対応するスレッドの識別子を複数のエントリのうちのいずれかに記憶するリザベーションステーションと、前記リザベーションステーションに記憶されている命令を実行する第１の演算器とを有し、前記リザベーションステーション内の前記複数のエントリのうちの第１のエントリは、前記第１のエントリに記憶されている命令を前記第１の演算器に出力する場合、前記第１のエントリに記憶されている命令の実行サイクル数が閾値以上である場合には、前記第１のエントリとは異なる第２のエントリに対して前記第１の演算器の使用不可信号を出力し、前記リザベーションステーションは、前記第１の演算器の使用不可信号が出力された後、使用不可中断条件を満たした場合には、前記第１の演算器の実行を中断させ、前記第１の演算器の状態を記憶素子に退避させ、前記第１の演算器の使用不可信号の出力を中断させるコントローラを有し、前記第２のエントリは、前記第２のエントリが記憶するスレッドの識別子が、前記第１のエントリが記憶するスレッドの識別子と異なり、かつ前記第２のエントリが記憶する命令が、前記リザベーションステーションの中で最も古い未終了の命令であり、かつ前記第１の演算器の使用不可信号の出力が中断されている場合、前記第２のエントリに記憶されている命令を前記第１の演算器に出力し、前記第１の演算器は、前記第２のエントリが出力した命令の実行が終了すると、前記記憶素子に退避した状態に戻し、前記第１のエントリの命令の実行を再開する。
【発明の効果】
【０００７】
第１の演算器の使用不可信号の出力を中断させることにより、第２のエントリのスレッドの命令の待機時間を短縮することができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施形態による演算処理システムの構成例を示す図である。
【図２】図２は、図１の中央演算処理装置の構成例を示す図である。
【図３】図３は、図２のＲＳＦ、演算器及びＣＳＥの構成例を示す図である。
【図４】図４は、図３に続く中央演算処理装置の処理方法を示す図である。
【図５】図５は、図４に続く中央演算処理装置の処理方法を示す図である。
【図６】図６は、中央演算処理装置の処理方法を示すフローチャートである。
【図７】図７（Ａ）及び（Ｂ）は、中央演算処理装置のパイプライン処理の処理時間を示す図である。
【発明を実施するための形態】
【０００９】
図１は、本実施形態による演算処理システム１００の構成例を示す図である。演算処理システム１００は、例えばサーバであり、複数の中央演算処理装置（ＣＰＵ：Central Processing Unit）１０１と、複数のメモリ１０２と、インターコネクト制御部１０３とを有する。複数のメモリ１０２は、それぞれ、複数の中央演算処理装置１０１に接続される。インターコネクト部１０３は、複数の中央演算処理装置１０１に接続され、外部装置に対してデータを入出力することができる。
【００１０】
図２は、図１の中央演算処理装置１０１の構成例を示す図である。中央演算処理装置１０１は、例えばスーパースカラプロセッサであり、同時マルチスレッディング（ＳＭＴ：Simultaneous Multithreading）機能を有し、複数のスレッドを同時に実行することができる。命令フェッチアドレス生成器２０１は、命令フェッチを行うために、プログラムカウンタ２１８、分岐命令用リザベーションステーション（ＲＳＢＲ:Reservation Station for BRanch）２０８又は分岐予測機構２０４から入力した命令アドレスを選択し、選択された命令アドレスの命令フェッチリクエストを１次命令キャッシュメモリ２０２に発行する。１次命令キャッシュメモリ２０２は、それに応じた命令を命令デコーダ２０３に出力する。命令デコーダ２０３は、プログラムの順番通りに命令のデコード処理を行い、命令を発行する。プログラムでは、各命令が複数のスレッドのうちのいずれかのスレッドに対応付けられている。命令デコーダ２０３は、各命令をスレッドに対応付けて発行する。命令デコーダ２０３は、デコードする命令の種類に従って、命令の実行を制御する主記憶オペランドアドレス生成用リザベーションステーション（ＲＳＡ:Reservation Station for Address generate）２０５、固定小数点演算用リザベーションステーション（ＲＳＥ:Reservation Station for Execute）２０６、浮動小数点演算用リザベーションステーション（ＲＳＦ:Reservation Station for Floating）２０７、ＲＳＢＲ２０８に必要なエントリを作成する。また、命令デコーダ２０３は、全てのデコードされた命令に対して、命令の完了を制御するコミットスタックエントリ（ＣＳＥ:Commit Stack Entry）２０９にエントリを作成する。デコードされた命令がＲＳＡ２０５、ＲＳＥ２０６、ＲＳＦ２０７にエントリを作成される場合には、固定小数点更新バッファ２１２と浮動小数点更新バッファ２１５に対応するレジスタリネーミングを行うことで、アウト・オブ・オーダー実行を行うことが可能となる。オペランドアドレス生成器２１０Ａ及び２１０Ｂは、ＲＳＡ２０５のエントリに応じて、オペランドのアドレスを生成し、１次データキャッシュメモリ２１１に出力する。１次データキャッシュメモリ２１１は、生成されたオペランドアドレスのデータを固定小数点更新バッファ２１２又は浮動小数点更新バッファ２１５に出力する。演算器ＥＸＡ及びＥＸＢは、ＲＳＥ２０６のエントリに応じて固定小数点演算を行う固定小数点演算器（第２の演算器）である。演算器ＦＬＡ及びＦＬＢは、ＲＳＦ２０７のエントリに応じて浮動小数点演算を行う浮動小数点演算器（第１の演算器）である。演算器ＥＸＡ及びＥＸＢの演算の実行結果は、固定小数点更新バッファ２１２に格納される。演算器ＦＬＡ及びＦＬＢの演算の実行結果は、浮動小数点更新バッファ２１５に格納される。記憶素子２１４は、演算器ＦＬＡに接続される。リザベーションステーション２０５〜２０８から、アウト・オブ・オーダーで実行された命令は、ＣＳＥ２０９の制御によりプログラムの順番通りに命令の完了を行い、完了した命令に対してのみ、固定小数点レジスタ２１３や浮動小数点レジスタ２１６やプログラムカウンタ２１７，２１８などのプログラマブルな資源の更新を行う。プログラムカウンタ２１８は、現在実行する命令のアドレスを出力する。プログラムカウンタ２１７は、プログラムカウンタ２１８のアドレスの次のアドレスを出力する。分岐予測機構２０４は、ＲＳＢＲ２０８のエントリに応じて、分岐命令が分岐するか否かを予測し、次に実行するアドレスを命令フェッチアドレス生成器２０１に出力する。また、ＲＳＢＲ２０８は、上記の分岐命令の予測が誤っていることが確定した場合には、正しいアドレスを命令フェッチアドレス生成器２０１に出力する。
【００１１】
固定小数点更新バッファ２１２は、演算器ＥＸＡ又はＥＸＢの未確定の実行結果を記憶する。固定小数点レジスタ２１３は、演算器ＥＸＡ又はＥＸＢの実行が終了すると、固定小数点更新バッファ２１２に記憶されている実行結果を確定して記憶する。演算器ＥＸＡ又はＥＸＢは、固定小数点更新バッファ２１２内の実行結果のうちの使用可能な実行結果又は固定小数点レジスタ２１３のデータを用いて命令を実行する。
【００１２】
浮動小数点更新バッファ２１５は、演算器ＦＬＡ又はＦＬＢの未確定の実行結果を記憶する。浮動小数点レジスタ２１６は、演算器ＦＬＡ又はＦＬＢの実行が終了すると、浮動小数点更新バッファ２１５に記憶されている実行結果を確定して記憶する。演算器ＦＬＡ又はＦＬＢは、浮動小数点更新バッファ２１５内の実行結果のうちの使用可能な実行結果又は浮動小数点レジスタ２１６のデータを用いて命令を実行する。演算器ＦＬＡは、複雑な浮動小数点演算命令及び簡単な浮動小数点演算命令を含むすべての浮動小数点演算命令を実行可能である。これに対し、演算器ＦＬＢは、複雑な浮動小数点演算命令を実行できず、簡単な浮動小数点演算命令のみ実行可能である。
【００１３】
図３は、図２のＲＳＦ２０７、演算器ＦＬＡ及びＣＳＥ２０９の構成例を示す図である。ＲＳＦ２０７は、複数のエントリＲＳＦ１〜ＲＳＦｎと、コントローラ３０１とを有する。複数のエントリＲＳＦ１〜ＲＳＦｎは、それぞれ、複雑な演算命令であるか否かを示す命令の種類と、命令の識別子（ＩＩＤ）と、スレッドの識別子（ＩＤ）とを記憶可能である。命令デコーダ２０３は、デコードした命令が浮動小数点演算命令である場合、複雑な演算命令であるか否かを示す命令の種類と、デコードされた命令の識別子（ＩＩＤ）と、当該デコードされた命令に対応するスレッドの識別子（ＩＤ）とをＲＳＦ２０７に出力する。ＲＳＦ２０７は、複雑な演算命令であるか否かを示す命令の種類と、デコードされた命令の識別子（ＩＩＤ）と、当該デコードされた命令に対応するスレッドの識別子（ＩＤ）とを複数のエントリＲＳＦ１〜ＲＳＦｎのうちのいずれかに記憶する。例えば、エントリＲＳＦ２には、命令の種類が複雑な演算命令であり、命令の識別子（ＩＩＤ）が「３」であり、スレッドの識別子（ＩＤ）が「１」であることが記憶される。
【００１４】
ここで、図７（Ａ）のように、複雑な演算命令は、演算器ＦＬＡによる演算命令の実行サイクル数Ｅ１〜ＥＮが閾値以上である演算命令である。これに対し、図７（Ｂ）のように、簡単な演算命令（後続の演算命令）は、演算器ＦＬＡによる演算命令の実行サイクル数Ｅが閾値未満である演算命令である。
【００１５】
ＣＳＥ２０９は、命令デコーダ２０３によりデコードされた命令のうちの実行が終了していない命令の識別子（ＩＩＤ）をスレッドの識別子毎に順に記憶するキューＱ０，Ｑ１等を有する。キューＱ０，Ｑ１等は、すべてのリザベーションステーション２０５〜２０８の演算待ちの命令の識別子を記憶する。キューＱ０は、スレッドの識別子が「０」である命令の識別子（ＩＩＤ）を順に記憶する。キューＱ１は、スレッドの識別子が「１」である命令の識別子（ＩＩＤ）を順に記憶する。ＣＳＥ２０９は、キューＱ０の中の先頭の命令の識別子（最も古い命令の識別子）ＴＩＩＤ０と、キューＱ１の中の先頭の命令の識別子（最も古い命令の識別子）ＴＩＩＤ１とをＲＳＦ２０７に出力する。
【００１６】
エントリＲＳＦ２は、自己のエントリＲＳＦ２が記憶する命令の種類が複雑な演算命令であり、自己のエントリＲＳＦ２が記憶するスレッドの識別子の「１」に対応するキューＱ１の先頭の命令の識別子ＴＩＩＤ１が、自己のエントリＲＳＦ２が記憶する命令の識別子（ＩＩＤ）の「３」と一致する場合、リクエスト信号ＲＥＱＡ及びエントリＲＳＦ２に記憶されている演算命令情報を演算器ＦＬＡ及びコントローラ３０１に出力し、他のエントリＲＳＦ１、ＲＳＦ３〜ＲＳＦｎに対して演算器ＦＬＡの使用不可信号ＩＮＨＡを出力する。すると、演算器ＦＬＡは、エントリＲＳＦ２の演算命令の実行を開始する。
【００１７】
なお、上記のように、必ずしも、キューＱ１の先頭の命令の識別子ＴＩＩＤ１と一致する必要はない。すなわち、エントリＲＳＦ２は、エントリＲＳＦ２が記憶する命令が、ＲＳＦ２０７の中で最も古い未終了の命令である場合、かつエントリＲＳＦ２に記憶されている命令が複雑な演算命令である場合に、リクエスト信号ＲＥＱＡ及びエントリＲＳＦ２に記憶されている演算命令情報を演算器ＦＬＡに出力し、他のエントリＲＳＦ１、ＲＳＦ３〜ＲＳＦｎに対して演算器ＦＬＡの使用不可信号ＩＮＨＡを出力するようにしてもよい。ただし、その場合、浮動小数点レジスタ２１６内の実行結果が未確定であるので、演算器ＦＬＡは、浮動小数点レジスタ２１６内の実行結果が使用可能か否かを判断し、使用可能な実行結果のみを用いて演算命令を実行する。
【００１８】
これに対し、上記のように、キューＱ１の先頭の命令の識別子ＴＩＩＤ１と一致する場合、浮動小数点レジスタ２１６内の実行結果が確定しているので、演算器ＦＬＡは、浮動小数点レジスタ２１６内の実行結果が使用可能か否かを判断することなく、浮動小数点レジスタ２１６内の実行結果を用いて演算命令を実行することができる利点がある。
【００１９】
ここで、エントリＲＳＦ２は、リクエスト信号ＲＥＱＡ及びエントリＲＳＦ２に記憶されている演算命令情報を演算器ＬＦＡ及びコントローラ３０１に出力する場合、自己のエントリＲＳＦ２とは異なる他のエントリＲＳＦ１、ＲＳＦ３〜ＲＳＦｎに対して演算器ＦＬＡの使用不可信号ＩＮＨＡを出力する。これにより、エントリＲＳＦ１、ＲＳＦ３〜ＲＳＦｎは、演算器ＦＬＡを使用することができなくなり、エントリＲＳＦ２が演算器ＦＬＡを独占的に使用する。
【００２０】
ただし、この演算命令は、複雑な演算命令であるため、演算器ＦＬＡの演算命令実行時間は長い。その結果、スレッドの識別子が「１」の複雑な演算命令が実行されると、スレッドの識別子が「０」である演算命令が長時間待機状態になる場合がある。
【００２１】
そこで、コントローラ３０１は、タイマを有し、リクエスト信号ＲＥＱＡを入力し、かつその命令の種類が複雑な演算命令である場合には、タイマのカウントを開始させる。
【００２２】
図４は、図３に続く中央演算処理装置１０１の処理方法を示す図である。コントローラ３０１は、演算器ＦＬＡの使用不可信号ＩＮＨＡが出力された後、使用不可中断条件を満たした場合には、演算器ＦＬＡの実行を中断させるための中断信号４０４を演算器ＦＬＡに出力し、使用不可信号ＩＮＨＡの出力を中断させるための中断信号４０５を出力する。
【００２３】
例えば、上記の使用不可中断条件は、コントローラ３０１のタイマのカウント値が、演算器ＦＬＡの使用不可信号ＩＮＨＡが出力されてから一定時間経過しており、かつエントリＲＳＦ２のスレッドの識別子の「１」とは異なるスレッドの識別子を有する準備完了状態のエントリがエントリＲＳＦ１、ＲＳＦ３〜ＲＳＦｎの中に存在することが条件である。
【００２４】
他の例として、上記の使用不可中断条件は、ＲＳＦ２０７内において、エントリＲＳＦ２が記憶するスレッドの識別子とは異なるスレッドの識別子のエントリの数が一定数以上であることの条件であってもよい。
【００２５】
例えば、コントローラ３０１は、使用不可中断条件を満たす場合、エントリＲＳＦ２が記憶するスレッドの識別子「１」とは異なるスレッドの識別子を記憶し、かつＲＳＦ２０７の中で最も古い未終了の命令の識別子（ＩＩＤ）を記憶し、かつ命令発行の準備完了状態であるエントリＲＳＦ１を選択する。そして、コントローラ３０１は、エントリＲＳＦ２からエントリＲＳＦ１への使用不可信号ＩＮＨＡを中断させるための中断信号４０５を出力し、演算器ＦＬＡの実行を中断させるための中断信号４０４を演算器ＦＬＡに出力する。すると、演算器ＦＬＡは、エントリＲＳＦ２が記憶する演算命令の実行を中断し、演算器ＦＬＡの状態４０１を記憶素子２１４に退避する。また、エントリＲＳＦ２からエントリＲＳＦ１への使用不可信号ＩＮＨＡの出力が中断される。すると、エントリＲＳＦ１は、リクエスト信号ＲＥＱＡ及びエントリＲＳＦ１に記憶されている演算命令情報を演算器ＦＬＡに出力する。すると、演算器ＦＬＡは、エントリＲＳＦ１が記憶する演算命令を実行し、その実行が終了すると、記憶素子２１４に退避した状態４０３に戻し、中断処理終了信号４０２をコントローラ３０１に出力する。すると、コントローラ３０１は、中断信号４０５の出力を終了する。すると、エントリＲＳＦ２からエントリＲＳＦ１への使用不可信号ＩＮＨＡの出力が再開される。すると、コントローラ３０１は、タイマのカウント値をリセットし、タイマのカウントを開始させる。また、演算器ＦＬＡは、エントリＲＳＦ２に記憶されている演算命令の実行を再開する。
【００２６】
図５は、図４に続く中央演算処理装置１０１の処理方法を示す図である。エントリＲＳＦ２は、演算器ＦＬＡがエントリＲＳＦ２の演算命令の実行を終了し、終了信号５０１を出力すると、演算器ＦＬＡの使用不可信号ＩＮＨＡの出力を終了する。
【００２７】
図６は、中央演算処理装置１０１の処理方法を示すフローチャートである。ステップＳ６０１では、ＲＳＦ２０７は、複雑な演算命令のエントリＲＳＦ２を作成する。次に、ステップＳ６０２では、エントリＲＳＦ２は、キューＱ０，Ｑ１等の先頭の命令の識別子ＴＩＩＤ０，ＴＩＩＤ１等の発行を待つ。次に、ステップＳ６０３では、エントリＲＳＦ２は、自己のエントリＲＳＦ２に記憶されている命令の識別子（ＩＩＤ）が、自己のエントリＲＳＦ２に記憶されているスレッドの識別子の「１」に対応するキューＱ１の先頭の命令の識別子ＴＩＩＤ１と一致しているか否かを判断する。一致していない場合には、ステップＳ６０２に戻り、一致している場合には、ステップＳ６０４に進む。ステップＳ６０４では、エントリＲＳＦ２は、自己のエントリＲＳＦ２が命令発行の準備が完了しているか否かを判断する。準備が完了していない場合には、ステップＳ６０２に戻り、準備が完了している場合には、ステップＳ６０５に進む。
【００２８】
ステップＳ６０５では、エントリＲＳＦ２は、リクエスト信号ＲＥＱＡ及び演算命令情報を演算器ＦＬＡに出力することにより、演算器ＦＬＡに演算命令の実行を指示する。コントローラ３０１は、カウンタのカウントを開始させる。エントリＲＳＦ２は、他のエントリＲＥＦ１、ＲＳＦ３〜ＲＳＦｎに使用不可信号ＩＮＨＡを出力するので、演算器ＦＬＡを独占的に使用することができる。演算器ＦＬＡは、エントリＲＳＦ２の複雑な演算命令の実行を開始する。
【００２９】
次に、ステップＳ６０６では、コントローラ３０１は、カウンタの値が閾値以上であり、かつ他のスレッドのエントリの中で演算器ＦＬＡの空きを待っているエントリがあることの使用不可中断条件を満たすか否かを判断する。使用不可中断条件を満たす場合には、ステップＳ６０７に進み、使用不可中断条件を満たさない場合には、ステップＳ６０８に進む。
【００３０】
ステップＳ６０７では、コントローラ３０１は、中断信号４０４を演算器ＦＬＡに出力する。すると、演算器ＦＬＡは、複雑な演算命令の実行を中断し、演算器ＦＬＡの状態４０１を記憶素子２１４に退避する。コントローラ３０１は、他のスレッドの識別子を記憶し、ＲＳＦ２０７内で最も古い未終了の命令を記憶するエントリＲＳＦ１を選択し、エントリＲＳＦ２からエントリＲＳＦ１への使用不可信号ＩＮＨＡの出力を中断させる。すると、エントリＲＳＦ１は、リクエスト信号ＲＥＱＡ及び演算命令情報を演算器ＦＬＡに出力する。すると、演算器ＦＬＡは、エントリＲＳＦ１の演算命令を実行し、その実行が終了すると、記憶素子２１４に退避した状態４０３に戻し、中断処理終了信号４０２をコントローラ３０１に出力する。コントローラ３０１は、エントリＲＳＦ２からエントリＲＳＦ１への使用不可信号ＩＮＨＡの出力を再開させ、タイマのカウント値をリセットしてカウントを開始させる。演算器ＦＬＡは、エントリＲＳＦ２の複雑な演算命令の実行を再開する。
【００３１】
次に、ステップＳ６０８では、演算器ＦＬＡは、エントリＲＳＦ２の複雑な演算命令の実行が終了したか否かを判断する。終了していない場合には、ステップＳ６０６に戻り、終了した場合には、ステップＳ６０９に進む。
【００３２】
ステップＳ６０９では、演算器ＦＬＡは、終了信号５０１を出力する。すると、エントリＲＳＦ２は、使用不可信号ＩＮＨＡの出力を終了し、演算器ＦＬＡの独占使用を解除し、通常の発行モードに移行する。
【００３３】
通常の発行モードでは、エントリＲＳＦ２は、使用不可信号ＩＮＨＡを出力しない。また、エントリＲＳＦ２は、自己のエントリＲＳＦ２が記憶している命令の識別子が、自己のエントリＲＳＦ２に記憶されているスレッドの識別子に対応するキューＱ１の先頭の命令の識別子ＴＩＩＤ１と一致しているか否かを判断しない。すなわち、エントリＲＳＦ２は、エントリＲＳＦ２が記憶する命令の識別子が、ＲＳＦ２０７の中で最も古い未終了の命令の識別子である場合に、エントリＲＳＦ２に記憶されている演算命令情報及びリクエスト信号ＲＥＱＡを演算器ＦＬＡに出力し、使用不可信号ＩＮＨＡを出力しない。
【００３４】
図７（Ａ）及び（Ｂ）は、中央演算処理装置１０１のパイプライン処理の処理時間を示す図である。複雑な演算は、エントリＲＳＦ２の複雑な浮動小数点演算命令の演算であり、スレッドの識別子が「１」である。後続の演算は、エントリＲＳＦ１の簡単な浮動小数点演算命令の演算であり、スレッドの識別子が「０」である。
【００３５】
図７（Ａ）は、コントローラ３０１が中断信号４０５を出力しない場合を示す。第１のサイクルＴ１では、命令デコーダ２０３は、複雑な演算命令のデコードを行う。第２のサイクルＴ２では、ＲＦＳ２０７は、複雑な演算命令のエントリＲＳＦ２を作成し、命令デコーダ２０３は、後続の命令のデコードを行う。第３のサイクルＴ３〜第ｎ−１のサイクルＴｎ−１では、演算器ＦＬＡは、エントリＲＳＦ２の複雑な演算命令を実行する。複雑な演算命令は、例えば、モンゴメリ演算であり、実行時間が長い。また、第３のサイクルＴ３では、ＲＳＦ２０７は、後続の演算命令のエントリＲＳＦ１を作成する。第３のサイクルＴ３〜第ｎ−１のサイクルＴｎ−１では、演算器ＦＬＡが複雑な演算命令を実行中であるため、後続の演算命令は待機状態になる。複雑な演算命令の実行終了後、第ｎのサイクルＴｎでは、演算器ＦＬＡは、後続の演算命令を実行する。後続の演算命令の待機時間７０１は、長時間になってしまい、スレッドの識別子が「０」のサービスの質（ＱｏＳ）が著しく低下してしまう課題がある。図７（Ｂ）の本実施形態は、この課題を解決する。
【００３６】
図７（Ｂ）は、上記の図３〜図５のように、コントローラ３０１が中断信号４０５を出力する場合を示す。第１のサイクルＴ１から第ｍのサイクルＴｍの前までは、図７（Ａ）と同じである。第４のサイクルＴ４の後、第ｍのサイクルＴｍでは、コントローラ３０１の中断信号４０４及び４０５により、演算器ＦＬＡは、エントリＲＳＦ２の複雑な演算命令の実行を中断し、エントリＲＳＦ１の後続の演算命令を実行する。その実行が終了すると、演算器ＦＬＡは、エントリＲＳＦ２の複雑な演算命令の実行を再開する。この場合、後続の演算命令の待機時間７０２は、図７（Ａ）の待機時間７０１より短くなり、スレッドの識別子が「０」のサービスの質（ＱｏＳ）の低下を防止することができる。
【００３７】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００３８】
２０３  命令デコーダ
２０７  浮動小数点演算用リザベーションステーション
２０９  コミットスタックエントリ
２１４  記憶素子
２１５  浮動小数点更新バッファ
２１６  浮動小数点レジスタ
３０１  コントローラ
ＦＬＡ，ＦＬＢ  演算器
ＲＳＦ１〜ＲＳＦｎ  エントリ
Ｑ０，Ｑ１  キュー
【図１】
0006477248.tif 000002
【図２】
0006477248.tif 000003
【図３】
0006477248.tif 000004
【図４】
0006477248.tif 000005
【図５】
0006477248.tif 000006
【図６】
0006477248.tif 000007
【図７】
0006477248.tif 000008