JPH0749843A - 並列化コンパイラ - Google Patents

並列化コンパイラ

Info

Publication number
JPH0749843A
JPH0749843A JP19570993A JP19570993A JPH0749843A JP H0749843 A JPH0749843 A JP H0749843A JP 19570993 A JP19570993 A JP 19570993A JP 19570993 A JP19570993 A JP 19570993A JP H0749843 A JPH0749843 A JP H0749843A
Authority
JP
Japan
Prior art keywords
sequential execution
block
statement
source program
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
JP19570993A
Other languages
English (en)
Inventor
Shigeyoshi Kaneko
栄美 金子
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP19570993A priority Critical patent/JPH0749843A/ja
Publication of JPH0749843A publication Critical patent/JPH0749843A/ja
Pending legal-status Critical Current

Links

Landscapes

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

Abstract

(57)【要約】 【目的】 本発明は、コンパイラ、特に、逐次プログラ
ミング言語で記述されたプログラムを入力し、複数の並
列実行可能なプロセッサからなる並列計算機上で並列に
実行可能な、並列化された目的プログラムを出力する並
列化コンパイラに関する。 【構成】 本発明では、上記問題を解決するため、プロ
グラマが原始プログラム中の所望のブロックに対し、並
列化コンパイラが並列化を行わないような指示を記述
し、その指示を解釈し、該ブロックに対しては並列化を
行わないような翻訳処理を行う並列化コンパイラを提供
する。更に、本発明では、並列化コンパイラの処理系を
変更できない場合にも、原始プログラム中の所望のブロ
ックに対し、並列化コンパイラが並列化を行わないよう
な指示を記述し、その指示を解釈し、該ブロックに対し
て、並列化を行わない命令コードを生成するプリプロセ
ッサを持った並列化コンパイラを提供する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、コンパイラ、特に、逐
次プログラミング言語で記述されたプログラムを入力
し、複数の並列実行可能なプロセッサからなる並列計算
機上で並列に実行可能な、並列化された目的プログラム
を出力する並列化コンパイラに関する。
【0002】
【従来の技術】逐次プログラミング言語で記述されたプ
ログラム(以下、「逐次プログラム」と呼ぶ)を、複数
の並列実行可能なプロセッサからなる並列計算機上で並
列に実行されるプログラム(以下、「並列プログラム」
と呼ぶ)に変換し、目的プログラムを出力する「並列化
コンパイラ」がある。本明細書で用いる「並列化コンパ
イラ」は、「自動並列化コンパイラ」と呼ばれる翻訳系
と同義で用いている。
【0003】従来の並列化コンパイラの構成図の一例を
図12に示す。例えば、図14の原始プログラム90が、図13
の並列計算機上で並列実行されるように、並列化コンパ
イラにより、翻訳処理される場合を説明する。図13の並
列計算機は、ホスト計算機80と、各々がメモリ86, 87,
88, 89を持った4台の要素プロセッサ(Processing Ele
ment: 以下、PEと略して用いる)82, 83, 84, 85と、各
PE 82, 83, 84, 85 の動作を制御するためのPE制御ユニ
ット81で構成されている。
【0004】図12の並列化コンパイラは、図14のプログ
ラムに対し、字句解析部71,構文解析部72において、字
句解析、構文解析を行う。次に、該プログラムに対し、
並列化可能部分の抽出を行うため、プログラムは、並列
性抽出部73に渡される。
【0005】並列化コンパイラは、例えば、逐次プログ
ラム中に記述されているDOループ91,92をターゲットと
し、DOループが並列実行可能かどうかを判定する。本明
細書では、この場合のDOループのように、「並列化を行
う」、あるいは「並列化を行わない」処理の対象となる
文の列(高級言語プログラムの命令の並び)を“ブロッ
ク”と呼ぶことにする。
【0006】図14は、2つの二重DOループ91, 92を含む
Fortran プログラムである。ここでは、説明のため、第
7行目から第11行目で表現されるDOループを第1のDOル
ープ91,第13行目から第16行目で表現されるDOループを
第2のループ92と名付けて区別する。
【0007】並列性抽出部73では、これら2つのDOルー
プのそれぞれに対し、ループの構造を検出し、ループ内
のデータ依存関係を解析したり、ループが二重であるの
で、ループの入れ換えやループの分割を試み、その結
果、ループが並列実行可能であると判断された場合に、
該当命令を並列化し、コードを出力する。
【0008】図14のプログラムの第1のDOループ91は、
外側DOループのインデックス変数Iに関してデータ依存
関係がないため、並列性抽出処理の結果、並列実行可能
であると判断される。そこで並列化が行われ、コード生
成部74によって第1のDOループ91は、第13図の並列計算
機の要素プロセッサ、PE1 82からPE4 85で並列実行され
るよう、各PEで実行するプログラム93が、図15のように
生成される。
【0009】同様に、第2のDOループ92に対しても並列
性を抽出する処理が行われる。まず、外側の変数Iに関
するDOループに対して、並列化化膿かどうかが判断され
る。こ場合、A(I,J)とA(I-1,J)で変数Iに対する依存関
係が存在するため、このままでは並列化できないことが
分かる。そこで、並列性抽出部73では、内側ループと外
側ループを入れ換え、同様の処理を行う。ループの入れ
換えを行った第2のDOループ94図16に示す。このループ
に対し、外側の変数Jに管するDOループに対して、並列
化可能かどうかを判断する。しかし、この場合には、A
(I,J)とB(I,J-1)で、変数Jに対する依存関係が存在す
るため、並列化不可能である。
【0010】結局、第2のDOループに関しては、並列性
抽出のための処理が行われながら、並列化不可能と判断
され、第2のDOループは並列化されず、第1のDOループ
だけが並列化され、図14のプログラムは図17に示すプロ
グラム95のように変換される。
【0011】この例のように、従来の並列化コンパイラ
では、プログラマが予め並列化不可能であると分かって
いるループなどに対しても、上記並列化を試みる処理が
行われるため、上記処理の結果、並列化の対象としたブ
ロックが、並列化不可能と判断される場合や、並列化は
可能であっても、並列実行した場合のプログラムの実行
時間が逐次実行した場合の実行時間と差がない場合に
は、上記処理による並列化の効果はなく、むしろコンパ
イル時間を長くする原因となり不都合である。
【0012】あるいは、並列計算機で複数のPEを利用し
て実行するには、PE間でのデータ転送が必要になるた
め、場合によっては、プログラムを並列化することによ
り、かえって通信時間によるオーバーヘッドが大きくな
り、並列化後の実行時間の方が、逐次に実行する時間よ
りも長くかかるような場合がある。特に、並列化する規
模が小さい場合などには顕著である。
【0013】また、原始プログラムの所望のブロックに
対し、該ブロックを逐次に実行した場合の実行時間と、
該ブロックを並列に実行した場合の実行時間を比較する
ことで、プログラムの並列度がどの程度であるかを知る
ことができる。しかし、逐次プログラムに対し自動的に
並列化を施す従来の自動並列化コンパイラでは、プログ
ラマが原始プログラム中の所望のブロックを指定し、逐
次に実行した場合と、並列に実行した場合との実行時間
を比較することはできなかった。
【0014】
【発明が解決しようとする課題】上述したように、従来
では、プログラマが原始プログラム中に、所望のブロッ
クに対して、並列化コンパイラが並列化を行わないよう
に指示することができなかった。
【0015】そのため、従来の並列化コンパイラは、予
めプログラマが並列化不可能であると分かっているブロ
ックや、並列実行しても、逐次に実行するのと実行時間
が変わらないと分かっているブロックに対しても並列化
を試み、そのために、コンパイル時間を長くする原因と
なっていた。
【0016】また、並列化コンパイラに並列化されるこ
とによって、逐次実行する場合よりも、通信時間による
オーバーヘッドなどのために、かえって実行時間が長く
なるという問題があった。
【0017】更に、原始プログラムが自動的に並列化さ
れる従来の並列化コンパイラでは、プログラマが原始プ
ログラム中の所望のブロックに対し、並列化コンパイラ
によって並列化が行われないように指示することができ
ず、そのために、例えば、該ブロックに関して並列化を
行ったプログラムと並列化を行わないプログラムを、同
一計算機上で実行し、実行時間を比較したりすることは
できなかった。
【0018】本発明では、上記問題を解決するため、プ
ログラマが原始プログラム中の所望のブロックに対し、
並列化コンパイラが並列化を行わないような指示を記述
し、その指示を解釈し、該ブロックに対しては並列化を
行わないような翻訳処理を行う並列化コンパイラを提供
する。
【0019】更に、本発明では、並列化コンパイラの処
理系を変更できない場合にも、原始プログラム中の所望
のブロックに対し、並列化コンパイラが並列化を行わな
いような指示を記述し、その指示を解釈し、該ブロック
に対して、並列化を行わない命令コードを生成するプリ
プロセッサを持った並列化コンパイラを提供する。
【0020】
【課題を解決するための手段及び作用】本発明の並列化
コンパイラは、逐次プログラミング言語に、並列化コン
パイラが並列化を行わないブロックを指定するための
「逐次実行指定文」を追加して拡張した文法を解釈し、
第1の逐次実行指定文と第2の逐次実行指定文とで挟ま
れた範囲の文の列を逐次実行ブロックとして、並列化の
対象から外す処理を行う「逐次実行ブロック解釈部」
を、従来の並列性抽出部に追加して備えていることを特
徴としている。
【0021】また、並列化コンパイラの処理系を変更で
きない場合に、本発明の並列化コンパイラは、入力され
た原始プログラムから逐次実行指定文を解釈し、所定の
第1の逐次実行指定文と、第2の逐次実行指定文で囲ま
れた文の列を逐次実行ブロックとして抽出する「逐次実
行ブロック抽出部」、該逐次実行ブロックに対し、並列
化を行わずに命令コードを生成し、逐次実行サブルーチ
ンとして登録する「逐次コード生成部」、原始プログラ
ムに対し、第1の逐次実行指定文から第2の逐次実行指
定文までの文の列を、「逐次コード生成部」で生成され
たサブルーチンを呼び出す命令に置き換える「原始プロ
グラム変換部」とで構成されるプリプロセッサを持つこ
とを特徴としている。
【0022】本発明の並列化コンパイラでは、プログラ
マが原始プログラム中の所望のブロックに対し、並列化
コンパイラが並列化を行わないよう、所望のブロックを
第1の逐次実行指定文と第2の逐次実行指定文とで囲む
ことで、逐次実行ブロックを指定し、並列化コンパイラ
は該逐次実行指定文をプログラロム言語の文法として解
釈し、並列性抽出部において並列化翻訳処理を行う際、
逐次実行ブロック解釈部において、上記、逐次実行指定
文で囲まれたブロックを非並列化対象ブロックとして認
識し、該ブロックに対して並列性を抽出する処理を行わ
ないようにすることにより、予め並列化が不可能である
と分かっているブロックに対し、並列化を試みたり、並
列実行しても逐次実行した場合と、プログラムの実行時
間が変わらないブロックに対して並列化を試みたりする
無駄が省け、コンパイル時間を短縮することが可能にな
る。
【0023】また、並列化コンパイラの処理系を変更で
きない場合に、本発明の並列化コンパイラでは、プログ
ラマが、原始プログラム中の所望のブロックに対し、並
列化コンパイラが並列化を行わないよう、所望のブロッ
クを第1の逐次実行指定文と第2の逐次実行指定文とで
囲むことで逐次実行ブロックを指定し、並列化コンパイ
ラのプリプロセッサの逐次実行ブロック抽出部が、該逐
次実行ブロックを抽出し、逐次コード生成によって該ブ
ロックに対し、並列化を行わない命令コードを生成し
て、逐次実行サブルーチンとして登録する。原始プログ
ラム変換部では、原始プログラム中の該ブロックを、逐
次コード生成部で生成された逐次実行サブルーチンを呼
び出す命令に置き換え、並列化翻訳処理部によって並列
化処理が行われる。
【0024】この際、逐次実行を指定したブロックに対
しては、既に命令コードが生成され、逐次実行サブルー
チンとして登録され、原始プログラム中の該ブロック
は、逐次実行サブルーチン呼び出し命令に置き換えられ
ているため、該ブロックを並列化の対象から外すことが
可能となる。これにより、並列化コンパイラの処理系を
変更できない場合であっても、原始プログラム中に逐次
実行ブロックを指定できるようになる。
【0025】
【実施例】本発明の一実施例を、図面に基づいて説明す
る。まず初めに、用語の説明をする。本発明では、プロ
グラミング言語の文法に、“逐次実行指定分”を追加
し、拡張している。本発明のコンパイラは、逐次プログ
ラミング言語で記述された原始プログラムから並列実行
可能ブロックを抽出し、該ブロックに対し並列化変換処
理を施し、並列計算機上で並列に実行可能な目的プログ
ラムを出力する“並列化コンパイラ”であるが、“逐次
実行指定文”は、本発明のコンパイラに、原始プログラ
ムのあるブロックに対し、並列化を行わないような指示
を与える文として用いる。
【0026】逐次実行指定文は、一例として、原始プロ
グラムがFortran 言語プログラムの場合には、第1の逐
次実行指定文として、8000番台のラベル(8000, 8001,
…)が、逐次実行ブロックの始まりを表し、第2の逐次
実行指定文として9000番台のラベル
【0027】
【数1】 が、逐次実行ブロックの終わりを表し、第1の逐次実行
指定文を含む行から、第2の逐次実行指定文を含む行ま
でが、逐次実行ブロックを表すものとする。あるいは、
原始プログラムがC言語プログラムの場合には、例え
ば、第1の逐次実行指定文として、
【0028】
【数2】 が逐次実行ブロックの始まりを表し、第2の逐次実行指
定文として、
【0029】
【数3】 が逐次実行ブロックの終わりを表し、第1の逐次実行指
定文と第2の逐次実行指定文とで挟まれる範囲の文の列
が逐次実行ブロックを表すものとする。
【0030】前述した図14のFortran 言語プログラム90
の第13行目から第16行目までを逐次実行ブロックとして
指定する場合には、上記逐次実行指定文を用いて、図5
の第13行目から第16行目のように記述するものとする。
ここで、「8000+n」と「9000+n」で表現される番号
「n」は、各逐次実行ブロック毎に一致していること、
逐次実行ブロックを複数指定する場合には、「8000番
台」「9000番台」のラベルに対し、ラベルの値は逐次実
行ブロック毎に個別のものを与えることは、予め、プロ
グラミング言語の文法で定義されているものとする。
【0031】あるいは、図7のC言語プログラム96の第
17行目から第22行目までを逐次実行ブロックとして指定
する場合には、上記逐次実行指定文を用いて、図8の第
17行目から24行目、あるいは図9の第17行目から第22行
目のように記述するものとする。ここで、「SERIAL」と
「END _SERIAL」に付加する番号「n」は、各逐次実行
ブロック毎に一致していること、逐次実行ブロックを複
数指定する場合には、「SERIALn 」、「END _SERIALn
」の「n」に対し、逐次実行を指定するブロック毎に
個別の番号を与えることは、予め、プログラミング言語
の文法で定義されているものとする。
【0032】公知のFortran 言語仕様では、第1、第2
の逐次実行指定文はラベルとして解釈され、プログラマ
が逐次実行ブロック毎に個別のラベルとし記述すること
で、通常のコンパイラでもラベルの二重定義エラーとな
ることはなく、各ブロック内での繰り返し演算と分岐も
正しく実行される。
【0033】同様に、公知のC言語仕様でも、プログラ
ム中にラベルの記述が許されており、「SERIALn 」、
「END _SERIALn 」の末尾に「:」が付加されているこ
とにより、コンパイラによりラベルとして解釈され、更
に、プログラマが逐次実行ブロック毎に個別のラベルと
して記述することで、通常の逐次コンパイラや、本発明
の逐次実行ブロック解釈部や、逐次実行ブロック抽出部
を備えたプリプロセッサを持たない従来の並列化コンパ
イラでコンパイルしても、文法エラー、ラベルの二重定
義エラーとなることはなく、命令コードに影響を与える
こともない。
【0034】本発明の並列化コンパイラの第1の実施例
の構成図を第1図に、同コンパイラの並列性抽出部14の
詳細な処理の流れ図を第3図に示し、本発明の並列化コ
ンパイラの第2の実施例の構成図を第2図に、同コンパ
イラのプリプロセッサ24の詳細な処理の流れ図を第4図
に示す。
【0035】まず、第1図を用いて、第1の実施例の並
列化コンパイラの動作の概要について説明する。本発明
の並列化コンパイラは、字句解析部11と、構文解析部12
と、並列性抽出部14と、コード生成部15とを備え、更
に、従来の並列化コンパイラの並列性抽出部に逐次実行
ブロック解釈部13を追加して備えていることを特徴とし
ている。
【0036】本コンパイラでは、並列性抽出部14におい
て原始プログラム10中の所定のブロックに対し、並列性
を抽出する処理を行う際、逐次実行解釈部13において、
原始プログラム10中の所定の第1の逐次実行指定文を検
出し、これを逐次実行ブロックの開始であると解釈し、
次に、該第1の逐次実行指定文と対になる所定の第2の
逐次実行指定文を検出し、所定の第1の逐次実行指定文
から所定の第2の逐次実行指定文までを逐次実行ブロッ
クとして抽出し、並列性抽出部14において、該逐次実行
ブロックが、並列化処理を行われないようにし、逐次実
行ブロック以外のブロックに対してのみ、並列化処理が
行われるような処理を行うことを特徴としている。
【0037】次に、第2図を用いて、第2の実施例の並
列化コンパイラの動作の概要について説明する。本発明
の並列化コンパイラは、従来の並列化翻訳処理部26のプ
リプロセッサ24として、逐次実行ブロック抽出部21、逐
次コード生成部22、原始プログラム変換部23を持つこと
を特徴としている。
【0038】本コンパイラのプリプロセッサでは、逐次
実行ブロック抽出部21において原始プログラム20中の所
定の第1の逐次実行指定文を検出し、これを逐次実行ブ
ロックの開始であると解釈し、次に、該第1の逐次実行
指定文と対になる所定の第2の逐次実行指定文を検出
し、所定の第1の逐次実行指定文から所定の第2の逐次
実行指定文までを逐次実行ブロックとして抽出する。逐
次コード生成部22では、該逐次実行ブロックに対するコ
ードを生成し、該コードを逐次実行サブルーチン28とし
て登録する。原始プログラム変換部23では、原始プログ
ラム20中の該逐次実行ブロックを、逐次コード生成部22
で生成された該逐次実行ブロックに対応するサブルーチ
ンを呼び出す命令に置き換える。以上の処理を原始プロ
グラム20中の全ての逐次実行ブロックに対して行い、変
換後原始プログラム25を生成する。従来の並列化翻訳処
理は、並列化翻訳処理部26において、変換後原始プログ
ラム25に対して行われる。
【0039】このとき、並列化翻訳処理部26において、
原始プログラム中の並列性が抽出され、プログラムは自
動的に並列化変換されるが、プログラマが指定した逐次
実行ブロックは、既に、並列化されずにコードが生成さ
れているため、該ブロックに対して並列化処理が行われ
ることはない、並列化翻訳処理により得た目的プログラ
ムは、逐次実行サブルーチン28呼び出し命令を含み、リ
ンク部29において、逐次実行サブルーチン28とリンク処
理を行うことで、実行形式ロードモジュール30を得る。
【0040】次に、本発明の並列化コンパイラの処理の
詳細な流れを説明する。まず初めに、本発明の並列化コ
ンパイラの入力となる原始プログラムのプログラミング
言語の文法とプログラムの書式について説明する。
【0041】図14は、前述したFortran 言語プログラム
である。このプログラム90には二重のDOループが2つ含
まれている。1つ目は、第7行目から第11行目で表現さ
れているDOループであり、これを第1のDOループ91と呼
ぶ。2つ目は、第13行目から第16行目で表現されている
DOループであり、これを第2のDOループ92と呼び、両者
を区別する。ここで、図14のプログラム90に対して、プ
ログラムのどの部分が並列化可能であるかを考えてみ
る。第1のDOループ91は、外側ループのインデックス変
数Iに関しても、内側ループのインデックス変数Jに関
してもデータ依存関係がなく、並列化可能であることが
予測できる。第2のDOループ92は、外側ループのインデ
ックス変数Iに関して、A(I,J)とA(I-1,J)で依存関係が
あるため、並列化はできない。そこで、並列性を高める
ための手法として、二重ループの外側と内側を入れ換
え、並列化を試みる。ループの入れ換えを行った第2の
DOループ94を図16に示した。しかし、この場合には、新
しく外側ループになったインデックス変数Jに関して、
A(I,J)とA(I,J-1)で依存関係があるため、並列化はでき
ない。その結果、第2のDOループは、並列化不可能であ
ることが予測できる。
【0042】そこで、本発明のコンパイラに入力する原
始プログラムでは、第2のDOループのように、予めプロ
グラマが並列化不可能であると予測できる部分を、逐次
実行指定文を用いて表現する。
【0043】この場合、第1の逐次実行指定文は8000番
台のラベルを用いて表し、第2の逐次実行指定文は9000
番台のラベルを用いて表すこと、1つの逐次実行ブロッ
クを表すために用いる第1の逐次実行指定文(8000+n)と
第2の逐次実行指定文(9000+n)に用いるラベルの番号n
は一致していること、更に、逐次実行ブロックが複数あ
る場合には、各逐次実行ブロック毎にnの値は固有であ
ることは、プログラミング言語の文法で定義されている
とする。
【0044】以上のプログラミング言語の文法に基づ
き、図4のFortran プログラムに対して、第2のDOルー
プに逐次実行指定文を拡張して表現したプログラムの一
例を、図5に示す。
【0045】図5のプログラム50において、第13行目に
置かれたラベル8003が第1の逐次実行指定文を表し、第
16行目に置かれたラベル9003が第2の逐次実行指定文を
表している。これに伴い、外側DOループの分岐先ラベル
名、内側DOループの分岐先ラベルも、10から9003に変更
する。
【0046】図7は、前述したC言語プログラム52であ
る。このプログラムには、大きく分けて、第13行目から
第15行目、第17行目から第22行目、第26行目から第29行
目に3つのfor 文が含まれている。これらを区別するた
め、順に第1のfor 文53、第2のfor 文54、第3のfor
文55と呼ぶ。
【0047】第2のfor 文54は、外側ループのインデッ
クス変数iに関しても、内側ループのインデックス変数
jに関してもデータ依存関係はないため、並列化可能で
あるため、従来の並列化コンパイラでコンパイルすれ
ば、第2のfor 文は、並列化される。このようなループ
に対して、並列化が行われないようにしたい場合には、
逐次実行指定文を用いて、並列化コンパイラに指示を与
える。
【0048】C言語の場合もFortran 言語の場合と同様
に、第1の逐次実行指定文には、「SERIAL1:」,「SERI
AL2:」,…,「SERIALn:」を用い、第2の逐次実行指定
文には「END _SERIAL1:」,「END _SERIAL2:」,…,
「END _SERIALn:」というラベルを用いて表すこと、1
つの逐次実行ブロックを表すために用いる第1の逐次実
行指定文「SERIALn 」と、第2の逐次実行指定文「END
_SERIALn 」に用いるラベルの番号nは一致しているこ
と、更に、逐次実行ブロックが複数ある場合には、各逐
次実行ブロック毎にnの値は固有であることはプログラ
ミング言語の文法で定義されているとする。
【0049】以上のプログラミング言語の文法に基づ
き、図7のC言語プログラムに対して、第2のfor 文に
逐次実行指定文を拡張して表現したプログラムの一例を
図8に示す。図8のプログラム56において、第17行目に
記述されたラベル「SERIAL1:」が、第1の逐次実行指定
文を表し、第24行目に記述されたラベル「END _SERIAL
1:」が、第2の逐次実行指定文を表している。あるい
は、図9のプログラム57のように表すこともできる。
【0050】第3図は、第1図の並列化コンパイラの並
列性抽出部14の処理の詳細な流れを示す流れ図である。
図5のプログラム50が、本発明の並列化コンパイラによ
って並列化翻訳処理される様子を第3図に従って説明す
る。本発明の並列化コンパイラでは、原始プログラム中
のDOループのみを並列化の対象として、並列化を試みる
ものとする。プログラムの第1行目、第2行目の
【0051】
【数4】 は、定数M,Nの定義文であるので、並列性抽出部14で
並列化される対象ではない。また、第4行目、第5行目
は、変数の定義部であるので、これらも並列化の対象で
はない。
【0052】並列性抽出部14では、上記以降の行を対象
に処理を行う。まず第3図の流れ図のステート 101にお
いて、原始プログラムの第7行目を読み込む。ステート
103で第1の逐次実行指定文は含まないと判断され、ス
テート107へ移行する。ここで第7行目の
【0053】
【数5】 は、DO文の始まりを表しているため、並列化可能ブロッ
クの抽出が行われる。ここでは、第11行目までが1つの
並列化対象ブロックとして抽出され、並列化処理が行わ
れる。ステート 109において該並列化対象ブロックが並
列化可能であると判断され、ステート 110で並列化する
場合のコード生成手続が行われる。
【0054】次に第13行目を読み込む。ステート 103に
おいて、第13行目は第1の逐次実行指定文として8000番
台のラベル8003が検出され、ステート 104へ移行する。
ステート 104で、次の行を読み込み、ステート 105で第
2の逐次実行指定文を含むか、どうかが判定される。第
14行目の
【0055】
【数6】 に、9000番台のラベルが記述されているが、これはDO文
に含まれるラベルであるため、第2の逐次実行指定文と
して定義されているラベルとは異なるものである。第16
行目を読み込むと、ステート 105で、第16行目に第2の
逐次実行指定文である9000番台のラベルが検出される。
そこで、ステート 106において、第1の逐次実行指定文
を含む第13行目から、第2の逐次実行文を含む第16行目
までに対して、並列化しない場合のコード生成手続を行
う。以下、第19行目まで処理を行い、並列性抽出部14の
処理を終了する。
【0056】以上の処理を行うと、図5のプログラム50
は、並列プログラミング言語を用いて表現すると、図6
のようなプログラム51と同等のプログラムに変換され、
この並列プログラムに対する命令コードが生成され、並
列計算機上で実行可能な並列プログラムを得ることがで
きる。図6で用いている
【0057】
【数7】 という表現は、PE1 からPEM の各PE上で、
【0058】
【数8】 を実行するという意味を表しているものとする。今、変
数Mは4であるので、実際には、4台のPE,PE1からPE4
で、それぞれ前述した図15のプログラム93を実行するこ
とになる。
【0059】第4図は、第2図の並列化コンパイラのプ
リプロセッサ24の処理の詳細な流れを示す流れ図であ
る。図8のプログラム56が、本発明の並列化コンパイラ
のプリプロセッサによって0換される様子を、第4図に
従って説明し、それ以降の並列化翻訳処理の様子を、第
2図に従って説明する。
【0060】まず、第4図のステート 121において、原
始プログラムの第1行目を読み込む。ステート 123で、
第1行目に第1の逐次実行指定文を含まれているか、い
ないかの検出が行われる。第1行目には、第1の逐次実
行指定文「SERIALn:」(n=1,2,…)は含まれていないの
で、ステート 121に戻る。以下、第16行目まで同様の処
理が行われる。次にステート 121で第17行目を読み込
む。ステート 123で、第17行目に第1の逐次実行指定文
が含まれているか、いないかの検出が行われる。ここ
で、「SERIAL1:」というラベルは、予めプログラミング
言語の文法で定義されている第1の逐次実行指定文であ
るのでステート 124へ移行し、次の行(第18行目)を読
み込む。ステート 125において、第18行目に第2の逐次
実行指定文が含まれているか、いないかの検出が行われ
るが、第18行目には含まれないので、ステート 124へ戻
る。以下、第23行目まで、同様の処理が行われる。次
に、第24行目を読み込む。ステート 125で、第24行目か
ら第2の逐次実行指定文が検出されるので、ステート 1
26,127,128へ移行する。ステート 126では、第1の逐次
実行指定文と第2の逐次実行指定文によって表現された
逐次実行ブロックとして抽出されたブロックに対するコ
ードを生成する逐次実行コード生成手続きを行う。ステ
ート 127では、ステート 126で生成された逐次実行コー
ドを、サブルーチンとして登録する。ここでは、該逐次
ブロックを指定している第1の逐次実行指定文のラベル
名「SERIAL1:」に対応し、「SUB _SERIAL1 」というサ
ブルーチン名を付けて登録する。ステート 128では、原
始プログラムの逐次実行ブロックとして表現された部分
を、ステート 127で登録されたサブルーチン「SUB _SE
RIAL1」を呼び出す命令に置き換える原始プログラム変
換手続きを行う。
【0061】以上の処理を、原始プログラムの全ての行
に対して行うと、図8のプログラム56は、図11のプログ
ラム59のように変換される。並列化翻訳処理は、この変
換後の原始プログラムに対して行われる。
【0062】並列化翻訳処理部26は、本発明の並列化コ
ンパイラのプリプロセッサによって変換された変換後原
始プログラムに対し、従来と同様の並列化翻訳処理を行
う。この際、逐次実行ブロックとして指定された第2の
for 文は、予めプリプロセッサによって並列化されない
コードが生成されサブルーチン「SUB _SERIAL1 」とし
て登録されているため、従来の並列化変換処理によって
も並列化されることはない。並列化翻訳処理部26によ
り、生成された目的プログラムは、リンク部29におい
て、プリプロセッサ24で登録された逐次実行サブルーチ
ンとリンク処理を行うことで、実行形式ロードモジュー
ル30を得ることができる。
【0063】
【発明の効果】従来の並列化コンパイラでは、結果とし
て並列化不可能な箇所に対しても並列化を試み、そのた
めにコンパイル時間にロスがあったが、本発明の第1の
実施例に挙げる並列化コンパイラによれば、原始プログ
ラム中で、プログラマが並列化不可能と判断する箇所に
対し、予め逐次実行ブロックを指定し、並列化コンパイ
ラがこれを解釈し、その部分に関しては並列化を行わな
いため、コンパイル時間を短縮することができる。
【0064】また、本発明の第2の実施例に挙げる並列
化コンパイラのプリプロセッサにより、並列化コンパイ
ラの処理系を変更しない場合でも、並列化によりかえっ
て実行時間を長くするような命令に対し、プログラマが
逐次実行を指定し、前処理部で該ブロックに対する逐次
な命令コードを生成し、サブルーチンとして登録し、原
始プログラム中の該ブロックをサブルーチンを呼び出す
命令に置き換えることで、並列化コンパイラがプログラ
ム全体を並列化の対象としても、逐次実行指定部は、並
列化されず、実行時間が短縮されるよう、プログラマ・
レベルで最適化を行うことができる。
【0065】また、本発明の並列化コンパイラ、並列化
コンパイラのプリプロセッサによって、プログラマが原
始プログラム中の所望のブロックに対し、コンパイラが
並列化を行わないような指示を与えることができ、それ
により、例えば、原始プログラム中の所望のブロックに
対し、並列化を行った場合と、並列化を行わない場合の
実行速度の比較を行うことが可能になる。
【0066】また、本発明のコンパイラに、並列化を行
わないブロックを指定するための逐次実行指定文を、ラ
ベルを用いて表現することで、本発明のコンパイラの逐
次実行ブロック解釈部、あるいは、本発明の並列化コン
パイラのプリプロセッサを持たないような従来の並列化
コンパイラ、あるいは、一般の逐次コンパイラによって
も、原始プログラムを翻訳処理することができる。
【図面の簡単な説明】
【図1】 第1の実施例のコンパイラの構成図。
【図2】 第1の実施例のコンパイラの処理の流れ図。
【図3】 第2の実施例のコンパイラの構成図。
【図4】 第2の実施例のコンパイラの処理の流れ図。
【図5】 逐次実行指定文を拡張したFortran 言語プロ
グラムを示す図。
【図6】 本発明のコンパイラによって変換されたプロ
グラムを示す図。
【図7】 C言語プログラムを示す図。
【図8】 逐次実行指定文を拡張したC言語プログラム
を示す図。
【図9】 逐次実行指定文を拡張したC言語プログラム
を示す図。
【図10】 本発明のコンパイラのプリプロセッサによっ
て変換されたプログラムを示す図。
【図11】 図8のプログラムを変換したプログラムを示
す図。
【図12】 従来の並列化コンパイラの構成図。
【図13】 並列計算機の構成図。
【図14】 Fortran プログラムを示す図。
【図15】 PE1 からPE4 で実行されるプログラムを示す
図。
【図16】 ループの入れ換えを行った第2のDOループの
プログラムを示す図。
【図17】 従来のコンパイラによって変換されたプログ
ラムを示す図。
【符号の説明】
10 原始プログラム 11 字句解析部 12
構文解析部 13 逐次実行ブロック解釈部 14
並列性抽出部 15 コード生成部 16 目的プログラム

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 高級プログラムミング言語で記述された
    原始プログラムを翻訳して、複数の並列実行可能なプロ
    セッサからなる並列計算機システム上で並列に実行され
    る目的プログラムを生成する並列化コンパイラにおい
    て、字句解析部と、構文解析部と、逐次実行ブロック解
    釈部を持つ並列性抽出部と、コード生成部とを備え、並
    列性抽出部において並列化処理を行うに際し、原始プロ
    グラム中の所望のブロックに対し、並列化コンパイラが
    並列化を行わないような指示を与える文として、プログ
    ラミング言語の文法で定義されたラベルを用いて表現さ
    れた逐次実行指定文を、プログラミング言語の文法に追
    加して拡張し、原始プログラム中の所望のブロックに対
    し、並列化コンパイラが並列化を行わないよう、該ブロ
    ックを所定の第1の逐次実行指定文と、所定の第2の逐
    次実行指定文を用いて表現し、逐次実行ブロック解釈部
    において、該原始プログラム中の逐次実行指定文を解釈
    し、所定の第1の逐次実行指定文を含む行から、所定の
    第2の逐次実行指定文を含む行までを、並列化の対象か
    ら外し、該原始プログラムに対し、並列化翻訳処理を行
    うことを特徴とする並列化コンパイラ。
  2. 【請求項2】 高級プログラミング言語で記述された原
    始プログラムを、複数の並列実行可能なプロセッサから
    なる並列計算機システム上で並列に実行される目的プロ
    グラムに翻訳するに際し、逐次実行ブロック抽出部と、
    逐次コード生成部と、原始プログラム変換部とで構成さ
    れるプリプロセッサを設け、原始プログラム中の所望の
    ブロックに対し、並列化コンパイラが並列化を行わない
    ような指示を与える文として、プログラミング言語の文
    法で定義されたラベルを用いて表現された逐次実行指定
    文を、プログラミング言語の文法に追加して拡張し、原
    始プログラム中の所望のブロックに対し、並列化コンパ
    イラが並列化を行わないよう、該ブロックを所定の第1
    の逐次実行指定文と、所定の第2の逐次実行指定文を用
    いて表現し、該プリプロセッサにおいて、逐次実行ブロ
    ック抽出部は、該原始プログラム中の所定の逐次実行指
    定文を解釈して、所定の第1の逐次実行指定文を含む行
    から、所定の第2の逐次実行文を含む行までのプログラ
    ムを、逐次実行ブロックとして抽出し、逐次コード生成
    部は、該逐次実行ブロックを翻訳して、逐次実行サブル
    ーチンを生成し、原始プログラム変換部は、原始プログ
    ラム中の該逐次実行ブロックを、該逐次実行サブルーチ
    ンを呼び出すように記述した所定のプログラムに置き換
    え、並列化翻訳処理部は、原始プログラムの全ての逐次
    実行ブロックに対して、該置き換えを行った変換後原始
    プログラムを翻訳して該目的プログラムを生成するよう
    に構成されていることを特徴とする並列化コンパイラ。
