JPH0540742A - 並列処理方法 - Google Patents

並列処理方法

Info

Publication number
JPH0540742A
JPH0540742A JP19772991A JP19772991A JPH0540742A JP H0540742 A JPH0540742 A JP H0540742A JP 19772991 A JP19772991 A JP 19772991A JP 19772991 A JP19772991 A JP 19772991A JP H0540742 A JPH0540742 A JP H0540742A
Authority
JP
Japan
Prior art keywords
parallel
parallel processing
processing unit
queue
stack area
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
JP19772991A
Other languages
English (en)
Inventor
Shoji Suzuki
昭二 鈴木
Shinichiro Yamaguchi
伸一朗 山口
Yoshiki Kobayashi
小林  芳樹
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP19772991A priority Critical patent/JPH0540742A/ja
Publication of JPH0540742A publication Critical patent/JPH0540742A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【目的】マルチプロセッサにおける並列処理の効率を向
上する。 【構成】100,101はプロセッサ、11はメモリ、
12はプロセッサとメモリを接続する通信線、130〜
132はプロセッサで実行されるプロシージャ、特に1
30,131は並行サブルーチン、132は戻り先メイ
ンルーチン、18は並列実行制御、141はスタック領
域確保、15はスケジューラ、151はQueue登録、1
62はリターンプロシージャ共有化を表わす。各プロセ
ッサでは実行中の並行サブルーチンが終了する場合、1
51を介さずに、162によってメインルーチンに戻
り、未だ実行されていない並行サブルーチンを実行す
る。 【効果】リターンプロシージャ共有化162により、マ
ルチプロセッサにおける並列処理の効率を低下させるオ
ーバーヘッドの要因である、並列処理単位の待ち行列を
用いたスケジューリング操作、及びスタック領域生成操
作の操作回数を低減することにより、並列処理の効率が
向上する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は並列処理において、特に
複数のプロセッサより構成されるマルチプロセッサに適
した、高効率な並列処理方法に関する。
【0002】
【従来の技術】複数のプロセッサより構成されるマルチ
プロセッサ上で、プログラムを並列実行させる為には、
該プログラムをユーザ自身が、あるいは自動並列化コン
パイラによって、マルチプロセッサ上で並列に動作でき
るように変更して、並列処理プログラムに作り直さなけ
ればならない。この変更とは具体的には、該プログラム
を複数のプロセッサが同時に実行しても構わない複数個
の処理の単位(以下、並列処理単位)に分割し、該並列
処理単位をマルチプロセッサ上で同時に実行できるよう
に、並列処理単位の実行制御操作(以下、並列実行制御
操作)を該プログラムに加えることである。この並列実
行制御操作は、以下の2種類の操作に大別出来る。
【0003】(1) 並列処理単位をプロセッサ上で実行出
来るように、実行の為の環境(実行時に加工するデータ
を格納する、メモリ空間上のスタック領域等)を確保
し、処理の単位に割り与える、実行環境管理操作。
【0004】(2) 並列処理単位間の実行順序制御を行
い、マルチプロセッサ上で複数の並列処理単位を同時に
実行させたり、並列処理単位間で待ち合わせを行うとい
った同期操作を行う、スケジューリング操作。
【0005】また、ユーザに提供されている並列実行制
御機能は、並列処理単位間の通信機能等、種々のものが
存在するが、その中でも一番基本的なものは、分岐(fo
rk)操作と合流(join)操作である。分岐操作は、並列
処理単位を実行環境管理操作にて生成する操作である。
合流操作は、分岐操作により生成された並列処理単位の
実行終了待ちを行う同期操作(スケジューリング操作)
である。
【0006】従来の並列処理方法では、各並列処理単位
はお互いに独立した、主従関係の無いコルーチンとして
実現している。従ってコルーチンの独立性より、分岐操
作時に生成される全ての並列処理単位に対して、実行環
境管理操作の一つであるスタック領域確保操作により、
スタック領域をブロック単位で生成し割り与えている。
またコルーチン間には主従関係が無いことにより、並列
処理単位間のスケジューリング操作は、スケジューラに
よる待ち行列(以下、Queue)への登録・取り出し操作に
よって実現している。
【0007】また各並列処理単位に割り与えるスタック
領域は、並列処理単位実行時にサブルーチンコールを行
うことによっていくらでも拡張し得るので、拡張しても
オーバーフローしないように余裕のある大きさのブロッ
ク単位(システムによって異なるが、例えば1MB単
位)で割り与えることになる。
【0008】図2は従来の並列処理方法の動作例を表し
たものである。なお図では説明を簡単にする為、マルチ
プロセッサを構成するプロセッサ数を2、また生成され
る並列処理単位数を5としている。図において、10
0,101はプロセッサ、0,01〜05は並列処理プ
ログラムを構成する並列処理単位、160は分岐・合流
操作、15はスケジューラ、171,172はQueue、
150はQueue操作、140はスタック領域確保操作、11
0は該並列処理プログラムのメモリ空間、720,72
01〜7205は各並列処理単位の実行に必要なスタッ
ク領域を表す。
【0009】従来は、以下の動作により並列処理を行っ
ている。
【0010】処理単位0実行時に、図3に示す分岐・合
流操作160によって、5つの並列処理単位01〜05
の生成を行う。即ち分岐操作1601にて、スタック領
域確保操作140により、各並列処理単位の実行の為の
スタック領域7201〜7205をブロック単位で生成確保
して割り与え、次に操作1602にて、各並列処理単位
をスケジューラによる操作150により走行Queue17
1に登録する。更に合流操作1603にて0の実行を中
断して、操作150により休止Queue 172に登録す
る。そしてプロセッサ100,101は、図4に示す基
本動作1000により、並列処理単位を1つ1つ実行し
て行く。即ち操作1001にて、操作150により走行Que
ue 171に登録されている並列処理単位を1つ取り出
し、操作1002にて、取り出した並列処理単位を実行
し、更に操作1003にて、実行終了時に、該並列処理
単位終了待ちを行っている処理単位が存在するかチェッ
クし、操作1004にて、終了待ち状態の処理単位が見
つかったら、それを休止Queue 172より取り出し、走
行Queue 171に登録する。以後、Queue に登録されて
いる全ての並列処理単位を実行し終えるまで操作100
1〜1004を繰り返す。
【0011】即ち、従来技術の並列実行制御操作におい
ては、スケジューラはQueue を有し、生成された並列処
理単位を走行Queue に登録し、該走行Queue より1つ1
つ取り出して、該並列処理単位を実行する方法をとって
いる。またスタック領域確保操作は、生成された並行処
理単位に対して、予めブロック単位でメモリ空間を生成
確保して割り与える方法をとっていた。
【0012】そして分岐操作においては、並列処理単位
に対して、スタック領域確保操作によってスタック領域
を生成し割り与え、スケジューラによって該並列処理単
位を走行Queue に登録する。また合流操作においては、
該操作を行う処理単位を休止Queue に登録し、分岐操作
にて生成した並列処理単位の終了待ちを行う。また各プ
ロセッサはスケジューラにより、走行Queue に登録され
ている並列処理単位を取り出して実行し、該並列処理単
位の実行が終了したら、再び走行Queue より並列処理単
位を取り出し、実行する…この操作を繰り返すことによ
り並列処理を実現していた。
【0013】ところでこの並列実行制御操作は、シング
ルプロセッサシステムでは不要であることからもわかる
通り、並列処理プログラム実行時のオーバーヘッドとな
る。ところで細粒度高並列なプログラム、即ち各並列処
理単位の実行時間が小さく、また並列処理単位数が多い
並列処理プログラム程、並列実行制御操作時間、即ちオ
ーバーヘッドの占める割合が大きくなる。並列処理プロ
グラム実行時間中にオーバーヘッドの占める割合が大き
ければ、並列処理による速度向上は期待出来なくなって
しまう。
【0014】当初は、並列実行制御操作はオペレーティ
ングシステムが行っていた。オペレーティングシステム
が行う操作は、ユーザプログラム内でシステムコールを
発行する形で依頼することになる。しかし一般に、シス
テムコールによる操作は時間がかかることが知られてお
り、そのためにオーバーヘッドは大きなものとなってし
まう。
【0015】そこで、並列実行制御操作をオペレーティ
ングシステムに依頼するのではなく、ユーザプログラム
内で実行する方法が近年提案されている。本方法では並
列実行制御操作を提供するライブラリ関数をユーザプロ
グラムにリンクすることで実現する。本方法により、当
初の方法よりも各並列実行制御操作が十数倍〜百倍程度
高速になり、オーバーヘッドがかなり小さくなることが
知られている。
【0016】なお従来技術の一例として、文献「根岸
康:密結合マルチプロセッサのためのスレッドの実現
法、情報処理学会第41回全国大会講演論文集(IV)、
7D−5、pp.125−126、1990年」があげ
られる。
【0017】
【発明が解決しようとする課題】高効率な並列処理実現
の為の課題は、上記並列実行制御操作によるオーバーヘ
ッドの低減にある。従来技術では各並列実行制御操作を
高速にすることによって、それを実現していた。しか
し、更により細粒度高並列な並列処理プログラムを実行
しようとすると、従来技術をもってしてもプログラム実
行時間中に、オーバーヘッドの占める割合が大きくな
り、並列処理の効率は低下してしまう。その中でもスタ
ック領域確保操作が行うスタック領域生成操作と、Queu
e を用いたスケジューリング操作は、実行時間を要する
操作の一つである。ところが従来技術によって、全ての
並列実行制御操作の実行時間の短縮はほぼ限界に達して
いる。即ち各並列実行制御操作の高速化をこれ以上は望
むのは難しい。
【0018】そこで本発明が解決しようとする課題は、
並列処理方法そのものを変更し、並列処理プログラム実
行時に、特に上記2つの操作によるオーバーヘッドを低
減することにある。
【0019】
【課題を解決するための手段】上記課題を解決する為
に、本発明による並列処理方法は、並列実行制御機能を
最も基本的な分岐操作,合流操作のみに限定する。この
場合、並列処理単位間に厳密な主従関係が存在する。即
ち分岐操作を発行する側の処理単位は、該操作によって
生成される全ての並列処理単位の実行が終了するまで、
合流操作にて処理を中断して待たなければならない。こ
の関係は、一般の逐次処理のサブルーチンコール/リタ
ーン操作における、メインルーチンとサブルーチンの主
従関係とほぼ同様である。異なる点は、メインルーチン
がコールする複数のサブルーチンは、同時に実行して構
わない点であり、更にメインルーチン側は、コールした
サブルーチンが全てリターンするまで待つことである。
ここでは以後、分岐操作発行側の並列処理単位をメイン
ルーチン、該操作によって生成される並列処理単位を並
行サブルーチン(或はCSR:Concurrent Subroutine)
と表記することにする。
【0020】そこで上記課題を解決する為に上述の主従
関係を利用することにより、以下の方法を発明した。
【0021】(1)スケジューリング操作によるオーバー
ヘッドを低減する為に、該操作を一般の逐次処理のサブ
ルーチンコール/リターン操作を並列処理用に拡張した
操作で実現する。即ちメインル−チンよりサブルーチン
コールによって、並行サブルーチンが実行される。各並
行サブルーチンでは並列処理を実現する為に、「リター
ンプロシージャ共有化操作」によってメインルーチンに
リターンする為の情報(プログラムカウンタ,スタック
ポインタ等)を「共有化リターン情報」として共有デー
タ領域上に登録し、該並行サブルーチン間で共有化す
る。そして該並行サブルーチンは、該情報によってメイ
ンルーチンへリターンする。リターン後、メインルーチ
ンでは、まだ実行していない並行サブルーチンをコール
するので、該並行サブル−チン間のスケジューリング操
作が該リターンプロシージャ共有化操作により実現出来
る。そして複数のプロセッサがメインルーチンへの共有
化リターン情報にアクセスし、それぞれ並行サブルーチ
ンを実行する場合、リターンプロシージャ共有化操作が
メインルーチンへの共有化リターン情報を常に最新のも
のに更新しているので、各プロセッサは未実行の並行サ
ブルーチンをプロセッサ間で重複することも取りこぼす
ことも無く、1つ1つ実行して行くことが出来る。
【0022】(2)スタック領域確保操作が行う、スタッ
ク領域生成操作によるオーバーヘッドを低減する為に、
並行サブル−チンの実行に必要なスタック領域は、一般
のサブル−チンコ−ル操作を用いることで、メインル−
チン用のスタック領域をそのまま拡張する形で割り当て
て使用させる。更にその並行サブルーチンから分岐する
並行サブルーチンも該スタック領域を拡張して割り当て
る形で、主従関係のある並行サブルーチンが1つのスタ
ック領域を共有させる。
【0023】ところで本発明による並列処理方法では、
各プロセッサは基本的に(1)のリターンプロシージャ共
有化操作によるサブルーチンコール/リターンベースの
スケジューリング操作を行う。しかし、リターン先のメ
インルーチンで実行すべき並行サブルーチンが既に無く
なり、且つ、他プロセッサで該メインルーチンより分岐
された並行サブルーチンを実行中の場合には、該メイン
ルーチンにリターンして処理を続行することは出来な
い。従ってこのような場合には、従来方法のようにQueu
e より実行可能な並列処理単位を見つけ出すことが必要
になる。そこで、(3)Queue を用いたスケジューリング
操作によるオーバーヘッドを低減する為に、各並列処理
単位に該並列処理プログラム開始時から、該並列処理単
位が生成されるまでに行われた分岐操作の段数を優先度
として与える。そして、分岐操作中(分岐操作を行って
から合流操作を行うまで)の並列処理単位を階層Queue
の該段数に対応するQueue に登録し、優先度の高いQueu
e より並列処理単位を取り出して実行するといった、階
層Queue を用いたスケジューリング操作を行う。
【0024】
【作用】(1)サブルーチンコール/リターンベースのス
ケジューリング操作を用いることにより、従来方法のよ
うな、分岐する全ての並行プロシージャを予め走行Queu
eに登録することはせず、Queue を用いたスケジューリ
ング操作回数を低減する。また該スケジューリング操作
はQueueを用いるスケジューリング操作よりも実行時間
が短い。これにより、スケジューリング操作によるオー
バーヘッドを低減出来る。
【0025】(2)スタック領域を主従関係のある並列処
理単位間で共有することにより、スタック領域確保の為
の生成操作回数を低減する。また該共有化操作は、一般
のサブルーチンコールを用いて実現する為、操作時間は
極めて小さい。これにより、スタック領域確保操作によ
るオーバーヘッドを低減出来る。
【0026】(3)階層Queue を用いたスケジューリング
操作により、各プロセッサは分岐操作段数のなるべく浅
い並列処理単位より優先して実行して行くことになる。
これは別の言い方をすれば、段数の深い並列処理単位は
優先度が低くなるため、他プロセッサが階層Queue を用
いたスケジューリング操作により、該並列処理単位を取
り出して実行する可能性は低くなる。即ち該並列処理単
位より分岐される複数の並行サブルーチンは、該並列処
理単位を実行していたプロセッサが単独で全て実行する
可能性が高くなることを意味する。単独で実行している
間は、サブルーチンコール/リターンベースのスケジュ
ーリングのみで並列処理単位を次々と実行して行くこと
が出来、階層Queue を用いたスケジューリング操作を行
うことはない。
【0027】ところで従来のQueue を用いたスケジュー
リング操作では、走行Queue への並列処理単位の登録・
取り出し操作がFIFOであり、並列処理単位に実行優
先度は存在しない。従って従来操作をそのまま適応する
場合と比較すると、上述の単独で実行する可能性が高く
なる分、Queue を用いたスケジューリング操作回数が低
減される。
【0028】
【実施例】本発明の一実施例を以下、図を用いて説明す
る。なお実施例では説明を簡単にする為に、2台プロセ
ッサ構成のマルチプロセッサを例にあげているが、本発
明がプロセッサの台数に関わらず有効であることは自明
である。さらに、一般的なマイクロプロセッサである、
モトロ−ラ社の680x0を念頭に置いて説明している
ところがあるが、他の汎用マイクロプロセッサに対して
も本発明が有効であることは言うまでもない。なお以降
は処理単位のことをプロシージャ、並列処理単位のこと
を並行プロシージャと呼ぶことにする。
【0029】図1は本発明の全体構成図を表したもので
ある。図において、100,101はプロセッサ、11
はメモリ、12はプロセッサとメモリを接続する通信
線、130〜132はプロセッサで実行されるプロシー
ジャ、特に130,131は並行サブルーチン、132
は戻り先メインルーチン、18は並列実行制御、14は
スタック領域確保操作、15はスケジューラ、151は
Queue登録操作、162はリターンプロシージャ共有化操作
である。
【0030】ここで図1による本発明の動作説明をより
わかり易くする為に、図5を用いて説明する。
【0031】図5は、本発明方法の動作例を表したもの
で、図2と同じ並列処理プログラムを実行する場合の例
である。図において、110は該並行プログラムのメモ
リ空間、72000,72020はブロック単位で確保
されたスタック領域、720,7201,7202はそ
れぞれプロシージャ0,01,02の実行に必要なスタ
ック領域、141はスタック領域確保操作、100,1
01はプロセッサ、0,01〜05は並列処理プログラ
ムを構成するプロシージャ、161は分岐・合流操作、
15はスケジューラ、17はQueue 、151はQueue 操
作、16は共有化リターン情報、162はリターンプロ
シージャ共有化操作を表す。
【0032】図6は本発明による並列処理プログラムを
表記したものである。まずプロシージャ0(メインルー
チン)実行時に分岐操作1611により、操作001に
て0への共有化リターン情報16内の分岐操作フラグを
ONにセットし、操作002にて0を操作151により
Queue 17に登録する。次に操作010〜050にて、
並行プロシージャ(並行サブルーチン)01〜05をコ
ールする。そして合流操作1612により、0を操作1
51にて17より取り出し、操作004にて該分岐操作
フラグをOFFにする。
【0033】次に図6の表記を基に、複数のプロセッサ
による並列処理動作例を図5を用いて説明する。
【0034】スタック確保操作141により、まずプロ
セッサ100,101にそれぞれスタック領域7200
0,72020がブロック単位で生成され割り与えられ
る。101では72000内の720上でプロシージャ
0を実行し、分岐操作161により操作001,002
を実行し、操作010にて並行サブルーチン01を72
01上で実行する。01の実行は図7に示すように、0
102の本処理実行の前後でスケジューリング操作を行
う。即ち初期操作として、操作80にて162により0へ
のリターン情報を16に登録する。また終了操作とし
て、操作0103にて0の分岐操作フラグのチェックを行
い、ONならば操作0104にて16を基に0にリター
ンする。OFFならばまだ実行していない並行サブルー
チンは残っていないので、操作0105にて全ての並行
サブルーチンが実行終了したかチェックし、終了してい
たら0104を行って0にリターンし、終了していなけ
れば操作0106にて、Queue による実行プロシージャ
の検索を行う。
【0035】他のプロセッサ101、或はリターンプロ
シージャにリターン出来ないプロセッサは、図8に示す
Queue による実行プロシージャの検索操作0106を行
う。即ち操作1701にて、151よりQueue 17に登
録されているプロシージャを検索し、操作905にて、
検索したプロシージャへの情報16を基に該プロシージ
ャへリターンする。
【0036】以上の操作により図5において、例えば1
00が01を実行終了後、操作162により0にリターン
した後、02ではなく03をコールし、72000内の
720の直後のスタック領域にて実行する。また101は
02を72020内の先頭の領域7202にて実行して
いるが、02実行終了時に03は既に100が実行中の
場合、同様に操作162により0にリターンした後、0
4をコールし、72020内の先頭の領域にて実行する。
【0037】なお、16,17は共有データであり、該
データへのアクセスは排他制御を用いなければならない
ことは言うまでもない。
【0038】図9は、ブロック単位で割り与えるスタッ
ク領域及びその管理情報の一実施例である。図において
71はスタック領域管理情報、711は実行プロセッサ
へのポインタ、712は該スタックが空かどうかを示す
empty_flag、713は該スタック領域へのポインタ、7
2はブロック単位で割り与えるスタック領域を表わす。
また、主従関係を有する並行サブル−チン用のスタック
領域は、72上で720,721のように連続して実現
される。
【0039】図10は並行サブルーチンの実行に必要な
スタック領域720の一実施例を示したものである。図
において16は共有化リターン情報、7200,720
1,…は一般のサブルーチンを実行するのに必要なフレ
ームを表す。
【0040】並行サブルーチンは図のようにメモリ上
で、一般のサブルーチンを実現する為のフレーム720
0,72001,…(一般に並行サブルーチンから更に
一般のサブルーチンをコールすることが多いので、フレ
ームは複数個存在する場合が多い)と、該並行サブルー
チンの並列処理制御を行なう為の、共有化リターン情報
16より構成される。16は、図のようにスタック領域
720上に連続して実現するか、あるいは16をデータ
領域上に置き、720とポインタでリンクする方法が考
えられる。
【0041】図11は共有化リターン情報16の一実施
例である。図において612は該並行サブルーチンをコ
ールした、メインルーチン(上位並行サブルーチン)へ
のポインタ、621〜623は該並行サブルーチンの戻
り先メインルーチンに対するリターン情報で、621は
プログラムカウンタ、622はフレームポインタ、62
3は該並行サブルーチンの引数領域幅、624は並行サ
ブルーチンが所属するスタック領域の、スタック領域管
理情報71へのポインタを表わし、これらは該並行サブ
ルーチンに固有の情報である。631〜634は該並行
サブルーチンへのリターン情報で、631はプログラム
カウンタ、632はフレームポインタ、633はスタッ
クポインタ、634は一番最近コールした並行サブルー
チンの引数領域幅、635は1番最近リターンした並行
サブルーチンが所属するスタック領域の、スタック領域
管理情報への共有化ポインタを表わし、これらは該並行
サブルーチン自身がコールする、並行サブルーチンによ
って共有化される。64は該並行サブルーチンが、所属
するスタック領域上で最上位であることを示すフラグ、
65は該並行サブルーチンの分岐操作段数、66は該並
行サブルーチンをロックして、同時期には1個のプロセ
ッサしか実行出来なくする為のキーフラグ、67は該並
行サブルーチンがコールする並行サブルーチンを実行中
のプロセッサカウンタ、68は該並行サブルーチンが分
岐操作実行状態であることを示すフラグである。また6
9はプロセッサのレジスタ内データを一時退避する為
の、レジスタ退避領域である。
【0042】図9〜図11を用いて、以下、図6〜図8
のより詳細な実施例を示す。
【0043】図12は、図7の並行サブルーチンの初期
操作80の動作を示したものである。一連の操作162
1はリターンプロシージャ共有化操作162による、リ
ターン情報の共有化リターン情報16への登録操作であ
る。操作801により上位CSR、即ち戻り先メインル
ーチンへの戻り先プログラムカウンタを上位CSRのs
hared_pc 631に登録する。次に操作801
5により自CSR、即ち該並行サブルーチンの所属スタ
ック領域管理情報へのポインタ624の値として、上位
CSRが有する共有化リターン情報16内のスタック領
域管理情報への共有化ポインタ635の値を登録する。
また操作802により、自CSRの所属するスタック領
域のスタック領域管理情報のempty_flag712がONで
あるか調べ、ONでない場合は操作803にて自CSR
のtop_flag64をOFFにし、操作804で自CSRの
引数幅args623を求める。そして操作805により前
の操作で求めた自CSRのarg623を上位CSRが有
する16内のshared_args634に登録し、操作806
で、上位CSRが有する16内のkey 66をアンロック
する。また操作802が真ならば、操作807で該empt
y_flag712をOFF、操作808にて自CSRのtop_
flag64をONにして、操作809で自CSRのargs6
23を求める。そして操作805以降の処理を行なう。
【0044】なお操作806を行なう理由は、操作80
を実行する直前に必ず操作90あるいは1612にてke
y 66をロックしている為である。
【0045】図13は、図7の並行サブルーチンの終了
操作90の動作を示したものである。操作901で上位
CSRが有する16内のkey 66をTAS命令等のリー
ド・モディファイ・ライト命令を用いてロックし、他プ
ロセッサが該CSRにアクセス出来ないようにする。次
に一連の操作1622にて、リターンプロシージャ共有
化操作162による、共有化リターン情報16に基づ
く、上位CSR(戻り先メインルーチン)へのリターン
操作を行う。まず操作902で上位CSRの分岐操作fl
ag 68がONであるか調べ、ONならば操作903に
て自CSRのtop_flag64がONであるか調べ、ONで
ないならば操作9031にて上位CSRが有する16内の
所属スタック領域管理情報への共有化ポインタ635の
値を上位CSRが有する16内の所属スタック領域管理
情報へのポインタ624の値にセットした後、操作90
4を実行し上位CSRにリターンする。また64がON
ならば、操作9032にて上位CSRが有する16内の
所属スタック領域管理情報への共有化ポインタ635の
値を自CSRの所属スタック領域管理情報へのポインタ
624の値にセットした後、操作905により上位CS
Rへリターンする。また操作902が偽ならば、操作9
06にて上位CSRが有する16内のprocessor_counte
r67を1減じる。更に操作907で67が0であるか
調べ、0ならば操作908にて自CSRのtop_flag64
がONであるか調べ、ONならば操作909により時C
SRの所属スタック領域を解放し、操作9031,904
により上位CSRへリターンする。操作908が偽なら
ばそのまま操作9031,904を実行する。
【0046】また操作907が偽ならば操作910にて
上位CSRが有する16内のkey66をアンロックす
る。そして操作911で自CSRのtop_flag64がON
であるか調べ、ONならば操作912にて所属スタック
領域を実行プロセッサの所有スタック領域として登録、
OFFならば操作913にて実行プロセッサの所有スタ
ックは無しとして、操作0106の実行可能プロシージ
ャ検索操作にジャンプする。
【0047】図14,図15はそれぞれ、メインルーチ
ンへのリターン動作904,905を示したものであ
る。両者とも、リターンプロシージャ共有化操作162
によって登録されている、共有化リターン情報16内の
リターン情報即ち、操作1001にて戻り先プログラムカウ
ンタとして上位CSRが有する16内のshared_pc 631
を、操作1002にて戻り先フレームポインタとして上
位CSRが有する16内のshared_fp 632を得る。戻
り先スタックポインタは両者では異なり、自CSRと上位
CSRが同一スタック領域内で連続している前者では、
上位CSRが有する16内のshared_sp 633を、別の
スタック領域に存在する後者では、自CSRの所属スタッ
ク領域の先頭アドレス713を得る。操作1003,1
103がその操作に対応するが、更にメインルーチンに
戻ってから行う、並行サブルーチンの引き数領域分のず
れのリセット操作に備え、上位CSRが有する16内の
shared_args 634を減じる。そして操作1004に
て、戻り先プログラムカウンタにジャンプする。
【0048】図16は、図6の分岐操作1611の動作
を示したものである。操作1201で、プロセッサのレ
ジスタ内データを自CSRの共有化リターン情報16内
のレジスタ退避領域69に退避し、操作001で、並列
処理実行の為の初期設定、即ち自CSRの段数depth 6
5、プロセッサカウンタprocessor_counter 67,分岐
操作flag68の設定を行う。次に操作1402にて、自
CSRへのリターン情報shared_fp632,shared_sp6
33の登録を行う。そして操作002で、スケジューリ
ング操作15によってQueue に登録する。
【0049】図17は、図6の合流操作1612の動作
を示したものである。操作80を実行した後、操作00
3にて上位CSRをQueue から削除し、操作004によ
り上位CSRが有する16内の分岐操作flag 68をO
FFにして、上位CSRは並列処理を終了することを宣
言する。次に操作1504にて、図13の操作906以
降の一連の操作を行い、操作1301で、自CSRが有
する16内のレジスタ退避領域69内に退避されていた
データを実行プロセッサのレジスタに復帰する。
【0050】なお並列処理実行時には、分岐・合流操作
時のみにてレジスタの退避・復帰操作を行い、各並行サ
ブルーチンの開始,終了時にはレジスタの退避・復帰操
作は行わない。
【0051】図18は、図8の実行可能プロシージャの
検索動作0106を示したものである。操作1601で
実行プロセッサに所有スタック領域があるか調べ、無い
場合は操作1602により新たにブロック単位のスタッ
ク領域72と、該スタック領域のスタック領域管理情報
71を確保し、操作1603で実行プロセッサの所有ス
タックに登録し、操作1604で該スタック領域管理情
報71の初期設定、即ち実行プロセッサ711の登録、
empty_flag712をON、スタック領域72への先頭ア
ドレス713の登録操作を行なう。次に操作1701に
てCSRを検索し、操作1606にて、検索されたCS
Rのprocessor_counter 67を1増やし、操作1607
にて該CSRの所属スタック領域管理情報へのポインタ
を登録し、操作905にて該CSRに戻る。また操作1
601が真ならば、操作1701以降より続行する。
【0052】図19はCSRを登録する階層Queue の構
成を表す。図において17は階層Queue 、1701,1
711,…,17n1はそれぞれ分岐操作段数に対応す
るQueueである。各Queueは、該Queue をロックするため
のキー、1702,1712,…,17n2を所有する。
【0053】図20、図21は、それぞれ図6の操作0
02,003に対応する、階層Queue 登録操作,削除操
作の動作を示したものである。両者とも動作の開始/終
了時に、自CSRの段数に該当する待ち行列に、ロック
操作1801/アンロック操作1803を行い、他プロ
セッサが該待ち行列に対し、同様の操作を実行出来ない
ようにする。そして自CSRを該当する待ち行列に対し
て、前者は登録操作1802を、後者は削除操作190
2を行う。
【0054】図22は、階層Queue 検索操作1701の
動作を示したものである。操作2001により段数の小さい
待ち行列から、登録されているCSRを探す。次に操作
2002で、探し出した1CSRをロックし、他プロセッサ
が該CSRにアクセス出来ないようにする。そして操作
2003により該CSRの活性化flag68をチェック
し、ONならば操作1605は終了、OFFならば操作
2004にて該CSRをアンロックした後、操作200
1に戻り、初めからやり直す。
【0055】以下、図23,図24を用いて階層Queue
による並列処理の動作例を具体的に説明する。
【0056】図23においては、ツリーが分岐・合流操
作からなる並列処理を意味し、各ノードは並行サブルー
チンに対応する。100〜102はプロセッサ、720
〜722はスタック領域である。図は、プロセッサ10
0が並行サブルーチン0→01→011→0111の順
番に実行し、現在0111を実行中であることを示して
いる。更にこれらの並行サブルーチンは、スタック領域
720を連続的に拡張することにより共有している。他
のプロセッサについても同様である。図24は、図23
における階層Queue へのプロシージャ登録状況を示した
ものである。段数1のQueue (1) 1711に、プロシ
ージャ01,02が、段数2のQueue(2) 1721に0
11,021が登録されている。
【0057】ここで、図23のプロセッサ102が、並
行サブルーチン03の処理を終えるとする。102はリ
ターンプロシージャ共有化操作により、メインルーチン
0にリターンしようとするが、0では実行すべき並行サ
ブルーチンは既に存在せず、且つ他プロセッサが0がコ
ールした並行サブルーチンを実行中なので、0にリター
ン出来ない。そこで優先度の一番高いプロシージャ、即
ち階層Queue に登録されている一番段数の浅いプロシー
ジャ01にアクセスし、01の並行サブルーチン012
をスタック領域722上で実行する。
【0058】このように、なるべくツリーの根本に近い
プロシージャより実行することで、該プロシージャ以降
のサブツリーを1つのプロセッサで単独で実行する可能
性が高くなり、Queue より実行すべきプロシージャを見
つけ出す操作回数が低減する。
【0059】
【発明の効果】本発明によれば、分岐かつ合流操作から
なる並列処理プログラムにおいて、並列処理実行時に伴
う並列実行制御操作によるオーバーヘッドを低減でき
る。本発明による効果を示す為に、図25,図26に
て、クイックソートの並列処理プログラムを従来方法と
発明方法で実現した場合のオーバーヘッドを比較する。
両図は共に、33MHz動作のモトローラ社製マイクロ
プロセッサ68030×4台構成の密結合マルチプロセ
ッサを想定して、クイックソートプログラムを両方法で
実行させた時のオーバーヘッド予測値である。本予測値
は、両方法の並列実行制御を実現する操作プリミティブ
を作成し、各操作プリミティブ実行時間を実機にて測定
し、該プログラムを実行した場合のオーバーヘッドを該
実測値を基に算出したものである。
【0060】図25は、該プログラムを実行させた場合
の、並列処理単位当りのオーバーヘッドを表したグラフ
である。縦軸が該オーバーヘッド,横軸が該プログラム
の並列処理単位数を表す。図より発明方法は、従来方法
と比較して並列処理単位数100以上で、オーバーヘッ
ドがおよそ40%低減することが期待出来る。
【0061】図26は、図25における並列処理単位数
100時のオーバーヘッドの内訳を示したものである。
スタック領域生成操作によるオーバーヘッドは、スタッ
ク領域の共有化により無視出来る程に低減される。但し
クイックソートでは、各メインルーチンより分岐される
並行サブルーチン数は並列処理では最小値の2である
為、スケジューリング操作によるオーバーヘッドで16
%の低減、またレジスタ退避/復帰操作等のコンテクス
ト切り替え操作によるオーバーヘッドで53%の低減に
留まることが予想される。しかしメインルーチン当りの
分岐される並行サブルーチン数の多いプログラムに対し
ては、リターンプロシージャ共有化操作により、オーバ
ーヘッドは更に低減されることが期待される。
【図面の簡単な説明】
【図1】本発明の全体構成図。
【図2】従来の並列処理方法の動作例を表す図。
【図3】従来の並列処理方法の分岐・合流操作を表すフ
ローチャート。
【図4】従来の並列処理方法の各プロセッサの基本動作
を表すフローチャート。
【図5】本発明の、並列処理方法の動作例を表す図。
【図6】本発明による並列処理プログラム例。
【図7】並行サブルーチンの処理を表すフローチャー
ト。
【図8】実行可能プロシージャ検索操作の概略を表すフ
ローチャート。
【図9】スタック領域管理情報とスタック領域の一実施
例。
【図10】共有化リターン情報と並行サブルーチンのス
タック領域の一実施例。
【図11】共有化リターン情報の一実施例。
【図12】並行サブルーチンの初期操作の動作を表わす
フローチャート。
【図13】並行サブルーチンの終了操作の動作を表わす
フローチャート。
【図14】メインルーチンへのリターン操作の動作を表
わすフローチャート1。
【図15】メインルーチンへのリターン操作の動作を表
わすフローチャート2。
【図16】分岐操作の動作を表わすフローチャート。
【図17】合流操作の動作を表わすフローチャート。
【図18】実行可能プロシージャ検索操作の動作を表す
フローチャート。
【図19】階層Queue 構成図。
【図20】階層Queue 登録操作の動作を表わすフローチ
ャート。
【図21】階層Queue 削除操作の動作を表わすフローチ
ャート。
【図22】階層Queue 検索操作の動作を表わすフローチ
ャート。
【図23】階層Queue による並列処理の動作例を表す第
1の図。
【図24】階層Queue による並列処理の動作例を表す第
2の図。
【図25】本発明の効果を表す図である。
【図26】本発明の効果を表す図である。
【符号の説明】
100〜102…プロセッサ、11…メモリ、110…
プロセス用メモリ空間、12…通信線、130〜13
2,0,01〜05,011,012,021,011
1,0211…並行プロシージャ、140,141…ス
タック領域確保、15…スケジューラ、150,151
…Queue 登録、16…共有化リターン情報、160,1
61…分岐・合流操作、162…リターンプロシージャ
共有化、18…並列実行制御、7200,72001…
フレーム、71…スタック領域管理情報、711…実行
プロセッサへのポインタ、712…空フラグ、713…
スタック領域へのポインタ、72,720,721,7
201〜7205,72000,72005…スタック領
域、612…メインルーチンへのポインタ、621…プ
ログラムカウンタ、622…フレームポインタ、623
…引数領域幅、624…所属スタック領域管理情報への
ポインタ、631…共有プログラムカウンタ、632…
共有フレームポインタ、633…共有スタックポイン
タ、634…共有引数領域幅、635…所属スタック領
域管理情報への共有化ポインタ、64…最上位フラグ、
65…分岐操作段数、66,1702〜17n2…ロッ
ク用キーフラグ、67…プロセッサカウンタ、68…分
岐操作フラグ、69…レジスタ退避領域、17…階層Qu
eue、171,172,1701〜17n1…Queue。

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】複数の並列実行可能な処理単位より構成さ
    れる並列処理プログラムを並列処理システム上で並列実
    行させる為の並列実行制御操作を有する並列処理方法に
    おいて、該並列実行制御操作は、該処理単位の実行順序
    制御を行なうスケジューリング操作として、該処理単位
    を待ち行列に登録して、該待ち行列より実行すべき処理
    単位を選び出す待ち行列操作と、該処理単位実行後に戻
    るべき処理単位を該処理単位間で共有化する共有化操作
    を有し、該処理単位実行時に使用するデータを格納する
    スタック領域の確保操作として、メモリ空間中で未使用
    の部分からブロック単位で生成確保する操作と、既に確
    保されている他処理単位のデータ格納の為のスタック領
    域の未使用部分を確保する操作を有することを特徴とす
    る並列処理方法。
  2. 【請求項2】請求項1において、待ち行列操作は、待ち
    行列を複数個有する階層待ち行列を使用し、該待ち行列
    への登録対象を少なくとも1つ以上の並列実行可能な処
    理単位を生成できる状態の処理単位とし、該並列処理プ
    ログラム実行開始時より該処理単位が生成されるまでに
    行なわれた処理単位生成操作の段数を優先度として、該
    優先度に対応する段数の待ち行列に登録され、該段数の
    小さい待ち行列に登録されている処理単位より優先して
    実行することを特徴とする並列処理方法。
  3. 【請求項3】請求項1において、共有化操作は、該操作
    が使用する共有情報としてプログラムカウンタ,スタッ
    クポインタ,フレ−ムポインタを有することを特徴とす
    る並列処理方法。
  4. 【請求項4】請求項1において、共有化操作は、該操作
    が使用する共有情報として処理単位の引数領域幅を有す
    ることを特徴とする並列処理方法。
  5. 【請求項5】請求項1において、並列実行可能な処理単
    位は、該処理単位を実行するスタック領域上で先頭であ
    るかどうかを示す情報を有することを特徴とする並列処
    理方法。
  6. 【請求項6】請求項1において、スタック領域確保操作
    によって生成確保されるスタック領域は、該スタック領
    域の管理情報を有することを特徴とする並列処理方法。
