(57)【要約】【課題】マルチスレッドプロセッサにおいて各スレッドの命令の処理時間を保証可能にするスレッド調停システムを提供する。【解決手段】プロセッサの共有リソースは、各スレッドに含まれる特定命令によって時分割に占有され、前記各スレッドは、前記各スレッドに順次排他的に割り当てられるタイムスロットにおいて前記特定命令の上流ステージが処理されることによって前記共有リソースを使用できる状態になり、その後、複数のタイムスロットにわたって前記特定命令の下流ステージの処理のために前記共有リソースを占有し、スレッド調停システムは、前記複数のスレッドのうち、第１スレッドが前記共有リソースの使用を終了したときに、前記第１スレッドと前記第１スレッドとは異なる第２スレッドとがそれぞれ前記共有リソースを使用できる状態にある場合、前記第１スレッドよりも先に前記第２スレッドに前記共有リソースを割り当てる。【選択図】図１
2012048399.tif 000002
【特許請求の範囲】
【請求項１】
各々がコンピュータプログラムに対応する複数のスレッドを、共有リソースを用いて実行するプロセッサにおいて、前記複数のスレッドに前記共有リソースを割り当てるための調停を行うスレッド調停システムであって、
前記プロセッサにおいて、
前記共有リソースは、前記各スレッドに含まれる特定命令によって時分割に占有され、
前記各スレッドは、前記各スレッドに順次排他的に割り当てられるタイムスロットにおいて前記特定命令の上流ステージが処理されることによって前記共有リソースを使用できる状態になり、その後、複数のタイムスロットにわたって前記特定命令の下流ステージの処理のために前記共有リソースを占有し、
前記スレッド調停システムは、
前記複数のスレッドのうち、第１スレッドが前記共有リソースの使用を終了したときに、前記第１スレッドと前記第１スレッドとは異なる第２スレッドとがそれぞれ前記共有リソースを使用できる状態にある場合、前記第１スレッドよりも先に前記第２スレッドに前記共有リソースを割り当てる
スレッド調停システム。
【請求項２】
前記スレッド調停システムは、
前記複数のスレッドのうち、第１スレッドが前記共有リソースの使用を終了したときに、２つ以上のスレッドがそれぞれ前記共有リソースを使用できる状態にある場合、前記２つ以上のスレッドのうち最も先に前記共有リソースを使用できる状態になっていたスレッドの特定命令を下流ステージへディスパッチする
請求項１に記載のスレッド調停システム。
【請求項３】
前記スレッド調停システムは、
前記複数のスレッドのうち、第１スレッドが前記共有リソースを使用中に、前記第１スレッドとは異なる第２スレッドが前記共有リソースを使用できる状態になった場合、前記第１スレッドの後続する特定命令を、前記第２スレッドが前記共有リソースの使用を終了した後に、下流ステージへディスパッチする
請求項１に記載のスレッド調停システム。
【請求項４】
前記スレッド調停システムは、
前記各スレッドに優先度を定め、
前記複数のスレッドのうち、第１スレッドが前記共有リソースを使用中に、前記第１スレッドよりも優先度が高い第２スレッドが前記共有リソースを使用できる状態になった場合、前記第１スレッドによる前記共有リソースの使用を中止させ、前記第２スレッドの前記特定命令を下流ステージへディスパッチし、
前記第２スレッドが前記共有リソースの使用を終了した後に、前記第１スレッドに前記共有リソースの使用を再開させる
請求項１に記載のスレッド調停システム。
【請求項５】
請求項１から４のいずれか１項に記載のスレッド調停システムを備えるプロセッサ。
【請求項６】
請求項５に記載のプロセッサを備え、前記複数のスレッドのうち、第１スレッドにて映像記録処理を行い、第２スレッドにて映像再生処理を行う映像記録再生装置。
【請求項７】
各々がコンピュータプログラムに対応する複数のスレッドを、共有リソースを用いて実行するプロセッサにおいて、前記複数のスレッドに前記共有リソースを割り当てるための調停を行うスレッド調停方法であって、
前記プロセッサにおいて、
前記共有リソースは、前記各スレッドに含まれる特定命令によって時分割に占有され、
前記各スレッドは、前記各スレッドに順次排他的に割り当てられるタイムスロットにおいて前記特定命令の上流ステージが処理されることによって前記共有リソースを使用できる状態になり、その後、複数のタイムスロットにわたって前記特定命令の下流ステージの処理のために前記共有リソースを占有し、
前記スレッド調停方法は、
前記複数のスレッドのうち、第１スレッドが前記共有リソースの使用を終了したときに、前記第１スレッドと前記第１スレッドとは異なる第２スレッドとがそれぞれ前記共有リソースを使用できる状態にある場合、前記第１スレッドよりも先に前記第２スレッドに前記共有リソースを割り当てる
スレッド調停方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッド調停システムに関し、特にマルチスレッドプロセッサに用いられるスレッド調停システムに関する。
【背景技術】
【０００２】
従来、複数のスレッドを擬似並列的に処理できるマルチスレッドプロセッサが提案されている（例えば、特許文献１を参照）。スレッドとは、コンピュータシステムにおいて実行される１単位の処理、またはその処理をコンピュータシステムに実行させるためのコンピュータプログラムのことを言う。スレッドの大きさ（処理量または命令数）は、プログラムの設計者によって、任意に定められる。
【０００３】
図１５は、そのようなプロセッサの構成および動作の一典型例を模式的に示す図である。このプロセッサは、ハードウェアリソース（以下では短く、リソースと言う）として、フェッチユニット、ディスパッチャ、デコーダ、演算器Ａ、演算器Ｂを備えている。各命令は、複数のステージに分割して、各ステージに対応付けられたリソースによってパイプライン処理される。
【０００４】
図１５には、３つのスレッドＰ、Ｑ、Ｒの命令Ｐ１、Ｑ１、Ｒ１、・・・の処理状況が示されている。このプロセッサでは、全ての命令の全てのステージが１単位時間で処理されるように構成され、各ステージでは、１単位時間ごとに異なるスレッドの命令が整然と処理されていく。
【０００５】
１単位時間は、例えば１クロックサイクルであってもよく、また所定の複数のクロックサイクルであってもよい。以下の説明では、１単位時間のことを一般的に１タイムスロットと言う。
【０００６】
このように構成されたプロセッサでは、プロセッサ内部のリソースを使用するためにスレッド間の競合が起こり得ないので、各スレッドからは実際の１／３の速度で動作するプロセッサを占有しているように見える。そして、各スレッドの各命令は常に確定した時間で処理が完了する。
【０００７】
このことは、複数のスレッドのそれぞれが実時間性を要求される処理を行う場合など、各スレッドの命令の処理に要する時間を保証する必要がある場合に極めて有用である。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特表２００３−５２３５６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところが、実際的には、実行ステージの処理に複数のタイムスロットを要する特定命令（例えば、除算命令）が定義され、プロセッサは、そのような特定命令の実行ステージを複数のタイムスロットにわたって処理するように構成されることがある。
【００１０】
説明のための例示として、特定命令（例えば除算命令）の上流ステージを１タイムスロットで処理し、特定命令の実行ステージを、共有リソース（例えば除算器）を用いて連続する３タイムスロットで処理するプロセッサを考える。共有リソースは、複数の特定命令によって時分割に占有される。
【００１１】
そのようなプロセッサでは、前述したプロセッサとは異なり、複数のスレッドの特定命令が、上流ステージの処理を終えて実行ステージの開始を待つ状況が生じ得る。そのような状況で、次にどのスレッドの特定命令の実行ステージを共有リソースで処理するのがよい方法なのかは必ずしも自明ではない。
【００１２】
単純な一例として、タイムスロットごとに特定命令の実行ステージを開始することが許可されるスレッドを定めておき、先行する特定命令の実行ステージが終わったときに待っている後続の特定命令のうち、そのタイムスロットで許可されるスレッドの特定命令の実行ステージを開始する方法を考えてみる。
【００１３】
図１６は、そのような考え方に基づく特定命令の実行ステージの処理状況の一例を示す図である。
【００１４】
図１６には、スレッドＰの３つの特定命令Ｐ１、Ｐ２、Ｐ３、スレッドＱの特定命令Ｑ１、およびスレッドＲの特定命令Ｒ１のそれぞれの実行ステージの処理状況が示される。特定命令の実行ステージは、上流ステージの処理が終了することで開始可能（太線）になる。実行ステージが開始可能になった特定命令は、そのスレッドの実行ステージの開始が許可されるタイムスロットが回ってきたときに共有リソースが空いている場合のみ実行中（実線の帯）になり、それまでは開始待ち（破線の帯）となる。
【００１５】
図１６の例では、タイムスロット６の終了時点で３つの特定命令Ｑ１、Ｒ１、Ｐ３が開始可能となり、演算器が空くタイムスロット７において、タイムスロット７で開始を許可されるスレッドＰの特定命令Ｐ３の実行ステージが開始される。その結果、スレッドＱの特定命令Ｑ１およびスレッドＲの特定命令Ｒ１は、いつ開始できるか不明のまま待たされ続けるという不都合が生じる。
【００１６】
つまり、一例として挙げたような、タイムスロットごとに特定命令の実行ステージを開始することが許可されるスレッドを定める方法では、各スレッドの命令の処理に要する時間を保証できないことが分かる。
【００１７】
しかしながら、各スレッドの命令の処理に要する時間を保証するための好適な方法は、従来知られていない。
【００１８】
本発明は、上記の事情に鑑みてなされたものであり、複数のスレッドを実行できるプロセッサにおいて好適に用いられ、各スレッドの命令の処理に要する時間を保証することができるスレッド調停システムを提供することを目的とするものである。
【課題を解決するための手段】
【００１９】
前記従来の課題を解決するために、本発明の１つの態様に係るスレッド調停システムは、各々がコンピュータプログラムに対応する複数のスレッドを、共有リソースを用いて実行するプロセッサにおいて、前記複数のスレッドに前記共有リソースを割り当てるための調停を行うスレッド調停システムであって、前記プロセッサにおいて、前記共有リソースは、前記各スレッドに含まれる特定命令によって時分割に占有され、前記各スレッドは、前記各スレッドに順次排他的に割り当てられるタイムスロットにおいて前記特定命令の上流ステージが処理されることによって前記共有リソースを使用できる状態になり、その後、複数のタイムスロットにわたって前記特定命令の下流ステージの処理のために前記共有リソースを占有し、前記スレッド調停システムは、前記複数のスレッドのうち、第１スレッドが前記共有リソースの使用を終了したときに、前記第１スレッドと前記第１スレッドとは異なる第２スレッドとがそれぞれ前記共有リソースを使用できる状態にある場合、前記第１スレッドよりも先に前記第２スレッドに前記共有リソースを割り当てる。
【００２０】
また、前記スレッド調停システムは、前記複数のスレッドのうち、第１スレッドが前記共有リソースの使用を終了したときに、２つ以上のスレッドがそれぞれ前記共有リソースを使用できる状態にある場合、前記２つ以上のスレッドのうち最も先に前記共有リソースを使用できる状態になっていたスレッドの特定命令を下流ステージへディスパッチしてもよい。
【００２１】
また、前記スレッド調停システムは、前記複数のスレッドのうち、第１スレッドが前記共有リソースを使用中に、前記第１スレッドとは異なる第２スレッドが前記共有リソースを使用できる状態になった場合、前記第１スレッドの後続する特定命令を、前記第２スレッドが前記共有リソースの使用を終了した後に、下流ステージへディスパッチしてもよい。
【００２２】
このような構成によれば、共有リソースを使用できる状態になっている複数のスレッドがある場合に、いずれか１つのスレッドが共有リソースを使い続けることがないので、共有リソースはすべてのスレッドに満遍なく割り当てられることになり、その結果、各スレッドの特定命令は、所定の保証時間内で処理を完了できる。
【００２３】
また、前記スレッド調停システムは、前記各スレッドに優先度を定め、前記複数のスレッドのうち、第１スレッドが前記共有リソースを使用中に、前記第１スレッドよりも優先度が高い第２スレッドが前記共有リソースを使用できる状態になった場合、前記第１スレッドによる前記共有リソースの使用を中止させ、前記第２スレッドの前記特定命令を下流ステージへディスパッチし、前記第２スレッドが前記共有リソースの使用を終了した後に、前記第１スレッドに前記共有リソースの使用を再開させてもよい。
【００２４】
このような構成によれば、最高位の優先度を持つスレッドについてのみ処理時間を保証することで、低位の優先度を持つスレッドの処理時間を保証しない代わりに、最高位の優先度を持つスレッドの特定命令に対してより短い処理時間を保証することができる。
【００２５】
また、本発明の１つの態様に係るプロセッサは、前述のスレッド調停システムを備えてもよい。
【００２６】
このような構成によれば、複数のスレッドの所要時間を保証できるプロセッサが得られる。
【００２７】
また、本発明の１つの態様に係る映像記録再生装置は、前述のプロセッサを備え、前記複数のスレッドのうち、第１スレッドにて映像記録処理を行い、第２スレッドにて映像再生処理を行ってもよい。
【００２８】
このような構成によれば、映像記録処理および映像再生処理の所要時間が正確に見積もられることから、それらの処理の所要時間の見積もりが定まらないことで生じる映像の欠落を回避する上で有効である。
【００２９】
本発明は、このようなスレッド調停システム、プロセッサ、および映像記録再生装置として実現できるだけでなく、スレッド調停方法として実現することもできる。
【発明の効果】
【００３０】
本発明に係るスレッド調停システムによれば、複数のスレッドのうち、第１スレッドが共有リソースの使用を終了したときに、前記第１スレッドと前記第１スレッドとは異なる第２スレッドとがそれぞれ前記共有リソースを使用できる状態にある場合、前記第１スレッドよりも先に前記第２スレッドに前記共有リソースを割り当てるので、前記共有リソースを使用できる状態になっている複数のスレッドがある場合に、いずれか１つのスレッドが共有リソースを使い続けることがない。
【００３１】
したがって、共有リソースはすべてのスレッドに満遍なく割り当てられることになり、その結果、各スレッドの処理に要する時間を保証できる。
【図面の簡単な説明】
【００３２】
【図１】本発明の実施の形態１に係るスレッド調停システムを備えるプロセッサの機能的な構成の一例を示すブロック図
【図２】本発明の実施の形態１に係るディスパッチャの具体的な構成の一例を示すブロック図
【図３】本発明の実施の形態１に係るディスパッチャの動作の一例を定義する状態遷移図
【図４】本発明の実施の形態１に係る特定命令の実行ステージの処理状況の一例を示す図
【図５】本発明の実施の形態２に係るスレッド調停システムを備えるプロセッサの機能的な構成の一例を示すブロック図
【図６】本発明の実施の形態２に係るディスパッチャの動作の一例を定義する状態遷移図
【図７】本発明の実施の形態２に係る特定命令の実行ステージの処理状況の一例を示す図
【図８】本発明の実施の形態３に係るスレッド調停システムを備えるプロセッサの機能的な構成の一例を示すブロック図
【図９】本発明の実施の形態３に係るディスパッチャの動作の一例を定義する状態遷移図
【図１０】本発明の実施の形態３に係る特定命令の実行ステージの処理状況の一例を示す図
【図１１】本発明の実施の形態４に係るプロセッサシステムの機能的な構成の一例を示すブロック図
【図１２】本発明の実施の形態４に係るプロセッサシステムを用いた映像記録再生装置の外観の一例を示す図
【図１３】比較例に係るプロセッサの機能的な構成の一例を示すブロック図
【図１４】比較例に係るプロセッサの機能的な構成の一例を示すブロック図
【図１５】従来のプロセッサの構成および動作の一典型例を模式的に示す図
【図１６】特定命令の実行ステージの処理における課題を説明する図
【発明を実施するための形態】
【００３３】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００３４】
（実施の形態１）
図１は、本発明の実施の形態１に係るスレッド調停システムとしてのディスパッチャ３０を備えるプロセッサ１０の機能的な構成の一例を示すブロック図である。図１には、プロセッサ１０とともに、プロセッサ１０からアクセスされるメモリ６０が示されている。
【００３５】
プロセッサ１０は、複数のスレッドを擬似並列的に処理できるプロセッサであり、フェッチユニット２０、ディスパッチャ３０、デコーダ４０、演算器Ａ５１、演算器Ｂ５２、演算器Ｘ５３、および信号線５８を有している。
【００３６】
メモリ６０は、スレッドＰ６１、スレッドＱ６２、スレッドＲ６３を保持している。ここで、スレッドＰ６１、スレッドＱ６２、スレッドＲ６３は、それぞれプロセッサ１０で実行されるコンピュータプログラムである。
【００３７】
フェッチユニット２０は、メモリ６０から、スレッドＰ６１、スレッドＱ６２、およびスレッドＲ６３の命令をフェッチし、フェッチされた命令を順次ディスパッチャ３０へ供給する。
【００３８】
ディスパッチャ３０は、フェッチユニット２０から供給された命令を、所定の順序でディスパッチすることにより、本発明のスレッド調停システムとして機能する。制御テーブル３５には、スレッドの調停に関する情報が記録される。ディスパッチャ３０からディスパッチされた命令は、デコーダ４０に引き渡される。
【００３９】
デコーダ４０は、ディスパッチャ３０から引き渡された命令をデコードすることにより命令の種類を識別し、識別された命令の種類に応じて、演算器Ａ５１、演算器Ｂ５２、演算器Ｘ５３のいずれかに、命令の実行ステージの処理を行わせる。
【００４０】
演算器Ａ５１、演算器Ｂ５２、および演算器Ｘ５３は、命令の実行ステージ（例えば、算術演算、論理演算など）を処理する。
【００４１】
プロセッサ１０の、フェッチユニット２０、ディスパッチャ３０、デコーダ４０、演算器Ａ５１、および演算器Ｂ５２は、背景技術において説明したように、それぞれが担当する命令のステージを１タイムスロットで処理するように構成され、これらのステージでは、タイムスロットごとに異なるスレッドの命令が整然と処理されていく。
【００４２】
そのため、演算器Ａ５１または演算器Ｂ５２で実行ステージが処理される命令については、常に確定した時間で処理が完了する。この動作については、本願発明の範囲ではないため、説明を省略する。
【００４３】
他方、演算器Ｘ５３は、特定命令の実行ステージを複数のタイムスロットにわたって処理する。一例を挙げるならば、特定命令は除算命令であり、演算器Ｘ５３は除算命令の実行ステージを処理する除算器であってもよい。
【００４４】
本明細書では、実行ステージを複数のタイムスロットにわたって処理される命令のことを、一般に特定命令と呼ぶ。演算器Ｘ５３は、本発明の共有リソースの一例であり、特定命令の実行ステージを処理するために、各スレッドによって時分割に占有される。
【００４５】
このように構成されたプロセッサ１０では、複数のスレッドの特定命令が、上流ステージの処理を終えて、実行ステージの開始を待つ状況が生じ得る。
【００４６】
ディスパッチャ３０は、この状況に対して、第１スレッドの先行する特定命令の実行ステージが終了したときに、第１スレッドの後続の特定命令と第１スレッドとは異なる第２スレッドの特定命令とがそれぞれ実行ステージの開始を待っている場合、第１スレッドの後続の特定命令よりも先に第２スレッドの特定命令をディスパッチする。
【００４７】
ディスパッチャ３０のこの動作は、スレッド調停システムとして見れば、第１スレッドが共有リソースの使用を終了したときに、第１スレッドと第２スレッドとがそれぞれ共有リソースを使用できる状態にある場合、前記第１スレッドよりも先に前記第２スレッドに前記共有リソースを割り当てる動作に等しい。
【００４８】
ディスパッチャ３０のより具体的な構成および動作について説明を続ける。
図２は、ディスパッチャ３０の具体的な構成の一例を示すブロック図である。この例では、制御テーブル３５は、特定命令を一時的に保持できるＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）３５ａで構成される。
【００４９】
演算器Ｘ５３からディスパッチャ３０に通知される演算器状態信号は、演算器Ｘ５３が空いている（ＩＤＬＥ）か、使用中（ＢＵＳＹ）かを示す。
【００５０】
図３は、ディスパッチャ３０の動作の一例を定義する状態遷移図である。図３のＥＭＰＴＹはＦＩＦＯ３５ａが空である状態を示し、ＥＸＩＳＴはＦＩＦＯ３５ａに１つ以上の特定命令が入っている状態を示す。曲線の矢印は状態遷移を示し、矢印に付した説明は、状態遷移が発生する条件と状態遷移の際にディスパッチャ３０が行う動作（行う動作がある場合のみ）とをスラッシュで区切って示している。ディスパッチャ３０は、図３に示される状態遷移図に従って、次のように動作する。
【００５１】
フェッチユニット２０から特定命令が供給される前、ＦＩＦＯ３５ａが空である（Ｓ１０）。このとき、フェッチユニット２０から特定命令が供給されると、ディスパッチャ３０は、その特定命令をＦＩＦＯ３５ａに書き込む（Ｓ１１）。フェッチユニット２０からさらに特定命令が供給されると、ディスパッチャ３０はその特定命令をＦＩＦＯ３５ａに書き込む（Ｓ１２）。演算器Ｘ５３がＢＵＳＹであれば、ＦＩＦＯ３５ａに入っている特定命令は、ディスパッチされることなくＦＩＦＯ３５ａに保持される（Ｓ１３）。
【００５２】
ディスパッチャ３０は、演算器Ｘ５３がＩＤＬＥであれば直ちに、ＦＩＦＯ３５ａから先頭の特定命令を読み出してディスパッチする（Ｓ１４、Ｓ１５）。これにより、最も先に共有リソースである演算器Ｘ５３を使用できる状態になっていた特定命令が下流ステージへディスパッチされる。ディスパッチャ３０がＦＩＦＯ３５ａから最後の特定命令を読み出してディスパッチすることで、ＦＩＦＯ３５ａが空になる（Ｓ１５）。
【００５３】
ディスパッチャ３０は、図３の状態遷移図に従って、あるスレッドが共有リソースの使用を終了したときに、２つ以上のスレッドがそれぞれ前記共有リソースを使用できる状態にある場合、前記２つ以上のスレッドのうち最も先に前記共有リソースを使用できる状態になっていたスレッドの特定命令をディスパッチする。
【００５４】
図４は、ディスパッチャ３０が上述の動作を行う場合の、演算器Ｘ５３における特定命令の実行ステージの処理状況の一例を示す図である。
【００５５】
図４には、スレッドＰの３つの特定命令Ｐ１、Ｐ２、Ｐ３、スレッドＱの３つの特定命令Ｑ１、Ｑ２、Ｑ３、およびスレッドＲの２つの特定命令Ｒ１、Ｒ２のそれぞれの実行ステージの処理状況が示される。特定命令の実行ステージは、上流ステージの処理が終了することでＦＩＦＯ３５ａに書き込まれて開始可能（太線）になる。開始可能になった特定命令は、演算器Ｘ５３が空いていればただちにディスパッチされて実行中（実線の帯）になり、演算器Ｘ５３が使用中であれば開始待ち（破線の帯）となる。
【００５６】
また、図４には、それぞれの特定命令が開始可能になってから実行完了までに要する時間の上限である保証時間が矢印で示されている。この保証時間は、特定命令の処理時間を保証する必要があるスレッドの数に、特定命令の実行ステージを処理するためのタイムスロット数を乗じた数のタイムスロットで表される。
【００５７】
ここでは、３つのスレッドＰ、Ｑ、Ｒの特定命令の処理時間を保証することができ、特定命令の実行ステージに３タイムスロットを要するとして、保証時間は９タイムスロットである。
【００５８】
この動作の特徴は、タイムスロット４に見られるように、スレッドＰが共有リソースの使用を終了したときに、スレッドＰと、スレッドＰとは異なるスレッドＱとが共有リソースを使用できる状態になっている場合、スレッドＰよりも先にスレッドＱに共有リソースが割り当てられることにある。
【００５９】
このような動作は、あるスレッド（スレッドＰ）が共有リソースの使用を終了したときに、ディスパッチャ３０が、前記共有リソースを使用できる状態になっている２つ以上のスレッド（スレッドＰ、Ｑ、Ｒ）のうち最も先に前記共有リソースを使用できる状態になっていたスレッド（スレッドＱ）に共有リソースを割り当てることで実現されている。
【００６０】
これにより、共有リソースを使用できる状態になっている複数のスレッドがある場合に、いずれか１つのスレッドが共有リソースを使い続けることがないので、共有リソースはすべてのスレッドに満遍なく割り当てられることになり、その結果、各スレッドの特定命令の処理に要する時間を保証できる。
【００６１】
（実施の形態２）
図５は、本発明の実施の形態２に係るスレッド調停システムとしてのディスパッチャ３１を備えるプロセッサ１１の機能的な構成の一例を示すブロック図である。プロセッサ１１は、実施の形態１のプロセッサ１０と比べて、制御テーブル３６の内容およびディスパッチャ３１の動作が異なる。
【００６２】
以下、実施の形態１で説明した構成要素と同一の構成要素には同一の符号を付して適宜説明を省略し、実施の形態１との相違点について主に説明する。
【００６３】
ディスパッチャ３１のスレッド調停システムとしての動作は、第１スレッドが共有リソースの使用を終了したときに、第１スレッドと第２スレッドとがそれぞれ共有リソースを使用できる状態にある場合、前記第１スレッドよりも先に前記第２スレッドに前記共有リソースを割り当てる点で、実施の形態１のディスパッチャ３０と共通している。
【００６４】
ただし、ディスパッチャ３１は、上述の動作を行うために、他のスレッドによって実行ステージの開始を待たされたスレッドが、自らの実行ステージが終了するまで、自らを待たせたスレッドの次の実行ステージの開始を規制（インヒビット）するという点で、実施の形態１のディスパッチャ３０とは異なっている。
【００６５】
制御テーブル３６は、個々のスレッドに対応して、命令状態欄３６ａ、特定命令欄３６ｂ、インヒビタ欄３６ｃを有している。制御テーブル３６の各欄は、例えばレジスタを用いて構成される。
【００６６】
命令状態欄３６ａには、特定命令の実行ステージが演算器Ｘ５３で実行中（ＥＸＥＣ）、開始待ち（ＲＥＡＤＹ）、または実行すべき特定命令がない（ＮＯＮＥ）ことを示す情報が保持される。特定命令欄３６ｂには、実行ステージの開始待ちまたは実行中の特定命令が保持される。インヒビタ欄３６ｃには、そのインヒビタ欄３６ｃに対応するスレッドによって実行ステージの開始が待たされた他のスレッドを識別する情報が保持される。インヒビタ欄３６ｃに対応するスレッドの特定命令の実行ステージの開始は、インヒビタ欄３６ｃに記録されたスレッドによって規制される。
【００６７】
演算器Ｘ５３からディスパッチャ３１に通知される演算器状態信号は、演算器Ｘ５３が空いている（ＩＤＬＥ）か、使用中（ＢＵＳＹ）かを示す。
【００６８】
図６は、このように構成されたディスパッチャ３１の動作の一例を定義する状態遷移図である。ディスパッチャ３１は、図６の状態遷移図で定義される動作を、複数のスレッドのそれぞれを対象として並行して行う。図６のＮＯＮＥ、ＲＥＡＤＹ、ＥＸＥＣは、動作の対象とるスレッドの命令状態欄３６ａの内容を示す。
【００６９】
フェッチユニット２０から特定命令が供給される前、命令状態欄３６ａがＮＯＮＥである（Ｓ２０）。このとき、フェッチユニット２０から対象スレッドの特定命令が供給されると、ディスパッチャ３１は、命令状態欄３６ａをＲＥＡＤＹにし、その特定命令を特定命令欄３６ｂに記録する（Ｓ２１）。
【００７０】
ディスパッチャ３１は、演算器Ｘ５３がＢＵＳＹであれば、命令状態欄３６ａがＥＸＥＣまたはＲＥＡＤＹである他のスレッドのインヒビタ欄３６ｃに対象スレッドを識別する情報を記録することで、他のスレッドの実行ステージの開始を規制する（Ｓ２２）。
【００７１】
ディスパッチャ３１は、演算器Ｘ５３がＩＤＬＥであっても、対象スレッドのインヒビタ欄３６ｃが空でない、つまり他のスレッドから開始を規制されていれば、特定命令欄３６ｂに記録されている特定命令をディスパッチせずに待つ（Ｓ２３）。
【００７２】
ディスパッチャ３１は、演算器Ｘ５３がＩＤＬＥであり、かつ対象スレッドのインヒビタ欄３６ｃが空、つまり他のスレッドから開始を規制されていなければ、特定命令欄３６ｂに記録されている特定命令をディスパッチし、命令状態欄３６ａをＥＸＥＣにする（Ｓ２４）。
【００７３】
その後、演算器Ｘ５３がＩＤＬＥになると、ディスパッチャ３１は、他のスレッドのインヒビタ欄３６ｃから、対象スレッドを識別する情報を削除することで、他のスレッドに対する規制を解除する。そして、フェッチユニット２０から対象スレッドの次の特定命令が供給されている場合は、ディスパッチャ３１は、命令状態欄３６ａをＲＥＡＤＹにし、その特定命令を特定命令欄３６ｂに記録し（Ｓ２５）、次の特定命令がなければ、ディスパッチャ３１は、命令状態欄３６ａをＮＯＮＥにする（Ｓ２６）。
【００７４】
このような動作が、複数のスレッドのそれぞれを対象として並行して行われることで、他のスレッドによって実行ステージの開始を待たされたスレッドが、自らの実行ステージが終了するまで、自らを待たせたスレッドの次の実行ステージの開始を規制する全体的な動作が実現される。
【００７５】
ディスパッチャ３１は、図６の状態遷移図に従って、第１スレッドが共有リソースを使用中に、前記第１スレッドとは異なる第２スレッドが前記共有リソースを使用できる状態になった場合、前記第１スレッドの後続する特定命令を、前記第２スレッドが前記共有リソースの使用を終了した後にディスパッチする。
【００７６】
図７は、ディスパッチャ３１が上述の動作を行う場合の、演算器Ｘ５３における特定命令の実行ステージの処理状況の一例を示す図である。
【００７７】
図７には、スレッドＰの３つの特定命令Ｐ１、Ｐ２、Ｐ３、スレッドＱの３つの特定命令Ｑ１、Ｑ２、Ｑ３、およびスレッドＲの２つの特定命令Ｒ１、Ｒ２のそれぞれの実行ステージの処理状況が示される。特定命令の実行ステージは、上流ステージの処理が終了することで特定命令欄３６ｂに書き込まれて開始可能（太線）になる。開始可能になった特定命令は、演算器Ｘ５３が空いていて、かつ他のスレッドから開始を規制されていなければディスパッチされて実行中（実線の帯）になり、演算器Ｘ５３が使用中であれば開始待ち（破線の白帯）となり、他のスレッドから開始を規制されていれば開始規制中（破線の斜線帯）となる。開始規制中のスレッドに表示された括弧付きの符号は、そのスレッドの開始を規制しているスレッドを示している。
【００７８】
また、図７には、それぞれの特定命令が開始可能になってから実行完了までに要する時間の上限である保証時間が矢印で示されている。この保証時間は、図４で説明した保証時間と同じものである。
【００７９】
この動作の特徴は、タイムスロット４に見られるように、スレッドＰが共有リソースの使用を終了したときに、スレッドＰと、スレッドＰとは異なるスレッドＱとが共有リソースを使用できる状態になっている場合、スレッドＰよりも先にスレッドＱに共有リソースが割り当てられることにある。
【００８０】
このような動作は、第１スレッドが共有リソースを使用中に、前記第１スレッド（スレッドＰ）とは異なる第２スレッド（スレッドＱ、Ｒ）が前記共有リソースを使用できる状態になった場合、ディスパッチャ３１が、前記第１スレッド（スレッドＰ）の後続する特定命令を、前記第２スレッド（スレッドＱ、Ｒ）が前記共有リソースの使用を終了した後にディスパッチすることで実現されている。
【００８１】
これにより、共有リソースを使用できる状態になっている複数のスレッドがある場合に、いずれか１つのスレッドが共有リソースを使い続けることがないので、共有リソースはすべてのスレッドに満遍なく割り当てられることになり、その結果、各スレッドの特定命令の処理に要する時間を保証できる。
【００８２】
（実施の形態３）
図８は、本発明の実施の形態３に係るスレッド調停システムとしてのディスパッチャ３２を備えるプロセッサ１２の機能的な構成の一例を示すブロック図である。プロセッサ１２は、実施の形態１のプロセッサ１０と比べて、制御テーブル３７の内容およびディスパッチャ３２の動作が異なる。
【００８３】
以下、実施の形態１で説明した構成要素と同一の構成要素には同一の符号を付して適宜説明を省略し、実施の形態１および実施の形態２との相違点について主に説明する。
【００８４】
ディスパッチャ３２のスレッド調停システムとしての動作は、実施の形態１のディスパッチャ３０および実施の形態２のディスパッチャ３１と比べて、複数のスレッドのそれぞれに優先度を定め、優先度に基づいてスレッド調停を行う点が異なる。
【００８５】
ディスパッチャ３２は、あるスレッドの特定命令の実行ステージの処理中に、優先度がより高いスレッドの特定命令の実行ステージが開始可能になった場合、処理中の実行ステージを止めて、優先度がより高いスレッドの特定命令の実行ステージを開始させる割り込み制御を行う。
【００８６】
ディスパッチャ３２は、優先度が同一の複数のスレッド間では、実施の形態１のディスパッチャ３０または実施の形態２のディスパッチャ３１と同等のスレッド調停動作をするものとし、以下では、ディスパッチャ３２によって行われる割り込み制御について詳細に説明する。
【００８７】
制御テーブル３７は、個々のスレッドに対応して、命令状態欄３７ａ、特定命令欄３７ｂ、優先度欄３７ｃを有している。制御テーブル３７の各欄は、例えばレジスタを用いて構成される。
【００８８】
命令状態欄３７ａには、特定命令の実行ステージが演算器Ｘ５３で実行中（ＥＸＥＣ）、開始待ち（ＲＥＡＤＹ）、または実行すべき特定命令がない（ＮＯＮＥ）ことを示す情報が保持される。特定命令欄３７ｂには、実行ステージの開始待ちまたは実行中の特定命令が保持される。優先度欄３７ｃには、そのスレッドの優先度を示す値が保持される。この値は小さいほど高い優先度を示す。優先度の最大数は限定されない。
【００８９】
演算器Ｘ５３からディスパッチャ３２に通知される演算器状態信号は、演算器Ｘ５３が空いている（ＩＤＬＥ）か、使用中（ＢＵＳＹ）かを示す。
【００９０】
図９は、このように構成されたディスパッチャ３２の動作の一例を定義する状態遷移図である。ディスパッチャ３２は、図９の状態遷移図で定義される動作を、複数のスレッドのそれぞれを対象として並行して行う。図９のＮＯＮＥ、ＲＥＡＤＹ、ＥＸＥＣは、動作の対象とるスレッドの命令状態欄３７ａの内容を示す。
【００９１】
フェッチユニット２０から特定命令が供給される前、命令状態欄３７ａがＮＯＮＥである（Ｓ３０）。このとき、フェッチユニット２０から対象スレッドの特定命令が供給されると、ディスパッチャ３２は、命令状態欄３７ａをＲＥＡＤＹにし、その特定命令を特定命令欄３７ｂに記録する（Ｓ３１）。
【００９２】
演算器Ｘ５３がＢＵＳＹであれば、ディスパッチャ３２は、命令状態欄３７ａがＡＣＴＩＶＥである他のスレッド（つまり演算器Ｘ５３を現在使用しているスレッド）の優先度と対象スレッドの優先度とを、優先度欄３７ｃの値に基づいて比較する。そして演算器Ｘ５３を使用しているスレッドが、対象スレッドの優先度と等しい優先度を持つ等位スレッドであるか、より高い優先度を持つ上位スレッドである場合は、対象スレッドの特定命令をディスパッチせずに待つ（Ｓ３２）。
【００９３】
ディスパッチャ３２は、演算器Ｘ５３がＩＤＬＥであれば、特定命令欄３７ｂに記録されている特定命令をディスパッチして、命令状態欄３７ａをＥＸＥＣにする（Ｓ３３）。
【００９４】
演算器Ｘ５３がＢＵＳＹであって、かつ対象スレッドよりも優先度が低い下位スレッドによって使用されている場合、ディスパッチャ３２は、演算器Ｘ５３で現在処理中の特定命令の実行ステージが終了するのを待つことなく、特定命令欄３７ｂに記録されている特定命令をディスパッチし、命令状態欄３７ａをＥＸＥＣにする（Ｓ３４）。
【００９５】
演算器Ｘ５３は、新たな特定命令がディスパッチされることによって、現在処理中の特定命令の実行ステージを中止して、当該新たな特定命令の実行ステージの処理を開始する。
【００９６】
命令状態欄３７ａがＥＸＥＣのとき、優先度がより高い上位スレッドがＲＥＡＤＹになった場合、その上位スレッドから割り込まれることで演算器Ｘ５３における処理が中止されるため、ディスパッチャ３２は、命令状態欄３７ａをＲＥＡＤＹにする（Ｓ３５）。
【００９７】
命令状態欄３７ａがＥＸＥＣのとき、演算器Ｘ５３がＩＤＬＥになった場合、つまり、演算器Ｘ５３における処理が完了した場合は、フェッチユニット２０から対象スレッドの次の特定命令が供給されていれば、ディスパッチャ３２は、命令状態欄３７ａをＲＥＡＤＹにし、その特定命令を特定命令欄３７ｂに記録し（Ｓ３６）、次の特定命令がなければ、ディスパッチャ３２は、命令状態欄３７ａをＮＯＮＥにする（Ｓ３７）。
【００９８】
このような動作が、複数のスレッドのそれぞれを対象として並行して行われることで、あるスレッドの特定命令の実行ステージの処理中に、優先度がより高いスレッドの特定命令の実行ステージが開始可能になった場合、処理中の実行ステージを止めて、優先度がより高いスレッドの特定命令の実行ステージを開始させる割り込み制御が実現される。
【００９９】
図１０は、ディスパッチャ３２が上述の動作を行う場合の、演算器Ｘ５３における特定命令の実行ステージの処理状況の一例を示す図である。
【０１００】
図１０には、スレッドＰの３つの特定命令Ｐ１、Ｐ２、Ｐ３、スレッドＱの３つの特定命令Ｑ１、Ｑ２、Ｑ３、およびスレッドＲの２つの特定命令Ｒ１、Ｒ２のそれぞれの実行ステージの処理状況が示される。ここでは、スレッドＰ、Ｑの優先度が、スレッドＲの優先度よりも高いとする。
【０１０１】
特定命令の実行ステージは、上流ステージの処理が終了することで特定命令欄３６ｂに書き込まれて開始可能（太線）になる。開始可能になった特定命令は、演算器Ｘ５３が空いていれば直ちにディスパッチされて実行中になるか、または、演算器Ｘ５３が低位のスレッドで使用中であれば割り込んでディスパッチされて実行中（実線の帯）になり、演算器Ｘ５３が等位または上位のスレッドで使用中であれば開始待ち（破線の白帯）となる。割り込まれた低位のスレッドの実行ステージは中止され（破線の縦縞帯）、後に再びディスパッチされる。
【０１０２】
再びディスパッチされた特定命令の実行ステージは、最初からやり直しされてもよい。また、特定命令の実行ステージが中止される時点での途中経過（共有リソースの状態）を退避用のリソース（例えば図示されていないレジスタ）に保持しておき、その特定命令が再びディスパッチされたときに、退避用のリソースに保持されている途中経過を共有リソースへ復帰して、続きを処理してもよい。退避用のリソースは、優先度の最大数から１少ない数だけ設ければよい。
【０１０３】
また、図１０には、それぞれの特定命令が開始可能になってから実行完了までに要する時間の上限である保証時間が矢印で示されている。この保証時間は、特定命令の処理時間を保証する必要があるスレッドの数に、特定命令の実行ステージを処理するためのタイムスロット数を乗じた数のタイムスロットで表される。
【０１０４】
ここでは、最上位の優先度を持つ２つのスレッドＰ、Ｑの特定命令の処理時間を保証することができ、特定命令の実行ステージに３タイムスロットを要するとして、保証時間は６タイムスロットである。実施の形態１および実施の形態２の例と比べると、処理時間を保証するスレッドが減ることで、保証時間が短縮される。
【０１０５】
この動作の特徴は、タイムスロット１７およびタイムスロット２２に見られるように、上位のスレッドが低位のスレッドに割り込んで共有リソースを獲得する割り込み制御にある。このような動作のため、低位のスレッドの特定命令の処理時間は保証されない代わりに、上位のスレッドの保証時間が短縮される。
【０１０６】
（実施の形態４）
上記で説明したプロセッサ１０、１１、１２は、それぞれ特有のスレッド調停システムとしてのディスパッチャ３０、３１、３２を備え、複数のスレッドの特定命令の処理時間を保証できることから、複数のスレッドのそれぞれが実時間性を要求される処理を行う応用にとって極めて有用である。
【０１０７】
本発明の実施の形態４では、そのような応用の一例としてのプロセッサシステムおよび映像記録再生装置について説明する。
【０１０８】
図１１は、本発明の実施の形態４に係る、プロセッサ１０、１１、または１２を用いたプロセッサシステム１００の機能的な構成の一例を示すブロック図である。
【０１０９】
プロセッサシステム１００は、映像音声ストリームに関する様々な信号処理を行うシステムＬＳＩであり、前述したプロセッサ１０、１１、または１２を備えている。プロセッサシステム１００は、例えば、映像記録再生装置に用いられる。
【０１１０】
図１２は、プロセッサシステム１００を用いた映像記録再生装置２００の外観の一例を示す図である。映像記録再生装置２００は、一つの典型例として、放送波から映像音声ストリームを取得し、当該映像音声ストリームで表される放送番組を記録しながら、当該放送番組を表示装置２０１に表示するといった処理を行う。
【０１１１】
図１１に示されるように、プロセッサシステム１００は、プロセッサ１０、ストリームＩ／Ｏブロック７１、ＡＶＩＯ（Ａｕｄｉｏ  Ｖｉｓｕａｌ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）ブロック７２、およびメモリＩＦブロック７３を備える。
【０１１２】
プロセッサシステム１００は、放送番組を表示装置２０１に表示するため、例えば、ストリームＩ／Ｏブロック７１で放送波から映像音声ストリームを取得し、プロセッサ１０で映像音声ストリームを映像音声データに伸長し、ＡＶＩＯブロック７２で映像音声データから映像音声信号を生成して表示装置２０１に出力する。
【０１１３】
また、プロセッサシステム１００は、放送番組を前記の表示と並行して記録するため、例えば、プロセッサ１０で前記映像音声データを記録用のフォーマットに圧縮し、圧縮された映像音声データを、メモリＩＦブロック７３を介して、外部メモリ６０に記録する。
【０１１４】
このような処理において、放送番組の表示および記録の欠落（いわゆるコマ落ち）を防ぐために、プロセッサ１０で行われる映像音声ストリームの伸長処理および映像音声データの圧縮処理のそれぞれの所要時間が、正確に見積もられる必要がある。
【０１１５】
そこで、映像音声ストリームの伸長処理を含む映像再生処理および映像音声データの圧縮処理を含む映像記録処理のそれぞれをスレッドとしてプロセッサ１０で実行することで、命令の処理時間を保証する。これにより、映像音声ストリームの伸長処理（広くは、映像表示処理）および映像音声データの圧縮処理（広くは、映像記録処理）のそれぞれの所要時間を正確に見積もることが可能となる。
【０１１６】
（比較例との対比による効果の説明）
本発明の実施の形態とは異なる構成によって複数のスレッドの特定命令の処理時間を保証するプロセッサを比較例に用いて、本発明の実施の形態に係るスレッド調停システムの優位性について、さらに説明する。
【０１１７】
図１３は、比較例に係るプロセッサの機能的な構成の一例を示すブロック図である。このプロセッサは、処理できるスレッドと同数の演算器を持っている。このように構成されたプロセッサでは、複数のスレッドがそれぞれ演算器を占有できるので、スレッドの処理時間を保証することができる。しかしながら、スレッド数が変わると演算器の数を変える必要があり、かつプロセッサの面積や消費電力が増加するといった不利がある。
【０１１８】
図１４は、他の比較例に係るプロセッサの機能的な構成の一例を示すブロック図である。このプロセッサは、実行ステージが処理できるスレッドと同数のステージに分割されている。このように構成されたプロセッサでは、複数のスレッドがそれぞれ分割されたステージを占有して処理されるので、スレッドの処理時間を保証することができる。しかしながら、スレッド数が変わるとステージの数を変える必要があり、かつプロセッサの面積や消費電力が増加するといった不利がある。
【０１１９】
これらのプロセッサによれば、スレッドの数と同数の演算器を設け、またステージを分割する必要がある点で構成の柔軟性に欠け、またプロセッサの面積や消費電力が増加することから、各スレッドの処理時間を保証するために十分に満足できる解決策を与えるものではない。
【０１２０】
これらのプロセッサと比較して、本発明の実施の形態に係るスレッド調停システムを備えるプロセッサでは、演算器Ｘ５３は１つでよく、また実行ステージが分割される数も固定でよい。その上で、各スレッドの特定命令の実行順序を制御することで各スレッドの処理時間を保証するので、比較例のプロセッサと比べてプロセッサの面積や消費電力の増加も抑制できるという利点がある。
【産業上の利用可能性】
【０１２１】
本発明にかかるスレッド調停システムは、マルチスレッドプロセッサ、映像記録再生装置などにおいて、複数のスレッドそれぞれの処理時間を保証する必要がある応用に有用である。
【符号の説明】
【０１２２】
１０、１１、１２    プロセッサ
２０    フェッチユニット
３０、３１、３２    ディスパッチャ
３５、３６、３７    制御テーブル
４０    デコーダ
５１    演算器Ａ
５２    演算器Ｂ
５３    演算器Ｘ
５８    信号線
５９    信号線
６０    メモリ
６１    スレッドＰ
６２    スレッドＱ
６３    スレッドＲ
７１    ストリームＩ／Ｏブロック
７２    ＡＶＩＯブロック
７３    メモリＩＦブロック
１００    プロセッサシステム
２００    映像記録再生装置
２０１    表示装置
【図１】
2012048399.tif 000003
【図２】
2012048399.tif 000004
【図３】
2012048399.tif 000005
【図４】
2012048399.tif 000006
【図５】
2012048399.tif 000007
【図６】
2012048399.tif 000008
【図７】
2012048399.tif 000009
【図８】
2012048399.tif 000010
【図９】
2012048399.tif 000011
【図１０】
2012048399.tif 000012
【図１１】
2012048399.tif 000013
【図１２】
2012048399.tif 000014
【図１３】
2012048399.tif 000015
【図１４】
2012048399.tif 000016
【図１５】
2012048399.tif 000017
【図１６】
2012048399.tif 000018