JP2005258920A - マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置 - Google Patents

マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置 Download PDF

Info

Publication number
JP2005258920A
JP2005258920A JP2004071140A JP2004071140A JP2005258920A JP 2005258920 A JP2005258920 A JP 2005258920A JP 2004071140 A JP2004071140 A JP 2004071140A JP 2004071140 A JP2004071140 A JP 2004071140A JP 2005258920 A JP2005258920 A JP 2005258920A
Authority
JP
Japan
Prior art keywords
thread
execution
threads
executed
executing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004071140A
Other languages
English (en)
Inventor
Teruhiko Kamigata
輝彦 上方
Atsuhiro Suga
敦浩 須賀
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2004071140A priority Critical patent/JP2005258920A/ja
Publication of JP2005258920A publication Critical patent/JP2005258920A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】依存関係のある複数のスレッドを連続して実行することで処理の高速化をはかること。
【解決手段】実行中のアプリケーション・プログラムについて形成された制御スレッド中で、当該プログラム本来の機能を実現する複数の処理スレッドを生成した際に、これらの間の依存関係(スレッド1はスレッド2の終了後でなければ実行できない、など)もまとめて定義しておく。そして、制御スレッドからこれらのスレッドが起動されると、本発明にかかるスレッドライブラリはその依存関係に従って、これらのスレッドを連続して実行する。すなわち従来技術のように、処理スレッドの起動や終了に際して制御スレッドに制御を戻すことがないので、その分処理の高速化をはかることができる。なお実行順序の制御のほか、あるスレッドの実行結果によってどのスレッドを実行する/しない、などの処理の分岐も可能である。
【選択図】 図7

Description

