JPH08194625A - プログラム分割方法 - Google Patents

プログラム分割方法

Info

Publication number
JPH08194625A
JPH08194625A JP1967495A JP1967495A JPH08194625A JP H08194625 A JPH08194625 A JP H08194625A JP 1967495 A JP1967495 A JP 1967495A JP 1967495 A JP1967495 A JP 1967495A JP H08194625 A JPH08194625 A JP H08194625A
Authority
JP
Japan
Prior art keywords
program
loop
division
dimension
processor
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
JP1967495A
Other languages
English (en)
Inventor
Kiyomi Umehara
清美 梅原
Makoto Sato
真琴 佐藤
Fujio Yamamoto
富士男 山本
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 JP1967495A priority Critical patent/JPH08194625A/ja
Publication of JPH08194625A publication Critical patent/JPH08194625A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 シングルプロセッサ向け逐次プログラムを無
駄なループ繰り返しを実行しないマルチプロセッサ向け
分割プログラムに変換することにある。 【構成】 データ分割指示付き逐次ソースプログラム10
1を入力し、中間語103に変換し、辞書104に登録し、デ
ータ分割情報105に設定する。プログラム分割処理106
で、上記103〜105を入力し、ループ外文実行PEの決定
処理107とループ範囲分割処理108を実行する。処理108
では、ループ内各文の実行ループ範囲決定処理109とル
ープ範囲決定処理110を実行する。処理106の結果はプロ
グラム分割情報111として格納し、中間語103に追加す
る。次に、103〜105および111を入力し、非局所データ
を解析し非局所データ解析情報112を設定し、プロセッ
サ間通信生成処理113を行い、中間語103に追加する。最
後に103〜105と111を入力してノードプログラム生成処
理114を行い、各PE用のノードプログラム115を出力す
る。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、シングルプロセッサ向
けプログラムをマルチプロセッサ向けプログラムに変換
する方法に関し、特に、データ分割指示付きの逐次ソー
スプログラムを入力とし、マルチプロセッサ向きの並列
ライブラリ呼び出しを含むソースプログラムまたはオブ
ジェクトプログラムを計算機により自動生成するプログ
ラム分割方法に関する。
【0002】
【従来の技術】従来のシングルプロセッサ向きにコーデ
ィングされたソースプログラムは、単一メモリを仮定し
ている。従って、シングルプロセッサ向きにコーディン
グされたソースプログラムをマルチプロセッサ構成の並
列計算機システムで動作させる場合は、ソースプログラ
ム中のデータ(配列など)を複数のデータ群に分割し
て、並列計算機システムの各プロセッサのローカルメモ
リに割り付けて計算を行うプログラムに変換する必要が
ある。
【0003】このとき、演算をプロセッサに分配する方
針として、data ownercomputes r
uleが知られている。これについては、シーマ ヒラ
ナンダニ、ケン ケネディー、チョウ ウンツェン
著:”分散メモリ型計算機向きのFORTRAN Dの
コンパイル方法”(Seema Hiranandan
i,Ken Kennedy,Chau−Wen Ts
eng:“Compiling FORTRAN D
for MIMD Distributed−Memo
ry Machines”,Communicatio
n of the ACM,Vol.35,No.8,
August 1992,pp66−80)で論じられ
ている。data owner computes r
uleとは、「文の計算はその文の左辺の配列要素が記
憶領域に割り当てられているプロセッサが実行する」と
いう原則のことである。この方針に基づいて、並列化し
た結果が、SPMD(Single Program
Multiple Data)になるように、プログラ
ムを並列化する。SPMDでは、各プロセッサが同じプ
ログラムもち、異なるデータに対して処理を行う。以
後、シングルプロセッサ向きの逐次ソースプログラムを
dataowner computes ruleに基
づいて、SPMDになるように計算を各プロセッサに分
配することをプログラム分割と呼ぶ。
【0004】以下、従来のプログラム分割方法について
説明する。なお、ここではDOループとその内側の代入
文を対象として説明する。プログラム分割処理は、元の
逐次ソースプログラムとデータ分割指示文を構文解析し
て得られる中間語とデータ分割情報を入力して、変更し
た中間語とプログラム分割情報を出力する。ここで、プ
ログラム分割方法の説明で用いられる用語の意味を示
す。 (a)グローバルインデックス:データ分割しないとき
の配列添字 (b)ローカルインデックス:データ分割されて各プロ
セッサに割り付けられたときの、各プロセッサでのロー
カルな配列添字 (c)グローバルループインデックス:グローバルイン
デックスを添字とする配列要素を書き換えるループイン
デックス (d)ローカルループインデックス:ローカルインデッ
クスを添字とする配列要素を書き換えるループインデッ
クス データ分割情報とは、下記の(1)〜(5)の情報をい
う。 (1)配列要素のグローバルインデックスから、データ
を割り付けたプロセッサ番号を返すデータ分割関数 (2)各配列のグローバルインデックスを、それを割り
付けたプロセッサのローカルインデックスへ変換する局
所化関数 (3)上記局所化関数の逆関数で、ローカルインデック
スを、プロセッサ番号を用いてグローバルインデックス
へ変換する大域化関数 (4)各プロセッサに割り付けられた配列の宣言範囲
を、グローバルインデックスで表現したGlobal
IndeX Set(以下、GIXSと略す) (5)各プロセッサに割り付けられた配列の宣言範囲
を、ローカルインデックスで表現したLocal In
deX Set(以下、LIXSと略す) プログラム分割情報とは、ループとループ内代入文毎に
もつ下記の(i)〜(iii)の情報をいう。 (i)data owner computes ru
leに従って、ループ内代入文を実行するプロセッサ番
号の範囲 (ii)元のループインデックス範囲のうち、各プロセッ
サが分担して実行するグローバルループインデックス範
囲であるGlobal ITeration Set
(以下、GITSと略す) (iii)元のループインデックス範囲のうち、各プロセ
ッサが分担して実行するローカルループインデックス範
囲であるLocal ITeration Set(以
下、LITSと略す)。
【0005】プログラム分割方法には2つの方法があ
る。それぞれの方法について、順に説明する。第1の方
法は、バサンス バラサンダラム、ジオフレイ フォッ
クス、ケンケネディ、ウルリッチ クレマー著:“デー
タ分割とデータ分散に対する対話環境”(Vasant
h Balasundaram,Geoffrey F
ox,Ken Kennedy and Ulrich
Kremer:“An Interactive E
nvironment for DataPartit
ioning and Distribution”,
Fifth Distributed Memory
Computing Conference,Char
leston,South Carolina,Apr
il9−12,1990,pp1160−1170)に
おいて論じられている。上記で論じられている方法は、
元の逐次ソースプログラムにおいて、代入文がループ内
で繰り返し計算される場合、data owner c
omputesruleが成り立つようにループインデ
ックス範囲を分割して、それを各プロセッサに割り付け
る。
【0006】以下では、上記の方法でプログラム分割す
るために、元のループインデックス範囲を分割して各プ
ロセッサに割り当てるループインデックス範囲であるL
ITSを求める処理の手順を説明する。ここでは、ルー
プ内文の配列添字は、ループインダクション変数(ルー
プに対する処理をする毎に変化する変数)およびループ
内で不変な式を使って表現される場合を考える。説明上
使われる用語の意味を示す。 (e)添字関数:ループインデックスの値から各次元の
配列添字式の値を決める関数 (f)添字関数の逆関数:各次元の配列添字式の値から
ループインデックスの値を決める関数 まず、ループ内代入文左辺配列に対する添字関数と添字
関数の逆関数を求める。次に、代入文左辺配列に対する
データ分割情報の各プロセッサ毎のGIXSに添字逆関
数を作用させて、仮想ループインデックス範囲Vert
ual Global Iteration Set
(以下、VGITSと略す)を求める。このVGITS
は、元のループインデックス範囲を考慮せずにGIXS
から求めたループインデックス範囲である。元のループ
インデックス範囲外のループインデックス値を含む可能
性があるために「仮想」と呼んでいる。このVGITS
と元のループインデックス範囲との積集合を計算してG
ITSを得る。このGITSに添字関数を作用させてG
IXSの一部を求め、このGIXSの一部に局所化関数
を作用させてLIXSの一部を求め、このLIXSの一
部に再び添字逆関数を作用させることによってLITS
が得られる。以後、上記第1のプログラム分割方法を添
字関数法と呼ぶことにする。
【0007】次に、第2の方法について説明する。第2
の方法は、シーマ ヒラナンダニー、ケン ケネディ
ー、チョウ ツェング著:“Fortran Dコンパ
イラに関する予備経験”(Seema Hiranan
dani,Ken Kennedy,Chau−Wen
Tseng:“Preliminary Exper
iences with the Fortran D
Compiler”,ACM,1993,pp338
−350)において論じられている。上記で論じられて
いる方法は、ループインデックス範囲を分割せず、ルー
プ繰り返し毎に、各プロセッサで代入文左辺配列データ
を保持するプロセッサが自己のプロセッサと一致するか
どうかを調べて、一致すればその文を実行する。以後、
上記第2のプログラム分割方法を単純法と呼ぶことにす
る。
【0008】ここで、ループ内代入文の左辺配列が複数
の次元に同一ループインダクション変数を持つプログラ
ムに対する従来のプログラム分割方法を考える。図2か
ら図4は、上記のプログラムに対する従来のプログラム
分割方法を示す例である。図2の(a)は入力となる逐
次ソースプログラムである。図2(a)のソースプログ
ラムでは、ループ制御変数kが1から16までの範囲を
とり、各ループ繰り返しで、配列Aの対角要素A(k,
k)の値にwを掛けてA(k,k)の値を更新する。図
2(b)は、図2(a)のプログラムを実行したとき
の、16×16の要素から成る配列Aに対するアクセス
パターンを表したものである。図2(b)では、16×
16の配列A上の書き換えられる配列要素を黒とし、そ
うでない配列要素を白とした。図3は、添字関数法でプ
ログラム分割した結果である。図3(a)は、配列Aを
2次元ブロック分割して、4×4の16台のプロセッサ
に分配したときの、図2(a)のプログラムを添字関数
法でプログラム分割した、各プロセッサのノードプログ
ラムである。図3(a)の添字関数法によるノードプロ
グラムでは、ループ制御変数kが1から4までの範囲を
とり、各ループ繰り返しで、各プロセッサに分配された
4×4の配列Aの対角要素A(k,k)の値を更新す
る。図3(b)は、図3(a)のノードプログラムを実
行したときの、配列Aに対するアクセスパターンを表し
たものである。図2(b)と同様、配列A上の書き換え
られる配列要素を黒とし、そうでない配列要素を白とし
た。図3(b)は図2(b)と異なるアクセスパターン
であるため、図2(a)のプログラムに対して従来の添
字関数法は適用できない。
【0009】図4は単純法の結果である。図4(a)
は、図3と同様に、配列Aを2次元ブロック分割して、
4×4の16台のプロセッサに分配したときの、図2
(a)のプログラムを単純法でプログラム分割した、各
プロセッサのノードプログラムである。図4(a)の単
純法によるノードプログラムでは、ループ制御変数kが
1から16までの範囲をとり、各ループ繰り返しで、1
6×16の配列Aの対角要素A(k,k)の値を保持す
るプロセッサが、A(k,k)の値を更新する。このた
め、A(k,k)の値を更新する前に、当該プロセッサ
が対角要素A(k,k)を保持するかどうかの条件文を
挿入する。図4(b)は、図4(a)のノードプログラ
ムを実行したときの、各プロセッサに分配された配列A
に対するアクセスパターンを表したものである。図3
(b)と同様、配列A上の書き換えられる配列要素を黒
とし、そうでない配列要素を白とした。図4(b)は図
2(b)と同じアクセスパターンであるため、図2
(a)のプログラムに対して、従来は単純法を適用して
いた。
【0010】
【発明が解決しようとする課題】上記従来技術の添字関
数法は、ループ内代入文の左辺配列が複数の次元に同一
ループインダクション変数をもつ場合の変換については
考慮されておらず、図2のようなプログラムには適用で
きないという問題があった。一方、上記従来技術の単純
法は、最適化については考慮されておらず、ループ範囲
を分割しないため無駄なループ繰り返しを実行するの
で、変換後のプログラムの実行時間は長くなるという問
題があった。本発明の目的は、シングルプロセッサ向け
逐次プログラムをマルチプロセッサ向け分割プログラム
に変換する際に、ループ内代入文の左辺配列が複数の次
元に同一ループインダクション変数をもつ場合に、無駄
なループ繰り返しを実行しない添字関数法を提供するこ
とにある。
【0011】
【課題を解決するための手段】上記目的を達成するた
め、本発明は、シングルプロセッサ向けの逐次ソースプ
ログラムをマルチプロセッサ向けの並列プログラムに計
算機を用いて自動変換する方法であり、少なくとも1つ
のループに配列を含む代入文が存在する高級言語で記述
されたソースプログラムを計算機で構文解析し、マルチ
プロセッサに対する前記ソースプログラムおよび前記少
なくとも1つのループ内の配列の要素の割り付け方を前
記計算機で決定し、各プロセッサについて、前記少なく
とも1つのループ内の代入文毎に自己のプロセッサに割
り当てられた配列要素を書き換えるループインデックス
範囲を前記計算機で求め、当該プロセッサが、前記ルー
プインデックス範囲を実行するようにノードプログラム
コードを前記計算機で生成するプログラム分割方法にお
いて、前記ループインデックス範囲を前記計算機で求め
るとき、前記計算機は、前記少なくとも1つのループ内
の代入文の左辺配列の複数次元に同一ループインダクシ
ョン変数が現われ、かつ、前記次元のうちのデータ分割
次元が同一データ分割方法であるか否かを判定し、前記
判定条件を満たすとき、前記データ分割次元の同一ルー
プインダクション変数のループインデックス範囲が等し
くなるような、前記左辺配列の存在するプロセッサ番号
が満たす条件式を求め、前記条件式毎に、前記データ分
割次元の同一ループインダクション変数のループインデ
ックス範囲の積集合を求めるようにしている。また、計
算機にシングルプロセッサ向き逐次ソースプログラムを
入力して、マルチプロセッサ向き並列プログラムを生成
する言語変換システムにおける該逐次ソースプログラム
中のループに対し、各プロセッサが分担して計算するル
ープインデックス範囲を求めるプログラム分割方法であ
り、前記逐次ソースプログラム中で宣言されているデー
タであるプロセッサ番号を多次元で表わした各プロセッ
サへの割り付け方を示すデータ分割指示情報を入力する
ステップと、前記逐次ソースプログラム中のループ内の
代入文毎に、プログラム分割対象となる配列を決定する
ステップと、前記プログラム分割対象配列の各次元毎
に、自己のプロセッサに割り当てられた前記プログラム
分割対象配列要素を書き換えるループインデックス範囲
を求めるステップとを備えたプログラム分割方法におい
て、前記ループインデックス範囲を求めるステップは、
前記プログラム分割対象配列の複数次元に同一ループイ
ンダクション変数が現われる代入文を検出するステップ
と、検出された前記プログラム分割対象配列の同一ルー
プインダクション変数が現われる複数次元のうちのデー
タ分割次元の分割方法が同一であるか否かを判定するス
テップと、前記判定条件が成り立たないとき、ループイ
ンデックス範囲を分割せずに前記逐次ソースプログラム
と同じループインデックス範囲をとり、各ループ繰り返
し毎に自己のプロセッサが前記プログラム分割対象配列
要素を保持するか否かを判定する条件文を、各代入文の
前に挿入するステップと、前記判定条件が成り立つと
き、前記データ分割次元の同一ループインダクション変
数のループインデックス範囲が等しくなるような、前記
プログラム分割対象配列の存在するプロセッサ番号が満
たす条件式を求めるステップと、前記条件式毎に、前記
データ分割次元の同一ループインダクション変数のルー
プインデックス範囲の積集合を求めるステップとを備え
るようにしている。さらに、前記条件式を求めるステッ
プは、前記プログラム分割対象配列のデータ分割次元の
同一ループインダクション変数のループインデックス範
囲が等しくなるような、各次元のプロセッサ番号が満た
す条件式を求めるステップと、前記条件式を、各次元の
プロセッサ番号の差が整数になるように場合分けするス
テップとを備えるようにしている。さらに、前記場合分
けするステップは、前記条件式の各次元のプロセッサ番
号を表わす変数の定係数の絶対値を1にするために、条
件式の両辺を定係数で割るステップと、前記条件式の定
数が整定数でない場合、定数を切り捨てと切り上げした
条件式に場合分けするステップとを備えるようにしてい
る。さらに、前記積集合を求めるステップは、前記条件
式毎に、前記プログラム分割対象のデータ分割次元の同
一ループインダクション変数のループインデックス範囲
に前記条件式を代入するステップと、前記条件式毎に、
前記プログラム分割対象のデータ分割次元の同一ループ
インダクション変数のループインデックス範囲の積集合
を求めるステップと、前記条件式毎に、前記ループイン
デックス範囲の積集合と前記逐次ソースプログラムのル
ープインデックス範囲の積集合を求めるステップとを備
えるようにしている。
【0012】
【作用】ループ内の代入文の左辺配列のデータ分割次元
の同一ループインダクション変数のGITSが等しくな
るような左辺配列の存在するプロセッサ番号が満たす条
件式は、アクセスパターンが同じプロセッサか否かを判
定する。それによって、各プロセッサによってアクセス
パターンが異なる場合に対応できる。また、ループ内の
代入文の左辺配列のデータ分割次元の同一ループインダ
クション変数のGITSの積集合は、自己のプロセッサ
が保持する配列要素を書き換える。それによって、無駄
なループ繰り返しがない。
【0013】
【実施例】初めに、本発明の実施例を説明するために用
いる用語の意味を示す。 (g)Processing Element(以下、
PEと略す):プロセッサ要素 (h)インダクション共有次元Common Indu
ction owning Dimension(以
下、CIDと略す):配列の複数の次元(図2(b)の
場合、1〜16で示される縦方向が1次元であり、1〜
16で示される横方向が2次元である)の添字に同一ル
ープインダクション変数(ループに対する処理をする毎
に変化する変数であり、後述する図13(b)の131
4のiに相当する)が現われるときのその各次元 (i) Distributed Common In
duction owning Dimension
(以下、DCIDと略す):CIDかつデータ分割して
いる次元。
【0014】以下、本発明の実施例を図1および図3か
ら図10を用いて説明する。図1は、本発明に係るプロ
グラム分割方法を適用した計算機による自動並列化処理
における処理手順の概要を示す。自動並列化処理を行う
計算機100は、まず構文解析処理102で、データ分
割指示付きシングルプロセッサ向けソースプログラム1
01を入力し、これを中間語103に変換し、辞書10
4に登録して、データ分割情報105を設定する。プロ
グラム分割処理106では、この中間語103と辞書1
04とデータ分割情報105を入力し、ループ外文を実
行するPEの決定処理107とループ範囲分割処理10
8を実行する。ループ範囲分割処理108では、ループ
内各文の実行ループ範囲決定処理109とループ範囲決
定処理110を実行する。結果はプログラム分割情報1
11として格納し、中間語103に追加する。次に、こ
のプログラム分割情報111、中間語103、辞書10
4、およびデータ分割情報105を入力し、非局所デー
タの有無を解析し非局所データ解析情報112を設定
し、プロセッサ間通信生成処理113を行い、中間語1
03に追加する。非局所データとは、自プロセッサのロ
ーカルメモリに無いデータ(すなわち、他のプロセッサ
から通信により得ることが必要であるデータ)のことで
ある。最後に、この中間語103と辞書104、および
データ分割情報105、プログラム分割情報111を入
力して、ノードプログラム生成処理114を行い、各プ
ロセッサで動作させるノードプログラム115を出力す
る。
【0015】次に、図1のプログラム分割処理106に
おいて用いる各種の情報について説明する。図5は、デ
ータ分割情報105に設定されるデータ分割テーブル5
01を示す。データ分割テーブル501は、ソースプロ
グラム中の各配列の各次元のデータ分割した結果を格納
するテーブルである。データ分割テーブル501は、配
列の各次元のデータ分割方法502、データ分割関数5
03、対応するPE次元504、次元別データ分割テー
ブルへのポインタ505を含む。次元別データ分割テー
ブル506は、PE範囲507、LIXS508、GI
XS509、大域化関数510、局所化関数511を含
む。PE範囲、LIXS、GIXSはそれぞれ範囲テー
ブル512を指し、範囲テーブルは下限513、上限5
14、増分515を含む。また、大域化関数と局所化関
数とデータ分割関数は関数テーブル516を指し、関数
テーブルは返り値517と引数518を含む。
【0016】図6は、プログラム分割情報111に設定
されるCIDテーブル601を示す。CIDテーブル6
01は、データ分割方法602と仮想範囲テーブルへの
ポインタ603を含む。仮想範囲テーブル604は、P
E次元605とPE範囲606とVGITS607を含
む。
【0017】図7は、プログラム分割情報111に設定
されるプログラム分割テーブル701を示す。プログラ
ム分割テーブル701は、ループ制御変数702とプロ
グラム分割方法703と実行範囲テーブルへのポインタ
704を含む。実行範囲テーブル705は、PE範囲7
06、LITS707、GITS708、PE次元関係
式709を含む。PE次元関係式は、条件式テーブル7
10を指し、条件式テーブルは、比較演算子711、左
辺712、右辺713を含む。
【0018】次に、図1のプログラム分割処理106に
ついてさらに詳細に説明する。図8は、プログラム分割
処理部106のループ範囲分割処理部108のループ内
文実行ループ範囲決定処理109の処理手順を示す。こ
こでは、中間語103、辞書104、およびデータ分割
情報105を入力して処理を開始する。まず、プログラ
ム分割対象配列決定処理部801で、代入文左辺配列を
選び出す。ただし、代入文左辺がスカラ変数で総和計算
を行う文のときは、右辺に現われる任意の配列を選び出
す。プログラム分割対象配列が見つかったら、VGIT
S生成処理部802で従来法によってVGITSを求め
る。これは、添字関数に対して、データ分割情報105
のデータ分割テーブル501の次元別データ分割テーブ
ル506のGIXS509を引数として、返り値を計算
する。この結果を、プログラム分割情報111のCID
テーブル601へ格納する。次にDCID検出処理部8
03で、プログラム分割情報111のCIDテーブル6
01から、DCIDをみつける。上記でDCIDがみつ
かったら、データ分割識別部804で、これらの次元の
データ分割方法が同じか異なるかを判定する。この結
果、DCIDが異なるデータ分割方法のとき、単純法処
理805を行い、DCIDが同じデータ分割方法のと
き、添字関数法806を行う。単純法処理部805で
は、GITS決定処理部807でGITSを元の全ルー
プ範囲とする。そして、文実行PE決定処理部808
で、データ分割テーブル501のデータ分割関数に対し
て、中間語103のプログラム分割対象配列の添字式を
引数として得られた返り値を実行PEとする。結果は、
プログラム分割情報111のプログラム分割テーブル7
01へ書き込む。添字関数法処理部806では、PE次
元関係式生成処理809を行い、共通VGITS決定処
理810を行い、GITS決定処理811を行う。結果
は、プログラム分割情報111のプログラム分割テーブ
ル701へ書き込む。
【0019】図9は、PE次元関係式生成処理809の
処理手順を示す。ここではプログラム分割情報111の
CIDテーブル601を入力して、処理を開始する。ま
ず、プログラム分割情報111のCIDテーブル601
のDCIDテーブルの仮想範囲テーブル604のVGI
TS607が一致するようなPE次元関係式を求める処
理901を実行する。PE次元関係式を求める処理で
は、PE次元を表す変数の定係数が1になるような等式
を生成する。この結果、PE次元関係式中に現われる定
数が整定数でないとき、この定数に対して、切り捨てと
切り上げをしたPE次元関係式に場合分けする処理90
2を実行する。得られたPE次元関係式はプログラム分
割情報111のプログラム分割情報テーブル701へ格
納する。
【0020】図10は、共通VGITS決定処理810
の処理手順を示す。ここでは、プログラム分割情報11
1のCIDテーブル601とプログラム分割テーブル7
01を入力して、処理を開始する。まず、CIDテーブ
ル601の各VGITS607に、プログラム分割テー
ブル701のPE次元関係式を代入することによって、
各VGITSを同一PE次元で表す処理1001を行
い、CIDテーブル601の各VGITS607を変更
する。次に、処理1001で変更されたCIDテーブル
601の各VGITS607の積集合を求め、全次元に
対する共通VGITSを決定する処理1002を行う。
この結果を、プログラム分割情報111のプログラム分
割テーブル701へ格納する。以上で、プログラム分割
処理を終える。
【0021】次に、上述の図1および図5〜図10で説
明したプログラム分割処理106を、3つの具体例で説
明する。図11、図15、図19はそれぞれプログラム
分割処理106に対する入力である。始めに、第1の例
題を図11から図14を使って説明する。図11の
(a)はソースプログラムであり、(b)は配列Aのデ
ータ分割方法を示している。図11(a)のソースプロ
グラムのループ範囲1101はループ下限値が1で、ル
ープ上限値が16である。ループ内代入文1102は、
配列Aの対角要素を書き換える。図11(b)では、配
列Aを4台のプロセッサに列ブロック分割し、プロセッ
サ列番号をpで表わす。
【0022】図12は、配列Aのデータ分割情報のデー
タ分割テーブルを示している。データ分割テーブル12
01は、1次元めのデータ分割方法1202が非分割で
あるため、データ分割関数1203はNULL、対応す
るPE次元1204は0、次元別データ分割テーブルへ
のポインタ1205はNULLになる。一方、2次元目
のデータ分割方法1206はブロック分割である。従っ
て、2次元目のデータ分割関数1207は f(i)=
(i−1)/4 となり、2次元目の対応するPE次元
1208は1次元目となる。ここで、範囲を[下限:上
限:増分値]で表すことにする。2次元目に対する次元
別データ分割テーブル1209は、PE範囲1210が
[0:3:1]、LIXS1211が[1:4:1]、
GIXS1212が[4p+1:4p+4:1]、大域
化関数1213が f(i)=i+4p 、局所化関数1
214が f(i)=i−4p となる。
【0023】図11,図12の入力に対して、プログラ
ム分割処理106のループ範囲分割108で、ループ内
文を実行する各文毎のループ範囲決定処理109を行
う。図13は、ループ内代入文1102を実行するルー
プ範囲決定処理109を行って得られたプログラム分割
情報を示している。このうち図13(a)は、代入文1
102に対するプログラム分割情報のCIDテーブルで
あり、図13(b)は、代入文1102に対するプログ
ラム分割情報のプログラム分割テーブルである。ループ
内代入文1102に対するループ範囲決定処理109を
説明する。ループ制御変数はiであるため、プログラム
分割テーブル1313のループ制御変数1314はiと
する。始めに、プログラム分割対象配列決定処理801
では、プログラム分割対象配列は、代入文1102の左
辺配列Aとなる。次に、従来法に従ってVGITSを生
成する処理802を行って、CIDテーブルに格納す
る。図13(a)の代入文1102の左辺のプログラム
分割対象配列Aの1次元目に対するCIDテーブル13
01は、データ分割方法1302はデータ非分割、仮想
範囲テーブル1303のPE次元1304は0、PE範
囲1305はNULLであり、VGITS1306は
[1:16:1]となる。一方、図13(a)の代入文
左辺のプログラム分割対象配列Aの2次元目に対するC
IDテーブル1307は、データ分割方法1308はブ
ロック分割、仮想範囲テーブル1309のPE次元13
10は1、PE範囲1311は[0:3:1]であり、
VGITS1312は[4p+1:4p+4:1]とな
る。
【0024】続いて、CIDテーブル1301とCID
テーブル1307に対して、DCID検出処理803を
行った結果、CIDテーブル1307がDCIDとな
る。これよりDCIDは1つであるため、データ分割識
別部804では同一分割とみなし、添字関数法処理80
6を行う。ここで、プログラム分割テーブル1313の
プログラム分割方法1315を添字関数法と設定する。
添字関数法処理806のPE次元関係式生成処理809
では、PEが1次元であるため、実行範囲テーブル13
16のPE次元関係式1319はNULLとなる。続い
て共通VGITS決定処理810において、CIDテー
ブル1307のVGITS1312と元のループ範囲1
101の[1:16:1]の積集合をとる。ここで、P
E範囲1317は[0:3:1]なので、GITS13
18は[4p+1:4p+4:1]となる。
【0025】図14の(a)はプログラム分割後の各プ
ロセッサで動作するノードプログラムを示し、図14
(b)は、ノードプログラムを実行したときの配列Aへ
のアクセスの様子を示す。図14(a)のノードプログ
ラムでは、ループ範囲1401はループ下限が4p+
1、ループ上限が4p+4になる。ループ内代入文14
02に現われる配列Aの添字は、2次元目がグローバル
インデックスからローカルインデックスに変換される。
図14(b)の配列Aで書き換えられる配列要素は、図
11(b)の逐次ソースプログラムで書き換えられる対
角要素と同じである。
【0026】次に、第2の例題を図15から図18を使
って説明する。図15の(a)はソースプログラムであ
り、図15(b)は配列Aのデータ分割方法を示してい
る。図15(a)のソースプログラムのループ範囲15
01はループ下限値が1で、ループ上限値が16であ
る。ループ内代入文1502は、配列Aの対角要素を書
き換える。図15(b)では、配列Aを4×4台のプロ
セッサに行方向と列方向でブロック分割する。行方向と
列方向のそれぞれにプロセッサ番号を付けて、プロセッ
サ行番号p1とプロセッサ列番号p2のペアー(p1
2)でプロセッサ番号を表す。
【0027】図16は、配列Aのデータ分割情報のデー
タ分割テーブルを示している。データ分割テーブル16
01は、1次元目のデータ分割方法1602がブロック
分割であるため、データ分割関数1603は f(i)
=(i−1)/4 、対応するPE次元1604は1と
なる。1次元目に対する次元別データ分割テーブル16
05は、PE範囲1606が[0:3:1]、LIXS
1607が[1:4:1]、GIXS1608が[4p
1+1:4p1+4:1]、大域化関数1609が f
(i)=i+4p1、局所化関数1610が f(i)=
i−4p1 となる。一方、2次元目のデータ分割方法1
611はブロック分割である。従って、2次元目のデー
タ分割関数1612は f(i)=(i−1)/4 とな
り、2次元目の対応するPE次元1613は2次元目と
なる。2次元目に対する次元別データ分割テーブル16
14は、PE範囲1615が[0:3:1]、LIXS
1616が[1:4:1]、GIXS1617が[4p
2+1:4p2+4:1]、大域化関数1618が f
(i)=i+4p2、局所化関数1619が f(i)=
i−4p2 となる。
【0028】図15,図16の入力に対して、プログラ
ム分割処理106のループ範囲分割108で、ループ内
文を実行する各文毎のループ範囲決定処理109を行
う。図17は、ループ内代入文1502を実行するルー
プ範囲決定処理109を行って得られたプログラム分割
情報を示している。このうち図17(a)は、代入文1
502に対するプログラム分割情報のCIDテーブルで
あり、図17(b)は、代入文1502に対するプログ
ラム分割情報のプログラム分割テーブルである。ループ
内代入文1502に対するループ範囲決定処理109を
説明する。ループ制御変数はiであるため、プログラム
分割テーブル1713のループ制御変数1714はiと
する。始めに、プログラム分割対象配列決定処理801
では、プログラム分割対象配列は、代入文1502の左
辺配列Aとなる。次に、従来法に従ってVGITSを生
成する処理802を行って、CIDテーブルに格納す
る。代入文1502の左辺のプログラム分割対象配列A
の1次元目に対するCIDテーブル1701は、データ
分割方法1702がブロック分割、仮想範囲テーブル1
703のPE次元1704は1、PE範囲1705は
[0:3:1]であり、VGITS1706は[4p1
+1:4p1+4:1]となる。一方、代入文1502
の左辺のプログラム分割対象配列Aの2次元目に対する
CIDテーブル1707は、データ分割方法1708は
ブロック分割、仮想範囲テーブル1709のPE次元1
710は2、PE範囲1711は[0:3:1]であ
り、VGITS1712は[4p2+1:4p2+4:
1]となる。
【0029】続いて、CIDテーブル1701とCID
テーブル1707に対して、DCID検出処理803を
行った結果、CIDテーブル1701とCIDテーブル
1707のいずれもDCIDとなる。データ分割識別部
804では、データ分割方法1702とデータ分割方法
1708はどちらもブロック分割なので同一分割であ
る。従って、添字関数法処理806を行う。ここで、プ
ログラム分割テーブル1713のプログラム分割方法1
715を添字関数法と設定する。添字関数法処理806
のPE次元関係式生成処理809で、VGITS170
6とVGITS1712が一致するには、p1=p2が成
り立てばよい。従って、PE次元関係式1719はp1
=p2となる。続いて共通VGITS決定処理810に
おいて、PE次元関係式1719より、VGITS17
06とVGITS1712を同一PE次元p1で表す。
すると、どちらも[4p1+1:4p1+4:1]なの
で、共通のVGITSは[4p1+1:4p1+4:1]
となる。これより、共通のGITS1718は、共通の
VGITSと元のループ1501のループ範囲[1:1
6:1]の積集合をとる。PE範囲1717は[0:
3:1]なので、GITS1718は[4p1+1:4
1+4:1]となる。
【0030】図18の図18(a)はプログラム分割後
の各プロセッサで動作するノードプログラムを示し、図
18(b)は、ノードプログラムを実行したときの配列
Aへのアクセスの様子を示す。図18(a)のノードプ
ログラムでは、条件判定を行って、実行するプロセッサ
のプロセッサ番号が条件文1801を満たすとき、ルー
プ処理を行う。ループ範囲1802はループ下限が4p
+1、ループ上限が4p+4になる。ループ内代入文1
803に現われる配列Aの添字は、2次元目がグローバ
ルインデックスからローカルインデックスに変換され
る。図18(b)の配列Aで書き換えられる配列要素
は、図18(b)の逐次ソースプログラムで書き換えら
れる対角要素と同じである。
【0031】次に、第3の例題を図19から図21を使
って説明する。図19の(a)はソースプログラムであ
り、図19(b)は配列Aのデータ分割方法を示してい
る。図19(a)のソースプログラムのループ範囲19
01はループ下限値が1で、ループ上限値が16であ
る。ループ内代入文1902は、配列Aの対角から1行
下の要素A(k+1,k)を書き換える。図19(b)
では、配列Aを4×4台のプロセッサに行方向と列方向
でブロック分割する。前述の図15(b)と同様、行方
向と列方向のそれぞれにプロセッサ番号を付けて、プロ
セッサ行番号p1とプロセッサ列番号p2のペアー
(p1,p2)でプロセッサ番号を表す。従って、図16
が、配列Aのデータ分割情報のデータ分割テーブルを示
している。
【0032】図19,図16の入力に対して、プログラ
ム分割処理106のループ範囲分割108で、ループ内
文を実行する各文毎のループ範囲決定処理109を行
う。図20は、ループ内代入文1902を実行するルー
プ範囲決定処理109を行って得られたプログラム分割
情報を示している。このうち図20(a)は、代入文1
902に対するプログラム分割情報のCIDテーブルで
あり、図20(a)は、代入文1901に対するプログ
ラム分割情報のプログラム分割テーブルである。ループ
内代入文1901に対するループ範囲決定処理109を
説明する。ループ制御変数はiであるため、プログラム
分割テーブル2013のループ制御変数2014はiと
する。始めに、プログラム分割対象配列決定処理801
では、プログラム分割対象配列は、代入文1902の左
辺配列Aとなる。次に、従来法に従ってVGITSを生
成する処理802を行って、CIDテーブルに格納す
る。代入文1902の左辺のプログラム分割対象配列A
の1次元めに対するCIDテーブル2001は、データ
分割方法2002がブロック分割、仮想範囲テーブル2
003のPE次元2004は1、PE範囲2005は
[0:3:1]であり、VGITS2006は[4
1:4p1+3:1]でとなる。一方、図20(a)の
代入文左辺のプログラム分割対象配列Aの2次元めに対
するCIDテーブル2007は、データ分割方法200
8はブロック分割、仮想範囲テーブル2009のPE次
元2010は2、PE範囲2011は[0:3:1]で
あり、VGITS2012は[4p2+1:4p2+4:
1]となる。
【0033】続いて、CIDテーブル2001とCID
テーブル2007に対して、DCID検出処理803を
行った結果、CIDテーブル2001とCIDテーブル
2007のいずれもDCIDとなる。データ分割識別部
804では、データ分割方法2002とデータ分割方法
2008はどちらもブロック分割なので同一分割であ
る。従って、添字関数法処理806を行う。ここで、プ
ログラム分割テーブル2013のプログラム分割方法2
014を添字関数法と設定する。添字関数法処理806
のPE次元関係式生成処理809で、VGITS200
6とVGITS2012が一致するには、p1=p2+1
/4 が成り立てばよい。ここで、PE次元関係式中に
現われる定数が整定数でないので、この定数に対して、
切り捨てと切り上げをしたPE次元関係式に場合分けす
る処理902を実行すると、p1=p2とp1=p2+1に
分けられる。従って、PE次元関係式2019はp1
2、PE次元関係式2023はp1=p2+1となる。
続いて共通VGITS決定処理810において、PE次
元関係式2019より、VGITS2006とVGIT
S2012を同一PE次元p1で表すと、[4p1:4p
1+3:1]と[4p1+1:4p1+4:1]になる。
従って、全次元に対する共通VGITSを決定する処理
1002で、共通VGITSは[4p1+1:4p1
3:1]となる。これより、共通のGITS2018
は、共通のVGITSと元のループ1901のループ範
囲[1:16:1]の積集合をとる。PE範囲2017
は[0:3:1]なので、GITS2019は[4p1
+1:4p1+3:1]となる。同様に、共通VGIT
S決定処理810において、PE次元関係式2023よ
り、VGITS2006と2012を同一PE次元p2
で表すと、[4p2+4:4p2+7:1]と[4p2
1:4p2+4:1]になる。従って、全次元に対する
共通VGITSを決定する処理1002で、VGITS
は[4p2+4:4p2+4:1]となる。これより、共
通のGITS2023は、共通のVGITSと元のルー
プ範囲1901のループ範囲[1:16:1]の積集合
をとる。PE次元関係式2023が成り立つp2のPE
範囲2021は[0:2:1]なので、GITS202
2は[4p2+4:4p2+4:1]となる。
【0034】図21の(a)はプログラム分割後の各プ
ロセッサで動作するノードプログラムを示し、図21
(b)は、ノードプログラムを実行したときの配列Aへ
のアクセスの様子を示す。図21(a)のノードプログ
ラムでは、条件判定を行って、実行するプロセッサのプ
ロセッサ番号が条件文2101または条件文2104を
満たすとき、ループ処理を行う。条件文2101が成り
立つとき、ループ範囲2102はループ下限が4p1
1、ループ上限が4p1+3になる。一方、条文210
4が成り立つとき、ループ範囲2105はループ下限が
4p2+4、ループ上限が4p2+4になる。ループ内代
入文2103と2106に現われる配列Aの添字は、1
次元めと2次元め、どちらもグローバルインデックスか
らローカルインデックスに変換される。図21(b)の
配列Aで書き換えられる配列要素は、図21(b)の逐
次ソースプログラムで書き換えられる要素と同じであ
る。
【0035】なお、上記実施例では、DOループ内に1
つの代入文がある場合の説明であるが、DOループ内に
複数の代入文がある場合にも適用することができる。
【0036】
【発明の効果】本発明によれば、ループ内の代入文の左
辺配列のデータ分割次元の同一ループインダクション変
数のGITSが等しくなるような左辺配列の存在するプ
ロセッサ番号が満たす条件式が、アクセスパターンが同
じプロセッサか否かを判定することができるので、各プ
ロセッサによってアクセスパターンが異なる場合に対応
することができる。また、ループ内の代入文の左辺配列
のデータ分割次元の同一ループインダクション変数のG
ITSの積集合は、自己のプロセッサが保持する配列要
素を書き換えるので、元の逐次プログラムがループを1
00,000回繰り返すとき、プロセッサ100台で実
行する並列プログラムにおいて、従来の単純法を用いて
プログラム分割するとループは100,000回繰り返
していたが、本発明では1,000回繰り返すだけでよ
く、繰り返し回数を大幅に減少することができる。
【図面の簡単な説明】
【図1】本発明に係るプログラム分割方法を適用した自
動並列化変換システムにおける処理手順の概要を示す図
である。
【図2】従来法を説明するための例題プログラムと例題
プログラムを実行したときの配列Aへのアクセスを示す
図である。
【図3】図2の例題プログラムを従来の添字関数法でプ
ログラム分割した結果を示す図である。
【図4】図2の例題プログラムを従来の単純法でプログ
ラム分割した結果を示す図である。
【図5】図1に示すデータ分割情報105のデータ分割
テーブルの構成を示す図である。
【図6】図1に示すプログラム分割情報111のCID
テーブルの構成を示す図である。
【図7】図1に示すプログラム分割情報111のプログ
ラム分割テーブルの構成を示す図である。
【図8】図1に示す変換システムにおけるループ内文実
行ループ範囲決定処理の手順を示すフローチャートであ
る。
【図9】図1に示す変換システムにおけるPE次元関係
式生成処理の手順を示すフローチャートである。
【図10】図1に示す変換システムにおける共通VGI
TS決定処理の手順を示すフローチャートである。
【図11】例題プログラムと配列Aのデータ分割パター
ンを示す図である。
【図12】図11の配列Aのデータ分割テーブルを示す
図である。
【図13】図11の例題プログラムにおけるプログラム
分割情報を示す図である。
【図14】図11の例題プログラムに本発明を施したノ
ードプログラムとノードプログラムを実行したときの配
列Aへのアクセスを示す図である。
【図15】例題プログラムと配列Aのデータ分割パター
ンを示す図である。
【図16】図15の配列Aのデータ分割テーブルを示す
図である。
【図17】図15の例題プログラムにおけるプログラム
分割情報を示す図である。
【図18】図15の例題プログラムに本発明を施したノ
ードプログラムとノードプログラムを実行したときの配
列Aへのアクセスを示す図である。
【図19】例題プログラムと配列Aのデータ分割パター
ンを示す図である。
【図20】図19の例題プログラムにおけるプログラム
分割情報を示す図である。
【図21】図19の例題プログラムに本発明を施したノ
ードプログラムとノードプログラムを実行したときの配
列Aへのアクセスを示す図である。

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】シングルプロセッサ向けの逐次ソースプロ
    グラムをマルチプロセッサ向けの並列プログラムに計算
    機を用いて自動変換する方法であり、 少なくとも1つのループに配列を含む代入文が存在する
    高級言語で記述されたソースプログラムを計算機で構文
    解析し、 マルチプロセッサに対する前記ソースプログラムおよび
    前記少なくとも1つのループ内の配列の要素の割り付け
    方を前記計算機で決定し、 各プロセッサについて、前記少なくとも1つのループ内
    の代入文毎に自己のプロセッサに割り当てられた配列要
    素を書き換えるループインデックス範囲を前記計算機で
    求め、 当該プロセッサが、前記ループインデックス範囲を実行
    するようにノードプログラムコードを前記計算機で生成
    するプログラム分割方法において、 前記ループインデックス範囲を前記計算機で求めると
    き、前記計算機は、 前記少なくとも1つのループ内の代入文の左辺配列の複
    数次元に同一ループインダクション変数が現われ、か
    つ、前記次元のうちのデータ分割次元が同一データ分割
    方法であるか否かを判定し、 前記判定条件を満たすとき、前記データ分割次元の同一
    ループインダクション変数のループインデックス範囲が
    等しくなるような、前記左辺配列の存在するプロセッサ
    番号が満たす条件式を求め、 前記条件式毎に、前記データ分割次元の同一ループイン
    ダクション変数のループインデックス範囲の積集合を求
    めることを特徴とするプログラム分割方法。
  2. 【請求項2】計算機にシングルプロセッサ向き逐次ソー
    スプログラムを入力して、マルチプロセッサ向き並列プ
    ログラムを生成する言語変換システムにおける該逐次ソ
    ースプログラム中のループに対し、各プロセッサが分担
    して計算するループインデックス範囲を求めるプログラ
    ム分割方法であり、 前記逐次ソースプログラム中で宣言されているデータで
    あるプロセッサ番号を多次元で表わした各プロセッサへ
    の割り付け方を示すデータ分割指示情報を入力するステ
    ップと、 前記逐次ソースプログラム中のループ内の代入文毎に、
    プログラム分割対象となる配列を決定するステップと、 前記プログラム分割対象配列の各次元毎に、自己のプロ
    セッサに割り当てられた前記プログラム分割対象配列要
    素を書き換えるループインデックス範囲を求めるステッ
    プとを備えたプログラム分割方法において、 前記ループインデックス範囲を求めるステップは、 前記プログラム分割対象配列の複数次元に同一ループイ
    ンダクション変数が現われる代入文を検出するステップ
    と、 検出された前記プログラム分割対象配列の同一ループイ
    ンダクション変数が現われる複数次元のうちのデータ分
    割次元の分割方法が同一であるか否かを判定するステッ
    プと、 前記判定条件が成り立たないとき、ループインデックス
    範囲を分割せずに前記逐次ソースプログラムと同じルー
    プインデックス範囲をとり、各ループ繰り返し毎に自己
    のプロセッサが前記プログラム分割対象配列要素を保持
    するか否かを判定する条件文を、各代入文の前に挿入す
    るステップと、 前記判定条件が成り立つとき、前記データ分割次元の同
    一ループインダクション変数のループインデックス範囲
    が等しくなるような、前記プログラム分割対象配列の存
    在するプロセッサ番号が満たす条件式を求めるステップ
    と、 前記条件式毎に、前記データ分割次元の同一ループイン
    ダクション変数のループインデックス範囲の積集合を求
    めるステップとを備えたことを特徴とするプログラム分
    割方法。
  3. 【請求項3】請求項2記載のプログラム分割方法におい
    て、 前記条件式を求めるステップは、 前記プログラム分割対象配列のデータ分割次元の同一ル
    ープインダクション変数のループインデックス範囲が等
    しくなるような、各次元のプロセッサ番号が満たす条件
    式を求めるステップと、 前記条件式を、各次元のプロセッサ番号の差が整数にな
    るように場合分けするステップとを備えたことを特徴と
    するプログラム分割方法。
  4. 【請求項4】請求項3記載のプログラム分割方法におい
    て、 前記場合分けするステップは、 前記条件式の各次元のプロセッサ番号を表わす変数の定
    係数の絶対値を1にするために、条件式の両辺を定係数
    で割るステップと、 前記条件式の定数が整定数でない場合、定数を切り捨て
    と切り上げした条件式に場合分けするステップとを備え
    たことを特徴とするプログラム分割方法。
  5. 【請求項5】請求項2記載のプログラム分割方法におい
    て、 前記積集合を求めるステップは、 前記条件式毎に、前記プログラム分割対象のデータ分割
    次元の同一ループインダクション変数のループインデッ
    クス範囲に前記条件式を代入するステップと、 前記条件式毎に、前記プログラム分割対象のデータ分割
    次元の同一ループインダクション変数のループインデッ
    クス範囲の積集合を求めるステップと、 前記条件式毎に、前記ループインデックス範囲の積集合
    と前記逐次ソースプログラムのループインデックス範囲
    の積集合を求めるステップとを備えたことを特徴とする
    プログラム分割方法。
