(57)【要約】  マルチスレッドプロセッサ上で複数のスレッドの実行を同期させるための方法及び装置が提供される。各々のスレッドには、その実行が別のスレッドと同期されるべきであることが有利な又は好ましい点に対応する多数の同期点が与えられる。スレッドの実行は、同期点に到達したときに、同期されることが意図される少なくとも１つの他のスレッドが対応する同期点に到達するまで停止される。実行は後で再開される。スレッドの実行が、同期点を含むコードのセクション上に分岐する場合は、少なくとも１つの他のスレッドが対応する分岐の終わりにおける同期点に到達するまで、実行は分岐の終わりで停止される。
2009543170.tif 000002
【特許請求の範囲】
【請求項１】
各々が多数の同期点を備えた、マルチスレッドプロセッサ上の複数のスレッドの実行を同期させるための方法であって、
同期点に到達したときに、同期されることが意図される少なくとも１つの他のスレッドが対応する同期点に到達するのを待機してスレッドの実行を停止し、次いで、実行を再開するステップを含み、分岐の終わりに同期点を含むコードのセクション上で分岐するスレッドの実行を、前記少なくとも１つの他のスレッドが前記同期点又は前記分岐の終わりを読み込むまで停止するステップをさらに含むことを特徴とする方法。
【請求項２】
同期点に到達するスレッドは、同期開始待機状態に入ることを特徴とする請求項１に記載の方法。
【請求項３】
停止されたスレッドと同期されるスレッドもまた停止されたかどうか反復的にチェックするステップを含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記スレッドが停止されたかどうか反復的にチェックするステップは、各々のスレッドに対するステータスレジスタにおいて、少なくとも１つのビットのステータスをチェックするステップを含むことを特徴とする請求項３に記載の方法。
【請求項５】
各々が多数の同期点を備えた、マルチスレッドプロセッサ上の複数のスレッドの実行を同期させるための装置であって、
同期点に到達したときに、同期されることが意図される少なくとも１つの他のスレッドが対応する同期点に到達するのを待機してスレッドの実行を停止するための手段と、次いで、実行を再開するための手段を含み、分岐の終わりに同期点を含むコードのセクション上で分岐するスレッドの実行を、前記少なくとも１つの他のスレッドが前記同期点又は前記分岐の終わりを読み込むまで停止するための手段をさらに含むことを特徴とする方法。
【請求項６】
同期点に到達するスレッドは、同期開始待機状態に入ることを特徴とする請求項５に記載の装置。
【請求項７】
停止されたスレッドと同期されるスレッドもまた停止されたかどうか反復的にチェックするための手段を含むことを特徴とする請求項６に記載の装置。
【請求項８】
前記スレッドが停止されたかどうか反復的にチェックするための手段は、各々のスレッドに対するステータスレジスタにおいて、少なくとも１つのビットのステータスをチェックするための手段を含むことを特徴とする請求項７に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッドプロセッサ上の実行スレッドの同期方法及び装置に関する。
【背景技術】
【０００２】
出願人の米国特許番号第６，９７１，０８４号においては、同時に実行される幾つかのスレッドを有するマルチスレッドプロセッサが説明されている。プロセッサは、より多い又はより少ない時間を各々に配分するため、これらのスレッドは、異なる速度で実行されることができる。こうしたシステムにおいては、各々が実行スレッドのための命令のパイプラインを供給する複数のデータ入力がある。制御手段は、実行スレッドを適当なデータ処理手段に経路指定し、これは次いで、供給されたスレッドの実行を開始するようにされる。どの経路指定動作及びどの経路指定スレッドが実施されることができるかに関して、反復的に判断がなされ、次いで、実施できると考えられる動作の少なくとも１つが開始される。システムは、１つ又はそれ以上のスレッドの実行が、適当なリソースが使用可能である他のスレッドより優位になるように、優先権をスレッドに割り当てるための手段を含むことにより修正することができる。
【０００３】
米国特許番号第６，９７１，０８４号の発明を具現するシステムは、典型的には、１つ又はそれ以上の異なるプロセッサ上で同時に実行される多数のスレッドを有する。スレッドが実行されているプロセッサは、リソースの使用可能性により、より多い又はより少ない時間をこれらに配分するため、スレッドは、異なる速度で実行されることができる。
【０００４】
幾つかの適用例においては、例えば、共有リソースへのアクセスを管理するために、２つ又はそれ以上のスレッドの実行を調整して、これらのプログラムのセクションが、同時に（同期して）実行されるようにすることが望ましい。このことは、処理手段が、停止しなければならない点として認識する、実行スレッドに与えられる同期点を使用することにより実現することができる。各々の自由継続スレッドは、同期点まで実行され、次いで停止する。すべてのスレッドが同期点で停止したとき、これらは同期されて、同時に再開されることができる。
【０００５】
すべてのソフトウェアにおけるように、実行スレッドは、フロー制御分岐と、その中のループを有することができ、したがって、プログラムを通して、スレッドがどの実行経路を進むかを予測することは必ずしも可能ではない。したがって、１つのスレッドが分岐して同期点を避けた場合には、同期されることが意図されるスレッドは、対応する同期点において無期限にストールされることになる。第１のスレッドがプログラムのそのセクションを実行していないため、関連のある同期点に到達することはない。
【０００６】
或いは、こうした状況においては、第１の同期点を抜かすように分岐された１つのスレッドは、不用意に、第２の同期点において第２のスレッドと同期することがある。例えば、スレッドが、中に同期点Ａを含み、その後で同期点Ｂを含む分岐点「ｉｆ．．．ｅｎｄ」分岐を含む場合には、「ｉｆ．．．ｅｎｄ」分岐を飛ばさないスレッドは、分岐内の同期点Ａにおいて停止し、これを飛ばすスレッドは、分岐後の同期点Ｂで停止する。
【発明の開示】
【０００７】
本発明の好ましい実施形態は、各々が多数の同期点を備えた、マルチスレッドプロセッサ上の複数のスレッドの実行を同期させるための方法及び装置を提供する。いずれかのスレッドが同期点に到達したときに、同じ同期点に到達するように同期されることが意図される他のスレッドを待機し、次いで実行が再開できるようになる。コードのセクション上で同期点を含むスレッドが分岐するときは、停止され、分岐しているとフラグが立てられる。次いで、同期点に到達するいずれかのスレッドは、分岐されているとフラグが立てられていないスレッドだけを待機する。このことは、分岐されなかったあらゆるスレッドが互いに同期することを保証する。
【０００８】
分岐ターゲットで（すなわち、分岐後に）停止されるスレッドは、いずれかの他のスレッドが、分岐のない通常の実行により同じ点に到達したときに実行を再開できる。すべての他のスレッドが分岐した場合には、実行は、すべてのスレッドがその分岐ターゲットに到達したときに実行を再開する。
いずれの分岐点においても、分岐された場合に、いずれかの同期点が抜かされるかどうか予測できることが好ましい。どの同期点も抜かされない場合には、分岐スレッドが後で停止されるようにする要求はない。
【発明を実施するための最良の形態】
【０００９】
図１においては、複数のデータ入力４が媒体制御コア２に与えられる。各々のデータ入力は、実行されるスレッドに対する一組の命令を与える。媒体制御コア２は、どのスレッドが、使用可能なリソースに基づいて実行されることができるかを反復的に判断する。媒体制御コア２は、複数のキャッシュメモリ１４をもつマルチバンクキャッシュ１２に結合される。これは、実行スレッドのいずれかによりアクセスされることができるデータの格納のために用いられる。
【００１０】
さらに、複数のデータ処理パイプラインユニット６が媒体制御コアに接続される。１つ又は多数のこれらがあるとすることができ、通常は、データ入力４の数より少ない。各々のパイプラインユニット６は、データ処理コア８と、必要とされるあらゆる後処理を実施し、出力を与える下流側データパイプライン１０とを含む。
【００１１】
図１のシステムに対する入力及び出力は、リアルタイムの映像入力及び出力、リアルタイムの音声入力及び出力、データソース、格納装置等とすることができる。
媒体制御コアは、データを入力４からデータ処理コア８又は格納部に向け、次いで、データを出力部に与えるマルチスレッディングユニットである。これは、タスクをすべてのクロックサイクルにおいて切り換えることができるように構成される。したがって、各々のクロックサイクルにおいて、入力４で与えられたどの実行スレッドが、これらが実行されるのに必要なすべてのリソースを有するか、及び最高優先度を有するかをチェックする。実施されることができるスレッドの実行が、次いで開始できることになる。
リソースのチェックは、スレッドがストールしないことを保証するように反復的に実施される。
【００１２】
本発明の実施形態によれば、同期されるスレッドは、同期点に遭遇したときに媒体制御に示して、同期が媒体制御コアにより制御されることができるようにする。したがって、同期されることが意図される２つ又はそれ以上のスレッドが媒体制御コアに供給されるときには、これらのスレッドを同期させるのに必要な動作を実施することができる。媒体制御コア２は、各々のスレッドのプログラムに対する命令を処理し、実行される各々のスレッドの状態を監視する。通常の実行状態又はストール状態（リソースの使用可能性の待機）に加えて、２つの特別な状態がある（これらは、「同期開始待機」及び「同期終了待機」として知られる）。これらの状態においては、この時点で実行が停止されるため、どのような処理も行われない。
【００１３】
同期点の動作は、図２を参照してより詳細に説明される。２０において、媒体制御コアは、特定のスレッドに対して、ここで次の命令を処理できることを識別する。その第１のタスクは、２２において、その命令が同期点を含むかどうか判断することである。同期点がある場合には、実行スレッドは、２４の同期開始待機状態に移動する。この状態は、２６において、媒体制御コアがすべての他のスレッドを反復的に調査して、同期開始／終了待機状態にあるかどうかを判断するようにする。これらのすべてが、これらの状態の１つにない場合には、システムは、反復的に周りをループして、同期されるすべてのスレッドがストールされるまでチェックする。すべての他のスレッドがこれらの状態の１つに入ると、媒体制御コアは、再び２０において、次の命令を処理し、再び２２において、同期点を探すことができる。同期点はないと判断された場合には、２８において、スレッドが、同期点上で分岐されたかどうかについて判断がなされる。こうした分岐が生じていなかった場合には、システムは２０に戻り、次の命令を処理する。
【００１４】
システムが同期点上で分岐された場合には、ビットは、同期点上で分岐が生じたことをＭＣＣに示すように設定され、３０において、すべての他のスレッドが同期終了待機状態にあるかどうかについて判断がなされる。分岐スレッドが、他のスレッドの実行を再開しないようにする唯一のスレッドであると示す場合には、次の命令が２０において処理される。すべての他のスレッドが同期終了待機状態にない場合には、３２において、実行スレッドが同期終了待機状態になり、３４において、他のスレッドが同期終了状態に到達したかどうか判断するループに入る。別のスレッドがこの点に到達すると、システムは、２０において、次の命令を処理するようにループを戻る。
【００１５】
同期点及び分岐点の検出は、そのコンパイラによりスレッドに含まれるデータに応答して、媒体制御コア２において生じることができる。或いは、情報は、命令を処理するときに、データ処理コア８により媒体制御コアにフィードバックされることができる。
同期開始待機状態と同期終了待機状態との間の違いは、同期開始待機状態は、同期点がスレッドの通常のフローにおいて処理されるときに生じることである。
同期点上で分岐されると知られる分岐命令が処理された場合に、いずれかの他のスレッドがプログラムにおける同じ点に到達していてもいなくても、同期終了待機状態になる。したがって、スレッドが同期点上で分岐されると、別のスレッドがその実行において追いつくまで、すなわち、プログラムの同じ点に到達するまで、効率的にストールされる。
【００１６】
スレッドの前の可能性のある実行シーケンスを通してトレースする例示的なコードフラグメントを図３に示す。スレッド０及び２は、条件コードを実行するが、コード１及び３はこれを抜かす。本発明を具現するときの同期点をもつこのコードブロックの効果は、条件ループに入るか又はその周りで分岐した後で、同期開始待機状態又は同期終了待機状態のいずれかにおけるすべてのスレッドを停止させることである。この時点で、スレッド０及び２は、命令Ｙを実行することにより、実行を再開することができる。これらは、同時に再開され、同じ速度で実行されるべきであることが好ましい。スレッド１及び３は、０又は２が命令Ｚに到達するまで実行を再開できない。
【００１７】
上述から、本発明は、同期を維持しながら、多数の実行スレッドを分岐点で実行することを可能にすることが理解される。
【００１８】
より詳細なＭＣＣ２及びデータ処理ユニット３０のブロック図を図４に示す。ここでは、ＭＣＣ２は、複数の入力スレッド３８を受信する。例えば、１６の入力スレッドを受信することができる。これら１６のスレッドのうち、４つが同期され、それらの命令において適切な同期点を含むものとされる。
【００１９】
ＭＣＣ２は、同期される４つのスレッドに必要なリソースが使用可能であり、これらが、これらのスレッドの実行を開始するかどうか判断する。図３に示す単一の処理ユニットシステムにおいては、スレッドは、周期的にデータ処理ユニット３０に与えられ、例えば、各々のスレッドからの１つの命令が順番に、データ処理ユニットに供給される。命令取り出しユニット３２は、ＭＣＣ２により与えられた各々のスレッドから命令を順番に取り出し、これらを命令デコードユニットに供給し、このユニットは、これらをデコードした後で、これらをＣＰＵ３６に進めることができる。
【００２０】
ＭＣＣ２は、レジスタのバンクを含み、管理している各々のスレッドに対して１つのレジスタがある。各々のレジスタは、そのそれぞれのスレッドの種々の態様のステータスを示す複数のビットを格納する。レジスタの各々は、スレッドが、同期開始待機状態にあるのか又は同期終了待機状態にあるのかを示すように設定されるビットを含む。このデータは、ＭＣＣ２が、スレッドの同期状態を監視し、スレッドが現在同期されているか、又は、同期開始待機状態或いは同期終了待機状態にあることにより、同期に到達するように待機しているかどうか判断する。
【００２１】
ＭＣＣ２は、命令デコードユニット３４からのフィードバック経路４０により、データを受信して、各々のスレッドに対して含むレジスタを更新する。このことは、スレッドがコードのセクション上で分岐したときを認識し、したがって、このスレッドは、他のスレッドが分岐の終わり又は分岐内の同期点に到達するのを待機する間、同期終了待機状態に入る必要がある。さらに、スレッドが分岐することができるコードを実行したときを認識し、スレッドを、コードのセクションの終わりにおける、又は、コードのセクション内の同期点における同期終了待機状態に入れる。この状態は、さらに、ＭＣＣ２にフィードバックされ、そのスレッドに対するレジスタ内に格納される。
【００２２】
スレッドが同期開始／終了待機状態に入ったとき、ＭＣＣは、他のスレッドは、したがって、ストールされたスレッドに以前に割り当てられたスロットにおいて実行されることができることを認識する。したがって、それが有する、実行に使用可能な１６スレッドの別のものに切り換わる。同期されるスレッドのすべてが同期点に到達したときには、これが認識され、ＭＣＣ２は、実行が続けられることが要求されるリソースが使用可能であるかどうか、及び、いずれかの他のスレッドが実行のためにより高い優先度を有するかどうか判断する。適切な時間において、同期されるスレッドの実行が再開される。
【００２３】
本発明の実施形態に用いられるスレッドがコンパイルされるときには、コンパイラは、スレッドのどこで同期点が生じるかを検出し、コンパイルされたスレッドにおいて、ＭＣＣに対して同期点の存在を示す命令を含む。分岐がある場合には、コンパイラは、分岐が同期点を含むかどうか判断しなければならない。含む場合には代替的な分岐、含まない場合には対応する同期点が、同期点上で分岐したことをＭＣＣに示し、分岐の終わりにおいて実行を停止する命令を含む。
【図面の簡単な説明】
【００２４】
【図１】マルチスレッドプロセッサシステムの例のブロック図を示す。
【図２】本発明の実施形態における各々のスレッドに必要とされる決定論理の不ローズを示す。
【図３】本発明の実施形態に用いられるコードのフラグメントを示す。
【図４】図１のＭＣＣ及びデータ処理ユニットのブロック図を示す。
【図１】
2009543170.tif 000003
【図２】
2009543170.tif 000004
【図３】
2009543170.tif 000005
【図４】
2009543170.tif 000006
【国際調査報告】
2009543170.tif 000007
2009543170.tif 000008
2009543170.tif 000009