この発明は、依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置に関する。
計算機による処理の高速化を実現する一手法として、マルチスレッドプログラミングがよく知られている。これは一つのタスク(プロセス)が、複数の処理を並行に行うことができるようにする技法の一つである。この従来例としては、UNIX(R)の並列処理APIであるPOSIXスレッド(POSIX 1003.1c)などがある。なお、このPOSIXスレッドについては下記非特許文献1などに詳しい。
なお、タスクの静的スケジューリングにかかる従来技術として下記特許文献1や特許文献2、タスクやスレッドの実行再開にかかる従来技術として下記特許文献3や特許文献4などがある。
特開2000−89955号公報 特開2003−29988号公報 特許第3079825号公報 特許第3231571号公報 ビル・ルイス/ダニエル・バーグ著「Pスレッドプログラミング」プレンティスホール出版、1999
しかしながら従来のマルチスレッドプログラミングにおいては、たとえば図9に示すように、実行中のアプリケーション・プログラム本来の処理を行う複数の処理スレッド1〜6を、もっぱらその実行制御を行う制御スレッドから複数のプロセッサ1〜3に割り当てた場合、処理スレッド1〜6の起動時と終了時に、その都度制御スレッドとスレッドライブラリとの切り替えが発生してしまい、これが全体の処理速度を低下させる原因となっていた。
この発明は上述した従来技術による問題点を解消するため、依存関係のある複数のスレッドを連続して実行することで処理の高速化をはかることが可能なマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置を提供することを目的とする。
上述した課題を解決し、目的を達成するため、この発明にかかるマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置は、制御スレッドから呼び出されるスレッドライブラリが、第1のスレッドの実行前に実行されるべき第2のスレッドを少なくとも一つ指定するとともに、その後第1のスレッドの実行が指示されると、第2のスレッドのすべてが実行を終了していることを条件に当該第1のスレッドを実行する。
この発明によれば、第1のスレッドは制御スレッドから起動されても、その前段の第2のスレッドが終了するまで実際には実行されない。
また、この発明にかかるマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置は、第1のスレッドの実行前に実行されるべき第2のスレッドを少なくとも一つ指定するとともに、その後第1のスレッドの実行が指示されると、第2のスレッドのすべてが実行を終了しかつその終了時に更新される変数の値が所定の条件を満たしていることを条件に当該第1のスレッドを実行する。
この発明によれば、第1のスレッドは制御スレッド中で起動を指示されても、その前段の第2のスレッドの実行結果によって実際には起動されないことがある。
また、この発明にかかるマルチスレッド実行方法およびマルチスレッド実行プログラムは、制御スレッドから呼び出されるスレッドライブラリが、第1のスレッドの実行後に実行されるべき第2のスレッドを少なくとも一つ指定するとともに、その後第2のスレッドの実行が指示されると、第1のスレッドが実行を終了していることを条件に当該第2のスレッドを実行する。
この発明によれば、第2のスレッドは制御スレッドから起動されても、その前段の第1のスレッドが終了するまで実際には実行されない。
また、この発明にかかるマルチスレッド実行方法およびマルチスレッド実行プログラムは、制御スレッドから呼び出されるスレッドライブラリが、第1のスレッドの実行後に実行されるべき第2のスレッドを少なくとも一つ指定するとともに、その後第2のスレッドの実行が指示されると、第1のスレッドが実行を終了しかつその終了時に更新される変数の値が所定の条件を満たしていることを条件に当該第2のスレッドを実行する。
この発明によれば、第2のスレッドは制御スレッド中で起動を指示されても、その前段の第1のスレッドの実行結果によって実際には起動されないことがある。
本発明にかかるマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置によれば、制御スレッドで複数のスレッドを生成してその依存関係を定義した上、これらをまとめて起動するだけで、後はスレッドライブラリが当該依存関係やその他の実行条件に応じてこれらを連続的に実行するので、スレッドのコンテキストの切り替えを最小限に抑えることができ、よって処理の高速化をはかることができるという効果を奏する。
以下に添付図面を参照して、この発明にかかるマルチスレッド実行方法、マルチスレッド実行プログラムおよびマルチスレッド実行装置の好適な実施の形態を詳細に説明する。
(実施の形態1)
図1は、この発明の実施の形態1にかかるマルチスレッド実行装置のハードウエア構成を示す説明図である。図示するように実施の形態1にかかるマルチスレッド実行装置は、プロセッサやキャッシュメモリなどから構成される複数のPE(Processor Element:プロセッサ要素)100と、各PE100から読み書き可能な共有メモリ101とがバス102で連結された、共有メモリ対称型マルチプロセッサ(Symmetric multiprocessor:SMP)であるものとする。
また、図2はこの発明の実施の形態1にかかるマルチスレッド実行装置の機能的構成を示す説明図である。図示するように実施の形態1にかかるマルチスレッド実行装置は、スレッド依存関係記憶部200、スレッド管理情報記憶部201、スレッド実行制御部202、スレッド実行可否判定部203、実行可能スレッド記憶部204、スケジューリング部205およびスレッド実行部206を備えている。そして図示するように、大別してスレッド依存関係記憶部200〜スケジューリング部205がスレッドの実行を制御する機能部であり、スレッド実行部206が実際にスレッドを実行する機能部である。
上記のうちスレッド依存関係記憶部200、スレッド管理情報記憶部201および実行可能スレッド記憶部204は、具体的には図1に示した共有メモリ101により実現される。なお、スレッド依存関係記憶部200は共有メモリ101でなく、より高速な読み書きが可能な専用のハードウエアで実現するようにしてもよい。これにより、処理全体のさらなる高速化をはかることができる。
また、スレッド実行制御部202、スレッド実行可否判定部203およびスケジューリング部205は、この発明にかかるマルチスレッド実行プログラムを実行するPE100(たとえばPE0)のプロセッサにより実現され、スレッド実行部206は上記プログラムによりスレッドを割り当てられたPE100(たとえばPE1〜PEn)のプロセッサにより実現される。
スレッド依存関係記憶部200は、あるスレッドを開始する前に終了していなければならないスレッド/スレッド群(以下ではこれを「前段のスレッド」という)や、逆にあるスレッドを終了した後に開始しなければならないスレッド/スレッド群(以下ではこれを「後段のスレッド」という)の指定、すなわちスレッド間の依存関係を保持する機能部である。この依存関係は制御スレッド中で、スレッドの生成に続いて記述され、当該箇所から呼び出されたスレッド実行制御部202により、スレッド依存関係記憶部200に保存される。
なお、この依存関係は(1)注目するスレッドの開始前に終了すべきスレッド/スレッド群を指定するデータのみで表現される場合(図3)、(2)注目するスレッドの終了後に開始すべきスレッド/スレッド群を指定するデータのみで表現される場合(図4)、(3)上記(1)(2)の双方により表現される場合(図5)、の3通りがある。図3〜図5において、「Next(x:y)」はスレッドxがスレッドyの終了後に開始されなければならないことを、「Prev(x:y)」は逆にスレッドxがスレッドyの開始前に終了されなければならないことを、それぞれ意味している。なお、図3〜図5はいずれも同一の依存関係を表現したものであるが、図5では図3や図4よりも指定の回数を減らすことができる。
図2の説明に戻り、次にスレッド管理情報記憶部201は、後述するスレッド実行可否判定部203でスレッドの実行可否を判定するための基礎となる情報、具体的には後述するスレッド実行部206におけるスレッドの実行状況など(以下ではこれを「スレッド管理情報」という)を保持する機能部である。
次に、スレッド実行制御部202は制御スレッドなどから呼び出されて、複数スレッドの実行の全体を制御する機能部である。そしてそのうち本発明にかかるものは、後述するスレッド実行可否判定部203を制御してのスレッドの実行可否判定であるが、このほかスレッド実行制御部202は、たとえば制御スレッド中で定義された依存関係のスレッド依存関係記憶部200への保存、後述するスレッド実行部206でのスレッド終了時における、スレッド管理情報記憶部201内の管理情報の更新などを行う。
次に、スレッド実行可否判定部203は起動されたスレッド、あるいは実行が終了したスレッドの後段のスレッドについて、その実行可否すなわち当該スレッドを実行可能状態にしてもよいかどうかを判定するとともに、実行可と判定したスレッドを実行可能状態にする(具体的には、実行可能スレッド記憶部204に出力する)機能部である。また、実行可能スレッド記憶部204は、スレッド実行可否判定部203で実行可と判定されたスレッドをキューの形で保持する機能部である。
次に、スケジューリング部205は実行可能スレッド記憶部204に保持された個々の実行可能スレッドを、スレッド実行部206内のあいているプロセッサに割り当てる(実行のスケジューリングを行う)機能部である。また、スレッド実行部206はスケジューリング部205により割り当てられたスレッドを実際に実行する機能部である。
次に、図6はこの発明の実施の形態1にかかるマルチスレッド実行装置における、スレッド実行可否の判定処理の手順を示すフローチャートである。図2のスレッド実行制御部202が、制御スレッドからスレッドの起動を指示されると(ステップS601:Yes)、スレッド実行制御部202からさらに指示を受けたスレッド実行可否判定部203が、当該スレッドの前段のスレッド(もしあれば)の終了有無を判定する。
すなわち、スレッド実行可否判定部203はまずスレッド依存関係記憶部200を参照して、当該スレッドの前段のスレッドとして何らかのスレッドが指定されているかどうかを調べ(ステップS602)、もし指定されていれば(ステップS602:Yes)スレッド管理情報記憶部201を参照して、当該前段のスレッドがすべて終了しているかどうかを判定する(ステップS603)。そして、前段のスレッドがすべて終了していれば(ステップS603:Yes)、ステップS601で起動されたスレッドを実行可能状態にする(ステップS604)。
なお、前段のスレッドが特に指定されていなければ(ステップS602:No)、起動されたスレッドをそのまま実行可能状態にし(ステップS604)、指定された前段のスレッドがまだ終了していなければ(ステップS602:Yes、ステップS603:No)、何もせずそのまま(すなわち、起動されたスレッドを実行可能状態にはせずに)終了する。
一方、スレッド実行制御部202はスレッドの実行終了を契機としてスレッド実行部206から呼び出されると(ステップS601:No、ステップS605:Yes)、スレッド管理情報記憶部201内の管理情報を更新するとともに(ステップS606)、スレッド実行可否判定部203に指示して、上記で終了したスレッドの後段のスレッドにつきその実行可否を判定させる。
すなわち、スレッド実行制御部202から指示を受けたスレッド実行可否判定部203は、上記で終了したスレッドにつきその後段のスレッドが指定されているかどうかを調べ(ステップS607)、もし指定されていれば(ステップS607:Yes)その指定されているスレッドを実行可能状態にする(ステップS604)。なお、後段のスレッドが特に指定されていなければ(ステップS607:No)、そのまま終了する。
このように、スレッド実行可否判定部203はスレッドの起動あるいは終了のタイミングで、当該スレッドあるいは当該スレッドの後段のスレッドの実行可否を判定するが、上記以外の何らかの事象が発生した場合にも(ステップ601:No、ステップS605:No)、同様の実行可否判定を行うようにしてもよい。上記で説明したスレッドの起動や終了は、これらの事象のうち代表的なものの例示に過ぎないと言ってもよい。
以上説明した実施の形態1によれば、図7に模式的に示すように、いったん複数の処理スレッドが生成されてそれらの依存関係が定義されると、それらが起動されてすべて実行終了するまでの区間700内では、制御スレッドとスレッドライブラリとの間で制御の行き来が発生しない(従来技術の図9と対比)。すなわち、依存関係のある一連のスレッドが連続して実行されることになり、スレッドのコンテキスト切り替えを少なくできる結果、マルチスレッドによる並列処理をより高速に行うことができる。
なお、上述した実施の形態1では図1に示したようなマルチプロセッサシステムを想定しているが、プロセッサを一つしか備えないシステムでも、コンテキストの切り替えが従来技術よりも減少する結果、同様に処理の高速化を実現することができる。
また、本発明では依存関係のあるスレッドの集合が前もって生成されるので、スレッドライブラリが把握できる「実行されるかもしれない処理スレッドの数」が従来のものより多くなる。すなわち、たとえば図5に示したような順序でスレッド1〜4が実行される場合、従来の動的スケジューリングでスレッドライブラリが把握できる「実行されるかもしれない処理スレッドの数」は、スレッド1の開始前に1個、スレッド2およびスレッド3の開始前に2個、スレッド4の開始前に1個である。これに対して本発明では、動的スケジューリングでありながらもスレッド1の開始前に4個、スレッド2およびスレッド3の開始前に3個、スレッド4の開始前の1個のスレッドを、それぞれ把握可能であり、これによりスレッドの実行方法の自由度が従来よりも高くなる。
(実施の形態2)
さて、上述した実施の形態1では前段のスレッドが終了してさえいれば後段のスレッドを実行可能としたので、たとえばあるスレッドの終了後、その結果によって実行するスレッドを切り替えること(処理の分岐)ができなかった。そこで以下で説明する実施の形態2のように、スレッド間の依存関係のほかに、スレッドの実行条件をより詳細に規定できるようにしてもよい。
実施の形態2にかかるマルチスレッド実行装置のハードウエア構成や機能的構成は、図1および図2に示した実施の形態1のそれと同様であるが、実施の形態2のスレッド管理情報記憶部201には、スレッドの実行可否を判定するための情報として複数の制御変数が保持されている。この制御変数にはスレッド実行制御部202により、スレッド実行部206で実行を終了したスレッドの終了値などが書き込まれるので、スレッド実行可否判定部203はこれを参照することで、どのスレッドがどんな状態で終了したかなどを把握できる。
実施の形態2では、処理の分岐を実現するためにたとえば下記のようなAPIを用意する。なお、以下で「真」とは値が0以外であること、「偽」とは値が0であることを意味する。
(1)スレッドを起動するAPI
(1−1)Flg=start_created(Pi)
(制御変数とは無関係に)スレッドPiの起動を指示
(1−2)Flg=start_createdv(Pi[])
(制御変数とは無関係に)複数スレッドPi[]の起動を指示
(1−3)Flg=ctstart_created(Pi,Eab)
制御変数Eabが真であることを条件にスレッドPiの起動を指示
(1−4)Flg=ctstart_createdv(Pi[],Eab)
制御変数Eabが真であることを条件に複数スレッドPi[]の起動を指示
(1−5)Flg=cfstart_created(Pi,Eab)
制御変数Eabが偽であることを条件にスレッドPiの起動を指示
(1−6)Flg=cfstart_createdv(Pi[],Eab)
制御変数Eabが偽であることを条件に複数スレッドPi[]の起動を指示
(2)制御変数を更新するAPI
(2−1)Flg=set(Eak,Eval)
制御変数Eakに値Evalを代入
(2−2)Flg=ctset(Eak,Eval,Eab)
制御変数Eabが真であることを条件に他の制御変数Eakに値Evalを代入
(2−3)Flg=cfset(Eak,Eval,Eab)
制御変数Eabが偽であることを条件に他の制御変数Eakに値Evalを代入
なお、上記以外のAPIとしては、たとえば制御変数Eakの値を参照するAPI、制御変数Eabの真偽によってスレッドの実行をキャンセルするAPI、制御変数Eabの真偽によって他の制御変数Eakの論理演算や四則演算を行うAPIなどが考えられる。
次に、図8はこの発明の実施の形態2にかかるマルチスレッド実行装置における、スレッド実行可否の判定処理の手順を示すフローチャートである。制御スレッドからスレッドの起動を指示されると(ステップS801:Yes)、これを検知したスレッド実行制御部202からさらに指示を受けたスレッド実行可否判定部203が、当該スレッドの前段のスレッド(もしあれば)の終了有無を判定する(ステップS802)。
そして、前段のスレッドがすべて終了していれば(ステップS802:Yes、ステップS803:Yes)、次にステップS801のスレッド起動指示に、制御変数の真偽の条件が付加されているかどうかを判定する(ステップS804)。一方、ステップS802において、前段のスレッドの指定がない場合(ステップS802:No)は、何もせずにステップS804へ移行する。また、ステップS803において、前段のスレッドが終了していなければ(ステップS803:No)は、何もせずに、一連の処理を終了する。
そして特に制御変数の条件がない、すなわち当該指示が上記(1−1)または(1−2)であった場合は(ステップS804:No)、当該指示で指定されたスレッドを実行可能状態にする(ステップS806)。一方、特定の制御変数が真であることを条件とする(1−3)または(1−4)の起動指示、あるいは逆に偽であることを条件とする(1−5)または(1−6)の起動指示であった場合は(ステップS804:Yes)、当該指示で指定された制御変数が真、あるいは偽である場合にそれぞれ制御変数の条件が満たされたと判断して(ステップS805:Yes)、当該指示で指定されたスレッドを実行可能状態にする(ステップS806)。なお、制御変数の条件が満たされない場合は(ステップS805:No)、何もせずそのまま終了する。
一方、スレッド実行制御部202はスレッドの実行終了を契機としてスレッド実行部206から呼び出されると(ステップS801:No、ステップS807:Yes)、スレッド管理情報記憶部201内の管理情報(この中に制御変数が含まれる)を更新するとともに(ステップS808)、スレッド実行可否判定部203に指示して、上記で終了したスレッドの後段のスレッドにつきその実行可否を判定させる。
すなわち、スレッド実行制御部202から指示を受けたスレッド実行可否判定部203は、上記で終了したスレッドにつきその後段のスレッドが指定されているかどうかを調べる(ステップS809)。そしてもし指定されていれば(ステップS809:Yes)、その指定されているスレッドに、制御変数の値による実行の条件があるかどうかを調べ(ステップS804)、もしある場合は当該条件が満たされる場合に限って(ステップS804:Yes、ステップS805:Yes)、また特に条件がない場合はそのまま(ステップS804:No)、当該後段のスレッドを実行可能状態にする(ステップS806)。なお、後段のスレッドが複数ある場合は、そのそれぞれについて条件の有無と当該条件の充足の有無を判定する。また、後段のスレッドが特に指定されていなければ(ステップS809:No)、そのまま終了する。
以上説明した実施の形態2によれば、前段のスレッドが終了しない限り後段のスレッドを開始しないといった、実施の形態1と同様のスレッドの実行制御が可能なほか、制御変数の真偽によってあるスレッドを実行するか否かを指定できるので、前段のスレッドの実行結果による後段のスレッドの選択(処理の分岐)など、より複雑なスレッドの実行制御が可能である。
なお、実施の形態1および2で説明したマルチスレッド実行方法は、予め用意されたプログラムをプロセッサで実行することにより実現することができる。このプログラムは、ROM、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のプロセッサで読み取り可能な記録媒体に記録され、プロセッサによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネット等のネットワークを介して配布することが可能な伝送媒体であってもよい。
(付記1)依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行方法において、
第1のスレッドの実行前に実行されるべき第2のスレッドを少なくとも一つ指定する指定工程と、
前記第1のスレッドの実行が指示されたのを受けて、前記指定工程で指定された前記第2のスレッドのすべてが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第1のスレッドを実行する実行工程と、
を含むことを特徴とするマルチスレッド実行方法。
(付記2)さらに、前記判定工程で前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第2のスレッドの終了時に更新された変数の値にもとづいて前記第1のスレッドを実行してもよいか否かを判定する第2の判定工程を含み、
前記実行工程では、前記第2の判定工程で前記第1のスレッドを実行してもよいと判定された場合に、前記第1のスレッドを実行することを特徴とする前記付記1に記載のマルチスレッド実行方法。
(付記3)依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行方法において、
第1のスレッドの実行後に実行されるべき第2のスレッドを少なくとも一つ指定する指定工程と、
前記指定工程で指定された前記第2のスレッドの実行が指示されたのを受けて、前記第1のスレッドが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第1のスレッドが実行を終了していると判定された場合に、前記第2のスレッドを実行する実行工程と、
を含むことを特徴とするマルチスレッド実行方法。
(付記4)さらに、前記判定工程で前記第1のスレッドが実行を終了していると判定された場合に、前記第1のスレッドの終了時に更新された変数の値にもとづいて前記第2のスレッドを実行してもよいか否かを判定する第2の判定工程を含み、
前記実行工程では、前記第2の判定工程で前記第2のスレッドを実行してもよいと判定された場合に、前記第2のスレッドを実行することを特徴とする前記付記3に記載のマルチスレッド実行方法。
(付記5)依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行プログラムにおいて、
第1のスレッドの実行前に実行されるべき第2のスレッドを少なくとも一つ指定する指定工程と、
前記第1のスレッドの実行が指示されたのを受けて、前記指定工程で指定された前記第2のスレッドのすべてが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第1のスレッドを実行する実行工程と、
をプロセッサに実行させることを特徴とするマルチスレッド実行プログラム。
(付記6)さらに、前記判定工程で前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第2のスレッドの終了時に更新された変数の値にもとづいて前記第1のスレッドを実行してもよいか否かを判定する第2の判定工程を含み、
前記実行工程では、前記第2の判定工程で前記第1のスレッドを実行してもよいと判定された場合に、前記第1のスレッドを実行することを特徴とする前記付記5に記載のマルチスレッド実行プログラム。
(付記7)依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行プログラムにおいて、
第1のスレッドの実行後に実行されるべき第2のスレッドを少なくとも一つ指定する指定工程と、
前記指定工程で指定された前記第2のスレッドの実行が指示されたのを受けて、前記第1のスレッドが実行を終了しているか否かを判定する判定工程と、
前記判定工程で前記第1のスレッドが実行を終了していると判定された場合に、前記第2のスレッドを実行する実行工程と、
をプロセッサに実行させることを特徴とするマルチスレッド実行プログラム。
(付記8)さらに、前記判定工程で前記第1のスレッドが実行を終了していると判定された場合に、前記第1のスレッドの終了時に更新された変数の値にもとづいて前記第2のスレッドを実行してもよいか否かを判定する第2の判定工程を含み、
前記実行工程では、前記第2の判定工程で前記第2のスレッドを実行してもよいと判定された場合に、前記第2のスレッドを実行することを特徴とする前記付記7に記載のマルチスレッド実行プログラム。
(付記9)依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行装置において、
第1のスレッドの実行前に実行されるべき第2のスレッドを少なくとも一つ指定する指定手段と、
前記第1のスレッドの実行が指示されたのを受けて、前記指定手段により指定された前記第2のスレッドのすべてが実行を終了しているか否かを判定する判定手段と、
前記判定手段により前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第1のスレッドを実行する実行手段と、
を備えることを特徴とするマルチスレッド実行装置。
(付記10)さらに、前記判定手段により前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第2のスレッドの終了時に更新された変数の値にもとづいて前記第1のスレッドを実行してもよいか否かを判定する第2の判定手段を備え、
前記実行手段は、前記第2の判定手段により前記第1のスレッドを実行してもよいと判定された場合に、前記第1のスレッドを実行することを特徴とする前記付記9に記載のマルチスレッド実行装置。
(付記11)依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行装置において、
第1のスレッドの実行後に実行されるべき第2のスレッドを少なくとも一つ指定する指定手段と、
前記指定手段により指定された前記第2のスレッドの実行が指示されたのを受けて、前記第1のスレッドが実行を終了しているか否かを判定する判定手段と、
前記判定手段により前記第1のスレッドが実行を終了していると判定された場合に、前記第2のスレッドを実行する実行手段と、
を備えることを特徴とするマルチスレッド実行装置。
(付記12)さらに、前記判定手段により前記第1のスレッドが実行を終了していると判定された場合に、前記第1のスレッドの終了時に更新された変数の値にもとづいて前記第2のスレッドを実行してもよいか否かを判定する第2の判定手段を備え、
前記実行手段は、前記第2の判定手段により前記第2のスレッドを実行してもよいと判定された場合に、前記第2のスレッドを実行することを特徴とする前記付記11に記載のマルチスレッド実行装置。
以上のように、本発明にかかるマルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置は、マルチスレッドによる処理の高速化に有用であり、特にスレッド間の依存関係が複雑で、従来技術ではコンテキストの切り替えが頻繁に発生してしまうような場合に適している。
この発明の実施の形態1にかかるマルチスレッド実行装置のハードウエア構成を示す説明図である。 この発明の実施の形態1にかかるマルチスレッド実行装置の機能的構成を示す説明図である。 スレッド間の依存関係の定義の一例(注目するスレッドの前段のスレッドを指定する場合)を模式的に示す説明図である。 スレッド間の依存関係の定義の一例(注目するスレッドの後段のスレッドを指定する場合)を模式的に示す説明図である。 スレッド間の依存関係の定義の一例(注目するスレッドの前段または後段のスレッドを指定する場合)を模式的に示す説明図である。 この発明の実施の形態1にかかるマルチスレッド実行装置における、スレッド実行可否の判定処理の手順を示すフローチャートである。 本発明によるマルチスレッドのシーケンスの一例を示す説明図である。 この発明の実施の形態2にかかるマルチスレッド実行装置における、スレッド実行可否の判定処理の手順を示すフローチャートである。 従来技術によるマルチスレッドのシーケンスの一例を示す説明図である。
符号の説明
100 PE
101 共有メモリ
102 バス
200 スレッド依存関係記憶部
201 スレッド管理情報記憶部
202 スレッド実行制御部
203 スレッド実行可否判定部
204 実行可能スレッド記憶部
205 スケジューリング部
206 スレッド実行部

