(57)【要約】【課題】複数のプロセッサエレメント（ＰＥ）における実質的な稼働率を向上させるマルチスレッド計算機システムを提供する。【解決手段】本発明のマルチスレッド計算機システムは、複数のＰＥ１０１〜１０３と、各ＰＥのスレッドを切り換える並列プロセッサ制御部２００とを備え、並列プロセッサ制御部２００は、ＰＥ毎に実行すべきスレッドの実行順序を保持する複数の実行順序レジスタと、各ＰＥにより実行中のスレッドの実行時間をカウントトし、カウントされた時間がスレッドの割り当て時間に達したときタイムアウト信号を発生する複数のカウンタ２３０と、前記実行順序レジスタに保持された実行順序および前記タイムアウト信号に基づいて、各プロセッサエレメントで実行すべきスレッドを切り換えるスレッド実行スケジューラ部２１０とを備える。【選択図】図１
2007317171.tif 000002
【特許請求の範囲】
【請求項１】
マルチスレッド計算機システムであって、
複数スレッドを含むプロセスを実行するプロセッサエレメントを複数個含むプロセッサエレメント群と、
各プロセッサエレメントで実行すべきスレッドを切り換える制御手段とを備え、
前記制御手段は、
前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントで実行すべきスレッドの実行順序を保持する複数の実行順序レジスタと、
前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントにより実行中のスレッドの実行時間をカウントし、カウントされた時間がスレッドの割り当て時間に達したときタイムアウト信号を発生する複数のカウンタと、
前記実行順序レジスタに保持された実行順序および前記タイムアウト信号に基づいて、各プロセッサエレメントで実行すべきスレッドを切り換えるスケジュール回路と
を備えることを特徴とするマルチスレッド計算機システム。
【請求項２】
前記実行順序レジスタは、前記複数スレッドの実行を開始する前に対応するプロセッサエレメントによって前記実行順序を書き込まれる
ことを特徴とする請求項１記載のマルチスレッド計算機システム。
【請求項３】
前記制御手段は、さらに、
前記スケジュール回路をディスエーブルするシングルスレッドモード、前記スケジュール回路をイネーブルするマルチスレッドモードの何れかを示すモード情報を保持するモードレジスタを備え、
前記モードレジスタは、プロセッサにより書き込み可能である
ことを特徴とする請求項２記載のマルチスレッド計算機システム。
【請求項４】
前記制御手段は、さらに、
前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントへの割り込み信号に対応する優先実行すべきスレッドを示す優先度情報を保持する複数の優先度レジスタを備え、
スケジュール回路は、さらに、外部から割り込み信号が入力されたとき、前記割り込み信号に対応するスレッドに切り換える
ことを特徴とする請求項３記載のマルチスレッド計算機システム。
【請求項５】
前記各プロセッサエレメントは、実行中のスレッドのコンテキストと、次に実行すべきコンテキストとを保持する２つのコンテキストレジスタ群を備え、
前記スケジュール回路は、さらに、プロセッサエレメントのコンテキストの退避および復帰をするためにコンテキスト転送を行うコンテキスト転送部を備え、
前記スケジュール回路は、スレッド切り換え時に、プロセッサエレメントが使用するコンテキストレジスタ群を切り替え、
前記コンテキスト転送部は、スレッド切り換え後に、コンテキスト転送を行う
ことを特徴とする請求項３記載のマルチスレッド計算機システム。
【請求項６】
前記制御手段は、さらに、各プロセッサエレメントが実行状態であるか停止状態であるかを示す状態レジスタと、
スレッドの並列実行の可否に関する可否情報を保持する複数の可否情報保持部とを備え、
前記スケジュール回路は、さらに、何れかのプロセッサエレメントが実行状態から停止
状態になったとき、前記可否情報に基づいて実行状態のプロセッサエレメントが実行すべきスレッドのうち並列実行可能なスレッドを判別し、判別したスレッドを停止状態のプロセッサに実行させる
ことを特徴とする請求項１記載のマルチスレッド計算機システム。
【請求項７】
前記可否情報は、同一プロセス内の他のスレッドとの並列実行可否を示す第１情報と、他のプロセッサエレメントによる実行可否を示す第２情報とを含み、
前記複数の可否情報保持部のそれぞれは、前記第１情報を保持する第１レジスタと、前記第２情報を保持する第２レジスタとを有する
ことを特徴とする請求項６記載のマルチスレッド計算機システム。
【請求項８】
前記実行順序レジスタ、第１レジスタおよび第２レジスタは、前記複数スレッドの実行開始前に対応するプロセッサエレメントによって実行順序、第１情報および第２情報をそれぞれ設定される
ことを特徴とする請求項７記載のマルチスレッド計算機システム。
【請求項９】
前記制御手段は、さらに、
前記スケジュール回路をディスエーブルするシングルスレッドモード、前記スケジュール回路をイネーブルするマルチスレッドモードの何れかを示すモード情報を保持するモードレジスタを備え、
前記モードレジスタは、プロセッサにより書き込み可能である
ことを特徴とする請求項６、７または８記載のマルチスレッド計算機システム。
【請求項１０】
前記制御手段は、さらに、
前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントへの割り込み信号に対応する優先実行すべきスレッドを示す優先度情報を保持する複数の優先度レジスタを備え、
スケジュール回路は、さらに、外部から割り込み信号が入力されたとき、前記割り込み信号に対応するスレッドに切り換える
ことを特徴とする請求項６から９の何れかに記載のマルチスレッド計算機システム。
【請求項１１】
前記各プロセッサエレメントは、実行中のスレッドのコンテキストと、次に実行すべきコンテキストとを保持する２つのコンテキストレジスタ群を備え、
前記スケジュール回路は、さらに、プロセッサエレメントのコンテキストのメモリへの退避およびメモリからの復帰を行うコンテキスト転送部を備え、
前記スケジュール回路は、スレッド切り換え時に、プロセッサエレメントが使用するコンテキストレジスタ群を切り替え、
前記コンテキスト転送部は、スレッド切り換え後に、プロセッサエレメントが使用していないコンテキストレジスタ群に次に実行すべきスレッドのコンテキストを転送するコンテキスト転送部を備える
ことを特徴とする請求項６から１０の何れかに記載のマルチスレッド計算機システム。
【請求項１２】
前記マルチスレッド計算機システムは、さらに、停止状態のプロセッサエレメントへのクロック信号の供給を抑制するクロック制御手段を備える
ことを特徴とする請求項６から１１の何れかに記載のマルチスレッド計算機システム。
【請求項１３】
前記制御手段は、さらに、プロセッサエレメント毎にクロック供給の抑制可否を示すクロック制御情報を保持するクロック制御レジスタを備え、
前記制御手段は、クロック制御情報に従ってプロセッサエレメント毎に前記クロック制御手段をイネーブルまたはディスエーブルする
ことを特徴とする請求項１２記載のマルチスレッド計算機システム。
【請求項１４】
複数スレッドを含むプロセスを実行する複数のプロセッサエレメントと、各プロセッサエレメントで実行すべきスレッドを切り換える制御部とを備えるマルチスレッド計算機システムにおけるマルチスレッド実行制御方法であって、
前記制御部は、前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントで実行すべきスレッドの実行順序を保持する複数の実行順序レジスタと、前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントにより実行中のスレッドの実行時間をカウントし、カウントされた時間がスレッドの割り当て時間に達したときタイムアウト信号を発生する複数のカウンタと、前記実行順序レジスタに保持された実行順序および前記タイムアウト信号に基づいて、各プロセッサエレメントで実行すべきスレッドを切り換えるスケジュール回路とを有し、
前記マルチスレッド実行制御方法は、
各プロセッサエレメントのシングルスレッドモードにおいて前記実行順序レジスタに前記実行順序を設定するステップと、
各プロセッサエレメントをマルチスレッドモードに設定するステップと、
各プロセッサエレメントのマルチスレッドモードにおいてスレッドを切り換えながら実行するステップと
を有することを特徴とするマルチスレッド実行制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列動作するマルチプロセッサエレメントを備えるマルチスレッド計算機システムに関し、特に、各プロセッサエレメントにおいてプログラムを切り換えマルチスレッド計算機システムおよびマルチスレッド実行制御方法に関する。
【背景技術】
【０００２】
演算処理性能をより高めるために、複数のプロセッサエレメントを備えるマルチプロセッサ構成をとる並列処理システムがある。
【０００３】
並列処理システムにおいて、さらに演算処理性能をより高めるために、一つのプロセスを複数のスレッドと呼ばれる制御の流れ（プログラム）に分割し、複数のスレッドを複数のプロセッサで並列に実行する方法が取られることがある。
【０００４】
マルチプロセッサ構成をとる並列処理システムで、さらにこのように複数のスレッドを並列に実行する従来の方法として、例えば特許文献１に記載された方法がある。
【０００５】
この並列処理システムでは、一つのプロセッサに着目したとき、１つのプロセッサエレメント内において、決められた要因によって複数のスレッドを切り換えながら実行する。この制御により、１つのプロセッサエレメントで複数のスレッドを擬似的に並列実行させている。このとき、各スレッドは各々が１つのプロセッサをそれぞれ独占して使用するように実行されるため、各々のスレッドが個別に仮想的なプロセッサに割り当てられて実行されていると考えることができる。
【０００６】
仮想的なプロセッサのそれぞれは、実際のプロセッサの全機能を持つ必要はなく、スレッドを実行するために必要な情報、すなわちプログラムカウンタ、フラグレジスタ、スタック領域、汎用レジスタなどのスレッド固有の制御情報やデータ情報のみを持てばよい。スレッドを実行するために必要なこれらの情報を「コンテキスト」という。
【０００７】
１つのプロセッサエレメントで現在実行しているスレッドを別のスレッドに切り換えるときには、コンテキストを切り換えなければならない。通常、コンテキストはメモリに格納されているため、コンテキストの切り換えは、現在実行しているスレッドのコンテキストをメモリに書き出し（ここでは「退避」と書く）、次に実行するスレッドのコンテキストをメモリから読み出す（ここでは「復帰」と書く）ことを意味する。
【０００８】
さて、特許文献１に記載された方法（特許文献１の第２図）では、オペレーティングシステムではなく、ハードウェアでスレッドのプリエンプション（優先度の高いスレッドへの切り換え）の受け付けを行うものであるが、さらにプリエンプション受け付け後の切り換え処理についてもオペレーティングシステムを介在しない高速なユーザーレベル割り込みを提供することによって、マルチスレッド処理の効率を向上させている。ただし、本方法ではスレッドを切り換えるたびに、ユーザープロセス内部に存在するスレッドスケジューラをプロセッサエレメントで実行することにより、１つのユーザープロセスを構成するすべてのスレッドのスケジューリングを行っている。
【特許文献１】特開平１１−２８２８１５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら従来技術によれば次の課題がある。すなわち、従来技術の第１の課題は、
スレッドの切り換えを行うたびに、スレッド切り換えのオーバーヘッドが発生することである。なぜなら、プロセッサが、ユーザープロセス内部に存在するスレッドスケジューラを実行することによって、スレッドを切り換えているからである。
【００１０】
また、従来技術の第２の課題は、１つのユーザープロセス内の複数のスレッドを並列に実行できる場合でも、１つのユーザープロセスについて１つのプロセッサエレメントが割り当てられているため、他のプロセッサエレメントが別のユーザープロセス内のスレッドを実行していない状態であっても、そのプロセッサエレメントにスレッドを実行させることができないことである。
【００１１】
このため、並列処理システムの実質的な稼働率を十分に高めることができなくなり、システムのパフォーマンスの低下につながっている。
【００１２】
本発明は、上記課題に鑑み、複数のプロセッサエレメントにおける実質的な稼働率を向上させるマルチスレッド計算機システム、マルチスレッド実行制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するために、本発明のマルチスレッド計算機システムは、複数スレッドを含むプロセスを実行するプロセッサエレメントを複数個含むプロセッサエレメント群と、各プロセッサエレメントで実行すべきスレッドを切り換える制御手段とを備え、前記制御手段は、前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントで実行すべきスレッドの実行順序を保持する複数の実行順序レジスタと、前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントにより実行中のスレッドの実行時間をカウントし、カウントされた時間がスレッドの割り当て時間に達したときタイムアウト信号を発生する複数のカウンタと、前記実行順序レジスタに保持された実行順序および前記タイムアウト信号に基づいて、各プロセッサエレメントで実行すべきスレッドを切り換えるスケジュール回路とを備える。この構成によれば、次に実行すべきスレッドの判定もスレッド切り換えもスケジュール回路によって実行されるので、スレッド切り換えのオーバーヘッドを低減することができ、その結果、マルチスレッド計算機システムの実質的は稼働率を向上させることができる。
【００１４】
ここで、前記実行順序レジスタは、前記複数スレッドの実行を開始前に対応するプロセッサエレメントによって前記実行順序を書き込まれる構成としてもよい。この構成によれば、次に実行すべきスレッドの判定は実行順序レジスタに従ってスケジュール回路が高速に行うことができる。
【００１５】
ここで、前記制御手段は、さらに、前記スケジュール回路をディスエーブルするシングルスレッドモード、前記スケジュール回路をイネーブルするマルチスレッドモードの何れかを示すモード情報を保持するモードレジスタを備え、前記モードレジスタは、プロセッサにより書き込み可能である構成としてもよい。この構成によれば、シングルスレッドモードにおいて実行順序レジスタへの実行順序の設定など初期設定をしさえすれば、マルチスレッドモードに移行後に、スケジュール回路によるスレッド切り換えを高速に行うことができる。
【００１６】
ここで、前記制御手段は、さらに、前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントへの割り込み信号に対応する優先実行すべきスレッドを示す優先度情報を保持する複数の優先度レジスタを備え、スケジュール回路は、さらに、外部から割り込み信号が入力されたとき、前記割り込み信号に対応するスレッドに切り換えるようにしてもよい。この構成によれば、優先度の高い割り込み処理用スレッドを高速に切り換えることができる。
【００１７】
ここで、前記各プロセッサエレメントは、実行中のスレッドのコンテキストと、次に実行すべきコンテキストとを保持する２つのコンテキストレジスタ群を備え、前記スケジュール回路は、さらに、プロセッサエレメントのコンテキストの退避および復帰をするためにコンテキスト転送を行うコンテキスト転送部を備え、前記スケジュール回路は、スレッド切り換え時に、プロセッサエレメントが使用するコンテキストレジスタ群を切り替え、前記コンテキスト転送部は、スレッド切り換え後に、コンテキスト転送を行うようにしてもよい。この構成によれば、コンテキストの退避および復帰を隠蔽することができるのでマルチスレッド計算機システムの稼働率をさらに向上させることができる。
【００１８】
ここで、前記制御手段は、さらに、各プロセッサエレメントが実行状態であるか停止状態であるかを示す状態レジスタと、スレッドの並列実行の可否に関する可否情報を保持する複数の可否情報保持部とを備え、前記スケジュール回路は、さらに、何れかのプロセッサエレメントが実行状態から停止状態になったとき、前記可否情報に基づいて実行状態のプロセッサエレメントが実行すべきスレッドのうち並列実行可能なスレッドを判別し、判別したスレッドを停止状態のプロセッサに実行させる構成としてもよい。この構成によれば、停止状態のプロセッサエレメントを有効活用して、１つのプロセスを１つのプロセッサエレメントだけでなく複数のプロセッサエレメントに実行させることができるので、マルチスレッド計算機システムの稼働率をさらに向上させることができる。
【００１９】
ここで、前記可否情報は、同一プロセス内の他のスレッドとの並列実行可否を示す第１情報と、他のプロセッサエレメントによる実行可否を示す第２情報とを含み、前記複数の可否情報保持部のそれぞれは、前記第１情報を保持する第１レジスタと、前記第２情報を保持する第２レジスタとを有するようにしてもよい。また、前記実行順序レジスタ、第１レジスタおよび第２レジスタは、前記複数スレッドの実行開始前に対応するプロセッサエレメントによって実行順序、第１情報および第２情報をそれぞれ設定されるようにしてもよい。この構成によれば、スレッド毎に、処理内容に依存して並列実行可能にするかしないかを柔軟に設定することができる。
【００２０】
ここで、前記マルチスレッド計算機システムは、さらに、停止状態のプロセッサエレメントへのクロック信号の供給を抑制するクロック制御手段を備えてもよい。この構成によれば、停止状態のプロセッサエレメントへのクロック供給を抑制することにより、消費電力を低減することができる。
【００２１】
ここで、前記制御手段は、さらに、プロセッサエレメント毎にクロック供給の抑制可否を示すクロック制御情報を保持するクロック制御レジスタを備え、前記制御手段は、クロック制御情報に従ってプロセッサエレメント毎に前記クロック制御手段をイネーブルまたはディスエーブルするようにしてもよい。この構成によれば、プロセッサエレメント毎に、停止状態のプロセッサエレメントへのクロック供給を抑制することができる。
【００２２】
また、本発明のマルチスレッド実行制御方法は、複数スレッドを含むプロセスを実行する複数のプロセッサエレメントと、各プロセッサエレメントで実行すべきスレッドを切り換える制御部とを備えるマルチスレッド計算機システムにおけるマルチスレッド実行制御方法であって、前記制御部は、前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントで実行すべきスレッドの実行順序を保持する複数の実行順序レジスタと、前記複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントにより実行中のスレッドの実行時間をカウントし、カウントされた時間がスレッドの割り当て時間に達したときタイムアウト信号を発生する複数のカウンタと、前記実行順序レジスタに保持された実行順序および前記タイムアウト信号に基づいて、各プロセッサエレメントで実行すべきスレッドを切り換えるスケジュール回路とを有し、前記マルチスレッド実行制御方法は、各プロセッサエレメントのシングルスレッドモードにおいて前記実行順序レジスタに前記実行順序を設定するステップと、各プロセッサエレメントをマルチスレッドモードに設定するステップと、各プロセッサエレメントのマルチスレッドモードにおいてスレッドを切り換えながら実行するステップとを有する。この構成によれば、シングルスレッドモードにおいて実行順序レジスタへの実行順序の設定など初期設定をしさえすれば、マルチスレッドモードに移行後に、スケジュール回路によるスレッド切り換えを高速に行うことができる。
【発明の効果】
【００２３】
以上の説明から明らかなように、本発明によれば、粒度の細かいスレッドを切り換えながら実行する並列処理システムにおいて、スレッドの切り換えの時間ロスを大幅に削減することが可能となる。また、停止状態のプロセッサエレメントを有効活用することができる。その結果、マルチスレッド計算機システムの稼働率を向上させることができる。
【発明を実施するための最良の形態】
【００２４】
以下、本発明の実施の形態について、図面を用いて詳細に説明する。
図１は、本発明の実施の形態に係るマルチスレッド計算機システムの全体構成を示す機能ブロック図である。
【００２５】
図１に示されるように、マルチスレッド計算機システム１は、プロセッサエレメント群１００と、並列プロセッサ制御部２００と、コンテキストメモリ３００と、クロック制御部４００とを備える。なお、同図下側の破線内はメモリに記憶されているオペレーティングシステム２とユーザープロセス３とを模式的に図示してある。
【００２６】
プロセッサエレメント群１００は、複数のプロセッサエレメントで構成される。ここでは説明の便宜上、３つのプロセッサエレメントで構成されるものとし、それぞれ第１のプロセッサエレメント１０１、第２のプロセッサエレメント１０２、第３のプロセッサエレメント１０３とする。各プロセッサエレメントは、複数のスレッドを含むプロセス内のスレッドを切り換えながら実行する。
【００２７】
並列プロセッサ制御部２００は、スレッド実行スケジューラ部２１０と、プロセッサ実行状態レジスタ２２０と、複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントにより実行中のスレッドの実行時間をカウントする３つのカウンタ２３０と、タイムアウト検出部２４０とを備える。
【００２８】
並列プロセッサ制御部２００は、各プロセッサエレメントで実行すべきスレッドを切り換える制御手段として機能する。
【００２９】
スレッド実行スケジューラ部２１０は、ハードウェアとして構成された回路であり、何れかのカウンタによりカウントされた時間がスレッドの割り当て時間に達したことがタイムアウト検出部２４０によって検出されたとき、当該カウンタに対応するプロセッサエレメントのスレッドを切り換えるスケジュール回路である。また、スレッド実行スケジューラ部２１０は、何れかのプロセッサエレメントが実行状態から停止状態になったとき、他のプロセッサのスレッドのうち並列実行可能なスレッドを判別し、判別したスレッドを停止状態のプロセッサに実行させる。
【００３０】
プロセッサ実行状態レジスタ２２０は、状態レジスタ２２１〜２２３を含む。状態レジ
スタ２２１〜２２３は、第１のプロセッサエレメント１０１〜第３のプロセッサエレメント１０３に対応し、対応するプロセッサエレメントのステータスデータを保持する。このステータスデータは実行状態であるが停止状態であるかを示す情報を含む。
【００３１】
カウンタ２３０は、複数のプロセッサエレメントに対応して設けられ、対応するプロセッサエレメントにより実行中のスレッドの実行時間をカウントする。
【００３２】
図２は、スレッド実行スケジューラ部２１０の機能ブロック図である。スレッド実行スケジューラ部２１０は、コンフィグレーションレジスタ群２１００、スレッドスケジューラ部２１８と、コンテキスト転送制御部２１９とを備える。
【００３３】
コンフィグレーションレジスタ群２１００は、実行順序レジスタ２１１ａ〜２１１ｃクォンタムレジスタ２１２ａ〜２１２ｃ、優先度レジスタ２１３ａ〜２１３ｃ、マルチスレッドモードレジスタ２１４ａ〜２１４ｃ、クロック制御レジスタ２１５ａ〜２１５ｃ、並列可否レジスタ２１６ａ〜２１６ｃ、他ＰＥ実行可否レジスタ２１７ａ〜２１７ｃを含む。符号末尾のａ〜ｃは、第１のプロセッサエレメント１０１〜第３のプロセッサエレメント１０３に対応することを意味する。
【００３４】
図３は、コンフィグレーションレジスタ群２１００の具体例を示す図である。同図では、第１のプロセッサエレメント１０１に対応するレジスタのみ示すが、第２のプロセッサエレメント１０２、第３のプロセッサエレメント１０３に対応するレジスタも同様である。
【００３５】
実行順序レジスタ２１１ａは、対応するプロセッサエレメントで実行すべきスレッドの実行順序を保持する。図中のＮａ１、Ｎａ２、Ｎａ３・・・は、対応する第１のプロセッサエレメント１０１において実行すべきスレッドに対応するスレッド番号の列であり、１番目、２番目、３番目・・・に実行すべきスレッドの番号を示す。一番大きなスレッド番号のスレッドの次に実行されるスレッドはスレッド番号Ｎａ１のスレッドである。つまり、実行順序レジスタ２１１ａは巡回的な実行順序を示す。なお、実行順序レジスタ２１１ａは、１本のレジスタでなくてもよく、複数本のレジスタで構成してもよい。
【００３６】
クォンタムレジスタ２１２ａは、対応するプロセッサエレメントで実行すべきスレッド毎の割り当て時間を示す。図中のＱａ１、Ｑａ２、Ｑａ３・・・は、Ｎａ１、Ｎａ２、Ｎａ３・・・に対応し、それぞれ対応するスレッドの割り当て時間（クォンタム値）を、例えばサイクル数で示す。
【００３７】
優先度レジスタ２１３ａは、対応するプロセッサエレメントへの割り込み信号に対応する優先実行すべきスレッドを示す優先度情報を保持する。同図では優先度情報は、優先スレッド番号Ｐａである。
【００３８】
マルチスレッドモードレジスタ２１４ａは、シングルスレッドモードおよびマルチスレッドモードの何れかを示すモード情報を保持する。シングルスレッドモードを示すモード情報は、スレッド実行スケジューラ部２１０をディスエーブルにする。これにより、対応するプロセッサエレメントを、スレッド切り換えを伴わないシングルスレッドモードで動作させる。マルチスレッドモードを示すモード情報は、スレッド実行スケジューラ部２１０をイネーブルにする。これにより、対応するプロセッサエレメントを、スレッド切り換えを伴うマルチスレッドモードで動作させる。マルチスレッド計算機システム１のリセット後は、マルチスレッドモードレジスタ２１４ａは、シングルスレッドモードを示すモード情報を保持する。
【００３９】
クロック制御レジスタ２１５ａは、対応するプロセッサエレメントへのクロック供給の抑制可否（イネーブルまたはディスエーブル）を示すクロック制御情報を保持する。
【００４０】
並列可否レジスタ２１６ａは、同一プロセス内の他のスレッドとの並列実行可否を示すスレッド毎の並列実行可否情報を保持する。並列実行可否情報は、スレッド毎にイネーブルまたはディスエーブルを示す。
【００４１】
他ＰＥ実行可否レジスタ２１７ａは、他のプロセッサエレメントによる実行可否を示す他ＰＥ実行可否情報を保持する。他ＰＥ実行可否情報は、スレッド毎にイネーブルまたはディスエーブルを示す。上記の並列実行可否情報と他ＰＥ実行可否情報とをまとめてスレッドの並列実行の可否に関する可否情報と呼ぶ。
【００４２】
図４は、マルチスレッド計算機システム１の起動後の処理を示すフローチャートを示す図である。以下、コンフィグレーションレジスタ群２１００中のレジスタの符号末尾のａ〜ｃを省略している場合は、何れかのプロセッサエレメントに対応する代表を表すものとする。
【００４３】
同図のように、マルチスレッド計算機システム１の電源投入後またはリセット後は、シングルスレッドモードで起動し、第１のプロセッサエレメント１０１〜第３のプロセッサエレメント１０３は、それぞれスレッド切り替えをしないで１つのプロセス（管理プロセスと呼ぶ。）を実行する（Ｓ４１）。この管理プロセスは、プロセッサエレメントの初期値設定用のプロセスである。各プロセッサエレメントは、管理プロセスを実行することによってコンフィグレーションレジスタ群２１００のマルチスレッドモードレジスタ２１４以外の各レジスタにマルチスレッドモードで必要となる各レジスタ値を設定し（Ｓ４２）、さらに、マルチスレッドモードレジスタ２１４にマルチスレッドモードを設定する（Ｓ４３）。これにより、当該プロセッサエレメントは、マルチスレッドモードの動作が開始する。すなわち、スレッド実行スケジューラ部２１０がイネーブルになる。
【００４４】
マルチスレッドモードにおいて、スレッド実行スケジューラ部２１０は、最初に実行すべきスレッドを当該プロセッサエレメントで実行させる。さらに、スレッド実行スケジューラ部２１０は、実行順序レジスタ２１１から出力される実行順序に従って次に実行すべきスレッドを判別し、判別したスレッドのコンテキストを裏コンテキストレジスタに転送する（Ｓ４４）。ここで、裏コンテキストレジスタは、コンテキストレジスタ１０１１ａ、１０１１ｂのうち、現在実行中のスレッドに用いられていない方を意味する。
【００４５】
その後、タイムアウト検出部２４０がタイムアウトを検出したとき（Ｓ４５）、スレッド実行スケジューラ部２１０は、タイムアウトに対応するプロセッサエレメントについて、スレッドを切り換える（Ｓ４６）。このスレッド切り換えでは、実行中のスレッドのコンテキストを保持しているコンテキストレジスタ（表コンテキストレジスタと呼ぶ。）から、次に実行すべきコンテキストを保持している裏コンテキストレジスタに切り換え、さらに、スレッドを切り換える。スレッド切り換え後に、新たな表コンテキストレジスタと異なる方のコンテキストレジスタからコンテキストをメモリに退避し、現在実行中のスレッドの次のスレッドに対応するコンテキストをメモリから当該コンテキストレジスタに復帰させる（Ｓ４４）。
【００４６】
以上のように、マルチスレッドモードにおけるスレッド切り換えは、ユーザープロセス内のスレッドスケジューラではなく、並列プロセッサ制御部２００によってハードウェア的に実行されるので、時間ロスを生じさせることなく高速に行うことができ、マルチスレッド計算機システム１の稼働率を向上させることができる。
【００４７】
図５は、スレッド実行スケジューラ部２１０における、停止状態のプロセッサエレメントにスレッドを割り当てる処理を示すフローチャート図である。同図のように、スレッド実行スケジューラ部２１０は、何れかのプロセッサエレメントが実行状態から停止状態になったかどうかを判定する（Ｓ５１）。ここで、停止状態はスレッドが他のスレッド処理待ち、外部資源からの応答待ちである状態をいう。何れかのプロセッサエレメントが実行状態から停止状態になったとき、スレッド実行スケジューラ部２１０は、実行状態のプロ
セッサエレメント毎に次の処理を行う（Ｓ５２〜Ｓ５８：ループ１）。ループ１においてスレッド実行スケジューラ部２１０は、実行状態のプロセッサエレメントにおいて次に実行すべきスレッドを判別し（Ｓ５３）、当該プロセッサエレメントにおいて実行中のスレッド（現スレッドと呼ぶ。）に対応する並列実行可否情報および他ＰＥ実行可否情報を読み出し（Ｓ５４、Ｓ５５）、現スレッドと次に実行すべきスレッドとが並列実行可能か否かを判定する（Ｓ５６）。この判定において、スレッド実行スケジューラ部２１０は、（ａ）現スレッドの並列実行可否情報がイネーブル、（ｂ）次に実行すべきスレッドの並列実行可否情報がイネーブル、かつ、（ｃ）次に実行すべきスレッドの他ＰＥ可否情報がイネーブルである場合に、現スレッドに対して、次のスレッドが停止状態のプロセッサで並列実行可能であると判定し、（ａ）〜（ｃ）のうち１つ以上がディスエーブルである場合には並列実行不可であると判定する。
【００４８】
並列実行可能であると判定した場合、スレッド実行スケジューラ部２１０は、停止状態のプロセッサエレメントに次のスレッドを実行させ（Ｓ５７）、ループ１を抜ける。もちろん、このときスレッド実行スケジューラ部２１０は、停止状態のプロセッサエレメントに次のスレッドを実行させる前に、停止状態のプロセッサエレメントで停止中のスレッドのコンテキストの退避と、次に実行すべきスレッドのコンテキストの復帰とを行う。停止状態のプロセッサエレメントで実行されたスレッドは、当該スレッドの割り当て時間を経過したとき、元のスレッドに切り換えられる。
【００４９】
このように、停止状態のプロセッサエレメントを有効活用して、１つのプロセスを１つのプロセッサエレメントだけでなく複数のプロセッサエレメントに実行させることができるので、マルチスレッド計算機システムの稼働率をさらに向上させることができる。また、スレッド毎に並列実行可否情報および他ＰＥ実行可否情報を設定できるので、各スレッドの処理内容に依存して並列実行可能にするかしないかを柔軟に設定することができる。
【００５０】
なお、図５のフローチャートに示したスレッド実行スケジューラ部２１０の制御論理の流れを示しているのであって、実行スケジューラ部はハードウェアによりこの制御論理を実現する。
【００５１】
次に、本発明の実施の形態について、その動作の一例を説明する。
オペレーティングシステム２が第１のプロセッサエレメント１０１で実行するユーザープロセス３を開始させると、ユーザープロセス３はまずスレッド実行スケジューラ部２１０に実装された、第１のプロセッサエレメント１０１に対応する実行順序レジスタ２１１ａ、クォンタムレジスタ２１２ａ、優先度レジスタ２１３ａ、並列可否レジスタ２１６ａ、他ＰＥ実行可否レジスタ２１７ａに、それぞれ各スレッド３１、３２、３３、３４の実行順序、クォンタム値、優先度、並列実行のイネーブル／ディスエーブル、他ＰＥ実行のイネーブル／ディスエーブルを示す各情報を格納する。また、クロック制御レジスタ２１５ａには、クロック供給抑制の可否を示す情報を格納する。以下の説明では、説明の便宜上、スレッド３１、３２、３３をこの順序で実行するものとする（スレッド３４については後述する。）。
【００５２】
第１のプロセッサエレメント１０１がマルチスレッドモードに遷移した後、コンテキスト転送制御部２１９はコンテキストメモリ３００からスレッド３１のコンテキストを読み出し、第１のプロセッサエレメント１０１のコンテキストレジスタ１０１１に格納する。そののち、第１のプロセッサエレメント１０１はコンテキストレジスタ１０１１の値を参照し、スレッド３１の実行を開始する。
【００５３】
第１のプロセッサエレメント１０１がスレッド３１の実行を開始すると同時に、カウンタ２３０はスレッド３１に対応するクォンタムレジスタ２１２ａの設定値を初期値として
１ずつ減算を開始する。
【００５４】
さらに、このとき、スレッド実行スケジューラ部２１０に実装されたコンテキスト転送制御部２１９は、次に実行するスレッド３２のコンテキストをコンテキストメモリ３００から読み出し、プロセッサエレメント群１００に実装されたコンテキストレジスタ１０１１に格納する（「コンテキストの復帰」）。
【００５５】
第１のプロセッサエレメント１０１がスレッド３１の実行を続行し、カウンタ２３０の値が０になったとき、タイムアウト検出部２４０がこれを検出して、第１のプロセッサエレメント１０１にスレッド切り換えを行うための割り込み信号を出力する。
【００５６】
割り込み信号を受理した第１のプロセッサエレメント１０１は、コンテキスト切り換えのための処理を行ったのち、コンテキストの読み出し先を、既に格納が完了しているスレッド３２のコンテキストレジスタ１０１１に切り換え、スレッド３２の実行を開始する。
【００５７】
スレッド３２の実行を開始した後、コンテキスト転送制御部２１９は第１のプロセッサエレメント１０１内に実装されたスレッド３１のコンテキストを格納するコンテキストレジスタからコンテキストを読み出し、コンテキストメモリ３００に格納する（「コンテキ
ストの退避」）。
【００５８】
以下、スレッド３２とスレッド３３の実行、対応するコンテキストの切り換えも同様に行う。
【００５９】
スレッド３３の実行を完了すると、次にスレッド３１を実行する。以下、スレッド３１、スレッド３２、スレッド３３、スレッド３１、（以下同様）の順に実行する。なお、この実行順序をあらわす実行順序情報には、図３のように実行順序レジスタ２１１ａに属性としてあらかじめ格納される。
【００６０】
次に、スレッドスケジューラ部２１８に外部割込み信号５００が入力された場合の動作について説明する。外部割込み信号５００が入力されると、スレッドスケジューラ部２１８は緊急に実行が必要なスレッドを次に実行するようにスケジューリングを行う。ここではスレッド３４がこの緊急に実行が必要なスレッドであるとして説明する。このとき、コンテキスト転送制御部２１９により、コンテキストメモリ３００からスレッド３４のコンテキストを読み出して第１のプロセッサエレメント１０１のコンテキストレジスタ１０１１に格納し、さらに第１のプロセッサエレメント１０１にスレッド切り換えを行うための割り込み信号を出力する。そののち、第１のプロセッサエレメント１０１では次にスレッド３４を実行する。なお、スレッド３４が「緊急に実行が必要なスレッド」であるか否かの情報は、優先度レジスタ２１３ａに属性としてあらかじめ設定する。また、図３のように優先度レジスタ２１３ａには優先的に実行する割り込み処理に対応するスレッド番号を設定してもよいが、スレッド毎に設定してもよい。その場合、割り込み処理に対応するスレッドの優先度は最も高く設定される。
【００６１】
ここまで、第１のプロセッサエレメント１０１でユーザープロセス３を実行する方法を説明したが、第２のプロセッサエレメント１０２、第３のプロセッサエレメント１０３において他のユーザープロセスを実行する場合についても同様である。
【００６２】
次にプロセッサ実行状態レジスタ２２０の機能について説明する。プロセッサ実行状態レジスタ２２０には、プロセッサエレメント群１００を構成する各プロセッサエレメント１０１、１０２、１０３が、それぞれスレッドを実行している状態であるか否かを表す情
報が格納されている。スレッドを実行している状態であるか否かを表す情報は各プロセッサエレメント１０１、１０２、１０３から出力され、プロセッサ実行状態レジスタ２２０がその情報を保持する。
【００６３】
前述の例を用いて、プロセッサ実行状態レジスタ２２０の機能についてさらに詳細に説明する。
【００６４】
第１のプロセッサエレメント１０１で実行するユーザープロセス３のスレッド３１を第１のプロセッサエレメントで実行している間に、スレッドスケジューラ部２１８はスレッド３１の次に実行するスレッドとして、ここでは３２をスケジューリングする。このとき、スレッドスケジューラ部２１８はさらにプロセッサ実行状態レジスタ２２０の中にある第２のプロセッサエレメント１０２のスレッド実行状態に関する情報を参照し、第２のプロセッサエレメント１０２で実行するスレッドが存在しないことを検出すると、スレッド３２を第２のプロセッサエレメント１０２で実行するようにスケジューリングする。コンテキスト転送制御部２１９はスレッド３２のコンテキストをコンテキストメモリから読み出し、第２のプロセッサエレメント１０２のコンテキストレジスタ（第２のプロセッサエレメントに実装）に格納する。なお、スレッド３２が第１のプロセッサエレメント１０１以外のプロセッサで実行することが可能であるか否かの情報と、スレッド３１およびスレッド３２が並列に実行可能であるか否かの情報とは、優先度レジスタ２１３ａに属性としてあらかじめ設定する。
【００６５】
さらには、第１のプロセッサエレメント１０１で実行するようにスケジューリングされているスレッド（スレッドＡとする）の優先度情報と、第２のプロセッサで実行するようにスケジューリングされているスレッド（スレッドＢとする）の優先度情報（両者の優先度情報はいずれも優先度レジスタ２１３ａ、２１３ｂにあらかじめ格納する）とを比較し、スレッドＡの優先度がスレッドＢの優先度より高い場合には、スレッドＡを第２のプロセッサエレメント１０２で、さらにスレッドＢよりも先に実行するようにスケジューリングする。なお、スレッドＡが第１のプロセッサ以外のプロセッサで実行することが可能であるか否かの情報は、優先度レジスタ２１３ａに属性としてあらかじめ設定する。
【００６６】
なお、スレッドを実行している状態であるか否かを表す情報はプロセッサエレメント群１００の各プロセッサエレメントから出力される例について説明したが、この情報はスレッド実行スケジューラ部２１０が設定する構成も考えられる。
【００６７】
次にクロック制御部４００の機能について説明する。プロセッサ実行状態レジスタ２２０はクロック制御部４００に接続されている。クロック制御部４００は、クロック制御レジスタ２１５の設定値およびプロセッサ実行状態レジスタ２２０の値を参照し、プロセッサエレメント群１００内の各プロセッサエレメントに供給するクロックの制御を行う。すなわち、クロック制御レジスタ２１５の設定値が「クロック停止制御を行う」ことを表す情報であるとき、クロック制御部４００はプロセッサ実行状態レジスタ２２０の値を監視し、例えば第１のプロセッサエレメント１０１で実行するスレッドがないことを検出すると、第１のプロセッサエレメント１０１へのクロック供給を停止する。この機能により、マルチスレッド計算機システムの不要な電力消費を削減するという格別の効果を得ることができる。
【００６８】
なお、本実施の形態では、プロセッサエレメントの数やユーザープロセス３を構成するスレッドの数を具体的に決めて説明したが、これらはいずれも説明の便宜上のものであり、これに限るものではない。
【００６９】
また、コンフィグレーションレジスタ群２１００の構成についても同様に説明の便宜上
のものであり、機能的には同等で他の構成も考えられることはいうまでもない。
【産業上の利用可能性】
【００７０】
本発明にかかるマルチスレッド計算機システムは、携帯電話機等のモバイル機器等における音楽録音再生処理や、映像録音再生処理を複数のプロセッサで並行して実行する音声録音再生機器や、映像録音再生機器として適用できる。
【図面の簡単な説明】
【００７１】
【図１】本発明の実施の形態における、マルチスレッド計算機システムの機能ブロック図である。
【図２】スレッド実行スケジューラ部の機能ブロック図である。
【図３】コンフィグレーションレジスタ群の具体例を示す図である。
【図４】起動後の処理を示すフローチャートを示す図である。
【図５】停止状態のプロセッサエレメントにスレッドを割り当てる処理を示すフローチャート図である。
【符号の説明】
【００７２】
１      マルチスレッド計算機システム
２      オペレーティングシステム
３      ユーザープロセス
１００  プロセッサエレメント群
１０１  第１のプロセッサエレメント
１０２  第２のプロセッサエレメント
１０３  第３のプロセッサエレメント
２００  並列プロセッサ制御部
２１０  スレッド実行スケジューラ部
２１１ａ、２１１ｂ、２１１ｃ  実行順序レジスタ
２１２ａ、２１２ｂ、２１２ｃ    クォンタムレジスタ
２１３ａ、２１３ｂ、２１３ｃ    優先度レジスタ
２１４ａ、２１４ｂ、２１４ｃ    マルチスレッドモードレジスタ
２１５ａ、２１５ｂ、２１５ｃ    クロック制御レジスタ
２１６ａ、２１６ｂ、２１６ｃ    並列可否レジスタ
２１７ａ、２１７ｂ、２１７ｃ    他ＰＥ実行可否レジスタ
２１８  スレッドスケジューラ部
２１９  コンテキスト転送制御部
２２０  プロセッサ実行状態レジスタ
２３０  カウンタ
２４０  タイムアウト検出部
３００  コンテキストメモリ
４００  クロック制御部
５００  外部割込み信号
１０１１  コンテキストレジスタ
２１００  コンフィグレーションレジスタ群
【図１】
2007317171.tif 000003
【図２】
2007317171.tif 000004
【図３】
2007317171.tif 000005
【図４】
2007317171.tif 000006
【図５】
2007317171.tif 000007