JPH04293150A - コンパイル方法 - Google Patents

コンパイル方法

Info

Publication number
JPH04293150A
JPH04293150A JP8054991A JP8054991A JPH04293150A JP H04293150 A JPH04293150 A JP H04293150A JP 8054991 A JP8054991 A JP 8054991A JP 8054991 A JP8054991 A JP 8054991A JP H04293150 A JPH04293150 A JP H04293150A
Authority
JP
Japan
Prior art keywords
processing
vector
loop
parallel
source 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
JP8054991A
Other languages
English (en)
Inventor
Kyoko Iwazawa
岩澤 京子
Giichi Tanaka
義一 田中
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 JP8054991A priority Critical patent/JPH04293150A/ja
Publication of JPH04293150A publication Critical patent/JPH04293150A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、並列計算機システムに
係わり、特に逐次プロセッサ用のソースプログラムに対
してベクトル処理と並列処理を最適に選択することによ
り、実行効率の高いオブジェクトコードを生成するコン
パイル方法に関する。
【0002】
【従来の技術】従来、1プロセッサのベクトル計算機に
対しては、「プログラム実行方法(特開昭61−285
544)」に記したように、スカラ処理とベクトル処理
の両方のオブジェクトを生成し、ループ長が確定する実
行時にいずれを実行するかを判定をする手法も取られて
きた。しかし、ベクトル処理かスカラ処理の二者択一の
時は2種類のオブジェクトだからよいが、これにループ
構造変換や並列処理化が加わると場合の数が多くなりオ
ブジェクトサイズも非現実的になってしまう。計算速度
の向上のために、プロセッサを複数台並べて同時に動か
す、並列計算機システムが考案されてきた。既に製品化
されているスーパーコンピュータと呼ばれるメモリ共有
型のものでもCRAY社のX−MPやY−MP,ETA
社のETAシリーズ、Alliant社のFXシリーズ
、Convec社のCシリーズなどがある。これらは、
並列に動作するプロセッサがベクトル演算器やベクトル
レジスタを有し、各々ベクトル処理が可能である。 このような計算機を以下ベクトル並列計算機と呼ぶ。
【0003】ベクトル計算機を並列に動かすスーパーコ
ンピュータのコンパイラについての論文には、Davi
d  A.Padua,Michael  J.Wol
fe著 ADVANCED  COMPILER  OPTIM
IZATIONS  FORSUPERCOMPUTE
R,Communications  of  the
ACMDcember  1986  Vol.29 
 No.12  p1184p〜p1201 がある。ここでは、配列データをまとめて演算するベク
トル処理や、独立した処理を並列に別々のプロセッサで
実行する並列処理の各々についてのデータ依存関係から
の適用条件やプログラム変換例が記述されているが、ベ
クトル処理と並列処理の優先順位やその組み合わについ
ては、何も論じられていない。
【0004】Alan  H.Karp,Robert
  G.BabbII著 A  Comparison  of  12  Pa
rallel  FortranDialectsIE
EE  Software  0740−7459/8
8/0900/0052/S01.00Septemb
er  1988  p52〜p66には、様々の並列
計算機に対して、独立した処理を並列に別々のプロセッ
サで実行させるためにFORTRAN言語で記述したソ
ースプログラムについて述べられている。ここには、A
lliant  FX/8や  CRAY  X−MP
のようにベクトルプロセッサを並列に動かす計算機の例
もあるが、並列処理を行なうときに、配列データをまと
めて計算するベクトル処理をどのように行なうかついて
は述べられていない。したがって、Alliant  
FX/8やCRAY  X−MPにおいては、どの繰り
返し処理をベクトル処理で実行し、どの処理を並列処理
で実行するかはユーザが判断し、ソースプログラムに指
示文を挿入する必要がある。また、特開平1−1086
38公報には、逐次実行型の高級言語で記述されたソー
スプログラムを並列計算機システムで並列に実行させる
ことについて述べられており、逐次実行型の高級言語で
記述されたソースプログラムについて並列化の可能性を
検査し、可能な並列化の手段のそれぞれについて処理時
間を推定し、最も処理時間の少ない並列化の手段を採用
してオブジェクトプログラムを生成する並列化コンパイ
ル方式について記載されている。
【0005】
【発明が解決しようとする課題】Alliant  F
X/8やCRAY  X−MPにおける上記従来技術で
は、並列に実行する処理をユーザが指示しなければなら
ない。オブジェクトを生成するコンパイル処理において
、コンパイラは自動的にベクトル化変換処理を行い、ユ
ーザにより並列化変換処理が指示された場合にコンパイ
ラは並列化変換処理を行うというように、ベクトル化変
換処理と並列化変換処理が別々に行なわれていたため、
常に一方の変換処理が優先され、他方は付随的な変換処
理になってしまう。その結果、生成したオブジェクトは
ベクトル化変換や並列化変換の処理は各々実施されてい
るが、その実行速度はベクトル並列計算機システムとし
ての最大性能とはいえない。また、上記公報に記載され
た従来技術では、オブジェクトを生成するコンパイル処
理において、コンパイラは自動的に並列化変換処理を行
っているが、上記公報には、ベクトル化変換可否、並列
化変換可否を判定し、ベクトル処理、並列処理等の処理
の可能な組合せの内の最も処理効率のよい組合せについ
てオブジェクトを生成するコンパイル方法については記
載されていない。
【0006】例えば、図2a〜図2cのソースプログラ
ムに対して、上記AlliantFX/8やCRAY 
 X−MPにおける従来技術では以下の問題点があった