JP19772991A 1991-08-07 1991-08-07 並列処理方法 Pending JPH0540742A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP19772991A JPH0540742A (ja) 1991-08-07 1991-08-07 並列処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP19772991A JPH0540742A (ja) 1991-08-07 1991-08-07 並列処理方法

Publications (1)

Publication Number Publication Date
JPH0540742A true JPH0540742A (ja) 1993-02-19

Family

ID=16379374

Family Applications (1)

Application Number Title Priority Date Filing Date
JP19772991A Pending JPH0540742A (ja) 1991-08-07 1991-08-07 並列処理方法

Country Status (1)

Country Link
JP (1) JPH0540742A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013526754A (ja) * 2010-05-25 2013-06-24 インテル コーポレイション マルチスレッドアプリケーションのパフォーマンスを解析する方法及びシステム
JP2014191468A (ja) * 2013-03-26 2014-10-06 Hitachi Ltd プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013526754A (ja) * 2010-05-25 2013-06-24 インテル コーポレイション マルチスレッドアプリケーションのパフォーマンスを解析する方法及びシステム
JP2014191468A (ja) * 2013-03-26 2014-10-06 Hitachi Ltd プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法

Similar Documents

Publication Publication Date Title
US7650602B2 (en) Parallel processing computer
US9250979B2 (en) Asynchronous grace-period primitives for user-space applications
US7962923B2 (en) System and method for generating a lock-free dual queue
US7653791B2 (en) Realtime-safe read copy update with per-processor read/write locks
US6389446B1 (en) Multi-processor system executing a plurality of threads simultaneously and an execution method therefor
US8661449B2 (en) Transactional computation on clusters
Burns et al. A schedulability compatible multiprocessor resource sharing protocol--MrsP
JP2866241B2 (ja) コンピュータシステムおよびスケジューリング方法
US7797704B2 (en) System and method for performing work by one of plural threads using a lockable resource
US8141076B2 (en) Cell processor methods and apparatus
Brandenburg Multiprocessor real-time locking protocols
US20110265093A1 (en) Computer System and Program Product
US20050066149A1 (en) Method and system for multithreaded processing using errands
Cole et al. Analysis of randomized work stealing with false sharing
US10360079B2 (en) Architecture and services supporting reconfigurable synchronization in a multiprocessing system
US9652301B2 (en) System and method providing run-time parallelization of computer software using data associated tokens
US5708808A (en) Method and apparatus for concurrency with critical regions
Michael et al. Relative performance of preemption-safe locking and non-blocking synchronization on multiprogrammed shared memory multiprocessors
US6701429B1 (en) System and method of start-up in efficient way for multi-processor systems based on returned identification information read from pre-determined memory location
JPH0540742A (ja) 並列処理方法
Fujisawa et al. A software implementation of speculative memory
US6832228B1 (en) Apparatus and method for providing a threadsafe object pool with minimal locking
Troendle et al. A specialized concurrent queue for scheduling irregular workloads on GPUs
KR20230121884A (ko) 어드레스 매핑 인식 태스킹 메커니즘
Fukuoka et al. An efficient inter-node communication system with lightweight-thread scheduling