(57)【要約】【課題】ハードウェアアクセラレータと同期を取る場合に、命令の実行の実時間を最短サイクルで保障することを可能とすることができる演算処理装置を提供する。【解決手段】本発明のプロセッサは、同時実行可能な命令からなる命令グループを構成する命令を同時に発行し実行するプロセッサであって、前記プロセッサは、特定命令を含むプログラムを実行し、前記特定命令は、前記特定命令を含む命令グループから前記特定命令に後続する命令を除外することと、前記特定命令の発行直後の所定サイクル期間だけ後続する命令の発行を停止することとを指示する。【選択図】図１
2009110209.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令を同一サイクルで実行できる演算処理装置において、
複数の命令コードをフェッチする命令フェッチ手段と、
前記命令フェッチ手段によりフェッチされた複数の命令コードを、同時発行可能な命令からなる１つ以上の命令グループに分割し、命令グループの命令コードを発行する命令発行手段と、
前記命令発行手段より発行された１つ以上の命令コードを解読し、演算に必要な制御信号を生成する命令デコード手段と、
前記命令デコード手段に生成された前記制御信号に従って演算を行う演算処理手段とを備え、
前記命令発行手段は、
特定命令の発行直後の所定サイクル期間だけ前記特定命令に後続する命令の発行を停止することを指示する前記特定命令を検出する検出手段と、
前記特定命令の発行直後の所定サイクル期間だけ前記後続する命令の発行を停止させる命令発行停止手段とを有する
ことを特徴とする演算処理装置。
【請求項２】
前記命令発行手段は、前記特定命令が検出された場合、前記特定命令を含む命令グループの中から前記特定命令に後続する命令を除外することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記命令フェッチ手段は、複数のスレッドからそれぞれ命令コードをフェッチし、
前記命令発行手段は、スレッド毎にスレッド中の命令列を命令グループに分割する
ことを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記検出手段は、命令コード中の１ビットの命令ビットフィールドにより前記特定命令を検出することを特徴とする請求項２に記載の演算処理装置。
【請求項５】
前記検出手段は、命令コード中の複数ビットの命令ビットフィールドをデコードすることにより前記特定命令を検出することを特徴とする請求項２に記載の演算処理装置。
【請求項６】
前記検出手段は、命令コード中の複数ビットの命令ビットフィールドをデコードすることによって第１および第２の命令を検出し、前記第１の命令から前記第２の命令の直前までの各命令を前記特定命令として検出することを特徴とする請求項２に記載の演算処理装置。
【請求項７】
前記第１の命令は外部装置に処理要求を書き込む命令であり、前記第２の命令は当該外部装置から応答を読み出す命令であることを特徴とする請求項６に記載の演算処理装置。
【請求項８】
前記演算処理装置は、さらに、前記後続命令の発行を停止中であることを示す状態信号を保持するプロセッサ状態レジスタを有することを特徴とする請求項６に記載の演算処理装置。
【請求項９】
前記演算処理装置は、さらに、前記特定命令の発行直後の所定サイクル期間であって前記後続命令の発行を停止中であることを示す状態信号を保持する保持手段を有し、
前記検出手段は、前記第１の命令を検出したとき前記状態信号をイネーブルにし、前記第２の命令を検出したとき前記状態信号をディスエーブルにする
ことを特徴とする請求項６に記載の演算処理装置。
【請求項１０】
前記保持手段は、割込み処理の発生により保持している状態信号をディスエーブルする
ことを特徴とする請求項９に記載の演算処理装置。
【請求項１１】
前記特定命令は、前記演算処理装置に接続される外部装置に処理を要求する命令に後続する
ことを特徴とする請求項１から請求項９のいずれか１項に記載の演算処理装置。
【請求項１２】
前記命令発行停止手段は、前記所定サイクル期間を示すサイクル数を記憶するサイクル数記憶手段を有し、記憶されたサイクル数だけ前記後続命令の発行を停止することを特徴とする請求項１から請求項９のいずれか１項に記載の演算処理装置。
【請求項１３】
前記サイクル数記憶手段は、前記演算処理装置の動作周波数に対応するサイクル数を記憶することを特徴とする請求項１２に記載の演算処理装置。
【請求項１４】
前記サイクル数記憶手段は、前記演算処理装置が動作可能な複数の動作周波数に対応する複数のサイクル数を記憶することを特徴とする請求項１２に記載の演算処理装置。
【請求項１５】
前記命令発行手段は、前記特定命令の属するスレッドが他のスレッドよりも優先される動作モードか否かを検出する動作モード検出手段を有し、
前記命令発行停止手段は、検出された動作モードに応じて、前記所定のサイクル期間だけ前記後続命令の発行を停止することを特徴とする請求項１から請求項９のいずれか１項に記載の演算処理装置。
【請求項１６】
前記命令発行手段は、
前記特定命令の属するスレッドが他のスレッドよりも優先される動作モードか否かを検出する動作モード検出手段と、動作モード毎に前記所定サイクル期間を示すサイクル数を記憶するサイクル数記憶手段とを有し、
前記命令発行停止手段は、検出された動作モードに応じたサイクル数の期間だけ前記後続命令の発行を停止することを特徴とする請求項１から請求項９のいずれか１項に記載の演算処理装置。
【請求項１７】
前記命令発行手段は、前記第１の命令から前記第２の命令までの間に発行可能な命令数を記憶し、発行される毎にカウントダウンする命令数記憶手段を有することを特徴とする請求項６に記載の演算処理装置。
【請求項１８】
前記演算処理装置は、さらに、前記保持手段に保持された状態信号の値を保持するプロセッサ状態レジスタを有し、
前記命令発行停止手段は、前記保持手段が前記後続命令の発行を停止中であることを示す状態信号を保持している場合に、前記第１の命令から前記第２の命令までの間に発行可能な命令数を記憶し、発行される毎にカウントダウンする命令数記憶手段を有することを特徴とする請求項１０に記載の演算処理装置。
【請求項１９】
同時実行可能な命令からなる命令グループを構成する命令を同時に発行し実行するプロセッサであって、
前記プロセッサは、特定命令を含むプログラムを実行し、
前記特定命令は、前記特定命令を含む命令グループから前記特定命令に後続する命令を除外することと、前記特定命令の発行直後の所定サイクル期間だけ後続する命令の発行を停止することとを指示することを特徴とするプロセッサ。
【請求項２０】
前記プロセッサは、複数のスレッドをフェッチし、スレッド毎にスレッド中の命令列を命令グループに分割するマルチスレッドプロセッサである
ことを特徴とする請求項１９に記載のプロセッサ。
【請求項２１】
第１のプログラムを第２のプログラムに変換するプログラム変換装置であって、
第１のプログラムから、特定命令の設定をプログラム変換装置に指示する指示文を抽出する抽出手段と、
第１のプログラム中の、前記指示文に従って、外部装置に処理を要求する第１の命令と、当該外部装置から応答を読み出す第２の命令を検出する検出手段と、
前記第１の命令から第２の命令までの間に、特定命令を設定することにより第２プログラムを生成する生成手段とを有し、
前記特定命令は、前記特定命令を含む命令グループから前記特定命令に後続する命令を除外することと、前記特定命令の発行直後の所定サイクル期間だけ後続する命令の発行を停止することとを指示することを特徴とするプログラム変換装置。
【請求項２２】
コンピュータを、第１のプログラムを第２のプログラムに変換するプログラム変換装置として機能させるコンピュータ読み取り可能なプログラムであって、
前記プログラムは、
第１のプログラムから、プログラム変換装置に対する特定命令に関する指示文を抽出する抽出ステップと、
第１のプログラム中の、外部装置に処理要求を書き込む第１の命令と、当該外部装置から応答を読み出す第２の命令を検出する検出ステップと、
前記第１の命令から第２の命令までの間に、前記第２の命令以降の命令を繰り上げて配置することにより第２プログラムを生成する生成ステップとをコンピュータに実行させ、
前記特定命令は、前記特定命令を含む命令群の中から前記特定命令に後続する命令を排除することと、前記特定命令の発行直後の所定サイクル期間だけ後続する命令の発行を停止することとを指示することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の命令を同一サイクルで実行できる演算処理装置において、演算処理装置に関し、特にマルチスレッド化されたプロセッサからハードウェアアクセラレータに対して効率的に同期を取る場合に適用して有効な技術に関する。
【背景技術】
【０００２】
昨今では、スーパーパイプライン技術のみならず、スーパースカラやマルチプロセッサ、そして、マルチスレッドアーキテクチャなどプロセッサの並列化技術による処理性能の向上が多く見られる。一方で、ハードウェアアクセラレータや、プログラムからの要求に対して、一定時間内に処理を確実に終了しなければならないリアルタイム処理の要望が高くなってきている。
【特許文献１】特開平９−５４６９３号公報（図１）
【特許文献２】特開２００３−２７１３９９号公報（図１）
【特許文献３】米国特許第５９５８０４４号明細書（図１）
【非特許文献１】John L. Hennessy & David A. Patterson "Computer Architecture A Quantitative Approach Fourth Edition" 2006（P.172 Chapter Three Limits in Instruction-Level Parallelism）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、ハードウェアアクセラレータへのアクセスを伴うリアルタイム処理において、前記並列化技術を適応したプロセッサは、リアルタイム処理性能を容易に保障できる機構を持っていない。そのため、リアルタイム処理性能を保障しようとした場合は、十分な性能を持ったプロセッサを必要とするか、本来発生する確率が少ないワーストケース（プロセッサ負荷やメモリアクセス競合、その他のパイプラインハザード）まで想定した実効性能の見積りを実行可能なプロセッサが必要になる。たとえば、リアルタイム処理の完了をロードストアアクセスのパイプラインストールで待つ方法は、ハードウェアアクセラレータへのアクセスに同期することができるため、最短時間で動作を保障することができるが、パイプライン制御にインターロック機構を必要とするため、高速化されたスーパーパイプライン機構をもつプロセッサのマイクロアーキテクチャではスピードパスに関する実装上の課題が発生する。また、ハードウェアアクセラレータへのアクセスを割込みや、Corse Grain Multithreading（ＣＧＭＴ）機構（特許文献２等を参照）で同期をとる方法は、現行処理の切り替えオーバーヘッドの粒度が大きいため、プロセッサで数サイクルから数十サイクルの粒度でタイミング（同期）を取る機構としては、リアルタイム処理のワーストケース保障の観点から課題がある。最後に、分岐命令、ロードストアアクセスのパイプラインリスタート実行、もしくは、ＮＯＰ命令挿入によるタイミング調整方法は、最も細粒度でタイミング（同期）を取ることができる機構として適している。しかし、ＮＯＰ命令数の増大や、動作周波数に応じたコード変更が必要であり、それだけでなく、スーパーパイプラインでSimultaneous Multithreading（ＳＭＴ）機構を持つプロセッサにおいては、この分岐命令、リスタート実行、ＮＯＰ命令の挿入といえども、ワーストケースを想定した場合は、その細粒度の調整が困難になるという課題がある。１つ目のＮＯＰ数の増大に関する課題は、特許文献３の機構を利用すれば、コードサイズの削減は可能であるが、２つ目の課題の動作周波数に対するコード変更は必要であり、この変更漏れは、ソフトウェアのバグとしては非常に検出困難な不具合として残ってしまう課題がある。３つ目の課題のスーパーパイプラインでＳＭＴ機構を持ったプロセッサは、できるだけ多くの命令を実行するという考え方のもとで動作しているため、できるだけ多く実行された場合を想定したＮＯＰ数の挿入が必要になる。つまり、ＳＭＴ実行の場合、他スレッドの命令流が実行される場合もあり、毎サイクル自スレッドの命令流が実行されない場合もあるため、ワーストケースを見積もったＮＯＰ数では、実時間が空き過ぎるという調整可能な粒度の課題が新たに発生する。
【０００４】
以上のように、スーパーパイプラインでマルチスレッド化されたプロセッサがハードウェアアクセラレータにアクセスする場合に、細粒度の期間（サイクル単位）で命令実行の実時間を最短サイクルでリアルタイム保障可能な方法について考慮する必要がある。
【０００５】
本発明の目的は、マルチスレッドパイプラインの構成をもった演算処理装置において、ハードウェアアクセラレータと同期を取る場合に、マルチスレッド実行状態にかかわらず、命令の実行の実時間を最短サイクルで保障することを可能とすることができる演算処理装置を提供することにある。
【課題を解決するための手段】
【０００６】
上記問題を解決するために本発明の演算処理装置は、複数の命令を同一サイクルで実行できる演算処理装置において、複数の命令コードをフェッチする命令フェッチ手段と、前記命令フェッチ手段によりフェッチされた複数の命令コードを、同時発行可能な命令からなる１つ以上の命令グループに分割し、命令グループの命令コードを発行する命令発行手段と、前記命令発行手段より発行された１つ以上の命令コードを解読し、演算に必要な制御信号を生成する命令デコード手段と、前記命令デコード手段に生成された前記制御信号に従って演算を行う演算処理手段とを備え、前記命令発行手段は、特定命令の発行直後の所定サイクル期間だけ前記特定命令に後続する命令の発行を停止することを指示する前記特定命令を検出する検出手段と、前記特定命令の発行直後の所定サイクル期間だけ前記後続する命令の発行を停止させる命令発行停止手段とを有することを特徴とする。
【０００７】
ここで、前記命令発行手段は、前記特定命令が検出された場合、前記特定命令を含む命令グループの中から前記特定命令に後続する命令を除外するようにしてもよい。
【０００８】
ここで、前記命令フェッチ手段は、複数のスレッドからそれぞれ命令コードをフェッチし、前記命令発行手段は、スレッド毎にスレッド中の命令列を命令グループに分割するようにしてもよい。
【０００９】
なお、本発明において、ＳＭＴ実行可能なプロセッサのプログラム実行時間の最短実行時間の調整を行うことを命令同期実行と説明する。
【００１０】
ここで、前記検出手段は、命令コード中の１ビットの命令ビットフィールドにより前記特定命令を検出するようにしてもよい。この構成によれば、１ビットの命令ビットフィールドで前記命令同期実行検出を行うため、全命令に対して、リアルタイム実行可能な手段を有している。
【００１１】
ここで、前記検出手段は、命令コード中の複数ビットの命令ビットフィールドをデコードすることにより前記特定命令を検出するようにしてもよい。この構成によれば、複数の命令ビットフィールドをデコードして前記命令同期実行検出を行うため、ある特定の命令に対してリアルタイム実行可能な手段を有している。
【００１２】
ここで、前記検出手段は、命令コード中の複数ビットの命令ビットフィールドをデコードすることによって第１および第２の命令を検出し、前記第１の命令から前記第２の命令の直前までの各命令を前記特定命令として検出するようにしてもよい。ここで、前記プロセッサは、さらに、前記後続命令の発行を停止中であることを示す状態信号を保持するプロセッサ状態レジスタを有するようにしてもよい。この構成によれば、複数の命令ビットフィールドをデコードして前記命令同期実行の有効検出と無効検出を行うため、リアルタイム実行可能な状態を管理する手段を有している。
【００１３】
ここで、前記保持手段は、割込み処理の発生により保持している状態信号をディスエーブルしてもよい。この構成によれば、複数の命令ビットフィールドをデコードして前記命令同期実行の有効検出と無効検出を行い、割込みを受理した場合も無効検出する手段を有しているため、リアルタイム実行可能な状態を管理し、割込み処理などによって十分時間が経過した場合にその状態を解除する手段を有している。
【００１４】
ここで、前記命令発行停止手段は、前記所定サイクル期間を示すサイクル数を記憶するサイクル数記憶手段を有し、記憶されたサイクル数だけ前記後続命令の発行を停止してもよい。この構成によれば、あらかじめ決められたサイクル数の停止手段を有しているため、リアルタイム実行可能な粒度を想定することができる。また、ソフトウェアにより設定されたサイクル数で停止する手段を有しているため、リアルタイム実行可能な粒度を変更することができる。
【００１５】
ここで、前記サイクル数記憶手段は、前記演算処理装置の動作周波数に対応するサイクル数を記憶してもよい。この構成によれば、あらかじめ決められたプロセッサの動作周波数の設定に応じたサイクル数の停止手段を有しているため、動作周波数に関わらずリアルタイム実行可能な粒度を想定することができる。
【００１６】
ここで、前記サイクル数記憶手段は、前記演算処理装置が動作可能な複数の動作周波数に対応する複数のサイクル数を記憶してもよい。この構成によれば、プロセッサの動作周波数の設定に応じて、ソフトウェアにより設定されたサイクル数で停止する手段を有しているため、動作周波数に関わらずリアルタイム実行可能な粒度を変更することができる。
【００１７】
ここで、前記命令発行手段は、前記特定命令の属するスレッドが他のスレッドよりも優先される動作モードか否かを検出する動作モード検出手段を有し、前記命令発行停止手段は、検出された動作モードに応じて、前記所定のサイクル期間だけ前記後続命令の発行を停止してもよい。この構成によれば、ＳＭＴ実行における性能保障の設定に応じたサイクル数の停止手段を有しているため、性能保障モードに関わらずリアルタイム実行可能な粒度を想定することができる。
【００１８】
ここで、前記命令発行手段は、前記特定命令の属するスレッドが他のスレッドよりも優先される動作モードか否かを検出する動作モード検出手段と、動作モード毎に前記所定サイクル期間を示すサイクル数を記憶するサイクル数記憶手段とを有し、前記命令発行停止手段は、検出された動作モードに応じたサイクル数の期間だけ前記後続命令の発行を停止してもよい。この構成によれば、ＳＭＴ実行における性能保障の設定に応じて、ソフトウェアにより設定されたサイクル数で停止する手段を有しているため、性能保障モードに関わらずリアルタイム実行可能な粒度を変更することができる。
【００１９】
ここで、前記命令同期実行検出手段は、前記第１の命令から前記第２の命令までの間に発行可能な命令数を記憶し、発行される毎にカウントダウンする命令数記憶手段を有してもよい。
【００２０】
ここで、前記演算処理装置は、さらに、前記保持手段に保持された状態信号の値を保持するプロセッサ状態レジスタを有し、前記命令発行停止手段は、前記保持手段が前記後続命令の発行を停止中であることを示す状態信号を保持している場合に、前記第１の命令から前記第２の命令までの間に発行可能な命令数を記憶し、発行される毎にカウントダウンする命令数記憶手段を有してもよい。この構成によれば、請求項１３、１４に記載の演算処理装置では、命令同期実行モード中に発行可能な命令数を設定できるようにすることで、不要な命令スロットを埋めるダミー命令を生成することなく命令発行数を制御することができる。
【００２１】
また、本発明のプログラム変換装置は、第１のプログラムを第２のプログラムに変換するプログラム変換装置であって、第１のプログラムから、特定命令の設定をプログラム変換装置に指示する指示文を抽出する抽出手段と、第１のプログラム中の、前記指示文に従って、外部装置に処理を要求する第１の命令と、当該外部装置から応答を読み出す第２の命令を検出する検出手段と、前記第１の命令から第２の命令までの間に、特定命令を設定することにより第２プログラムを生成する生成手段とを有し、前記特定命令は、前記特定命令を含む命令グループから前記特定命令に後続する命令を除外することと、前記特定命令の発行直後の所定サイクル期間だけ後続する命令の発行を停止することとを指示することを特徴とする。この構成によれば、例えばＣ言語記述のプログラム中に指示文（プラグマ等）を挿入することで、命令同期実行モード中の自スレッドの先行処理可能なプログラムを挿入することができる。
【００２２】
また、本発明のプロセッサは、同時実行可能な命令からなる命令グループを構成する命令を同時に発行し実行するプロセッサであって、前記プロセッサは、特定命令を含むプログラムを実行し、前記特定命令は、前記特定命令を含む命令グループから前記特定命令に後続する命令を除外することと、前記特定命令の発行直後の所定サイクル期間だけ後続する命令の発行を停止することとを指示する。
【００２３】
ここで、前記プロセッサは、複数のスレッドをフェッチし、スレッド毎にスレッド中の命令列を命令グループに分割するマルチスレッドプロセッサであってもよい。
【発明の効果】
【００２４】
本発明の効果は、マルチスレッドプロセッサ構成の演算処理装置において、各スレッドの命令実行状態に関わらず、自スレッドの命令実行時間の最短実行時間をマルチスレッド実行性能割り当てに応じた形で保障することができる。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の実施の形態を、図面を参照しながら説明する。
【００２６】
（実施の形態１）
本実施の形態の演算処理装置は、同時実行可能な命令からなる命令グループを構成する命令を同時に発行し実行するプロセッサであって、このプロセッサが実行するプログラムは、特定命令を含む。ここで、特定命令とは、前記特定命令を含む命令グループから前記特定命令に後続する命令を除外することと、前記特定命令の発行直後の所定サイクル期間だけ後続する命令の発行を停止することとを指示する命令である。
【００２７】
以下では、プロセッサが、複数のスレッドをフェッチし、スレッド毎にスレッド中の命令列を命令グループに分割するマルチスレッドプロセッサである場合について、図１〜図１２を用いて説明する。本実施の形態のマルチスレッドプロセッサの一例として、３スレッドを同時に実行可能であり、スレッド毎に最大３命令を発行可能で、同時発行可能な命令は２スレッドの命令グループ、同時発行可能な命令は最大４命令として説明を行う。
【００２８】
図１は、本実施の形態に係る演算処理装置の構成を示す機能ブロック図である。同図において、演算処理装置としてのプロセッサ１００は、命令伝達部１１０、演算実行部１３０、命令メモリ１４０、データメモリ１５０、レジスタグループ１６０から構成され、命令伝達部１１０は、命令メモリ１４０にバス１７１で、演算実行部１３０にバス１７５で接続されている。演算実行部は、命令伝達部１１０にバス１７５で、データメモリ１５０にバス１７２で、レジスタグループ１６０にバス１７３で接続されている。
【００２９】
命令伝達部１１０は、プログラムとして書かれた命令、もしくは、ハードウェア制御によって割り込まれた処理に従って決定されるアドレスに記載されたコードを命令メモリ１４０から読み出しアクセスする命令フェッチ部１１１と、命令フェッチ部１１１から得られるスレッド毎に分割された命令コードに対して、演算実行部のパイプラインハザード検出と、スレッド間の演算リソース競合検出と、スレッド間の命令発行調停とを行った後、演算実行部１３０に１つ以上の命令コードを発行する命令発行部１１２から構成されている。
【００３０】
命令発行部１１２は、命令実行サイクルを同期させて実行する命令かどうかを検出する命令同期実行検出部１２１と、命令同期実行検出部の出力に応じて命令発行を停止するための信号のうちのひとつを生成することができる命令発行停止部１２２とを有している。なお、命令同期実行検出部１２１によって得られた検出情報は、スレッド内の命令発行グループ分割の条件（後に記載する、命令バッファの命令コード有効ビット）としても使用される。
【００３１】
演算実行部１３０は、同一サイクルで複数スレッドの命令を実行できる命令群を命令伝達部１１０から入力し、演算実行部の制御信号と演算に必要なデータを作成する命令デコード部１３１と、命令デコード部１３１によって作成された制御信号とデータからデータアクセスするデータアクセス部１３２と、命令デコード部と、データアクセス部から作成された制御信号とデータから演算を実行する演算処理部１３３から構成されている。さらに、データアクセス部１３２は、データメモリ１５０、および、プロセッサに必要な各種レジスタを含むレジスタグループ１６０に接続されている。なお、本実施の形態では、３スレッド動作可能なＳＭＴ構成をもったプロセッサとする。そのため、プロセッサの内部資源は、それぞれ３スレッド分持っているものとする。
【００３２】
図２は、命令コードのビット構成例を示す図である。本実施の形態では、３２ビット固定の命令ビットマップを例に説明しており、ビット３１のＳが、１の時に命令同期実行を行う特定命令であることを示す。ここで特定命令は、前記特定命令を含む命令群の中から前記特定命令に後続する命令を排除することと、前記特定命令の発行直後の所定サイクル期間だけ後続する命令の発行を停止することとを指示する命令をいう。同図のように、特定命令であるか否かはビット３１によって定まるので、本実施形態では全ての命令が特定命令となり得る。なお、ビットのアサイン方法に関しては、この限りではない。
【００３３】
図３は、図１の命令同期実行検出部１２１の内部構成のうち１スレッドに対応する構成を示すブロック図である。３スレッドを同時実行するマルチスレッドプロセッサの場合、図１の命令同期実行検出部１２１は、同図の構成を３セット備えることになる。
【００３４】
命令発行部１１２は、スレッド毎に発行対象となる最大命令数分を格納する命令バッファ５５０があり、プログラムカウンタ順に、第１命令コード５５１、第２命令コード５５２、第３命令コード５５３、および、それらのバッファに有効な命令が格納されているかどうかを示す、第１有効ビット５５４、第２有効ビット５５５、第３有効ビット５５６が格納されている。
【００３５】
これらの情報を入力とし、命令同期実行検出部５００は、第１命令コード５５１のビット３１と第１有効ビット５５４を入力とするＡＮＤゲート５１１と、第２命令コード５５２のビット３１と第２有効ビット５５５を入力とするＡＮＤゲート５１２と、第３命令コード５５３のビット３１と第３有効ビット５５６を入力とするＡＮＤゲート５１３と、ＡＮＤゲート５１１とＡＮＤゲート５１２とＡＮＤゲート５１３を入力とするＯＲゲート５１４から構成される。命令同期実行検出部５００は、第１〜第３命令コード中の各１ビットの命令ビットフィールドにより、命令同期実行が必要な上記の特定命令を検出する。ＯＲゲート５１４の出力として、命令同期実行が必要な命令が含まれていることを示す命令同期実行検出信号５９０が生成される。
【００３６】
さらに、命令同期実行検出信号より最終的に命令バッファに格納されている命令が発行可能かどうかを示すために、第１有効ビット５５４をそのまま出力とする第１命令コード有効ビット５９１と、第２有効ビット５５５とＡＮＤゲート５１１の出力の反転を入力とするＡＮＤゲート５８１の出力とする第２命令コード有効ビットと、第３有効ビット５５６とＡＮＤゲート５８１の出力とＡＮＤゲート５１２の出力の反転を入力とするＡＮＤゲート５８２の出力とする第３命令コード有効ビットが生成される。上記のＡＮＤゲート５１１〜５１３、５８１および５８２は、特定命令が検出された場合、特定命令を含む命令グループの中から特定命令に後続する命令を除外する。つまり、この場合の後続する命令に対応する有効ビットは、第２命令コード有効ビット５９２、第３命令コード有効ビット５９３として無効化される。
【００３７】
これにより、命令同期実行検出部の出力の命令同期実行検出信号５９０により、命令グループに同期実行を行う特定命令が含まれていることを示し、第１命令コード有効ビット５９１、第２命令コード有効ビット５９２、第３命令コード有効ビット５９３により、スレッド内の特定命令を含む命令グループの中から前記特定命令に後続する命令が除外される。
【００３８】
なお、図３の命令同期実行検出部は、スレッド内の制御信号のみを示している。本実施の形態では、３スレッド同時実行可能なプロセッサを想定しているため、これらの資源はスレッド毎に必要になる。ただし、この構成はＳＭＴ実行可能なプロセッサの構成という観点から自明であるため以降の説明では省略することとする。
【００３９】
図４は、図１に記載のレジスタグループ１６０の一例としてのレジスタグループ９００の内部構成を示す図である。レジスタグループ９００は、汎用レジスタ９１２〜９１５、プロセッサ状態を格納するプロセッサ状態レジスタ９１０、オペランドデータラッチ９２１〜９２４を備え、これ以外にも、演算結果のフラグを格納するフラグレジスタ、その他プロセッサに必要な制御レジスタを含む。なお、これらの資源はスレッド毎に必要になる。ただし、この構成はＳＭＴ実行可能なプロセッサの構成という観点から自明であるため以降の説明では省略することとする。
【００４０】
図５は、図１に記載の命令発行停止部１２２の内部構成のうち１スレッドに対応する命令発行停止部１０００の構成を示すブロック図である。命令発行停止部１０００は、命令同期実行検出部５００より出力される命令同期実行検出信号５９０より得られる命令発行停止要求信号１０１０と命令発行部１１２および演算実行部１３０より得られるパイプラインハザードに関係するパイプラインハザード状態信号１０３０を入力とする。
【００４１】
命令発行停止部１０００は、命令発行停止要求信号１０１０と、命令伝達部に使用されているクロック信号１０２１を入力とするフリップフロップ１０２０と、フリップフロップ１０２０の出力を入力とする命令発行停止期間を示す信号を生成するステートマシンである同期制御部１０５０と、パイプラインハザード状態信号１０３０を入力とする命令発行停止期間を示す信号を生成するステートマシンであるハザード検出部１０３１とを有し、同期制御部１０５０の出力とハザード検出部１０３１の出力とを入力とするＯＲゲート１０４０から構成される。同期制御部１０６０は、上記の特定命令の発行直後の所定サイクル期間だけ特定命令に後続する命令の発行を停止することを指示する命令発行停止状態信号１０５０を出力する。所定サイクル期間は２サイクル、３サイクルなど予め固定的に定めておいてもよい。
【００４２】
これにより、ＯＲゲート１０４０の出力の命令発行停止状態信号１０５０が命令発行停止部１０００の出力信号として生成され、命令発行停止状態信号１０５０により、次サイクルに自スレッドの命令が発行できないことを示す信号を生成することができる。
【００４３】
なお、図５の命令発行停止部は、スレッド内の制御信号のみを示している。本実施の形態では、３スレッド同時実行可能なプロセッサを想定しているため、これらの資源はスレッド毎に必要になる。ただし、この構成はＳＭＴ実行可能なプロセッサの構成という観点から自明であるため以降の説明では省略することとする。
【００４４】
なお、本実施の形態１では、命令伝達部と演算実行部の内部構成を示したが、これらの処理の順番はパイプラインの構成により入れ替えることが可能であり、この限りではない。
【００４５】
以上のことから、命令同期実行を行うことを示す命令コードをプリデコードし、スレッド毎に、通常のプロセッサで必要になるパイプラインハザード状態信号１０３０とパイプラインハザードとは無関係に命令によって生成される命令発行停止要求信号１０１０との論理和によって命令発行制御を行う命令発行部２１１を有することにより、ＳＭＴ実行可能なプロセッサで、他スレッドの実行状態に関わらず、自スレッドに該当するプログラムの実行時間の最短時間を細粒度で調整可能な演算処理装置を提供することができる。
【００４６】
以下に、本実施の形態で説明するプログラムとその動作例として、図６〜図９に示すプログラム例と、各スレッドの命令実行状態を示す図１０、図１１を参照しながら説明する。
【００４７】
図６に示すプログラムＡ−１は、本実施の形態を利用しない従来技術の課題と実施の形態１の効果を説明するためのスレッドＡのプログラム例である。図７に示すプログラムＡ−２は、本実施の形態を利用した場合のスレッドＡのプログラム例である。図８に示すプログラムＢ−１、および、図９に示すプログラムＣ−１は、スレッドＡ動作時に実行されるスレッドＢ、および、スレッドＣのプログラム例である。
【００４８】
図６に示すプログラムＡ−１は、命令発行部１１２によって実行されたスレッドＡの命令発行可能な命令グループを記載している。ＳＴＥＰの列には、各実行ステップを発行される順にＳＡ１、ＳＡ２、・・・、ＳＡ１５と記載している。各スレッドの同一サイクルに発行できる命令は、ロード・ストア命令は１命令のみ発行可能、算術論理演算、および、転送命令は３命令発行可能とする。ＳＡ１の命令は、Ｉｎｓｔｒｕｃｔｉｏｎ１とＩｎｓｔｒｕｃｉｏｎ２とＩｎｓｔｒｕｃｔｉｏｎ３の３命令可能なうち、ｓｅｔｌｏ命令、および、ｓｅｔｈｉ命令が発行可能である。ｓｅｔｌｏ命令は、レジスタｒ０に即値３２ビット（ＨＷＥ＿Ａ）の下位１６ビットを格納する命令である。ｓｅｔｈｉ命令は、レジスタｒ０に即値３２ビット（ＨＷＥ＿Ａ）の上位１６ビットを格納する命令である。後続のｓｔ命令は、ＳＡ１命令グループのハザード回避のため、ＳＡ２に発行可能となる。ＳＡ２の命令は、レジスタｒ１の内容を、ｒ０をアドレスとするメモリ空間にストアする命令とｎｏｐ命令である。ＳＡ３からＳＡ９はｎｏｐ命令である。ＳＡ１０は、ＳＡ１と同様に、即値３２ビット（ＨＷＥ＿ＳＴ）をレジスタｒ２に格納する命令とｎｏｐ命令である。ＳＡ１１は、ｒ１をアドレスとするメモリ空間からロードし、レジスタｒ０に内容を格納するｌｄ命令である。ＳＡ１２は、レジスタｒ１と即値１００の和をレジスタｒ１に格納する命令である。ＳＡ１３は、レジスタｒ１の内容を、ｒ２をアドレスとするメモリ空間にストアする命令である。ＳＡ１４およびＳＡ１５は、レジスタｒ０と即値１の和をレジスタｒ０に格納するａｄｄ命令である。このスレッドＡのプログラムＡ−１は、あるハードウェアアクセラレータ（ＨＷＥ＿Ａ）に書き込みを行い、８ｎＳｅｃたった後に、同アドレスをロードすると特殊な演算結果が得られるというハードウェアアクセラレータのモデルとする。このプログラムの動作しているプロセッサの動作周波数は、１ＧＨｚとしているため、８ｎＳｅｃの時間を空けるために、ＳＡ２からＳＡ９まで、８つのｎｏｐ命令と、ＳＡ１０で３命令発行させることにより、計９つのＮｏｐ命令で８つの命令発行サイクルを経て、つまり、計８ｎＳｅｃの時間を空けてハードウェアアクセラレータからのロード時間制約を満たしている。
【００４９】
図８に示すプログラムＢ−１は、命令発行部１１２によって実行されたスレッドＢの命令発行可能な命令グループを記載している。ＳＴＥＰの列には、各実行ステップを発行される順にＳＢ１、ＳＢ２、・・・、ＳＢ１３と記載している。各スレッドの同一サイクルに発行できる命令は、ロード・ストア命令は１命令のみ発行可能、算術論理演算、および、転送命令は３命令発行可能とする。ＳＢ１の命令は、Ｉｎｓｔｒｕｃｔｉｏｎ１とＩｎｓｔｒｕｃｉｏｎ２とＩｎｓｔｒｕｃｔｉｏｎ３の３命令可能なうち、レジスタｒ５に即値１の和をレジスタｒ７に格納するａｄｄ命令、および、レジスタｒ２をアドレスとするメモリ空間からレジスタｒ３にロードするｌｄ命令である。ＳＢ２の命令は、レジスタｒ５がレジスタｒ７より大きい場合に、フラグレジスタＣ６に１を格納する比較命令と、レジスタｒ３の内容を、レジスタｒ０をアドレスとするメモリ空間にストアするｓｔ命令と、レジスタｒ２に即値１２０の和をレジスタｒ０に格納するａｄｄ命令である。ＳＢ３の命令は、レジスタｒ５の内容をレジスタｒ６にコピーするｍｏｖ命令と、レジスタｒ５の内容を、レジスタｒ０をアドレスとするメモリ空間にストアするｓｔ命令と、フラグレジスタＣ６が１に設定されている場合に、Ｌ０２８ラベルに分岐するｂｒ命令である。ＳＢ４の命令は、分岐先を格納するターゲットアドレスレジスタＴＡＲに分岐先アドレス（ＰＣ）を格納するｓｅｔｔａｒ命令と、即値２００をレジスタｒ０にコピーするｍｏｖ命令である。ＳＢ５の命令は、レジスタｒ５とレジスタｒ０の和をレジスタｒ４に格納するａｄｄ命令である。ＳＢ６の命令は、レジスタ４の内容を２ビット左シフトし、レジスタｒ５との和をレジスタｒ４に格納するｓ２ａｄｄ命令である。ＳＢ７の命令は、レジスタｒ６に即値１の和をレジスタｒ６に格納するａｄｄ命令である。ＳＢ８の命令は、レジスタｒ６がレジスタｒ７より小さいか、もしくは、同じ場合に、フラグレジスタＣ６に１を格納する比較命令である。ＳＢ９の命令は、レジスタｒ５の内容を、レジスタｒ４をアドレスとするメモリ空間にストアし、アドレスｒ４に４を足すポストインクリメントｓｔ命令と、フラグレジスタＣ６が１に設定されている場合に、分岐先を格納するターゲットアドレスレジスタＴＡＲに格納されている分岐先アドレス（ＰＣ）にジャンプするｊｍｐｆ命令である。ＳＢ１０の命令は、即値２００をレジスタｒ４にコピーする命令である。ＳＢ１１からＳＢ１３の命令は、レジスタｒ４に即値１の和をレジスタｒ４に格納するａｄｄ命令である。
【００５０】
図９に示すプログラムＣ−１は、命令発行部１１２によって実行されたスレッドＣの命令発行可能な命令グループを記載している。ＳＴＥＰの列には、各実行ステップを発行される順にＳＣ１、ＳＣ２、・・・、ＳＣ１４と記載している。各スレッドの同一サイクルに発行できる命令は、ロード・ストア命令は１命令のみ発行可能、算術論理演算、および、転送命令は３命令発行可能とする。ＳＣ１の命令は、Ｉｎｓｔｒｕｃｔｉｏｎ１とＩｎｓｔｒｕｃｉｏｎ２とＩｎｓｔｒｕｃｔｉｏｎ３の３命令可能なうち、ｓｅｔｌｏ命令、および、ｓｅｔｈｉ命令が発行可能である。ｓｅｔｌｏ命令は、レジスタｒ０に即値３２ビット（Ｗ＿ＭＥＭ）の下位１６ビットを格納する命令である。ｓｅｔｈｉ命令は、レジスタｒ０に即値３２ビット（Ｗ＿ＭＥＭ）の上位１６ビットを格納する命令である。ＳＣ２の命令は、レジスタｒ０をアドレスとするメモリ空間から８バイトロードし、レジスタｒ２、レジスタｒ３に格納し、レジスタｒ０に４を足すポストインクリメントｌｄｐ命令と、レジスタｒ１に即値１０００の和をレジスタｒ１に格納するａｄｄ命令である。ＳＣ３の命令は、レジスタｒ０をアドレスとするメモリ空間から８バイトロードし、レジスタｒ４、レジスタｒ５に格納し、レジスタｒ０に４を足すポストインクリメントｌｄｐ命令と、レジスタｒ２とレジスタｒ３の和をレジスタｒ６に格納するａｄｄ命令と、レジスタｒ２とレジスタｒ３の差をレジスタｒ７に格納するｓｕｂ命令である。ＳＣ４の命令は、レジスタｒ０をアドレスとするメモリ空間から８バイトロードし、レジスタｒ２、レジスタｒ３に格納し、レジスタｒ０に４を足すポストインクリメントｌｄｐ命令と、レジスタｒ４とレジスタｒ５の和をレジスタｒ８に格納するａｄｄ命令と、レジスタｒ４とレジスタｒ５の差をレジスタｒ９に格納するｓｕｂ命令である。ＳＣ５の命令は、レジスタｒ０をアドレスとするメモリ空間から８バイトロードし、レジスタｒ４、レジスタｒ５に格納し、レジスタｒ０に４を足すポストインクリメントｌｄｐ命令と、レジスタｒ２とレジスタｒ３の和をレジスタｒ１０に格納するａｄｄ命令と、レジスタｒ２とレジスタｒ３の差をレジスタｒ１１に格納するｓｕｂ命令である。ＳＣ６の命令は、レジスタｒ６とレジスタｒ７の内容を、レジスタｒ１をアドレスとするメモリ空間に８バイトストアし、レジスタｒ１に４を足すポストインクリメントｓｔｐ命令と、レジスタｒ４とレジスタｒ５の和をレジスタｒ１２に格納するａｄｄ命令と、レジスタｒ４とレジスタｒ５の差をレジスタｒ１３に格納するｓｕｂ命令である。ＳＣ７の命令は、レジスタｒ８とレジスタｒ９の内容を、レジスタｒ１をアドレスとするメモリ空間に８バイトストアし、レジスタｒ１に４を足すポストインクリメントｓｔｐ命令である。ＳＣ８の命令は、レジスタｒ１０とレジスタｒ１１の内容を、レジスタｒ１をアドレスとするメモリ空間に８バイトストアし、レジスタｒ１に４を足すポストインクリメントｓｔｐ命令である。ＳＣ９の命令は、レジスタｒ１２とレジスタｒ１３の内容を、レジスタｒ１をアドレスとするメモリ空間に８バイトストアし、レジスタｒ１に４を足すポストインクリメントｓｔｐ命令である。ＳＣ１０からＳＣ１４の命令は、レジスタｒ１と即値１の和をレジスタｒ１に格納する命令である。
【００５１】
以上で、本実施の形態の動作説明をするための各スレッドのプログラムの内容を説明した。ここで、図１０を用いてＳＭＴ実行を可能とした、図１に記載のプロセッサを用いて動作説明を行う。なお、本説明の簡略化のため、命令発行部１１２は、以下のルールに従ったＳＭＴ実行をサポートする。各スレッドは、最大３命令発行可能とし、同時に実行可能なスレッドは優先度に従って２スレッドのみとする。さらに、各スレッドの命令を同時実行する場合は、スレッド毎の命令グループを変更しないことを前提とし、４命令発行可能な場合のみＳＭＴ実行可能とする。ただし、同一サイクルにおける、ロード命令の複数発行、ストア命令の複数発行は不可能とし、ストア命令とロード命令の同時発行は可能とする。さらに、今回説明を簡略化するために、分岐命令や各種演算、ロードユースのスループットは１サイクルとして説明する。
【００５２】
図１０は、図６のプログラムＡ−１、図８のプログラムＢ−１、図９のプログラムＣ−１をＳＭＴ実行した場合の動作説明図である。ＳＴＥＰの列には、各実行ステップを発行される順にＴ１、Ｔ２、・・・、Ｔ２０と記載している。実行可能なスレッドの優先度はＰｒｉｏｒｉｔｙの列の規則に従って命令発行調停されるとする。Ｔ１は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ１の２命令とＳＣ１の２命令が発行される。Ｔ２は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ２の２命令とＳＡ２の２命令が発行される。なぜなら、ＳＢ１はロード命令を含むためロード命令を同時発行できないため、スレッドＢの命令グループは発行できず、スレッドＡの命令グループが発行される。Ｔ３は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ１の２命令とＳＡ３の１命令が発行される。Ｔ４は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ４の１命令とＳＣ３の３命令が発行される。Ｔ５は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ４の３命令とＳＡ５の１命令が発行される。Ｔ６は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ２の３命令とＳＡ６の１命令が発行される。Ｔ７は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ７の１命令とＳＣ５の３命令が発行される。Ｔ８は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ６の３命令とＳＡ８の１命令が発行される。Ｔ９は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ３の３命令とＳＡ９の１命令が発行される。Ｔ１０は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ１０の３命令とＳＣ７の１命令が発行される。Ｔ１１は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ８の１命令とＳＢ４の２命令が発行される。Ｔ１２は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ５の１命令とＳＡ１１の１命令が発行される。Ｔ１３は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ１２の１命令とＳＣ９の１命令が発行される。Ｔ１４は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ１０の１命令とＳＢ６の１命令が発行される。Ｔ１５は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ７の１命令とＳＡ１３の１命令が発行される。Ｔ１６は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ１４の１命令とＳＣ１１の１命令が発行される。Ｔ１７は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ１２の１命令とＳＢ８の１命令が発行される。Ｔ１８は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ９の２命令とＳＡ１５の１命令が発行される。Ｔ１９は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ１６の１命令とＳＣ１３の１命令が発行される。Ｔ２０は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ１４の１命令とＳＢ１０の１命令が発行される。
【００５３】
以上で、本実施の形態を利用した従来例を示した。次に、図７のプログラムＡ−２を用いた、本実施の形態を利用した場合のＳＭＴ動作説明を行う。
【００５４】
図７に示すプログラムＡ−２は、命令発行部１１２によって実行されたスレッドＡの命令発行可能な命令グループを記載している。ＳＴＥＰの列には、各実行ステップを発行される順にＳＡ'１、ＳＡ'２、・・・、ＳＡ'１５と記載している。各スレッドの同一サイクルに発行できる命令は、ロード・ストア命令は１命令のみ発行可能、算術論理演算、および、転送命令は３命令発行可能とする。ＳＡ'１の命令は、Ｉｎｓｔｒｕｃｔｉｏｎ１とＩｎｓｔｒｕｃｉｏｎ２とＩｎｓｔｒｕｃｔｉｏｎ３の３命令可能なうち、ｓｅｔｌｏ命令、および、ｓｅｔｈｉ命令が発行可能である。ｓｅｔｌｏ命令は、レジスタｒ０に即値３２ビット（ＨＷＥ＿Ａ）の下位１６ビットを格納する命令である。ｓｅｔｈｉ命令は、レジスタｒ０に即値３２ビット（ＨＷＥ＿Ａ）の上位１６ビットを格納する命令である。後続のｓｔ命令は、ＳＡ１命令グループのハザード回避のため、ＳＡ'２に発行可能となる。ＳＡ'２の命令は、レジスタｒ１の内容を、ｒ０をアドレスとするメモリ空間にストアする命令を命令同期実行検出可能なｓｙｎｃ＿ｓｔ命令である。これは、図２に記載の命令ビットマップで、ビット３１のＳビットが１になっている状態のｓｔ命令である。ＳＡ'３は、即値３２ビット（ＨＷＥ＿ＳＴ）の下位１６ビットをレジスタｒ２に格納するｓｅｔｌｏ命令の命令同期実行可能なｓｙｎｃ＿ｓｅｔｌｏ命令である。ＳＡ'４は、即値３２ビット（ＨＷＥ＿ＳＴ）の上位１６ビットをレジスタｒ２に格納するｓｅｔｈｉ命令の命令同期実行可能なｓｙｎｃ＿ｓｅｔｈｉ命令である。ＳＡ'５は、レジスタｒ０をアドレスとするメモリ空間からロードし、レジスタｒ１に格納するｌｄ命令である。ＳＡ'６は、レジスタｒ１と即値１００の和をレジスタｒ１に格納する命令である。ＳＡ'７は、レジスタｒ１の内容を、ｒ２をアドレスとするメモリ空間にストアする命令である。ＳＡ'８からＳＡ'１４は、レジスタｒ０と即値１の和をレジスタｒ０に格納するａｄｄ命令である。このスレッドＡのプログラムＡ−２（図７）は、あるハードウェアアクセラレータ（ＨＷＥ＿Ａ）に書き込みを行い、８ｎＳｅｃたった後に、同アドレスをロードすると特殊な演算結果が得られるというハードウェアアクセラレータのモデルとする。このプログラムの動作しているプロセッサの動作周波数は、１ＧＨｚとしているため、８ｎＳｅｃの時間を空けるために、命令同期実行の命令が検出されてから２サイクルの命令発行停止期間を持つことを特徴とし、ＳＡ'２からＳＡ'４まで、３つの命令同期実行により、計８ｎＳｅｃの時間を空けてハードウェアアクセラレータからのロード時間制約を満たしている。これは、図５に記載の命令発行停止部１０００の同期制御部１０６０がフリップフロップ１０２０でラッチされた命令発行停止要求信号１０１０がステートマシンである同期制御部１０６０に入力され、パイプラインハザード状態１０３０に関わらず、２サイクルの期間命令発行停止状態信号１０５０を出力することを示している。
【００５５】
図１１は、図７のプログラムＡ−２、図８のプログラムＢ−１、図９のプログラムＣ−１をＳＭＴ実行した場合の動作説明図である。ＳＴＥＰの列には、各実行ステップを発行される順にＴ１、Ｔ２、・・・、Ｔ２０と記載している。実行可能なスレッドの優先度はＰｒｉｏｒｉｔｙの列の規則に従って命令発行調停されるとする。Ｔ１は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ'１の２命令とＳＣ１の２命令が発行される。Ｔ２は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ２の２命令とＳＡ'２の２命令が発行される。なぜなら、ＳＢ１はロード命令を含むためロード命令を同時発行できないため、スレッドＢの命令グループは発行できず、スレッドＡの命令グループが発行される。Ｔ３は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ１の２命令とＳＡ'３の１命令が発行される。Ｔ４は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御されるが、命令同期実行制御により、ＳＡの命令発行が２サイクル禁止されているため、ＳＡ'４の命令は発行されず、ＳＣ３の３命令が発行される。Ｔ５は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御されるが、Ｔ４と同様ＳＡ'４の命令は発行されないために、ＳＣ４の３命令のみが発行される。Ｔ６は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ２の３命令とＳＡ'４の１命令が発行される。Ｔ７は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御されるが、命令同期実行制御により、ＳＡ'５の命令は発行されず、ＳＣ５の３命令のみが発行される。Ｔ８は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御されるが、Ｔ７と同様ＳＡ'５の命令は発行されないために、ＳＣ６の３命令のみが発行される。Ｔ９は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ３の３命令とＳＡ'５の１命令が発行される。Ｔ１０は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御されるが、命令同期実行制御により、ＳＡ'６の命令は発行されず、ＳＣ７の１命令とＳＢ４の２命令が発行される。Ｔ１１は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ８の１命令とＳＢ５の１命令が発行される。Ｔ１２は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ６の１命令とＳＡ'６の１命令が発行される。Ｔ１３は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ'７の１命令とＳＣ９の１命令が発行される。Ｔ１４は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ１０の１命令とＳＢ７の１命令が発行される。Ｔ１５は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ８の１命令とＳＡ'８の１命令が発行される。Ｔ１６は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ'９の１命令とＳＣ１１の１命令が発行される。Ｔ１７は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ１２の１命令とＳＢ９の２命令が発行される。Ｔ１８は、Ｂ＞Ａ＞Ｃの優先度で命令発行制御され、ＳＢ１０の１命令とＳＡ'１０の１命令が発行される。Ｔ１９は、Ａ＞Ｃ＞Ｂの優先度で命令発行制御され、ＳＡ'１１の１命令とＳＣ１３の１命令が発行される。Ｔ２０は、Ｃ＞Ｂ＞Ａの優先度で命令発行制御され、ＳＣ１４の１命令とＳＢ１１の１命令が発行される。つまり、図１０の動作説明と比較して、スレッドＡのプログラム動作要件を満たす仕組みを持っていながら、かつ、他のスレッド（スレッドＢの命令発行数が増加しているように）の実効性能を向上さ��ることができる。
【００５６】
以上の説明より、本実施の形態に係る命令同期実行検出部１２１と命令発行停止部１２２を用いることにより、マルチスレッドプロセッサ構成の演算器において、各スレッドの命令実行状態に関わらず、自スレッドの命令実行時間の最短時間を確保し、さらに、それによって自スレッドの命令発行が抑制できるため、他スレッドに対して、マルチスレッド実行性能を向上させることができる。また、本実施の形態では、１ビットの命令ビットフィールドで命令同期実行検出を行うため、全命令に対して、リアルタイム実行可能な部を有している。
【００５７】
なお、図１のプロセッサの変形例を図１２に示す。図１２のプロセッサは、図１のプロセッサと比べて、命令発行停止部１２２の代わりに命令実行停止部２４１を備える点が異なっている。この点以外はほぼ同様の構成である。図１２のように、命令発行を停止する代わりに命令実行を停止する構成としてもよい。
【００５８】
（実施の形態２）
しかし、命令同期実行検出を行うために、命令コードの１ビットを使用してこれらの機能を実現するということは、限られた命令ビットマップを有効に利用するという観点から問題が発生すると考えられる。そこで、実施の形態１と比較して、無駄な命令ビットマップを占有しない方法として、第２命令同期実行検出部を図１３、図１４、図１５を用いて説明する。
【００５９】
図１３は、実施の形態２における特定命令の命令コードを示す図である。本実施の形態では、命令コードは、原則として３２ビット固定の命令ビットマップを例に説明しており、ビット３１からビット２４のＯＰ（Operation Code）が、あるビットパターンの時に命令同期実行を行う特定命令であることを示す。この特定命令は、実施の形態１のような他の命令と兼用ではなく、専用の命令としてビットパターンが割り当てられている。なお、ビットマップの割り当て方法に関しては、この限りではない。
【００６０】
図１４は、命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。命令発行部１１２は、スレッド毎に発行対象となる最大命令数分（本実施の形態では、スレッド毎に３命令発行可能、同時発行可能な命令は２スレッド命令グループ、同時発行可能な命令は４命令として説明を行う）を格納する命令バッファ６５０があり、プログラムカウンタ順に、第１命令コード６５１、第２命令コード６５２、第３命令コード６５３、および、それらのバッファに有効な命令が格納されているかどうかを示す、第１有効ビット６５４、第２有効ビット６５５、第３有効ビット６５６が格納されている。
【００６１】
これらの情報を入力とし、命令同期実行検出部６００は、第１命令コード６５１のビット３１からビット２４の出力と参照テーブル６３１の比較器６２１の出力と第１有効ビット６５４を入力とするＡＮＤゲート６１１と、第２命令コード６５２のビット３１からビット２４の出力と参照テーブル６３１の比較器６２２の出力と第２有効ビット６５５を入力とするＡＮＤゲート６１２と、第３命令コード６５３のビット３１からビット２４の出力と参照テーブル６３１の比較器６２３の出力と第３有効ビット６５６を入力とするＡＮＤゲート６１３と、ＡＮＤゲート６１１とＡＮＤゲート６１２とＡＮＤゲート６１３を入力とするＯＲゲート６１４から構成され、ＯＲゲート６１４の出力命令同期実行が必要な命令が含まれていることを示す命令同期実行検出信号６９０が生成される。
【００６２】
参照テーブル６３１には、特定命令の命令コード（ビットパターン）を保持する。比較器６２１〜６２３は、それぞれ、命令コード中の複数ビットの命令ビットフィールドをプリデコードすることにより特定命令を検出している。
【００６３】
さらに、命令同期実行検出信号より最終的に命令バッファに格納されている命令が発行可能かどうかを示すために、第１有効ビット６５４をそのまま出力とする第１命令コード有効ビット６９１と、第２有効ビット６５５とＡＮＤゲート６１１の出力の反転を入力とするＡＮＤゲート６８１の出力とする第２命令コード有効ビット６９２と、第３有効ビット６５６とＡＮＤゲート６８１の出力とＡＮＤゲート６１２の出力の反転を入力とするＡＮＤゲート６８２の出力とする第３命令コード有効ビット６９３が生成される。これにより、命令同期実行検出部の出力の命令同期実行検出信号６９０により、命令グループに同期実行を行う命令が含まれていることを示し、第１命令コード有効ビット６９１、第２命令コード有効ビット６９２、第３命令コード有効ビット６９３により、スレッド内の命令発行可能なコードが識別できる。なお、図１４の命令同期実行検出部６００は、スレッド内の制御信号のみを示している。本実施の形態では、３スレッド同時実行可能なプロセッサを想定しているため、これらの資源はスレッド毎に必要になる。ただし、この構成はＳＭＴ実行可能なプロセッサの構成という観点から自明であるため以降の説明では省略することとする。
【００６４】
以上のことから、無駄な命令ビットマップを占有しない方法として、第２命令同期実行検出部を有することにより、実施の形態１に記載のＳＭＴ実行可能なプロセッサで、他スレッドの実行状態に関わらず、自スレッドに該当するプログラムの実行時間の最短時間を細粒度で調整可能な演算処理装置を命令ビットマップの占有なしに提供することができる。
【００６５】
以下に、本実施の形態で説明するプログラムとして、ｓｙｎｃ命令のみを命令ビットマップに追加した、図１５に示すプログラムＡ−３を説明する。
【００６６】
図１５に示すプログラムＡ−３は、命令発行部１１２によって実行されたスレッドＡの命令発行可能な命令グループを記載している。ＳＴＥＰの列には、各実行ステップを発行される順にＳＡ'１、ＳＡ'２、・・・、ＳＡ'１５と記載している。各スレッドの同一サイクルに発行できる命令は、ロード・ストア命令は１命令のみ発行可能、算術論理演算、および、転送命令は３命令発行可能とする。ＳＡ'１の命令は、Ｉｎｓｔｒｕｃｔｉｏｎ１とＩｎｓｔｒｕｃｉｏｎ２とＩｎｓｔｒｕｃｔｉｏｎ３の３命令可能なうち、ｓｅｔｌｏ命令、および、ｓｅｔｈｉ命令が発行可能である。ｓｅｔｌｏ命令は、レジスタｒ０に即値３２ビット（ＨＷＥ＿Ａ）の下位１６ビットを格納する命令である。ｓｅｔｈｉ命令は、レジスタｒ０に即値３２ビット（ＨＷＥ＿Ａ）の上位１６ビットを格納する命令である。後続のｓｔ命令は、ＳＡ１命令グループのハザード回避のため、ＳＡ'２に発行可能となる。ＳＡ'２の命令は、レジスタｒ１の内容を、ｒ０をアドレスとするメモリ空間にストアする命令と命令同期実行可能なｓｙｎｃ命令である。ＳＡ'３は、即値３２ビット（ＨＷＥ＿ＳＴ）の下位１６ビットをレジスタｒ２に格納するｓｅｔｌｏ命令とｓｙｎｃ命令である。ＳＡ'４は、即値３２ビット（ＨＷＥ＿ＳＴ）の上位１６ビットをレジスタｒ２に格納するｓｅｔｈｉ命令と、ｓｙｎｃ命令である。ＳＡ'５は、レジスタｒ０をアドレスとするメモリ空間からロードし、レジスタｒ１に格納するｌｄ命令である。ＳＡ'６は、レジスタｒ１と即値１００の和をレジスタｒ１に格納する命令である。ＳＡ'７は、レジスタｒ１の内容を、ｒ２をアドレスとするメモリ空間にストアする命令である。ＳＡ'８からＳＡ'１４は、レジスタｒ０と即値１の和をレジスタｒ０に格納するａｄｄ命令である。このスレッドＡのプログラムＡ−３（図１５）は、あるハードウェアアクセラレータ（ＨＷＥ＿Ａ）に書き込みを行い、８ｎＳｅｃたった後に、同アドレスをロードすると特殊な演算結果が得られるというハードウェアアクセラレータのモデルとする。このプログラムの動作しているプロセッサの動作周波数は、１ＧＨｚとしているため、８ｎＳｅｃの時間を空けるために、命令同期実行の命令が検出されてから２サイクルの命令発行停止期間を持つことを特徴とし、ＳＡ'２からＳＡ'４まで、３つの命令同期実行により、計８ｎＳｅｃの時間を空けてハードウェアアクセラレータからのロード時間制約を満たしている。これは、図５に記載の命令発行停止部１０００の同期制御部１０６０がフリップフロップ１０２０でラッチされた命令発行停止要求信号１０１０がステートマシンである同期制御部１０６０に入力され、パイプラインハザード状態１０３０に関わらず、２サイクルの期間命令発行停止状態信号１０５０を出力することを示している。
【００６７】
以上の説明より、本実施の形態に係る第２命令同期実行検出部６００と命令発行停止部１２２を用いることにより、マルチスレッドプロセッサ構成の演算器において、各スレッドの命令実行状態に関わらず、自スレッドの命令実行時間の最短時間を確保し、さらに、それによって自スレッドの命令発行が抑制できるため、他スレッドに対して、マルチスレッド実行性能を向上させることができる。また、本実施の形態では、複数ビットの命令ビットフィールドをデコードすることで命令同期実行検出を行うため、ある特定の命令に対してのみ、リアルタイム実行可能な部を有している。
【００６８】
（実施の形態３）
しかし、命令同期実行検出を行うために、命令ビットフィールドをデコードして命令同期実行検出を行う専用のｓｙｎｃ命令を追加するということは、命令仕様変更のみならず、ソフトウェア開発環境を変更する必要があり、影響が大きい。そこで、実施の形態２と比較して、新たな命令を生成することなく、ほぼ同等の機能のｎｏｐ命令を拡張するという方法で実現可能な第２命令同期実行検出部を、図１６に示すプログラムＡ−４を用いて説明する。
【００６９】
図１６に示すプログラムＡ−４は、命令発行部１１２によって実行されたスレッドＡの命令発行可能な命令グループを記載している。ＳＴＥＰの列には、各実行ステップを発行される順にＳＡ'１、ＳＡ'２、・・・、ＳＡ'１５と記載している。各スレッドの同一サイクルに発行できる命令は、ロード・ストア命令は１命令のみ発行可能、算術論理演算、および、転送命令は３命令発行可能とする。ＳＡ'１の命令は、Ｉｎｓｔｒｕｃｔｉｏｎ１とＩｎｓｔｒｕｃｉｏｎ２とＩｎｓｔｒｕｃｔｉｏｎ３の３命令可能なうち、ｓｅｔｌｏ命令、および、ｓｅｔｈｉ命令が発行可能である。ｓｅｔｌｏ命令は、レジスタｒ０に即値３２ビット（ＨＷＥ＿Ａ）の下位１６ビットを格納する命令である。ｓｅｔｈｉ命令は、レジスタｒ０に即値３２ビット（ＨＷＥ＿Ａ）の上位１６ビットを格納する命令である。後続のｓｔ命令は、ＳＡ１命令グループのハザード回避のため、ＳＡ'２に発行可能となる。ＳＡ'２の命令は、レジスタｒ１の内容を、ｒ０をアドレスとするメモリ空間にストアする命令と命令同期検出可能なｎｏｐ命令である。ＳＡ'３は、即値３２ビット（ＨＷＥ＿ＳＴ）の下位１６ビットをレジスタｒ２に格納するｓｅｔｌｏ命令と、命令同期検出可能なｎｏｐ命令である。ＳＡ'４は、即値３２ビット（ＨＷＥ＿ＳＴ）の上位１６ビットをレジスタｒ２に格納するｓｅｔｈｉ命令と、命令同期検出可能なｎｏｐ命令である。ＳＡ'５は、レジスタｒ０をアドレスとするメモリ空間からロードし、レジスタｒ１に格納するｌｄ命令である。ＳＡ'６は、レジスタｒ１と即値１００の和をレジスタｒ１に格納する命令である。ＳＡ'７は、レジスタｒ１の内容を、ｒ２をアドレスとするメモリ空間にストアする命令である。ＳＡ'８からＳＡ'１４は、レジスタｒ０と即値１の和をレジスタｒ０に格納するａｄｄ命令である。このスレッドＡのプログラムＡ−４（図１６）は、あるハードウェアアクセラレータ（ＨＷＥ＿Ａ）に書き込みを行い、８ｎＳｅｃたった後に、同アドレスをロードすると特殊な演算結果が得られるというハードウェアアクセラレータのモデルとする。このプログラムの動作しているプロセッサの動作周波数は、１ＧＨｚとしているため、８ｎＳｅｃの時間を空けるために、命令同期実行の命令が検出されてから２サイクルの命令発行停止期間を持つことを特徴とし、ＳＡ'２からＳＡ'４まで、３つの命令同期実行により、計８ｎＳｅｃの時間を空けてハードウェアアクセラレータからのロード時間制約を満たしている。これは、図５に記載の命令発行停止部１０００の同期制御部１０６０がフリップフロップ１０２０でラッチされた命令発行停止要求信号１０１０がステートマシンである同期制御部１０６０に入力され、パイプラインハザード状態１０３０に関わらず、２サイクルの期間命令発行停止状態信号１０５０を出力することを示している。これにより、命令仕様変更を行うことなく、プログラムＡ−３（図１５）と同様の効果を得ることができる。
【００７０】
（実施の形態４）
しかしながら、ｓｙｎｃ命令をｎｏｐ命令で代用したとしても、スレッドＡに必要な命令発行数が各ステップで２命令必要になる。このため、他のスレッドで３命令発行可能な命令グループが命令発行できなくなる場合もある。この課題を解決すればさらなる性能改善が可能である。そこで、ハードウェアアクセラレータのような専用ハードウェアデバイスに対する、ロード・ストア命令を行う期間のみ、命令同期実行検出を行えばよいため、ハードウェアアクセラレータ専用のレジスタアクセス命令となる、ｗｔ命令、および、ｒｄ命令を用いることにより、性能向上を行うことができる第３命令同期実行検出有効部と第３命令同期検出無効部と、第３命令同期モード状態記憶部を図１７、図４を用いて説明する。
【００７１】
図１７は、実施の形態４における命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。命令発行部１１２は、スレッド毎に発行対象となる最大命令数分（本実施の形態では、スレッド毎に３命令発行可能、同時発行可能な命令は２スレッド命令グループ、同時発行可能な命令は４命令として説明を行う）を格納する命令バッファ７５０があり、プログラムカウンタ順に、第１命令コード７５１、第２命令コード７５２、第３命令コード７５３、および、それらのバッファに有効な命令が格納されているかどうかを示す、第１有効ビット７５４、第２有効ビット７５５、第３有効ビット７５６が格納されている。これらの情報を入力とし、命令同期実行検出部は、第１命令コード７５１のビット３１からビット２４の出力と参照テーブルセレクタ７３３の比較器７２１の出力と第１有効ビット７５４を入力とするＡＮＤゲート７１１と、第２命令コード７５２のビット３１からビット２４の出力と参照テーブルセレクタ７３３の比較器７２２の出力と第２有効ビット７５５を入力とするＡＮＤゲート７１２と、第３命令コード７５３のビット３１からビット２４の出力と参照テーブルセレク７３３の比較器７２３の出力と第３有効ビット７５６を入力とするＡＮＤゲート７１３と、ＡＮＤゲート７１１とＡＮＤゲート７１２とＡＮＤゲート７１３と、さらに、リセット付きフリップフロップ７３５の出力を入力とするＯＲゲート７１４から構成され、ＯＲゲート７１４の出力命令同期実行が必要な命令が含まれていることを示す命令同期実行検出信号７９０が生成される。またこの出力は、リセット付きフリップフロップ７３５の出力とＥＸＯＲゲート７３４に入力され、フリップフロップ７３５のデータ入力に接続されている。これにより、命令同期実行検出部によって検出された命令同期実行検出有効状態を保持し、さらに、命令同期実行部によって検出された命令同期実行検出無効要求により、この有効状態をクリアすることができる。さらに、このフリップフロップの出力は、有効参照テーブル７３１と無効参照テーブル７３２のセレクタ７３３のセレクト信号としても使用される。さらに、命令同期実行検出信号より最終的に命令バッファに格納されている命令が発行可能かどうかを示すために、第１有効ビット７５４をそのまま出力とする第１命令コード有効ビット７９１と、第２有効ビット７５５とＡＮＤゲート７１１の出力の反転を入力とするＡＮＤゲート７８１の出力とする第２命令コード有効ビット７９２と、第３有効ビット７５６とＡＮＤゲート７８１の出力とＡＮＤゲート７１２の出力の反転を入力とするＡＮＤゲート７８２の出力とする第３命令コード有効ビット７９３が生成される。これにより、命令同期実行検出部の出力の命令同期実行検出信号７９０により、命令グループに同期実行を行う命令が含まれていることを示し、第１命令コード有効ビット７９１、第２命令コード有効ビット７９２、第３命令コード有効ビット７９３により、スレッド内の命令発行可能なコードが識別できる。なお、図１７の命令同期実行検出部７００は、スレッド内の制御信号のみを示している。本実施の形態では、３スレッド同時実行可能なプロセッサを想定しているため、これらの資源はスレッド毎に必要になる。ただし、この構成はＳＭＴ実行可能なプロセッサの構成という観点から自明であるため以降の説明では省略することとする。
【００７２】
図４は、プロセッサ状態レジスタに格納されている命令同期実行モード記憶部について説明する。レジスタグループ９００はプロセッサ状態レジスタ９１０、汎用レジスタ９１２〜９１５、オペランドデータラッチ９２１〜９２４等を含む。プロセッサ状態レジスタ９１０は、ＳＹＮＣビット９５０を保持する。このＳＹＮＣビット９５０は、図１７に記載の第３命令同期実行検出信号７９０によりセットおよびリセットされる。また、ＳＹＮＣビット９５０は、割込み処理が発生したときにもリセットされる。
【００７３】
これにより、同期モードであることをプロセッサ状態として記憶することにより、割込みによるスレッドの分岐があった場合にも、その状態を管理することができる。
【００７４】
以下に、本実施の形態に係る動作説明として、レジスタアクセス命令を用いた、図１８に示すプログラムＡ−５を説明する。
【００７５】
図１８に示すプログラムＡ−５は、命令発行部１１２によって実行されたスレッドＡの命令発行可能な命令グループを記載している。ＳＴＥＰの列には、各実行ステップを発行される順にＳＡ'１、ＳＡ'２、・・・、ＳＡ'１５と記載している。各スレッドの同一サイクルに発行できる命令は、ロード・ストア命令は１命令のみ発行可能、算術論理演算、および、転送命令は３命令発行可能とする。ＳＡ'１の命令は、Ｉｎｓｔｒｕｃｔｉｏｎ１とＩｎｓｔｒｕｃｉｏｎ２とＩｎｓｔｒｕｃｔｉｏｎ３の３命令可能なうち、ｓｅｔｌｏ命令、および、ｓｅｔｈｉ命令が発行可能である。ｓｅｔｌｏ命令は、レジスタｒ０に即値３２ビット（ＨＷＥ＿Ａ）の下位１６ビットを格納する命令である。ｓｅｔｈｉ命令は、レジスタｒ０に即値３２ビット（ＨＷＥ＿Ａ）の上位１６ビットを格納する命令である。後続のｗｔ命令は、ＳＡ１命令グループのハザード回避のため、ＳＡ'２に発行可能となる。ＳＡ'２の命令は、レジスタｒ１の内容を、ｒ０をアドレスとするハードウェアアクセラレータのレジスタにストアするｗｔ命令である。このｗｔ命令が実行されることにより、命令同期検出可能な命令であり、かつ、スレッドＡは、命令同期モードが設定される。ＳＡ'３は、即値３２ビット（ＨＷＥ＿ＳＴ）の下位１６ビットをレジスタｒ２に格納するｓｅｔｌｏ命令である。これは、命令同期モードで実行されるため、単独で実行される。ＳＡ'４は、即値３２ビット（ＨＷＥ＿ＳＴ）の上位１６ビットをレジスタｒ２に格納するｓｅｔｈｉ命令である。これは、命令同期モードで実行されるため、単独で実行される。ＳＡ'５は、レジスタｒ０をアドレスとするハードウェアアクセラレータのレジスタからロードし、レジスタｒ１に格納するｒｄ命令である。この命令によって命令同期モードが解除される。ＳＡ'６は、レジスタｒ１と即値１００の和をレジスタｒ１に格納する命令である。ＳＡ'７は、レジスタｒ１の内容を、ｒ２をアドレスとするメモリ空間にストアする命令である。ＳＡ'８からＳＡ'１４は、レジスタｒ０と即値１の和をレジスタｒ０に格納するａｄｄ命令である。このスレッドＡのプログラムＡ−５（図１８）は、あるハードウェアアクセラレータ（ＨＷＥ＿Ａ）に書き込みを行い、８ｎＳｅｃたった後に、同アドレスをロードすると特殊な演算結果が得られるというハードウェアアクセラレータのモデルとする。このプログラムの動作しているプロセッサの動作周波数は、１ＧＨｚとしているため、８ｎＳｅｃの時間を空けるために、命令同期実行の命令が検出されてから２サイクルの命令発行停止期間を持つことを特徴とし、ＳＡ'２からＳＡ'４まで、３つの命令同期実行により、計８ｎＳｅｃの時間を空けてハードウェアアクセラレータからのロード時間制約を満たしている。これは、図５に記載の命令発行停止部１０００の同期制御部１０６０がフリップフロップ１０２０でラッチされた命令発行停止要求信号１０１０がステートマシンである同期制御部１０６０に入力され、パイプラインハザード状態１０３０に関わらず、２サイクルの期間命令発行停止状態信号１０５０を出力することを示している。以上のことから、命令同期実行モードであることを示す命令同期実行検出信号７９０が生成され、命令同期実行有効命令のライト命令と命令同期実行無効命令のリード命令により、実施の形態１から３に記載の動作で、かつ、自スレッドの命令発行数を１にすることができるため、他スレッドの命令発行に制約を受けなくなる。
【００７６】
（実施の形態５）
しかしながら、命令同期モードを記憶する部を持っているが、割込みを受け付けた場合は、割込み処理に必要な時間の方が長いため、この同期実行モードを解除する仕組みがある方が、不要な命令同期実行モードの期間を削減することができる。これにより、他スレッドへの性能改善だけでなく、自スレッドに対して、ハードウェアアクセラレータへのウェイト期間を割込み処理時間で隠蔽することができる。
【００７７】
本実施の形態では、実施の形態３の図１７の改善回路に対応する図１９を用いて説明する。
【００７８】
図１９は、実施の形態５における命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。命令発行部１１２は、スレッド毎に発行対象となる最大命令数分（本実施の形態では、スレッド毎に３命令発行可能、同時発行可能な命令は２スレッド命令グループ、同時発行可能な命令は４命令として説明を行う）を格納する命令バッファ８５０があり、プログラムカウンタ順に、第１命令コード８５１、第２命令コード８５２、第３命令コード８５３、および、それらのバッファに有効な命令が格納されているかどうかを示す、第１有効ビット８５４、第２有効ビット８５５、第３有効ビット８５６が格納されている。これらの情報を入力とし、命令同期実行検出部は、第１命令コード８５１のビット３１からビット２４の出力と参照テーブルセレクタ８３３の比較器８２１の出力と第１有効ビット８５４を入力とするＡＮＤゲート８１１と、第２命令コード８５２のビット３１からビット２４の出力と参照テーブルセレクタ８３３の比較器８２２の出力と第２有効ビット８５５を入力とするＡＮＤゲート８１２と、第３命令コード８５３のビット３１からビット２４の出力と参照テーブルセレク８３３の比較器８２３の出力と第３有効ビット８５６を入力とするＡＮＤゲート８１３と、ＡＮＤゲート８１１とＡＮＤゲート８１２とＡＮＤゲート８１３と、さらに、リセット付きフリップフロップ８３５の出力を入力とするＯＲゲート８１４から構成され、ＯＲゲート８１４の出力命令同期実行が必要な命令が含まれていることを示す命令同期実行検出信号８９０が生成される。またこの出力は、リセット付きフリップフロップ８３５の出力とＥＸＯＲゲート８３４に入力され、フリップフロップ８３５のデータ入力に接続されている。さらに、フリップフロップ８３５のリセット端子には、割込み受理信号の反転信号とリセット信号を入力とするＡＮＤゲート８３７から構成されている。これにより、命令同期実行検出部によって検出された命令同期実行検出有効状態を保持し、さらに、命令同期実行部によって検出された命令同期実行検出無効要求、もしくは、割込み受理時に、この有効状態をクリアすることができる。さらに、このフリップフロップの出力は、有効参照テーブル８３１と無効参照テーブル８３２のセレクタ８３３のセレクト信号としても使用される。さらに、命令同期実行検出信号より最終的に命令バッファに格納されている命令が発行可能かどうかを示すために、第１有効ビット８５４をそのまま出力とする第１命令コード有効ビット８９１と、第２有効ビット８５５とＡＮＤゲート８１１の出力の反転を入力とするＡＮＤゲート８８１の出力とする第２命令コード有効ビット８９２と、第３有効ビット８５６とＡＮＤゲート８８１の出力とＡＮＤゲート８１２の出力の反転を入力とするＡＮＤゲート８８２の出力とする第３命令コード有効ビット８９３が生成される。これにより、命令同期実行検出部の出力の命令同期実行検出信号８９０により、命令グループに同期実行を行う命令が含まれていることを示し、第１命令コード有効ビット８９１、第２命令コード有効ビット８９２、第３命令コード有効ビット８９３により、スレッド内の命令発行可能なコードが識別できる。なお、図１９の命令同期実行検出部８００は、スレッド内の制御信号のみを示している。本実施の形態では、３スレッド同時実行可能なプロセッサを想定しているため、これらの資源はスレッド毎に必要になる。ただし、この構成はＳＭＴ実行可能なプロセッサの構成という観点から自明であるため以降の説明では省略することとする。
【００７９】
（実施の形態６）
しかしながら、実施の形態１から５に記載の命令発行停止部は、発行停止するサイクル数が固定になっている。実際は、プロセッサはさまざまな動作周波数でＬＳＩ化されることがあるため、実時間の期間保障としては、プログラマブルな構成になっている必要がある。そこで、実施の形態１の図５の改善回路に対応する図２０を用いて説明する。
【００８０】
図２０は、実施の形態６における１スレッドに対応する命令発行停止部の構成を示すブロック図である。命令発行停止部１２２は、命令同期実行検出部１２１より出力される命令同期実行検出信号５９０より得られる命令発行停止要求信号１１１０と命令発行部２１２および演算実行部２３０より得られるパイプラインハザードに関係するパイプラインハザード状態信号１１３０を入力とする。命令発行停止部は、命令発行停止要求信号１１１０と、命令伝達部に使用されているクロック信号１１２１を入力とするフリップフロップ１１２０と、フリップフロップ１１２０の出力を入力とする命令発行停止期間を示す信号を生成するステートマシンである同期制御部１１５０と、パイプラインハザード状態信号１１３０を入力とする命令発行停止期間を示す信号を生成するステートマシンであるハザード検出部１１３１とを有し、同期制御部１１５０は、ＩＯバス１１８２に接続された停止期間記憶部１１８１に接続されており、同期制御部１１６０のステートマシンは、停止期間記憶部１１８１に格納されているサイクル数だけ命令発行禁止状態信号をアサートする。命令発行停止部１１００は、同期制御部１１５０とハザード検出部１１３１を入力とするＯＲゲート１１４０から構成される。これにより、ＯＲゲート１１４０の出力の命令発行停止状態信号１１５０が命令発行停止部１１００の出力信号として生成され、命令発行停止状態信号１１５０により、次サイクルに自スレッドの命令が発行できないことを示す信号を生成することができる。なお、図２０の命令発行停止部は、スレッド内の制御信号のみを示している。本実施の形態では、３スレッド同時実行可能なプロセッサを想定しているため、これらの資源はスレッド毎に必要になる。ただし、この構成はＳＭＴ実行可能なプロセッサの構成という観点から自明であるため以降の説明では省略することとする。
【００８１】
（実施の形態７）
しかしながら、リアルタイム保障のための実時間保障においては、プロセッサの動作周波数や、プロセッサとハードウェアアクセラレータの動作周波数比が動的に変更される場合がある。この場合も本発明においては、実時間（何ｎＳｅｃ）という期間の保障をする必要がある。そこで、第２命令発行停止部に対して、プロセッサの動作周波数、もしくは、プロセッサとハードウェアアクセラレータの動作周波数比を取得する動作周波数検出部を有することを特徴とする演算処理装置について、図２１を用いて説明する。
【００８２】
図２１は、実施の形態７における１スレッドに対応する命令発行停止部の構成を示すブロック図である。命令発行停止部１２２は、命令同期実行検出部１２１より出力される命令同期実行検出信号５９０より得られる命令発行停止要求信号１２１０と命令発行部２１２および演算実行部２３０より得られるパイプラインハザードに関係するパイプラインハザード状態信号１２３０を入力とする。命令発行停止部は、命令発行停止要求信号１２１０と、命令伝達部に使用されているクロック信号１２２１を入力とするフリップフロップ１２２０と、フリップフロップ１２２０の出力を入力とする命令発行停止期間を示す信号を生成するステートマシンである同期制御部１２５０と、パイプラインハザード状態信号１２３０を入力とする命令発行停止期間を示す信号を生成するステートマシンであるハザード検出部１２３１とを有し、同期制御部１２５０は、ＩＯバス１２８２に接続された停止期間記憶部１２８１に接続されており、同期制御部１２６０のステートマシンは、停止期間記憶部１２８１に格納されているサイクル数だけ命令発行禁止状態信号をアサートする。さらに、現在動作しているプロセッサの動作周波数、もしくは、プロセッサとハードウェアアクセラレータとの動作周波数比を取得することができる、動作周波数検出部１２８３を有しており、停止期間記憶部１２８１は、動作周波数検出部１２８３に格納されている情報をもとに、停止期間記憶部の設定値をルックアップし、同期制御部１２８０に出力する。命令発行停止部１２００は、同期制御部１２５０とハザード検出部１２３１を入力とするＯＲゲート１２４０から構成される。これにより、ＯＲゲート１２４０の出力の命令発行停止状態信号１２５０が命令発行停止部１２００の出力信号として生成され、命令発行停止状態信号１２５０により、次サイクルに自スレッドの命令が発行できないことを示す信号を生成することができる。なお、図２１の命令発行停止部は、スレッド内の制御信号のみを示している。本実施の形態では、３スレッド同時実行可能なプロセッサを想定しているため、これらの資源はスレッド毎に必要になる。ただし、この構成はＳＭＴ実行可能なプロセッサの構成という観点から自明であるため以降の説明では省略することとする。
【００８３】
（実施の形態８）
しかしながら、ＳＭＴ実行方法は、いくつかの動作モードが想定される。たとえば、３スレッドをＳＭＴ実行可能なプロセッサにおいても、図１１に記載のように３スレッドをラウンドロビンで調停する３スレッド等価モードや、２スレッドを優先スレッドとし、残り１スレッドは出来高で実行するようなケースが発生する。その場合、命令調停されるタイミングは、自スレッドが優先スレッドなのか出来高スレッドなのかによって、変わってくる。そこで、本実施の形態では、自スレッドのスレッドが優先スレッドとして割当てられているか、出来高スレッドとして割当てられているかを検出し、命令同期実行期間を切替える、性能保証動作モード検出部を有している、演算処理装置について、図２２を用いて説明する。
【００８４】
図２２は、実施の形態８における１スレッドに対応する命令発行停止部の構成を示すブロック図である。同図の命令発行停止部は、図２１と比べて、性能保証動作モード検出部が追加されている。
【００８５】
性能保証動作モード検出部１３８５は、他のスレッドよりも優先される動作モードか否かを検出する。例えば、自スレッドが優先スレッドであるか出来高スレッドであるかを検出する。
【００８６】
停止期間記憶部１３８２は、動作モード毎に停止期間を示すサイクル数を記憶する。記憶されるサイクル数については、動作モードが出来高スレッドである場合の停止期間は、優先スレッドである場合の停止期間よりも少ないサイクル数でよい。
【００８７】
前記命令発行停止部は、検出された動作モードに応じたサイクル数の期間だけ前記後続命令の発行を停止する。
【００８８】
これにより、自スレッドが優先スレッドの場合も出来高スレッドの場合も性能を保証することが可能になる。
【００８９】
（実施の形態９）
演算処理装置では、命令同期実行モード中に発行可能な命令数を設定できるようにすることで、不要な命令スロットを埋めるダミー命令を生成することなく命令発行数を制御することができる。
【００９０】
実施の形態１から実施の形態７の図３から図４の改善回路に対応する図２３、図２４を用いて説明する。
【００９１】
図２３は、実施の形態９における命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。図２３の命令同期実行検出部は、図３と比べて、命令同期実行命令発行数記憶部１４８５が追加されている。
【００９２】
命令同期実行命令発行数記憶部１４８５は、命令同期実行モードの間に発行可能な命令数を記憶し、発行される毎にカウントダウンする。これにより、命令同期実行モードの間にｎｏｐ等のダミー命令以外の実効的な命令を発行することができるので、スレッドの処理効率を向上させることができる。
【００９３】
（実施の形態１０）
しかしながら、これらの命令同期検出部を用いて実時間の最短時間を保証する場合もあるが、Ｃ記述のプログラム中で先行して処理を行うことが可能なプログラムもあるため、それらのコードをコンパイラが検出した場合には、命令同期を行う命令の代わりに、それらのコードを入れて同等の処理を行うことをサポートすることができる。そこで、コンパイラ処理の過程で、Ｃソースにプラグマを挿入することで、命令同期実行モード中の自スレッドの先行処理可能な命令を繰り上げてプログラムを挿入することができる。
【００９４】
図２６は、実施の形態１０におけるプログラム変換装置の構成を示すブロック図である。同図のプログラム変換装置は、コンパイラ１、アセンブラ１８、リンカ１９を備える。コンパイラ１は、構文解析部１０、中間コード生成部１１、最適化部１２、コード生成部１３を備える。同図のプログラム変換装置は、各機能ブロックの機能を発揮するソフトウェアをコンピュータ上で実行することにより実現される。
【００９５】
コンパイラ１は、高級言語で記述されたプログラムをアセンブリ言語プログラムに変換する。高級言語プログラムは、例えばＣ言語などである。
【００９６】
構文解析部１０は、Ｃ言語などの高級言語プログラムＰ１の構文を解析する。
中間コード生成部１１は、解析結果に基づいて高級言語プログラムＰ１を中間命令（以下単に命令と呼ぶ。）の記述に置き換えた中間コード命令列Ｐ２を生成する。
【００９７】
最適化部１２は、同期実行のための特定命令を含む中間コード命令列Ｐ２に最適化処理を行なう。そのため、最適化部１２は、プラグマ抽出部１４、命令検出部１５と、特定命令設定部１６と、サイクル数命令数設定部１７とを備える。
【００９８】
プラグマ抽出部１４は、中間コード命令列Ｐ２のプログラムから、プログラム変換装置に対する特定命令に関する指示文（プラグマ）を抽出する。図２７にプログラム例を示す。このプログラムＤ−１は、説明の便宜上、中間コードではなく、一部にアセンブリ言語で記述されたプログラムを含む高級言語プログラムを例示している。同図下から３行目の「＃ｐｒａｇｍａ」で始まる行が、特定命令に関する指示文（プラグマ）である。また、８行目のｗｔ命令と１０行目のｒｄ命令の間には、１行目で定義されている２つのｎｏｐ命令が挿入されている。命令同期実行モードなので、２つのｎｏｐ命令は特定命令として２つの命令グループになる。
【００９９】
命令検出部１５は、前記指示文に従って、中間コード命令列Ｐ２のプログラムから、外部装置に処理要求を書き込む第１の命令（ｗｔ命令）と当該外部装置から応答を読み出す第２の命令（ｒｄ命令）と、特定命令とを検出する。図２７では、ｗｔ命令が第１の命令でかつ特定命令として検出され、ｒｄ命令が第２の命令として検出され、さらに、８行目に挿入される２つのｎｏｐ命令も特定命令として検出される。
【０１００】
命令設定部１６は、第２の命令（ｒｄ命令）以降の命令で、ｎｏｐ命令と同じサイクル数の置き換え可能な命令があれば、第１の命令から第２の命令までの間に、第２の命令以降の命令を繰り上げてｎｏｐ命令と置き換えることにより第２プログラムを生成する。
【０１０１】
サイクル数命令数設定部１７は、図２１、図２２に示した停止期間記憶部に停止サイクル数を設定する命令や、図２３、図２４に示した命令同期実行命令発行数記憶部に命令数を設定する命令等を、中間コード命令列Ｐ２のプログラムに挿入する。
【０１０２】
コード生成部１３は、最適化部１２によって上記命令が追加された中間コード命令列Ｐ２からアセンブリ言語の命令列（ニーモニック形式の命令列）を生成する。
【０１０３】
アセンブラ１８は、アセンブリ言語の命令列を機械語命令列に変換する。
リンカ１９は、複数の機械語命令列をリンクし、実行ファイルを生成する。
【０１０４】
図２６は最適化されていないプログラム例Ａ−６を示し、図１９は最適化されたプログラム例Ａ−５を示す。図２６と図１９とを比べると、図１９のＳＡ’３、ＳＡ’４に示すように、最適化によって２つのｎｏｐ命令が、ｓｅｔｌｏ命令とｓｅｔｈｉ命令に置き換えられている。これにより、図１９のプログラムの処理効率を向上させることができる。
【０１０５】
なお、第４の実施形態におけるプログラム変換装置は、コンパイラ内で中間コード命令列Ｐ２に対して上記の命令を挿入しているが、この代わりに、（Ａ）高級言語プログラムＰ１に対して上記の命令に対応するプログラム文（関数など）を挿入する構成としてもよいし、（Ｂ）アセンブリ言語命令列に対して、上記の命令に対応するニーモニック命令を挿入するようにしてもよいし、または（Ｃ）機械語命令列に対して、上記の命令に対応する機械語命令を挿入するようにしてもよい。
【０１０６】
なお、上記各実施の形態において、ＳＭＴ実行可能なプロセッサについて説明したが、ＶＬＩＷプロセッサに適用してもよい。
【産業上の利用可能性】
【０１０７】
本発明の命令同期実行検出部、命令発行停止部、および、命令同期実行命令発行数制御部は、マルチスレッド化されたプロセッサシステムにおける命令実行サイクルの同期手法に利用して有効であり、基本的な制御構造を変更することなく、命令発行部の制御に論理和を取る形で細粒度の期間（サイクル単位）で命令実行サイクルを保障することができる。
【図面の簡単な説明】
【０１０８】
【図１】実施の形態１に係る演算処理装置の構成を示す機能ブロック図である。
【図２】命令コードのビット構成例を示す図である。
【図３】図１の命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。
【図４】図１に記載のレジスタグループの内部構成を示す図である。
【図５】１スレッドに対応する命令発行停止部の構成を示すブロック図である。
【図６】対比説明用の従来技術におけるスレッドＡのプログラム例（プログラムＡ−１）を示す図である。
【図７】本実施の形態におけるスレッドＡのプログラム例（プログラムＡ−２）を示す図である。
【図８】スレッドＡと共に実行されるプログラム例（プログラムＢ−１）を示す図である。
【図９】スレッドＡと共に実行されるプログラム例（プログラムＣ−１）を示す図である。
【図１０】プログラムＡ−１、Ｂ−１、Ｃ−１をＳＭＴ実行した場合の動作説明図である。
【図１１】プログラムＡ−２、Ｂ−１、Ｃ−１をＳＭＴ実行した場合の動作説明図である。
【図１２】プロセッサの変形例の構成を示すブロック図である。
【図１３】実施の形態２における命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。
【図１４】命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。
【図１５】スレッドＡのプログラム例（プログラムＡ−３）を示す図である。
【図１６】実施の形態３におけるスレッドＡのプログラム例（プログラムＡ−４）を示す図である。
【図１７】実施の形態４における命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。
【図１８】本実施の形態におけるスレッドＡのプログラム例（プログラムＡ−５）を示す図である。
【図１９】実施の形態５における命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。
【図２０】実施の形態６における１スレッドに対応する命令発行停止部の構成を示すブロック図である。
【図２１】実施の形態７における１スレッドに対応する命令発行停止部の構成を示すブロック図である。
【図２２】実施の形態８における１スレッドに対応する命令発行停止部の構成を示すブロック図である。
【図２３】実施の形態９における命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。
【図２４】命令同期実行検出部の内部構成のうち１スレッドに対応する構成を示すブロック図である。
【図２５】スレッドＡのプログラム例（プログラムＡ−６）を示す図である。
【図２６】実施の形態１０におけるプログラム変換装置の構成を示すブロック図である。
【図２７】スレッドＡのソースプログラム例（プログラムＤ−１）を示す図である。
【符号の説明】
【０１０９】
１００  プロセッサ
１１２  命令発行部
１２１  命令同期実行検出部
１２２  命令発行停止部
７３１  有効参照テーブル
７３２  無効参照テーブル
９１０  プロセッサ状態レジスタ
１０６０  同期制御部
１１８１  停止期間記憶部
１２８３  動作周波数検出部
１３８５  性能保証動作モード検出部
１４８５  命令同期実行命令発行数記憶部
【図１】
2009110209.tif 000003
【図２】
2009110209.tif 000004
【図３】
2009110209.tif 000005
【図４】
2009110209.tif 000006
【図５】
2009110209.tif 000007
【図６】
2009110209.tif 000008
【図７】
2009110209.tif 000009
【図８】
2009110209.tif 000010
【図９】
2009110209.tif 000011
【図１０】
2009110209.tif 000012
【図１１】
2009110209.tif 000013
【図１２】
2009110209.tif 000014
【図１３】
2009110209.tif 000015
【図１４】
2009110209.tif 000016
【図１５】
2009110209.tif 000017
【図１６】
2009110209.tif 000018
【図１７】
2009110209.tif 000019
【図１８】
2009110209.tif 000020
【図１９】
2009110209.tif 000021
【図２０】
2009110209.tif 000022
【図２１】
2009110209.tif 000023
【図２２】
2009110209.tif 000024
【図２３】
2009110209.tif 000025
【図２４】
2009110209.tif 000026
【図２５】
2009110209.tif 000027
【図２６】
2009110209.tif 000028
【図２７】
2009110209.tif 000029