Claims (10)

  1. 依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行方法において、
    第1のスレッドの実行前に実行されるべき第2のスレッドを少なくとも一つ指定する指定工程と、
    前記第1のスレッドの実行が指示されたのを受けて、前記指定工程で指定された前記第2のスレッドのすべてが実行を終了しているか否かを判定する判定工程と、
    前記判定工程で前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第1のスレッドを実行する実行工程と、
    を含むことを特徴とするマルチスレッド実行方法。
  2. さらに、前記判定工程で前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第2のスレッドの終了時に更新された変数の値にもとづいて前記第1のスレッドを実行してもよいか否かを判定する第2の判定工程を含み、
    前記実行工程では、前記第2の判定工程で前記第1のスレッドを実行してもよいと判定された場合に、前記第1のスレッドを実行することを特徴とする前記請求項1に記載のマルチスレッド実行方法。
  3. 依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行方法において、
    第1のスレッドの実行後に実行されるべき第2のスレッドを少なくとも一つ指定する指定工程と、
    前記指定工程で指定された前記第2のスレッドの実行が指示されたのを受けて、前記第1のスレッドが実行を終了しているか否かを判定する判定工程と、
    前記判定工程で前記第1のスレッドが実行を終了していると判定された場合に、前記第2のスレッドを実行する実行工程と、
    を含むことを特徴とするマルチスレッド実行方法。
  4. さらに、前記判定工程で前記第1のスレッドが実行を終了していると判定された場合に、前記第1のスレッドの終了時に更新された変数の値にもとづいて前記第2のスレッドを実行してもよいか否かを判定する第2の判定工程を含み、
    前記実行工程では、前記第2の判定工程で前記第2のスレッドを実行してもよいと判定された場合に、前記第2のスレッドを実行することを特徴とする前記請求項3に記載のマルチスレッド実行方法。
  5. 依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行プログラムにおいて、
    第1のスレッドの実行前に実行されるべき第2のスレッドを少なくとも一つ指定する指定工程と、
    前記第1のスレッドの実行が指示されたのを受けて、前記指定工程で指定された前記第2のスレッドのすべてが実行を終了しているか否かを判定する判定工程と、
    前記判定工程で前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第1のスレッドを実行する実行工程と、
    をプロセッサに実行させることを特徴とするマルチスレッド実行プログラム。
  6. さらに、前記判定工程で前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第2のスレッドの終了時に更新された変数の値にもとづいて前記第1のスレッドを実行してもよいか否かを判定する第2の判定工程を含み、
    前記実行工程では、前記第2の判定工程で前記第1のスレッドを実行してもよいと判定された場合に、前記第1のスレッドを実行することを特徴とする前記請求項5に記載のマルチスレッド実行プログラム。
  7. 依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行プログラムにおいて、
    第1のスレッドの実行後に実行されるべき第2のスレッドを少なくとも一つ指定する指定工程と、
    前記指定工程で指定された前記第2のスレッドの実行が指示されたのを受けて、前記第1のスレッドが実行を終了しているか否かを判定する判定工程と、
    前記判定工程で前記第1のスレッドが実行を終了していると判定された場合に、前記第2のスレッドを実行する実行工程と、
    をプロセッサに実行させることを特徴とするマルチスレッド実行プログラム。
  8. さらに、前記判定工程で前記第1のスレッドが実行を終了していると判定された場合に、前記第1のスレッドの終了時に更新された変数の値にもとづいて前記第2のスレッドを実行してもよいか否かを判定する第2の判定工程を含み、
    前記実行工程では、前記第2の判定工程で前記第2のスレッドを実行してもよいと判定された場合に、前記第2のスレッドを実行することを特徴とする前記請求項7に記載のマルチスレッド実行プログラム。
  9. 依存関係のある複数のスレッドをプロセッサにより実行するマルチスレッド実行装置において、
    第1のスレッドの実行前に実行されるべき第2のスレッドを少なくとも一つ指定する指定手段と、
    前記第1のスレッドの実行が指示されたのを受けて、前記指定手段により指定された前記第2のスレッドのすべてが実行を終了しているか否かを判定する判定手段と、
    前記判定手段により前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第1のスレッドを実行する実行手段と、
    を備えることを特徴とするマルチスレッド実行装置。
  10. さらに、前記判定手段により前記第2のスレッドのすべてが実行を終了していると判定された場合に、前記第2のスレッドの終了時に更新された変数の値にもとづいて前記第1のスレッドを実行してもよいか否かを判定する第2の判定手段を備え、
    前記実行手段は、前記第2の判定手段により前記第1のスレッドを実行してもよいと判定された場合に、前記第1のスレッドを実行することを特徴とする前記請求項9に記載のマルチスレッド実行装置。

