JPH01194032A - 並列コンパイル方法 - Google Patents

並列コンパイル方法

Info

Publication number
JPH01194032A
JPH01194032A JP1707288A JP1707288A JPH01194032A JP H01194032 A JPH01194032 A JP H01194032A JP 1707288 A JP1707288 A JP 1707288A JP 1707288 A JP1707288 A JP 1707288A JP H01194032 A JPH01194032 A JP H01194032A
Authority
JP
Japan
Prior art keywords
processing
node
loop
data
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.)
Pending
Application number
JP1707288A
Other languages
English (en)
Inventor
Teruo Tanaka
輝雄 田中
Shigeo Ihara
茂男 井原
Naoki Hamanaka
濱中 直樹
Kyoko Iwazawa
岩澤 京子
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 JP1707288A priority Critical patent/JPH01194032A/ja
Publication of JPH01194032A publication Critical patent/JPH01194032A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Multi Processors (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、並列計算機システムに係り、特に逐次実行型
の高級言語で記述されたソース・プログラムから、並列
に実行するのに好適′なオブジェクトプログラムを生成
する方式に関する。
〔従来の技術〕
各プロセッサがそれぞれ記憶装置を持つような並列シス
テムが実現されている。このようなシステムのプロセッ
サ間データ通信として、メツセージ通信が知られている
。この通信方式では、転送データにそのデータを他の転
送データと識別するためのデータ識別子を付けることに
より、送受信プロセッサ間で転送データの一致性を保証
している。
たとえば、複数台のTransputerを結合したシ
ステムを動作させる言語Oceamにおいては、プロセ
ス間の識別子として、チャネルを用いていることが、ア
イコツト、ザ トランスピユータ インプリメンテーシ
ョンオブオツカム、エフ、ジー。
シー、ニス(1984年)第533頁から第541頁ま
で(IC0T、 The Transpute Imp
limentationof OCCAM、 FGC3
(1984)、 pp533−541)。
において論じられている。つまり、データの送受信を行
いたい2つのプロセス間で、同じチャネルを指定し、さ
らに送受信時に同期を取ることにより、送受信処理の対
応関係を保障している。毎回、同期をとることにより、
別のデータの送受信時に同じチャネルを指定することが
できる。
一方、第2図に示すような並列処理システムでは、送信
処理と送信処理が独立に行われる。このシステムは、特
願昭61−182361に詳細に記載されている。この
並列処理システムを簡単に説明すると、 (1)このシステムはホスト計算機21と並列処理部2
2から構成され、さらに、並列処理部22は複数台のプ
ロセッサ23と任意のプロッサ間でデータ転送可能なネ
ッワーク24から構成される。
(2)各プロセッサ23は、プログラムやデータを保持
するローカルメモリ25と、ローカルメモリ25から順
次命令を読み出し、実行する命令処理部26と、送信部
27および受信部28から構成される。
(3)データ送信処理は、送信命令(5end命令)を
実行することにより実現される。命令処理部26におい
て5end命令が解読されると、そのオペランドで指定
したレジスタから、転送先プロセッサ番号、データ識別
子およびデータを送信部27のレジスタ32にセットす
る。レジスタ32の3つの情報は、メツセージとして、
ネットワーク24に送られる。ネットワーク24上のメ
ツセージは、メツセージ内の転送先プロセッサ番号で示
されたプロセッサの受信部内受信バッファ29に、デー
タ識別子3oとデータ31の組として取り込まれる。
(4)データ受信処理は、受信命令(Receive命
令)を実行することにより実現される。命令処理部26
においてReceive命令が解読されると、そのオペ
ランドで指定したレジスタから検索用の識別子を取り出
し、受信部28に送る。受信部28では、受信バッファ
29の中から、検索用の識別子と一致するデータ識別子
を検索する。もし、一致するデータ識別子がない場合は
、一致するデータ識別子が到着するまで待つ、もし、一
致するデータ識別子がある場合は命令処理部26に報告
する。命令処理部26は対応するデータを取り込む。
このとき、5end処理とReceive処理は独立に
実行されるため、データ識別子により5end処理とR
eceive処理の関係が一意に決まることが重要とな
る。
このデータ識別子の一意性の保証は、プログラム中に表
現されたすべての5end処理とReceive処理の
組み合わせを区別するだけでは満たされず、プログラム
中のループ構造などでの処理の流れを考慮する必要があ
る。
たとえば、第6図に示すDoループは1文41と文42
が並列に実行可能である。このDoループを2つのプロ
セッサ1およびプロセッサ2で実行する。それぞれ実行
するプログラムを第7A図、第7B図に示す。プログラ
ム中送信処理(5end処理)はサブルーチン形式、受
信処理(Receive処理)は関数形式で記述した。
 5end処理の第1引数は転送先プロセッサ番号(P
E番号)、第2引数はデータ識別子、第3引数は転送デ
ータをそれぞれ示す、 Receive処理の引数は検
索用の識別子を示す。
Doループのi回目の反復処理において、プロセッサ1
は文45を実行し、次に文46を実行する6文46の実
行はReceive処理を含むので、対応するプロセッ
サ2の文49の実行が終了し、データB(I−1)がプ
ロセッサ1に届くまで待たされる。データB(I−1)
がプロセッサ1に届くと(プロセッサ2で文49の実行
を終了した)、プロセッサ1は、文46を実行し、さら
に、D。
ループの(i + 1 )回目の反復処理を行い、文4
5を実行する。この時、プロセッサ2が、DOルプのi
回目の反復処理の文50を終了している保証はない、そ
のため、プロセッサ2の受信バッファに、同じデータ識
別子を持つデータが2つ格納される可能性がある。した
がって、DOループのi回目の反復処理と、Doループ
の(i+1)回目の反復処理では、データ識別子を別の
値に設定する必要がある。
このような場合、上記並列処理システムにおいては、ル
ープ構造内にあられれる転送処理に対して、すべて異な
るデータ識別子を用いていた。たとえば、第7図のDo
ループの場合、識別子として、ループ変数工が用いられ
ていた。
以下、プログラム中に表現されたすべての5end処理
とReceive処理の組み合わせを区別するための識
別子の割りっけを静的な割り付け、また、プログラム中
のループ構造などの処理の流れを考慮した割り付けを動
的な割り付けと表現する。
〔発明が解決しようとする問題点〕
上記従来技術では、プログラム中に動的に実行される5
end処理とReceive処理の対応する数だけ、デ
ータ識別子が必要である。
しかし、データ識別子は有限長であり、プログラムが大
規模になると、−変周いたデータ識別子を再使用する必
要が生じる。そのため、一意性を保証するために、余計
なプロセッサ間の同期処理命令などを挿入する必要を生
じていた。
また、多重ループなどでは、反復処理ごとにデータ識別
子を区別するために、データ識別子を定数でなく、計算
式としてあられす必要を生じ、その計算ステップの増加
により、性能低下の要因となっていた。
本発明の目的は、コンパイル時に、各プロセッサのルー
プ構造などの処理の流れを調べ、5end処理とRec
eive処理の一意性を保つように、かつなるべく定数
として、データ識別子を決定することである。
〔問題点を解決するための手段〕
上記目的は、コンパイラの自動並列化処理において、以
下の処理を施すことにより達成される。
1、プログラム上に表現されるすべての5end処理と
Receive処理の各組み合わせに対して、すべて異
なるデータ識別子をつける。この時、プログラム上に表
現される5end処理とReceive処理の組み合わ
せの数が、有限長のデータ識別子で表わされる数をこえ
た場合は、プログラムをいくつかに分割して処理する。
2、上記プログラムから、5end処理を行うSノード
、Receive処理を行うRノードおよびループ構造
をあられす合流点のノードおよび分岐処理ノードを取出
し、コントロールフローグラムを生成する。コントロー
ルフローグラフはプログラムの実行処理の順序関係をあ
られしている。
3、コントロールフローグラフ中のループ構造内にある
すべての対応するSノードとRノードの組について、コ
ントロールフローグラフを逆に探索し、i回目のループ
のSノードが実行可能となる前に、(i −1)回目の
ループの対応するRノードが実行終了されているかどう
かを調べる。
4、もし、実行されていない場合は、そのループを2倍
展開し、1にもどる。ここで2倍展開とは、対象とする
ループ構造内の処理をプログラム表現上2回くり返し、
そのループのループ制御変数の増分値を2倍することで
ある。
以上1〜4の処理を行うことにより、5and処理とR
eceive処理の対応を示すデータ識別子の一意性を
保証することができる。
〔作用〕
上記1〜4の処理を行うことにより、まず、プログラム
上に表現されているデータ識別子の一意性は保証され、
さらに、ループ構造内のすべてのループi回目の5en
d処理が実行される前に、対応する(i−1)回目のR
eceive処理の実行が終了していることが保証され
ている。このために、ループ構造などの処理の流れを考
慮してもデータ識別子の一意性は保障される。
〔実施例〕
以下、プロセッサ間でデータ識別子を用いたメツセージ
通信を行う並列プロセッサシステムのためのFortr
anコンパイル方法における本発明の一実施例を図面を
用いて詳細に説明する。
第3図に、本発明を適用するコンパイラ全体の構成を示
す。第3図内の構文解析処理13が、Fortranの
ソースプログラム11を入力とし、これを中間語7に変
換する。中間処理14は、この中間語7を入力として、
並列化処理16や最適化処理17を行い、中間語7を変
形する。コード生成処理15は、中間処理14が変形し
た中間語から並列に実行されるオブジェクトコード12
を生成する。中間処理中並列化処理16は、並列性検出
部18、プログラム分割・データ割付け・データ転送部
の検出部19を経て、データ識別子の生成1を行う。本
発明は、並列化処理の中のデータ識別子の生成処理に関
するものである。
第3図の並列化処理16のうち、データ識別子の生成に
関する処理の構成を第1図に示す。
データ識別子の生成処理は、入力データとして、中間語
7を用い、第1図に示す各処理を行い、結果として、中
間語7を書きかえる。さらに本処理中に、コントロール
フローグラムおよび3つのリストA、B、Cを用いる。
第3図の入力するソースプログラム11の例として、第
6図のFortranプログラムを用いて、以下説明を
行う。本プログラム例では、プロセッサ2台への割りつ
けとしたが、もちろんプロセッサ台数が3台以上への割
りつけに対しても、本方法を用いることができる。さら
に、プログラムを分割したプロセスの割りつけ単位を、
各プロセッサに対して、プロセスを1つとしたが、1台
のプロセッサに複数のプロセスを割りつけてもよい。
第6図のFortranプログラムは、Fortran
コンパイラ10(第3図)に入力され、構文解析13(
第3図)で中間語7に変換される。つぎにこの中間語7
から、並列性の検出18で、文41と文42(第6図)
の並列性が検出され、プログラム分割でプロセッサ1と
プロセッサ2用の2つのプログラムに分割される。各プ
ロセッサで用いられるデータは、データCおよび配列デ
ータAがプロセッサ1にねりあてられ、データDおよび
配列データBがプロセッサ2にわりあてられる。さらに
、プログラム中のデータ転送部が検出される。
これらは情報は、中間語7を変形することにより、デー
タ識別子生成部1に送られる。
データ識別子生成部1では、まず、静的なデータ識別子
の設定を行う。つまり、並列化されプログラム中に表現
される。すべての5end処理とReceive処理に
対して、データ識別子を異なる値に設定する。(本プロ
グラム例では、上記の設定で必要なデータ識別子は、有
限長のデータ識別子で表現できる個数以下であるとした
。もし、それでないならば、並列化されたプログラムを
いくつかに分割して、処理を行う。) この静的なデータ識別子の設定2を終了した結果の中間
語7をFortranで表現したものを第7A図および
第7B図に示す。
次に、コントロールフローグラフの生成3を行う。コン
トロールフローグラフは、5end処理を行うSノード
Receive処理を行う12ノード、およびループ構
造を示す分岐処理ノードと合流点ノードから処理手順を
定義するコントロールフローグラフを生成する。
第7A図および第7B図に対するコントロールフローグ
ラフを第8図に示す。
このコントロールフローグラフを用いて、並列プログラ
ムの動的フロー解析・変更およびデータ識別子の変更を
行う。
以下、データ識別子生成処理の主な制御を第4図、第5
図のPAD図を用いて詳細に説明する。
まず、第4図を用いて説明する。準備として、リストA
には、探索中のループ構造の番号が、リストBには、探
索済みのループ構造の番号が登録される。最初は、リス
トAにもリストBにも何もつながっていない(処理70
)。
以下、コントロールフローグラフ中にループ構造がなく
なるまでくりかえし行う(処理71)。
最内側ループ番号として、101をリストAに登録する
(処理72)。リストAから、ループ番号101を取り
出しく処理74)、そのループ内のすべてのSノード(
5end処理のノード)に対して次の処理を行う。以下
、第5図を用いて説明する。
変数FLGをOに初期設定する(処理80)。
FLGは、対象とするSノードとそれに対応するRノー
ドとの処理の順序関係を保持する。リストCには、Rノ
ード(Receive処理ノード)が変数ageととも
に登録される。ageは、ループ中のノードの世代(何
回目の反復かを示す)を保持する。最初は、 リストC
には、何もつながっていない(処理81)。Sノード6
1を選びそのノードを80とする。対応するRノード6
6をROとし、Roの属するループ102をリストAに
登録、R0ノードの属するループ102をRLoとする
。さらに、Sノードのageを1とする(処理82.8
3)。
いま、Sノードのageは1だから、処理85を行う。
処理8Sより、Rノード62がageを0として、リス
トCに登録される。
次に、リストCから、Rノード62を取り出して、対応
するSノード65を見つけ、ageをOとする。ループ
番号102はすでに、リストAに登録済である(処理8
8)。
Sノード6SはRLo内のノードっまり、R0ノード6
6と同じループの中にあるので処理90を行う。Sノー
ド66のageは0なので処理92を行う。さらに、S
ノードから合流点ノードまでにR。ノード66がないの
で処理94を行う。この処理92により、1回目のルー
プのSノード61の実行を開始する前に、(i−1)回
目のループのRノード66が終了している保証ができな
いことがわかる。処理94では、保証できないことを示
すためにFLGを1とする。
リストCには、もうRノードは登録されていないので、
処理96に進む。処理96では、FLGが1なので、処
理98を実行する。処理98では、検索中のループおよ
びリストAに登録されているループをすべて2倍展開し
、再度、静的に一意になるようにデータ識別子をつけな
おす。2倍展開された結果のループ101およびループ
102に対するコントロールフローグラフを第9図に示
す。
データ識別子として、新しく12.13が用いられてい
る。制御をLlで示されるラベルの位置に移す(処理9
9)。
再度、ループ101について、調べる。
FLGを0としl理80)、リストCをフリーとしく処
理81)、選択したSノード111を80とし、対応す
るRノード118をRoとし、そのRoを含むループ1
02をRL’。とし、(処理82)、Sノード111の
ageを1とする(処理83)。
Sノード111のageが1であるから、Rノード11
2および、Rノード114をageを0として、リスト
Cに追加する(処理85)。
リストCから、Rノード114を取り出し、対応するS
ノード119にage=oをつける(処理88)。Sノ
ード119はRL0中のノードであり、かつSノードの
ageはOなので、処理92を行う。さらに、Sノード
119から合流点ノード116までに、R0ノート11
8があるので、処理93を行う。この処理92により、
i回目のループのSノード111の実行を開始する前に
、(i−1)回目のループのRノード118の実行が終
了していることを保証できる。以上の処理を、Sノード
113,111および119に対して行い、すべて5e
nd処理とReceive処理の組み合わせに対して識
別子の一意性が保証できることがわかる。したがって、
ループ101と102はりストBに登録される(処理7
6(第4図))、シたがって、リストAに登録されてい
たすべてのリストについて調べ終ったので、処理77(
第4図)を実行する。
処理77により、ループ101とループ102がコント
ロールフローグラフからはずされる。
したがって、コントロールフローグラフからループ構造
がなくなり、処理4(第1図)および処理5(第1図)
が終了したことになり、正しく一意性をもつデータ識別
子がつけられたプログラムを中間語7として格納する。
この変換された中間語をFortranプログラムで表
現したものを第10A図、第10B図に示す。
第7図に対して、第10図はループ101゜102がそ
れぞれ2倍展開され、ループ101の文45、文46(
第7A図)、ループ102の文49、文50(第7B図
)が、それぞれループ101の文111ないし文114
(第10A図)、ループ102の文117ないし文12
1に展開され、データ識別子がっけかえられていること
がわかる。なお、本実施例においては、2倍展開により
、データ識別子の一意性が保証されたが、保証されない
場合は、そのループはさらに展開され、評価される。
〔発明の効果〕
本発明によれば、コンパイラによって自動的に、プロセ
ッサ間のデータ通信に必要なデータ識別子の一意を保障
することができる。
さらに、このデータ識別子は可能なかぎり、定数で表現
されるので、プログラム実行中に、データ識別子生成の
ための計算を行わなくてもすみ、第1図はデータ識別子
生成処理の一実施例、第2図は適用する並列処理システ
ムの概要図、第3図はコンパイラの全体図、第4図、第
5図はデータ識別子生成処理の概要を示す図、第6図は
実施例説明のためのソースプログラム、第7A図、第7
B図は第6図のソースプログラムの並列化を行った途中
経過を示す図、第8図は第7A図、第7B図に対するコ
ントロールフロー図、第9図は変換後のプログラム(第
10A図、第10B図)に対するコントロールフロー図
である。第10A図、第10B図は第6図の並列化変換
後のプログラムを示す図。
1・・・データ識別子生成処理、2・・・静的なデータ
識別子の設定処理、3・・・コントロールフローグラフ
の生成処理、4・・・コントロールフローグラフの動的
フロー解析・変更処理、5・・・データ識別子の変更処
理、6・・・コントロールフローグラフ、7・・・中間
語、10・・・Fortranコンパイラ、11・・・
Fortranソースプログラム、12・・・オブジェ
クトコード、13・・・構文解析、14・・・中間処理
、15・・・コード生成処理、16・・・並列化処理、
17・・・最適化処理、21・・・ホスト計算機、22
・・・並処処理部、23・・・プロセッサ、24・・・
ネットワーク、25・・・ローカルメモリ、26・・・
命令処理部、27・・・送信部、28・・・受信部、2
9・・・受信バッファ。
◇剃りi声・ノν →テ゛−り呻流祇 第3圓 =臣制巾つj蜆 −う−テ゛°−フaゾしに 郊4コ 竿を面 ν0  ノθ01=7.N             
         −4tpA(1)  −A(’ブ’
−/)+  Cx  、とう(T−t)    〜41
D(1) =215(x−ツノ + Qx  A (T
−/)      〜 42ノθσ   COA/7i
〜′LII                    
   〜43掻7A都 po ノ117/  I−1,W          
      〜44CALL   、13E Nr) 