JP1967495A 1995-01-12 1995-01-12 プログラム分割方法 Pending JPH08194625A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP1967495A JPH08194625A (ja) 1995-01-12 1995-01-12 プログラム分割方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP1967495A JPH08194625A (ja) 1995-01-12 1995-01-12 プログラム分割方法

Publications (1)

Publication Number Publication Date
JPH08194625A true JPH08194625A (ja) 1996-07-30

Family

ID=12005790

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1967495A Pending JPH08194625A (ja) 1995-01-12 1995-01-12 プログラム分割方法

Country Status (1)

Country Link
JP (1) JPH08194625A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100388202C (zh) * 2004-12-02 2008-05-14 国际商业机器公司 用于异构型多处理系统的计算机程序功能划分系统和方法
CN100388201C (zh) * 2004-12-02 2008-05-14 国际商业机器公司 用于多存储器多处理系统的程序代码大小划分系统和方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100388202C (zh) * 2004-12-02 2008-05-14 国际商业机器公司 用于异构型多处理系统的计算机程序功能划分系统和方法
CN100388201C (zh) * 2004-12-02 2008-05-14 国际商业机器公司 用于多存储器多处理系统的程序代码大小划分系统和方法

Similar Documents

Publication Publication Date Title
US5721928A (en) Method for partitioning computation
Fahringer Automatic performance prediction of parallel programs
Lim et al. Communication-free parallelization via affine transformations
Seinstra et al. A software architecture for user transparent parallel image processing
Chudik et al. Algorithms, software and hardware of parallel computers
US8661422B2 (en) Methods and apparatus for local memory compaction
JP2000112901A (ja) データ再配置方法
Fahringer Automatic performance prediction for parallel programs on massively parallel computers
CN114461221A (zh) 编译方法、编译装置、电子设备、存储介质
US11630986B2 (en) Graph conversion method
JP3047998B2 (ja) 並列計算機におけるプロセッサ割り当て方法、及び装置
Yadav et al. DISTAL: the distributed tensor algebra compiler
US7983890B2 (en) Method and apparatus performing automatic mapping for a multi-processor system
Shterenlikht et al. Fortran 2008 coarrays
CN113885871A (zh) 支持机器学习训练的专用后端代码生成方法及装置
Fegaras et al. Translation of array-based loops to distributed data-parallel programs
US20110271265A1 (en) Method of automatic generation of executable code for multi-core parallel processing
Koelbel et al. Semi-automatic process partitioning for parallel computation
Das et al. Index array flattening through program transformation
Li et al. Accelerating sparse cholesky factorization on sunway manycore architecture
Ponnusamy et al. Supporting irregular distributions using data-parallel languages
Kronawitter et al. Optimizations applied by the ExaStencils code generator
Benkner Vienna Fortran 90 and its compilation
Savin et al. Vectorization of flat loops of arbitrary structure using instructions AVX-512
JPH08194625A (ja) プログラム分割方法