(57)【特許請求の範囲】
【請求項１】
それぞれが独立した命令流を生成する複数のハードウェアスレッドと、
前記複数のハードウェアスレッドのいずれか１つが生成した前記命令流に属する演算命令を実行する実行ユニットと、
複数のパーティションに対応して設けられ、前記ハードウェアスレッドと前記パーティションとの対応関係を定義する複数の第１の設定レジスタを含み、前記パーティション間の実行時間の割合を規定するパーティションスケジュールと、前記パーティションのそれぞれに割り当てられた前記実行時間内の前記ハードウェアスレッドの実行時間の割合を規定するスレッドスケジュールと、に基づきスレッド選択信号を生成するスケジューラと、を有し、
前記スケジューラは、
前記実行ユニットにおいて実行された前記演算命令が、いずれか１つの前記パーティションに割り当てられた前記実行時間を占有する第１の占有開始命令であった場合に前記実行ユニットが出力する第１の占有制御信号に応じて、前記第１の占有制御信号により示される前記パーティションに割り当てられた前記実行時間中に選択する前記ハードウェアスレッドを前記スレッドスケジュールによらず前記第１の占有制御信号により示される前記ハードウェアスレッドを指定する前記スレッド選択信号を出力する半導体装置。
【請求項２】
前記スケジューラは、それぞれが前記複数のパーティションのいずれか１つに対応づけられ、対応する前記パーティションに属する前記ハードウェアスレッドを識別するハードウェアスレッド番号を含む前記スレッド選択信号を出力する複数のスレッドスケジューラを有する請求項１に記載の半導体装置。
【請求項３】
前記複数のスレッドスケジューラは、それぞれ、
前記複数の第１の設定レジスタの１つであって、自スレッドスケジューラが対応する前記パーティションに割り当てられた前記ハードウェアスレッドの前記ハードウェアスレッド番号が格納され、前記スレッドスケジュールを規定する前記第１の設定レジスタと、
前記スレッドスケジュールに基づき、前記第１の設定レジスタに格納された前記ハードウェアスレッド番号のいずれか１つを選択する第１のセレクタと、
前記第１の占有制御信号が自スレッドスケジューラに対応する前記パーティションを示す場合に有効状態を示す第１の占有状態フラグを格納する第１の制御レジスタと、
前記第１の占有制御信号により示される前記ハードウェアスレッドを識別する第１の占有ハードウェアスレッド番号を格納する第２の制御レジスタと、
前記第１の占有状態フラグが無効状態である場合に前記第１のセレクタが選択した前記ハードウェアスレッド番号を前記スレッド選択信号として出力し、前記第１の占有状態フラグが有効状態である場合に前記第２の制御レジスタに格納された前記第１の占有ハードウェアスレッド番号を前記スレッド選択信号として出力する第２のセレクタと、を有する請求項２に記載の半導体装置。
【請求項４】
前記複数のスレッドスケジューラは、
前記実行ユニットにおいて実行された前記演算命令が、いずれか１つの前記パーティションに割り当てられた前記実行時間の占有状態を解除する第１の占有解除命令であった場合に前記実行ユニットが出力する第２の占有制御信号に応じて、前記スレッドスケジュールに基づき決定される前記ハードウェアスレッド番号を前記スレッド選択信号として出力する請求項２又は３に記載の半導体装置。
【請求項５】
前記スケジューラは、
前記実行ユニットが実行した前記演算命令が、１つの前記ハードウェアスレッドが前記実行ユニットの実行時間の全てを占有する第２の占有開始命令であった場合に前記実行ユニットが出力する第３の占有制御信号に応じて、前記スレッドスケジュール及び前記パーティションスケジュールによらず前記第３の占有制御信号により示される前記ハードウェアスレッドに対応する第２の占有ハードウェアスレッド番号を含む前記スレッド選択信号を出力する請求項２乃至４のいずれか１項に記載の半導体装置。
【請求項６】
前記スケジューラは、
後続の処理サイクルにおいて前記演算命令を生成する前記パーティションを選択するパーティションスケジューラを有し、
前記パーティションスケジューラは、
前記パーティションスケジュールに基づき後続の処理サイクルにおいて前記演算命令を生成する前記パーティションに対応したパーティション番号を出力する第３のセレクタと、
前記パーティション番号に対応する前記スレッドスケジューラが出力する前記スレッド選択信号のいずれかを選択する第４のセレクタと、
前記第３の占有制御信号に応じて有効状態となる第２の占有状態フラグを格納する第３の制御レジスタと、
前記第３の占有制御信号により示される前記ハードウェアスレッドを識別する第２の占有ハードウェアスレッド番号を格納する第４の制御レジスタと、
前記第２の占有状態フラグが無効状態である場合に前記第４のセレクタが選択した前記スレッド選択信号を出力し、前記第２の占有状態フラグが有効状態である場合に前記第４の制御レジスタに格納された前記第２の占有ハードウェアスレッド番号を前記スレッド選択信号として出力する第５のセレクタと、を有する請求項５に記載の半導体装置。
【請求項７】
前記パーティションスケジューラは、
前記実行ユニットにおいて実行された前記演算命令が、１つの前記ハードウェアスレッドが前記実行ユニットの前記実行時間の全てを占有する状態を解除する第２の占有解除命令であった場合に前記実行ユニットが出力する第４の占有制御信号に応じて、前記スレッドスケジュール及び前記パーティションスケジュールに基づき決定される前記スレッド選択信号を出力する請求項６に記載の半導体装置。
【請求項８】
前記パーティションと前記ハードウェアスレッドとの対応関係を示すスレッド割り当てテーブルを有する請求項１乃至７のいずれか１項に記載の半導体装置。
【請求項９】
半導体装置は、初期設定処理時に、不揮発性記憶装置から前記パーティションと前記ハードウェアスレッドとの対応関係を示す設定値を読み出して前記スレッド割り当てテーブルに格納すると共に、前記スレッド割り当てテーブルに基づき前記第１の設定レジスタに前記スレッドスケジュールの設定を書き込む請求項８に記載の半導体装置。
【請求項１０】
前記スレッド選択信号に応じて前記複数のハードウェアスレッドが生成する演算命令の１つを選択するディスパッチユニットを有し、
前記スレッド選択信号は、後続の処理サイクルにおいて前記演算命令を発行する前記ハードウェアスレッドに対応するハードウェアスレッド番号と前記演算命令を発行する前記ハードウェアスレッドが属する前記パーティションに対応するパーティション番号と、を含み、
前記ディスパッチユニットは、
前記スレッド割り当てテーブルを参照して、前記スレッド選択信号の前記パーティション番号と前記ハードウェアスレッド番号との組み合わせが前記スレッド割り当てテーブルにおいて規定された組み合わせと一致するか否かを判定し、当該判定結果が不一致を示す場合、前記実行ユニットに対する前記演算命令の発行を停止する請求項８又は９に記載の半導体装置。
【請求項１１】
半導体装置は、パーティション割り当て部を備え、
前記スレッド割り当てテーブルは、前記パーティションに属する前記ハードウェアスレッドを規定するパーティション設定レジスタを有し、前記パーティション設定レジスタには、前記パーティションに属する前記ハードウェアスレッドの下限値を示すベーススレッドＩＤが格納され、
前記パーティション割り当て部は、第１のパーティションの前記ベーススレッドＩＤと前記第１のパーティションと論理的に隣接する第２のパーティションの前記ベーススレッドＩＤとに基づき前記第１のパーティションに属する前記ハードウェアスレッドの範囲を認識する請求項８乃至１０のいずれか１項に記載の半導体装置。
【請求項１２】
それぞれが独立した命令流を生成する複数のハードウェアスレッドをそれぞれ論理的に定義される複数のパーティションのいずれかに割り当てて実行する半導体装置であって、
前記複数のハードウェアスレッドのうちスレッド選択信号により選択されたハードウェアスレッドが生成した前記命令流に属する演算命令を実行する実行ユニットと、
前記複数のパーティションに対応して設けられ、それぞれが、対応する前記パーティション内における前記ハードウェアスレッドの実行時間の割り当てに関する対応関係を定義するスレッドスケジュールが格納される第１の設定レジスタを含み、前記スレッドスケジュールに基づき前記スレッド選択信号を生成するスケジューラと、を有し、
前記スケジューラは、第１の制御レジスタを更に有し、当該第１の制御レジスタが１つの前記パーティションを占有状態とする設定値である場合、前記スレッドスケジュールによらず特定の前記ハードウェアスレッドを指定する前記スレッド選択信号を出力する半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置に関し、特に複数のスレッドを同時に実行するマルチスレッドプロセッサを有する半導体装置に関する。
【背景技術】
【０００２】
近年、プロセッサの処理能力を向上させるためにマルチスレッドプロセッサが提案されている。マルチスレッドプロセッサは、それぞれが独立した命令流を生成するスレッドを有する。そして、マルチスレッドプロセッサは、パイプライン処理により命令を処理する演算回路に対していずれのスレッドにより生成された命令流を処理させるかを切り替えながら演算処理を実行する。このとき、マルチスレッドプロセッサは、１つのスレッドにより生成された命令をパイプライン中の１つの実行ステージで実行しながら、他の実行ステージにおいて他のスレッドにより生成された命令を処理することができる。つまり、マルチスレッドプロセッサの演算回路では、互いに独立関係にある命令がそれぞれ異なる実行ステージで実行されることになる。これにより、マルチスレッドプロセッサは、それぞれの命令流を円滑に処理しながら、パイプラインの実行ステージが何も処理しない時間を削減し、プロセッサの処理能力を向上させる。
【０００３】
また、このようなマルチスレッドプロセッサでは、実行される複数のスレッドの一部を停止して所定のスレッドに対する処理能力を一時的に高める処理が行われる。このように、実行するスレッドの数を動的に切り替える技術が特許文献１に開示されている。
【０００４】
また、単一の物理リソース（ハードウェア資源）を複数のリソースに見せかける仮想化技術がある。この仮想化技術を用いることで、例えば、１つのＣＰＵ上で複数の仮想マシン（ＶＭ：Virtual Machine）を動作させることができ、これにより各々の仮想マシン上で異なるオペレーティングシステム（ＯＳ：Operating System）を動作させることができる。複数の仮想マシンを動作させることを、別な表現で、物理的なＣＰＵやメモリを仮想化し論理的な区画（パーティション）を生成する、と表すことがあるが、本明細書中では、仮想マシンと同一な意味合いとして、パーティションという表現を用いることとする。
【０００５】
特許文献１は、論理的にパーティション化されたコンピュータにおけるマルチスレッドプロセッサを制御する装置について開示するものである。論理的にパーティション化されたコンピュータは、複数のパーティションと、複数のパーティションを制御するパーティション・マネージャを含む。また、特許文献１に記載のマルチスレッドプロセッサは、複数のハードウェアスレッドのうちの第１ハードウェアスレッドが、複数のパーティションのうちの第１パーティションにあるロジカル・プロセッサに割り当てられる。さらに、特許文献１に記載の装置は、マルチスレッドプロセッサによって実行される複数のハードウェアスレッドのうちの第１ハードウェアスレッドを選択的に活動化及び非活動化するように構成され、かつ、一旦第１ハードウェアスレッドが非活動化された場合に当該第１ハードウェアスレッドが活動化され得る方法を制御するように構成される制御回路を有する。そして、特許文献１に記載の装置のパーティション・マネージャは、第１パーティションにおいてロジカル・プロセッサをオフラインとみなし、それによって割り込みの表明に応答した第１ハードウェアスレッドの再活動化を禁止すると共にハードウェアスレッドを非活動化するよう制御回路を指図する。
【０００６】
これにより、特許文献１に記載の装置では、複数のハードウェアスレッドのうち第１ハードウェアスレッドを非活動化させ、他のハードウェアスレッドに関する処理能力を向上させる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−３２６７４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１に記載の技術では、パーティション・マネージャを介在させなければ第１ハードウェアスレッドを非活動化させることができない。このように、ハードウェアスレッドの一部の活動を停止させるために行われる処理はプロセッサの処理におけるオーバーヘッドとなる。そのため、特許文献１に記載の技術では、このオーバーヘッドによりプロセッサの処理能力が損なわれる問題がある。
【課題を解決するための手段】
【０００９】
本発明にかかる半導体装置の一態様は、それぞれが独立した命令流を生成する複数のハードウェアスレッドと、前記複数のハードウェアスレッドのいずれか１つが生成した前記命令流に属する演算命令を実行する実行ユニットと、複数のパーティションに対応して設けられ、前記ハードウェアスレッドと前記パーティションとの対応関係を定義する複数の第１の設定レジスタを含み、前記パーティション間の実行時間の割合を規定するパーティションスケジュールと、前記パーティションのそれぞれに割り当てられた前記実行時間内の前記ハードウェアスレッドの実行時間の割合を規定するスレッドスケジュールと、に基づき前記スレッド選択信号を生成するスケジューラと、を有し、前記スケジューラは、前記実行ユニットにおいて実行された前記演算命令が、いずれか１つの前記パーティションに割り当てられた前記実行時間を占有する第１の占有開始命令であった場合に前記実行ユニットが出力する第１の占有制御信号に応じて、前記第１の占有制御信号により示される前記パーティションに割り当てられた前記実行時間中に選択する前記ハードウェアスレッドを前記スレッドスケジュールによらず前記第１の占有制御信号により示される前記ハードウェアスレッドを指定する前記スレッド選択信号を出力する。
【００１０】
また、本発明にかかる半導体装置の別の態様は、それぞれが独立した命令流を生成する複数のハードウェアスレッドをそれぞれ論理的に定義される複数のパーティションのいずれかに割り当てて実行する半導体装置であって、前記複数のハードウェアスレッドのうちスレッド選択信号により選択されたハードウェアスレッドが生成した前記命令流に属する演算命令を実行する実行ユニットと、前記複数のパーティションに対応して設けられ、それぞれが、対応する前記パーティション内における前記ハードウェアスレッドの実行時間の割り当てに関する対応関係を定義するスレッドスケジュールが格納される第１の設定レジスタを含み、前記スレッドスケジュールに基づき前記スレッド選択信号を生成するスケジューラと、を有し、前記スケジューラは、第１の制御レジスタを更に有し、当該第１の制御レジスタが１つの前記パーティションを占有状態とする前記設定値である場合、前記スレッドスケジュールによらず特定の前記ハードウェアスレッドを指定する前記スレッド選択信号を出力する。
【００１１】
本発明にかかる半導体装置では、スケジューラが実行ユニットにおいて実行された第１の占有開始命令に応じて１つのパーティションが選択される期間に固定されたハードウェアスレッドを指定するスレッド選択信号を出力する。これにより、本発明の半導体装置は、ＯＳやパーティション・マネージャ等の上位システムを介在させることなく、パーティション毎に非占有状態から占有状態への切り替えを行うことができる。
【発明の効果】
【００１２】
本発明にかかる半導体装置によれば、パーティション毎の状態を非占有状態から占有状態に切り替える際のオーバーヘッドをなくし、処理能力を向上させることができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１にかかる半導体装置のブロック図である。
【図２】実施の形態１にかかるスレッド割り当てテーブルを構成するレジスタの構成例を示す図である。
【図３】図２で示したレジスタのフィールドの定義を示す表である。
【図４】実施の形態１にかかる半導体装置のディスパッチユニットにおける各フィールドの意味を説明する図である。
【図５】図１で示したパーティションを定義するためのスレッド割り当てテーブルの例を示す図である。
【図６】実施の形態１にかかるスケジューラのブロック図である。
【図７】実施の形態１にかかる半導体装置の動作を示すフローチャートである。
【図８】実施の形態１にかかる半導体装置のスレッドスケジュールとパーティションスケジュールの一例を示す図である。
【図９】実施の形態１にかかる半導体装置の通常動作を示すタイミングチャートである。
【図１０】図９に示したタイミングチャートに基づき動作する半導体装置のソフトウェア階層を示す図である。
【図１１】実施の形態１にかかる半導体装置において１つのパーティションを占有するスレッドが存在する期間がある場合の動作を示すタイミングチャートである。
【図１２】図１１に示したタイミングチャートのＨＴ１占有期間における半導体装置のソフトウェア階層を示す図である。
【図１３】実施の形態１にかかる半導体装置においてＣＰＵを占有するスレッドが存在する期間がある場合の動作を示すタイミングチャートである。
【図１４】図１３に示したタイミングチャートのＨＴ１占有期間における半導体装置のソフトウェア階層を示す図である。
【発明を実施するための形態】
【００１４】
実施の形態１
以下、図面を参照して、本発明の実施の形態について説明する。まず、実施の形態１にかかる半導体装置のブロック図を図１に示す。本発明は、半導体装置のうち、特に、半導体装置に搭載されるＣＰＵの処理に関するものである。そのため、図１に示すブロック図では、半導体装置１のＣＰＵ１０を示した。半導体装置１は、図１に示すＣＰＵ１０以外にも、メモリ、タイマ等の他の回路ブロックを有する。そして、半導体装置１では、ＣＰＵ１０と、他の回路ブロックとを半導体装置内のバスを介して接続する。
【００１５】
図１に示すように、ＣＰＵ１０は、命令フェッチ部１１〜１４、ディスパッチユニット１５、実行ユニット１７、レジスタファイル１８、及び、スケジューラ１９を有する。また、図１に示す例では、論理的に定義されるパーティションについても図示した。具体的な一例として、図１では、ハードウェアスレッドＨＴ０とハードウェアスレッドＨＴ１とを第１のパーティション（例えば、パーティションＰＲＴ０）に割り当てられ、ハードウェアスレッドＨＴ２とハードウェアスレッドＨＴ２とを第２のパーティション（例えば、パーティションＰＲＴ１）に割り当てられる。図１では、上記割り当てを明確にするために、命令フェッチ部１１〜１４に対してパーティションの区別を示す囲みを示した。この囲みは、論理的なパーティションの割り当てを示すものであり、命令フェッチ部１１〜１４は、独立したハードウェア構成を有するものである。
【００１６】
命令フェッチ部１１〜１４は、それぞれが独立したプログラムカウンタを有し、独立した命令流を生成する。ＣＰＵ１０は、この命令フェッチ部１１〜１４によりハードウェアスレッドを構成する。図１では、命令フェッチ部１１が生成する命令流に属する演算命令にＯＰＥ０を付し、命令フェッチ部１２が生成する命令流に属する演算命令にＯＰＥ１を付し、命令フェッチ部１３が生成する命令流に属する演算命令にＯＰＥ２を付し、命令フェッチ部１４が生成する命令流に属する演算命令にＯＰＥ３を付した。また、実施の形態１では、命令フェッチ部１１により構成されるハードウェアスレッドを識別するハードウェアスレッド番号をＨＴ０とし、命令フェッチ部１２により構成されるハードウェアスレッドを識別するハードウェアスレッド番号をＨＴ１とし、命令フェッチ部１３により構成されるハードウェアスレッドを識別するハードウェアスレッド番号をＨＴ２とし、命令フェッチ部１４により構成されるハードウェアスレッドを識別するハードウェアスレッド番号をＨＴ３とした。
【００１７】
また、図１では、図示を省略したが、命令フェッチ部１１〜１４は、バスＢＵＳを介して図示しないメモリから命令コードを読み出す。そして、命令フェッチ部１１〜１４は、読み出した命令コードをデコードして演算命令を生成する。
【００１８】
ディスパッチユニット１５は、スレッド割り当てテーブル１６を含む。このスレッド割り当てテーブル１６は、ディスパッチユニット１５の外に配置されていてもよい。例えば、スレッド割り当てテーブル１６は、半導体装置１の内部のメモリ、スケジューラ等に配置することが可能である。
【００１９】
ディスパッチユニット１５は、スレッド選択信号ＴＳＥＬに応じて複数のハードウェアスレッドが生成する演算命令の１つを選択する。より具体的には、ディスパッチユニット１５は、実行ユニット１７が後続の処理サイクルで実行する演算命令を発行するハードウェアスレッドを示すスレッド選択信号ＴＳＥＬに応じて実行ユニット１７に演算命令を与えるハードウェアスレッドを選択する。このスレッド選択信号ＴＳＥＬには、実行ユニット１７が後続の処理サイクルで実行する演算命令を発行するハードウェアスレッド番号と、当該ハードウェアスレッド番号に対応するハードウェアスレッドが属するパーティションに対応するパーティション番号とが含まれる。
【００２０】
ディスパッチユニット１５は、スレッド割り当てテーブル１６を参照して、スレッド選択信号ＴＳＥＬのパーティション番号とハードウェアスレッド番号との組み合わせがスレッド割り当てテーブル１６において規定された組み合わせと一致するか否かを判定する。そして、ディスパッチユニット１５は、判定結果が不一致を示す場合、実行ユニット１７に対する演算命令の発行を停止する。
【００２１】
ディスパッチユニット１５において、スレッド選択信号ＴＳＥＬのパーティション番号とハードウェアスレッド番号との組み合わせの正当性を検証することで、ディスパッチユニット１５は、ハードウェアスレッドのパーティションへの割り当てを実行する。また、この検証を行うことで、スケジューラ１９のレジスタへの書き込みを制限することなくパーティション間の独立性を確保することができる。
【００２２】
スレッド割り当てテーブル１６は、パーティションとハードウェアスレッドとの対応関係を示す情報を含むレジスタである。半導体装置１は、初期設定処理時に、不揮発性記憶装置（不図示）からパーティションとハードウェアスレッドとの対応関係を示す設定値を読み出してスレッド割り当てテーブル１６に格納すると共に、スレッド割り当てテーブルに基づきスケジューラ１９に設けられる第１の設定レジスタにスレッドスケジュールの設定を書き込む。このレジスタの詳細については、後述する。
【００２３】
実行ユニット１７は、ハードウェアスレッドＨＴ０〜ＨＴ３のいずれか１つが生成した命令流に属する演算命令を実行する。図１に示す例では、ディスパッチユニット１５が、ハードウェアスレッドＨＴ０〜ＨＴ３のいずれか１つが生成した命令流に属する演算命令を選択して演算命令ＯＰＥを実行ユニット１７に与える。つまり、図１に示す例では、実行ユニット１７は、ディスパッチユニット１５が選択した演算命令ＯＰＥを実行する。そして、実行ユニット１７は、演算命令ＯＰＥに応じてレジスタファイル１８に格納されているデータに対して演算を行う。レジスタファイル１８は、ハードウェアスレッド毎に独立した記憶領域を有する。実行ユニット１７は、演算命令ＯＰＥがロード命令あるいはストア命令等の外部アクセスを要求する命令であった場合、バスＢＵＳを介して図示しないメモリ等の周辺回路にアクセスを行う。
【００２４】
また、実行ユニット１７は、演算命令ＯＰＥが、いずれかのハードウェアスレッドによる実行時間の占有状態を変更する命令であった場合、占有制御信号ＯＣＣを出力する。例えば、演算命令ＯＰＥが、いずれか１つの前記パーティションに割り当てられた前記実行時間を占有する第１の占有開始命令であった場合、実行ユニット１７は、第１の占有制御信号を占有制御信号ＯＣＣとして出力する。この第１の占有制御信号は、実行時間の占有対象となるパーティション番号と実行時間を占有する占有ハードウェアスレッド番号とが含まれる。演算命令ＯＰＥが、ずれか１つのパーティションに割り当てられた前記実行時間の占有状態を解除する第１の占有解除命令であった場合、実行ユニット１７は、第２の占有制御信号を占有制御信号ＯＣＣとして出力する。演算命令ＯＰＥが、１つの前記ハードウェアスレッドが前記実行ユニットの実行時間の全てを占有する第２の占有開始命令であった場合、実行ユニット１７は、第３の占有制御信号を占有制御信号ＯＣＣとして出力する。演算命令ＯＰＥが、１つの前記ハードウェアスレッドが前記実行ユニットの実行時間の全てを占有する状態を解除する第２の占有解除命令であった場合、実行ユニット１７は、第４の占有制御信号を占有制御信号ＯＣＣとして出力する。以下の説明では、第１の占有制御信号から第４の占有制御信号に対してＯＣＣの符号を利用する。
【００２５】
スケジューラ１９は、複数のパーティションに対応して設けられ、ハードウェアスレッドとパーティションとの対応関係を定義する複数の第１の設定レジスタを少なくとも含む。そして、スケジューラ１９は、パーティション間の実行時間の割合を規定するパーティションスケジュールと、パーティションのそれぞれに割り当てられた実行時間内のハードウェアスレッドの実行時間の割合を規定するスレッドスケジュールと、に基づきスレッド選択信号ＴＳＥＬを生成する。また、スケジューラ１９は、占有制御信号ＯＣＣに基づき１つのパーティションに割り当てられた実行時間又は実行ユニット１７の実行時間の全てを１つのハードウェアスレッドにより占有するようにスレッド選択信号ＴＳＥＬを出力する。
【００２６】
より具体的には、スケジューラ１９は、実行ユニットにおいて実行された演算命令ＯＰＥが、いずれか１つのパーティションに割り当てられた実行時間を占有する第１の占有開始命令であった場合に実行ユニット１７が出力する第１の占有制御信号に応じて、第１の占有制御信号により示されるパーティションに割り当てられた実行時間中に選択するハードウェアスレッドをスレッドスケジュールによらず第１の占有制御信号により示されるハードウェアスレッドを指定するスレッド選択信号ＴＳＥＬを出力する。また、スケジューラ１９は、実行ユニット１７において実行された演算命令ＯＰＥが、いずれか１つのパーティションに割り当てられた実行時間の占有状態を解除する第１の占有解除命令であった場合に実行ユニット１７が出力する第２の占有制御信号に応じて、スレッドスケジュールに基づき決定されるハードウェアスレッドを指定するスレッド選択信号ＴＳＥＬを出力する。
【００２７】
スケジューラ１９は、実行ユニット１７が実行した演算命令ＯＰＥが、１つのハードウェアスレッドが実行ユニット１７の実行時間の全てを占有する第２の占有開始命令であった場合に実行ユニット１７が出力する第３の占有制御信号に応じて、スレッドスケジュール及びパーティションスケジュールによらず第３の占有制御信号により示されるハードウェアスレッドに対応する第２の占有ハードウェアスレッド番号を含むスレッド選択信号ＴＳＥＬを出力する。また、スケジューラ１９は、実行ユニット１７において実行された演算命令ＯＰＥが、１つのハードウェアスレッドが実行ユニット１７の実行時間の全てを占有する状態を解除する第２の占有解除命令であった場合に実行ユニットが出力する第４の占有制御信号に応じて、スレッドスケジュール及びパーティションスケジュールに基づき決定されるスレッド選択信号ＴＳＥＬを出力する。
【００２８】
続いて、スレッド割り当てテーブル１６の詳細について説明する。そこで、図２にスレッド割り当てテーブルを構成するレジスタの構成例を示す。図２に示すように、スレッド割り当てテーブル１６は、パーティションに属するハードウェアスレッドを規定するパーティション設定レジスタＶＭＰＲＴｎを有する。図２に示すパーティション設定レジスタＶＭＰＲＴｎは、３２ビットのデータ長を有する。また、ｎは、パーティション設定レジスタの番号を示す値である。なお、パーティション設定レジスタＶＭＰＲＴｎの個数は、実施の形態１にかかる半導体装置１で定義するパーティションの数により決まる。例えば、図２に示したパーティション設定レジスタを用いた場合、１つのレジスタにより最大で４つのフィールドを設定でき、また設定に要すするフィールド数は、パーティション数に１を加えた数であるため、パーティション数が８個である場合、パーティション設定レジスタは３つ必要になる。
【００２９】
このパーティション設定レジスタＶＭＰＲＴｎは、複数のフィールドに分割される。そして、フィールド毎にどのような値を格納するかが仕様により決定されている。そこで、パーティション設定レジスタのフィールドの定義を示す表を図３に示す。図３に示すように、実施の形態１にかかるパーティション設定レジスタＶＭＰＲＴｎは、３１ビット目、２３ビット目、１５ビット目、７ビット目のフィールドについては、予約領域として０が設定される。また、予約領域として設定されるフィールドについては、読み出し専用の属性が設定される。実施の形態１にかかるパーティション設定レジスタＶＭＰＲＴｎは、３０ビット目から２４ビット目のフィールド、２２ビット目から１６ビット目のフィールド、１４ビット目から８ビット目のフィールド、６ビット目から０ビット目のフィールドの４つフィールドにベーススレッドＩＤを格納する領域が設定される。このベーススレッドＩＤは、パーティションに割り当てられるハードウェアスレッドＨＴｍ（ｍはハードウェアスレッドの番号を示す値）の下限値を示すものである。また、ベーススレッドＩＤが格納するフィールドには書き込み許可属性及び読み出し許可属性が与えられる。
【００３０】
また、実施の形態１にかかる半導体装置１のディスパッチユニット１５における各フィールドの意味を説明する図を図４に示す。図４に示すように、ディスパッチユニット１５は、第１のパーティションのベーススレッドＩＤと第１のパーティションと論理的に隣接する第２のパーティションのベーススレッドＩＤとに基づき第１のパーティションに属するハードウェアスレッドの範囲を認識する。より具体的には、ディスパッチユニット１５は、パーティションＰＲＴ０に割り当てられたハードウェアスレッドの下限値を６ビット目から０ビット目のフィールドに格納されたベーススレッドＩＤにより認識し、パーティションＰＲＴ０に割り当てられたハードウェアスレッドの上限値を１４ビット目から８ビット目のフィールドに格納されたベーススレッドＩＤから１を引いた値により認識する。
【００３１】
続いて、図５に図１で示したパーティションを定義するためのスレッド割り当てテーブルの例を示す。図５に示すように、図１で示したパーティションを設定するためには、パーティション設定レジスタＶＭＰＲＴ０の６ビット目から０ビット目のフィールドにベーススレッドＩＤとしてＨＴ０を格納し、１４ビット目から８ビット目のフィールドにベーススレッドＩＤとしてＨＴ２を格納し、２２ビット目から１６ビット目のフィールド及び３０ビット目から２４ビット目のフィールドに初期値（例えば、０）を格納する。このような設定とすることで、ディスパッチユニット１５は、ハードウェアスレッドＨＴ０、ＨＴ１がパーティションＰＲＴ０に割り当てられ、ハードウェアスレッドＨＴ２、ＨＴ３がパーティションＰＲＴ１に割り当てられていることを認識する。
【００３２】
スレッド割り当てテーブル１６を、図２から図４において説明したようなレジスタで構成することで、ディスパッチユニット１５において複雑な計算を行わせることなく、柔軟にパーティションの設定を行うことができる。なお、スレッド割り当てテーブル１６へのベーススレッドＩＤの入力は、例えば、ＣＰＵ１０の起動時に行われる初期化動作の一処理として行われる。また、図１ではスレッド割り当てテーブル１６とバスＢＵＳとの接続配線を省略したが、スレッド割り当てテーブル１６への書き込み処理は、実行ユニット１７がバスＢＵＳを介して行うものとする。なお、バスＢＵＳは、半導体装置内部に設けられるものである。
【００３３】
続いて、スケジューラ１９の詳細について説明する。そこで、スケジューラ１９の詳細なブロック図を図６に示す。図６に示すように、スケジューラ１９は、複数のスレッドスケジューラ（例えば、スレッドスケジューラ２１〜２３）及びパーティションスケジューラを有する。なお、図６に示すスケジューラ１９は、３つのパーティションに対応するものであるため、３つのスレッドスケジューラを有するが、スレッドスケジューラの数は仕様上で定められるパーティションの数の最大数に応じて個数が決定されることが好ましい。
【００３４】
スレッドスケジューラ２１〜２３は、それぞれ、複数のパーティションのいずれか１つに対応づけられ、対応するパーティションに属するハードウェアスレッドを識別するハードウェアスレッド番号を含むスレッド選択信号ＴＳＥＬ０〜ＴＳＥＬ２を出力する。スレッドスケジューラ２１〜２３は、同じ回路構成であるため、ここではスレッドスケジューラ２１について詳細に説明を行い、スレッドスケジューラ２２、２３については詳細な説明を省略する。
【００３５】
スレッドスケジューラ２１は、スレッドスケジュールテーブル３０、第１のセレクタ（例えば、セレクタ３４）、パーティション占有状態制御レジスタ３５、及び、第２のセレクタ（例えば、セレクタ３８）を有する。
【００３６】
スレッドスケジュールテーブル３０は、スレッドスケジュールを規定するものである。スレッドスケジュールテーブル３０は、ポインタ３１、上限値レジスタ３２及び第１の設定レジスタ（例えば、スレッドスケジュール設定レジスタ３３）を有する。ポインタ３１は、スレッドスケジューラ２１がハードウェアスレッド番号を含むスレッド選択信号ＴＳＥＬ０を生成する毎に値が１つずつ増加するスロット指定値を生成する。上限値レジスタ３２は、スロット指定値の上限値を有し、スロット指定値が上限値に達したことに応じてポインタ３１をリセットする。スレッドスケジュール設定レジスタ３３は、複数の第１の設定レジスタの１つであって、自スレッドスケジューラが対応するパーティションに割り当てられたハードウェアスレッドのハードウェアスレッド番号が格納され、スレッドスケジュールを規定するものである。より具体的には、スレッドスケジュール設定レジスタ３３は、複数のスロット（例えば、スロットＳＬＴ０〜ＳＬＴ３）を有する。この複数のスロットＳＬＴ０〜ＳＬＴ３には、バスＢＵＳを介してハードウェアスレッド番号が与えられる。また、スレッドスケジュール設定レジスタ３３には、スレッドスケジューラ２１が対応するパーティションに対応するパーティション番号がハードウェアスレッド番号と共に格納される。
【００３７】
セレクタ３４は、スレッドスケジュールに基づき、スレッドスケジュール設定レジスタ３３に格納された前記ハードウェアスレッド番号のいずれか１つを選択する。より具体的には、セレクタ３４は、入力端子としてポートＰ０〜Ｐ３を有する。ポートＰ０〜Ｐ３には、スレッドスケジュール設定レジスタ３３のスロットＳＬＴ０〜ＳＬＴ３に対応して設けられる。ポートＰ０〜Ｐ３にはスロットＳＬＴ０〜ＳＬＴ３に格納されるハードウェアスレッド番号が与えられる。また、セレクタ３４には、ポインタ３１から選択するポートを指定するスロット選択信号が与えられる。つまり、セレクタ３４は、スロットＳＬＴ０〜スロットＳＬＴ３に格納されたハードウェアスレッド番号を循環的に順次選択する。
【００３８】
パーティション占有状態制御レジスタ３５は、第１の制御レジスタ（例えば、レジスタ３６）及び第２の制御レジスタ（例えば、レジスタ３７）を有する。レジスタ３６は、第１の占有制御信号ＯＣＣが自スレッドスケジューラに対応するパーティションを示す場合に有効状態を示す第１の占有状態フラグを格納する。レジスタ３６は、実行ユニット１７で実行される演算命令が第１の占有解除命令であった場合に生成される第２の占有制御信号ＯＣＣが入力された場合には、第１の占有状態フラグを無効状態とする。つまり、第１の占有状態フラグは、１つのパーティションを占有状態とするか非占有状態とするかを示す設定値である。レジスタ３７は、第１の占有制御信号ＯＣＣにより示されるハードウェアスレッドを識別する第１の占有ハードウェアスレッド番号を格納する。
【００３９】
セレクタ３８は、占有状態フラグが無効状態（例えば、０）である場合にセレクタ３４が選択したハードウェアスレッド番号をスレッド選択信号ＴＳＥＬ０として出力し、占有状態フラグが有効状態（例えば、１）である場合にレジスタ３７に格納された第１の占有ハードウェアスレッド番号をスレッド選択信号ＴＳＥＬ０として出力する。
【００４０】
パーティションスケジューラ２４は、後続の処理サイクルにおいて演算命令を生成するパーティションを選択する。パーティションスケジューラ２４は、パーティションスケジュールテーブル４０、第３のセレクタ（例えば、セレクタ４４）、第４のセレクタ（例えば、セレクタ４５）、ＣＰＵ占有状態制御レジスタ４６、及び、第５のセレクタ（例えば、セレクタ４９）を有する。
【００４１】
パーティションスケジュールテーブル４０は、パーティションスケジュールを規定するものである。パーティションスケジュールテーブル４０は、ポインタ４１、上限値レジスタ４２及び第２の設定レジスタ（例えば、パーティションスケジュール設定レジスタ４３）を有する。ポインタ４１は、パーティションスケジューラ２４がハードウェアスレッド番号を含むスレッド選択信号ＴＳＥＬを生成する毎に値が１つずつ増加するスロット指定値を生成する。上限値レジスタ４２は、スロット指定値の上限値を有し、スロット指定値が上限値に達したことに応じてポインタ４１をリセットする。パーティションスケジュール設定レジスタ４３は、スレッドスケジュールを規定するレジスタである。より具体的には、パーティションスケジュール設定レジスタ４３は、複数のスロット（例えば、スロットＳＬＴ１０〜ＳＬＴ１３）を有する。この複数のスロットＳＬＴ１０〜ＳＬＴ１３には、バスＢＵＳを介してパーティション番号が与えられる。
【００４２】
セレクタ４４は、パーティションスケジュールに基づき後続の処理サイクルにおいて前記演算命令を生成する前記パーティションに対応したバーティション番号をパーティション選択信号ＰＳＥＬとして出力する。より具体的には、セレクタ４４は、入力端子としてポートＰ１０〜Ｐ１３を有する。ポートＰ１０〜Ｐ１３には、パーティションスケジュール設定レジスタ４３のスロットＳＬＴ１０〜ＳＬＴ１３に対応して設けられる。ポートＰ１０〜Ｐ１３にはスロットＳＬＴ１０〜ＳＬＴ１３に格納されるパーティション番号が与えられる。また、セレクタ４４には、ポインタ４１から選択するポートを指定するスロット選択信号が与えられる。つまり、セレクタ４４は、スロットＳＬＴ１０〜ＳＬＴ１３に格納されたパーティション番号を循環的に順次選択する。
【００４３】
セレクタ４５は、セレクタ４４が選択したパーティション番号に対応するスレッドスケジューラが出力するスレッド選択信号を選択する。より具体的には、セレクタ４５は、入力端子としてポートＰ２０〜Ｐ２２を有する。ポートＰ２０〜Ｐ２２は、スレッドスケジューラ２１〜２３に対応して設けられる。ポートＰ２０〜Ｐ２２には、スレッドスケジューラ２１〜２３が出力するスレッド選択信号ＴＳＥＬ０〜ＴＳＥＬ２号が与えられる。
【００４４】
ＣＰＵ占有状態制御レジスタ４６は、第３の制御レジスタ（例えば、レジスタ４７）及び第４の制御レジスタ（例えば、レジスタ４８）を有する。レジスタ４７は、第３の占有制御信号に応じて有効状態となる第２の占有状態フラグを格納する。レジスタ４７は、実行ユニット１７で実行される演算命令が第２の占有解除命令であった場合に生成される第４の占有制御信号ＯＣＣが入力された場合には、第２の占有状態フラグを無効状態とする。つまり、第２の占有状態フラグは、ＣＰＵを特定のハードウェアスレッドによる占有状態とするか非占有状態とするかを示す設定値である。レジスタ４８は、第３の占有制御信号ＯＣＣにより示されるハードウェアスレッドを識別する第１の占有ハードウェアスレッド番号を格納する。
【００４５】
セレクタ４９は、第２の占有状態フラグが無効状態（例えば、０）である場合にセレクタ４５が選択したスレッド選択信号ＴＳＥＬを出力し、第２の占有状態フラグが有効状態（例えば、１）である場合にレジスタ４８に格納された第２の占有ハードウェアスレッド番号をスレッド選択信号ＴＳＥＬとして出力する。
【００４６】
ここで、スケジューラ１９の動作について説明する。図７にスケジューラ１９の動作を示すフローチャートを示す。図７に示したフローチャートは１つの処理サイクルのスケジューラ１９の動作を示すものである。図７に示すように、スケジューラ１９は、処理サイクルが開始されると、まず、レジスタ４７に格納された第２の占有状態フラグを参照してＣＰＵ１０が占有状態か否かを判断する（ステップＳ１）。そして、ステップＳ１で、ＣＰＵ１０が占有状態であると判断した場合、レジスタ４８に格納された第２の占有ハードウェアスレッド番号をスレッド選択信号ＴＳＥＬとして選択する（ステップＳ２）。
【００４７】
一方、ステップＳ１で、ＣＰＵ１０が非占有状態であると判断した場合、パーティションスケジュールテーブルに従って、次処理サイクルで演算命令を発行するパーティションを選択する（ステップＳ３）。そして、ステップＳ３で選択されたパーティションに対応するスレッドスケジューラのレジスタ３６に格納された第１の占有状態フラグを参照して選択したパーティションが占有状態であるか否かを判断する（ステップＳ４）。
【００４８】
そして、ステップＳ４において選択したパーティションが占有状態であると判断された場合、レジスタ３７に格納された第１の占有ハードウェアスレッド番号をスレッド選択信号ＴＳＥＬとして選択する（ステップＳ５）。一方、ステップＳ４において選択したパーティションが非占有状態であると判断された場合、パーティションスケジュールテーブル４０に従って選択されたハードウェアスレッド番号をスレッド選択信号ＴＳＥＬとして出力する（ステップＳ６）。そして、ステップＳ２、Ｓ５、Ｓ６におけるスレッド選択信号ＴＳＥＬの出力が完了によりスケジューラ１９の一処理サイクルの処理は完了する。
【００４９】
続いて、実施の形態１にかかる半導体装置１の動作について説明する。まず、以下で説明する半導体装置１の動作例におけるパーティションスケジュールと、パーティションＰＲＴ０のスレッドスケジュール、及び、パーティションＰＲＴ１のスレッドスケジュールを図８に示す。図８に示すように、説明する動作例では、パーティションＰＲＴ０の実行時間とパーティションＰＲＴ１の実行時間との割合は、２：１に設定される。パーティションＰＲＴ０においては、ハードウェアスレッドＨＴ０の実行時間とハードウェアスレッドＨＴ１の実行時間との割合は、１：１に設定される。パーティションＰＲＴ１においては、ハードウェアスレッドＨＴ２の実行時間とハードウェアスレッドＨＴ３の実行時間との割合は、１：１に設定される。つまり、この図８に示したスケジュールに基づき動作する半導体装置１では、ハードウェアスレッドＨＴ０〜ＨＴ３の実行時間の割合は、概ね、３３：３３：１７：１７となる。
【００５０】
この図８で示したスケジュールに基づき動作する半導体装置１が通常動作状態（全てのパーティションとＣＰＵが非占有状態で動作する状態）で動作する場合のタイミングチャートを図９に示す。図９に示すように、通常動作では、パーティションＰＲＴ０が２回選択された後にパーティションＰＲＴ１が１回選択されるという３つの処理サイクルが繰り返し行われる。そして、パーティションＰＲＴ０が選択される期間においては、ハードウェアスレッドＨＴ０とハードウェアスレッドＨＴ１が繰り返し選択される。パーティションＰＲＴ１が選択される期間においてはハードウェアスレッドＨＴ２とハードウェアスレッドＨＴ３が繰り返し選択される。また、図９に示す動作例では、全期間おいてパーティションＰＲＴ０、ＰＲＴ１及びＣＰＵの非占有状態が維持される。
【００５１】
ここで、図９に示したタイミングチャートに基づき動作する半導体装置１のソフトウェア階層を示す図を図１０に示す。図１０に示すように、図９に示したタイミングチャートで動作する半導体装置１は、ＣＰＵ１０等のハードウェア上でハイパーバイザプログラムを動作させる。このハイパーバイザプログラムは、ハードウェアの実行時間の全てを利用して実行される。また、ハイパーバイザプログラムの上にパーティションＰＲＴ０、ＰＲＴ１が実行される。パーティションＰＲＴ０、ＰＲＴ１の実行時間の割合は、パーティションスケジュールに従って決定される。また、パーティションＰＲＴ０上でハードウェアスレッドＨＴ０、ＨＴ１が実行される。ハードウェアスレッドＨＴ０、ＨＴ１の実行時間の割合は、パーティションＰＲＴ０に対応したスレッドスケジュールに従って決定される。また、パーティションＰＲＴ１上でハードウェアスレッドＨＴ２、ＨＴ３が実行される。ハードウェアスレッドＨＴ２、ＨＴ３の実行時間の割合は、パーティションＰＲＴ１に対応したスレッドスケジュールに従って決定される。
【００５２】
続いて、図８で示したスケジュールに基づき動作する半導体装置１においてハードウェアスレッドＨＴ１がパーティションＰＲＴ０を占有する期間がある動作がある場合のタイミングチャートを図１１に示す。図１１に示すように、この動作例では、処理サイクルｔ２において選択されるハードウェアスレッドＨＴ１がパーティションＰＲＴ０に割り当てられた実行時間をハードウェアスレッドＨＴ１により占有する第１の占有開始命令を発行する。そして、この第１の占有開始命令に応じて実行ユニット１７は、パーティションＰＲＴ０のハードウェアスレッドＨＴ１を第１の占有ハードウェアスレッド番号とする占有制御信号ＯＣＣ（例えば、第１の占有制御信号ＯＣＣ）を出力する。スケジューラ１９のスレッドスケジューラ２１では、この第１の占有制御信号ＯＣＣに応じて、レジスタ３６の第１の占有状態フラグが有効状態に書き換えられ、レジスタ３７に第１の占有ハードウェアスレッド番号としてハードウェアスレッドＨＴ１が格納される。
【００５３】
そして、このレジスタ３６、３７の値が書き換えられたことに応じて処理サイクルｔ３からパーティションＰＲＴ０がハードウェアスレッドＨＴ１により占有される状態となる。これにより、処理サイクルｔ３以降にパーティションＰＲＴ０が選択される処理サイクルｔ４、ｔ５においては、ハードウェアスレッドＨＴ１が選択される。一方、処理サイクルｔ３以降においてもパーティションＰＲＴ１が選択される期間においてはハードウェアスレッドＨＴ２、ＨＴ３が繰り返し選択される。
【００５４】
そして、処理サイクルｔ７において選択されるハードウェアスレッドＨＴ１が第１の占有解除命令を発行したことに応じて実行ユニット１７は、パーティションＰＲＴ０のハードウェアスレッドＨＴ１による占有状態を解除する占有制御信号ＯＣＣ（例えば、第２の占有制御信号ＯＣＣ）を出力する。スケジューラ１９のスレッドスケジューラ２１では、この第２の占有制御信号ＯＣＣに応じて、レジスタ３６の第１の占有状態フラグが無効状態に書き換えられる。そして、このレジスタ３６の値が書き換えられたことに応じて処理サイクルｔ８からパーティションＰＲＴ０の占有状態が解除される。そのため、処理サイクルｔ８以降は、パーティションＰＲＴ０が選択される期間はハードウェアスレッドＨＴ０、ＨＴ１が繰り返し選択される。
【００５５】
なお、図１１に示した動作例では、パーティションＰＲＴ１とＣＰＵの非占有状態は維持される。つまり、パーティションＰＲＴ１は、パーティションＰＲＴ１が占有状態となった影響を受けずに処理性能（例えば、リアルタイム性）を維持することができる。
【００５６】
ここで、図１１に示したタイミングチャートのＨＴ１占有期間における半導体装置のソフトウェア階層を示す図を図１２に示す。図１２に示すように、図１１に示したＨＴ１占有期間においては、ハードウェアスレッドＨＴ０が非スケジュール状態となり、パーティションＰＲＴ０に割り当てられた実行時間（例えば、ハードウェア資源）を独占する占有状態となる。
【００５７】
続いて、図８で示したスケジュールに基づき動作する半導体装置１においてハードウェアスレッドＨＴ１がＣＰＵ１０を占有する期間がある動作がある場合のタイミングチャートを図１３に示す。図１３に示すように、この動作例では、処理サイクルｔ２において選択されるハードウェアスレッドＨＴ１がＣＰＵ１０の実行時間をハードウェアスレッドＨＴ１により占有する第２の占有開始命令を発行する。そして、この第２の占有開始命令に応じて実行ユニット１７は、ＣＰＵ１０を占有するハードウェアスレッドＨＴ１を第２の占有ハードウェアスレッド番号とする占有制御信号ＯＣＣ（例えば、第３の占有制御信号ＯＣＣ）を出力する。スケジューラ１９のパーティションスケジューラ２４では、この第３の占有制御信号ＯＣＣに応じて、レジスタ４７の第２の占有状態フラグが有効状態に書き換えられ、レジスタ４８に第２の占有ハードウェアスレッド番号としてハードウェアスレッドＨＴ１が格納される。
そして、このレジスタ４７、４８の値が書き換えられたことに応じて処理サイクルｔ３からＣＰＵ１０がハードウェアスレッドＨＴ１により占有される状態となる。そのため、処理サイクルｔ３から第２の占有解除命令が発行されるまでの期間はパーティションＰＲＴ０のみが選択される。また、ＣＰＵが占有されている期間においては、ハードウェアスレッドＨＴ１のみが選択される。
【００５８】
そして、処理サイクルｔ７において選択されるハードウェアスレッドＨＴ１が第２の占有解除命令を発行したことに応じて実行ユニット１７は、ＣＰＵ１０のハードウェアスレッドＨＴ１による占有状態を解除する占有制御信号ＯＣＣ（例えば、第４の占有制御信号ＯＣＣ）を出力する。スケジューラ１９のスレッドスケジューラ２１では、この第４の占有制御信号ＯＣＣに応じて、レジスタ４７の第２の占有状態フラグが無効状態に書き換えられる。そして、このレジスタ４７の値が書き換えられたことに応じて処理サイクルｔ８からＣＰＵ１０の占有状態が解除される。そのため、処理サイクルｔ８以降は、パーティションＰＲＴ０が選択される期間はハードウェアスレッドＨＴ０、ＨＴ１が繰り返し選択され、パーティションＰＲＴ１が選択される期間はハードウェアスレッドＨＴ２、ＨＴ３が繰り返し選択される。なお、図１３に示した動作例では、パーティションＰＲＴ０、ＰＲＴ１の非占有状態は維持される。
【００５９】
ここで、図１３に示したタイミングチャートのＨＴ１占有期間における半導体装置のソフトウェア階層を示す図を図１４に示す。図１４に示すように、図１３に示したＨＴ１占有期間においては、ハードウェアスレッドＨＴ０及びパーティションＰＲＴ１が非スケジュール状態となり、ＣＰＵ等のハードウェア資源をハードウェアスレッドＨＴ０が独占する占有状態となる。
【００６０】
上記説明より、実施の形態１にかかる半導体装置１では、実行ユニット１７において第１の占有開始命令が実行された場合には、実行ユニット１７が１つのパーティションを占有するハードウェアスレッドを指定する第１の占有制御信号ＯＣＣを出力する。また、スケジューラ１９は、実行ユニット１７に対して発行されるハードウェアスレッドを指定するスレッド選択信号ＴＳＥＬを出力するが、第１の占有制御信号ＯＣＣに応じて、１つのパーティションが選択される期間にスレッド選択信号ＴＳＥＬが指定するハードウェアスレッドを固定する。このような動作により、実施の形態１にかかる半導体装置１では、ＯＳ（Operating System）、あるいは、パーティション・マネージャ等の上位システムを介することなくパーティション毎に占有状態と非占有状態とを切り替えることができる。
【００６１】
ここで、スケジューラ１９によるハードウェアスレッドの制御を利用せずに、例えば、ＯＳや特許文献１のパーティション・マネージャ等の上位によりパーティション分割及びハードウェアスレッドの制御を行った場合の課題を説明する。この場合、パーティションにいずれのハードウェアスレッドが割り当てられるかの情報は、上位システムが有する。そのため、１つのパーティションを１つのハードウェアスレッドにより占有させるか、複数のハードウェアスレッドにより共有させるかを切り替えるためには、一度、上位システムに問い合わせを行わなければ、パーティション間の独立性を確保することができない問題が生じる。なお、パーティション毎の占有状態の切り替えを行ない場合、ＣＰＵ１０の実行時間を複数のハードウェアスレッドにより共有するか、占有するかの切り替えしかできず、ハードウェアスレッド毎の実行時間の見積もりが困難になる問題がある。
【００６２】
しかし、実施の形態１にかかる半導体装置１では、上位システムを介することなくパーティション毎に占有状態と非占有状態とを切り替えることができる。これにより、半導体装置１は、パーティションの占有状態と非占有状態との切り替えに関してＣＰＵの実行時間を消費することなく切り替え処理を行うことがでる。また、半導体装置１では、パーティションの占有状態と非占有状態との切り替え処理による処理能力の低下を防止することができる。さらに、半導体装置１では、パーティションの占有状態と非占有状態との切り替えにＣＰＵの実行時間を消費しないため、パーティションを占有するハードウェアスレッドと、実行が停止されるハードウェアスレッドの実行時間の見積もりを容易に行うことが可能になる。
【００６３】
さらに、半導体装置１では、パーティション毎に占有状態と非占有状態とを切り替えることができるため、一方のパーティションの動作を維持しながら、他方のパーティションの状態の切り替えを行うことができる。このように、半導体装置１では、上位システムの処理を介在させることなく、パーティションの独立性を確保できるため、パーティション毎の実行時間の見積もりを容易に行うことができる。また、半導体装置１では、占有状態の切り替え処理の対象となっていないパーティションのリアルタイム性を維持することができる。
【００６４】
また、半導体装置１では、パーティションに割り当てるハードウェアスレッドをスレッド割り当てテーブル１６により設定する。このスレッド割り当てテーブル１６は、図２に示すように設定値が書き換え可能なレジスタにより構成される。そのため、半導体装置１では、ハードウェアの変更を行うことなくパーティションに割り当てるハードウェアスレッドの数を変更することができる。
【００６５】
また、半導体装置１のスレッド割り当てテーブル１６を構成するパーティション設定レジスタＶＭＰＲＴｎには、パーティションに割り当てられるハードウェアスレッドの下限値のみが格納される。また、半導体装置１では、ディスパッチユニット１５がパーティション設定レジスタＶＭＰＲＴｎの複数のフィールドを参照することで、１つのパーティションに割り当てられたハードウェアスレッドの範囲を認識する。このとき、ディスパッチユニット１５は、第１のパーティションに割り当てられるハードウェアスレッドの上限値を第１のパーティションと論理的に隣接する第２のパーティションに割り当てられるハードウェアスレッドの下限値から１を引くことで算出する。つまり、ディスパッチユニット１５は、簡単な回路による簡易な計算のみでパーティションに割り当てられたハードウェアスレッドの範囲を認識することができる。このように、簡単なレジスタの設定及び簡単な計算によりパーティションに割り当てられるハードウェアスレッドの範囲を認識することで、半導体装置１は、ディスパッチユニット１５及びスレッド割り当てテーブル１６の回路面積を小さくすることができる。
【００６６】
また、半導体装置１は、実行ユニット１７において第２の占有開始命令が実行された場合には、実行ユニット１７がＣＰＵ１０の実行時間を占有するハードウェアスレッドを指定する第３の占有制御信号ＯＣＣを出力する。そして、スケジューラ１９は、第３の占有制御信号ＯＣＣに応じて、スレッド選択信号ＴＳＥＬが指定するハードウェアスレッドを１つに固定する。つまり、半導体装置１では、高い処理能力が必要なハードウェアスレッドが存在する場合には、ＣＰＵ１０の全ての処理能力を利用して高速な処理を実現することができる。
【００６７】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上記実施の形態では、スレッドスケジュール及びパーティションスケジュールをスレッドスケジュールテーブル３０及びパーティションスケジュールテーブル４０により設定したが、例えば、演算回路による演算処理によりスレッドスケジュール及びパーティションスケジュールを設定することもできる。
【００６８】
また、図１では、命令フェッチ部の後段にディスパッチユニット１５を設けたが、ディスパッチユニット１５は、命令フェッチ部の前段に設けることもできる。この場合、ディスパッチユニット１５は、命令フェッチ部のフェッチ処理の順序を制御する。
【符号の説明】
【００６９】
１  半導体装置
１０  ＣＰＵ
１１〜１４  命令フェッチ部
１５  ディスパッチユニット
１６  スレッド割り当てテーブル
１７  実行ユニット
１８  レジスタファイル
１９  スケジューラ
２１〜２３  スレッドスケジューラ
２４  パーティションスケジューラ
３０  スレッドスケジュールテーブル
３１、４１  ポインタ
３２、４２  上限値レジスタ
３３  スレッドスケジュール設定レジスタ
３４、３８、４４、４５、４９  セレクタ
３５  パーティション占有状態制御レジスタ
３６、３７、４７、４８  レジスタ
４０  パーティションスケジュールテーブル
４３  パーティションスケジュール設定レジスタ
４６  ＣＰＵ占有状態制御レジスタ
ＶＭＰＲＴｎ、ＶＭＰＲＴ０  パーティション設定レジスタ
【図１】
0005894496.tif 000002
【図２】
0005894496.tif 000003
【図３】
0005894496.tif 000004
【図４】
0005894496.tif 000005
【図５】
0005894496.tif 000006
【図６】
0005894496.tif 000007
【図７】
0005894496.tif 000008
【図８】
0005894496.tif 000009
【図９】
0005894496.tif 000010
【図１０】
0005894496.tif 000011
【図１１】
0005894496.tif 000012
【図１２】
0005894496.tif 000013
【図１３】
0005894496.tif 000014
【図１４】
0005894496.tif 000015