JP2000347879A - 並列プログラム生成方法 - Google Patents

並列プログラム生成方法

Info

Publication number
JP2000347879A
JP2000347879A JP11160973A JP16097399A JP2000347879A JP 2000347879 A JP2000347879 A JP 2000347879A JP 11160973 A JP11160973 A JP 11160973A JP 16097399 A JP16097399 A JP 16097399A JP 2000347879 A JP2000347879 A JP 2000347879A
Authority
JP
Japan
Prior art keywords
division
node
graph
parallel
loop
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
JP11160973A
Other languages
English (en)
Inventor
Hitoshi Murai
均 村井
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.)
REAL WORLD COMPUTING PARTNERSH
NEC Corp
Real World Computing Partnership
Original Assignee
REAL WORLD COMPUTING PARTNERSH
NEC Corp
Real World Computing Partnership
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 REAL WORLD COMPUTING PARTNERSH, NEC Corp, Real World Computing Partnership filed Critical REAL WORLD COMPUTING PARTNERSH
Priority to JP11160973A priority Critical patent/JP2000347879A/ja
Publication of JP2000347879A publication Critical patent/JP2000347879A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

(57)【要約】 【課題】 高速に自動データ分割を行うと共に、一部の
データに対する分割がユーザによって既に指定されてい
る逐次プログラムに対して、それを満たしつつ残りのデ
ータの分割を自動的に決定することによって並列プログ
ラムを生成する並列プログラム生成方法、プログラム、
情報処理装置を提供する。 【解決手段】 自動的にデータ分割を行う際に、並列ル
ープ内の配列のアクセスパターンを元に生成された整列
関係を表すグラフから、そのループにおける分割候補を
生成する。次に、CALL文または予め定められた条件
を満たす多重ループに対応するノードと、ノード間の制
御の流れを表すエッジとからなる有向グラフであるコン
トロールフローグラフ上で優先順位の高いエッジに沿っ
て分割の決定と分割の衝突の解決を行う。更に、プロセ
ッサへの配列要素の配置の状態によって分割の衝突の有
無を判定する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、並列プログラム生
成方法に関し、特に自動的にデータ分割を行う手段を備
えた並列プログラム生成方法に関する。
【0002】
【従来の技術】一般に、分散メモリ型並列計算機では、
あるプロセッサが必要とするデータがローカルメモリに
存在しない場合、データ転送が必要となる。データ転送
は並列プログラムの性能低下の要因となるため、データ
転送を削減することが重要である。したがって、あるル
ープのイタレーションで、ある配列の要素がアクセスさ
れる場合、このイタレーションと配列要素が同一のプロ
セッサに割り当てられていることが求められる。
【0003】図15に示すように、データ分割は、整列
と分散という2段階の写像で考えられる。テンプレート
は仮想的なプロセッサである。一般に通常の配列もテン
プレートとなり得る。整列によって、データの各要素
は、テンプレートの特定の要素に対応づけられる。次
に、分散によって、テンプレートの各要素は、特定の物
理プロセッサに対応づけらる。これらの結果、テンプレ
ートを介して、データの要素と物理プロセッサの対応づ
けが決定される。実行時には、各データ要素は、対応づ
けられた物理プロセッサに割り当てられる。
【0004】整列は、配列の次元とテンプレートの次元
の対応、配列の要素番号とテンプレートの要素番号との
対応を指定することによって決定される。配列の要素番
号とテンプレートの要素番号との対応は、通常、配列の
要素Iに対応するテンプレートの要素番号をIの線形式で
表現することで指定される。データ並列言語 High Perf
ormance Fortran (HPF) の表記法に従うと、配列Aの一
次元目の要素IがテンプレートTの二次元目の要素2*I
に、配列Aの二次元目の要素JがテンプレートTの一次元
目の要素J+1にそれぞれ対応するような整列は、次のよ
うに記述される。
【0005】!HPF$ ALIGN A(I,J) WITH T(J+1,2*I) 分散は、テンプレートを物理プロセッサへ切り分ける方
法を指定することによって決定される。この切り分ける
方法には、テンプレートのある次元を連続した要素から
成るブロックに均一に切断し、それぞれのブロックを一
つの物理プロセッサに配置するブロック分散や、テンプ
レートのある次元を一要素ずつラウンドロビン式に物理
プロセッサに配置するサイクリック分散などがある。
【0006】HPFの記述法に従うと、テンプレートTのブ
ロック分散は、次のように記述される。
【0007】!HPF$ DISTRIBUTE T(BLOCK) また、実行時に分割を変更する処理を再分割と呼び、HP
FではREDISTRIBUTEまたはREALIGN指示文によって記述す
る。
【0008】以下では、HPFの表記法に従って分割を記
述する。
【0009】一方、データ分割に密接に関連する概念に
計算分割がある。計算分割によって、ループのイタレー
ションは各プロセッサに割り当てられ、各プロセッサが
割り当てられたイタレーションを実行することで並列実
行が達成される。計算分割も、データ分割と同様に、整
列と分散の2段階の写像で考えられる。すなわち、計算
分割は、あるループのイタレーションと対応づけるテン
プレートの次元と要素を指定することによって決定され
る。
【0010】従来、この種の並列プログラム生成方法
は、例えばKen Kennedy, Ulrich Kremer 著の "Automat
ic Data Layout for High Performance Fortran", Proc
eedings of the 1995 ACM/IEEE Supercomputing Confer
ence, December 3-8, 1995, San Diego Convention Cen
ter, San Diego, CA, USA, ACM Press and IEEE Comput
er Society Pressに示されるように、ユーザが記述した
逐次プログラムから、分散メモリ型並列計算機で動作す
る並列プログラムを生成するために用いられている。
【0011】この論文に記載された並列プログラム生成
方法は、ユーザが記述した逐次Fortranプログラムに対
して自動的にデータ分割を行い、HPFで記述された等価
な並列プログラムを生成する方法である。図16を参照
して、自動データ分割方法の動作について説明する。
【0012】図16を参照すると、入力された逐次Fort
ranプログラムは、解析の単位であるフェーズに分割さ
れる(ステップ1501)。次に、各フェーズに対して、分割
の候補を求める(ステップ1502)。次に、ステップ1502で
求めた各々の分割の候補に対し、フェーズの実行時間を
予測する(ステップ1503)。最後に、0-1整数計画法によ
って、最適な分割を決定する(ステップ1504)。
【0013】
【発明が解決しようとする課題】このような従来の並列
プログラム生成方法では、次のような問題がある。
【0014】第1の問題点は、処理に多くの時間を要す
るため、コンパイル時に利用することが難しいことであ
る。その理由は、各分割の評価値として性能予測の結果
を用いていることと、最適な分割を決定するのに0-1整
数計画法を用いているためである。
【0015】第2の問題点は、一部のデータに対する分
割がユーザによって既に指定されている逐次プログラム
に対して、残りのデータの分割を自動的に決定すること
によって並列プログラムを生成することができないこと
である。その理由は、分散が指定されているデータが存
在する場合に、それを満たしつつ他のデータの分割の候
補を求めることができないためである。
【0016】これらの問題に鑑み、本発明が解決しよう
とする課題は、高速に自動データ分割を行う並列プログ
ラム生成方法を提供することにある。
【0017】また、本発明の他の課題は、一部のデータ
に対する分割がユーザによって既に指定されている逐次
プログラムに対して、それを満たしつつ残りのデータの
分割を自動的に決定することによって並列プログラムを
生成する並列プログラム生成方法を提供することにあ
る。
【0018】
【課題を解決するための手段】これらの課題を解決する
ため、本発明は以下のような並列プログラム生成方法、
並列プログラム生成コンパイラを記録した記録媒体、お
よび情報処理装置を提供する。
【0019】本発明が提供する並列プログラム生成方法
は、自動的にデータ分割を行う並列プログラム生成方法
において、ノードが配列のアクセスに対応し、エッジが
その両端のノードのアクセスの間に整列関係が定義でき
ることを示す非巡回有向グラフである整列グラフを参照
して、並列ループにおける分割の候補を求める段階と、
CALL文または予め定められた条件を満たす多重ルー
プに対応するノードと、ノード間の制御の流れを表すエ
ッジとからなる有向グラフであるコントロールフローグ
ラフを参照して、分割の衝突を解決するための再分割を
生成する段階とを含むことを特徴とする並列プログラム
生成方法である。
【0020】この並列プログラム生成方法は、第1の分
割の配列要素の配置の状態と、第2の分割の配列要素の
配置の状態とを比較し、互いに異なる場合、第1および
第2の分割の衝突があると判定することにしてもよい。
【0021】言い替えれば、本発明が提供する並列プロ
グラム生成方法は、自動的にデータ分割を行う並列プロ
グラム生成方法において、並列ループ内の配列のアクセ
スパターンを元に生成された整列関係を表すグラフか
ら、そのループにおける分割候補を生成する分割候補生
成段階と、CALL文または予め定められた条件を満た
す多重ループに対応するノードと、ノード間の制御の流
れを表すエッジとからなる有向グラフであるコントロー
ルフローグラフ上で優先順位の高いエッジに沿って分割
の決定と分割の衝突の解決を行う分割選択段階と、プロ
セッサへの配列要素の配置の状態によって分割の衝突の
有無を判定する分割衝突判定段階とを含むことを特徴と
する並列プログラム生成方法である。
【0022】本発明が提供する記録媒体は、自動的にデ
ータ分割を行う並列プログラム生成プログラムを記録し
たコンピュータ読み取り可能な記録媒体である。この並
列プログラム生成プログラムは、ノードが配列のアクセ
スに対応し、エッジがその両端のノードのアクセスの間
に整列関係が定義できることを示す非巡回有向グラフで
ある整列グラフを生成する処理と、整列グラフを参照し
て、並列ループにおける分割の候補を求める処理と、C
ALL文または予め定められた条件を満たす多重ループ
に対応するノードと、ノード間の制御の流れを表すエッ
ジとからなる有向グラフであるコントロールフローグラ
フを生成する処理と、コントロールフローグラフを参照
して分割の衝突を解決するための再分割を生成する処理
とをコンピュータに実行させる。
【0023】この並列プログラム生成プログラムは、第
1の分割の配列要素の配置の状態と、第2の分割の配列
要素の配置の状態とを比較し、互いに異なる場合、第1
および第2の分割の衝突があると判定する処理をコンピ
ュータに実行させることにしてもよい。
【0024】言い替えれば、本発明が提供する記録媒体
は、自動的にデータ分割を行う並列プログラム生成プロ
グラムを記録したコンピュータ読み取り可能な記録媒体
において、並列ループ内の配列のアクセスパターンを元
に生成された整列関係を表すグラフから、そのループに
おける分割候補を生成する分割候補生成処理と、CAL
L文または予め定められた条件を満たす多重ループに対
応するノードと、ノード間の制御の流れを表すエッジと
からなる有向グラフであるコントロールフローグラフ上
で優先順位の高いエッジに沿って分割の決定と分割の衝
突の解決を行う分割選択処理と、プロセッサへの配列要
素の配置の状態によって分割の衝突の有無を判定する分
割衝突判定処理とをコンピュータに実行させることを特
徴とする並列プログラム生成プログラムを記録した記録
媒体である。
【0025】本発明は、また、このような並列プログラ
ム生成プログラムを含むコンパイラを記録したコンピュ
ータ読み取り可能な記録媒体を提供する。更に、これら
の並列プログラム生成プログラムやコンパイラを記録し
た記録媒体を格納した情報処理装置を提供する。
【0026】つまり、本発明の第1の並列プログラム生
成方法、プログラムを記録した記録媒体、情報処理装置
は、整列グラフを使って各ループを実行するのに最適な
分割を求め、次に、コントロールフローグラフを使っ
て、分割の衝突を解決するための再分割を生成する。よ
り具体的には、ユーザによる分割の指定が全くない、ま
たは一部の配列に分割の指定がないプログラムに対し
て、各ループ内での配列のアクセスのされ方を元に配列
の整列関係の可能性を表す整列グラフを生成し、整列グ
ラフを解析して得られた情報からそのループを実行する
のに最適な分割の候補を求める分割候補生成部(図1の
106)と、コントロールフローグラフ, コールフロー
グラフおよび分割候補生成部で求められた分割候補を元
に、プログラムの実行時に起きる、手続き内および手続
き間の再分割処理の回数が最小になるように各ループの
分割を選択し、必要な再分割を挿入する分割選択部(図
1の107)を有する。
【0027】また、本発明の第2の並列プログラム生成
方法、プログラムを記録した記録媒体、情報処理装置
は、プロセッサへの配列要素の配置の状態が異なる場合
に、分割の衝突があると判定する。より具体的には、プ
ロセッサへの配列要素の配置の状態を調べて分割の衝突
の有無を判定する分割衝突判定部1214を有する。
【0028】分割候補生成段階(処理)は、整列関係の
可能性を表す有向エッジと、オフセットのみが異なる複
数のアクセスを表すノードで構成され、一つのノードに
含まれる異なるアクセスの個数をそのノードの重みとす
るような整列グラフをループ毎に生成し、出次数が0
で、かつ接続するノードの重みの合計が最大になるよう
なノードに対応する配列を、ループおよび他の配列のテ
ンプレートとすることによって、そのループを実行する
際に必要なデータ転送を最小にする分割候補を生成す
る。
【0029】分割選択段階(処理)は、コントロールフ
ローグラフ上の一つのエッジに注目し、そのエッジによ
って接続される2つのノードに対して分割候補生成段階
(処理)で生成された分割候補を比較して、必要な再分
割の個数が最小となるように各ループにおける分割を決
定する処理を、より実行回数の多いエッジから順に適用
することによって、0-1整数計画法を用いる従来法に比
べて少ない処理時間で、プログラムの実行時に必要な再
分割の回数を削減する。
【0030】分割衝突判定段階(処理)は、プロセッサ
への配列要素の配置の状態を調べることで、より厳密に
分割の衝突の有無を判定し、実行時に起こる再分割の回
数を削減する。
【0031】
【発明の実施の形態】図1を参照すると、本発明の実施
の形態は、逐次プログラム101を入力され、分散メモ
リ型並列計算機上で動作する並列プログラム110を出
力する。本発明では、逐次プログラムは、再帰呼び出し
のある手続きを含まないとする。
【0032】構文解析部103は、入力された逐次プロ
グラム101の構文解析を行う。
【0033】前処理部104は、依存解析, ループの並
列化判定, コントロールフローグラフの生成およびコー
ルフローグラフの生成を行う。
【0034】自動データ分割部105は、分割候補生成
部106と分割選択部107から成り、分割を指定され
ていないデータの分割を決定する。
【0035】分割候補生成部106は、整列グラフ11
3を生成し、各ループブロックに対する分割候補を求め
る。
【0036】分割選択部107は、分割候補生成部10
6で生成された分割候補から分割を選択する。
【0037】並列化処理部108は、決定されたデータ
分割と計算分割にしたがい、データ転送の生成などの並
列化のための各種処理を行う。並列化処理部108は、
隣接プロセッサから分割境界の要素を受け取ったり、隣
接プロセッサへ分散境界の要素を送ったりするシフト転
送を検出,生成できるものとする。一般に、シフト転送
は、分割を変更するために必要な転送に比べると、要す
る時間は短い。また、手続きの入口に、分割選択部10
7によって各手続きに対して決定された初期分割を実現
するコードを生成する。また、分割選択部107によっ
てコントロールフローグラフ111のエッジに再分割が
設定されている場合、エッジに対応する位置に再分割を
実行するコードを生成する。
【0038】コード生成部109は並列プログラム11
0を出力する。
【0039】次に、コントロールフローグラフ111に
ついて説明する。コントロールフローグラフは手続き毎
に作られる。コントロールフローグラフのノードは、CA
LL文または次の条件を満たす多重ループに対応する。す
なわち、タイトな多重ループであり、かつ多重ループの
いずれかは並列化可能であり、かつ多重ループの外側に
並列化可能なループが存在しないことがその条件であ
る。コントロールフローグラフのエッジは、ノードの間
の制御の流れを表したものである。また、コントロール
フローグラフは、一つのダミーノードを含み、このダミ
ーノードから手続きの入口のノードへエッジを張り、出
口のノードからダミーノードへエッジを張る。ただし、
メインプログラムの出口のノードからダミーノードへ張
られたエッジはあらかじめ処理済みとしておき、分割選
択部において処理対象としない。また、各エッジの優先
順位とは、プログラムの実行時にそのエッジに沿って制
御が流れる回数である(ダミーノードに対して張られた
エッジの優先順位は1とする)。
【0040】次に、整列グラフ113について説明す
る。整列グラフは非巡回有向グラフであり、一つの並列
化可能ループ(以下、並列ループ)中の配列のアクセスの
パターンにもとづいて生成される。
【0041】ここで、アクセスのパターンとは配列の添
字式のことをいう。本発明では、添字式が、並列ループ
の制御変数の線形式である場合のみを考える。そのよう
な添字式において、並列ループの制御変数にかかる係数
をストライド、定数項をオフセットと呼ぶ。例えば、I
を並列ループの制御変数とすると、配列アクセスA(2*I+
1)のストライドは2、オフセットは1となる。
【0042】整列グラフのノードは、配列のアクセスに
対応して生成される。このとき、ある配列に対する同一
のストライドのアクセスは、オフセットが異なっていて
も同一のノードで表現される。何故なら、同じストライ
ド, 異なるオフセットのアクセスに対して必要となるデ
ータ転送は、シフト転送を使うことによって、分割を変
更することなく実現できるためである。また、ノードが
含むアクセスの個数を、そのノードの重みとする。例え
ば、A(I), A(I+1), A(I-1)は、全て同一のノードで表現
され、そのノードの重みは3となる。以下では、配列Xの
ストライドaのアクセスに対する整列グラフのノード
を、X.aと表す。
【0043】整列グラフのエッジは、エッジの両端のノ
ードのアクセスの間に整列関係が定義できることを示
す。すなわち、ノードX.aとノードY.bにおいて、a=b*h
(hは整数)が成り立つとき、ノードY.bからノードX.aへ
のエッジを生成する。ただし、同一の配列に対するノー
ドの間にはエッジは生成しない。また、エッジのソース
側のノードの重みをそのエッジの重みとする。
【0044】ユーザによってテンプレートとして分散を
指定されている配列が存在する場合、その配列に対応す
るノードから出るエッジを生成しない。同様に、ユーザ
によって整列が指定されている配列Xが存在する場合、
その整列を !HPF$ ALIGN X(I) WITH T(a*I+b) とすると、ノードX.kに対して、ノードT.(k*a)が存在し
なければこれを生成し、ノードX.kからT.(k*a)へのエッ
ジを生成する。
【0045】図2を用いて、分割候補生成部の動作につ
いて詳細に説明する。
【0046】ステップ201では、未処理の並列ループ
が残っているか否かを判定する。
【0047】ステップ202では、選択された並列ルー
プに対して整列グラフを生成する。
【0048】ステップ203では、並列ループに対して
テンプレートを選択し、その分散方法を決定する。すな
わち、整列グラフにおいて出次数が0であるノードのう
ち、そのノードへ入るエッジの重みの合計にそのノード
の重みを加えた値(以下、ターゲット重みと呼ぶ)が最大
のものに含まれるオフセットのうち出現回数が最大のも
のをテンプレートに選択する。
【0049】ステップ204では、並列ループ中に現れ
る各データの整列方法を決定する。すなわち、ノードX.
aがテンプレートに選択され、このノードに含まれるオ
フセットのうち、出現回数が最大のものをbとすると
き、ノードY.c (a=c*h, hは整数とする)に対し、次のよ
うな整列に決定する(ノードY.cに含まれるオフセットの
うち、出現回数が最大のものをdとする)。
【0050】!HPF$ ALIGN Y(I) WITH X(h*I-(d-h*b)) このとき、ある配列が複数の異なるストライドでアクセ
スされているために、その配列に対応するノードが複数
個存在すれば、そのうち最大の重みを持つノードに対す
る整列に決定する。
【0051】アクセスされる配列が多次元配列である場
合、並列ループの制御変数が現れる次元以外は、分割候
補として、全プロセッサへの複製を選択する。
【0052】上の整列において、配列XとYの宣言範囲を
それぞれX(Lx:Ux:Sx),Y(Ly:Uy:Sy)としたとき、h*Ly-(d
-h*b) < Lx または Ux < h*Uy-(d-h*b) であれば、Y の
宣言範囲の全ての要素に対しては整列を定義することが
できない。このような場合には、以下のように複製を分
割候補に選択する。
【0053】!HPF$ ALIGN Y(*) WITH X(h*I-(d-h*b)) また、ステップ203で選択されたテンプレートとの間
にエッジが存在しないノードに対しても複製を分割候補
に選択する。
【0054】次に、図3, 図4, 図5を用いて、分割候
補選択部の動作について詳細に説明する。
【0055】図3を参照すると、分割候補選択部は、各
手続きに対して分割選択サブルーチンを呼び出す。
【0056】図4, 図5に、分割選択サブルーチンの動
作を示す。
【0057】ステップ401では、コントロールフロー
グラフの各ノードに、分割候補生成部で生成された分割
候補を関連づける。
【0058】ステップ402では、処理中の手続きの中
に未処理の手続きを呼ぶCALL文があるか否かを判定す
る。
【0059】ステップ403では、CALL文で呼び出され
る未処理の手続きに対して、再帰的に分割選択サブルー
チンを呼び出す。
【0060】ステップ404では、CALL文に対応するノ
ードに、そのCALL文で呼び出される手続きの初期分割を
関連づける。
【0061】ステップ501では、最も高い優先順位を
持つ並列ループを含むノードの分割候補から、そのルー
プを実行するのにもっとも効率の良い分割を選択し、こ
のノードを処理済みとする。ここで、ループの優先順位
とは、ループ中に現れる配列のアクセスの個数とループ
の繰り返し回数の積のことをいう。
【0062】ステップ502では、全ての処理済みのノ
ードに接続された未処理のエッジのうち、優先順位が最
も大きいものを一つ選択する。ここで、選択されたエッ
ジをE, Eに接続する処理済みのノードをN1とする。
【0063】ステップ503では、選択されたエッジE
の、ノードN1の反対側に接続されたノード(N2とする)が
未処理か否かを判定する。
【0064】ステップ504では、未処理のノードN2の
分割候補から、ノードN1の分割と衝突する個数が最小に
なるものを選択し、ノードN2を処理済みとする。また、
ノードN1に現れるがノードN2には現れない配列がある場
合、この配列に対してノードN1において決定された分割
をノードN2に伝搬させる(ノードN2の分割の中に含め
る)。ここで、分割が衝突するとは、分散または整列が
指定されている次元が異なるか、整列のテンプレートま
たはストライドが異なっていることをいう。
【0065】ステップ505では、ノードN1とN2の分割
を比較し、衝突があれば、エッジEに衝突を解消する再
分割を設定し、エッジEを処理済みとする。
【0066】ステップ506では、全てのエッジが処理
済みが否かを判定する。
【0067】ステップ507では、コントロールフロー
グラフ生成時に導入したダミーノードに設定されている
分割を現在の手続きの初期分割に設定し、現在の手続き
を処理済みとする。
【0068】具体的な例を挙げて、第1の実施の形態の
動作を説明する。
【0069】まず、分割候補生成部106の動作の例を
示す。次の二重ループを含むプログラムを考える。
【0070】 DO I=1, 100 DO J=1, 100 A(I+1,2*J) = B(2*I,J-1) + C(2*J+1,2*I) + C(2*J-1, 2*I+1) D(I-2,4*J+1) = C(J,2*I-1) + E(3*I,J+2) + F(4*I+2,J) END DO END DO あらかじめ、前処理部104は、このループに対して依
存解析を行い、IループとJループがともに並列化可能で
あると判定する。
【0071】図2のステップ202において、Iループ
に対して、図6に示す整列グラフが生成される。
【0072】次に、ステップ203において、ループの
テンプレートが決定される。ここでは、出次数が0であ
るノードF.4とE.3のうち、F.4のターゲット重みは7、E.
3のターゲット重みは3であるため、F.4をテンプレート
に選択する。
【0073】ステップ204において、次のような分割
候補が決定される。
【0074】 !HPF$ ALIGN A(I,*) WITH F(4*I+7,*) !HPF$ ALIGN B(I,*) WITH F(2*I+4,*) !HPF$ ALIGN C(*,I) WITH F(2*I+4,*) !HPF$ ALIGN D(I,*) WITH F(4*I+10,*) !HPF$ ALIGN E(*,*) WITH F(*,*) 同様に、Jループに対しても処理が行われる。
【0075】ステップ202において、図7に示す整列
グラフが生成される。 次に、ステップ203におい
て、ループのテンプレートが決定される。ここでは、出
次数が0であるノードはD.4だけなので、これをテンプレ
ートに選択する。
【0076】ステップ204において、分割候補が生成
される。ここで、配列Cに対応するノードとして、C.2と
C.1の2つがあるので、重みの大きいC.2に対する整列を
生成する。生成される分割候補は、次のようになる。
【0077】 !HPF$ ALIGN A(*,J) WITH D(2*J+2) !HPF$ ALIGN B(*,J) WITH D(4*J+5) !HPF$ ALIGN C(J,*) WITH D(2*J+1) !HPF$ ALIGN E(*,J) WITH D(4*J+2) !HPF$ ALIGN F(*,J) WITH D(4*J+4) また、次のプログラムを考える。
【0078】 REAL A(100), B(100), C(100), D(400), E(300), F(200) !HPF$ ALIGN A(I) WITH D(2*I) !HPF$ ALIGN B(I) WITH F(2*I) !HPF$ DISTRIBUTE C(BLOCK) DO I=1, 100 A(2*I) = B(I) + C(2*I) + D(4*I) + E(2*I) END DO END あらかじめ、前処理部104は、このループに対して依
存解析を行い、Iループが並列化可能であると判定す
る。
【0079】ステップ202において、図8に示す整列
グラフを生成する。配列Aはユーザによって整列が指定
されているが、ノードA.2に対しノードD.4が整列グラフ
に含まれているため特別な処理は行わない。配列Bはユ
ーザによって整列が指定されており、そのテンプレート
Fはループ中でアクセスされない。したがって、ノード
B.1に対応して、ノードF.2を生成する。Fはテンプレー
トであるため、ノードF.2から出るエッジは生成しな
い。配列Cはユーザによってテンプレートとして分散を
指定されている。したがって、整列グラフ中でCに対応
するノードから出るエッジは生成しない。
【0080】次に、ステップ203において、ループの
テンプレートが決定される。ここでは、出次数が0であ
るノードC.2, D.4, F.2のうち、C.2のターゲット重みは
4、F.2のターゲット重みは3、D.4のターゲット重みは4
であるため、ノードC.2またはノードD.4をテンプレート
に決定する。ここでは、D.4を選択する。
【0081】ステップ204において、ユーザによって
分割を指定されていない配列B, Eに対して分割候補が生
成される。ここで、配列Eの宣言範囲E(1:300:1)に対し
てDに対する整列を定義することができないので、生成
される分割候補は次のようになる。
【0082】 !HPF$ ALIGN B(I) WITH D(4*I) !HPF$ ALIGN C(*) WITH D(*) 次に、図9に示すプログラムを用いて分割選択部の動作
の例を示す。
【0083】あらかじめ、前処理部104は、図10に
示すコントロールフローグラフを生成する。各ノード
は、図9のプログラムの中で同じ番号をつけたループま
たはCALL文に対応する。ノードD1は、ダミーノードを示
す。エッジに付けられた数字は、そのエッジの優先順位
である。メインプログラムのダミーノードに入るエッジ
1006は処理済みにしておく。
【0084】また、各ノードに対して、分割候補生成部
は次の分割候補を生成する。この例では、テンプレート
の分割次元はブロック分散している。
【0085】・ノード1に対する分割候補 候補(1) Iループ !HPF$ DISTRIBUTE B(BLOCK,*) !HPF$ ALIGN C(I,*) WITH B(I,*) 候補(2) Jループ !HPF$ DISTRIBUTE B(*,BLOCK) !HPF$ ALIGN C(*,I) WITH B(*,I) ・ノード2に対する分割候補 候補(1) Iループ !HPF$ DISTRIBUTE A(BLOCK,*) !HPF$ ALIGN B(*,I) WITH A(I,*) !HPF$ ALIGN C(*,I) WITH A(I,*) 候補(2) Jループ !HPF$ DISTRIBUTE A(*,BLOCK) !HPF$ ALIGN B(I,*) WITH A(*,I*2) !HPF$ ALIGN C(I,*) WITH A(*,I*2) ・ノード4に対する分割候補 候補(1) Iループ !HPF$ DISTRIBUTE A(BLOCK,*) !HPF$ ALIGN B(I,*) WITH A(I*2,*) !HPF$ ALIGN C(I,*) WITH A(I*2,*) 候補(2) Jループ !HPF$ DISTRIBUTE A(*,BLOCK) !HPF$ ALIGN B(*,I) WITH B(*,I) !HPF$ ALIGN C(*,I) WITH B(*,I) ・ノード5に対する分割候補 候補(1) Iループ !HPF$ DISTRIBUTE B(BLOCK,*) !HPF$ ALIGN C(I,*) WITH B(I*2,*) 候補(2) Jループ !HPF$ DISTRIBUTE B(*,BLOCK) !HPF$ ALIGN C(*,I) WITH B(*,I) ・ノード6に対する分割候補 候補(1) Iループ !HPF$ DISTRIBUTE A(BLOCK,*) !HPF$ ALIGN B(I,*) WITH A(I,*) !HPF$ ALIGN C(I,*) WITH A(I,*) 候補(2) Jループ !HPF$ DISTRIBUTE A(*,BLOCK) !HPF$ ALIGN B(*,I) WITH A(*,I*2) !HPF$ ALIGN C(*,I) WITH A(*,I*2) まず、図3のステップ303において、メインプログラ
ムに対して、分割選択サブルーチンが呼び出される。
【0086】メインプログラムは未処理の手続きSUBを
呼び出すCALL文を含むため、ステップ403において、
手続きSUBに対して、分割選択サブルーチンが呼び出さ
れる。
【0087】ステップ501において、手続きSUB内で
最大の優先度を持つノード6に対して分割を選択する。
ここでは、繰り返し回数の多いIループに対する分割候
補(1)が選択されたとする。
【0088】処理済みのノード6に接続されたエッジ100
7,1008の優先度は同じであるため、ステップ502にお
いてはそのいずれかが選択される。ここでは、エッジ10
07が選択されたとする。
【0089】選択されたエッジ1007に接続されたノード
5は未処理であるため、ステップ504では、先にノー
ド6に対して決定した分割候補(1)に対して、必要な再分
割が最小になる分割候補(1)をノード5の分割に決定す
る。
【0090】ステップ505において、エッジ1007の両
端のノード5, 6の分割を比較し、以下の再分割を生成す
る。
【0091】 !HPF$ REALIGN B(I,*) WITH A(I,*) !HPF$ REALIGN C(I,*) WITH A(I,*) エッジ1008とエッジ1009が未処理であるため、ステップ
506からステップ502に処理が移る。
【0092】ステップ502では、処理済みのノード5,
6に接続された未処理のエッジ1008,1009から、エッジ10
08が選択される。
【0093】選択したエッジ1008に接続されたノードD2
は未処理であるため、ステップ503からステップ50
5へ処理が移る。
【0094】ノードD2はダミーノードであり、分割候補
は存在しない。したがって、ステップ505では、ノー
ド6の分割を伝搬させて、ノードD2の分割を以下のよう
に決定する。
【0095】 !HPF$ DISTRIBUTE A(BLOCK,*) !HPF$ ALIGN B(I,*) WITH A(I,*) !HPF$ ALIGN C(I,*) WITH A(I,*) ノード6とノードD2の分割には衝突がないので、ステッ
プ505では何もしない。
【0096】エッジ1009が未処理であるため、ステップ
506からステップ502に処理が移る。
【0097】ステップ502では、処理済みのノード5,
6,D2に接続された未処理のエッジ1009が選択される。
【0098】選択したエッジの両端のノードは処理済み
であるため、ステップ503からステップ505に処理
が移る。
【0099】ステップ505において、選択されたエッ
ジ1009の両端のノード5,D2の分割を比較し、以下の再分
割を生成する。
【0100】 !HPF$ REDISTRIBUTE B(BLOCK,*) !HPF$ REALIGN C(I,*) WITH B(I*2,*) 全てのエッジが処理済みになったので、ステップ506
からステップ507に処理が移る。
【0101】ステップ507では、ダミーノードD2の分
割を、手続きSUBの初期分割に設定し、手続きSUBを処理
済みとして、RETURNする。
【0102】以上の結果、手続きSUBに対して、図12
のような分割が挿入される。
【0103】ここで、メインプログラムに対するステッ
プ402に制御が戻り、未処理の手続きを呼ぶCALL
文はないので、ステップ404において、ノード3の分
割を次のように設定する。
【0104】 !HPF$ DISTRIBUTE A(BLOCK,*) !HPF$ ALIGN B(I,*) WITH A(I,*) !HPF$ ALIGN C(I,*) WITH A(I,*) 続いて、ステップ404からステップ501に制御が移
る。
【0105】ステップ501において、メインプログラ
ム内で最大の優先度を持つノード4に対して、分割を選
択する。ここでは、繰り返し回数の多いIループに対す
る分割候補(1)が選択されたとする。
【0106】ステップ502では、処理済みのノード4
に接続されたエッジ1003,1005の中から、最も優先度の
大きいエッジ1005を選択する。
【0107】選択されたエッジ1005に接続されたノード
3は未処理であるため、ステップ503からステップ5
04に制御が移る。
【0108】ノード3の分割は既に決定しているため、
ステップ504では何もしない。
【0109】ステップ505では、エッジ1005の両端の
ノード3, 4の分割を比較し、以下の再分割を生成する。
【0110】 !HPF$ REALIGN B(I,*) WITH A(I*2,*) !HPF$ REALIGN C(I,*) WITH A(I*2,*) エッジ1001,1002,1003,1004が未処理であるため、ステ
ップ506からステップ502に処理が移る。
【0111】ステップ502では、処理済みのノード3,
4に接続された未処理のエッジ1003,1004から、エッジ10
04が選択される。
【0112】選択したエッジ1004に接続されたノード2
は未処理であるため、ステップ503からステップ50
4へ処理が移る。
【0113】ステップ504では、ノード3の分割に対
して、必要な再分割が最小になる分割候補(1)をノード2
の分割に決定する。
【0114】ステップ505では、エッジ1004の両端の
ノード2, 3の分割を比較し、以下の再分割を生成する。
【0115】 !HPF$ REALIGN B(*,I) WITH A(I,*) !HPF$ REALIGN C(*,I) WITH A(I,*) エッジ1001,1002,1003が未処理であるため、ステップ5
06からステップ502に処理が移る。
【0116】ステップ502では、処理済みのノード2,
3,4に接続された未処理のエッジ1002,1003から、エッジ
1003が選択される。
【0117】選択したエッジ1003の両端のノード4,2は
処理済みであるため、ステップ503からステップ50
5に処理が移る。
【0118】ステップ505において、選択されたエッ
ジ1003の両端のノード4,2の分割を比較し、以下の再分
割を生成する。
【0119】 !HPF$ REALIGN B(*,I) WITH A(I,*) !HPF$ REALIGN C(*,I) WITH A(I,*) エッジ1001,1002が未処理であるため、ステップ506
からステップ502に処理が移る。
【0120】ステップ502では、処理済みのノード2,
3,4に接続された未処理のエッジ1002が選択される。
【0121】選択したエッジ1002に接続されたノード1
は未処理であるため、ステップ503からステップ50
4へ処理が移る。
【0122】ステップ504では、ノード2の分割に対
して、必要な再分割が最小になる分割候補(2)をノード1
の分割に決定する。また、分割候補(2)には配列Aの分割
は含まれないのでノード2から伝搬させる。
【0123】ステップ505において、選択されたエッ
ジ1002の両端のノード1,2の分割を比較し、以下の再分
割を生成する。
【0124】 !HPF$ REALIGN B(*,I) WITH A(I,*) !HPF$ REALIGN C(*,I) WITH A(I,*) エッジ1001が未処理であるため、ステップ506からス
テップ502に処理が移る。
【0125】ステップ502では、処理済みのノード1,
2,3,4に接続された未処理のエッジ1001が選択される。
【0126】選択したエッジ1001に接続されたノードD1
は未処理であるため、ステップ503からステップ50
4へ処理が移る。
【0127】ノードD1はダミーノードであり、分割候補
は存在しない。したがって、ステップ504では、ノー
ド1の分割を伝搬させて、ノードD2の分割は次のように
決定する。
【0128】 !HPF$ DISTRIBUTE A(BLOCK,*) !HPF$ DISTRIBUTE B(BLOCK,*) !HPF$ ALIGN C(I,*) WITH B(*,I) ノード1とノードD1の分割には衝突がないので、ステッ
プ505では何もしない。
【0129】全てのエッジが処理済みになったので、ス
テップ506からステップ507に処理が移る。
【0130】ステップ507では、ダミーノードD1の分
割を、メインプログラムの初期分割に設定し、メインプ
ログラムを処理済みとして、RETURNする。
【0131】以上の結果、メインプログラムに対して、
図11のような分割指示が挿入される。
【0132】ステップ301に戻り、未処理の手続きを呼
ぶCALL文はないので、処理を終了する。
【0133】次に、本発明の第2の実施の形態について
説明する。
【0134】図13を参照すると、本発明の第2の実施
の形態は、分割選択部1207が、分割衝突判定部1214を有
する点で異なる。
【0135】分割衝突判定部1214は、2つの分割が実際
に衝突しているか否かを判定する。第1の実施の形態で
は、分散または整列が指定されている次元が異なるか、
整列のテンプレートまたはストライドが異なっている場
合に分割の衝突が生じているとした。しかし、実際に
は、このような場合にも、プロセッサへの配列要素の配
置の状態は同じであることがある。例えば、次のような
宣言と分割: REAL A(100), B(100), C(100) !HPF$ DISTRIBUTE B(BLCOK) !HPF$ DISTRIBUTE C(BLOCK) を持つ配列A,B,Cに対して、配列Aに対する次の2つの整
列: !HPF$ ALIGN A(I) WITH B(I) !HPF$ ALIGN A(I) WITH C(I) が指定するAの要素の配置は同じである。このように、
分散または整列が指定されている次元が異なるか、整列
のテンプレートまたはストライドが異なっている場合で
も、配列要素の実際の配置の状態が同じであれば、分割
衝突判定部1214は分割の衝突はないと判定する。
【0136】第2の実施の形態の動作を説明する。
【0137】全体の動作は第1の実施の形態と同一のた
め説明を省略する。分割選択部のステップ504および
505において分割の衝突を判定するとき、分割衝突判
定部1214に問い合わせを行い、その結果に従う。
【0138】次に、具体的な実施の例について、以下の
プログラムを用いて説明する。
【0139】 PROGRAM MAIN REAL A(100), B(100), C(100) ... ! ループ(1) DO I=1, 100 A(I) = B(I) END DO ... ! ループ(2) DO I=1, 100 B(I) = A(I) + C(I) END DO ... END あらかじめ、前処理部1204は、図14に示すコント
ロールフローグラフを生成する。各ノードは、上のプロ
グラムの中で同じ番号をつけたループに対応する。ノー
ドDは、ダミーノードを示す。エッジに付けられた数字
は、そのエッジの優先順位である。メインプログラムの
ダミーノードに入るエッジ1302は処理済みにしておく。
【0140】分割候補生成部は、ループ(1)に対して、
次の分割候補を生成する。
【0141】 !HPF$ DISTRIBUTE A(BLOCK) !HPF$ ALIGN B(I) WITH A(I) ループ(2)に対して、次の分割候補を生成する。
【0142】!HPF$ DISTRIBUTE B(BLOCK) !HPF$ ALIGN A(I) WITH B(I) !HPF$ ALIGN C(I) WITH B(I) まず、図3のステップ303において、メインプログラ
ムに対して、分割選択サブルーチンが呼び出される。
【0143】手続き呼び出しは含まれないため、ステッ
プ501へ処理が移る。
【0144】ステップ501において、最大の優先度を
持つノード2に対して、分割を選択する。
【0145】ステップ502では、処理済みのノード2
に接続されたエッジ1301が選択される。
【0146】選択されたエッジ1301に接続されたノード
1は未処理であるため、ステップ504では、ノード1の
分割候補を選択する。
【0147】ステップ505において、エッジ1301の両
端のノード1, 2の分割の衝突の有無を分割衝突判定部12
14に問い合わせる。その結果、衝突はないことがわかる
ので、再分割は生成しない。
【0148】エッジ1303が未処理であるため、ステップ
506からステップ502に処理が移る。
【0149】ステップ502では、処理済みのノード1,
2に接続された未処理のエッジ1303が選択される。
【0150】選択したエッジ1303に接続されたノードD
は未処理であるため、ステップ503からステップ50
5へ処理が移る。
【0151】ノードDはダミーノードであり、分割候補
は存在しない。したがって、ステップ505では、ノー
ド1の分割を伝搬させて、ノードDの分割を以下のように
決定する。
【0152】 !HPF$ DISTRIBUTE A(BLOCK) !HPF$ ALIGN B(I) WITH A(I) !HPF$ ALIGN C(I) WITH A(I) ノード1とノードDの分割には衝突がないので、ステップ
505では何もしない。
【0153】全てのエッジが処理済みになったので、ス
テップ506からステップ507に処理が移る。
【0154】ステップ507では、ダミーノードDの分
割を初期分割に設定し、メインプログラムを処理済みと
して、RETURNする。
【0155】以上の結果、メインプログラムに対して、
次のような分割が挿入される。
【0156】 PROGRAM MAIN REAL A(100), B(100), C(100) !HPF$ DISTRIBUTE A(BLOCK) !HPF$ ALIGN B(I) WITH A(I) !HPF$ ALIGN C(I) WITH A(I) ... ! ループ(1) DO I=1, 100 A(I) = B(I) END DO ... ! ループ(2) DO I=1, 100 B(I) = A(I) + C(I) END DO ... END ステップ301に戻り、未処理の手続きを呼ぶCALL文はな
いので、処理を終了する。
【0157】本実施の形態では、分割衝突判定部1214が
配列要素の配置の状態を調べることによって、配列の分
割の衝突の有無を判定する。これにより、より厳密に分
割の衝突を判定することが可能になり、生成される再分
割の数を削減することができる。
【0158】
【発明の効果】第1の効果は、処理時間が短いため、コ
ンパイル時に利用することが可能なことである。
【0159】その理由は、従来手法では、0-1整数計画
法を用いて分割の衝突の解決を行っていたのに対し、本
発明では、コントロールフローグラフを用いた簡便な方
法によって、生成されるプログラムの効率を大きく低下
させることなく、短い処理時間を達成できるからであ
る。また、従来手法では、分割候補の評価値として実行
時間予測の結果を用いていたのに対し、本発明では、整
列グラフ上での接続関係に基づく評価値を用いることに
よって、生成されるプログラムの効率を大きく低下させ
ることなく、短い処理時間を達成できるからである第2
の効果は、ユーザによって一部の配列にのみ分割が指定
されている場合に、その分割を満たしつつ効率のよい実
行が可能になるように、他の配列に対して分割を生成す
ることが可能なことである。
【0160】その理由は、ユーザが指定した分割を表す
エッジとノードをあらかじめ整列グラフに加えておけ
ば、その分割を満たしつつ、その他の配列に対する最適
な分割を求めることができるからである。
【0161】第3の効果は、配列の分割の衝突を厳密に
判定できることにある。
【0162】その理由は、プロセッサの配列要素への配
置の状態によって、分割の衝突を判定するからである。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態の構成を示すブロッ
ク図である。
【図2】本発明の第1の実施の形態の分割候補生成部の
動作を示す流れ図である。
【図3】本発明の第1の実施の形態の分割選択部の動作
を示す流れ図である。
【図4】本発明の第1の実施の形態の分割選択部で用い
る分割選択サブルーチンの動作を示す流れ図の一部であ
る。
【図5】本発明の第1の実施の形態の分割選択部で用い
る分割選択サブルーチンの動作を示す流れ図の一部であ
る。
【図6】本発明の第1の実施の形態の分割候補生成部で
生成される整列グラフの例である。
【図7】本発明の第1の実施の形態の分割候補生成部で
生成される整列グラフの例である。
【図8】本発明の第1の実施の形態の分割候補生成部で
生成される整列グラフの例である。
【図9】本発明の第1の実施の形態の動作の具体例を示
すための逐次プログラムの例である。
【図10】本発明の第1の実施の形態の前処理部で生成
されるコントロールフローグラフの例である。
【図11】本発明の第1の実施の形態の動作の具体例を
示すための並列プログラムの例である。
【図12】本発明の第1の実施の形態の動作の具体例を
示すための並列プログラムの例である。
【図13】本発明の第2の実施の形態の構成を示すブロ
ック図である。
【図14】本発明の第2の実施の形態の前処理部で生成
されるコントロールフローグラフの例である。
【図15】データ分割の基本概念を示す図である。
【図16】従来技術を示す図である。
【符号の説明】
101 逐次プログラム 102 並列プログラム生成方法 104 前処理部 105 自動データ分割部 106 分割候補生成部 107 分割選択部 108 並列化処理部 109 コード生成部 110 並列プログラム 111 コントロールフローグラフ 112 コールフローグラフ 113 整列グラフ 1201 逐次プログラム 1202 並列プログラム生成方法 1204 前処理部 1205 自動データ分割部 1206 分割候補生成部 1207 分割選択部 1208 並列化処理部 1209 コード生成部 1210 並列プログラム 1211 コントロールフローグラフ 1212 コールフローグラフ 1213 整列グラフ 1214 分割衝突判定部
───────────────────────────────────────────────────── フロントページの続き Fターム(参考) 5B013 DD01 5B045 GG11 5B081 AA01 CC30 CC32

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】 自動的にデータ分割を行う並列プログラ
    ム生成方法において、 ノードが配列のアクセスに対応し、エッジがその両端の
    ノードのアクセスの間に整列関係が定義できることを示
    す非巡回有向グラフである整列グラフを参照して、並列
    ループにおける分割の候補を求める段階と、 CALL文または予め定められた条件を満たす多重ルー
    プに対応するノードと、ノード間の制御の流れを表すエ
    ッジとからなる有向グラフであるコントロールフローグ
    ラフを参照して、分割の衝突を解決するための再分割を
    生成する段階とを含むことを特徴とする並列プログラム
    生成方法。
  2. 【請求項2】 請求項1に記載の並列プログラム生成方
    法において、第1の分割の配列要素の配置の状態と、第
    2の分割の配列要素の配置の状態とを比較し、互いに異
    なる場合、第1および第2の分割の衝突があると判定す
    ることを特徴とする並列プログラム生成方法。
  3. 【請求項3】 自動的にデータ分割を行う並列プログラ
    ム生成方法において、 並列ループ内の配列のアクセスパターンを元に生成され
    た整列関係を表すグラフから、そのループにおける分割
    候補を生成する分割候補生成段階と、 CALL文または予め定められた条件を満たす多重ルー
    プに対応するノードと、ノード間の制御の流れを表すエ
    ッジとからなる有向グラフであるコントロールフローグ
    ラフ上で優先順位の高いエッジに沿って分割の決定と分
    割の衝突の解決を行う分割選択段階と、 プロセッサへの配列要素の配置の状態によって分割の衝
    突の有無を判定する分割衝突判定段階とを含むことを特
    徴とする並列プログラム生成方法。
  4. 【請求項4】 自動的にデータ分割を行う並列プログラ
    ム生成プログラムを記録したコンピュータ読み取り可能
    な記録媒体において、 ノードが配列のアクセスに対応し、エッジがその両端の
    ノードのアクセスの間に整列関係が定義できることを示
    す非巡回有向グラフである整列グラフを生成する処理
    と、 前記整列グラフを参照して、並列ループにおける分割の
    候補を求める処理と、CALL文または予め定められた
    条件を満たす多重ループに対応するノードと、ノード間
    の制御の流れを表すエッジとからなる有向グラフである
    コントロールフローグラフを生成する処理と、 前記コントロールフローグラフを参照して分割の衝突を
    解決するための再分割を生成する処理とをコンピュータ
    に実行させることを特徴とする並列プログラム生成プロ
    グラムを記録した記録媒体。
  5. 【請求項5】 請求項4に記載の記録媒体において、当
    該記録媒体に記録された前記並列プログラム生成プログ
    ラムは、第1の分割の配列要素の配置の状態と、第2の
    分割の配列要素の配置の状態とを比較し、互いに異なる
    場合、第1および第2の分割の衝突があると判定する処
    理をコンピュータに実行させることを特徴とする記録媒
    体。
  6. 【請求項6】 自動的にデータ分割を行う並列プログラ
    ム生成プログラムを記録したコンピュータ読み取り可能
    な記録媒体において、 並列ループ内の配列のアクセスパターンを元に生成され
    た整列関係を表すグラフから、そのループにおける分割
    候補を生成する分割候補生成処理と、 CALL文または予め定められた条件を満たす多重ルー
    プに対応するノードと、ノード間の制御の流れを表すエ
    ッジとからなる有向グラフであるコントロールフローグ
    ラフ上で優先順位の高いエッジに沿って分割の決定と分
    割の衝突の解決を行う分割選択処理と、 プロセッサへの配列要素の配置の状態によって分割の衝
    突の有無を判定する分割衝突判定処理とをコンピュータ
    に実行させることを特徴とする並列プログラム生成プロ
    グラムを記録した記録媒体。
  7. 【請求項7】 請求項4ないし6のいずれかに記載の記
    録媒体に記録された並列プログラム生成プログラムを含
    むコンパイラを記録したコンピュータ読み取り可能な記
    録媒体。
  8. 【請求項8】 請求項4ないし7のいずれかに記載の記
    録媒体を格納した情報処理装置。