JP19570993A 1993-08-06 1993-08-06 並列化コンパイラ Pending JPH0749843A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP19570993A JPH0749843A (ja) 1993-08-06 1993-08-06 並列化コンパイラ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP19570993A JPH0749843A (ja) 1993-08-06 1993-08-06 並列化コンパイラ

Publications (1)

Publication Number Publication Date
JPH0749843A true JPH0749843A (ja) 1995-02-21

Family

ID=16345675

Family Applications (1)

Application Number Title Priority Date Filing Date
JP19570993A Pending JPH0749843A (ja) 1993-08-06 1993-08-06 並列化コンパイラ

Country Status (1)

Country Link
JP (1) JPH0749843A (ja)

Similar Documents

Publication Publication Date Title
JP3190773B2 (ja) 言語処理プログラムのコンパイル処理方法
JP2811990B2 (ja) プログラム処理装置及びプログラム処理方法
EP0905617B1 (en) Method for generating a java bytecode data flow graph
US5598561A (en) Optimizing compiler which generates multiple instruction streams to be executed in parallel
WO1990001738A1 (en) Machine process for translating programs in binary machine language into another binary machine language
JPH05257709A (ja) 並列化判別方法およびそれを用いた並列化支援方法
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US20160246622A1 (en) Method and system for implementing invocation stubs for the application programming interfaces embedding with function overload resolution for dynamic computer programming languages
JP3651774B2 (ja) コンパイラ及びそのレジスタ割付方法
US20230367569A1 (en) Method of generating a representation of a program logic, decompilation apparatus, recompilation system and computer program products
JPH11167492A (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
JPH0749843A (ja) 並列化コンパイラ
JP2956591B2 (ja) ループ外への条件付き飛び出しがあるループの並列化方法及び装置
Harmer et al. Transformations to Restructure and Re–engineer COBOL Programs
JPH11212807A (ja) プログラム実行方法
JPS6015772A (ja) ル−プ内配列処理ベクトル化処理方式
JP3551352B2 (ja) ループ分割方法
JP2004246924A (ja) アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法
JP2001005655A (ja) アプリケーションジェネレータ開発支援装置及びアプリケーションジェネレータ開発支援方法
Gasper et al. Automatic parallelization of sequential C code
JPH05120025A (ja) ソースプログラムのインライン展開方法
JP2638278B2 (ja) コンパイル処理方式
JPH0561687A (ja) コンパイラの処理方式
JPH04343140A (ja) コンパイラの最適化処理方法
JPH0795275B2 (ja) コンパイル処理装置