(57)【特許請求の範囲】
【請求項１】
複数の命令流を実行するマルチスレッドプロセッサであって、
それぞれ命令を実行する複数の機能ユニットと、
命令流に対応して設けられ、それぞれ命令を解読して、当該命令を実行すべき機能ユニットを指定するとともに当該機能ユニットに解読された命令を発行すベきことを要求する命令発行要求を作成する複数の命令解読手段と、
命令流毎に命令流の優先度を保持する保持手段と、
２以上の命令発行要求が同時に一の機能ユニットを指定している場合に、保持手段に保持された優先度に従って、当該機能ユニットに発行すべき解読された命令を決定する制御手段と
を備え、
前記保持手段は、さらに、命令によって設定可能な、命令流毎に命令流を停止すべきか実行すべきかを示すフラグ群を保持し、
前記制御手段は、
前記決定を行う調停手段と、
停止を示すフラグが設定されている場合には、そのフラグに対応する命令流の命令発行要求を除外して前記決定を行うことにより、当該命令流を停止する停止手段と
を備えることを特徴とするマルチスレッドプロセッサ。
【請求項２】
前記制御手段は、さらに
何れかの命令流に対して緊急を要する処理が発生した場合に、当該命令流に属する命令であって前記制御手段において発行すべきであると決定された命令について、機能ユニットへの命令発行を一時的に禁止する禁止手段
を備えることを特徴とする請求項１記載のマルチスレッドプロセッサ。
【請求項３】
前記緊急を要する処理は、割込み要求、キャッシュミス発生を知らせるイベントの何れかである
ことを特徴とする請求項２記載のマルチスレッドプロセッサ。
【請求項４】
複数の命令流を実行するマルチスレッドプロセッサであって、
それぞれ命令を実行する複数の機能ユニットと、
命令流に対応して設けられ、それぞれ命令を解読して、当該命令を実行すべき機能ユニットを指定するとともに当該機能ユニットに解読された命令を発行すベきことを要求する命令発行要求を作成する複数の命令解読手段と、
命令流毎に命令流の優先度を保持する保持手段と、
２以上の命令発行要求が同時に一の機能ユニットを指定している場合に、保持手段に保持された優先度に従って、当該機能ユニットに発行すべき解読された命令を決定する制御手段と
を備え、
機能ユニットの１つは、優先度の変更を指示する専用命令を受け、保持手段に保持された優先度のうち、当該専用命令が属する命令流の優先度を変更する
ことを特徴とするマルチスレッドプロセッサ。
【請求項５】
前記専用命令は、優先度を上げ又は下げることを指示するオペレーションコードのみからなり、
前記機能ユニットの１つは、専用命令の解読結果が発行された場合、当該専用命令を発行した命令解読手段を判別して、判別された命令解読手段に対応する命令流の優先度を上げ又は下げる
ことを特徴とする請求項４記載のマルチスレッドプロセッサ。
【請求項６】
前記保持手段は、読み出し専用の第１フィールドを有する制御レジスタを含み、
前記機能ユニットの１つは、制御レジスタの読み出し命令の解読結果が発行された場合、当該読み出し命令を発行した命令解読手段を判別して、当該命令解読手段に対応する命令流のＩＤを第１フィールドの読み出しデータとして内部バス上に出力する
ことを特徴とする請求項５記載のマルチスレッドプロセッサ。
【請求項７】
前記制御レジスタは、さらに前記優先度を保持するための命令流毎の優先度フィールドを有し、
前記機能ユニットの１つは、制御レジスタの読み出し命令の解読結果が発行された場合、さらに各優先度フィールドを読み出す
ことを特徴とする請求項６記載のマルチスレッドプロセッサ。
【請求項８】
前記保持手段は、制御レジスタを有し、
前記制御レジスタは、さらに、命令流固有のデータを保持するための命令流毎の個別フィールドと、読み出し専用の第２フィールドとを有し、
前記機能ユニットの１つは、前記制御レジスタの読み出し命令の実行に際して、さらに、命令流毎の個別フィールドを読みだすとともに、当該読み出し命令を発行した命令解読手段に対応する命令流の固有のデータを第２フィールドの読み出しデータとして内部バス上に出力する
ことを特徴とする請求項５記載のマルチスレッドプロセッサ。
【請求項９】
前記命令流固有のデータは、優先度であることを特徴とする請求項８記載のマルチスレッドプロセッサ。
【請求項１０】
前記保持手段は、命令流毎の優先度を保持する優先度フィールドを有し、
前記優先度フィールドは、命令流の実行モード別の優先度を示す小フィールドからなり、
前記機能ユニットの１つは、専用命令の解読結果が発行された場合、当該専用命令を発行した命令解読手段を判別して、判別された命令解読手段に対応する命令流の優先度フィールドのうち現在の実行モード用の小フィールドの優先度を上げ又は下げる
ことを特徴とする請求項５記載のマルチスレッドプロセッサ。
【請求項１１】
複数の命令流を実行するマルチスレッドプロセッサであって、
それぞれ命令を実行する複数の機能ユニットと、
命令流に対応して設けられ、それぞれ命令を解読して、当該命令を実行すべき機能ユニットを指定するとともに当該機能ユニットに解読された命令を発行すベきことを要求する命令発行要求を作成する複数の命令解読手段と、
命令流毎に命令流の優先度を保持する保持手段と、
２以上の命令発行要求が同時に一の機能ユニットを指定している場合に、保持手段に保持された優先度に従って、当該機能ユニットに発行すべき解読された命令を決定する制御手段と
を備え、
機能ユニットに１つが特定の命令を実行開始したことと、当該特定命令の解読結果をどの命令解読手段が発行したかを検出する特定命令検出手段と、
特定命令の実行開始が検出されたとき、その特定命令を発行した命令解読手段に対応する命令流の優先度を、他の命令流よりも高い優先度に予め定められた期間一時的に変更する一時変更手段と
を備えることを特徴とするマルチスレッドプロセッサ。
【請求項１２】
複数の命令流を実行するマルチスレッドプロセッサであって、
それぞれ命令を実行する複数の機能ユニットと、
命令流に対応して設けられ、それぞれ命令を解読して、当該命令を実行すべき機能ユニットと、当該機能ユニットに解読された命令を発行すベきことを要求する命令発行要求を作成する複数の命令解読手段と、
命令流毎にその優先度を保持する優先度保持手段と、
命令流毎に命令流を実行状態にすべきか停止状態にすべきかを示す自己停止データを保持する自己停止データ保持手段と、
複数の命令解読部から通知される命令発行要求を受けて、２以上の命令発行要求が同時に一の機能ユニットを指定している場合に、優先度保持手段に保持された優先度に従って、当該機能ユニットに発行すべき解読された命令を決定する調停手段と、
複数の命令解読部から前記調停手段に通知される命令発行要求のうち、前記自己停止データにより停止状態とされている命令流に対応する命令解読部から調停手段への命令発行要求の通知を停止する停止手段と
を備えることを特徴とするマルチスレッドプロセッサ。
【請求項１３】
前記マルチスレッドプロセッサは、さらに命令流毎に他の命令流を排他的に停止状態にすべきか否かを示す排他停止データを保持する排他停止データ保持手段を備え、
前記停止手段は、さらに前記排他停止データにより停止状態とされている命令流に対応する命令解読部から調停手段への命令発行要求の通知を停止する
ことを特徴とする請求項１２記載のマルチスレッドプロセッサ。
【請求項１４】
前記機能ユニットの１つは、優先度の変更を指示する専用命令の解読結果が発行された場合、当該命令に従って優先度を変更する
ことを特徴とする請求項１２記載のマルチスレッドプロセッサ。
【請求項１５】
前記専用命令は、優先度を上げる又は下げることを指示するオペレーションコードのみからなり、
前記機能ユニットの１つは、専用命令の解読結果が発行された場合、当該専用命令を発行した命令解読手段を判別して、判別された命令解読手段に対応する命令流の優先度を上げ又は下げる
ことを特徴とする請求項１４記載のマルチスレッドプロセッサ。
【請求項１６】
前記保持手段は、読み出し専用の第１フィールドを有する制御レジスタを含み、
前記機能ユニットの１つは、制御レジスタの読み出し命令の解読結果が発行された場合、当該読み出し命令を発行した命令解読手段を判別して、当該命令解読手段に対応する命令流のＩＤを第１フィールドの読み出しデータとして内部バス上に出力する
ことを特徴とする請求項１５記載のマルチスレッドプロセッサ。
【請求項１７】
前記制御レジスタは、さらに前記優先度を保持するための命令流毎の優先度フィールドを有し、
前記機能ユニットの１つは、制御レジスタの読み出し命令の解読結果が発行された場合、さらに各優先度フィールドを読み出す
ことを特徴とする請求項１６記載のマルチスレッドプロセッサ。
【請求項１８】
前記保持手段は、制御レジスタを有し、
前記制御レジスタは、さらに、命令流固有のデータを保持するための命令流毎の個別フィールドと、読み出し専用の第２フィールドとを有し、
前記機能ユニットの１つは、前記制御レジスタの読み出し命令の実行に際して、さらに、命令流毎の個別フィールドを読みだすとともに、当該読み出し命令を発行した命令解読手段に対応する命令流の固有のデータを第２フィールドの読み出しデータとして内部バス上に出力する
ことを特徴とする請求項１５記載のマルチスレッドプロセッサ。
【請求項１９】
前記命令流固有のデータは、優先度であることを特徴とする請求項１８記載のマルチスレッドプロセッサ。
【請求項２０】
前記保持手段は、命令流毎の優先度を保持する優先度フィールドを有し、
前記優先度フィールドは、命令流の実行モード別の優先度を示す小フィールドからなり、
前記機能ユニットの１つは、専用命令の解読結果が発行された場合、当該専用命令を発行した命令解読手段を判別して、判別された命令解読手段に対応する命令流の優先度フィールドのうち現在の実行モード用の小フィールドの優先度を上げ又は下げる
ことを特徴とする請求項１８記載のマルチスレッドプロセッサ。
【請求項２１】
機能ユニットに１つが特定の命令を実行開始したことと、当該特定命令の解読結果をどの命令解読手段が発行したかを検出する特定命令検出手段と、
特定命令の実行開始が検出されたとき、その特定命令を発行した命令解読手段に対応する命令流の優先度を、他の命令流よりも高い優先度に予め定められた期間一時的に変更する一時変更手段と
を備えることを特徴とする請求項１２記載のマルチスレッドプロセッサ。
【請求項２２】
複数の命令流を同時かつ独立に並列実行するマルチスレッドプロセッサであって、
それぞれ同時かつ独立に命令を実行する複数の機能ユニットと、
前記複数の命令流の対応して設けられる、それぞれは命令流の命令を取り出して解読し、前記機能ユニットのうち発行先とすべき機能ユニットを特定する複数の命令解読手段と、
前記複数の命令流毎の優先度を指定する優先度指定手段と、
命令を受け入れ可能か否かを示す機能ユニット毎の状態に基づいて、前記発行先とすべき機能ユニットに、解読された命令を発行可能か否かを判断する命令発行判断手段と、
一の機能ユニットに対して二以上の命令が発行可能と判断された場合には、前記優先度指定手段に指定される優先度に従って当該二以上の命令を調停して当該一の機能ユニットに発行すべき一命令を決定する命令発行調停手段と、
どれかの命令流に対して緊急を要する処理が発生した場合に、当該命令流に属する命令であって前記命令発行調停手段において既に発行すべきであると決定された命令について、機能ユニットへの命令発行を一時的に禁止する命令発行禁止手段と
を備えることを特徴とするマルチスレッドプロセッサ。
【請求項２３】
前記緊急を要する処理は、割込み要求、キャッシュミス発生を知らせるイベントの何れかである
を備えることを特徴とする請求項２２記載のマルチスレッドプロセッサ。
【請求項２４】
前記優先度指定手段は、命令流毎に命令流の優先度を保持する制御レジスタを備え、
前記優先度は、命令流中の命令によって設定される
ことを特徴とする請求項２２記載のマルチスレッドプロセッサ。
【請求項２５】
前記機能ユニットの１つは、優先度の変更を指示する専用命令を受け、保持手段に保持された優先度のうち、当該専用命令が属する命令流の優先度を変更することを特徴とする請求項２４記載のマルチスレッドプロセッサ。
【請求項２６】
前記命令発行調停手段は、さらに一の機能ユニットに対して二以上の命令が発行可能と判断され、かつ、当該二以上の命令が属する命令流が同順位の優先度である場合には、当該一の機能ユニットに発行すべき命令を所定の手順で決定する
ことを特徴とする請求項２５記載のマルチスレッドプロセッサ。
【請求項２７】
前記命令発行調停手段は、
前記所定の手順として、周期的に異なる命令流が優先されるように決定する手順と、命令流の実行の履歴より前回と異なる命令流の命令を発行すべき命令と決定する手順と、固定的に何れかの命令流の命令を決定する手順との何れかに従って発行すべき命令を決定する補助判定手段を備える
ことを特徴とする請求項２６記載のマルチスレッドプロセッサ。
【請求項２８】
前記制御レジスタは、命令流毎に実行モード別の優先度フィールドを有し、
前記命令発行調停手段は、命令流の実行モードに応じた優先度フィールドを参照して前記調停を行う
ことを特徴とする請求項２４記載のマルチスレッドプロセッサ。
【請求項２９】
前記優先度指定手段は、
命令流中の専用命令によって命令流毎に実行モード別の設定可能な優先度フィールドを有する制御レジスタを備え、
機能ユニットの１つは、前記専用命令の発行元の命令解読手段に対応する命令流及びその実行モードを検出して、検出された命令流及び実行モードに対応する優先度フィールドに専用命令に従って優先度を設定する
ことを特徴とする請求項２２記載のマルチスレッドプロセッサ。
【請求項３０】
前記専用命令は、オペレーションコードのみからなり、優先度の上昇又は下降の何れかを指示する
ことを特徴とする請求項２９記載のマルチスレッドプロセッサ。
【請求項３１】
複数の命令流を同時かつ独立に並列実行するマルチスレッドプロセッサであって、
同時かつ独立に命令を実行する複数の機能ユニットと、
前記複数の命令流の対応して設けられる、命令流の命令を取り出して解読し、前記機能ユニットのうち発行先とすべき機能ユニットを解読する複数の命令解読手段と、
前記複数の命令流毎の優先度と、命令流毎に実行状態にあるか停止状態にあるかを指定する優先度指定手段と、
命令を受け入れ可能か否かを示す機能ユニット毎の状態に基づいて、前記発行先とすべき機能ユニットに、解読された命令を発行可能か否かを判断する命令発行判断手段と、
一の機能ユニットに対して二以上の命令が発行可能と判断された場合には、前記優先度指定手段に指定される優先度に従って当該二以上の命令を調停して当該一の機能ユニットに発行すべき一命令を決定する命令発行調停手段と
を備えることを特徴とするマルチスレッドプロセッサ。
【請求項３２】
前記優先度指定手段は、
第１の命令によって設定可能な命令流毎の優先度を保持する第１レジスタと、
第２の命令によって設定可能な、命令流が実行状態か停止状態かを示す命令流毎の状態フラグを保持する第２レジスタと、
第３の命令によって設定可能な、他の全命令流を停止することを示す命令流毎の排他停止フラグを保持する第３レジスタと
を備え、
前記命令発行判断手段は、前記状態フラグ及び排他停止レジスタに従って停止中の命令流の命令を発行不可と判断する
ことを特徴とする請求項３１記載のマルチスレッドプロセッサ。
【請求項３３】
前記第１の命令は、優先度を上げる又は下げることを指示するオペレーションコードのみからなる命令であり、
前記第２の命令は、停止状態に入ることを指示するオペレーションコードのみからなる命令であり、
前記第３の命令は、他の命令流を停止させることを指示するオペレーションコードのみからなる命令であり、
前記機能ユニットの１つは、第１、第２又は第３の命令が発行されたとき、当該命令の発行元の命令解読手段に対応する命令流を検出して、検出された命令流対応する優先度、状態フラグ又は排他停止フラグを変更する
ことを特徴とする請求項３２記載のマルチスレッドプロセッサ。
【請求項３４】
複数の命令流を同時かつ独立に並列実行するマルチスレッドプロセッサであって、
前記複数の命令流の命令を一時記憶する命令キャッシュと、
前記複数の命令流に対応して設けられ、命令キャッシュから命令流の命令をフェッチする複数の命令フェッチ手段と、
前記複数の命令流毎に優先度を指定する優先度指定手段と、
二以上の命令フェッチ手段から同時に命令フェッチ要求が出された場合には、前記優先度制御回路の優先度に従って、命令フェッチ要求を調停する命令フェッチ制御手段と
を備えることを特徴とするマルチスレッドプロセッサ。
【請求項３５】
命令を実行する複数の機能ユニットと、命令キャッシュから命令を取り出して解読し当該命令を実行すべき機能ユニットを指定して命令発行要求を出力する複数の命令解読部と、命令解読部と同数のレジスタセットを有し、命令解読部と同数の複数の命令流を同時かつ独立に実行するマルチスレッドプロセッサであって、
命令流中の命令によって命令流毎に設定可能な、命令流の優先度を保持する保持手段と、
複数の命令流によって共有される資源に対して、二以上の命令流が同時に競合した場合に、前記優先度に従って調停する制御手段と
を備え、
前記共有資源に対する競合は、一の機能ユニットに対する二以上の命令解読部からの命令発行要求の競合、命令キャッシュに対する二以上の命令解読部からの命令取り出し要求の競合、一のレジスタセットに対する二以上の機能ユニットからのアクセス要求の競合の何れかである
ことを特徴とするマルチスレッドプロセッサ。
【請求項３６】
前記機能ユニットの１つは、優先度を上げる又は下げることを指示する命令を受け、保持手段に保持された優先度のうち当該命令が属する命令流の優先度を変更する
ことを特徴とする請求項３５記載のマルチスレッドプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は複数の命令流から命令を並列に発行することによって、複数の演算ユニットを効率よく使用する情報処理装置に関する。
【０００２】
【従来の技術】
従来例としては、一つのプロセッサ内で複数の命令流を同時に処理するマルチスレッド・プロセッサがある。マルチスレッド・プロセッサの方式については、"A Multithreaded Processor Architecture with Simultaneous Instruction Issuing," In Proc. of ISS'91:International Symposium on Supercomputing, Fukuoka, Japan, pp.87-96, November 1991 に詳細に述べられている。
【０００３】
図１５は、この従来例のマルチスレッドプロセッサの構成を示すブロック図である。同図において、マルチスレッドプロセッサは、命令キャッシュ５００、３個の命令フェッチユニット５０１、３個の解読ユニット５０２、１２個のスタンバイステーション５０３、４個の命令スケジューリングユニット５０４、４個の機能ユニット５０５、レジスタセット５０６を備え、同図における命令フェッチユニットと命令解読ユニットとの組みに対応する３つの命令流を同時に独立して実行するよう構成されている。ここで命令流とは、命令フェッチユニットと命令解読ユニットとの組みによる処理の流れに対応する。
【０００４】
同図において、命令フェッチユニット５０１は、それぞれ異なる命令流の命令を命令キャッシュ５００から読み込む。
解読ユニット５０１は、それぞれの命令流の命令を解読し、当該命令を処理可能な機能ユニット５０５に接続されているスタンバイステーション５０３に命令の解読結果（以下単に命令という）を格納する。
【０００５】
命令スケジューリングユニット５０４は、スタンバイステーション５０３から適当な命令を選択し、空いている機能ユニット５０５に送る。一の機能ユニットに対する異なる命令流の命令解読結果がスタンバイステーション５０３に格納されている場合には、固定的な順番で命令が選択される。これにより命令流間の公平が図られている。
【０００６】
機能ユニット５０５は、それぞれ命令を実行する演算器であり、スタンバイステーション５０３からの命令をレジスタセット５０６を用いて実行する。各機能ユニットは同じものでよいが、例えばロード／ストアユニット、整数演算ユニット、浮動小数点演算ユニット、乗除算ユニットなどの演算種類別に備える場合が多い。
【０００７】
上記のように構成されたマルチスレッド・プロセッサにおいて、その動作を簡単に説明する。
同図のマルチスレッドプロセッサでは命令フェッチユニット５０１と解読ユニット５０２とが三組み備えられているので、３つの命令流を並列にフェッチ・解読することができる。３つの命令流と命令キャッシュ５００（又は図外のメインメモリ）中のプログラムとの対応関係については、１つのプログラムが１つの命令流に対応する場合（３つのプログラムから３つの命令流が生成される場合）や、１つのプログラムが複数の命令流に対応する場合（１つのプログラムから３つの命令流が生成される場合）などがある。後者は、例えば１つの画像処理プログラムを異なる画像データに対して同時に複数の命令流として実行させる場合である。
【０００８】
解読ユニット５０２に解読された命令は、スタンバイステーション５０３、命令スケジューリングユニット５０４を介して、当該命令に対応する機能ユニットに発行される。各機能ユニットは、どの命令流からの命令であっても発行された命令を実行する。
このように、マルチスレッド・プロセッサの特徴は、複数の命令流を演算器を共有して同時に実行することである。
【０００９】
なお、マルチスレッド・プロセッサは一つのプロセッサ内部で複数の命令流を扱うが、一つの命令流を実行する単位を論理プロセッサと呼ぶことにする。
論理プロセッサは各々独立に命令流を扱えるように解読ユニットや命令のシーケンス制御機構やレジスタセットなどを有する。複数の論理プロセッサにより使用される機能ユニットやキャッシュメモリなどは論理プロセッサ間で共有される。
【００１０】
一方、論理プロセッサに対して全体のプロセッサを物理プロセッサと呼ぶことにする。
また、マルチスレッド・プロセッサと既存のスーパースカラ方式のプロセッサとを比べると、スーパースカラ・プロセッサは、機能ユニットのみの多重化（複数化）がなされているため、同時に処理可能な命令流は１つであり、命令間の依存関係によりパイプラインインタロックが頻繁に発生し、その結果機能ユニットの使用効率は上がらず性能向上が困難であった。これに対して、上記のマルチスレッドプロセッサは、複数の命令流の命令を並列に実行することにより、各機能ユニットの使用効率を上げ、性能向上を実現できる。
【００１１】
【発明が解決しようとする課題】
しかしながら上記マルチスレッドプロセッサの構成では、下記の問題点を有していた。
第１に、複数の論理プロセッサが機能ユニットを共有しているため、複数の命令流から発行される命令が機能ユニットにおいて競合することがあり、このため、ある一定の期間で、特定の論理プロセッサの命令発行が他の論理プロセッサの命令発行に比べて極端に少なくなる場合があり、その特定の論理プロセッサの性能が極端に低下するという問題がある。また、論理プロセッサ間で負荷が大きく異なる場合には、各論理プロセッサに同じ処理内容の（同一プログラムから生成される）命令流を割り付けた場合であっても、特定の命令流だけ処理が遅れることになり、処理の終了時間がばらつき、全体として速度が上がらない場合も起こる。
【００１２】
第２に、論理プロセッサにそれぞれ異なる命令流が割り付けられ、特定の命令流だけ早く実行したい場合が発生しても、特定の論理プロセッサの処理速度を相対的に上げたり、命令キャッシュなどの共有資源を占有してしまうことができないため、全体の性能が低下してしまう。たとえば、緊急を要する割り込み処理などが発生した場合などがこれに当たる。
【００１３】
上記問題点に鑑み本発明の目的は、複数の命令流間で各命令流の処理性能を柔軟に調整することができ、かつ全体の処理効率を向上させたマルチスレッド・プロセッサを提供することを目的とする。
【００１４】
【課題を解決するための手段】
上記目的を達成するマルチスレッドプロセッサは、それぞれ命令を実行する複数の機能ユニットと、命令流に対応して設けられ、それぞれ命令を解読して、当該命令を実行すべき機能ユニットを指定するとともに当該機能ユニットに解読された命令を発行すベきことを要求する命令発行要求を作成する複数の命令解読手段と、命令流毎に命令流の優先度を保持する保持手段と、２以上の命令発行要求が同時に一の機能ユニットを指定している場合に、保持手段に保持された優先度に従って、当該機能ユニットに発行すべき解読された命令を決定する制御手段とを備えて構成される。
【００１５】
この構成によれば、各機能ユニットに発行すべき命令（命令の解読結果）が前記優先度に従って決定されるので、複数の命令流間で負荷のばらつきを優先度に応じて柔軟に調整することができ、命令流毎に必要とされる処理性能を適切に実現し、かつ全体の処理効率を向上させることができるという効果がある。
ここで前記保持手段は、さらに、命令によって設定可能な、命令流毎に命令流を停止すべきか実行すべきかを示すフラグ群を保持し、
前記制御手段は、前記決定を行う調停手段と、停止を示すフラグが設定されている場合には、そのフラグに対応する命令流の命令発行要求を除外して前記決定を行うことにより、当該命令流を停止する停止手段とを備えてもよい。
【００１６】
この構成によれば、さらに、命令流がその実行過程においてアイドル状態や待ち状態にある場合には、その命令流を停止状態とすることができる。つまりその結果、他の命令流を優先して実行させることができるので、さらに全体の処理性能を向上させることができる。
【００１７】
【発明の実施の形態】
＜マルチスレッド・プロセッサの構成＞
図１は、本発明の実施形態におけるマルチスレッド・プロセッサの主要部の構成を示すブロック図である。
本マルチスレッド・プロセッサは、命令解読部１〜３、機能ユニットＡ２０、機能ユニットＢ２１、機能ユニットＣ２２、機能ユニットＤ２３、命令発行判断部３０、命令発行調停部４０、命令発行禁止部５０、優先順位制御部６０、命令選択部７０を有し、論理プロセッサの実行状態、命令流の優先度及び外部要因に応じて各機能ユニットへの命令発行を調停するように構成されている。
【００１８】
また、本マルチスレッド・プロセッサは、図１５に示した命令キャッシュ、命令フェッチユニット、レジスタファイルなどを当然に備えているが、従来例と同じなので図１では省略している。同様に機能ユニットのパイプライン段数などの詳細な構成等についても本発明と関係しないので説明を省略する。また、説明をわかりやすくするために本実施形態では、各命令解読部は命令流１個につき１命令を解読し、一度に発行できる命令も１個であるものとする。
【００１９】
図１において、命令解読部１〜３は、それぞれ命令流の命令を解読し、解読結果として、命令発行判断部３０に命令発行要求を、命令選択部７０に命令内容（オペレーション等）を出力する。ここで、命令発行要求は、命令発行を要求するフラグ（以下、要求フラグと呼ぶ）と、当該命令を実行すべき機能ユニットの種類を示す情報（以下機能ユニット番号と呼ぶ）とを含む。命令解読部１〜３は、独立に命令流を解読するので、それぞれ上記の論理プロセッサに対応する。本実施形態では１つの物理プロセッサに３つの論理プロセッサを内蔵させるために命令解読部が３つ設けられている。以降、命令解読部１〜３に対応する論理プロセッサを論理プロセッサ１〜３と呼んで区別する。同様に論理プロセッサ１〜３に対応する命令流を命令流１〜３と呼ぶ。
【００２０】
機能ユニットＡ２０、Ｂ２１、Ｃ２２、Ｄ２３（以下、機能ユニットＡ、Ｂ、Ｃ、Ｄと呼ぶ）は、命令解読部１〜３から命令選択部７０を介して発行された命令（解読結果）を受けて、当該命令実行、すなわちデータアクセス処理や演算処理などを行う。各機能ユニットの機能は、全て同じでよいが理解をし易いようにするためその処理内容を例示する。
【００２１】
すなわち、機能ユニットＡはメモリアクセス命令を処理するロードストアユニット、機能ユニットＢは整数演算を処理する整数演算ユニット、機能ユニットＣは浮動小数点の加減算や整数と浮動小数点間の変換を行なう浮動小数点ユニット、機能ユニットＤは浮動小数点の乗除算を行なう浮動小数点ユニットである。さらに本実施形態では機能ユニットＢは、整数演算の一処理内容として、優先度の設定に関する命令を処理する機能を有している。これらの機能ユニットは、論理プロセッサ１〜３の構成要素ではあるが論理プロセッサと１対１に対応するわけではなく、論理プロセッサ１〜３に共用される。また、各機能ユニットは、命令を処理中か否かに応じて、命令を受け付けられる状態（以下、単にreadyと呼ぶ）にあるか受け付けられない状態（以下、単にnot readyと呼ぶ）にあるかを命令発行判断部３０に通知する。
【００２２】
命令発行判断部３０は、命令解読部１〜３からの命令発行要求（上記要求フラグと機能ユニット番号）を受けて、命令の発行先とすべき機能ユニットを判断し、さらに、各機能ユニットからのreadyか否かを示す通知と、優先順位制御部６０からの各論理プロセッサが停止状態にあるか実行状態にあるかを示す通知とを受けて、機能ユニットＡ〜Ｄ毎に、命令を発行可能か否かを判断する。
【００２３】
命令発行調停部４０は、１つの機能ユニットに対して発行可能と判断された命令発行要求が複数あって競合する場合には、優先順位制御部６０からの指定される論理プロセッサ毎の優先度に応じて、複数の命令発行要求を調停して、発行すべき命令を１つ決定する。
命令発行禁止部５０は、命令発行調停部４０の調停結果に対して、当該命令を発行するか否かを最終的に判断し、判断の結果、発行すべき命令を命令選択部７０に指示する。具体的には、論理プロセッサ毎に緊急を要する処理が要求された場合には、当該論理プロセッサの命令流の命令については発行を一時的に禁止し、そうでない場合には、発行を命令選択部７０に指示する。命令発行禁止部５０が一時的に命令発行を禁止しているのは、命令発行判断部３０及び命令発行調停部４０による処理の後に上記の緊急を要する処理が発生した場合に、それを最優先するためである。命令発行禁止部５０は、命令発行調停部４０により発行するべき命令が決定された後に当該命令の発行を禁止することができるので、緊急を要する処理の発生タイミングが命令発行調停部４０による決定後であっても、有効に禁止することができる。例えば、緊急を要する処理の発生タイミングが、マシンサイクルの期間の遅い時点であっても有効に禁止することができる。
【００２４】
優先順位制御部６０は、論理プロセッサ毎の優先度の管理、及び論理プロセッサ毎に実行状態にあるか停止状態にあるかを示す情報を管理し、命令発行調停部４０に対して上記優先度を通知し、命令発行判断部３０に対して上記実行状態か否かを通知する。さらに、優先順位制御部６０は、特定の命令実行時に、当該論理プロセッサを所定数の連続サイクルの間優先させる機能（以下、連続サイクル優先機能と呼ぶ）を有している。上記優先度および実行状態か否か示す情報を管理するため、優先順位制御部６０は、３本の制御レジスタすなわち優先順位指定レジスタ、内部割込みレジスタ、排他停止レジスタを備える。これらのレジスタは、命令流中の命令に従ってその値が設定される。
【００２５】
命令選択部７０は、命令発行禁止部５０から発行元の命令解読部及び発行先の機能ユニットを指示する命令発行指示に従って、命令解読部１〜３により解読された命令（オペレーション等）を機能ユニットＡ〜Ｄに発行する。
＜優先順位制御部６０：優先順位指定レジスタ＞
図３は、優先順位制御部６０に内蔵される優先順位指定レジスタ（以下PRIレジスタと呼ぶ）のビット構成を示す説明図である。
【００２６】
同図のように、PRIレジスタは、MYID、PRI3、PRI2、PRI1、MYPRIの各フィールドを有し、論理プロセッサ毎の優先順位及び停止状態か否かを示す情報を保持している。
MYIDフィールドは、論理プロセッサにおいて本PRIレジスタの読み出し命令が実行されたときに、当該読み出し命令を実行した論理プロセッサのＩＤを示すフィールドである。例えば、論理プロセッサ３において当該読み出し命令が実行された場合には、論理プロセッサ３を示すＩＤ（例えば100）が読み出される。
【００２７】
PRI3フィールドは、論理プロセッサ３の優先順位及び停止状態か否かを示すフィールドである。
PRI2、PRI1フィールドは、それぞれ論理プロセッサ２、１についてPRI3と同様である。
MYPRIフィールドは、論理プロセッサにおいて本PRIレジスタの読み出し命令が実行されたときに、当該読み出し命令を実行した論理プロセッサの優先順位を示すフィールドである。例えば、論理プロセッサ１において当該読み出し命令が実行された場合には、PRI1フィールドの内容がMYPRIフィールドにコピーされて読み出される。
【００２８】
図４は、PRIレジスタ中のPRI3〜PRI1フィールドそれぞれの下位２ビットのビット割当てを示す説明図である。同図ではPRI3〜1をPRIxと略し、フィールド内のビット位置を[  ]内に付記している。ただしxは、論理プロセッサ番号（又はスレッド番号）を示す。
同図のようにPRIx[1:0]は、低(lowest)、中(middle)、高(highest)の３レベルの優先順位を表す。２ビットで３レベルの優先順位を表しているのは、PRIx[1]をスーパーバイザモード用、PRIx[0]をユーザモード用として個別に設定を可能にするためである。この優先順位の設定は、次に示す専用命令（ニーモニック表記）に従って機能ユニットＢによって行われる。
「inc pri」；この命令は、優先順位を上げる、つまりスーババイザモードではPRIx[1]を１に、ユーザモードではPRIx[0]を１に設定する。
「dec pri」；この命令は、優先順位を下げる、つまりスーババイザモードではPRIx[1]を０に、ユーザモードではPRIx[0]を０に設定する。
【００２９】
これらの命令は、通常のレジスタ間のデータ転送命令とは異なり、オペランドを必要とせず、オペレーションコードのみからなる命令なので、どの命令流においても同じ命令を利用できることになる。例えば、１つのプログラムから複数の命令流を生成し、各命令流に異なるデータを分担させて並列に処理する場合に有用である。
【００３０】
また、前記一の機能ユニットによって当該命令が属する命令流の優先度を変更するので、異なる命令流の優先度を誤って書換えることもなくなり、誤動作を防止することができる。例えば、ＲＧＢカラー画像の色別画像データに同一の画像処理を施す場合、つまり、画像処理用の１つのプログラムを３つの命令流として独立かつ同時に実行させる場合、情報の隠蔽（プログラムはＲＧＢのどれかを区別する必要がない）することができ、かつ命令流の独立性を保証することができ、その結果ＯＳやシステム全体の信頼性が向上する。
【００３１】
これらの命令及び同図のビット割当てによれば、例えば、ユーザモードからスーパーバイザモードに移行して優先順位を変更した場合でも、ユーザモードへ復帰したときに以前の優先度が保存されることになる。例えば、ユーザーモードで割り込みが発生し、スーパーバイザーモードに一時的に遷移しても、割り込み処理からユーザーモードに戻る前に、PRIx[1]を元に戻すことにより、ユーザーモードでの優先順位が保存されることになる。
【００３２】
図５は、優先順位を示すフィールドPRIレジスタ中のPRI3〜1フィールドそれぞれの上位１ビットのビット割当てを示す説明図である。
同図のようにPRIx[2]は、論理プロセッサが実行状態か停止状態かを示している。実行状態から停止状態への設定は、次に示す専用命令（ニーモニック表記）に従って機能ユニットＢによって行われる。
「halt」；この命令は、発行元の論理プロセッサを停止状態にする。つまり、当該論理プロセッサのPRIx[2]を１に設定する。また、この命令による停止状態を他の命令による停止状態と区別するときは自己停止状態と呼ぶ。
【００３３】
自己停止状態の解除（実行状態への復帰）は、命令によるのではなく、当該論理プロセッサに対する割込み入力による。つまりマルチスレッドプロセッサでは割込み処理は論理プロセッサ個別に発生するので自己停止状態にある論理プロセッサに対して割込み（外部割込み、内部割込み等）が発生した時点で解除される。
＜優先順位制御部６０：内部割込みレジスタ＞
図６は、優先順位制御部６０に内蔵される内部割込みレジスタ（以下IRレジスタと呼ぶ）のビット構成を示す説明図である。ここでいう内部割込みとは、論理プロセッサ間の割込み、つまり一の論理プロセッサから他の論理プロセッサへかける割込みをいう。内部割込みがかけられた論理プロセッサは、自己停止状態にある場合に自己停止状態が解除されるので、例えば論理プロセッサ間で同期して処理する場合や同期通信する場合に用いられる。
【００３４】
同図に示すようにIRレジスタは、MYIDフィールドとIR3〜IR1ビットとを有し、他の論理プロセッサに対して内部割込みを要求するためのレジスタである。
MYIDフィールドは、既に説明した図５と同様であるので省略する。
IR3ビットは、論理プロセッサ３に対して他の論理プロセッサが内部割込みを要求するビットである。このビットがＯＮになると、その割込み要求を受けた命令解読部３の制御によってPR3[2]が０に設定されるとともにIR3もＯＦＦに戻される。ここでPR3[2]が０に設定されることにより論理プロセッサ３の自己停止状態が解除される。
【００３５】
IR2、IR1ビットも、それぞれ論理プロセッサ２、１に対する割り込み要求ビットであり、IR3ビットと同様である。
IR3〜IR1ビットの設定は、通常のレジスタ転送命令に従って行われる。通常のレジスタ転送命令命ではIR3〜IR1のビット位置に直接書き込む必要があるので、各命令流は自身の論理プロセッサＩＤと割込み先の論理プロセッサＩＤとを区別する必要があるが、上記のMYIDフィールドを読み出すことによって各命令流において論理プロセッサＩＤの操作を可能にしている。
＜優先順位制御部６０：排他停止レジスタ＞
図７は、優先順位制御部６０に内蔵される排他停止レジスタ（以下EXCLレジスタと略す）のビット構成を示す説明図である。ここで、排他的停止とはある１つのプロセッサ以外の論理プロセッサを停止させることをいう。ただし、２つ以上の論理プロセッサが同時に排他的停止状態にはなることはできない。
【００３６】
同図に示すようにEXCLレジスタは、MYIDフィールドとEXCL3〜EXCL1の各ビットとを有し、１つの論理プロセッサのみを実行状態にし、他の論理プロセッサを停止状態にすることを要求するためのレジスタである。
MYIDフィールドは、図３及び図６と同様なので説明を省略する。
EXCL3ビットは、このビットがＯＮのとき論理プロセッサ３が排他的停止を実行していることを示す。この場合実行できるのは論理プロセッサ３のみで、論理プロセッサ２および論理プロセッサ１は停止状態になる。
【００３７】
EXCL2、EXCL1の各ビットも、同様である。
これらのEXCL3〜EXCL1の各ビットは、次に示す専用命令（ニーモニック表記）に従って機能ユニットＢによって設定及び解除がなされる。
「excsv」；この命令は、発行元の論理プロセッサに対する排他停止の設定つまり発行元以外の全論理プロセッサを停止させる命令である。例えば、論理プロセッサ１がこの命令を実行した場合、EXCL1がＯＮに、EXCL2及びEXCL3がＯＦＦに設定される。また、仮に複数の論理プロセッサが同時にこの命令を発行したとしても、全論理プロセッサが動作を停止することはない。なぜなら、この命令は機能ユニットＢにのみ実行されるので、実行時点では１つに限定されるからである。
「retex」；この命令は、発行元の論理プロセッサに対する排他停止の解除、つまり他の全論理プロセッサを元の状態に復帰させる命令である。例えば、論理プロセッサ１がこの命令を実行した場合、EXCL1がＯＦＦに設定される。
【００３８】
これらの命令も、上記incpr命令、decpr命令と同様、オペランドを必要としない、どの命令流においても同じ命令を利用できる。
上記のPRIレジスタ、IRレジスタ、EXCLレジスタの３つの制御レジスタは、物理的な実体はそれぞれ１つずつであるが、各レジスタのMYIDフィールドとPRIレジスタのMYPRIフィールドは、自論理プロセッサ自身の値を表示するため、各論理プロセッサからは論理プロセッサごとに異なるレジスタが存在するかように見える。また、これらの制御レジスタのアドレシングはすべての論理プロセッサから同じため、同じ命令を実行してもそれぞれ自論理プロセッサ自身のＩＤや優先順位を見ることができる。
＜命令発行判断部３０＞
図８は、図１の命令発行判断部３０のより詳細な構成例を示すブロック図である。この命令発行判断部３０は、停止判断部３１０、分配部３２０、発行判断部３３０を備える。
【００３９】
停止判断部３１０は、命令解読部１〜３のそれぞれに対応する３組のＮＯＲ回路とＡＮＤ回路を備える。ＮＯＲ回路とＡＮＤ回路との各組は、命令解読部から上述した命令発行要求（要求フラグと機能ユニット番号）を受けて、各論理プロセッサ毎に自己停止状態（PRIレジスタのPRIx[2]がＯＮ）又は排他停止により停止状態になっている（EXCLxビットがＯＮ）場合には、要求フラグの信号（以下要求有無信号と呼ぶ）を強制的にＯＦＦにし、実行状態でかつ排他停止により停止されていない場合には、要求有無信号をそのまま出力する。
【００４０】
分配部３２０は、命令解読部１〜３のそれぞれに対応する３つのデマルチプレクサを備える。各デマルチプレクサは、停止判断部３１０を介して入力される要求有無信号を、機能ユニット番号に従って当該命令を実行すべき機能ユニットに分配する。その結果、機能ユニット毎に各命令解読部からの要求有無信号が出力される。
【００４１】
発行判断部３３０は、機能ユニットＡ〜Ｄのそれぞれに対応する４組のＡＮＤ回路群を備える。各ＡＮＤ回路群は、分配部３２０により分配された要求有無信号を、機能ユニットが上述したready状態である場合には、そのまま出力し、not ready状態である場合にはＯＦＦにして出力する。ここで、ready状態で有ることを示すready_n信号（nはＡ、Ｂ、Ｃ又はＤ）は、対応する機能ユニットが命令を受け付けられる状態にあることを示し、論理プロセッサ１〜３に対応して機能ユニットxから出力される３ビットの信号である。発行判断部３３０からの出力信号（1A〜3A、1B〜3B、1C〜3C、1D〜3D）については、いずれも論理”１”のとき有効（命令発行可能）であり、例えば、出力信号1Aは発行元が命令解読部１で発行先が機能ユニットＡを、出力信号3Bは発行元が命令解読部３で発行先が機能ユニットＢを意味する。
＜命令発行調停部４０＞
図９は、図１の命令発行調停部４０のより詳細な構成例を示すブロック図である。この命令発行調停部４０は、機能ユニットＡ〜Ｄのそれぞれ対応する調停部４０Ａ〜４０Ｄを備える。各調停部は同じ動作をするので、ここでは調停部４０Ａを代表として説明する。調停部４０Ａは、優先順位判定部４１Ａと判定補助部４２Ａとを備える。
【００４２】
優先順位判定部４１Ａは、発行判断部３３０からの出力される信号1A、2A、3Aと、各論理プロセッサの優先順位PRI1[1:0]、PRI2[1:0]、PRI3[1:0]を受けて、有効な要求有無信号のうち優先順位が最も高いものを出力する。優先順位判定部４１Ａにおいて、この機能を実現するための制御論理を図１０に示す。
図１０（ａ）では、PRIレジスタ中のPRI1、PRI2、PRI3フィールドに指定された論理プロセッサ１〜３の優先順位がPRI1＞PRI2＞PRI3の場合、つまり優先レベルでは（PRI1、PRI2、PRI3）＝（高、中、低）の場合の入力1A、2A、3Aと、出力1A´、2A´、3A´とを示している。また、図示していないが、優先順位がPR1＞PR3＞PR2の場合、PR2＞PR1＞PR3の場合、PR2＞PR3＞PR1の場合、PR3＞PR1＞PR2の場合、PR3＞PR2＞PR1の場合にも、いずれもの信号名を読み換えるだけで全く同じ制御論理になるので、説明を省略する。
【００４３】
図１０（ｂ）では、優先順位がPRI1＝PRI2＞PRI3の場合、つまり優先レベルでは（PRI1、PRI2、PRI3）＝（高、高、中）、（高、高、低）又は（中、中、低）の場合を示している。図示していないが、優先順位がPR1＝PR3＞PR2の場合、PR2＝PR1＞PR3の場合、PR2＝PR3＞PR1の場合、PR3＝PR1＞PR2の場合、PR3＝PR2＞PR1の場合にも、いずれも信号名を読み換えるるだけで全く同じ制御論理になるので、説明を省略する。また、図中の波線を付した出力信号のように、入力信号のうち優先順位が最も高く、かつ有効な信号が２つ以上存在する場合には、優先順位判定部４１Ａはそれらを一応”１”として出力する。
【００４４】
図１０（ｃ）では、優先順位がPRI1＞PRI2＝PRI3の場合、つまり（PRI1、PRI2、PRI3）＝（高、中、中）、（高、低、低）又は（中、低、低）の場合を示している。また、図示していないが、優先順位がPR1＞PR3＝PR2の場合、PR2＞PR1＝PR3の場合、PR2＞PR3＝PR1の場合、PR3＞PR1＝PR2の場合、PR3＞PR2＝PR1の場合にも、いずれもの信号名を読み換えるだけで全く同じ制御論理になるので、説明を省略する。
【００４５】
また、優先順位判定部４１Ａは、優先順位がPRI1＝PRI2＝PRI3の場合には、有効な入力信号が２つ以上ある場合には、有効な信号を全て一応”１”として出力する。
判定補助部４２Ａは、PRIレジスタにおいて優先順位が同じに設定されている論理プロセッサが同時に命令発行要求を出した場合、つまり、優先順位判定部４１Ａの出力（1A´、2A´、3A´）において”１”が２つ以上ある場合、論理プロセッサ間で命令発行が偏らないように調整するため、何れを”１”するか判定する。例えば、判定補助部４２Ａは、（１）サイクル（１サイクル又は数サイクル）毎に”１”とする論理プロセッサを変更する（２）以前命令発行をできなかった論理プロセッサを優先する（３）固定的に何れかを決めておく。また、これらを切り替えるようにしてもよい。
＜命令発行禁止部５０＞
図１１は、図１の命令発行禁止部５０のより詳細な構成例を示すブロック図である。この命令発行禁止部５０は、機能ユニットＡ〜Ｄのそれぞれ対応する禁止部５０Ａ〜５０Ｄと、発行通知部５５とを備える。各禁止部は同じ動作をするので、ここでは禁止部５０Ａを代表として説明する。
【００４６】
禁止部５０Ａは、緊急を要する処理として、外部割込み要求、内部割り込み要求、キャッシュミスやメモリアクセスエラー等のアクセス例外、トラップ命令などが発生した場合に、その発生元の論理プロセッサＩＤを検出し、当該論理プロセッサに対する命令発行を１サイクルの間の禁止するよう制御する禁止制御部５１Ａと、禁止制御部５１Ａの指示に従って調停部４０Ａの出力信号（1AA〜3AA）をゲートした結果を命令選択部７０に対する命令発行指示（1AAA〜3AAA）を出力する３個のＡＮＤ回路と、機能ユニットＡに対して命令発行を通知するＯＲ回路とからなる。
【００４７】
発行通知部５５は、命令解読部１〜３に対応する３個のＯＲ回路からなり、禁止部５１Ａ〜５１Ｄから各論理プロセッサの命令発行指示が出力される毎に、対応する命令解読部に次の命令を発行してもよいことを通知する発行通知を出力する。
＜機能ユニットＢ＞
機能ユニットＢは、整数演算命令を実行するほか、上述した各種の専用命令と、PRIレジスタ、EXCLレジスタ、IRレジスタを読み出す命令とを実行するように構成されている。
【００４８】
なお、上記専用命令等については、本実施形態では機能ユニットＢが実行するが、他の機能ユニットが実行するように構成してもかまわない。
図１２に、機能ユニットＢによる上記専用命令及び読み出し命令の実行内容を示す説明図を示す。同図において、「x」は当該命令の発行元の論理プロセッサ番号を、「y」は当該命令の発行元以外の論理プロセッサＩＤを示す。この論理プロセッサ番号は、禁止部５０Ｂから出力される信号（図１１の1BBB〜3BBB）により機能ユニットＢに通知される。
【００４９】
同図に示すように機能ユニットＢは、「inc pri」命令に対して、スーパバイザモードではPRIレジスタのPRIx[1]ビットを１に、ユーザモードではPRIx[0]ビットを１を設定する。
「dec pri」命令に対しては、スーパバイザモードではPRIx[1]を０に、ユーザモードではPRIx[0]ビットを０に設定する。
【００５０】
「halt」命令に対しては、当該論理プロセッサのPRIレジスタのPRIx[2]ビットに１を設定する。
「excsv」命令に対しては、EXCLレジスタのEXCLxビットを１に、EXCLyビットを０に設定する。例えば、論理プリセッサ２が本命令の発行元である場合、機能ユニットＢは、EXCL2ビットを１に、EXCL3ビットおよびEXCL1ビットを０に設定する。
【００５１】
「retex」命令に対しては、EXCLxビットを０に設定する。
このように上記の専用命令は、同じ命令であっても当該命令発行元の論理プロセッサに応じてレジスタ中の異なるビットが操作される。
また、図１２に示した各mov命令については、機能ユニットＢは以下のように実行する。
【００５２】
「mov PRI,R0」命令は、PRIレジスタの内容をR0レジスタに転送する命令である。この命令に対して機能ユニットＢは、以下のように命令を実行する。
PRIレジスタ中のMYIDフィールド（=PRI[31:29]）については、その命令の発行元の論理プロセッサＩＤをR0[31:29]の各ビットに書き込む。
PRIレジスタ中のPRI[11:3](=PRI3,PRI2,PRI1フィールド)の各ビットについては、そのデータを読み出してR0レジスタ中の[11:3]に転送する。
【００５３】
PRI[2:0]（=MYPRIフィールド）については、PRI3,PRI2,PRI1フィールドのうちその命令の発行元の論理プロセッサＩＤに対応するPRIxをR0[31:29]の各ビットに書き込む。
「mov IR,R0」命令は、IRレジスタの内容をR0レジスタに転送する命令である。この命令に対して機能ユニットＢは、IRレジスタ中のMYIDフィールド（=IR[31:29]）については、その命令の発行元の論理プロセッサＩＤをR0[31:29]の各ビットに書き込む。IR[2:0]（=IR3,IR2,IR1ビット）の各ビットについては、その値を読み出してR0[2:0]の各ビットに書き込む。
【００５４】
「mov EXCL,R0」命令は、EXCLレジスタの内容をR0レジスタに転送する命令である。この命令についての機能ユニットＢの実行内容は、上記「mov IR,R0」に比べて、転送元がＩＲレジスタであること以外同様である。
上記の読み出し命令を実行することにより、各論理プロセッサは、読み出されたＭＹＩＤフィールドから自身の論理プロセッサＩＤの値と、他の論理プロセッサの状態（優先順位、自己停止状態、排他停止状態など）とを得ることができる。
＜優先順位制御部６０の詳細構成＞
図１３は、優先順位制御部６０の詳細な構成を示すブロック図である。
【００５５】
優先順位制御部６０は、PRIレジスタ６１、IRレジスタ６２、EXCLレジスタ６３、セレクタ６４、連続サイクル優先部６９を備える。
PRIレジスタ６１、IRレジスタ６２、EXCLレジスタ６３は、図３、図６、図７においてそのビット構成を既に説明したので、ここでは、そのハードウェア構成を説明する。
【００５６】
これらのレジスタ６１〜６３は、本マルチスレッドプロセッサの内部バスに接続され、内部バスを介して機能ユニットＢに読み出し書き込みがなされる。
これらのレジスタの上位３ビット（MYIDフィールド）は、データを保持する機能を有せず、レジスタの読み出し命令実行時に、論理プロセッサＩＤをトランスパレントに内部バスに出力する。このとき論理プロセッサＩＤの値は、禁止部５０Ｂから出力される信号（図１１の1BBB〜3BBB）により通知される。
【００５７】
またPRIレジスタ６２の下位３ビットは、PRIレジスタの読み出し命令実行時に、セレクタ６４の出力をトランスパレントに内部バスに出力する。
セレクタ６４は、PRIレジスタの読み出し命令実行時に、PRIレジスタ６２中のPRI3,PRI2,PRI1フィールドのうち、その命令発行元の論理プロセッサＩＤに対応するものを選択して、ＩＲレジスタ６２中の「MYPRI」フィールドを介して内部バスに出力する。
【００５８】
連続サイクル優先部６９は、特定の命令列が実行される間、その優先度を一時的に高く変更する機能を有する。ここで、特定の命令列とは、例えば他の論理プロセッサと共有する資源の読み出しと書き込みを実行する場合など、連続サイクルで実行される必要がある命令列をいう。
特定の命令列の一例を以下に示す。ただし命令はニーモニック表記で表している。また；以下は命令内容を示すコメントである。
LOOP:
;ラベル
aldst MEM[100],R0
;アトミック（Atomic LoaD STart）命令とも呼ぶ。
【００５９】
;メモリ（１００番地）のデータをＲＯに転送する
test R0
;Ｒ０＝０ならばゼロフラグを１にセットする
beq LOOP
;ゼロフラグが１ならラベルＬＯＯＰへ分岐する
store R1,MEM[100]
;レジスタＲ１のデータをメモリ１００番地に転送する
上記の特定命令列は、メモリの１００番地を読み出し、もし読み出したデータが０であれば、レジスタＲ１のデータをメモリの１００番地に書き込む。もし読み出したデータが０でなければ、０になるまで繰り返し読み出すループ処理を表している。この特定命令列が連続サイクルで実行される必要があるのは、例えばメモリ１００番地が複数の論理プロセッサの共有資源として用いられている場合である。つまり、ある論理プロセッサが上記特定命令列の実行中には、他の論理プロセッサがメモリ１００番地を書き換えてはならない。
【００６０】
このような特定命令列が連続するサイクルで実行されることを保証するために、連続サイクル優先部６９は、一の機能ユニットで上記特定命令列の先頭命令の実行開始を検出したとき、その命令の実行サイクルから連続する所定数のサイクルの間、その命令発行元の論理プロセッサ（命令流）の優先順位が他の論理プロセッサよりも高くなるように優先順位制御部６０の優先順位を一時的に変更する。
＜連続サイクル優先部６９＞
連続サイクル優先部６９は、図１３のように特定命令検出部６５、カウンタ６６、コンパレータ６７、セレクタ６８を備える。
【００６１】
同図において特定命令検出部６５は、特定命令列の先頭命令（以下特定命令と呼ぶ）の実行が開始されたことを検出する。上記の特定命令列の例では、aldst命令が特定命令として検出される。より具体的には特定命令検出部６５は、命令解読部１〜３から特定命令を解読した旨の通知と、特定命令を命令発行禁止部５０がその一の機能ユニットに発行した旨の通知とを受けて、両通知をともに受けたことをもって特定命令の実行開始を検出する。
【００６２】
カウンタ６６は、特定命令の実行開始が検出されたとき、特定命令列の実行に要するサイクル数をカウントする。上記の例ではカウンタ６６は、aldst命令に続く３命令の実行に要する３サイクルをカウントするため、特定命令の実行開始が検出されたときに初期値３がロードされ、０までダウンカウントする。これにより上記store R1,MEM[100]の実行サイクルで０になる。また、上記特定命令列がループ処理になっている場合には、カウンタ６６はaldst命令が検出される度に初期値３からカウントすることになる。
【００６３】
コンパレータ６７は、カウンタ６６のカウント値が０と一致するか否かを判定する。つまり特定命令列の連続サイクルの期間でないかどうかを判定する。
セレクタ６８は、６ビット長の４入力１出力のセレクタであり、連続サイクルの期間において優先順位を一時的に変更するために用いられている。
図１４に、セレクタ６８に入力される選択信号と、出力値との関係を表した説明図を示す。セレクタ６８の入力値は、同図では省略されているが、図１３に示したように「PRI[11:3](=PRI3[1:0],PRI2[1:0],PRI1[1:0]」、「110000」、「001100」、「000011」の４つである。
【００６４】
同図によれば、セレクタ６８の出力は、通常のとき、つまり連続サイクルの期間でない場合（カウント値＝０に一致するとき）、PRIレジスタ中のPRI[11:3](=PRI3,2,1フィールド)に指定されている優先順位を出力する。
連続サイクルの期間である場合（カウント値＝０に一致しないとき）、セレクタ６８は、その特定命令の発行元が論理プロセッサ３であれば「110000」、論理プロセッサ２であれば「001100」、論理プロセッサ１であれば「000011」を、「PRI[11:3](=PRI3'[1:0],PRI2'[1:0],PRI1'[1:0]」として出力する。
【００６５】
これにより連続サイクルの期間中、特定命令の発行元の論理プロセッサの優先順位が最も高くなるように一時的に変更される。
以上のように構成された本実施形態のマルチスレッドプロセッサについて、その動作を説明する。
＜優先順位、自己停止状態、排他停止の設定動作＞
本実施形態のマルチスレッドプロセッサでは、命令流（論理プロセッサ）毎の優先順位の設定・変更用にincpr命令及びdecpr命令、自己停止用にhalt命令、排他停止用にexcsv命令及びretex命令という専用命令が用意されている。これらの専用命令は、命令流の生成元のプログラム中に予め適宜設定されている必要がある。
【００６６】
たとえば、プログラム中の優先順位を上げて処理すべき部分では、当該プログラム部分の直前にincpr命令を、直後にdecpr命令を設定しておけばよい。このように設定されたincpr命令及びdecpr命令は、機能ユニットＢによって次のように実行される。すなわち、機能ユニットＢは、論理プロセッサ１〜３の何れが発行元であるかに応じて、PRIレジスタの対応するPRxフィールドに対してユーザモードのときはPRIx[0]ビットを対象に、スーパーバイザモードのときはPRIx[1]を対象にして１又は０を設定する。これにより論理プロセッサ毎に優先順位を必要に応じて動的に変更させることができる。
【００６７】
また、他の論理プロセッサを停止させて自身の論理プロセッサのみを動作させて処理すべきプログラム部分では、当該プログラム部分の直前にexcsv命令を、直後にretex命令を設定しておくことになる。これらの命令も、機能ユニットＢによって上記と同様に実行される。
逆に、他の論理プロセッサを優先させて自身の論理プロセッサを停止させる場合には、halt命令を設定することになる。この命令も機能ユニットＢによって実行される。但し、停止状態の論理プロセッサは、当該論理プロセッサに対する割り込み要求によって停止状態が解除されるので、割り込み要求が適宜入力される必要がある。例えば論理プロセッサ間の内部割込みは、IRレジスタによる。つまり、割込みをかける論理プロセッサは、事前に通常のレジスタ転送命令によりIRレジスタ、PRIレジスタまたはEXCLレジスタを読み出して自身のMYIDを読み出して、さらに割込み先の論理プロセッサに対応するIRxビットを決定してから、通常の転送命令によりIRレジスタに内部割り込み要求をセットすることになる。
＜全体動作＞
例えば、命令解読部１の解読の結果、機能ユニットＢに対する命令発行要求（要求フラグと機能ユニットＢの番号）を出力した場合、論理プロセッサ１が自己停止状態または他の論理プロセッサの排他停止による停止状態にある場合には、命令発行判断部３０内の停止判断部３１０によって要求フラグ自体が無効として出力されなくなる。これにより他の論理プロセッサ２及び３が機能ユニットを使用できることになる。
【００６８】
論理プロセッサ１が自己停止状態でもなく他の論理プロセッサの排他停止による停止状態でもない場合には、命令発行判断部３０内の分配部３２０において機能ユニットＢへ分配され、さらに、機能ユニットＢが論理プロセッサ１に対してready状態であれば発行判断部３３０によって発行可能と判断され、not ready状態であれば発行不可と判断される。
【００６９】
次に、命令発行調停部４０は、命令発行判断部３０からの機能ユニットごとの命令発行要求を受けて、優先順位制御部６０からの論理プロセッサごとの優先順位を用いて、機能ユニットに発行できる論理プロセッサを決定する。例えば、機能ユニットＢに対して命令解読部１からの命令発行要求のみが出力されている場合（図９の1B〜3Bのうち1Bのみ有効な場合）には、命令発行調停部４０は、その命令発行要求を有効（図９の1BB〜3BBのうち1BBのみ有効）とする。
【００７０】
例えば、命令解読部１が機能ユニットＡに対する命令を解読し、命令解読部２は機能ユニットＢに対する命令を解読し、命令解読部３が機能ユニットＣに対する命令を解読し、かつ、すべての機能ユニットが命令をready状態にある場合には、命令発行調停部４０において３個の命令発行要求がすべて有効になる。
一方、命令解読部１が機能ユニットＡに対する命令を解読し、命令解読部２も機能ユニットＡに対する命令を解読した場合（図９の1Aと2Aとが同時に有効な場合）には、どちらかの命令しか発行できないので、優先順位判定部４１Ａは、優先順位制御部６０内にＰＲＩレジスタより優先順位を判断し、優先順位の高いものから命令を発行する。もし、この場合に論理プロセッサ１と論理プロセッサ２の優先順位が同じであれば、判定補助部４２Ａにより何れかの命令発行要求のみを有効にする。
【００７１】
さらに、命令発行禁止部５０は、命令発行調停部４０で発行されることが決定した命令に対し、論理プロセッサの何れかで緊急を要する処理が発生した場合に当該論理プロセッサの命令発行を禁止する。
命令発行判断部３０と命令発行禁止部５０とは、何れも命令発行要求を命令発行の候補から外す機能を有しているが、機能分担しているのは次の理由による。
【００７２】
すなわち、早い段階で命令の受け入れができないことがわかる要因については、命令発行判断部３０において、受け入れができない論理プロセッサの命令を発行不可と判断し命令発行の候補から外すことができるが、もし、遅い段階でしかわからない要因についてまで、命令発行判断部３０において、命令発行の候補から外そうとすると、命令発行可能か否かの最終判断が遅れてしまい、プロセッサの周波数向上に影響するからである。
【００７３】
例えば、命令発行判断から命令発行禁止までを１サイクルで行なうとした場合に、サイクルの最後の方で命令発行不可要因が命令発行判断部３０に通知されると、その時点から命令発行の候補から外す必要がある。この場合にはサイクル長を十分長く取る必要があり、クロック周波数の向上を阻害する大きな要因となる。そこで、遅い段階でしかわからない命令発行禁止の要因については、命令発行禁止部５０において、発行を禁止する。もちろん、命令発行禁止部５０である論理プロセッサの命令発行が禁止された場合は、それ以外の論理プロセッサからの命令を発行できるとしても、その命令を代わりに発行することはしない。既にそれぞれの機能ユニットＡ〜Ｄに対して、発行すべき命令が１つに絞り込まれた後だからである。
【００７４】
この後、命令選択部７０は、命令解読部１〜３に解読された命令内容やオペレーションを、命令発行禁止部５０からの命令発行指示（図１１の1AAA〜3AAA、1BBB〜3BBB、1CCC〜3CCC、1DDD〜3DDD）に従って機能ユニットＡ〜Ｄに発行する。
なお、本実施形態では論理プロセッサが３つ、機能ユニットが４つの場合を説明したが、これらの数は任意に変更すること当然可能である。
【００７５】
また、ＰＲＩレジスタの内容を複数のレジスタで分担する用にしてもよい。例えば、自己停止用の各PRIx[2]ビットと、優先順位用の各PRIx[1:0]フィールドとは別個のレジスタとしてもよい。逆に、ＰＲＩレジスタとＩＲレジスタとＥＸＣＬレジスタとは、これらの全部の組み合わせ又は一部の組み合わせを１本のレジスタとして構成してもよい。
【００７６】
また、特定命令検出部６５は、特定命令の実行開始を検出を、その命令の実行を開始した機能ユニットからその旨の通知を受けることにより行ってもよい。
本実施形態では複数の論理プロセッサが機能ユニットに対して命令発行が競合する場面に本発明を適用する例を示したが、機能ユニット以外であっても、複数の論理プロセッサが共有する資源であれば適用することができる。これを他の実施形態として説明する。
＜他の実施形態＞
本実施形態では、複数の論理プロセッサが共有する資源にアクセスする場合の調停にも論理プロセッサ間の優先順位を用いることが可能であり、その一例を示す。
【００７７】
図２は、本発明の他の実施形態におけるマルチスレッドプロセッサの構成を示すブロック図である。
本マルチスレッドプロセッサは、キャッシュメモリ１００、命令解読部１１１〜１１３、レジスタ群１３１〜１３３、命令フェッチ制御部１４０、命令発行制御部１５０、優先順位制御部６０、機能ユニットＡ２０〜Ｄ２３、レジスタ制御部１７０を備えて構成される。図１と同じ番号の構成要素は、同じなので説明を省略して、異なる点を中心に説明する。
【００７８】
図２において、キャッシュメモリ１００は、命令流が生成される元のプログラム用のキャッシュメモリである。
命令解読部１１１〜１１３は、それぞれ図１の命令解読部１〜３と同等であるが、命令フェッチ制御部１４０の制御を受ける点が異なっている。
レジスタ群１３１〜１３３は、それぞれ複数レジスタからなるレジスタファイルであり、命令解読部１１１〜１１３に１対１に対応して設けられている。従って論理プロセッサ１〜３にも１対１に対応している。
【００７９】
命令フェッチ制御部１４０は、図１に示した命令発行調停部４０及び命令発行禁止部５０に対して、命令発行要求ではなく命令フェッチ要求の競合を調停及び禁止する点が異なる点を除いて同様の機能を有する。すなわち、優先順位制御部６０からの論理プロセッサごとの優先順位の指定などを入力とし、キャッシュメモリ１００に対して複数の命令解読部が同時に命令フェッチ要求が出された場合に、優先順位に応じてフェッチする順序を決定したり、また、特定の論理プロセッサの実行を停止する場合には、その論理プロセッサの命令解読部からの命令フェッチを停止する。
【００８０】
命令発行制御部１５０は、図１に示した命令発行判断部３０、命令発行調停部４０、命令発行禁止部５０および命令選択部７０を１つの構成要素として記しており、それらを併せた機能と同等であるので説明を省略する。
レジスタ制御部１７０は、図１に示した命令発行判断部３０および命令発行調停部４０に対して、命令発行要求ではなくレジスタアクセス要求の競合を停止及び調停する点が異なる点を除いて同様の機能を有する。すなわち、優先順位制御部６０からの論理プロセッサごとの優先順位の指定などを入力とし、同一のレジスタ群に対して同時に複数の機能ユニットがデータを書き込む要求を出力した場合に、優先順位に応じて書き込む順序を決定する命令発行制御部である。
【００８１】
上記の構成により機能ユニットに対する論理プロセッサの競合だけでなく、キャッシュメモリへの命令フェッチ要求の競合、レジスタ群へのデータアクセス要求の競合の場面でも、優先順位に応じた調停や停止を実施することができる。
なお、上記の実施形態では、複数の命令流および論理プロセッサの数を３、機能ユニットの数を４としたが、この数はいくらでもかまわない。
【００８２】
また、優先順位のレベルは２ビット３レベルとしたが、実際には幾つでもよい。さらに、制御レジスタを３２ビット幅にしたが、他のビット幅でもかまわない。
また、複数の論理プロセッサで同時に分岐が発生した場合に、アドレス計算のための資源やキャッシュなど共有しているものについても、他の実施形態と同様に優先順位によって調停することができる。
【００８３】
さらに、上記実施形態では、ＰＲＩレジスタには専ら専用命令により優先順位を変更するように構成されているが、専用命令以外にハードウェアにより設定・変更するように構成してもよい。この場合、各命令流の優先順位を予め定められたタイミングにより、又は命令流の状態を監視してその状態により、ハードウェアの外部的要因や内部的要因をトリガーにして優先順位を変更するようにしてもよい。
【００８４】
また、上記実施形態では図９の優先順位判定部４１Ａにおいて、２つ又は３つの優先順位が同じ場合に、一応それらを全部有効にして出力するようにしているが、何れか１つを有効にして出力するようにしてもよい。その場合、判定補助部４２Ａを削除することができる。
また、図９の判定補助部４２Ａは優先順位判定部４１Ａの後段に設けられているが、優先順位制御部６０と優先順位判定部４１Ａの間に設けて、同じ優先順位が複数ある場合には、優先順位を動的に変更するように構成してもよい。
【００８５】
さらに、上記実施形態においてＰＲＩレジスタ中のＭＹＰＲＩフィールドは、ＰＲＩレジスタの読み出し命令を発行元の優先順位を出力しているが、これと同様にして例えばＭＹＤＡＴＡフィールドを設けて、論理プロセッサ毎に状態を示すデータ（ステータスデータ、エラー情報など）を出力するようにしてもよい。
禁止部５０Ａが検出している緊急を要する処理は、各種イベントや各種例外処理であってもよい。ここで各種イベントとは外部割込みや内部割込みなどである。各種例外処理とはキャッシュミスやメモリアクセスエラーなどのアクセス例外、トラップ命令、演算例外、演算実行エラーなどである。
【００８６】
また、上記実施形態では、各命令解読部は命令流１個につき１命令を解読し、一度に発行できる命令も１個であるものとしていた。これに限らず、命令解読部が命令流１個につき複数の命令を解読し、同時に複数の命令を発行する場合であってもよい。
【００８７】
【発明の効果】
本発明のマルチスレッドプロセッサは、それぞれ命令を実行する複数の機能ユニットと、命令流に対応して設けられ、それぞれ命令を解読して、当該命令を実行すべき機能ユニットを指定するとともに当該機能ユニットに解読された命令を発行すベきことを要求する命令発行要求を作成する複数の命令解読手段と、命令流毎に命令流の優先度を保持する保持手段と、２以上の命令発行要求が同時に一の機能ユニットを指定している場合に、保持手段に保持された優先度に従って、当該機能ユニットに発行すべき解読された命令を決定する制御手段とを備えて構成される。
【００８８】
この構成によれば、各機能ユニットに発行すべき命令（命令の解読結果）が前記優先度に従って決定されるので、複数の命令流間で負荷のばらつきを優先度に応じて柔軟に調整することができ、命令流毎に必要とされる処理性能を適切に実現し、かつ全体の処理効率を向上させることができるという効果がある。
ここで前記保持手段は、さらに、命令によって設定可能な、命令流毎に命令流を停止すべきか実行すべきかを示すフラグ群を保持し、
前記制御手段は、前記決定を行う調停手段と、停止を示すフラグが設定されている場合には、そのフラグに対応する命令流の命令発行要求を除外して前記決定を行うことにより、当該命令流を停止する停止手段とを備えてもよい。
【００８９】
この構成によれば、さらに、命令流がその実行過程においてアイドル状態や待ち状態にある場合には、その命令流を停止状態とすることができる。つまりその結果、他の命令流を優先して実行させることができるので、さらに全体の処理性能を向上させることができる。
ここで前記制御手段は、さらに何れかの命令流に対して緊急を要する処理が発生した場合に、当該命令流に属する命令であって前記制御手段において発行すべきであると決定された命令について、機能ユニットへの命令発行を一時的に禁止する禁止手段を備えてもよい。
【００９０】
この構成によれば、ある命令流（論理プロセッサ）に対して緊急を要する処理が発生した場合に、禁止手段により当該論理プロセッサの命令発行が一時的に禁止する。つまり緊急を要する処理に移行するまで要するサイクル数だけ一時的に命令発行を禁止する。これにより、割込み処理への移行を高速化することができる。\uしかも、禁止手段は、調停手段により発行するべき命令が決定された後に当該命令の発行を禁止することができるので、緊急を要する処理の発生タイミングが調停手段による決定後であっても、有効に禁止することができる。例えば、緊急を要する処理の発生タイミングが、マシンサイクルの期間の遅い時点であっても有効に禁止することができるという効果がある。
【００９１】
ここで機能ユニットの１つは、優先度の変更を指示する専用命令を受け、保持手段に保持された優先度のうち、当該専用命令が属する命令流の優先度を変更するように構成してもよい。
ここで前記専用命令は、優先度を上げる又は下げることを指示するオペレーションコードのみからなり、
前記機能ユニットの１つは、専用命令の解読結果が発行された場合、当該専用命令を発行した命令解読手段を判別して、判別された命令解読手段に対応する命令流の優先度を上げ又は下げるように構成してもよい。
【００９２】
この構成によれば、さらに、上記専用命令では、命令流のＩＤや命令流を特定するためのビット位置を示すオペランドを必要としないので、どの命令流においても同一の命令により自身の命令流の優先度を簡単に変更することができる。
また、前記一の機能ユニットによって当該命令が属する命令流の優先度を変更するので、異なる命令流の優先度を誤って書換えることもなくなり、誤動作を防止することができる。例えば、ＲＧＢカラー画像の色別画像データに同一の画像処理を施す場合、つまり、画像処理用の１つのプログラムを３つの命令流として独立かつ同時に実行させる場合、情報の隠蔽（プログラムはＲＧＢのどれかを区別する必要がない）することができ、かつ命令流の独立性を保証することができ、その結果ＯＳやシステム全体の信頼性が向上する。
【００９３】
ここで前記保持手段は、読み出し専用の第１フィールドを有する制御レジスタを含み、
前記機能ユニットの１つは、制御レジスタの読み出し命令の解読結果が発行された場合、当該読み出し命令を発行した命令解読手段を判別して、当該命令解読手段に対応する命令流のＩＤを第１フィールドの読み出しデータとして内部バス上に出力するように構成してもよい。
【００９４】
この構成によれば、さらに、上記のように１つのプログラムを３つの命令流として独立かつ同時に実行させる場合に、実際は１つのプログラムではあるが３つの仮想的なプログラムが並列実行されていることになる。それぞれの仮想的なプログラム（または命令流）は、それぞれ第１フィールドを読み出すことにより命令流自身のＩＤを容易に知ることができる。
【００９５】
ここで前記保持手段は、制御レジスタを有し、
前記制御レジスタは、さらに、命令流固有のデータを保持するための命令流毎の個別フィールドと、読み出し専用の第２フィールドとを有し、
前記機能ユニットの１つは、前記制御レジスタの読み出し命令の実行に際して、さらに、命令流毎の個別フィールドを読みだすとともに、当該読み出し命令を発行した命令解読手段に対応する命令流の固有のデータを第２フィールドの読み出しデータとして内部バス上に出力するように構成してもよい。
【００９６】
この構成によれば、上記の仮想的なプログラム（または命令流）は、第２フィールドを読み出すことにより自身の優先度を容易に知ることができる。
ここで前記保持手段は、命令流毎の優先度を保持する優先度フィールドを有し、
前記優先度フィールドは、命令流の実行モード別の優先度を示す小フィールドからなり、
前記機能ユニットの１つは、専用命令の解読結果が発行された場合、当該専用命令を発行した命令解読手段を判別して、判別された命令解読手段に対応する命令流の優先度フィールドのうち現在の実行モード用の小フィールドの優先度を上げ又は下げるように構成してもよい。
【００９７】
この構成によれば、実行モード、例えばユーザモードとスーパーバイザモードとで独立して優先度を設定することができ、他のモードに移行してから復帰した場合に元の優先度をそのまま保存することができる。
ここでマルチスレッドプロセッサは、さらに
機能ユニットに１つが特定の命令を実行開始したことと、当該特定命令の解読結果をどの命令解読手段が発行したかを検出する特定命令検出手段と、
特定命令の実行開始が検出されたとき、その特定命令を発行した命令解読手段に対応する命令流の優先度を予め定められた期間一時的に変更する。その命令流の優先度は他の命令流よりも高い優先度に変更される一時変更手段とを備えるように構成してもよい。
【００９８】
この構成によれば、一時変更手段が一時的に優先度を変更するので、命令流中の
特定命令を先頭とする命令列を、連続したサイクルで実行することを保証することができる。
ここでマルチスレッドプロセッサは、さらに
命令流毎に他の命令流を排他的に停止状態にすべきか否かを示す排他停止データを保持する排他停止データ保持手段とを備え、
前記停止手段は、さらに前記排他停止データにより停止状態とされている命令流に対応する命令解読部から調停手段への命令発行要求の通知を停止するように構成してもよい。
【００９９】
この構成によれば、ある命令流が他の命令流の処理を強制的に停止させることができる。したがって命令流間の処理性能の調整を大きな範囲でおこなうことができる。
また、上記目的を達成するマルチスレッドプロセッサは、複数の命令流を同時かつ独立に並列実行するマルチスレッドプロセッサであって、前記複数の命令流の命令を一時記憶する命令キャッシュと、前記複数の命令流に対応して設けられ、命令キャッシュから命令流の命令をフェッチする複数の命令フェッチ手段と、前記複数の命令流毎に優先度を指定する優先度指定手段と、二以上の命令キャッシュ手段から同時に命令フェッチ要求が出された場合には、前記優先度制御回路の優先度に従って、命令フェッチ要求を調停する命令フェッチ制御手段とを備える。
【０１００】
この構成によれば、命令キャッシュに対して複数の命令フェッチ手段からの命令フェッチ要求が競合した場合に優先度に応じて調停するので、マルチスレッドプロセッサの上流の処理において、命令流毎の処理性能を動的に調整することができるという効果がある。
また、上記目的を達成するマルチスレッドプロセッサは、命令を実行する複数の機能ユニットと、命令キャッシュから命令を取り出して解読し当該命令を実行すべき機能ユニットを指定して命令発行要求を出力する複数の命令解読部と、命令解読部と同数のレジスタセットを有し、命令解読部と同数の複数の命令流を同時かつ独立に実行するマルチスレッドプロセッサであって、命令流中の命令によって命令流毎に設定可能な、命令流の優先度を保持する保持手段と、複数の命令流によって共有される資源に対して、二以上の命令流が同時に競合した場合に、前記優先度に従って調停する制御手段とを備え、前記共有資源に対する競合は、一の機能ユニットに対する二以上の命令解読部からの命令発行要求の競合、命令キャッシュに対する二以上の命令解読部からの命令取り出し要求の競合、一のレジスタセットに対する二以上の機能ユニットからのアクセス要求の競合の何れかであるように構成されている。
【０１０１】
この構成によれば、命令流によって共有される資源に対して複数の命令流からの処理要求が競合した場合に、優先度に応じて調停するので、命令流毎の処理性能を柔軟に調整することができるという効果がある。
【図面の簡単な説明】
【図１】本発明の実施形態におけるマルチスレッドプロセッサの構成を示すブロック図である。
【図２】本発明の他の実施形態におけるマルチスレッドプロセッサのブロック図である。
【図３】本発明の実施形態における命令流制御装置の優先順位指定レジスタの説明図である。
【図４】同実施形態における命令流制御装置の優先順位指定レジスタの下位２ビットの説明図である。
【図５】同実施形態における命令流制御装置の優先順位指定レジスタの上位１ビットの説明図である。
【図６】同実施形態における命令流制御装置の内部割り込みレジスタの構成図である。
【図７】同実施形態における命令流制御装置の排他停止レジスタの構成図である。
【図８】同実施形態における命令発行判断部のより詳細な構成例を示すブロック図である。
【図９】同実施形態における命令発行調停部のより詳細な構成例を示すブロック図である。
【図１０】同実施形態における優先順位判定部の制御論理を示す説明図である。
【図１１】同実施形態における命令発行禁止部のより詳細な構成例を示すブロック図である。
【図１２】機能ユニットによる専用命令及び制御レジスタの読み出し命令の実行内容を示す説明図を示す。
【図１３】優先順位制御部の詳細な構成を示すブロック図である。
【図１４】連続サイクル優先部内のセレクタに入力される選択信号と、出力値との関係を表した説明図を示す。
【図１５】従来のマルチスレッドプロセッサの構成を示すブロック図である。
【符号の説明】
１    命令解読部
２    命令解読部
３    命令解読部
２０    機能ユニットＡ
２１    機能ユニットＢ
２２    機能ユニットＣ
２３    機能ユニットＤ
３０    命令発行判断部
４０    命令発行調停部
５０    命令発行禁止部
６０    優先順位制御部
７０    命令選択部
【図１】
0003760035.tif 000002
【図２】
0003760035.tif 000003
【図３】
0003760035.tif 000004
【図４】
0003760035.tif 000005
【図５】
0003760035.tif 000006
【図６】
0003760035.tif 000007
【図７】
0003760035.tif 000008
【図８】
0003760035.tif 000009
【図９】
0003760035.tif 000010
【図１０】
0003760035.tif 000011
【図１１】
0003760035.tif 000012
【図１２】
0003760035.tif 000013
【図１３】
0003760035.tif 000014
【図１４】
0003760035.tif 000015
【図１５】
0003760035.tif 000016