JPH06318191A - マルチスレッド処理方式 - Google Patents
マルチスレッド処理方式Info
- Publication number
- JPH06318191A JPH06318191A JP10711493A JP10711493A JPH06318191A JP H06318191 A JPH06318191 A JP H06318191A JP 10711493 A JP10711493 A JP 10711493A JP 10711493 A JP10711493 A JP 10711493A JP H06318191 A JPH06318191 A JP H06318191A
- Authority
- JP
- Japan
- Prior art keywords
- thread
- parallel
- processing
- waiting
- program
- 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.)
- Withdrawn
Links
Abstract
(57)【要約】
【目的】 本発明は、マルチスレッド処理方式に関し、
並列処理部分の終了時点でスレッドを終了させずに、待
機状態にしておき、次の並列処理を開始するときに新た
なスレッドを生成せずに待機状態のスレッドを再開させ
て並列処理を行い、並列動作の開始・終了のオーバーヘ
ッドを削減することを目的とする。 【構成】 スレッド15と、並列呼出処理13とを備
え、プログラム中の並列処理開始時に呼び出された並列
呼出処理13が並列実行可能なプログラム部分を待機中
のスレッド15があった場合にはこのスレッド15に並
列実行可能なプログラム部分を割り当て、一方、待機中
のスレッド15がない場合には新たなスレッド15を生
成してこのスレッド15に並列実行可能なプログラム部
分を割り当てて実行させ、処理終了したときに待機中の
スレッド15として管理するように構成する。
並列処理部分の終了時点でスレッドを終了させずに、待
機状態にしておき、次の並列処理を開始するときに新た
なスレッドを生成せずに待機状態のスレッドを再開させ
て並列処理を行い、並列動作の開始・終了のオーバーヘ
ッドを削減することを目的とする。 【構成】 スレッド15と、並列呼出処理13とを備
え、プログラム中の並列処理開始時に呼び出された並列
呼出処理13が並列実行可能なプログラム部分を待機中
のスレッド15があった場合にはこのスレッド15に並
列実行可能なプログラム部分を割り当て、一方、待機中
のスレッド15がない場合には新たなスレッド15を生
成してこのスレッド15に並列実行可能なプログラム部
分を割り当てて実行させ、処理終了したときに待機中の
スレッド15として管理するように構成する。
Description
【0001】
【産業上の利用分野】本発明は、複数のスレッドによっ
て並列処理を行なうマルチスレッド処理方式に関するも
のである。
て並列処理を行なうマルチスレッド処理方式に関するも
のである。
【0002】近年、スレッドと呼ぶ並列動作機構を備え
たUNIXシステムが現れており、マルチプロセッサ上
で並列処理を効率良く行なうことが望まれている。
たUNIXシステムが現れており、マルチプロセッサ上
で並列処理を効率良く行なうことが望まれている。
【0003】
【従来の技術】科学技術計算などの性能が要求される応
用プログラムにおいて、DOループやサブルーチンを複
数のCPUで並列に実行することによって、実行性能を
向上することが行われている。例えば図8の(a)に示
す2つのCPU1、CPU2や、図8の(b)に示す4
つのCPU1、CPU2、CPU3、CPU4からアク
セス可能なMSU(主記憶装置)にプログラムやデータ
をロードし、各CPU1、2、更にCPU3、CPU4
がそれぞれ担当すべき部分のプログラムを実行する。こ
れらのシステムでは、理想的には元のプログラムを1つ
のCPUで実行したときの1/2(図8の(a)の場
合)、1/4(図8の(b)の場合)の時間でジョブの
実行が終了する。
用プログラムにおいて、DOループやサブルーチンを複
数のCPUで並列に実行することによって、実行性能を
向上することが行われている。例えば図8の(a)に示
す2つのCPU1、CPU2や、図8の(b)に示す4
つのCPU1、CPU2、CPU3、CPU4からアク
セス可能なMSU(主記憶装置)にプログラムやデータ
をロードし、各CPU1、2、更にCPU3、CPU4
がそれぞれ担当すべき部分のプログラムを実行する。こ
れらのシステムでは、理想的には元のプログラムを1つ
のCPUで実行したときの1/2(図8の(a)の場
合)、1/4(図8の(b)の場合)の時間でジョブの
実行が終了する。
【0004】実際には、実行効率がプログラムの構造
(並列実行が可能なループが少ないなど)と並列処理制
御のオーバーヘッドに大きく影響を受けるので、ユーザ
プログラムを並列処理に適した構造に書き直すこと(ユ
ーザプログラムのチューニング)や、並列処理制御のオ
ーバーヘッドを減らすこと(システムのチューニング)
を行なうことによって、理想的な性能に近づけることが
できる。ここでは、並列処理制御のオーバーヘッドにつ
いて以下従来技術を説明する。
(並列実行が可能なループが少ないなど)と並列処理制
御のオーバーヘッドに大きく影響を受けるので、ユーザ
プログラムを並列処理に適した構造に書き直すこと(ユ
ーザプログラムのチューニング)や、並列処理制御のオ
ーバーヘッドを減らすこと(システムのチューニング)
を行なうことによって、理想的な性能に近づけることが
できる。ここでは、並列処理制御のオーバーヘッドにつ
いて以下従来技術を説明する。
【0005】ジョブはCPUの数に見合った数の複数の
タスクからなる。UNIXシステムでは、Fortra
nジョブをプロセス、タスクをスレッドとするマルチス
レッドプログラムとして実行する。
タスクからなる。UNIXシステムでは、Fortra
nジョブをプロセス、タスクをスレッドとするマルチス
レッドプログラムとして実行する。
【0006】OS(オペレーティングシステム)は、C
PUとスレッドの割り当てを行なう。スレッドがいつ、
どのプログラム部分を並列処理するかは、実行時ライブ
ラリによって制御する。
PUとスレッドの割り当てを行なう。スレッドがいつ、
どのプログラム部分を並列処理するかは、実行時ライブ
ラリによって制御する。
【0007】並列処理するプログラム部分としては、サ
ブルーチンを並列処理の単位としたり、あるいは100
0回転するDOループを250回転ずつ4つに分割して
それぞれを並列に実行するなどする。
ブルーチンを並列処理の単位としたり、あるいは100
0回転するDOループを250回転ずつ4つに分割して
それぞれを並列に実行するなどする。
【0008】いずれでも、プログラムの実行開始から、
ある部分までは逐次処理部分があり、並列処理を行った
後、再び逐次処理に戻ってプログラムを終了する。図9
の例では、(a)までは逐次処理を行なう。(a)の時
点で2個のプログラム部分(b)、(c)の並列処理を
開始する。そして、(b)、(c)の演算が両者ともに
終了した時点(d)で、プログラムは再び逐次処理動作
となる。これら(a)から(d)までの動作がループに
含まれる場合、並列動作の開始・終了処理のコストもル
ープ回転数と同じだけ増大することとなる。更に、並列
に動作するプログラム部分(b)、(c)の中にも、同
様に並列処理の開始・終了部分が含まれることがある。
ある部分までは逐次処理部分があり、並列処理を行った
後、再び逐次処理に戻ってプログラムを終了する。図9
の例では、(a)までは逐次処理を行なう。(a)の時
点で2個のプログラム部分(b)、(c)の並列処理を
開始する。そして、(b)、(c)の演算が両者ともに
終了した時点(d)で、プログラムは再び逐次処理動作
となる。これら(a)から(d)までの動作がループに
含まれる場合、並列動作の開始・終了処理のコストもル
ープ回転数と同じだけ増大することとなる。更に、並列
に動作するプログラム部分(b)、(c)の中にも、同
様に並列処理の開始・終了部分が含まれることがある。
【0009】
【発明が解決しようとする課題】科学技術計算では、並
列処理の単位となる演算量(DOループやサブルーチン
など)は、例えばPRINT文などの入出力処理の演算
量に比べて1/1000や1/100という小さな値と
なり、従来の入出力処理と演算との並列処理とは大きな
違いがある。
列処理の単位となる演算量(DOループやサブルーチン
など)は、例えばPRINT文などの入出力処理の演算
量に比べて1/1000や1/100という小さな値と
なり、従来の入出力処理と演算との並列処理とは大きな
違いがある。
【0010】このため、並列処理単位のコストが小さい
ときでも、効率よく並列処理するためには、並列処理の
制御に要するオーバーヘッドを、並列処理される演算量
よりも、相対的に小さくする必要がある。
ときでも、効率よく並列処理するためには、並列処理の
制御に要するオーバーヘッドを、並列処理される演算量
よりも、相対的に小さくする必要がある。
【0011】並列動作の開始処理・終了処理を行なうに
は、OSが備えるスレッド生成処理のシステムコールを
使用して、並列実行を行なうプログラム部分と、スレッ
ドとを1対1に対応させることが考えられる。即ち、並
列動作を開始する段階で、並列動作部分に対応するスレ
ッドを生成する。図9の例では、(a)の時点で、
(b)、(c)を並列実行するために、スレッド生成の
システムコール(pthread create)を発行し、直後に
(b)、(c)のそれぞれの終了を待ち合わせるシステ
ムコール(pthread join)を発行する。これにより、
(b)、(c)の並列処理が終わると、phread joinの
待が解除され、(d)に到る。(d)ではスレッドを消
去するためのシステムコール(phread delate)を発行す
る。
は、OSが備えるスレッド生成処理のシステムコールを
使用して、並列実行を行なうプログラム部分と、スレッ
ドとを1対1に対応させることが考えられる。即ち、並
列動作を開始する段階で、並列動作部分に対応するスレ
ッドを生成する。図9の例では、(a)の時点で、
(b)、(c)を並列実行するために、スレッド生成の
システムコール(pthread create)を発行し、直後に
(b)、(c)のそれぞれの終了を待ち合わせるシステ
ムコール(pthread join)を発行する。これにより、
(b)、(c)の並列処理が終わると、phread joinの
待が解除され、(d)に到る。(d)ではスレッドを消
去するためのシステムコール(phread delate)を発行す
る。
【0012】このように、スレッド生成、スレッド待ち
合わせ、スレッド消去といった処理を順次行って図9の
並列処理を行なったのでは、これらの生成、消去などに
するための処理時間が並列処理を行なう時間に比して無
視できない大きさになってしまい、特にループで繰り返
す場合に大きな時間となってしまう問題があった。
合わせ、スレッド消去といった処理を順次行って図9の
並列処理を行なったのでは、これらの生成、消去などに
するための処理時間が並列処理を行なう時間に比して無
視できない大きさになってしまい、特にループで繰り返
す場合に大きな時間となってしまう問題があった。
【0013】本発明は、これらの問題を解決するため、
並列処理部分の終了時点でスレッドを終了させずに、待
機状態にしておき、次の並列処理を開始するときに新た
なスレッドを生成せずに待機状態のスレッドを再開させ
て並列処理を行い、並列動作の開始・終了のオーバーヘ
ッドを削減することを目的としている。
並列処理部分の終了時点でスレッドを終了させずに、待
機状態にしておき、次の並列処理を開始するときに新た
なスレッドを生成せずに待機状態のスレッドを再開させ
て並列処理を行い、並列動作の開始・終了のオーバーヘ
ッドを削減することを目的としている。
【0014】
【課題を解決するための手段】図1は、本発明の原理ブ
ロック図を示す。図1において、並列呼出処理13は、
プログラムから並列処理開始時に呼び出され、並列実行
可能なプログラム部分をスレッド15に割り当てて実行
させると共に、待機中のスレッド15を管理などするも
のである。
ロック図を示す。図1において、並列呼出処理13は、
プログラムから並列処理開始時に呼び出され、並列実行
可能なプログラム部分をスレッド15に割り当てて実行
させると共に、待機中のスレッド15を管理などするも
のである。
【0015】スレッド15は、並列実行可能なプログラ
ム部分を取り込んで処理を実行するものである。
ム部分を取り込んで処理を実行するものである。
【0016】
【作用】本発明は、図1に示すように、プログラムから
呼び出された並列呼出処理13が並列実行可能なプログ
ラム部分を待機中のスレッド15があった場合にはこの
スレッド15に並列実行可能なプログラム部分を割り当
て、一方、待機中のスレッド15がない場合には新たな
スレッド15を生成してこのスレッド15に並列実行可
能なプログラム部分を割り当てて実行させ、処理終了し
たときに待機中のスレッド15として管理し、並列処理
開始・終了時のスレッド15の生成・消去の回数を削減
するようにしている。
呼び出された並列呼出処理13が並列実行可能なプログ
ラム部分を待機中のスレッド15があった場合にはこの
スレッド15に並列実行可能なプログラム部分を割り当
て、一方、待機中のスレッド15がない場合には新たな
スレッド15を生成してこのスレッド15に並列実行可
能なプログラム部分を割り当てて実行させ、処理終了し
たときに待機中のスレッド15として管理し、並列処理
開始・終了時のスレッド15の生成・消去の回数を削減
するようにしている。
【0017】従って、並列処理部分の終了時点でスレッ
ド15を終了させずに、待機状態にしておき、次の並列
処理を開始するときに新たなスレッド15を生成せずに
待機状態のスレッド15を再開させて並列処理を行うこ
とにより、並列動作の開始・終了のオーバーヘッドを削
減することが可能となる。
ド15を終了させずに、待機状態にしておき、次の並列
処理を開始するときに新たなスレッド15を生成せずに
待機状態のスレッド15を再開させて並列処理を行うこ
とにより、並列動作の開始・終了のオーバーヘッドを削
減することが可能となる。
【0018】
【実施例】次に、図1から図7を用いて本発明の実施例
の構成および動作を順次詳細に説明する。
の構成および動作を順次詳細に説明する。
【0019】図1は、本発明の原理ブロック図を示す。
図1において、主記憶装置11は、複数のCPU1、2
・・・nからアクセス可能な記憶装置であって、プログ
ラムをローディングしたり、データを格納したりなどす
る記憶装置であり、図示のように、OS12を格納した
り、並列呼出処理13や待機中スレッド14を格納した
り、ユーザプログラム17やサブルーチンを格納したり
などする記憶装置である。
図1において、主記憶装置11は、複数のCPU1、2
・・・nからアクセス可能な記憶装置であって、プログ
ラムをローディングしたり、データを格納したりなどす
る記憶装置であり、図示のように、OS12を格納した
り、並列呼出処理13や待機中スレッド14を格納した
り、ユーザプログラム17やサブルーチンを格納したり
などする記憶装置である。
【0020】OS12は、オペレーティングシステムで
あって、全体を統括制御するものであり、ここではスレ
ッドを作成したり、スレッドを消去したりなどするもの
である。
あって、全体を統括制御するものであり、ここではスレ
ッドを作成したり、スレッドを消去したりなどするもの
である。
【0021】並列呼出処理13は、プログラムから並列
処理開始時に呼び出され、並列実行可能なプログラム部
分を、待機中のスレット15あるいは待機中のスレッド
15がないときは新たに作成させたスレド15に割り当
てて実行させたり、並列処理の終了したスレッド15を
待機状態として管理したりなどするものである。
処理開始時に呼び出され、並列実行可能なプログラム部
分を、待機中のスレット15あるいは待機中のスレッド
15がないときは新たに作成させたスレド15に割り当
てて実行させたり、並列処理の終了したスレッド15を
待機状態として管理したりなどするものである。
【0022】待機中スレッド14は、待機中のスレッド
15を管理するためのものであって、ここでは管理ブロ
ック16をリンクあるいはポイントしたりして当該管理
ブロック16で表されるスレッド15を管理するもので
ある。
15を管理するためのものであって、ここでは管理ブロ
ック16をリンクあるいはポイントしたりして当該管理
ブロック16で表されるスレッド15を管理するもので
ある。
【0023】スレッド15は、並列実行可能なプログラ
ム部分を取り込んで処理を実行するものであって、管理
ブロック16によって特定されるものである。管理ブロ
ック16は、スレッド15を特定する情報を管理するも
のであって、ここでは下記の情報を設定して管理するも
のである。
ム部分を取り込んで処理を実行するものであって、管理
ブロック16によって特定されるものである。管理ブロ
ック16は、スレッド15を特定する情報を管理するも
のであって、ここでは下記の情報を設定して管理するも
のである。
【0024】・スレッド識別子:OS12にスレッド生
成を依頼したときに、OS12から通知される当該スレ
ッドの識別子である。 ・次の管理ブロックのアドレス:管理ブロック16の連
鎖のために使うものである。
成を依頼したときに、OS12から通知される当該スレ
ッドの識別子である。 ・次の管理ブロックのアドレス:管理ブロック16の連
鎖のために使うものである。
【0025】・実行中フラグ:通常の動作状態である
か、待機状態であるかを識別するためのフラグである。 ・呼出しに関する情報:実行すべきサブルーチンの入口
アドレスや、サブルーチンに渡すパラメタ、パラメタの
個数である。
か、待機状態であるかを識別するためのフラグである。 ・呼出しに関する情報:実行すべきサブルーチンの入口
アドレスや、サブルーチンに渡すパラメタ、パラメタの
個数である。
【0026】ユーザプログラム17は、業務処理を行な
うプログラムであって、ここでは、サブルーチン1から
nを呼び出して並列処理を行なうものである。CPU1
からCPUnは、複数のCPUであって、ユーザプログ
ラム17を並列処理するCPU群である。
うプログラムであって、ここでは、サブルーチン1から
nを呼び出して並列処理を行なうものである。CPU1
からCPUnは、複数のCPUであって、ユーザプログ
ラム17を並列処理するCPU群である。
【0027】図2は、本発明の待機中のスレッドの管理
説明図を示す。図2の(a)は、待機中スレッド14か
らリンクで複数の管理ブロック16を順次管理するとき
の様子を示す。
説明図を示す。図2の(a)は、待機中スレッド14か
らリンクで複数の管理ブロック16を順次管理するとき
の様子を示す。
【0028】図2の(b)は、待機中スレッドテーブル
からポインタで複数の管理ブロック16を管理するとき
の様子を示す。以上のように、待機中スレッド14から
リンクで複数の管理ブロック16を管理したり、待機中
スレッドテーブルからポインタで複数の管理ブロック1
6を管理したりすることにより、並列呼出処理13が並
列処理可能なプログラム部分をスレッド15に割り当て
るときに、当該待機中のスレッド15があるときにこれ
に割り当てて並列処理を行わせ(並列処理を再開さ
せ)、処理終了後に返却させて待機中のスレッド15と
して管理し、スレッド15の生成・消去に要する処理量
よりも、スレッド15の待機・再開の処理量の方が少な
く、並列処理の開始・終了時のオーバーヘッドを削減す
ることが可能となる。ここで、スレッド15を作成させ
るにはシステムコール(pthread create)を発行し、スレ
ッド15を消去させるにはシステムコール(pthread del
ete)を発行する。一方、本願発明では、スレッド15を
再開させるにはシステムコール(pthread cond signal)
を発行し、スレッド15を待機させるにはシステムコー
ル(pthread cond wait)を発行する。ここで、後者のス
レッド再開・待機の処理量は、前者のスレッド作成・消
去に比し、少ないので、結果として並列処理の開始・終
了のためのオーバーヘッドを削減することができる。以
下順次詳細に説明する。
からポインタで複数の管理ブロック16を管理するとき
の様子を示す。以上のように、待機中スレッド14から
リンクで複数の管理ブロック16を管理したり、待機中
スレッドテーブルからポインタで複数の管理ブロック1
6を管理したりすることにより、並列呼出処理13が並
列処理可能なプログラム部分をスレッド15に割り当て
るときに、当該待機中のスレッド15があるときにこれ
に割り当てて並列処理を行わせ(並列処理を再開さ
せ)、処理終了後に返却させて待機中のスレッド15と
して管理し、スレッド15の生成・消去に要する処理量
よりも、スレッド15の待機・再開の処理量の方が少な
く、並列処理の開始・終了時のオーバーヘッドを削減す
ることが可能となる。ここで、スレッド15を作成させ
るにはシステムコール(pthread create)を発行し、スレ
ッド15を消去させるにはシステムコール(pthread del
ete)を発行する。一方、本願発明では、スレッド15を
再開させるにはシステムコール(pthread cond signal)
を発行し、スレッド15を待機させるにはシステムコー
ル(pthread cond wait)を発行する。ここで、後者のス
レッド再開・待機の処理量は、前者のスレッド作成・消
去に比し、少ないので、結果として並列処理の開始・終
了のためのオーバーヘッドを削減することができる。以
下順次詳細に説明する。
【0029】図3および図4のフローチャートに示す順
序に従い、図1および図2の構成の動作を詳細に説明す
る。図3において、S1は、初期設定する。これは、装
置の各種初期設定を行い、動作可能な状態にする。
序に従い、図1および図2の構成の動作を詳細に説明す
る。図3において、S1は、初期設定する。これは、装
置の各種初期設定を行い、動作可能な状態にする。
【0030】S2は、並列処理指示ありか判別する。こ
れは、図6のプログラム(オブジェクト)を順次行毎に
読み込んで実行し、例えば図6の(3)の並列呼出指示
がありか判別する。YESの場合には、S3で並列呼出
処理13を呼出し、S4に進む。一方、NOの場合に
は、並列処理指示でないと判明したので、S10で次の
行を読み込んで実行し、S2を繰り返す。
れは、図6のプログラム(オブジェクト)を順次行毎に
読み込んで実行し、例えば図6の(3)の並列呼出指示
がありか判別する。YESの場合には、S3で並列呼出
処理13を呼出し、S4に進む。一方、NOの場合に
は、並列処理指示でないと判明したので、S10で次の
行を読み込んで実行し、S2を繰り返す。
【0031】S4は、並列呼出しか判別する。これは、
S2で呼び出された並列呼出処理13が現在実行しよう
とするプログラムの行の命令が並列呼出しか判別する。
YESの場合には、S5で待機中のスレッドに空がある
か判別し、YESのときにS6からS9の処理で待機中
のスレッド15の処理を再開させS9に進み、NOのと
きに新たなスレッド15を生成し、S9に進む。一方、
S4のNOの場合には、並列呼出しでなく、例えばEN
D PARCALL(並列実行終了)であったので、図
4の(C)のS15に進む。
S2で呼び出された並列呼出処理13が現在実行しよう
とするプログラムの行の命令が並列呼出しか判別する。
YESの場合には、S5で待機中のスレッドに空がある
か判別し、YESのときにS6からS9の処理で待機中
のスレッド15の処理を再開させS9に進み、NOのと
きに新たなスレッド15を生成し、S9に進む。一方、
S4のNOの場合には、並列呼出しでなく、例えばEN
D PARCALL(並列実行終了)であったので、図
4の(C)のS15に進む。
【0032】S6は、S5のYESで待機中のスレッド
15があると判明したので、管理ブロックを外す(図2
参照)。S7は、S6で外した管理ブロックに、呼出し
に関する情報を設定する。
15があると判明したので、管理ブロックを外す(図2
参照)。S7は、S6で外した管理ブロックに、呼出し
に関する情報を設定する。
【0033】S8は、管理ブロックの実行中フラグをO
Nにする。S9は、並列実行を開始する。以上のS6か
らS9によって、待機中のスレッド15があった場合、
この待機中のスレッド15の管理ブロックを外し、この
管理ブロックに呼出しに関する情報を設定すると共に実
行中フラグをONにし、実際の並列処理の実行を開始す
る。これにより、新たなスレッドを再生して開始するよ
りも、待機中のスレッドによる処理を再開させるので、
処理量を削減できる。そして、並列処理が終了した場合
には、S4に戻ってNOとなり、図4の(C)のS15
以下の並列処理終了に進む。
Nにする。S9は、並列実行を開始する。以上のS6か
らS9によって、待機中のスレッド15があった場合、
この待機中のスレッド15の管理ブロックを外し、この
管理ブロックに呼出しに関する情報を設定すると共に実
行中フラグをONにし、実際の並列処理の実行を開始す
る。これにより、新たなスレッドを再生して開始するよ
りも、待機中のスレッドによる処理を再開させるので、
処理量を削減できる。そして、並列処理が終了した場合
には、S4に戻ってNOとなり、図4の(C)のS15
以下の並列処理終了に進む。
【0034】S11は、S5のNOで待機中のスレッド
15がないと判明したので、管理ブロック用領域を獲得
して初期化する(図2参照)。S12は、管理ブロック
に、呼出しに関する情報を設定する。
15がないと判明したので、管理ブロック用領域を獲得
して初期化する(図2参照)。S12は、管理ブロック
に、呼出しに関する情報を設定する。
【0035】S13は、管理ブロックの実行中フラグを
ONにする。S14は、OSにスレッドの生成を依頼す
る。S9は、S14で新たに生成されたスレッドが並列
処理を実行する。
ONにする。S14は、OSにスレッドの生成を依頼す
る。S9は、S14で新たに生成されたスレッドが並列
処理を実行する。
【0036】以上のS11からS14、S9によって、
待機中のスレッド15がなかった場合、新たに管理ブロ
ックを作成し、この管理ブロックに呼出しに関する情報
を設定すると共に実行中フラグをONにした後、スレッ
ド15を新たに作成した後、実際の並列処理の実行を開
始する。これにより、待機中のスレッドがない場合に新
たなスレッドを生成した並列処理を実行開始することが
できる。
待機中のスレッド15がなかった場合、新たに管理ブロ
ックを作成し、この管理ブロックに呼出しに関する情報
を設定すると共に実行中フラグをONにした後、スレッ
ド15を新たに作成した後、実際の並列処理の実行を開
始する。これにより、待機中のスレッドがない場合に新
たなスレッドを生成した並列処理を実行開始することが
できる。
【0037】図4のS15は、図3のS4のNO、即ち
並列処理終了の場合、サブルーチンが処理を終えたか判
別する。これは、サブルーチンを実行していたスレッド
の実行中フラグがOFFであれば、サブルーチンの処理
が終わったことが判明する。YESの場合には、S16
に進む。NOの場合には、サブルーチンが処理を終える
のを待機する。
並列処理終了の場合、サブルーチンが処理を終えたか判
別する。これは、サブルーチンを実行していたスレッド
の実行中フラグがOFFであれば、サブルーチンの処理
が終わったことが判明する。YESの場合には、S16
に進む。NOの場合には、サブルーチンが処理を終える
のを待機する。
【0038】S16は、管理ブロックを待機中スレッド
14に戻す。これは、S15のYESで、並列処理を実
行したスレッド15がサブルーチンの処理を終了したの
で、このスレッド15を図2の待機中スレッド14に戻
し、次の並列処理に備える。
14に戻す。これは、S15のYESで、並列処理を実
行したスレッド15がサブルーチンの処理を終了したの
で、このスレッド15を図2の待機中スレッド14に戻
し、次の並列処理に備える。
【0039】S17は、並列呼出ししたサブルーチンが
全て処理を終えたか判別する。YESの場合には、S1
8で後処理を行い、終了する。NOの場合には、S15
以降を繰り返す。
全て処理を終えたか判別する。YESの場合には、S1
8で後処理を行い、終了する。NOの場合には、S15
以降を繰り返す。
【0040】以上によって、並列実行処理を行い、呼び
出されたサブルーチンが処理を終えたときに待機中スレ
ッド14に戻すことを繰り返し、並列呼出しした全ての
サブルーチンが処理を終了するのを待ち合わせ、全てが
処理終了したときに後処理を行って終了する。これらに
より、並列処理を行ったスレッド15を管理ブロックに
リンクして管理し、次の並列処理時にこのスレッド15
を取り出して並列処理を実行(再開)させることによ
り、並列処理の開始・終了毎にスレッドの生成・消去を
繰り返す必要がなくなり、並列処理の開始・終了時の処
理量を削減してオーバーヘッドを少なくできる。
出されたサブルーチンが処理を終えたときに待機中スレ
ッド14に戻すことを繰り返し、並列呼出しした全ての
サブルーチンが処理を終了するのを待ち合わせ、全てが
処理終了したときに後処理を行って終了する。これらに
より、並列処理を行ったスレッド15を管理ブロックに
リンクして管理し、次の並列処理時にこのスレッド15
を取り出して並列処理を実行(再開)させることによ
り、並列処理の開始・終了毎にスレッドの生成・消去を
繰り返す必要がなくなり、並列処理の開始・終了時の処
理量を削減してオーバーヘッドを少なくできる。
【0041】次に、図4のS21からS24によって、
別スレッドによる並列実行処理について説明する。図4
のS21は、別スレッドがS9の並列実行開始まで待
つ。
別スレッドによる並列実行処理について説明する。図4
のS21は、別スレッドがS9の並列実行開始まで待
つ。
【0042】S22は、管理ブロックから呼出しに関す
る情報を取り出す。S23は、ユーザサブルーチンを呼
び出す。S24は、管理ブロックの実行中フラグをOF
Fにする。
る情報を取り出す。S23は、ユーザサブルーチンを呼
び出す。S24は、管理ブロックの実行中フラグをOF
Fにする。
【0043】以上によって、別スレッドが他のスレッド
によるS9の並列実行開始まで待ち、並列実行開始され
たときに管理ブロックから呼出しに関する情報を取り出
し、この情報をもとにユーザサブルーチンを呼出して処
理を依頼した後、自身のスレッドの管理ブロックの実行
中フラグを呼出し元から非同期にOFFにする。そし
て、S15に進み、呼び出されたサブルーチンが処理を
終えたときに管理ブロックを待機中スレッドに戻す。
によるS9の並列実行開始まで待ち、並列実行開始され
たときに管理ブロックから呼出しに関する情報を取り出
し、この情報をもとにユーザサブルーチンを呼出して処
理を依頼した後、自身のスレッドの管理ブロックの実行
中フラグを呼出し元から非同期にOFFにする。そし
て、S15に進み、呼び出されたサブルーチンが処理を
終えたときに管理ブロックを待機中スレッドに戻す。
【0044】図5は、本発明の並列処理プログラムの動
作概念図を示す。ここで、(1)から(7)は、図6の
(1)から(7)に対応している。ここでは、図示のよ
うに、並列処理プログラムのMAINが(1)で並列処
理開始し、スレッド15を作成してサブルーチンS1の
実行と、スレッド15を作成してサブルーチンS2の実
行を並列に開始する。
作概念図を示す。ここで、(1)から(7)は、図6の
(1)から(7)に対応している。ここでは、図示のよ
うに、並列処理プログラムのMAINが(1)で並列処
理開始し、スレッド15を作成してサブルーチンS1の
実行と、スレッド15を作成してサブルーチンS2の実
行を並列に開始する。
【0045】並列実行開始したサブルーチンS1の中で
更に(3)で並列処理開始し、スレッド15を作成して
サブルーチンS3の実行と、スレッド15を作成してサ
ブルーチンS3の実行を並列に開始する。そして、
(7)の並列処理をそれぞれ実行して処理を終了し、
(4)でサブルーチンS3の並列処理をそれぞれ終了
し、サブルーチンのS1の処理に戻る。
更に(3)で並列処理開始し、スレッド15を作成して
サブルーチンS3の実行と、スレッド15を作成してサ
ブルーチンS3の実行を並列に開始する。そして、
(7)の並列処理をそれぞれ実行して処理を終了し、
(4)でサブルーチンS3の並列処理をそれぞれ終了
し、サブルーチンのS1の処理に戻る。
【0046】同様に、並列実行開始したサブルーチンS
2の中で更に(5)で並列処理開始し、スレッド15を
作成してサブルーチンS3の実行と、スレッド15を作
成してサブルーチンS3の実行を並列に開始する。そし
て、(7)の並列処理をそれぞれ実行して処理を終了
し、(6)でサブルーチンS3の並列処理をそれぞれ終
了し、サブルーチンのS2の処理に戻る。
2の中で更に(5)で並列処理開始し、スレッド15を
作成してサブルーチンS3の実行と、スレッド15を作
成してサブルーチンS3の実行を並列に開始する。そし
て、(7)の並列処理をそれぞれ実行して処理を終了
し、(6)でサブルーチンS3の並列処理をそれぞれ終
了し、サブルーチンのS2の処理に戻る。
【0047】次に、(2)でサブルーチンS1およびサ
ブルーチンS2の並列処理を終了し、MAINに戻る。
これらの際に、並列実行を開始する(1)、(3)、
(5)で待機中のスレッド15がないときに作成して並
列実行させ、並列実行を終了する(4)、(2)、
(6)のときにスレッド15を待機中として管理し、次
回以降の繰り返しループなどのときに(1)、(3)、
(5)のときに待機中のスレッド15を割り当てて使用
することにより、従来のスレッドの生成・消去をその都
度行なう場合に比し、スレッド15を待機中に管理およ
び並列処理を再開させる本願ではその処理量を削減で
き、特に並列呼出時のオーバーヘッドを削減できる。
ブルーチンS2の並列処理を終了し、MAINに戻る。
これらの際に、並列実行を開始する(1)、(3)、
(5)で待機中のスレッド15がないときに作成して並
列実行させ、並列実行を終了する(4)、(2)、
(6)のときにスレッド15を待機中として管理し、次
回以降の繰り返しループなどのときに(1)、(3)、
(5)のときに待機中のスレッド15を割り当てて使用
することにより、従来のスレッドの生成・消去をその都
度行なう場合に比し、スレッド15を待機中に管理およ
び並列処理を再開させる本願ではその処理量を削減で
き、特に並列呼出時のオーバーヘッドを削減できる。
【0048】図6は、本発明のプログラム例を示す。こ
れは、図5の動作概念図を実際のプログラムのイメージ
で記述したものであって、(1)から(7)、MAI
N、S1、S2、S3は図6のそれぞれのものに対応し
ている。
れは、図5の動作概念図を実際のプログラムのイメージ
で記述したものであって、(1)から(7)、MAI
N、S1、S2、S3は図6のそれぞれのものに対応し
ている。
【0049】図6において、並列呼出処理13は、並列
実行開始で呼び出され、並列実行終了で復帰するもので
あって、図5の(1)、(3)、(5)でスレッド15
を割り当て(待機中のスレッド15があるときはこれを
割り当て、待機中のスレッド15がないときは新たに生
成したスレッド15を割り当て)、サブルーチンを並列
実行させるものである。
実行開始で呼び出され、並列実行終了で復帰するもので
あって、図5の(1)、(3)、(5)でスレッド15
を割り当て(待機中のスレッド15があるときはこれを
割り当て、待機中のスレッド15がないときは新たに生
成したスレッド15を割り当て)、サブルーチンを並列
実行させるものである。
【0050】MAINは、メインプログラムであって、
並列呼出処理13を呼び出してサブルーチンS1、サブ
ルーチンS2を並列実行させるものである。S1は、サ
ブルーチンであって、ここではMAINから並列呼び出
されたものであり、並列呼出処理13を呼び出して2つ
のサブルーチンS3を並列実行させるものである。
並列呼出処理13を呼び出してサブルーチンS1、サブ
ルーチンS2を並列実行させるものである。S1は、サ
ブルーチンであって、ここではMAINから並列呼び出
されたものであり、並列呼出処理13を呼び出して2つ
のサブルーチンS3を並列実行させるものである。
【0051】S2は、サブルーチンであって、ここでは
MAINから並列呼び出されたものであり、並列呼出処
理13を呼び出して2つのサブルーチンS3を並列実行
させるものである。
MAINから並列呼び出されたものであり、並列呼出処
理13を呼び出して2つのサブルーチンS3を並列実行
させるものである。
【0052】S3は、サブルーチンであて、演算処理を
行なう中核となるものであり、サブルーチンS1、サブ
ルーチンS2からそれぞれ並列に呼び出されて並列実行
処理を行なうものである。
行なう中核となるものであり、サブルーチンS1、サブ
ルーチンS2からそれぞれ並列に呼び出されて並列実行
処理を行なうものである。
【0053】図7は、本発明のスレッドとサブルーチン
の概念図を示す。図7において、プロセスは、OSによ
った作成されたプロセス(ジョブ)である。
の概念図を示す。図7において、プロセスは、OSによ
った作成されたプロセス(ジョブ)である。
【0054】t1は、当初新たに作成されたスレッド1
である。t2は、t1のスレッド1の実行中のシステム
コール時に生成されたスレッドである。また、t2のス
レッド2は並列実行終了時にシステムコールによってこ
こでは消滅させる(ループを形成して繰り返すときは既
述した待機中スレッド15にしておき、次回以降この待
機中のスレッド15を割り当て並列処理を実行(再開)
させる。
である。t2は、t1のスレッド1の実行中のシステム
コール時に生成されたスレッドである。また、t2のス
レッド2は並列実行終了時にシステムコールによってこ
こでは消滅させる(ループを形成して繰り返すときは既
述した待機中スレッド15にしておき、次回以降この待
機中のスレッド15を割り当て並列処理を実行(再開)
させる。
【0055】
【発明の効果】以上説明したように、本発明によれば、
並列処理部分の終了時点でスレッド15を終了させず
に、待機状態にしておき、次の並列処理を開始するとき
に新たなスレッド15を生成せずに待機状態のスレッド
15を割り当てて再開させて並列処理を行う構成を採用
しているため、並列動作の開始・終了のオーバーヘッド
を削減することができる。
並列処理部分の終了時点でスレッド15を終了させず
に、待機状態にしておき、次の並列処理を開始するとき
に新たなスレッド15を生成せずに待機状態のスレッド
15を割り当てて再開させて並列処理を行う構成を採用
しているため、並列動作の開始・終了のオーバーヘッド
を削減することができる。
【図1】本発明の原理ブロック図である。
【図2】本発明の待機中のスレッドの管理説明図であ
る。
る。
【図3】本発明の動作説明フローチャート(その1)で
ある。
ある。
【図4】本発明の動作説明フローチャート(その2)で
ある。
ある。
【図5】本発明の並列処理プログラムの動作概念図であ
る。
る。
【図6】本発明のプログラム例である。
【図7】本発明のスレッドとサブルーチンの概念図であ
る。
る。
【図8】並列処理のハードウェア構成図である。
【図9】並列プログラムの構造例である。
11:主記憶装置 12:OS(オペレーティングシステム) 13:並列呼出処理 14:待機中スレッド 15:スレッド 16:管理ブロック 17:ユーザプログラム
Claims (1)
- 【請求項1】複数のスレッドによって並列処理を行なう
マルチスレッド処理方式において、 並列実行可能なプログラム部分を取り込んで処理を実行
するスレッド(15)と、 プログラム中の並列処理開始時に呼び出され、並列実行
可能なプログラム部分を上記スレッド(15)に割り当
てて実行させると共に、待機中のスレッド(15)を管
理する並列呼出処理(13)とを備え、 プログラム中の並列処理開始時に呼び出された上記並列
呼出処理(13)が並列実行可能なプログラム部分を待
機中のスレッド(15)があった場合にはこのスレッド
(15)に並列実行可能なプログラム部分を割り当て、
一方、待機中のスレッド(15)がない場合には新たな
スレッド(15)を生成してこのスレッド(15)に並
列実行可能なプログラム部分を割り当てて実行させ、処
理終了したときに待機中のスレッド(15)として管理
するように構成したことを特徴とするマルチスレッド処
理方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP10711493A JPH06318191A (ja) | 1993-05-10 | 1993-05-10 | マルチスレッド処理方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP10711493A JPH06318191A (ja) | 1993-05-10 | 1993-05-10 | マルチスレッド処理方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH06318191A true JPH06318191A (ja) | 1994-11-15 |
Family
ID=14450835
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP10711493A Withdrawn JPH06318191A (ja) | 1993-05-10 | 1993-05-10 | マルチスレッド処理方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH06318191A (ja) |
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH08227364A (ja) * | 1994-12-20 | 1996-09-03 | Nec Corp | 順序付きマルチスレッド実行方法とその実行装置 |
| JP2000511321A (ja) * | 1997-05-02 | 2000-08-29 | ライブピクチャー,インコーポレイテッド | サーバー−クライアントネットワークを介するオンライン対話性を改善する方法及びシステム |
| KR100421316B1 (ko) * | 2000-02-24 | 2004-03-10 | 박희동 | 동기화를 가진 공유메모리 병렬프로그램에서 실행중 2단계최초경합 탐지를 위한 사건선택 방법 |
| US9448864B2 (en) | 2012-08-10 | 2016-09-20 | Hanwha Techwin Co., Ltd. | Method and apparatus for processing message between processors |
| CN116028141A (zh) * | 2023-03-30 | 2023-04-28 | 菲特(天津)检测技术有限公司 | 标签数据的处理方法、系统及电子设备 |
-
1993
- 1993-05-10 JP JP10711493A patent/JPH06318191A/ja not_active Withdrawn
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH08227364A (ja) * | 1994-12-20 | 1996-09-03 | Nec Corp | 順序付きマルチスレッド実行方法とその実行装置 |
| JP2000511321A (ja) * | 1997-05-02 | 2000-08-29 | ライブピクチャー,インコーポレイテッド | サーバー−クライアントネットワークを介するオンライン対話性を改善する方法及びシステム |
| KR100421316B1 (ko) * | 2000-02-24 | 2004-03-10 | 박희동 | 동기화를 가진 공유메모리 병렬프로그램에서 실행중 2단계최초경합 탐지를 위한 사건선택 방법 |
| US9448864B2 (en) | 2012-08-10 | 2016-09-20 | Hanwha Techwin Co., Ltd. | Method and apparatus for processing message between processors |
| CN116028141A (zh) * | 2023-03-30 | 2023-04-28 | 菲特(天津)检测技术有限公司 | 标签数据的处理方法、系统及电子设备 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5825649A (en) | Kernel substitution method in multi-processor system and multi-processor system having kernel substitution function | |
| JPH1153202A (ja) | 並列トランザクション処理システム | |
| EP0547991A2 (en) | Adaptive method for starting tasks in a multi-tasking operating system | |
| JPH06318191A (ja) | マルチスレッド処理方式 | |
| JP2005521937A (ja) | コンピュータオペレーティングシステムにおけるコンテキスト切り替え方法及び装置 | |
| EP0223463B1 (en) | Multiprocessor data processing system | |
| JPH05257902A (ja) | 処理プログラム・モードにおけるロック獲得処理方式 | |
| JPS6351288B2 (ja) | ||
| US6085264A (en) | Accounting-information outputting device | |
| JPS603229B2 (ja) | 情報処理方式 | |
| US5287509A (en) | Multitasking system for in-procedure loops | |
| JP2553526B2 (ja) | マルチタスク処理装置 | |
| JPH04213733A (ja) | 仮想プロセッサ方式 | |
| JP2927102B2 (ja) | 命令列切り替え方法及びそれを用いた演算プロセッサ | |
| JPH01126738A (ja) | 多重ジョブの実行におけるデータセット競合制御方式 | |
| JP3085202B2 (ja) | メモリプライオリティ制御方式 | |
| KR960012658B1 (ko) | 로컬 프로세서에 의해 일시 기억용 파일을 처리하는 시스템 | |
| JPH0424828A (ja) | マルチタスク管理方式 | |
| JPH1021067A (ja) | プログラムの動的修正方法 | |
| JPH076045A (ja) | 多重処理システムにおけるメモリ管理方法 | |
| JPH08212083A (ja) | 割り込み処理装置 | |
| JP2581007B2 (ja) | Cpu固定システム | |
| JPH02245829A (ja) | マルチタスキング方法 | |
| JPH05120012A (ja) | 例外処理装置 | |
| JP2000315162A (ja) | 制御ブロック処理装置及び制御ブロック処理プログラムを記録したコンピュータ読み取り可能な記録媒体 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20000801 |