(57)【要約】【課題】特定のプログラムがバスアクセスを占有するのを回避する。【解決手段】マルチスレッドプロセッサ１０は、少なくとも第１及び第２のプログラムを含む複数のプログラムを切り替えて実行するプロセッサであって、複数のプログラムによる外部資源へのアクセスを制御するコントロールユニットと、複数のプログラムの実行権を制御するディスパッチユニット１２を備える。ディスパッチユニット１２は、少なくともコントロールユニットによる第１のプログラムにかかる外部資源との第１のアクセスの開始から、第１のアクセスの終了後に引き続き行われる第２のプログラムにかかるアクセスの開始後までの間、第１のプログラムの実行を停止させる、【選択図】図１
2011248454.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも第１及び第２のプログラムを含む複数のプログラムを切り替えて実行するプロセッサ装置であって、
前記複数のプログラムによる外部資源へのアクセスを制御するコントロールユニットと、
前記複数のプログラムの実行権を制御するディスパッチユニットを備え、
前記ディスパッチユニットは、少なくとも前記コントロールユニットによる前記第１のプログラムにかかる外部資源との第１のアクセスの開始から、前記第１のアクセスの終了後に引き続き行われる前記第２のプログラムにかかるアクセスの開始後までの間、前記第１のプログラムの実行を停止させる、
プロセッサ装置。
【請求項２】
前記複数のプログラムは、第３のプログラムをさらに含み、
前記ディスパッチユニットは、少なくとも前記第１のアクセスの開始から、前記第２のアクセスの終了後に引き続き行われる前記第３のプログラムにかかるアクセスの開始後までの間、前記第１のプログラムの実行を停止させる、
請求項１に記載のプロセッサ装置。
【請求項３】
前記ディスパッチユニットは、前記第１のアクセスの開始から、一定時間が経過するまで前記第１のプログラムの実行を停止させる、
請求項１又は請求項２に記載のプロセッサ装置。
【請求項４】
前記ディスパッチユニットがプログラムの実行を停止するよう制御するプログラム一時停止器と、
前記プログラム一時停止器がプログラムを停止させる期間をカウントするプログラム時間管理カウンタと、をさらに備える、
請求項１乃至請求項３のいずれか一項に記載のプロセッサ装置。
【請求項５】
前記時間管理カウンタは、前記第１のプログラムが外部資源に対しアクセスを行う場合に、他のそれぞれのプログラムとのアクセス要求が１回ずつ競合することを見込んだ時間を設定し、
前記ディスパッチユニットは、前記時間管理カウンタに設定された時間の満了まで前記第１のプログラムの実行を停止させる、
請求項４に記載のプロセッサ装置。
【請求項６】
少なくとも第１及び第２のプロセッサを備えるプロセッサ装置であって、
前記プロセッサ装置は、少なくとも前記第１のプロセッサにかかる外部資源との第１のアクセスの開始から、前記第１のアクセスの終了後に引き続き行われる第２のプロセッサの前記外部資源との第２のアクセスの開始後までの間、前記第１のプロセッサの実行を停止させる、
プロセッサ装置。
【請求項７】
少なくとも第１及び第２のプログラムを含む複数のプログラムを切り替えて実行するプロセッサ装置の制御方法であって、
プロセッサ装置は、
前記複数のプログラムによる外部資源へのアクセスを制御するコントロールユニットと、
前記複数のプログラムの実行権を制御するディスパッチユニットを備え、
前記ディスパッチユニットは、少なくとも前記コントロールユニットによる前記第１のプログラムにかかる外部資源との第１のアクセスの開始から、前記第１のアクセスの終了後に引き続き行われる前記第２のプログラムにかかるアクセスの開始後までの間、前記第１のプログラムの実行を停止させる、
プロセッサ装置の制御方法。
【請求項８】
前記複数のプログラムは、第３のプログラムをさらに含み、
前記ディスパッチユニットは、少なくとも前記第１のアクセスの開始から、前記第２のアクセスの終了後に引き続き行われる前記第３のプログラムにかかるアクセスの開始後までの間、前記第１のプログラムの実行を停止させる、
請求項７に記載のプロセッサ装置の制御方法。
【請求項９】
前記ディスパッチユニットは、前記第１のアクセスの開始から、一定時間が経過するまで前記第１のプログラムの実行を停止させる、
請求項７又は請求項８に記載のプロセッサ装置の制御方法。
【請求項１０】
前記プロセッサ装置は、
プログラム一時停止器と、
プログラム時間管理カウンタと、をさらに備え、
前記プログラム一時停止器は、前記ディスパッチユニットがプログラムの実行を停止するよう制御し、
前記プログラム時間管理カウンタは、プログラムを停止させる期間をカウントする、
請求項７乃至請求項９のいずれか一項に記載のプロセッサ装置の制御方法。
【請求項１１】
前記時間管理カウンタは、前記第１のプログラムが外部資源に対しアクセスを行う場合に、他のそれぞれのプログラムとのアクセス要求が１回ずつ競合することを見込んだ時間を設定し、
前記ディスパッチユニットは、前記時間管理カウンタに設定された時間の満了まで前記第１のプログラムの実行を停止させる、
請求項１０に記載のプロセッサ装置の制御方法。
【請求項１２】
少なくとも第１及び第２のプロセッサを備えるプロセッサ装置の制御方法であって、
前記プロセッサ装置は、少なくとも前記第１のプロセッサにかかる外部資源との第１のアクセスの開始から、前記第１のアクセスの終了後に引き続き行われる第２のプロセッサの前記外部資源との第２のアクセスの開始後までの間、前記第１のプロセッサの実行を停止させる、
プロセッサ装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセッサ装置及びプロセッサ装置の制御方法に関する。
【背景技術】
【０００２】
一定以上の規模を持つソフトウェア開発においては、モジュールを個別開発し、それらのモジュールを結合してソフトウェアを完成させる開発手法が用いられる。組み込みソフト開発においては、ソフトの提供と同時にスペックを提示することが必須となる。このスペック値は、通常の使用条件での値（Typical time：Typ．）の他にワーストケースを規定した値（Min/Max）が必要である。このとき、スペック値は、実行されるハードウェアの構造や設定に極力依存しないことが望ましい。
【０００３】
また、１つのプロセッサ内に複数のコンテキストブロックを持ち、独立した命令流をスレッド単位で切り替えながら処理するマルチスレッドプロセッサが存在する（例えば、非特許文献１参照）。ここで命令流とは、プログラムされた一連の処理である。
【０００４】
マルチスレッドプロセッサは、それぞれが独立した命令流を実行することで、複数スレッドの並列実行を擬似的に実現する。マルチスレッドプロセッサは、複数のコンテキストブロックと、１つのディスパッチユニットを有する。ディスパッチユニットは、周期的あるいは優先度順にコンテキストブロックを切り替え、それぞれのコンテキストブロックに応じた命令流を命令パイプラインに投入する。
【０００５】
マルチスレッドプロセッサは、１つのスレッドにより生成された命令をパイプライン中の１つの実行ステージで実行しながら、他の実行ステージにおいて他のスレッドにより生成された命令を処理する。つまり、マルチスレッドプロセッサは、互いに独立関係にある命令をそれぞれ異なる実行ステージで実行する。これにより、マルチスレッドプロセッサは、それぞれの命令流を円滑に処理しながら、パイプラインの実行ステージが何も処理しない時間を削減し、プロセッサの処理能力を向上させる。
【０００６】
図５に、マルチスレッドプロセッサの例を示す。マルチスレッドプロセッサ３０は、コンテキストブロック１１と、ディスパッチユニット３１と、メモリコントロールユニット１３と、バスコントロールユニット１４と、コプロセッサ１５と、演算論理装置（ＡＬＵ）３６を備える。
また、マルチスレッドプロセッサ３０には、プロセッサ全体クロック発振器１８と、ＲＡＭ(Random Access Memory)３８と、ＲＯＭ（Read only memory）３９と、メモリバス２１と、拡張ユニット（Ｉ／Ｏ）４１と、Ｉ／Ｏバス２３が接続されている。
【０００７】
マルチスレッドプロセッサ３０は、複数のコンテキストブロック１１を備えている。ここで、各コンテキストブロック１１は、スレッドの設定情報を格納しており、複数のスレッドのいずれか一つと対応関係にある。コンテキストブロック１１は、ディスパッチユニット３１によるスレッドの切り替えに応じて、切り替わりながら動作する。
コンテキストブロック１１は、プログラムカウンタ２４、システムレジスタ２５、汎用レジスタ２６を備える。プログラムカウンタ２４は、実行すべき命令が格納されているメモリ上の番地を指定する。システムレジスタ２５は、マルチスレッドプロセッサ３０の動作を制御する命令を格納する。汎用レジスタ２６は、計算に使う値や、ＲＡＭ１９やＲＯＭ２０のデータアドレスを格納する。また、例えば、後述するＡＬＵ１６やコプロセッサ１５により演算された演算結果を格納する。
【０００８】
ディスパッチユニット３１は、各スレッドに実行権を与える。実行権が与えられたスレッドが動作を実行される。また、実行されるスレッドの切り替えに応じて、コンテキストブロック１１を切り替える。
【０００９】
メモリコントロールユニット１３は、マルチスレッドプロセッサ３０が、メモリバス２１を介して、外部資源であるＲＡＭ１９やＲＯＭ２０にアクセスするのを制御する。メモリコントロールユニット１３は、あるスレッドからメモリバス２１へのアクセス要求があった場合に、他のスレッドからメモリバス２１へのアクセスが実行中でなければ要求を実行する。メモリコントロールユニット１３は、アクセスが実行中であればその旨を伝える信号を返却し、要求元のスレッドを待たせる動作を行う。
【００１０】
バスコントロールユニット１４は、マルチスレッドプロセッサ３０が、Ｉ／Ｏバス２３を介して、Ｉ／Ｏ２２にアクセスするのを制御する。バスコントロールユニット１４は、あるスレッドからＩ／Ｏバス２３へのアクセス要求があった場合に、他のスレッドからＩ／Ｏバス２３へのアクセスが実行中でなければ要求を実行する。アクセスが実行中であればその旨を伝える信号を返却し、要求元のスレッドを待たせる動作を行う。
【００１１】
マルチスレッドプロセッサ３０は、コンテキストブロック１１と同数のコプロセッサ１５を備える。コプロセッサ１５は、入力された命令に従い、演算をスレッド毎に独立して実行する。例えば、特定分野に特化した補助プロセッサであり、例えば浮動小数点演算を行なうものである。コプロセッサ１５はディスパッチユニット３１を介して、システムレジスタ２５から命令を入力する。また、コプロセッサ１５は入力された命令を実行し、ディスパッチユニット３１を介して、実行結果を汎用レジスタ２６に出力する。
【００１２】
ＡＬＵ１６は、入力された命令に従い演算を行う。例えばＡＬＵ１６は、実行中のスレッドの命令流に基づいて演算を行う。例えばＡＬＵ１６は、ディスパッチユニット３１を介して、システムレジスタ２５から命令を入力する。また、ＡＬＵ１６は入力された命令を実行し、ディスパッチユニット３１を介して、実行結果を汎用レジスタ２６に出力する。ＡＬＵ１６は、複数のスレッド間の共有資源である。
【００１３】
プロセッサ全体クロック発振器１８は、マルチスレッドプロセッサ３０の全体にかかるクロックを生成し、供給する。マルチスレッドプロセッサ３０は、プロセッサ全体クロック発振器１８で生成されたクロック単位で、処理の実行を行う。
【００１４】
ＲＡＭ１９は、読み込み及び書き込みが可能なメモリである。ＲＯＭ２０は、読み込みが可能なメモリである。メモリバス２１は、マルチスレッドプロセッサ３０と、ＲＡＭ１９及びＲＯＭ２０を接続する経路である。
【００１５】
Ｉ／Ｏ２２は、マルチスレッドプロセッサ３０の外部に設けられた機器であり、例えばディスプレイや、キーボード等である。Ｉ／Ｏバス２３は、マルチスレッドプロセッサ３０と、Ｉ／Ｏ２２を接続する経路である。
【００１６】
ここで、ＲＡＭ１９やＲＯＭ２０やＩ／Ｏ２２は各スレッドの共有資源である。一般に、演算処理を行う部分（コンテキストブロック１１、ディスパッチユニット３１、コプロセッサ１５、ＡＬＵ１６等）は高速で動作し、ＲＡＭ１９、ＲＯＭ２０、Ｉ／Ｏ２２は低速で動作する。
【００１７】
このようなハードウェア構成により、マルチスレッドプロセッサ３０は、コンテキストブロック１１と同数のスレッドを、自動的に切り替えながら並行動作させる。大抵の場合、マルチスレッドプロセッサ３０では、クロック単位で複数のスレッドが切り替わるのに対し、メモリバス２１やＩ／Ｏバス２３に接続されている外部資源にはクロック単位での切り替えができない。したがって、外部資源へのアクセスの競合が発生した場合には、例えば優先度の低いスレッドが、アクセスを待たされることとなる。
【００１８】
ここで、２つのスレッド（スレッドＡ及びスレッドＢ）が１クロック毎に切り替わりながら動作する場合において、２つのスレッドがほぼ同時にメモリへのデータリード要求を発行する例を図６に示す。ここでスレッドＡを第１のスレッド、スレッドＢを第２のスレッドとする。図６に示す例において、ディスパッチユニット３１は、第１のスレッド及び第２のスレッドの実行権を、１クロック毎に交互に切り替える。
【００１９】
時刻Ｔ１において、第１のスレッドがメモリリード要求（Ｑ１）を発生させる。この時点で他のバスアクセスは行われていないため、第１のスレッドがバスアクセス権を獲得し、バスアクセス（Ｑ１）を開始する。
時刻Ｔ２において、第２のスレッドがメモリリード要求（Ｑ２）を発生させる。ここで、時刻Ｔ２ではバスアクセス（Ｑ１）が実行中のため、第２のスレッドはバスアクセス権の獲得を待つ。
時刻Ｔ３において、バスアクセス（Ｑ１）が終了し、バスアクセス権が開放される。ここで第２のスレッドがバスアクセス権を獲得し、バスアクセス（Ｑ２）を開始する。
時刻Ｔ４において、バスアクセス（Ｑ２）が終了する。
【００２０】
ここで、第１のスレッドの処理時間Ｌ１は、第１のスレッドのデータリード要求が発生したＴ１からデータリードが終了するＴ３までである。これは、データリードが保留されないため待ち時間がなく、バスアクセス（Ｑ１）を行う時間と等しい。一方、第２のスレッドの処理時間Ｌ２は、第２のスレッドのデータリード要求が発生したＴ２から、バスアクセス（Ｑ１）が終了するＴ３まではシステムバスの解放待ちである。その後、バスアクセス（Ｑ１）によって占有されていたシステムバスが、Ｔ３において解放され、バスアクセス（Ｑ２）が開始する。すなわち、バスアクセス権獲得を保留されたＴ２〜Ｔ３の時間だけ、第２のスレッドの処理時間が長くなる。
【００２１】
次に、３つのスレッド（スレッドＡ、スレッドＢ、及びスレッドＣ）がメモリアクセスを行う場合の例を図７に示す。ここでスレッドＡを第１のスレッド、スレッドＢを第２のスレッド、スレッドＣを第３のスレッドとする。スレッドの優先度は、第１のスレッド＞第２のスレッド＞第３のスレッドとする。
【００２２】
時刻Ｔ１において、第１のスレッドがメモリリード要求（Ｑ１）を発行する。第１のスレッドは即座にバスアクセス権を獲得し、バスアクセス（Ｑ１）を開始する。時刻Ｔ２において、第２のスレッドがメモリリード要求（Ｑ２）を発行する。しかし、時刻Ｔ２ではバスアクセス（Ｑ１）が実行中であり、第２のスレッドはバスアクセス権が獲得できず、メモリリード要求（Ｑ２）は保留される。時刻Ｔ３において、第３のスレッドがメモリリード要求（Ｑ３）を発行する。しかし、時刻Ｔ３ではバスアクセス（Ｑ１）が実行中であり、第３のスレッドはバスアクセス権が獲得できず、メモリリード要求（Ｑ３）は保留される。
【００２３】
時刻Ｔ４において、第１のスレッドによるバスアクセス（Ｑ１）が終了する。ここで第２のスレッドと第３のスレッドのバスアクセスの優先度の比較を行う。これにより、優先度が高い第２のスレッドがアクセス権を獲得し、バスアクセス（Ｑ２）が開始する。第３のスレッドのメモリリード要求（Ｑ３）は、引き続き保留される。時刻Ｔ５において、第１のスレッドが新たなメモリリード要求（Ｑ４）を発行する。メモリリード要求（Ｑ４）は、バスアクセス権獲得まで保留される。
【００２４】
時刻Ｔ６において、第２のスレッドによるバスアクセス（Ｑ２）が終了する。ここで、第１のスレッドと第３のスレッドのバスアクセスの優先度の比較が行われる。これにより、優先度が高い第１のスレッドがアクセス権を獲得し、バスアクセス（Ｑ４）が開始する。第３のスレッドのメモリリード要求（Ｑ３）は、引き続き保留される。時刻Ｔ７において、バスアクセス（Ｑ４）が終了する。その後、第３のスレッドのバスアクセス（Ｑ３）が開始される。時刻Ｔ８において、バスアクセス（Ｑ３）が終了する。
【００２５】
この場合、図７に示すように動作時間Ｌ１〜Ｌ４は、それぞれのバスの空き待ち時間によってそれぞれ異なる。また、上述した第３のスレッドのように、バスアクセスが要求順序と異なる順序で実行されることにより、スレッドの動作が保留され続ける場合がある。例えば、第１のスレッド及び第２のスレッドのバスアクセスが交互に繰り返されると、第３のスレッドのバスアクセスが保留され続けることとなる。
【００２６】
特許文献１には、スレッドの実行時間をカウントし、カウントされた時間がスレッドの割り当て時間に達したときに、実行するスレッドを切り替える。これによると、スレッドの実行時間に基づいてスレッドの切り替えを制御することにより、スレッド切り替え時のオーバーヘッドを短縮し、プロセッサの稼働率を向上させる。
【００２７】
特許文献２には、プロセッサにおけるスレッドの切り替えを、ハードウェアレジスタを用いて行う。これによれば、ハードウェアレジスタは、ソフトウェアスレッド切り替え制御よりはるかに高速に動作することができ、プロセッサの性能を改善することができる。
【先行技術文献】
【特許文献】
【００２８】
【特許文献１】特開２００７−３１７１７１号公報
【特許文献２】特表２００１−５２１２１５号公報
【非特許文献】
【００２９】
【非特許文献１】"MIPS32 34K", MIPS Technologies, Inc, [online], [平成２２年４月２２日検索], インターネット＜ＵＲＬ：http://www.mips.com/media/files/MIPS32_34K_410.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【００３０】
図６に示したように、マルチスレッドプロセッサのアクセス対象が共有資源の場合には、あるスレッドの処理が他スレッド処理に起因して保留され、処理時間が伸びる場合がある。また図７に示したように、外部資源へのアクセスの競合に起因してスレッドの処理が保留される場合がある。ワーストケースでは、特定のスレッドの処理が保留され続け、該スレッドの動作時間が無限大となる。そのため、ワーストケースの動作時間を見積もることが不可能となる。
特許文献１及び特許文献２は、複数のスレッドによる外部資源へのアクセスの競合により、特定のスレッドの実行が保留されるのを解消するものではない。
【課題を解決するための手段】
【００３１】
本発明の第１の態様にかかるプロセッサ装置は、少なくとも第１及び第２のプログラムを含む複数のプログラムを切り替えて実行するプロセッサ装置であって、前記複数のプログラムによる外部資源へのアクセスを制御するコントロールユニットと、前記複数のプログラムの実行権を制御するディスパッチユニットを備え、前記ディスパッチユニットは、少なくとも前記コントロールユニットによる前記第１のプログラムにかかる外部資源との第１のアクセスの開始から、前記第１のアクセスの終了後に引き続き行われる前記第２のプログラムにかかるアクセスの開始後までの間、前記第１のプログラムの実行を停止させる。
【００３２】
本発明の第２の態様にかかるプロセッサ装置は、少なくとも第１及び第２のプロセッサを備えるプロセッサ装置であって、前記プロセッサ装置は、少なくとも前記第１のプロセッサにかかる外部資源との第１のアクセスの開始から、前記第１のアクセスの終了後に引き続き行われる第２のプロセッサの前記外部資源との第２のアクセスの開始後までの間、前記第１のプロセッサの実行を停止させる。
【００３３】
本発明の第３の態様にかかるプロセッサ装置の制御方法は、少なくとも第１及び第２のプログラムを含む複数のプログラムを切り替えて実行するプロセッサ装置の制御方法であって、プロセッサ装置は、前記複数のプログラムによる外部資源へのアクセスを制御するコントロールユニットと、前記複数のプログラムの実行権を制御するディスパッチユニットを備え、前記ディスパッチユニットは、少なくとも前記コントロールユニットによる前記第１のプログラムにかかる外部資源との第１のアクセスの開始から、前記第１のアクセスの終了後に引き続き行われる前記第２のプログラムにかかるアクセスの開始後までの間、前記第１のプログラムの実行を停止させる。
【００３４】
本発明の第４の態様にかかるプロセッサ装置の制御方法は、少なくとも第１及び第２のプロセッサを備えるプロセッサ装置の制御方法であって、前記プロセッサ装置は、少なくとも前記第１のプロセッサにかかる外部資源との第１のアクセスの開始から、前記第１のアクセスの終了後に引き続き行われる第２のプロセッサの前記外部資源との第２のアクセスの開始後までの間、前記第１のプロセッサの実行を停止させる。
【００３５】
これにより、複数のスレッドによる外部資源へのアクセスの競合に起因して、特定のプログラムの実行が保留され続けるのを回避することができる。
【発明の効果】
【００３６】
プロセッサにおいて、競合しうるプログラムが複数実行されている場合であっても、特定のプログラムがバスアクセスを占有するのを回避することができる。
【図面の簡単な説明】
【００３７】
【図１】実施の形態１にかかるプロセッサの概略を示すブロック図である。
【図２】実施の形態１にかかるスレッド時間管理カウンタの詳細図である。
【図３】実施の形態１にかかるプロセッサの処理のタイミング図である。
【図４】実施の形態１にかかるプロセッサの処理のタイミング図である。
【図５】関連するマルチスレッドプロセッサのブロック図である。
【図６】関連するマルチスレッドプロセッサの処理のタイミング図である。
【図７】関連するマルチスレッドプロセッサの処理のタイミング図である。
【発明を実施するための形態】
【００３８】
実施の形態１
以下、図面を参照して本発明の実施の形態について説明する。図１に、本実施の形態にかかるマルチスレッドプロセッサ１０のブロック図を示す。なお、以下で説明する実施の形態について、図５にかかるマルチスレッドプロセッサと同一の構成要素に対しては同一の符号を付加し、適宜、該構成要素に関する説明を省略する。
【００３９】
マルチスレッドプロセッサ１０は、コンテキストブロック１１と、ディスパッチユニット１２と、メモリコントロールユニット１３と、バスコントロールユニット１４と、コプロセッサ１５と、ＡＬＵ１６と、スレッド時間管理カウンタ１７を備える。またプロセッサ１０には、プロセッサ全体クロック発振器１８と、ＲＡＭ１９と、ＲＯＭ２０と、メモリバス２１と、Ｉ／Ｏ２２と、Ｉ／Ｏバス２３が接続されている。なお、マルチスレッドプロセッサ１０において、命令の実行はスレッド単位で処理を行うものとするが、これに限定されない。例えば、プロセス単位やタスク単位であってもよい。
【００４０】
マルチスレッドプロセッサ１０は、複数のコンテキストブロック１１を備える。各コンテキストブロック１１は、スレッドの設定情報を格納しており、複数のスレッドのいずれか一つと対応関係にある。コンテキストブロック１１は、ディスパッチユニット１２によるスレッドの切り替えに応じて、切り替わりながら動作する。
【００４１】
ディスパッチユニット１２は、動作中のスレッドについてクロックを生成して出力するスレッド動作クロック生成器２７と、特定スレッドの動作を一時停止させるスレッド一時停止器２８とを備える。スレッド動作クロック生成器２７と、スレッド一時停止器２８については後に詳述する。
ディスパッチユニット１２は、各スレッドの実行権を制御する。ディスパッチユニット１２により実行権を与える。実行権が与えられたスレッドのみが動作を実行することができる。なお、ディスパッチユニット１２は、複数のスレッドに対し順番に実行権を与える。
【００４２】
メモリコントロールユニット１３は、動作中のスレッドがメモリバス２１を介して、外部資源であるＲＡＭ１９やＲＯＭ２０にアクセスするのを制御する。バスコントロールユニット１４は、複数のスレッドにかかるデータについて、プロセッサ１０からＩ／Ｏバス２３を介して、外部資源であるＩ／Ｏ２２に対し入出力するのを制御する。なお、プロセッサ１０とＩ／Ｏ２２などの外部資源とを接続する動作のクロックを、バス動作クロック６０とする。
【００４３】
スレッド動作クロック生成器２７は、該当スレッドが動作状態である場合にはスレッド動作クロック７００〜７０３を生成し、スレッド動作クロックをスレッド時間管理カウンタ１７に出力する。このとき、スレッド動作クロック７００〜７０３の位相は、プロセッサ全体クロック５０と同位相とする。該当スレッドが停止状態である場合には、該当スレッドのスレッド動作クロック７００〜７０３を生成しない。なお、本例でのスレッド動作クロック７００〜７０３は、プロセッサ全体クロック５０と異なるクロックで動作するユニットが存在する場合の例である。マルチスレッドプロセッサ１０の場合には、コプロセッサ１５のように、スレッドに同期して動作するユニットが存在するため必要となる。
【００４４】
スレッド時間管理カウンタ１７は、スレッド数と同数のカウンタ１００〜１０３を備える。スレッド時間管理カウンタ１７は、バスなどの共有資源を使用せずにディスパッチユニット１２に接続される。スレッド時間管理カウンタ１７には、プロセッサ全体クロック発振器１８からマルチスレッドプロセッサ１０の全体に供給されるプロセッサ全体クロック５０と、ディスパッチユニット１２からのスレッド動作クロック７００〜７０３と、バス動作クロック６０が入力される。
【００４５】
図２に、スレッド時間管理カウンタ１７の詳細図を示す。スレッド時間管理カウンタ１７のカウンタ数はスレッド数と同一である。ここでカウンタはスレッド数と同様に４つの場合の例を示す。
スレッド時間管理カウンタ１７において、カウンタ１００〜１０３は、それぞれに対応するカウント値制御信号２００〜２０３によって、カウント値の設定および動作開始及び停止を制御される。カウンタ１００〜１０３のカウント源は、アクセスする資源の動作クロックから選択して使用できる。本例では、プロセッサ全体クロック５０、バス動作クロック６０、該当スレッド動作クロック７００〜７０３の中から選択可能である。カウンタ１００〜１０３のカウント源は、それぞれに対応するカウント源切り替え信号３００〜３０３により切り替えることができる。該当スレッド動作クロック７００〜７０３は、スレッド動作クロック生成器２７から出力される信号である。また、カウンタ１００〜１０３は、値が設定されると、対応するスレッドのスレッド停止要求信号４００〜４０３をスレッド一時停止器２８に出力する。以後、カウント源切り替え信号３００〜３０３で選択されたクロックに同期してカウンタ値をデクリメントし、カウンタ値が０になった時点でスレッド停止要求信号４００〜４０３の出力を停止する。
【００４６】
スレッド一時停止器２８は、スレッド時間管理カウンタ１７から出力されたスレッド停止要求信号に基づいて、該当スレッドを個別に停止させる。例えばスレッド一時停止器２８は、該当スレッドを停止する制御信号を生成する。ディスパッチユニット１２は、生成された制御信号に基づき、該当スレッドに実行権を与えないよう動作する。ただし、スレッド時間管理カウンタ１７から、スレッド停止要求信号４００〜４０３がスレッド一時停止器２８に出力されている場合であっても、メモリコントロールユニット１３やバスコントロールユニット１４の外部共有資源や、演算を継続可能なコプロセッサ１５は動作を継続するものとする。
【００４７】
コプロセッサ１５は、マルチスレッドプロセッサ１０において、コンテキストブロック１１と同数備えられている。ＡＬＵ１６は、四則演算や論理演算などの処理を行う。ＡＬＵ１６は複数のスレッドの共有資源である。プロセッサ全体クロック発振器１８は、マルチスレッドプロセッサ１０の全体にかかるプロセッサ全体クロック５０を生成する。
【００４８】
ＲＡＭ１９は、読み込み及び書き込みが可能なメモリである。ＲＯＭ２０は、読み込みが可能なメモリである。メモリバス２１は、マルチスレッドプロセッサ１０と、ＲＡＭ１９及びＲＯＭ２０を接続する経路である。Ｉ／Ｏ２２は、マルチスレッドプロセッサ１０の外部に設けられた機器であり、例えばディスプレイや、キーボード等である。Ｉ／Ｏバス２３は、マルチスレッドプロセッサ１０とＩ／Ｏ２２を接続する経路である。ＲＯＭ２０やＲＡＭ１９やＩ／Ｏ２２はスレッド間で共有資源である。
【００４９】
次に、実施の形態１にかかるマルチスレッドプロセッサ１０の動作について説明する。
ここで、マルチスレッドプロセッサ１０は第１及び第２のスレッドを含む複数のスレッドを切り替えて実行するマルチスレッドプロセッサとする。マルチスレッドプロセッサ１０では、前述したスレッド時間管理カウンタ１７を用い、アクセス対象の外部資源のクロックに同期してスレッドの動作を管理する。これにより各スレッドが並列して実行され、メモリバス２１やＩ／Ｏバス２３などのシステムバスへのアクセスの競合が想定されるパターンでのスレッド動作を行う。なお、バスアクセスにおけるスレッドの優先度は、第１のスレッド＞第２のスレッドとする。
【００５０】
第１のスレッドは、バスアクセスを要求後に一定時間を経過するまで、バスアクセスが完了しても次処理を行わず待機する。第１のスレッドは、一度バスアクセスを要求しバスアクセスを開始した後は、一定時間次のバスアクセスを要求しない。この一定時間とは、第２のスレッドがバスアクセスを開始するまでの時間である。すなわち、本実施の形態では、第１のスレッドにかかるバスアクセスと、第２のスレッドにかかるバスアクセスとの競合が、１回発生することを見込んでいる。
【００５１】
最初に、第１のスレッドにかかるアクセス要求と、第２のスレッドにかかるアクセス要求が競合する。ここで、優先度が高い第１のスレッドにかかるバスアクセスが実行される。第２のスレッドにかかるアクセス要求は保留される。その後、第１のスレッドにかかるバスアクセスが終了する。
【００５２】
ここで、第２のスレッドにかかるバスアクセスが開始されるまで、第１のスレッドでは次処理を行わないよう、スレッド動作を停止する。その後、第２のスレッドにかかるバスアクセスが開始する。第２のスレッドにかかるバスアクセスの開始後に、第１のスレッドの動作を開始する。
【００５３】
これにより、第１のスレッドにかかるアクセス要求は、第２のスレッドにかかるバスアクセスの開始後となる。このとき、すでに開始している第２のスレッドにかかるバスアクセスは、第１のスレッドにかかるアクセス要求により割り込まれない。そのため、第１のスレッドにかかるバスアクセスが繰り返し実行されることによって、第２のスレッドのバスアクセスが保留され続けることはない。
【００５４】
（変形例１）
マルチスレッドプロセッサ１０は、３つのスレッドを切り替えて実行するマルチスレッドプロセッサとする。マルチスレッドプロセッサ１０では、前述したスレッド時間管理カウンタ１７を用い、アクセス対象の外部資源のクロックに同期してスレッドの動作を管理する。これにより各スレッドが並列して実行され、システムバスへのバスアクセスの競合が想定されるパターンでのスレッド動作を行う。なお、バスアクセスにおけるスレッドの優先度は、第１のスレッド＞第２のスレッド＞第３のスレッドとする。
【００５５】
第１のスレッドは、バスへのアクセス要求後に一定時間を経過するまで、アクセスが完了しても次処理を行わず待機する。また第１のスレッドは、バスへのアクセスを要求後、一定時間、次のアクセスを要求しない。この一定時間とは、少なくとも第１のスレッド以外のスレッドのそれぞれが、バスアクセスを開始するまでの時間である。本変形例では、各スレッドによるバスアクセス時に、互いに他スレッドとの競合が１回ずつ発生することを見込んでいる。
【００５６】
最初に、第１のスレッドにかかるアクセス要求と、第１のスレッド以外のスレッドにかかるアクセス要求が競合する。ここで、優先度が高い第１のスレッドにかかるバスアクセスが実行される。第１のスレッド以外のアクセス要求は保留される。その後、第１のスレッドにかかるバスアクセスが終了する。
【００５７】
ここで、第１のスレッドでは次処理を行わないよう、スレッド動作を停止する。その後、保留されていたアクセス要求の優先度が比較される。すなわち、第２のスレッドと第３のスレッドの優先度が比較され、優先度の高い第２のスレッドのバスアクセスが実行される。第３のスレッドのアクセス要求は保留される。その後、第２のスレッドにかかるバスアクセスが終了する。
【００５８】
ここで、第２のスレッドでは次処理を行わないよう、スレッド動作を停止する。その後、第３のスレッドにかかるバスアクセスが開始する。マルチスレッドプロセッサ１０の有するスレッド数は３であり、第３のスレッドの開始により、それぞれのスレッドが、バスへのアクセスを一度ずつ開始した状態となる。第１のスレッド及び第２のスレッドは、第３のスレッドにかかるバスアクセスの開始後に次処理を開始する。
【００５９】
このとき、すでに開始している第３のスレッドにかかるバスアクセスは、第１のスレッド及び第２のスレッドにかかるアクセス要求により割り込まれない。そのため、第１のスレッド及び第２のスレッドにかかるバスアクセスが繰り返し実行されることによって、第３のスレッドのバスアクセスが保留され続けることはない。すなわち、各スレッドが最悪でも順次１回ずつのバスアクセスを行うことが可能となる。そのため、特定スレッドが延々とバスアクセス権を待つことがなく、最大処理時間を想定することが可能となる。
【００６０】
（変形例２）
マルチスレッドプロセッサ１０は、３つのスレッドを切り替えて実行するマルチスレッドプロセッサとする。第１のスレッドは、バスアクセスを要求後に一定時間を経過するまで、バスアクセスが完了しても次処理を行わず待機する。また第１のスレッドは、バスアクセスを要求後、一定時間、次のバスアクセスを要求しない。この一定時間とは、少なくとも他のスレッドが各１回ずつのバスアクセスを行うことが可能な時間である。すなわち、１回のバスアクセス時間を（１回のバスアクセス時間×競合しうるスレッド数）と規定し、この規定時間が経過するまでは次のバスアクセスを行わずに他スレッドのためにバスを空けておく。
【００６１】
本変形例の動作の概略を図３に示す。なお、プロセッサ１０は３つのスレッド（スレッドＡ、スレッドＢ、スレッドＣ）が並行して動作するものとする。ここでスレッドＡを第１のスレッド、スレッドＢを第２のスレッド、スレッドＣを第３のスレッドとする。スレッドの優先度は、第１のスレッド＞第２のスレッド＞第３のスレッドとする。
【００６２】
まず、規定時間Ｌ１〜Ｌ４を設定する。競合を発生しうるスレッドが1回ずつ共有資源をアクセスする時間の合計（１回のバスアクセス時間×競合しうるスレッド数）＝Ｌ１＝Ｌ２＝Ｌ３＝Ｌ４とする。
【００６３】
時刻Ｔ１において、第１のスレッドがメモリリード要求（Ｑ１）を発行し、バスアクセス（Ｑ１)が開始される。時刻Ｔ２において、第２のスレッドがメモリリード要求（Ｑ２）を発行するが保留される。時刻Ｔ３において、第３のスレッドがメモリリード要求（Ｑ３）を発行するが保留される。
【００６４】
時刻Ｔ４において、バスアクセス（Ｑ１）が終了し、保留されている要求（Ｑ２）と（（Ｑ３）のうち、優先度が高いバスアクセス（Ｑ２）が開始される。
ここで、バスアクセス（Ｑ１）が終了した第１のスレッドは、規定時間Ｌ１経過まで次の処理を行わない。次のバスアクセス（Ｑ４）を要求することも無いため、保留されている要求（Ｑ２）および（Ｑ３）との競合を発生させない。
【００６５】
時刻Ｔ５において、バスアクセス（Ｑ２）が終了するが、規定時間Ｌ２経過まで次処理を行わない。時刻Ｔ６において、バスアクセス（Ｑ３）が終了するが、規定時間Ｌ３経過まで次処理を行わない。
【００６６】
ここで、時刻Ｔ６は、第１のスレッドの規定時間Ｌ１完了時刻である。以後、第１のスレッドは動作を再開する。時刻Ｔ７は、第２のスレッドの規定時間Ｌ２完了時刻である。以後、第２のスレッドは動作を再開する。時刻Ｔ８は、第３のスレッドの規定時間Ｌ３完了時刻である。以後、第３のスレッドは動作を再開する。
【００６７】
時刻Ｔ９において、動作を再開した第１のスレッドがバスアクセス（Ｑ４）を要求し、バスアクセスがＴ１０に終了する。ここでは第２のスレッドや第３のスレッドは別処理を行っており第１のスレッドとの競合を発生させることは無いが、第１のスレッドは規定時間Ｌ４を経過するまで、Ｌ１期間、Ｌ２期間、Ｌ３期間と同様に、次処理を行わない。
【００６８】
時刻Ｔ１１において、規定時間Ｌ４が終了し、第１のスレッドが処理を再開する。
【００６９】
さらに詳細な動作例を図４に示す。なおマルチスレッドプロセッサ１０は、２つのスレッド（スレッドＡ、スレッドＢ）が並行して動作しているものとして説明する。ここでスレッドＡを第１のスレッド、スレッドＢを第２のスレッドとする。
【００７０】
時刻Ｔ１において、第１のスレッドのメモリリード要求（Ｑ１）の発行に伴い、カウント源切り替え信号３００およびカウンタ１００に対する設定を行う。カウンタ１００の設定は以下のように行う。
【００７１】
本例でのアクセス対象として、バス動作クロック６０に同期してアクセスを行うメモリを例とする。この場合、カウント源切り替え信号３００としてバス動作クロック６０を選択する。またカウンタ１００に、１回のバスアクセス時間（本例では９クロック）に競合しうるスレッド数（本例では２）を乗じた、１８を設定する。
【００７２】
カウンタ１００は、時刻Ｔ２において、第１のスレッドを停止させるためのスレッド停止要求信号４００をアクティブ状態にして出力する。アクティブ状態のスレッド停止要求信号４００を受信したスレッド一時停止器２８は、第１のスレッドを停止する制御信号を生成する。ディスパッチユニット１２は、該制御信号に基づき、第１のスレッドに実行権を与えないよう動作する。
【００７３】
以後、カウンタ１００は、カウント源切り替え信号３００に従いバス動作クロック６０に同期してデクリメントされる。カウンタ１００は、カウンタ１００の値がゼロになるまで、スレッド停止要求信号４００をアクティブ状態の出力を継続する。
【００７４】
また、時刻Ｔ２では、他のバスアクセスは行われていないため、第１のスレッドがバスアクセス権を獲得しバスアクセス（Ｑ１）が開始される。
時刻Ｔ３において、第２のスレッドのメモリリード要求（Ｑ２）の発行に伴い、時刻Ｔ１での動作と同様に、カウント源切り替え信号３０１およびカウンタ１０１が設定される。
【００７５】
ここでアクセス要求（Ｑ２）は、アクセス要求（Ｑ１）と同一資源に対するアクセス要求である。したがって、カウント源切り替え信号３０１及びカウンタ１０１の設定内容は、カウント源切り替え信号３００及びカウンタ１００と同様である。ただし既にバスアクセス（Ｑ１）が実行中のため、アクセス要求（Ｑ２）はアクセス権獲得まで保留される。
【００７６】
時刻Ｔ４において、時刻Ｔ２での動作と同様に、カウンタ１０１はスレッド停止要求信号４０１をアクティブ状態にして出力する。アクティブ状態のスレッド停止要求信号４０１を受信したスレッド一時停止器２８は、第２のスレッドを停止する制御信号を生成する。ディスパッチユニット１２は、該制御信号に基づき、第２のスレッドに実行権を与えないよう動作する。
【００７７】
以後、カウンタ１０１は、カウント源切り替え信号３０１に従いバス動作クロック６０に同期してデクリメントされる。カウンタ１０１は、カウンタ１０１の値がゼロになるまで、スレッド停止要求信号４０１をアクティブ状態の出力を継続する。
【００７８】
また、時刻Ｔ４において、既にシステムバスがバスアクセス（Ｑ１）で占有されているため、バスアクセス（Ｑ２）はバスアクセス（Ｑ１）が終了するまで保留される。
【００７９】
時刻Ｔ５において、バスアクセス（Ｑ１）が完了し、結果が第１のスレッドに返却される。ただし、スレッド停止要求信号４００がアクティブ状態のため、第１のスレッドは停止状態を継続する。
【００８０】
時刻Ｔ６において、第２のスレッドがアクセス権を獲得し、バスアクセス（Ｑ２）が開始される。時刻Ｔ７において、第２のスレッドによるバスアクセスが終了する。ただし、スレッド停止要求信号４０１がアクティブ状態のため、第２のスレッドは停止状態を継続する。
【００８１】
時刻Ｔ８において、カウンタ１００のカウントが満了し、スレッド停止要求信号４００が非アクティブ状態となる。これにより、スレッド一時停止器２８は第１のスレッドを停止させる制御を解除し、ディスパッチユニット１２は第１のスレッドに実行権を適宜与えるよう動作する。
【００８２】
時刻Ｔ９において、時刻Ｔ８と同様にカウンタ１０１のカウントが満了し、スレッド停止要求信号４０１が非アクティブ状態となる。これにより、スレッド一時停止器２８は第２のスレッドを停止させる制御を解除し、ディスパッチユニット１２は第２のスレッドに実行権を適宜与えるよう動作する。これにより、共有バスアクセス時に、先にバスアクセス権を獲得した第１のスレッドが先に処理を進めることも無く、カウンタ１００及び１０１に設定した同一の時間で２つのスレッドのバスアクセスを終了することができる。
上記ではシステムバスに接続されバス動作クロック６０で動作するメモリの場合を例としたが、プロセッサ１０構成によっては、プロセッサ全体クロック５０やスレッド動作クロック７００〜７０３に同期して動作するユニットであっても、カウント源切り替え信号３００〜３０３を適切に設定することで、同様の動作が可能である。
【００８３】
この結果、各スレッドは連続してバスアクセスを行うことがなくなり、最悪でも順次1回ずつのバスアクセスを行うことが可能となる。したがって、特定スレッドが延々とバスアクセス権を待つことがなく、最大処理時間を想定することが可能となる。また、先にバスアクセスを終えたスレッドも、想定した時間が経過するまで以後の処理を行わないため、最小処理時間を明確化できる。
【００８４】
ここで、各スレッドにおける以後の処理を行わないためのウェイト処理を、スレッド停止によって実行するため、さらなる競合を引き起こさない。もし本発明を適用せず、ウェイト処理をループ処理などで実現した場合には、命令実行のためにメモリからの命令フェッチなどを発生させるため、さらなる競合要因となることが予想される。また、バスを空けておくことで本動作を実現するため、実際に競合が起きなくとも動作時間は変化しない。すなわち、各スレッドに搭載するソフトウェアをモジュール単位で開発している時点から動作時間の想定および実測が可能となる。この結果、本発明適用前に比べてバスアクセス時の時間（Typ.）が悪化するという弊害はあるが、時間（Min/Max）をモジュール開発時点から明確化できる。
【００８５】
実施の形態２
複数の独立したプロセッサが外部資源を共有し、該複数のプロセッサがプログラムを実行している場合に、該複数のプロセッサからの外部資源のバスへのアクセス制御に本発明を適用した例について説明する。
【００８６】
プロセッサ２９は、第１のプロセッサと、第２のプロセッサと、第３のプロセッサを備える。ここで典型的には、複数のプロセッサは複数のＣＰＵ（Central Processing Unit）コアとして実現される。典型的には、プロセッサ２９はマルチコアプロセッサである。
【００８７】
第１のプロセッサは、第１のプロセッサがバスに対するアクセスを終了した後、一定時間を経過するまで、次処理を行わず待機する。
【００８８】
この一定時間は、プロセッサ２９の備える複数のプロセッサの個数が２である場合に、第２のプロセッサがバスアクセスを開始するまでの時間とする。また一定時間は、プロセッサ２９の備える複数のプロセッサの個数が３以上である場合に、第１のプロセッサ以外のプロセッサのそれぞれがアクセスを開始するまでとしても良い。また一定時間は、他のプロセッサが各１回ずつのバスアクセスを行うことが可能な時間としても良い。すなわち１回のバスアクセス時間を（１回のバスアクセス時間×競合しうるスレッド数）と規定しても良い。
本変形例では、１のプロセッサによるバスアクセス時に、互いに他プロセッサとの競合が１回ずつ発生することを見込んでいる。
【００８９】
このようにして、複数のプロセッサが独立してプログラムを実行し、１つのプロセッサとして動作するプロセッサにおいて、発明を適用することができる。その結果、特定のプロセッサによるバスアクセスが連続して発生せず、バスアクセスを占有することはない。
【００９０】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。前述した例ではシステムバスに接続されたメモリを例としたが、本発明はメモリに限らず、システムバスに接続されたＩ／Ｏなどであっても同様に適用可能である。
【符号の説明】
【００９１】
１０    マルチスレッドプロセッサ
１１    コンテキストブロック
１２    ディスパッチユニット
１３    メモリコントロールユニット
１４    バスコントロールユニット
１５    コプロセッサ
１６    ＡＬＵ
１７    スレッド時間管理カウンタ
１８    プロセッサ全体クロック発振器
１９    ＲＡＭ
２０    ＲＯＭ
２１    メモリバス
２２    Ｉ／Ｏ
２３    Ｉ／Ｏバス
２４    プログラムカウンタ
２５    システムレジスタ
２６    汎用レジスタ
２７    スレッド動作クロック生成器
２８    スレッド一時停止器
２９    プロセッサ
３０    マルチスレッドプロセッサ
３１    ディスパッチユニット
１００〜１０３    カウンタ
２００〜２０３    カウント値制御信号
３００〜３０３    カウント源切り替え信号
４００〜４０３    スレッド停止要求信号
５０    プロセッサ全体クロック
６０    バス動作クロック
７００〜７０３    該当スレッド動作クロック
【図１】
2011248454.tif 000003
【図２】
2011248454.tif 000004
【図３】
2011248454.tif 000005
【図４】
2011248454.tif 000006
【図５】
2011248454.tif 000007
【図６】
2011248454.tif 000008
【図７】
2011248454.tif 000009