(どEIN2.//、A (x−2)ジ    、45
A(1)=A(1−υ + C’ RECEIVE  
(77〕     、4t/σノ  C0M7<Ntl
E                        
    −47峯7E面 pθ  ノσ2   r=/、、〜′        
           〜42CALL   ’3E−
M2;)  (ど■)、υ、!3(1−υラ     
〜4ヂ13(1)  =  13(1−/)  + l
)xgEcEl−VE()a)  ”jaミック   
C0)ITtA/LIE              
         ”り/−伽一制9巾(プ;トローノ
リリメヒホ−−−−)郭遭チー1−5パしれ 第22 −61僧フ(コ>1−一ルル5戸コに −−−−>転ソ1チー745PA

Claims (1)

    【特許請求の範囲】
  1.  データ識別子により転送データを識別するプロセッサ
    間データ転送方式を用いた並列プロセッサを対象とし、
    高級言語で記述された逐次処理型ソースプログラムから
    該並列プロセッサによる並列実行のためのオブジェクト
    コードを生成するコンパイル方法において、該逐次実行
    型ソースプログラムを並列実行型プログラムに変換し、
    該並列実行型プログラム上に表現されたデータ転送処理
    に対してそれぞれ異なる該データ識別子を生成し、さら
    に該並列実行型プログラム内のループ構造内の処理の流
    れを調べ、ループ構造内の該データ識別子の一意性が保
    たれているか否かを調べ、もし、一意性が保たれていな
    い場合は、一意性が保たれるまでループ構造を展開する
    ことを特徴とする並列化コンパイル方法。
JP1707288A 1988-01-29 1988-01-29 並列コンパイル方法 Pending JPH01194032A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP1707288A JPH01194032A (ja) 1988-01-29 1988-01-29 並列コンパイル方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP1707288A JPH01194032A (ja) 1988-01-29 1988-01-29 並列コンパイル方法

Publications (1)

Publication Number Publication Date
JPH01194032A true JPH01194032A (ja) 1989-08-04

Family

ID=11933783

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1707288A Pending JPH01194032A (ja) 1988-01-29 1988-01-29 並列コンパイル方法

Country Status (1)

Country Link
JP (1) JPH01194032A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007133620A (ja) * 2005-11-10 2007-05-31 Fujitsu Ltd マルチプロセッサを有するプロセッサ装置用のタスク分配プログラム及びタスク分配装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007133620A (ja) * 2005-11-10 2007-05-31 Fujitsu Ltd マルチプロセッサを有するプロセッサ装置用のタスク分配プログラム及びタスク分配装置

Similar Documents

Publication Publication Date Title
US6199093B1 (en) Processor allocating method/apparatus in multiprocessor system, and medium for storing processor allocating program
US8296746B2 (en) Optimum code generation method and compiler device for multiprocessor
US20100037035A1 (en) Generating An Executable Version Of An Application Using A Distributed Compiler Operating On A Plurality Of Compute Nodes
JPH04307625A (ja) ループ最適化方法及び装置
Heulot et al. Spider: A synchronous parameterized and interfaced dataflow-based rtos for multicore dsps
JPH0397059A (ja) 並列プロセッサで処理する並列な命令ストリームを同期させる方法
JPH0830561A (ja) プログラムの並列化実行方法及び並列化実行コンパイラ
JP5036523B2 (ja) プログラム並列化装置
KR102062208B1 (ko) 멀티스레드 프로그램 코드의 변환 장치 및 방법
JPH01194032A (ja) 並列コンパイル方法
JP4719415B2 (ja) 情報処理システム及びコード生成方法
CN103577170A (zh) 网络应用的构建方法及装置
US20080282237A1 (en) Method and Apparatus For Generating Execution Equivalence Information
JP3028821B2 (ja) 並列化コンパイル方法
JP2000020482A (ja) ループ並列化方法
Heulot et al. Just-in-time scheduling techniques for multicore signal processing systems
WO2011090032A1 (ja) 並列処理プログラム生成方法、並列処理プログラム生成プログラム、及び並列処理プログラム生成装置
JPH04307624A (ja) ループ最適化方法及び装置
US20230305848A1 (en) Schedule Instructions of a Program of Data Flows for Execution in Tiles of a Coarse Grained Reconfigurable Array
JP4084374B2 (ja) ループ並列化方法及びコンパイル装置
JP2865694B2 (ja) コンパイル方法
JP2008015665A (ja) プログラム解析方法及びプログラム解析装置
Touati et al. Advanced Backend Code Optimization
JP2004152204A (ja) 並列化コンパイラ装置
CN115729648A (zh) 基于有向无环图的算子调度方法、装置和系统