JP2004071140A 2004-03-12 2004-03-12 マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置 Pending JP2005258920A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004071140A JP2005258920A (ja) 2004-03-12 2004-03-12 マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004071140A JP2005258920A (ja) 2004-03-12 2004-03-12 マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置

Publications (1)

Publication Number Publication Date
JP2005258920A true JP2005258920A (ja) 2005-09-22

Family

ID=35084555

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004071140A Pending JP2005258920A (ja) 2004-03-12 2004-03-12 マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置

Country Status (1)

Country Link
JP (1) JP2005258920A (ja)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008041442A1 (fr) * 2006-09-29 2008-04-10 Fujitsu Limited Procédé de création de programme par parallélisation, dispositif de création de programme par parallélisation, et programme de création de programme par parallélisation
JP2008158759A (ja) * 2006-12-22 2008-07-10 Toshiba Corp プログラミング方法、プログラム処理方法、処理プログラム及び情報処理装置
WO2008120367A1 (ja) * 2007-03-29 2008-10-09 Fujitsu Limited 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム
JP2009020692A (ja) * 2007-07-11 2009-01-29 Toshiba Corp タスク管理装置、タスク管理方法及びタスク管理プログラム
JP2009175882A (ja) * 2008-01-22 2009-08-06 Fujitsu Ltd 並列化プログラム生成方法、並列化プログラム生成プログラム、及び並列化プログラム生成装置
JP2010020650A (ja) * 2008-07-14 2010-01-28 Sony Corp 情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラム
US7788672B2 (en) 2008-06-27 2010-08-31 Kabushiki Kaisha Toshiba System for controlling assignment of a plurality of modules of a program to available execution units based on speculative executing and granularity adjusting
US8074211B2 (en) 2008-09-30 2011-12-06 Kabushiki Kaisha Toshiba Computer program, multiprocessor system, and grouping method
WO2012020478A1 (ja) * 2010-08-10 2012-02-16 富士通株式会社 スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法
US8196146B2 (en) 2007-09-25 2012-06-05 Kabushiki Kaisha Toshiba Information processing apparatus, parallel processing optimization method, and program
US8255911B2 (en) 2009-04-28 2012-08-28 Kabushiki Kaisha Toshiba System and method for selecting and assigning a basic module with a minimum transfer cost to thread
US8544620B2 (en) * 2004-11-24 2013-10-01 Toyota Jidosha Kabushiki Kaisha Suspension apparatus for vehicle
JP2016520912A (ja) * 2013-04-23 2016-07-14 アビニシオ テクノロジー エルエルシー コンピューティングシステムによって実行されるタスクの制御

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8544620B2 (en) * 2004-11-24 2013-10-01 Toyota Jidosha Kabushiki Kaisha Suspension apparatus for vehicle
JP2008090541A (ja) * 2006-09-29 2008-04-17 Fujitsu Ltd 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム
WO2008041442A1 (fr) * 2006-09-29 2008-04-10 Fujitsu Limited Procédé de création de programme par parallélisation, dispositif de création de programme par parallélisation, et programme de création de programme par parallélisation
JP2008158759A (ja) * 2006-12-22 2008-07-10 Toshiba Corp プログラミング方法、プログラム処理方法、処理プログラム及び情報処理装置
US8656347B2 (en) 2007-03-29 2014-02-18 Fujitsu Limited Generation of parallelized program based on program dependence graph
WO2008120367A1 (ja) * 2007-03-29 2008-10-09 Fujitsu Limited 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム
JPWO2008120367A1 (ja) * 2007-03-29 2010-07-15 富士通株式会社 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム
JP2009020692A (ja) * 2007-07-11 2009-01-29 Toshiba Corp タスク管理装置、タスク管理方法及びタスク管理プログラム
US8196146B2 (en) 2007-09-25 2012-06-05 Kabushiki Kaisha Toshiba Information processing apparatus, parallel processing optimization method, and program
JP2009175882A (ja) * 2008-01-22 2009-08-06 Fujitsu Ltd 並列化プログラム生成方法、並列化プログラム生成プログラム、及び並列化プログラム生成装置
US7788672B2 (en) 2008-06-27 2010-08-31 Kabushiki Kaisha Toshiba System for controlling assignment of a plurality of modules of a program to available execution units based on speculative executing and granularity adjusting
JP2010020650A (ja) * 2008-07-14 2010-01-28 Sony Corp 情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラム
JP4577422B2 (ja) * 2008-07-14 2010-11-10 ソニー株式会社 情報処理システム及び情報処理方法、ロボットの制御システム及び制御方法、並びコンピュータ・プログラム
US8074211B2 (en) 2008-09-30 2011-12-06 Kabushiki Kaisha Toshiba Computer program, multiprocessor system, and grouping method
US8255911B2 (en) 2009-04-28 2012-08-28 Kabushiki Kaisha Toshiba System and method for selecting and assigning a basic module with a minimum transfer cost to thread
JP5408356B2 (ja) * 2010-08-10 2014-02-05 富士通株式会社 スケジューラプログラム、マルチコアプロセッサシステムおよびスケジューリング方法
WO2012020478A1 (ja) * 2010-08-10 2012-02-16 富士通株式会社 スケジューラ、マルチコアプロセッサシステムおよびスケジューリング方法
US9262209B2 (en) 2010-08-10 2016-02-16 Fujitsu Limited Scheduler, multi-core processor system, and scheduling method
JP2016520912A (ja) * 2013-04-23 2016-07-14 アビニシオ テクノロジー エルエルシー コンピューティングシステムによって実行されるタスクの制御
US10489191B2 (en) 2013-04-23 2019-11-26 Ab Initio Technology Llc Controlling tasks performed by a computing system using controlled process spawning
US10565005B2 (en) 2013-04-23 2020-02-18 Ab Initio Technology Llc Controlling tasks performed by a computing system