。 図2aのソースプログラムの場合、従来技術では、ルー
プ長が長いにもかかわらずユーザ指示文があれば並列化
変換処理を施し、なければ自動的にベクトル化変換処理
を施すだけで、図5aにFORTRANイメージで示す
ようなベクトル処理を並列に行なう図5aに示すような
中間コード(図5aは中間コードで記述したものではな
く、中間コードで記述したものと同じ内容をFORTR
ANイメージで記述したものである。図5b、図5cに
ついても同様である。)を生成することができず、した
がって、そのオブジェクトを生成することができない。 このため、計算機システムの最大性能を引き出すことが
できない。図2bのソースプログラムの場合には、内側
ループ(23−23)にユーザ指示文があれば並列化変
換処理を施し、なければ自動的にベクトル化変換処理を
施すだけで、外側ループがあっても、図5bのように該
ループ(22−22)を分割(22’−22’,22”
−22”)して、一部ループを交換(22”−22”と
23’−23’)し、ベクトル化変換と並列化変換の両
方の処理を施すことができず、計算機システムの最大性
能を引き出すことができない。図2cのソースプログラ
ムの場合には、ユーザの指示により内側ループ(27−
27)か外側ループ(26−26)のいずれかを並列化
からベクトル化へ変換処理するため、外側一重部の文2
8に対して、図5cのように外側ループを分割し、並列
処理より速くなるベクトル処理にするための変換処理を
施すことができない。従って、計算機システムの最大性
能を引き出すことができない。本発明の目的は、上記欠
点をなくすため、コンパイラがベクトル化変換処理の可
否、並列化変換処理の可否、ループ分割や交換などのル
ープ構造変換の可否を判定し、ループ分割やループ交換
と各ループに対する並列処理やベクトル処理の種々の組
み合わせについて評価し、生成するオブジェクトの実行
速度を考慮して、ベクトル並列計算機システムの最大性
能を引き出すオブジェクトコードを生成するコンパイル
方法を提供することにある。
【0007】
【課題を解決するための手段】上記目的は、従来の1C
PUの計算機のためにコーディングされたソースプログ
ラムを入力として、ベクトル並列計算機用のオブジェク
トコードを生成するため、入力されたソースプログラム
の制御フローを解析して、繰り返しループのネスト(ル
ープの中にループがあること)や並び方の情報を得て、
データフローを解析して変数や配列についてデータ依存
関係の情報を得て、(1)各種ループ構造変換を行なう
ことにより新たに並列化変換やベクトル化変換ができる
ようになる可能性があるため、各種ループ構造変換の可
否を判定し、(2)変換可能なループ構造に対して各々
並列化変換可否とベクトル化変換可否を判定し、(3)
変換可能なループ構造に対して、各ループにベクトル処
理や並列処理を施した場合のオブジェクトの実行速度を
推定し、(4)上記推定結果からオブジェクトが最も速
くなるループ構造と処理実行方法を選択する、ように構
成したコンパイル方法により実現することができる。
【0008】
【作用】上記コンパイル方法を適用したコンパイラによ
り、FORTRANソースプログラムをコンパイルする
ことにより、コンパイラがベクトル並列計算機システム
の性能を充分引き出すような効率のよいオブジェクトコ
ードを生成することができる。与えられたソースプログ
ラムの、変換可能なループ構造の全てに対して、各ルー
プをスカラ処理、ベクトル処理、並列処理の実行方法で
実行させたときの実行時間を見積もり、最も実行時間の
短いものを選ぶことにより、ベクトルプロセッサを並列
に走らせる計算機システムの最大性能を引き出すオブジ
ェクトを生成することができる。
【0009】
【実施例】以下、本発明を、本発明を適用したFORT
RANコンパイラにおける一実施例の図面を参照しつつ
説明する。図1に、本発明を適用するコンパイラの全体
の構造を示す。図1の構文解析5や、ソースプログラム
2を入力し、これらの字句や構文を解析して中間コード
4生成する。最適化処理6が、この中間コード4を入力
として、ベクトル化・並列化の可否とループ構造変換可
否を解析し、各々の推定実行速度から採用する変換を選
択し、採用を決定した変換処理に合わせて、中間コード
4をベクトルオブジェクトや並列オブジェクトを生成で
きる形に変換する。そして、メモリ割り付け・レジスタ
割り当て7、コード生成8を順次行なう。本発明は、最
適化処理6に係わり、オブジェクトコード3の実行効率
をあげるものである。
【0010】ベクトル並列最適選択のための最適化処理
6の処理概要を図2a〜図2cのソースプログラムを例
に説明する。これは図1のFORTRANソースプログ
ラム2の一例である。まず、最適化処理6の制御フロー
解析11がソースプログラムのループを検出し、その構
成を解析して図3のような表を作る。これは、図1のル
ープテーブル9である。制御フロー解析11が作った段
階では、ループ長のフィールド31を除いて、レコード
38〜46の各フィールドは空白である。図2a〜図2
cの例では、最外側ループがDO20,DO22,DO
26の3つである。DO22はDO23を、DO25は
DO27を各々内側ループとして持ち、これらは、ルー
プとして一重部と多重部(この場合、二重部)があるこ
とを示している。
【0011】次に、データフロー解析12が、ソースプ
ログラム上にある変数や配列で示されているデータの流
れを解析して、図1のデータ依存関係のテーブル10を
作る。ループテーブル9とデータ依存関係のテーブル1
0を入力として、ループ構造変換判定13が各ネストレ
ベルのループ分割の可否、ループ交換の可否、ループ一
重化の可否を判定して、図3のループテーブルのフィー
ルド34の35〜37に結果を格納する。また、ベクト
ル化変換可否判定14が各ループごとにベクトル化変換
可否を判定し、結果を図3のループテーブルのフィール
ド32に格納する。さらに、並列化変換可否判定15が
各ループごとに並列化変換可否を判定し、結果を図3の
ループテーブルのフィールド33に格納する。
【0012】なお、これらの判定法は既に公知のもので
ある。例えば、ベクトル化変換の判定は以下のようにし
て行う。図6を参照して説明する。ソースプログラムの
最内側ループの各実行文が、同じ変数や配列をアクセス
している場合、その定義と使用(定義は値を更新する。 使用は値を読み出して計算に使うだけで、更新しない。 )、定義と定義の順序を、有向線分で表現してデータ依
存グラフを作る。データ依存グラフに対して、グラフ理
論のアルゴリズムに従って、サイクルを検出し、このサ
イクルを構成する文は、ベクトル化することができない
と判定する。サイクル以外の文は、ソースプログラムで
指定する実行順序と、有向線分の方向が等しくなるよう
に、文を並び換えることによりベクトル化することがで
きる。図6を参照すると、ソースプログラム(1)につ
いてデータ依存グラフを作り、サイクルを検出する。こ
の場合、S2、S4がサイクルをなし、文S2、S4は
ベクトル化することができない。次いで、サイクルを構
成する文以外の文を、ソースプログラムで指定する実行
順序と有向線分の方向が等しくなるように並べ換え、ベ
クトル化する。ベクトル化変換されたプログラムをプロ
グラム(1’)として示す。ここで、A(2:N)は、
A(2),A(3)……A(N)の要素のことである。
【0013】図3に示すように、ループテーブル9の全
てのフィールドが埋められた状態で、最適変換組合せの
選択16を施す。最適変換組合せの選択16の処理概要
を図4に示す。ソースプログラムの最外側ループごとに
以下の処理を繰り返す。図3のフィールド34の35〜
37に可能と登録されているループ構造と、オリジナル
のソースのループ構造(ソースプログラムそのまま)と
が可能なループ構造である。これらに各ループ構造につ
いて以下の処理を施す。個々のループ構造変換可否の条
件や適用例については、公知例にあげた、Davis 
 A.PADUA,Michael  J.WOLFE
  著「ADVANCED    COMPILER 
 OPTIMIZATION  FOR  SUPER
  COMPUTER」 に記されている。
