(57)【要約】【課題】依存関係のある複数のスレッドを連続して実行することで処理の高速化をはかること。【解決手段】実行中のアプリケーション・プログラムについて形成された制御スレッド中で、当該プログラム本来の機能を実現する複数の処理スレッドを生成した際に、これらの間の依存関係（スレッド１はスレッド２の終了後でなければ実行できない、など）もまとめて定義しておく。そして、制御スレッドからこれらのスレッドが起動されると、本発明にかかるスレッドライブラリはその依存関係に従って、これらのスレッドを連続して実行する。すなわち従来技術のように、処理スレッドの起動や終了に際して制御スレッドに制御を戻すことがないので、その分処理の高速化をはかることができる。なお実行順序の制御のほか、あるスレッドの実行結果によってどのスレッドを実行する／しない、などの処理の分岐も可能である。【選択図】        図７
2005258920.tif 000002
【特許請求の範囲】
【請求項１】
依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行方法において、
第１のスレッドの実行前に実行されるべき第２のスレッドを少なくとも一つ指定する指定工程と、
前記第１のスレッドの実行が指示されたのを受けて、前記指定工程で指定された前記第２のスレッドのすべてが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第１のスレッドを実行する実行工程と、
を含むことを特徴とするマルチスレッド実行方法。
【請求項２】
さらに、前記判定工程で前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第２のスレッドの終了時に更新された変数の値にもとづいて前記第１のスレッドを実行してもよいか否かを判定する第２の判定工程を含み、
前記実行工程では、前記第２の判定工程で前記第１のスレッドを実行してもよいと判定された場合に、前記第１のスレッドを実行することを特徴とする前記請求項１に記載のマルチスレッド実行方法。
【請求項３】
依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行方法において、
第１のスレッドの実行後に実行されるべき第２のスレッドを少なくとも一つ指定する指定工程と、
前記指定工程で指定された前記第２のスレッドの実行が指示されたのを受けて、前記第１のスレッドが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第１のスレッドが実行を終了していると判定された場合に、前記第２のスレッドを実行する実行工程と、
を含むことを特徴とするマルチスレッド実行方法。
【請求項４】
さらに、前記判定工程で前記第１のスレッドが実行を終了していると判定された場合に、前記第１のスレッドの終了時に更新された変数の値にもとづいて前記第２のスレッドを実行してもよいか否かを判定する第２の判定工程を含み、
前記実行工程では、前記第２の判定工程で前記第２のスレッドを実行してもよいと判定された場合に、前記第２のスレッドを実行することを特徴とする前記請求項３に記載のマルチスレッド実行方法。
【請求項５】
依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行プログラムにおいて、
第１のスレッドの実行前に実行されるべき第２のスレッドを少なくとも一つ指定する指定工程と、
前記第１のスレッドの実行が指示されたのを受けて、前記指定工程で指定された前記第２のスレッドのすべてが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第１のスレッドを実行する実行工程と、
をプロセッサに実行させることを特徴とするマルチスレッド実行プログラム。
【請求項６】
さらに、前記判定工程で前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第２のスレッドの終了時に更新された変数の値にもとづいて前記第１のスレッドを実行してもよいか否かを判定する第２の判定工程を含み、
前記実行工程では、前記第２の判定工程で前記第１のスレッドを実行してもよいと判定された場合に、前記第１のスレッドを実行することを特徴とする前記請求項５に記載のマルチスレッド実行プログラム。
【請求項７】
依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行プログラムにおいて、
第１のスレッドの実行後に実行されるべき第２のスレッドを少なくとも一つ指定する指定工程と、
前記指定工程で指定された前記第２のスレッドの実行が指示されたのを受けて、前記第１のスレッドが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第１のスレッドが実行を終了していると判定された場合に、前記第２のスレッドを実行する実行工程と、
をプロセッサに実行させることを特徴とするマルチスレッド実行プログラム。
【請求項８】
さらに、前記判定工程で前記第１のスレッドが実行を終了していると判定された場合に、前記第１のスレッドの終了時に更新された変数の値にもとづいて前記第２のスレッドを実行してもよいか否かを判定する第２の判定工程を含み、
前記実行工程では、前記第２の判定工程で前記第２のスレッドを実行してもよいと判定された場合に、前記第２のスレッドを実行することを特徴とする前記請求項７に記載のマルチスレッド実行プログラム。
【請求項９】
依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行装置において、
第１のスレッドの実行前に実行されるべき第２のスレッドを少なくとも一つ指定する指定手段と、
前記第１のスレッドの実行が指示されたのを受けて、前記指定手段により指定された前記第２のスレッドのすべてが実行を終了しているか否かを判定する判定手段と、
前記判定手段により前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第１のスレッドを実行する実行手段と、
を備えることを特徴とするマルチスレッド実行装置。
【請求項１０】
さらに、前記判定手段により前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第２のスレッドの終了時に更新された変数の値にもとづいて前記第１のスレッドを実行してもよいか否かを判定する第２の判定手段を備え、
前記実行手段は、前記第２の判定手段により前記第１のスレッドを実行してもよいと判定された場合に、前記第１のスレッドを実行することを特徴とする前記請求項９に記載のマルチスレッド実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置に関する。
【背景技術】
【０００２】
計算機による処理の高速化を実現する一手法として、マルチスレッドプログラミングがよく知られている。これは一つのタスク（プロセス）が、複数の処理を並行に行うことができるようにする技法の一つである。この従来例としては、ＵＮＩＸ（Ｒ）の並列処理ＡＰＩであるＰＯＳＩＸスレッド（ＰＯＳＩＸ  １００３．１ｃ）などがある。なお、このＰＯＳＩＸスレッドについては下記非特許文献１などに詳しい。
【０００３】
なお、タスクの静的スケジューリングにかかる従来技術として下記特許文献１や特許文献２、タスクやスレッドの実行再開にかかる従来技術として下記特許文献３や特許文献４などがある。
【特許文献１】特開２０００−８９９５５号公報
【特許文献２】特開２００３−２９９８８号公報
【特許文献３】特許第３０７９８２５号公報
【特許文献４】特許第３２３１５７１号公報
【非特許文献１】ビル・ルイス／ダニエル・バーグ著「Ｐスレッドプログラミング」プレンティスホール出版、１９９９
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら従来のマルチスレッドプログラミングにおいては、たとえば図９に示すように、実行中のアプリケーション・プログラム本来の処理を行う複数の処理スレッド１〜６を、もっぱらその実行制御を行う制御スレッドから複数のプロセッサ１〜３に割り当てた場合、処理スレッド１〜６の起動時と終了時に、その都度制御スレッドとスレッドライブラリとの切り替えが発生してしまい、これが全体の処理速度を低下させる原因となっていた。
【０００５】
この発明は上述した従来技術による問題点を解消するため、依存関係のある複数のスレッドを連続して実行することで処理の高速化をはかることが可能なマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するため、この発明にかかるマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置は、制御スレッドから呼び出されるスレッドライブラリが、第１のスレッドの実行前に実行されるべき第２のスレッドを少なくとも一つ指定するとともに、その後第１のスレッドの実行が指示されると、第２のスレッドのすべてが実行を終了していることを条件に当該第１のスレッドを実行する。
【０００７】
この発明によれば、第１のスレッドは制御スレッドから起動されても、その前段の第２のスレッドが終了するまで実際には実行されない。
【０００８】
また、この発明にかかるマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置は、第１のスレッドの実行前に実行されるべき第２のスレッドを少なくとも一つ指定するとともに、その後第１のスレッドの実行が指示されると、第２のスレッドのすべてが実行を終了しかつその終了時に更新される変数の値が所定の条件を満たしていることを条件に当該第１のスレッドを実行する。
【０００９】
この発明によれば、第１のスレッドは制御スレッド中で起動を指示されても、その前段の第２のスレッドの実行結果によって実際には起動されないことがある。
【００１０】
また、この発明にかかるマルチスレッド実行方法およびマルチスレッド実行プログラムは、制御スレッドから呼び出されるスレッドライブラリが、第１のスレッドの実行後に実行されるべき第２のスレッドを少なくとも一つ指定するとともに、その後第２のスレッドの実行が指示されると、第１のスレッドが実行を終了していることを条件に当該第２のスレッドを実行する。
【００１１】
この発明によれば、第２のスレッドは制御スレッドから起動されても、その前段の第１のスレッドが終了するまで実際には実行されない。
【００１２】
また、この発明にかかるマルチスレッド実行方法およびマルチスレッド実行プログラムは、制御スレッドから呼び出されるスレッドライブラリが、第１のスレッドの実行後に実行されるべき第２のスレッドを少なくとも一つ指定するとともに、その後第２のスレッドの実行が指示されると、第１のスレッドが実行を終了しかつその終了時に更新される変数の値が所定の条件を満たしていることを条件に当該第２のスレッドを実行する。
【００１３】
この発明によれば、第２のスレッドは制御スレッド中で起動を指示されても、その前段の第１のスレッドの実行結果によって実際には起動されないことがある。
【発明の効果】
【００１４】
本発明にかかるマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置によれば、制御スレッドで複数のスレッドを生成してその依存関係を定義した上、これらをまとめて起動するだけで、後はスレッドライブラリが当該依存関係やその他の実行条件に応じてこれらを連続的に実行するので、スレッドのコンテキストの切り替えを最小限に抑えることができ、よって処理の高速化をはかることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１５】
以下に添付図面を参照して、この発明にかかるマルチスレッド実行方法、マルチスレッド実行プログラムおよびマルチスレッド実行装置の好適な実施の形態を詳細に説明する。
【００１６】
（実施の形態１）
図１は、この発明の実施の形態１にかかるマルチスレッド実行装置のハードウエア構成を示す説明図である。図示するように実施の形態１にかかるマルチスレッド実行装置は、プロセッサやキャッシュメモリなどから構成される複数のＰＥ（Ｐｒｏｃｅｓｓｏｒ  Ｅｌｅｍｅｎｔ：プロセッサ要素）１００と、各ＰＥ１００から読み書き可能な共有メモリ１０１とがバス１０２で連結された、共有メモリ対称型マルチプロセッサ（Ｓｙｍｍｅｔｒｉｃ  ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ：ＳＭＰ）であるものとする。
【００１７】
また、図２はこの発明の実施の形態１にかかるマルチスレッド実行装置の機能的構成を示す説明図である。図示するように実施の形態１にかかるマルチスレッド実行装置は、スレッド依存関係記憶部２００、スレッド管理情報記憶部２０１、スレッド実行制御部２０２、スレッド実行可否判定部２０３、実行可能スレッド記憶部２０４、スケジューリング部２０５およびスレッド実行部２０６を備えている。そして図示するように、大別してスレッド依存関係記憶部２００〜スケジューリング部２０５がスレッドの実行を制御する機能部であり、スレッド実行部２０６が実際にスレッドを実行する機能部である。
【００１８】
上記のうちスレッド依存関係記憶部２００、スレッド管理情報記憶部２０１および実行可能スレッド記憶部２０４は、具体的には図１に示した共有メモリ１０１により実現される。なお、スレッド依存関係記憶部２００は共有メモリ１０１でなく、より高速な読み書きが可能な専用のハードウエアで実現するようにしてもよい。これにより、処理全体のさらなる高速化をはかることができる。
【００１９】
また、スレッド実行制御部２０２、スレッド実行可否判定部２０３およびスケジューリング部２０５は、この発明にかかるマルチスレッド実行プログラムを実行するＰＥ１００（たとえばＰＥ０）のプロセッサにより実現され、スレッド実行部２０６は上記プログラムによりスレッドを割り当てられたＰＥ１００（たとえばＰＥ１〜ＰＥｎ）のプロセッサにより実現される。
【００２０】
スレッド依存関係記憶部２００は、あるスレッドを開始する前に終了していなければならないスレッド／スレッド群（以下ではこれを「前段のスレッド」という）や、逆にあるスレッドを終了した後に開始しなければならないスレッド／スレッド群（以下ではこれを「後段のスレッド」という）の指定、すなわちスレッド間の依存関係を保持する機能部である。この依存関係は制御スレッド中で、スレッドの生成に続いて記述され、当該箇所から呼び出されたスレッド実行制御部２０２により、スレッド依存関係記憶部２００に保存される。
【００２１】
なお、この依存関係は（１）注目するスレッドの開始前に終了すべきスレッド／スレッド群を指定するデータのみで表現される場合（図３）、（２）注目するスレッドの終了後に開始すべきスレッド／スレッド群を指定するデータのみで表現される場合（図４）、（３）上記（１）（２）の双方により表現される場合（図５）、の３通りがある。図３〜図５において、「Ｎｅｘｔ（ｘ：ｙ）」はスレッドｘがスレッドｙの終了後に開始されなければならないことを、「Ｐｒｅｖ（ｘ：ｙ）」は逆にスレッドｘがスレッドｙの開始前に終了されなければならないことを、それぞれ意味している。なお、図３〜図５はいずれも同一の依存関係を表現したものであるが、図５では図３や図４よりも指定の回数を減らすことができる。
【００２２】
図２の説明に戻り、次にスレッド管理情報記憶部２０１は、後述するスレッド実行可否判定部２０３でスレッドの実行可否を判定するための基礎となる情報、具体的には後述するスレッド実行部２０６におけるスレッドの実行状況など（以下ではこれを「スレッド管理情報」という）を保持する機能部である。
【００２３】
次に、スレッド実行制御部２０２は制御スレッドなどから呼び出されて、複数スレッドの実行の全体を制御する機能部である。そしてそのうち本発明にかかるものは、後述するスレッド実行可否判定部２０３を制御してのスレッドの実行可否判定であるが、このほかスレッド実行制御部２０２は、たとえば制御スレッド中で定義された依存関係のスレッド依存関係記憶部２００への保存、後述するスレッド実行部２０６でのスレッド終了時における、スレッド管理情報記憶部２０１内の管理情報の更新などを行う。
【００２４】
次に、スレッド実行可否判定部２０３は起動されたスレッド、あるいは実行が終了したスレッドの後段のスレッドについて、その実行可否すなわち当該スレッドを実行可能状態にしてもよいかどうかを判定するとともに、実行可と判定したスレッドを実行可能状態にする（具体的には、実行可能スレッド記憶部２０４に出力する）機能部である。また、実行可能スレッド記憶部２０４は、スレッド実行可否判定部２０３で実行可と判定されたスレッドをキューの形で保持する機能部である。
【００２５】
次に、スケジューリング部２０５は実行可能スレッド記憶部２０４に保持された個々の実行可能スレッドを、スレッド実行部２０６内のあいているプロセッサに割り当てる（実行のスケジューリングを行う）機能部である。また、スレッド実行部２０６はスケジューリング部２０５により割り当てられたスレッドを実際に実行する機能部である。
【００２６】
次に、図６はこの発明の実施の形態１にかかるマルチスレッド実行装置における、スレッド実行可否の判定処理の手順を示すフローチャートである。図２のスレッド実行制御部２０２が、制御スレッドからスレッドの起動を指示されると（ステップＳ６０１：Ｙｅｓ）、スレッド実行制御部２０２からさらに指示を受けたスレッド実行可否判定部２０３が、当該スレッドの前段のスレッド（もしあれば）の終了有無を判定する。
【００２７】
すなわち、スレッド実行可否判定部２０３はまずスレッド依存関係記憶部２００を参照して、当該スレッドの前段のスレッドとして何らかのスレッドが指定されているかどうかを調べ（ステップＳ６０２）、もし指定されていれば（ステップＳ６０２：Ｙｅｓ）スレッド管理情報記憶部２０１を参照して、当該前段のスレッドがすべて終了しているかどうかを判定する（ステップＳ６０３）。そして、前段のスレッドがすべて終了していれば（ステップＳ６０３：Ｙｅｓ）、ステップＳ６０１で起動されたスレッドを実行可能状態にする（ステップＳ６０４）。
【００２８】
なお、前段のスレッドが特に指定されていなければ（ステップＳ６０２：Ｎｏ）、起動されたスレッドをそのまま実行可能状態にし（ステップＳ６０４）、指定された前段のスレッドがまだ終了していなければ（ステップＳ６０２：Ｙｅｓ、ステップＳ６０３：Ｎｏ）、何もせずそのまま（すなわち、起動されたスレッドを実行可能状態にはせずに）終了する。
【００２９】
一方、スレッド実行制御部２０２はスレッドの実行終了を契機としてスレッド実行部２０６から呼び出されると（ステップＳ６０１：Ｎｏ、ステップＳ６０５：Ｙｅｓ）、スレッド管理情報記憶部２０１内の管理情報を更新するとともに（ステップＳ６０６）、スレッド実行可否判定部２０３に指示して、上記で終了したスレッドの後段のスレッドにつきその実行可否を判定させる。
【００３０】
すなわち、スレッド実行制御部２０２から指示を受けたスレッド実行可否判定部２０３は、上記で終了したスレッドにつきその後段のスレッドが指定されているかどうかを調べ（ステップＳ６０７）、もし指定されていれば（ステップＳ６０７：Ｙｅｓ）その指定されているスレッドを実行可能状態にする（ステップＳ６０４）。なお、後段のスレッドが特に指定されていなければ（ステップＳ６０７：Ｎｏ）、そのまま終了する。
【００３１】
このように、スレッド実行可否判定部２０３はスレッドの起動あるいは終了のタイミングで、当該スレッドあるいは当該スレッドの後段のスレッドの実行可否を判定するが、上記以外の何らかの事象が発生した場合にも（ステップ６０１：Ｎｏ、ステップＳ６０５：Ｎｏ）、同様の実行可否判定を行うようにしてもよい。上記で説明したスレッドの起動や終了は、これらの事象のうち代表的なものの例示に過ぎないと言ってもよい。
【００３２】
以上説明した実施の形態１によれば、図７に模式的に示すように、いったん複数の処理スレッドが生成されてそれらの依存関係が定義されると、それらが起動されてすべて実行終了するまでの区間７００内では、制御スレッドとスレッドライブラリとの間で制御の行き来が発生しない（従来技術の図９と対比）。すなわち、依存関係のある一連のスレッドが連続して実行されることになり、スレッドのコンテキスト切り替えを少なくできる結果、マルチスレッドによる並列処理をより高速に行うことができる。
【００３３】
なお、上述した実施の形態１では図１に示したようなマルチプロセッサシステムを想定しているが、プロセッサを一つしか備えないシステムでも、コンテキストの切り替えが従来技術よりも減少する結果、同様に処理の高速化を実現することができる。
【００３４】
また、本発明では依存関係のあるスレッドの集合が前もって生成されるので、スレッドライブラリが把握できる「実行されるかもしれない処理スレッドの数」が従来のものより多くなる。すなわち、たとえば図５に示したような順序でスレッド１〜４が実行される場合、従来の動的スケジューリングでスレッドライブラリが把握できる「実行されるかもしれない処理スレッドの数」は、スレッド１の開始前に１個、スレッド２およびスレッド３の開始前に２個、スレッド４の開始前に１個である。これに対して本発明では、動的スケジューリングでありながらもスレッド１の開始前に４個、スレッド２およびスレッド３の開始前に３個、スレッド４の開始前の１個のスレッドを、それぞれ把握可能であり、これによりスレッドの実行方法の自由度が従来よりも高くなる。
【００３５】
（実施の形態２）
さて、上述した実施の形態１では前段のスレッドが終了してさえいれば後段のスレッドを実行可能としたので、たとえばあるスレッドの終了後、その結果によって実行するスレッドを切り替えること（処理の分岐）ができなかった。そこで以下で説明する実施の形態２のように、スレッド間の依存関係のほかに、スレッドの実行条件をより詳細に規定できるようにしてもよい。
【００３６】
実施の形態２にかかるマルチスレッド実行装置のハードウエア構成や機能的構成は、図１および図２に示した実施の形態１のそれと同様であるが、実施の形態２のスレッド管理情報記憶部２０１には、スレッドの実行可否を判定するための情報として複数の制御変数が保持されている。この制御変数にはスレッド実行制御部２０２により、スレッド実行部２０６で実行を終了したスレッドの終了値などが書き込まれるので、スレッド実行可否判定部２０３はこれを参照することで、どのスレッドがどんな状態で終了したかなどを把握できる。
【００３７】
実施の形態２では、処理の分岐を実現するためにたとえば下記のようなＡＰＩを用意する。なお、以下で「真」とは値が０以外であること、「偽」とは値が０であることを意味する。
【００３８】
（１）スレッドを起動するＡＰＩ
（１−１）Ｆｌｇ＝ｓｔａｒｔ＿ｃｒｅａｔｅｄ（Ｐｉ）
（制御変数とは無関係に）スレッドＰｉの起動を指示
（１−２）Ｆｌｇ＝ｓｔａｒｔ＿ｃｒｅａｔｅｄｖ（Ｐｉ［］）
（制御変数とは無関係に）複数スレッドＰｉ［］の起動を指示
（１−３）Ｆｌｇ＝ｃｔｓｔａｒｔ＿ｃｒｅａｔｅｄ（Ｐｉ，Ｅａｂ）
制御変数Ｅａｂが真であることを条件にスレッドＰｉの起動を指示
（１−４）Ｆｌｇ＝ｃｔｓｔａｒｔ＿ｃｒｅａｔｅｄｖ（Ｐｉ［］，Ｅａｂ）
制御変数Ｅａｂが真であることを条件に複数スレッドＰｉ［］の起動を指示
（１−５）Ｆｌｇ＝ｃｆｓｔａｒｔ＿ｃｒｅａｔｅｄ（Ｐｉ，Ｅａｂ）
制御変数Ｅａｂが偽であることを条件にスレッドＰｉの起動を指示
（１−６）Ｆｌｇ＝ｃｆｓｔａｒｔ＿ｃｒｅａｔｅｄｖ（Ｐｉ［］，Ｅａｂ）
制御変数Ｅａｂが偽であることを条件に複数スレッドＰｉ［］の起動を指示
【００３９】
（２）制御変数を更新するＡＰＩ
（２−１）Ｆｌｇ＝ｓｅｔ（Ｅａｋ，Ｅｖａｌ）
制御変数Ｅａｋに値Ｅｖａｌを代入
（２−２）Ｆｌｇ＝ｃｔｓｅｔ（Ｅａｋ，Ｅｖａｌ，Ｅａｂ）
制御変数Ｅａｂが真であることを条件に他の制御変数Ｅａｋに値Ｅｖａｌを代入
（２−３）Ｆｌｇ＝ｃｆｓｅｔ（Ｅａｋ，Ｅｖａｌ，Ｅａｂ）
制御変数Ｅａｂが偽であることを条件に他の制御変数Ｅａｋに値Ｅｖａｌを代入
【００４０】
なお、上記以外のＡＰＩとしては、たとえば制御変数Ｅａｋの値を参照するＡＰＩ、制御変数Ｅａｂの真偽によってスレッドの実行をキャンセルするＡＰＩ、制御変数Ｅａｂの真偽によって他の制御変数Ｅａｋの論理演算や四則演算を行うＡＰＩなどが考えられる。
【００４１】
次に、図８はこの発明の実施の形態２にかかるマルチスレッド実行装置における、スレッド実行可否の判定処理の手順を示すフローチャートである。制御スレッドからスレッドの起動を指示されると（ステップＳ８０１：Ｙｅｓ）、これを検知したスレッド実行制御部２０２からさらに指示を受けたスレッド実行可否判定部２０３が、当該スレッドの前段のスレッド（もしあれば）の終了有無を判定する（ステップＳ８０２）。
【００４２】
そして、前段のスレッドがすべて終了していれば（ステップＳ８０２：Ｙｅｓ、ステップＳ８０３：Ｙｅｓ）、次にステップＳ８０１のスレッド起動指示に、制御変数の真偽の条件が付加されているかどうかを判定する（ステップＳ８０４）。一方、ステップＳ８０２において、前段のスレッドの指定がない場合（ステップＳ８０２：Ｎｏ）は、何もせずにステップＳ８０４へ移行する。また、ステップＳ８０３において、前段のスレッドが終了していなければ（ステップＳ８０３：Ｎｏ）は、何もせずに、一連の処理を終了する。
【００４３】
そして特に制御変数の条件がない、すなわち当該指示が上記（１−１）または（１−２）であった場合は（ステップＳ８０４：Ｎｏ）、当該指示で指定されたスレッドを実行可能状態にする（ステップＳ８０６）。一方、特定の制御変数が真であることを条件とする（１−３）または（１−４）の起動指示、あるいは逆に偽であることを条件とする（１−５）または（１−６）の起動指示であった場合は（ステップＳ８０４：Ｙｅｓ）、当該指示で指定された制御変数が真、あるいは偽である場合にそれぞれ制御変数の条件が満たされたと判断して（ステップＳ８０５：Ｙｅｓ）、当該指示で指定されたスレッドを実行可能状態にする（ステップＳ８０６）。なお、制御変数の条件が満たされない場合は（ステップＳ８０５：Ｎｏ）、何もせずそのまま終了する。
【００４４】
一方、スレッド実行制御部２０２はスレッドの実行終了を契機としてスレッド実行部２０６から呼び出されると（ステップＳ８０１：Ｎｏ、ステップＳ８０７：Ｙｅｓ）、スレッド管理情報記憶部２０１内の管理情報（この中に制御変数が含まれる）を更新するとともに（ステップＳ８０８）、スレッド実行可否判定部２０３に指示して、上記で終了したスレッドの後段のスレッドにつきその実行可否を判定させる。
【００４５】
すなわち、スレッド実行制御部２０２から指示を受けたスレッド実行可否判定部２０３は、上記で終了したスレッドにつきその後段のスレッドが指定されているかどうかを調べる（ステップＳ８０９）。そしてもし指定されていれば（ステップＳ８０９：Ｙｅｓ）、その指定されているスレッドに、制御変数の値による実行の条件があるかどうかを調べ（ステップＳ８０４）、もしある場合は当該条件が満たされる場合に限って（ステップＳ８０４：Ｙｅｓ、ステップＳ８０５：Ｙｅｓ）、また特に条件がない場合はそのまま（ステップＳ８０４：Ｎｏ）、当該後段のスレッドを実行可能状態にする（ステップＳ８０６）。なお、後段のスレッドが複数ある場合は、そのそれぞれについて条件の有無と当該条件の充足の有無を判定する。また、後段のスレッドが特に指定されていなければ（ステップＳ８０９：Ｎｏ）、そのまま終了する。
【００４６】
以上説明した実施の形態２によれば、前段のスレッドが終了しない限り後段のスレッドを開始しないといった、実施の形態１と同様のスレッドの実行制御が可能なほか、制御変数の真偽によってあるスレッドを実行するか否かを指定できるので、前段のスレッドの実行結果による後段のスレッドの選択（処理の分岐）など、より複雑なスレッドの実行制御が可能である。
【００４７】
なお、実施の形態１および２で説明したマルチスレッド実行方法は、予め用意されたプログラムをプロセッサで実行することにより実現することができる。このプログラムは、ＲＯＭ、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のプロセッサで読み取り可能な記録媒体に記録され、プロセッサによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
【００４８】
（付記１）依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行方法において、
第１のスレッドの実行前に実行されるべき第２のスレッドを少なくとも一つ指定する指定工程と、
前記第１のスレッドの実行が指示されたのを受けて、前記指定工程で指定された前記第２のスレッドのすべてが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第１のスレッドを実行する実行工程と、
を含むことを特徴とするマルチスレッド実行方法。
【００４９】
（付記２）さらに、前記判定工程で前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第２のスレッドの終了時に更新された変数の値にもとづいて前記第１のスレッドを実行してもよいか否かを判定する第２の判定工程を含み、
前記実行工程では、前記第２の判定工程で前記第１のスレッドを実行してもよいと判定された場合に、前記第１のスレッドを実行することを特徴とする前記付記１に記載のマルチスレッド実行方法。
【００５０】
（付記３）依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行方法において、
第１のスレッドの実行後に実行されるべき第２のスレッドを少なくとも一つ指定する指定工程と、
前記指定工程で指定された前記第２のスレッドの実行が指示されたのを受けて、前記第１のスレッドが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第１のスレッドが実行を終了していると判定された場合に、前記第２のスレッドを実行する実行工程と、
を含むことを特徴とするマルチスレッド実行方法。
【００５１】
（付記４）さらに、前記判定工程で前記第１のスレッドが実行を終了していると判定された場合に、前記第１のスレッドの終了時に更新された変数の値にもとづいて前記第２のスレッドを実行してもよいか否かを判定する第２の判定工程を含み、
前記実行工程では、前記第２の判定工程で前記第２のスレッドを実行してもよいと判定された場合に、前記第２のスレッドを実行することを特徴とする前記付記３に記載のマルチスレッド実行方法。
【００５２】
（付記５）依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行プログラムにおいて、
第１のスレッドの実行前に実行されるべき第２のスレッドを少なくとも一つ指定する指定工程と、
前記第１のスレッドの実行が指示されたのを受けて、前記指定工程で指定された前記第２のスレッドのすべてが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第１のスレッドを実行する実行工程と、
をプロセッサに実行させることを特徴とするマルチスレッド実行プログラム。
【００５３】
（付記６）さらに、前記判定工程で前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第２のスレッドの終了時に更新された変数の値にもとづいて前記第１のスレッドを実行してもよいか否かを判定する第２の判定工程を含み、
前記実行工程では、前記第２の判定工程で前記第１のスレッドを実行してもよいと判定された場合に、前記第１のスレッドを実行することを特徴とする前記付記５に記載のマルチスレッド実行プログラム。
【００５４】
（付記７）依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行プログラムにおいて、
第１のスレッドの実行後に実行されるべき第２のスレッドを少なくとも一つ指定する指定工程と、
前記指定工程で指定された前記第２のスレッドの実行が指示されたのを受けて、前記第１のスレッドが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第１のスレッドが実行を終了していると判定された場合に、前記第２のスレッドを実行する実行工程と、
をプロセッサに実行させることを特徴とするマルチスレッド実行プログラム。
【００５５】
（付記８）さらに、前記判定工程で前記第１のスレッドが実行を終了していると判定された場合に、前記第１のスレッドの終了時に更新された変数の値にもとづいて前記第２のスレッドを実行してもよいか否かを判定する第２の判定工程を含み、
前記実行工程では、前記第２の判定工程で前記第２のスレッドを実行してもよいと判定された場合に、前記第２のスレッドを実行することを特徴とする前記付記７に記載のマルチスレッド実行プログラム。
【００５６】
（付記９）依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行装置において、
第１のスレッドの実行前に実行されるべき第２のスレッドを少なくとも一つ指定する指定手段と、
前記第１のスレッドの実行が指示されたのを受けて、前記指定手段により指定された前記第２のスレッドのすべてが実行を終了しているか否かを判定する判定手段と、
前記判定手段により前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第１のスレッドを実行する実行手段と、
を備えることを特徴とするマルチスレッド実行装置。
【００５７】
（付記１０）さらに、前記判定手段により前記第２のスレッドのすべてが実行を終了していると判定された場合に、前記第２のスレッドの終了時に更新された変数の値にもとづいて前記第１のスレッドを実行してもよいか否かを判定する第２の判定手段を備え、
前記実行手段は、前記第２の判定手段により前記第１のスレッドを実行してもよいと判定された場合に、前記第１のスレッドを実行することを特徴とする前記付記９に記載のマルチスレッド実行装置。
【００５８】
（付記１１）依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行装置において、
第１のスレッドの実行後に実行されるべき第２のスレッドを少なくとも一つ指定する指定手段と、
前記指定手段により指定された前記第２のスレッドの実行が指示されたのを受けて、前記第１のスレッドが実行を終了しているか否かを判定する判定手段と、
前記判定手段により前記第１のスレッドが実行を終了していると判定された場合に、前記第２のスレッドを実行する実行手段と、
を備えることを特徴とするマルチスレッド実行装置。
【００５９】
（付記１２）さらに、前記判定手段により前記第１のスレッドが実行を終了していると判定された場合に、前記第１のスレッドの終了時に更新された変数の値にもとづいて前記第２のスレッドを実行してもよいか否かを判定する第２の判定手段を備え、
前記実行手段は、前記第２の判定手段により前記第２のスレッドを実行してもよいと判定された場合に、前記第２のスレッドを実行することを特徴とする前記付記１１に記載のマルチスレッド実行装置。
【産業上の利用可能性】
【００６０】
以上のように、本発明にかかるマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置は、マルチスレッドによる処理の高速化に有用であり、特にスレッド間の依存関係が複雑で、従来技術ではコンテキストの切り替えが頻繁に発生してしまうような場合に適している。
【図面の簡単な説明】
【００６１】
【図１】この発明の実施の形態１にかかるマルチスレッド実行装置のハードウエア構成を示す説明図である。
【図２】この発明の実施の形態１にかかるマルチスレッド実行装置の機能的構成を示す説明図である。
【図３】スレッド間の依存関係の定義の一例（注目するスレッドの前段のスレッドを指定する場合）を模式的に示す説明図である。
【図４】スレッド間の依存関係の定義の一例（注目するスレッドの後段のスレッドを指定する場合）を模式的に示す説明図である。
【図５】スレッド間の依存関係の定義の一例（注目するスレッドの前段または後段のスレッドを指定する場合）を模式的に示す説明図である。
【図６】この発明の実施の形態１にかかるマルチスレッド実行装置における、スレッド実行可否の判定処理の手順を示すフローチャートである。
【図７】本発明によるマルチスレッドのシーケンスの一例を示す説明図である。
【図８】この発明の実施の形態２にかかるマルチスレッド実行装置における、スレッド実行可否の判定処理の手順を示すフローチャートである。
【図９】従来技術によるマルチスレッドのシーケンスの一例を示す説明図である。
【符号の説明】
【００６２】
１００  ＰＥ
１０１  共有メモリ
１０２  バス
２００  スレッド依存関係記憶部
２０１  スレッド管理情報記憶部
２０２  スレッド実行制御部
２０３  スレッド実行可否判定部
２０４  実行可能スレッド記憶部
２０５  スケジューリング部
２０６  スレッド実行部
【図１】
2005258920.tif 000003
【図２】
2005258920.tif 000004
【図３】
2005258920.tif 000005
【図４】
2005258920.tif 000006
【図５】
2005258920.tif 000007
【図６】
2005258920.tif 000008
【図７】
2005258920.tif 000009
【図８】
2005258920.tif 000010
【図９】
2005258920.tif 000011