Similar Documents

Publication Publication Date Title
US9417935B2 (en) Many-core process scheduling to maximize cache usage
US9891949B2 (en) System and method for runtime scheduling of GPU tasks
JP5611756B2 (ja) プログラム・フロー制御
JP2005258920A (ja) マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置
JP5209933B2 (ja) データ処理装置
JP5646448B2 (ja) パイプラインプロセッサ
WO2013192231A1 (en) Managing use of a field programmable gate array by multiple processes in an operating system
JP5803972B2 (ja) マルチコアプロセッサ
JPH04367936A (ja) スーパースカラープロセッサ
JP7385989B2 (ja) 演算制御装置
JP5180285B2 (ja) プロセッサにおいて実行ステージに先立って命令を実行するためのシステムおよび方法
JP2004529405A (ja) 依存性を決定するためのコンテンツ・アドレス指定可能メモリを実装したスーパースケーラ・プロセッサ
US8656393B2 (en) Multi-core system
US20190266694A1 (en) Graphics processing method utilizing predefined render chunks
US20090178054A1 (en) Concomitance scheduling commensal threads in a multi-threading computer system
JP5187944B2 (ja) コンピュータ使用可能コードを実行する装置及び方法
JP6254352B2 (ja) ループのプロローグまたはエピローグの無効演算を処理する装置及び方法
US8762973B2 (en) Information processing apparatus, method of controlling information processing apparatus, and program for executing intermediate code instructions
US9558003B2 (en) Reconfigurable processor for parallel processing and operation method of the reconfigurable processor
KR102597201B1 (ko) 트랜잭션 네스팅 심도 시험 명령
JP7474779B2 (ja) 命令順序付け
JP2024129675A (ja) 実行制御プログラム、実行制御方法、および情報処理装置
JP5033745B2 (ja) ジョブ管理システム及びジョブ管理方法
KR20070118543A (ko) 재구성 어레이를 위한 멀티태스킹 방법 및 장치
JP3743155B2 (ja) パイプライン制御型計算機

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070308

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080925

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081007

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081208

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090616