【0014】ネスト(ループの中にループがあること)
の有無を判定する。もともとソース上で最外側ループと
最内側ループが等しい場合や、ループ一重化が可能な場
合は、ネストなしの場合の処理を行なう。すなわち、ベ
クトル化変換可否を判定し、可能な場合は、ループ長や
演算量、メモリアクセスの状態、適用ハードウェアの構
成や性能、ベクトル加速率などからベクトル実行速度を
推定する。ベクトル加速率とは、ベクトル実行すると同
一演算をスカラで実行した場合の何倍の速さかを示す尺
度である。一般にはループ長に比例して大きくなりベク
トルレジスタ長のところが最大となって収束する。また
、並列化変換の可否を判定し、可能な場合は、並列処理
の粒度(各並列処理の演算量の大きさの程度のこと)、
同期の回数、同期オーバヘッド、メモリアクセスの状態
、ハードウェアの構成(プロセッサ台数等)や性能、な
どからスカラ並列処理、ベクトル並列処理の両方の並列
処理実行速度を推定する。この結果、スカラ逐次処理、
ベクトル逐次処理、スカラ並列処理、ベクトル並列処理
、の中で、最も実行速度が速いと推定されるものを選択
する。(ここで、スカラ逐次処理を選ぶのは、ベクトル
処理や並列処理のオーバヘッドにより、ベクトル処理や
並列処理がむしろスカラ逐次処理より遅くなる場合であ
る。)
【0015】ループがネストしている場合は、各ネスト
レベルごとに、ネストなしの場合と同様にベクトル化変
換可否・並列化変換可否と各々の実行速度を推定する。 この時は、最内側ループや内側一重部以外については、
ベクトル化変換不能とみなす。この結果、与えられたル
ープ構造においては、どの部分をベクトル化変換し、ど
のレベルのループを並列化変換すると、最も実行速度が
早くなるかを選択する。可能な全てのループ構造におい
て(ループ交換可能な場合はその全ての組み合わせにつ
いて)、最も実行速度が速くなるループの構成を選ぶ。
【0016】実行速度を推定する処理57や59では、
以下に示すベクトル加速率VP、プロセッサ台数n、各
処理に係るオーバーヘッドのようなシステム固有のコン
タクトを用いる。 VP:ベクトル加速率 ベクトル加速率とは、ベクトル処理を実行した場合速さ
が同一演算をスカラで実行した場合の速さの何倍かを示
す尺度である。一般にはループ長に比例して大きくなり
ベクトルレジスタ長のところが最大となって収束する。 n:プロセッサ台数 α:並列処理の同期オーバヘッド 並列処理を行なうためには元々逐次の処理を複数の処理
に分けるFORK処理と、並列に実行している処理の終
了を持つJOIN処理が必要である。また、複数のプロ
セッサがメモリ上の同一アドレスをアクセスする場合は
、処理の終了を通知したり確認することが必要となる。 これらを並列処理の同期オーバヘッドという。 β:メモリアクセスの順序保証オーバヘッドベクトル演
算中に、ベクトルデータをベクトルレジスタからメモリ
にストアし、これをまたベクトルレジスタにロードする
処理が必要になることがある。一般にベクトル処理は高
度にパイプライン化されており、各ベクトル命令の開始
順に各要素も実行される保証はない。そこで前記のよう
な場合は、パイプラインを断ち切って完全にメモリのス
トアの終了を待たねばならない。これをメモリアクセス
の順序保証オーバヘッドという。 γ:ループ分割オーバヘッド ループ交換やベクトル化のために行なうループ分割は、
元々一つのループを複数に分ける。ループが増えると内
部の計算部は増えなくても、ループ回数のカウントや終
了判定の演算も増えるわけで、これらのことをループ分
割オーバヘッドという。
【0017】スーパーコンピュータと呼ばれるようなも
のは、一般にベクトル加速率VPが大きくプロセッサ台
数nが小さい。また、小規模なパソコンを並べるような
ときには、ベクトル加速率VPが小さく、プロセッサ台
数nが大きくなる。これらのコンスタントは、ソースプ
ログラムに依存しないものもあるが、コンパイル時には
確定しないソースプログラムの情報に依存するものもあ
る。このような場合は、プログラムとして平均的データ
をコンパイラが仮定して用いる。例えば、前述のベクト
ル加速率VPはループ長に依存するが、コンパイル時に
ループ長が確定しないことが多い。ループ内でアクセス
される配列の大きさなどから推定できる場合もあるが、
できないときは100位を仮定したりする。
【0018】図2a〜図2cのソースプログラムの例で
は以下のようになる。図2aのソースプログラムではネ
ストがない。ベクトル化変換は可能で、ループ長は十分
長く、メモリアクセスは連続で順序保証のためのWAI
T命令(先立つメモリアクセス命令が完全に終了するの
を待つ)も不要である。この場合、スカラ逐次処理の実
行時間をS(ループの演算量に比例する)、ベクトル加
速率をVPとすると、ベクトル処理の実行時間はS/V
Pとなる。
【0019】次にスカラの並列化変換では、並列処理の
同期オーバヘッドをαとして、プロセッサ台数をnとす
ると、実行時間は(S+α)/nである。ベクトル並列
処理では、実行時間は(S/VP+α)/nである。オ
ーバヘッドαはシステムによるが、明らかに正の数であ
るので、S < S+αとなる。また、ベクトルの加速
率VPがプロセッサ数nより大きいと仮定するとVP 
> nが成り立つ。従って、  S/VP < (S+
α)/n  となり、スカラ並列処理より、ベクトル逐
次処理の方が実行速度が速いことが分かる。次に、ベク
トル並列処理の実行時間(S/VP+α)/nとS/V
Pを比較する。n,S >> αの時、即ち、オーバヘ
ッドαに比べて、Sまたはプロセッサ台数nが十分大き
いと、両実行時間の関係は  (S/VP+α)/n 
< S/VPとなるため、ベクトル並列処理を選択する
。逆に、オーバヘッドαに比べて、Sまたはプロセッサ
台数nが小さいと、両実行時間の関係は(S/VP+α
)/n > S/VP  となり、ベクトル逐次処理を
選択する。ループ長が長いため十分な演算量があるとみ
なして、ベクトル並列処理を選択したときの変換例を図
5aに示す。外側のDO20”で並列処理を行ない、内
側のDO20’でベクトル処理を行なう。
【0020】図2bのソースプログラムは、内側に一重
部24と多重部25を持つ二重ループである。一重部2
4は、ベクトル化変換も並列化変換もできない(式の中
にB(J)とB(J−1)とが存在するため)。一重部
24のスカラ逐次処理の実行時間をS1とする。二重部
25は、内側DO23ループについてはベクトル化変換
も並列化変換も可能である。外側DO22ループについ
ては並列化変換はできないがメモリアクセスの順序保証
のためのWAIT命令(先立つメモリアクセス命令が完
全に終了するのを待つ)を用いればベクトル化変換は可
能である。二重部25のスカラ逐次処理の実行時間をS
2(内側DO23ループと外側DO22ループとが共に
スカラ逐次処理の場合の実行時間)とすると、一重部2
4と二重部25の合計の実行時間は次のようになる。
【0021】・二重部25のDO22を逐次処理、DO
23をベクトル逐次処理としたときの合計の実行時間は
S1+S2/VP ・二重部25のDO22をベクトル逐次処理、DO23
を並列処理としたときの合計の実行時間はS1+((S
2+β)/VP+α)/n+γ・二重部25のDO22
をベクトル逐次処理、DO23を逐次処理としたときの
合計の実行時間はS1+(S2+β)/VP+γ
【0022】「二重部25のDO22をベクトル逐次処
理、DO23を逐次処理」より「二重部25のDO22
を逐次処理、DO23をベクトル逐次処理」の方が実行
速度が速いのは明らかである。(βやγが正の数ゆえ)
各種オーバヘッドα,β,γが無視できるくらいベクト
ル加速率VPやS2が大きければ「二重部25のDO2
2を逐次処理、DO23をベクトル逐次処理」より、「
DO22をベクトル逐次処理、DO23を並列処理」の
方が実行速度が速くなるためこれを選ぶ。逆に、ベクト
ル加速率VPやS2に比べて各種オーバヘッドα,β,
γが無視できない場合は、「二重部25のDO22を逐
次処理、DO23をベクトル逐次処理」を選ぶ。ベクト
ル加速率VPが十分に大きい計算機向きに「二重部25
のDO22をベクトル逐次処理、DO23を並列処理」
を選択したときの変換例を図5bに示す。  DO22
のベクトル化変換のためにループ交換を施して、最内側
のDO22”をベクトル化変換し、外側のDO23’で
並列化変換を行なう。ループ交換の密多重化(例えば、
図5bにおいて、外側ループ23’のDO23’と内側
ループ22”のDO22”との間に実行文がなく、かつ
内側ループ22”の終りと外側ループ23’の間に実行
文がないような多重化のことを云う)のために分割した
一重部24のループ22’は、そのままスカラで処理を
行なう。
【0023】図2cのソースプログラムは、内側に一重
部28と多重部29を持つ二重ループである。一重部2
8も二重部29も、ベクトル化変換も並列化変換も可能
である。一重部28のスカラ逐次処理の実行時間をS1
、二重部部29のスカラ逐次処理の実行時間をS2とす
ると、実行時間は次のようになる。
【0024】・DO26を逐次処理、DO27をベクト
ル逐次処理したとき S1+S2/VP ・DO26を逐次処理、DO27を並列処理したときS
1+(S2+α)/n ・DO26を並列処理、DO27を逐次処理したとき(
S1+S2+α)/n ・DO26を並列処理、DO27をベクトル逐次処理し
たとき (S1+S2/VP+α)/n ・DO26(S1)をベクトル逐次処理、DO26(S
2)を並列処理、DO27をベクトル逐次処理したとき
(S1/VP+S2/VP+α+γ)/n・DO26(
S1)をベクトル処理、DO26(S2)を逐次処理、
DO27ベクトル処理したときS1/VP+S2/VP
+γ
【0025】大小関係が白明のものもあるが、「DO2
6(全体)を並列処理、DO27をベクトル逐次処理」
と「DO26(S1)をベクトル逐次処理、DO26(
S2)を並列処理、DO27をベクトル逐次処理」など
は、S1のベクトル化変換の効果とループ分割のオーバ
ヘッドγにより実行速度の大小が決まるわけで、S1の
とVPによって、十分γを相殺できる場合に、「DO2
6(S1)をベクトル逐次処理、DO26(S2)を並
列処理、DO27をベクトル逐次処理」を選ぶ。  ベ
クトル加算率VPが十分に大きい計算機向きの変換例を
図5cに示す。一重部28をループ分割により、独立な
ループ26’にしてベクトル化変換する。残りの演算2
9は内側ループ27でベクトル化変換し、外側ループ2
6”で並列化する。
【0026】このようにして、与えられたベクトル並列
計算機に合わせて、システム固有のコンスタントを用い
て、各ループごとに可能なループ構造やベクトル処理、
並列処理の実行時間を推定して、最も実行時間の速い処
理を選択したうえでオブジェクトコードを生成する。一
般に、従来のスーパーコンピュータのようにスカラ処理
に比べ非常に高速なベクトル計算機を数台(二から十数
台くらいのオーダ)並べる並列計算機システムでは、ベ
クトル化処理優先の変換を施したオブジェクトコードが
生成され、対照的に、あまり速くない小規模なベクトル
計算機を(ミニコンやパソコン)を多数台(数十から数
百のオーダ)並べる並列計算機システムでは、並列化処
理優先の変換を施したオブジェクトコードが生成される
ことになる。
【0027】
【発明の効果】本発明によれば、ユーザは対象とするベ
クトル計算機が並列に実行するシステムの細かいアーキ
テクチャ上の仕様を意識することなく、ソースプログラ
ムをコーディングすれば、このソースプログラムに基づ
き、ベクトル計算機システムで該ソースプログラムを最
も速く処理できるオブジェクトコードが生成される。す
なわち、本発明はベクトル計算機システムにその最大性
能を発揮させることができる。
【図面の簡単な説明】
【図1】本発明の一実施例のFORTRANコンパイラ
の全体構成を示す図である。
【図2a】実施例を説明するためのソースプログラムの
例を示す図である。
【図2b】実施例を説明するためのソースプログラムの
例を示す図である。
【図2c】実施例を説明するためのソースプログラムの
例を示す図である。
【図3】ループテーブルを示す図である。
【図4】ベクトル並列最適選択処理の流れを示す図であ
る。
【図5a】図2aのソースプログラムに本発明を適用し
た結果の出力を示した図である。
【図5b】図2bのソースプログラムに本発明を適用し
た結果の出力を示した図である。
【図5c】図2cのソースプログラムに本発明を適用し
た結果の出力を示した図である。
【図6】ベクトル化変換可否の判定の仕方を説明する図
である。
【符号の説明】
1  FORTRANコンパイラ、 2  ソースプログラム 3  オブジェクトコード 4  中間コード 5  構文解析 6  最適化処理 7  メモリ割り付け・レジスタ割り当て8  コード
生成 9  ループテーブル 10  データ依存関係のテーブル 11  制御フローの解析 12  データフロー解析 13  ループ構造変換判定 14  ベクトル化変換可否判定 15  並列化変換可否判定 16  最適変換組合せの選択

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】  ベクトル処理機構を有し独立に動くプ
    ロセッサを複数個備える並列計算機のためのオブジェク
    トコードをソースプログラムに基づき生成するコンパイ
    ル方法であって、(1)上記ソースプログラム中のルー
    プに対して、これをベクトル逐次処理したときに必要な
    処理時間とこれをベクトル並列処理したときに必要な処
    理時間を推定し、(2)上記ベクトル逐次処理とベクト
    ル並列処理のうち、上記推定され二つの処理時間の内の
    短いものに対するものを選択し、(3)この選択された
    処理を実行するオブジェクトを、上記ループから生成す
    る、ことを特徴とするコンパイル方法。
  2. 【請求項2】  ベクトル処理機構を有し独立に動くプ
    ロセッサを複数個備える並列計算機のためのオブジェク
    トコードをソースプログラムに基づき生成するコンパイ
    ル方法であって、(1)上記ソースプログラム中のルー
    プに対して、これをスカラ逐次処理、ベクトル逐次処理
    、スカラ並列処理、ベクトル並列処理のそれぞれの処理
    をしたときに必要な処理時間を推定し、(2)上記複数
    の処理のうち、上記推定され処理時間の内の短いものに
    対するものを選択し、(3)この選択された処理を実行
    するオブジェクトを、上記ループから生成する、ことを
    特徴とするコンパイル方法。
  3. 【請求項3】  ベクトル処理機構を有し独立に動くプ
    ロセッサを複数個備える並列計算機のためのオブジェク
    トコードをソースプログラムに基づき生成するコンパイ
    ル方法であって、(1)上記ソースプログラム中のルー
    プに対して、ベクトル化変換可否、並列化変換可否を判
    定し、(2)該判定に基づき、上記ソースプログラム中
    のループに対して、これをベクトル逐次処理したときに
    必要な処理時間とこれをベクトル並列処理したときに必
    要な処理時間を推定し、(3)上記ベクトル逐次処理と
    ベクトル並列処理のうち、上記推定され二つの処理時間
    の内の短いものに対するものを選択し、(4)この選択
    された処理を実行するオブジェクトを、上記ループから
    生成する、ことを特徴とするコンパイル方法。
  4. 【請求項4】  ベクトル処理機構を有し独立に動くプ
    ロセッサを複数個備える並列計算機のためのオブジェク
    トコードをソースプログラムに基づき生成するコンパイ
    ル方法であって、(1)上記ソースプログラム中のルー
    プに対し、ループ構造変換の可否を判定し、(2)可能
    なループ構造に対して、ベクトル化変換可否、並列化変
    換可否を判定し、(3)該判定に基づき、可能なループ
    の組に対して、スカラ逐次処理、ベクトル逐次処理、ス
    カラ並列処理、ベクトル並列処理の可能な組合せについ
    て処理時間を推定して、上記可能な組合せのうち最も処
    理時間の短い組合せを選択し、(4)この選択された処
    理を実行するオブジェクトを、上記ループから生成する
    、ことを特徴とするコンパイル方法。
  5. 【請求項5】  ベクトル処理機構を有し独立に動くプ
    ロセッサを複数個備える並列計算機のためのオブジェク
    トコードをソースプログラムに基づき生成するコンパイ
    ル方法であって、(1)上記ソースプログラム中のルー
    プに対し、ループ分割の可否を判定し、(2)可能なル
    ープに対して、ベクトル化変換可否、並列化変換可否を
    判定し、(3)該判定に基づき、可能なループの組に対
    して、スカラ逐次処理、ベクトル逐次処理、スカラ並列
    処理、ベクトル並列処理の可能な組合せについて処理時
    間を推定して、上記可能な組合せのうち最も処理時間の
    短い組合せを選択し、(4)この選択された処理を実行
    するオブジェクトを、上記ループから生成する、ことを
    特徴とするコンパイル方法。
  6. 【請求項6】  ベクトル処理機構を有し独立に動くプ
    ロセッサを複数個備える並列計算機のためのオブジェク
    トコードをソースプログラムに基づき生成するコンパイ
    ル方法であって、(1)上記ソースプログラム中のルー
    プに対し、ループ交換の可否を判定し、(2)可能なル
    ープに対して、ベクトル化変換可否、並列化変換可否を
    判定し、(3)該判定に基づき、可能なループの組に対
    して、スカラ逐次処理、ベクトル逐次処理、スカラ並列
    処理、ベクトル並列処理の可能な組合せについて処理時
    間を推定して、上記可能な組合せのうち最も処理時間の
    短い組合せを選択し、(4)この選択された処理を実行
    するオブジェクトを、上記ループから生成する、ことを
    特徴とするコンパイル方法。
  7. 【請求項7】  ベクトル処理機構を有し独立に動くプ
    ロセッサを複数個備える並列計算機のためのオブジェク
    トコードをソースプログラムに基づき生成するコンパイ
    ル方法であって、(1)上記ソースプログラム中のルー
    プに対し、ループ一重化の可否を判定し、(2)可能な
    ループに対して、ベクトル化変換可否、並列化変換可否
    を判定し、(3)該判定に基づき、可能なループに対し
    て、これをベクトル逐次処理したときに必要な処理時間
    とこれをベクトル並列処理したときに必要な処理時間を
    推定し、(4)上記ベクトル逐次処理とベクトル並列処
    理のうち、上記推定され二つの処理時間の内の短いもの
    に対するものを選択し、(5)この選択された処理を実
    行するオブジェクトを、上記ループから生成する、こと
    を特徴とするコンパイル方法。
  8. 【請求項8】  ベクトル処理機構を有し独立に動くプ
    ロセッサを複数個備える並列計算機のためのオブジェク
    トコードをソースプログラムに基づき生成するコンパイ
    ル方法であって、(1)上記ソースプログラム中のルー
    プに対し、ループ分割、ループ交換、ループ一重化のル
    ープ構造変換の可否を判定し、(2)可能なループ構造
    に対して、ループ内の全ての実行文についてネストして
    いる各ループごとに、ベクトル化変換可否、並列化変換
    可否を判定し、(3)該判定に基づき、各実行文に対し
    て、スカラ逐次処理、ベクトル逐次処理、スカラ並列処
    理、ベクトル並列処理の可能な組合せについて処理時間
    を推定して、上記可能な組合せのうち最も処理時間の短
    い組合せを選択し、(4)この選択された処理を実行す
    るオブジェクトを、上記ループから生成する、ことを特
    徴とするコンパイル方法。
  9. 【請求項9】  請求項1乃至請求項8のいずれかの請
    求項記載のコンパイル方法において、前記処理時間の推
    定をループの演算量、ベクトル加速率、プロセッサ台数
    、処理に係るオーバヘッドを用いて行うことを特徴とす
    るコンパイル方法。