JP11160973A 1999-06-08 1999-06-08 並列プログラム生成方法 Pending JP2000347879A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11160973A JP2000347879A (ja) 1999-06-08 1999-06-08 並列プログラム生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11160973A JP2000347879A (ja) 1999-06-08 1999-06-08 並列プログラム生成方法

Publications (1)

Publication Number Publication Date
JP2000347879A true JP2000347879A (ja) 2000-12-15

Family

ID=15726166

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11160973A Pending JP2000347879A (ja) 1999-06-08 1999-06-08 並列プログラム生成方法

Country Status (1)

Country Link
JP (1) JP2000347879A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9250880B2 (en) 2013-11-25 2016-02-02 International Business Machines Corporation Method for obtaining execution frequency information on execution paths in control flow graph, and computer and computer program for obtaining the information
US11226798B2 (en) 2019-02-04 2022-01-18 Fujitsu Limited Information processing device and information processing method

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9250880B2 (en) 2013-11-25 2016-02-02 International Business Machines Corporation Method for obtaining execution frequency information on execution paths in control flow graph, and computer and computer program for obtaining the information
US11226798B2 (en) 2019-02-04 2022-01-18 Fujitsu Limited Information processing device and information processing method

Similar Documents

Publication Publication Date Title
US5787284A (en) Improving memory layout based on connectivity considerations
US5193190A (en) Partitioning optimizations in an optimizing compiler
US5889999A (en) Method and apparatus for sequencing computer instruction execution in a data processing system
US5852734A (en) Method and compiler for parallel execution of a program
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US5790862A (en) Resource assigning apparatus which assigns the variable in a program to resources
Hall et al. Interprocedural transformations for parallel code generation
US20040003381A1 (en) Compiler program and compilation processing method
US6550059B1 (en) Method for generating optimized vector instructions from high level programming languages
JP2006509275A (ja) シストリックソルバを作成するシステムおよび方法
JPH09282179A (ja) オーバーヘッド命令を最小限にする最適化コンパイラにおける命令スケジューリングの方法および装置
US5797012A (en) Connectivity based program partitioning
US20080082805A1 (en) Automated synthesis apparatus and method
Carreras et al. A co-design methodology based on formal specification and high-level estimation
JPH0738158B2 (ja) コード最適化方法およびコンパイラ・システム
US20060010432A1 (en) Program and apparatus for translating language, and program converting method
JP2000347879A (ja) 並列プログラム生成方法
Kolson et al. Elimination of redundant memory traffic in high-level synthesis
Kessler Pattern-driven automatic program transformation and parallelization
JP3196625B2 (ja) 並列化コンパイル方式
Zhuang et al. A framework for parallelizing load/stores on embedded processors
Wu et al. Copy propagation optimizations for VLIW DSP processors with distributed register files
JPH04307624A (ja) ループ最適化方法及び装置
JP2003256214A (ja) 配列拡張によるループ変換方法
JP3233467B2 (ja) プログラム変換方法および装置

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20050512

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060529

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060607

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060807

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061025

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061225

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070322