JP8054991A 1991-03-20 1991-03-20 コンパイル方法 Pending JPH04293150A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8054991A JPH04293150A (ja) 1991-03-20 1991-03-20 コンパイル方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8054991A JPH04293150A (ja) 1991-03-20 1991-03-20 コンパイル方法

Publications (1)

Publication Number Publication Date
JPH04293150A true JPH04293150A (ja) 1992-10-16

Family

ID=13721427

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8054991A Pending JPH04293150A (ja) 1991-03-20 1991-03-20 コンパイル方法

Country Status (1)

Country Link
JP (1) JPH04293150A (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07175761A (ja) * 1993-12-20 1995-07-14 Nec Corp 最適データ分散自動決定方式
US5634059A (en) * 1993-10-13 1997-05-27 Matsushita Electric Industrial Co., Ltd. Device and method for parallelizing compilation optimizing data transmission
WO2010058455A1 (ja) * 2008-11-19 2010-05-27 株式会社日立製作所 情報処理装置
JP4867009B2 (ja) * 2004-12-09 2012-02-01 国立大学法人 奈良先端科学技術大学院大学 量子コンピュータを含むコンピュータシステムのためのプログラム開発支援装置、プログラム開発支援用プログラム、及びシミュレーション装置
JP2014016894A (ja) * 2012-07-10 2014-01-30 Renesas Electronics Corp 並列演算装置、並列演算装置を備えたデータ処理システム、及び、データ処理プログラム
JP2015191346A (ja) * 2014-03-27 2015-11-02 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置
US10824407B2 (en) 2016-01-04 2020-11-03 Nec Corporation Program conversion device, program conversion method, and non-transitory recording medium having program conversion program recorded therein

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5634059A (en) * 1993-10-13 1997-05-27 Matsushita Electric Industrial Co., Ltd. Device and method for parallelizing compilation optimizing data transmission
JPH07175761A (ja) * 1993-12-20 1995-07-14 Nec Corp 最適データ分散自動決定方式
JP4867009B2 (ja) * 2004-12-09 2012-02-01 国立大学法人 奈良先端科学技術大学院大学 量子コンピュータを含むコンピュータシステムのためのプログラム開発支援装置、プログラム開発支援用プログラム、及びシミュレーション装置
WO2010058455A1 (ja) * 2008-11-19 2010-05-27 株式会社日立製作所 情報処理装置
JP2014016894A (ja) * 2012-07-10 2014-01-30 Renesas Electronics Corp 並列演算装置、並列演算装置を備えたデータ処理システム、及び、データ処理プログラム
US9292284B2 (en) 2012-07-10 2016-03-22 Renesas Electronics Corporation Parallel arithmetic device, data processing system with parallel arithmetic device, and data processing program
JP2015191346A (ja) * 2014-03-27 2015-11-02 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置
US10824407B2 (en) 2016-01-04 2020-11-03 Nec Corporation Program conversion device, program conversion method, and non-transitory recording medium having program conversion program recorded therein

Similar Documents

Publication Publication Date Title
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
JP2921190B2 (ja) 並列実行方式
JP4339907B2 (ja) マルチプロセッサ向け最適コード生成方法及びコンパイル装置
JPH0814817B2 (ja) 自動ベクトル化方法
US8336038B2 (en) System and method for parallel execution of a program
JP2002116916A (ja) プログラムの最適化方法及びこれを用いたコンパイラ
JPH01108638A (ja) 並列化コンパイル方式
JPH04307625A (ja) ループ最適化方法及び装置
WO2012086148A1 (ja) コンパイル装置、コンパイルプログラム及びループ並列化方法
EP2924559A2 (en) Program, compiler method, and compiler apparatus
JPH0498323A (ja) プロセス並列実行方法および装置
KR102062208B1 (ko) 멀티스레드 프로그램 코드의 변환 장치 및 방법
JPH04293150A (ja) コンパイル方法
Rajagopalan et al. Specification of software pipelining using petri nets
JP3729644B2 (ja) ループ並列化方法
Govindarajan et al. Co-scheduling hardware and software pipelines
JP2008523523A (ja) プログラム内のループ用のコンパイル方法、コンパイル装置およびコンピュータシステム
JPH04307624A (ja) ループ最適化方法及び装置
JP4084374B2 (ja) ループ並列化方法及びコンパイル装置
JP2765861B2 (ja) 並列化コンパイル方法
Schlansker et al. Techniques for critical path reduction of scalar programs
Gao et al. Design and Implementation of A Multi-Core CPU Compilation Optimization Framework Based on MLIR
JPH02132525A (ja) コンパイル方法
JP3734658B2 (ja) コンパイラ装置およびコンパイラプログラムを記録したコンピュータ読取可能な記録媒体
JPH08115220A (ja) ループ最適化方法