JPH07244647A - 間接参照ループの並列化方法、並列化装置、並列実行方法および並列実行装置 - Google Patents
間接参照ループの並列化方法、並列化装置、並列実行方法および並列実行装置Info
- Publication number
- JPH07244647A JPH07244647A JP6062045A JP6204594A JPH07244647A JP H07244647 A JPH07244647 A JP H07244647A JP 6062045 A JP6062045 A JP 6062045A JP 6204594 A JP6204594 A JP 6204594A JP H07244647 A JPH07244647 A JP H07244647A
- Authority
- JP
- Japan
- Prior art keywords
- array
- list
- processor
- loop
- indirect reference
- 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.)
- Withdrawn
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【目的】 一般的な間接参照ループの並列実行および並
列化を可能にし、特に、間接参照が左辺にある場合の並
列実行および並列化を可能とすることにある。 【構成】 配列の添字が配列になっている間接参照が代
入文の左辺に現われるループに対して、最終イタレーシ
ョン配列の宣言文をプログラム内に挿入し、該最終イタ
レーション配列の初期化文を挿入し、参照されている配
列要素が自プロセッサにあるか他プロセッサにあるかを
判定する文を挿入し、最終イタレーション配列にイタレ
ーションインデックスを記録する文を挿入し、他プロセ
ッサにある場合に該配列要素についての代入情報を代入
リストに登録する文を挿入し、該代入リストをプロセッ
サ間で交換する代入リスト交換文を挿入し、該交換され
た代入リストを用いて他プロセッサの配列要素の値を自
プロセッサの配列要素に代入する文を挿入する。
列化を可能にし、特に、間接参照が左辺にある場合の並
列実行および並列化を可能とすることにある。 【構成】 配列の添字が配列になっている間接参照が代
入文の左辺に現われるループに対して、最終イタレーシ
ョン配列の宣言文をプログラム内に挿入し、該最終イタ
レーション配列の初期化文を挿入し、参照されている配
列要素が自プロセッサにあるか他プロセッサにあるかを
判定する文を挿入し、最終イタレーション配列にイタレ
ーションインデックスを記録する文を挿入し、他プロセ
ッサにある場合に該配列要素についての代入情報を代入
リストに登録する文を挿入し、該代入リストをプロセッ
サ間で交換する代入リスト交換文を挿入し、該交換され
た代入リストを用いて他プロセッサの配列要素の値を自
プロセッサの配列要素に代入する文を挿入する。
Description
【0001】
【産業上の利用分野】本発明は、逐次処理計算機用に記
述された間接参照ループを含むプログラムを、分散メモ
リ型の並列計算機上で実行可能なプログラムに変換する
プログラム並列化方法及び装置と、間接参照ループの並
列実行方法及び装置に関する。
述された間接参照ループを含むプログラムを、分散メモ
リ型の並列計算機上で実行可能なプログラムに変換する
プログラム並列化方法及び装置と、間接参照ループの並
列実行方法及び装置に関する。
【0002】
【従来の技術】複数のプロセッサから構成される並列計
算機システムにおいて、各プロセッサごとに固有のメモ
リを備えているものを、分散メモリ型並列計算機と呼ん
でいる。科学技術計算などに現われる大規模配列の処理
を分散メモリ型並列計算機で実行するときは、配列の各
要素を各プロセッサのメモリに分割して割り付け、各要
素に対する処理を各プロセッサで並列に実行するという
方式が、通常用いられる。このような方式を実現するプ
ログラムを作成する一つの方法は、並列化コンパイラを
用いることである。
算機システムにおいて、各プロセッサごとに固有のメモ
リを備えているものを、分散メモリ型並列計算機と呼ん
でいる。科学技術計算などに現われる大規模配列の処理
を分散メモリ型並列計算機で実行するときは、配列の各
要素を各プロセッサのメモリに分割して割り付け、各要
素に対する処理を各プロセッサで並列に実行するという
方式が、通常用いられる。このような方式を実現するプ
ログラムを作成する一つの方法は、並列化コンパイラを
用いることである。
【0003】並列化コンパイラは、逐次処理用言語で記
述されたプログラムを並列計算機用プログラムに変換す
る言語プロセッサである。分散メモリ型並列計算機用の
並列化コンパイラは、配列要素や、ループの繰り返し
(以後、ループの繰り返し単位をイタレーションと呼
ぶ。例えば、i=2のイタレーションという。)を各プ
ロセッサへ分割して割り当て、必要ならばデータ転送文
や同期文を挿入して、各プロセッサ用のプログラムを生
成する。あるイタレーションで参照される配列要素が自
プロセッサに割り当てられている場合に、その配列要素
参照を「local参照」と呼び、また、他プロセッサ
に割り当てられている場合に「remote参照」と呼
ぶ。remote参照については、プロセッサ間通信に
よって配列要素の値を転送する必要がある。そこで考慮
しなければならないのは、分散メモリ型並列計算機では
プロセッサ間通信の起動に非常に時間が掛かることであ
る。通常、CPU演算の数百ステップ以上の起動時間を
必要とする。したがって、個々のremote参照毎に
通信を行っていたのでは、起動オーバーヘッドのために
性能が非常に低下してしまう。そのため、分散メモリ型
並列計算機では、複数の配列要素をまとめて転送して通
信回数を低減する工夫が、非常に重要である。
述されたプログラムを並列計算機用プログラムに変換す
る言語プロセッサである。分散メモリ型並列計算機用の
並列化コンパイラは、配列要素や、ループの繰り返し
(以後、ループの繰り返し単位をイタレーションと呼
ぶ。例えば、i=2のイタレーションという。)を各プ
ロセッサへ分割して割り当て、必要ならばデータ転送文
や同期文を挿入して、各プロセッサ用のプログラムを生
成する。あるイタレーションで参照される配列要素が自
プロセッサに割り当てられている場合に、その配列要素
参照を「local参照」と呼び、また、他プロセッサ
に割り当てられている場合に「remote参照」と呼
ぶ。remote参照については、プロセッサ間通信に
よって配列要素の値を転送する必要がある。そこで考慮
しなければならないのは、分散メモリ型並列計算機では
プロセッサ間通信の起動に非常に時間が掛かることであ
る。通常、CPU演算の数百ステップ以上の起動時間を
必要とする。したがって、個々のremote参照毎に
通信を行っていたのでは、起動オーバーヘッドのために
性能が非常に低下してしまう。そのため、分散メモリ型
並列計算機では、複数の配列要素をまとめて転送して通
信回数を低減する工夫が、非常に重要である。
【0004】配列要素参照がa[i+1]のように単純
な線形添字を持つならば、remote参照される配列
要素の範囲をコンパイル時に決定でき、配列要素をまと
めて転送する文を比較的容易に生成できる。しかし、添
字がもっと複雑な場合には転送文の生成はより難しくな
る。特に問題となるのは以下に述べる間接参照の場合で
ある。間接参照とは添字が配列要素になっている配列要
素参照、例えばa[p[i]]のような参照である。間
接参照を含むループのことを間接参照ループと呼ぶ。間
接参照ループは、有限要素法などで生じる粗行列の計算
やピボット交換付きガウス消去法などの現実の問題に頻
繁に現われる。間接参照ループの特徴は、添字の値が実
行時まで不明なため、remote参照される要素をコ
ンパイル時にまとめてデータ転送文を生成することが不
可能なことである。そのため、間接参照ループは添字が
線形であるようなループに比べて並列化が困難である。
間接参照ループの並列化方法に関する従来技術としては
Koelbel and Mehrotra, ”C
ompiling Global Name−Spac
e Parallel Loops for Dist
ributedExecution”, IEEE T
rans. on Paralleland Dist
ributed Systems, Vol.2, N
o.4, pp.440−451, 1991年 があ
る。そこでは、間接参照ループを、次のような並列実行
方法に基づくループに並列化した。その並列実行方法と
は、remote参照される配列要素の位置情報を含む
リストを作成する「inspectorループ」を、プ
ログラムの最初で予め実行しておくものであった。添字
配列の値が全プログラムを通じて不変ならば、insp
ectorループは全プログラムを通じて1回だけ実行
すればよいことになる。後は、間接参照ループの度にそ
のリストに基づいてremote参照される要素をまと
めて転送することができる。また別の従来技術として
は、窪田、三吉、大野、森、中島、富田、”分散メモリ
型並列計算機の自動並列化コンパイラ−Inspect
or/Executorアルゴリズムの高速化−”,
並列処理シンポジウムJSPP’93, pp.47−
54 がある。そこでは、前述の従来技術に基づいて、
添字配列が置換になっているなどの特殊な場合にins
pectorループを高速化する方法が提案されてい
る。
な線形添字を持つならば、remote参照される配列
要素の範囲をコンパイル時に決定でき、配列要素をまと
めて転送する文を比較的容易に生成できる。しかし、添
字がもっと複雑な場合には転送文の生成はより難しくな
る。特に問題となるのは以下に述べる間接参照の場合で
ある。間接参照とは添字が配列要素になっている配列要
素参照、例えばa[p[i]]のような参照である。間
接参照を含むループのことを間接参照ループと呼ぶ。間
接参照ループは、有限要素法などで生じる粗行列の計算
やピボット交換付きガウス消去法などの現実の問題に頻
繁に現われる。間接参照ループの特徴は、添字の値が実
行時まで不明なため、remote参照される要素をコ
ンパイル時にまとめてデータ転送文を生成することが不
可能なことである。そのため、間接参照ループは添字が
線形であるようなループに比べて並列化が困難である。
間接参照ループの並列化方法に関する従来技術としては
Koelbel and Mehrotra, ”C
ompiling Global Name−Spac
e Parallel Loops for Dist
ributedExecution”, IEEE T
rans. on Paralleland Dist
ributed Systems, Vol.2, N
o.4, pp.440−451, 1991年 があ
る。そこでは、間接参照ループを、次のような並列実行
方法に基づくループに並列化した。その並列実行方法と
は、remote参照される配列要素の位置情報を含む
リストを作成する「inspectorループ」を、プ
ログラムの最初で予め実行しておくものであった。添字
配列の値が全プログラムを通じて不変ならば、insp
ectorループは全プログラムを通じて1回だけ実行
すればよいことになる。後は、間接参照ループの度にそ
のリストに基づいてremote参照される要素をまと
めて転送することができる。また別の従来技術として
は、窪田、三吉、大野、森、中島、富田、”分散メモリ
型並列計算機の自動並列化コンパイラ−Inspect
or/Executorアルゴリズムの高速化−”,
並列処理シンポジウムJSPP’93, pp.47−
54 がある。そこでは、前述の従来技術に基づいて、
添字配列が置換になっているなどの特殊な場合にins
pectorループを高速化する方法が提案されてい
る。
【0005】
【発明が解決しようとする課題】従来の方法では、並列
化対象としている間接参照ループに特殊な条件があっ
た。すなわち、添字配列の値がプログラムを通じて不変
であることや、添字配列の値が置換になっていることな
どの制限があった。また、上記の従来技術には、並列化
された間接参照ループの形は示されていたが、間接参照
ループをそのような形に変換するための並列化手順は、
明確に述べられていなかった。さらに、従来の方法で
は、間接参照が代入文の左辺にある場合に生じる問題に
対処していなかった。すなわち、 for(i=0; i<N; i++) a[p[i]]=b[i]; のようなループ(ここで、上記文はC言語によるもので
あり、i++はiを順次増加することを意味する。ま
た、式の右辺は既知の値であり、左辺は、いわば未知の
値であり、右辺の既知の値によって決まる。)では、異
なるiに対してp[i]が同じ値を取ったときに、異な
るイタレーションが配列aの同一の要素を書き換える。
それらのうち、最後のイタレーションによって書かれた
値のみがループ終了後の値として残る。例えば、a[p
[2]]=b[2]でp[2]=12であり、a[p
[6]]=b[6]でp[6]=12であったとする
と、a[12]の値としてはb[6]が残る。このルー
プを並列実行する場合は、ループ終了後の各配列要素が
並列実行ではない逐次実行のときと同じ値を持つように
しなければならないが、従来の方法は、その問題に対処
していなかった。本発明の目的は、一般的な間接参照ル
ープの並列実行および並列化を可能とすることにある。
特に、間接参照が左辺にある場合の並列実行および並列
化を可能とすることにある。
化対象としている間接参照ループに特殊な条件があっ
た。すなわち、添字配列の値がプログラムを通じて不変
であることや、添字配列の値が置換になっていることな
どの制限があった。また、上記の従来技術には、並列化
された間接参照ループの形は示されていたが、間接参照
ループをそのような形に変換するための並列化手順は、
明確に述べられていなかった。さらに、従来の方法で
は、間接参照が代入文の左辺にある場合に生じる問題に
対処していなかった。すなわち、 for(i=0; i<N; i++) a[p[i]]=b[i]; のようなループ(ここで、上記文はC言語によるもので
あり、i++はiを順次増加することを意味する。ま
た、式の右辺は既知の値であり、左辺は、いわば未知の
値であり、右辺の既知の値によって決まる。)では、異
なるiに対してp[i]が同じ値を取ったときに、異な
るイタレーションが配列aの同一の要素を書き換える。
それらのうち、最後のイタレーションによって書かれた
値のみがループ終了後の値として残る。例えば、a[p
[2]]=b[2]でp[2]=12であり、a[p
[6]]=b[6]でp[6]=12であったとする
と、a[12]の値としてはb[6]が残る。このルー
プを並列実行する場合は、ループ終了後の各配列要素が
並列実行ではない逐次実行のときと同じ値を持つように
しなければならないが、従来の方法は、その問題に対処
していなかった。本発明の目的は、一般的な間接参照ル
ープの並列実行および並列化を可能とすることにある。
特に、間接参照が左辺にある場合の並列実行および並列
化を可能とすることにある。
【0006】
【課題を解決するための手段】逐次処理プログラムまた
は共有メモリ型並列計算機用プログラムを分散メモリ型
並列計算機プログラムに変換するプログラム並列化方法
において、配列の添字が配列になっている間接参照を含
むループに対して、参照されている配列要素が自プロセ
ッサにあるか他プロセッサにあるかを判定する文を、該
間接参照ループ内に挿入するステップと、参照されてい
る配列要素が他プロセッサにある場合に該配列要素につ
いての情報をリストに登録する文を、該間接参照ループ
内に挿入するステップと、該リストをプロセッサ間で交
換するリスト交換文を、該間接参照ループの後に挿入す
るステップと、該交換されたリストを用いて他プロセッ
サの配列要素の値を自プロセッサの配列要素に代入する
文を、該リスト交換文の後に挿入するステップとを含む
ようにしている。また、配列の添字が配列になっている
間接参照ループを分散メモリ型並列計算機で並列実行す
る方法において、参照されている配列要素が自プロセッ
サにあるか他プロセッサにあるかを該間接参照ループ内
で判定するステップと、自プロセッサにある場合に該配
列要素への代入をするステップと、他プロセッサにある
場合に該配列要素についての情報を該間接参照ループ内
でリストに登録するステップと、該間接参照ループ終了
後に該リストをプロセッサ間で交換するステップと、該
交換されたリストを用いて他プロセッサの配列要素の値
を自プロセッサの配列要素に代入するステップとを含む
ようにしている。また、逐次処理プログラムまたは共有
メモリ型並列計算機用プログラムを分散メモリ型並列計
算機プログラムに変換するプログラム並列化装置におい
て、配列の添字が配列になっている間接参照を含むルー
プに対して、参照されている配列要素が自プロセッサに
あるか他プロセッサにあるかを判定する文を、該間接参
照ループ内に挿入する手段と、参照されている配列要素
が他プロセッサにある場合に該配列要素についての情報
をリストに登録する文を、該間接参照ループ内に挿入す
る手段と、該リストをプロセッサ間で交換するリスト交
換文を、該間接参照ループの後に挿入する手段と、該交
換されたリストを用いて他プロセッサの配列要素の値を
自プロセッサの配列要素に代入する文を、該リスト交換
文の後に挿入する手段とを備えるようにしている。ま
た、配列の添字が配列になっている間接参照ループを分
散メモリ型並列計算機で並列実行する装置において、参
照されている配列要素が自プロセッサにあるか他プロセ
ッサにあるかを判定する手段と、自プロセッサにある場
合に該配列要素への代入をする手段と、他プロセッサに
ある場合に該配列要素についての情報をリストに登録す
る手段と、該リストをプロセッサ間で交換する手段と、
該交換されたリストを用いて他プロセッサの配列要素の
値を自プロセッサの配列要素に代入する手段とを備える
ようにしている。また、プログラム並列化方法におい
て、配列の添字が配列になっている間接参照が代入文の
右辺に現われるループに対して、参照されている配列要
素が自プロセッサにあるか他プロセッサにあるかを判定
する文を、該間接参照ループ内に挿入するステップと、
他プロセッサにある場合に該配列要素についての位置情
報を位置リストに登録する文を、該間接参照ループ内に
挿入するステップと、該位置リストをプロセッサ間で交
換する位置リスト交換文を、該間接参照ループの後に挿
入するステップと、該交換された位置リストを用いて、
他プロセッサから参照されている配列要素の値を含む値
リストを作成する文を、該位置リスト交換文の後に挿入
するステップと、該値リストをプロセッサ間で交換する
値リスト交換文を、該値リスト作成文の後に挿入するス
テップと、該交換された値リストを用いて他プロセッサ
の配列要素の値を自プロセッサの配列要素に代入する文
を、該値リスト交換文の後に挿入するステップとを含む
ようにしている。また、並列実行する方法において、参
照されている配列要素が自プロセッサにあるか他プロセ
ッサにあるかを、該間接参照ループ内で判定するステッ
プと、自プロセッサにある場合に該配列要素への代入を
するステップと、他プロセッサにある場合に該配列要素
についての位置情報を該間接参照ループ内で位置リスト
に登録するステップと、該間接参照ループ終了後に該位
置リストをプロセッサ間で交換するステップと、該交換
された位置リストを用いて、他プロセッサから参照され
ている配列要素の値を含む値リストを作成するステップ
と、該値リストをプロセッサ間で交換するステップと、
該交換された値リストを用いて他プロセッサの配列要素
の値を自プロセッサの配列要素に代入するステップとを
含むようにしている。また、プログラム並列化方法にお
いて、配列の添字が配列になっている間接参照が代入文
の左辺に現われるループに対して、間接参照されている
配列の要素を最後に書き換えたイタレーションのインデ
ックスを記録する最終イタレーション配列の宣言文をプ
ログラム内に挿入するステップと、該最終イタレーショ
ン配列の初期化文を該間接参照ループの前に挿入するス
テップと、参照されている配列要素が自プロセッサにあ
るか他プロセッサにあるかを判定する文を、該間接参照
ループ内に挿入するステップと、最終イタレーション配
列にイタレーションインデックスを記録する文を、該間
接参照ループ内に挿入するステップと、他プロセッサに
ある場合に該配列要素についての代入情報を代入リスト
に登録する文を、該間接参照ループ内に挿入するステッ
プと、該代入リストをプロセッサ間で交換する代入リス
ト交換文を、該間接参照ループの後に挿入するステップ
と、該交換された代入リストを用いて他プロセッサの配
列要素の値を自プロセッサの配列要素に代入する文を、
該代入リスト交換文の後に挿入するステップとを含むよ
うにしている。また、プログラム並列化方法において、
配列の添字が配列になっている間接参照が加算代入文の
左辺に現われるループに対して、参照されている配列要
素が自プロセッサにあるか他プロセッサにあるかを判定
する文を、該間接参照ループ内に挿入するステップと、
他プロセッサにある場合に該配列要素についての代入情
報を代入リストに登録する文を、該間接参照ループ内に
挿入するステップと、該代入リストをプロセッサ間で交
換する代入リスト交換文を、該間接参照ループの後に挿
入するステップと、該交換された代入リストを用いて他
プロセッサの配列要素の値を自プロセッサの配列要素に
加算代入する文を、該代入リスト交換文の後に挿入する
ステップとを含むようにしている。また、並列実行する
方法において、参照されている配列要素が自プロセッサ
にあるか他プロセッサにあるかを、該間接参照ループ内
で判定するステップと、自プロセッサにある場合に該配
列要素への加算代入をするステップと、他プロセッサに
ある場合に該配列要素についての代入情報を該間接参照
ループ内で代入リストに登録するステップと、該間接参
照ループ終了後に該代入リストをプロセッサ間で交換す
るステップと、該交換された代入リストを用いて他プロ
セッサの配列要素の値を自プロセッサの配列要素に加算
代入するステップとを含むようにしている。
は共有メモリ型並列計算機用プログラムを分散メモリ型
並列計算機プログラムに変換するプログラム並列化方法
において、配列の添字が配列になっている間接参照を含
むループに対して、参照されている配列要素が自プロセ
ッサにあるか他プロセッサにあるかを判定する文を、該
間接参照ループ内に挿入するステップと、参照されてい
る配列要素が他プロセッサにある場合に該配列要素につ
いての情報をリストに登録する文を、該間接参照ループ
内に挿入するステップと、該リストをプロセッサ間で交
換するリスト交換文を、該間接参照ループの後に挿入す
るステップと、該交換されたリストを用いて他プロセッ
サの配列要素の値を自プロセッサの配列要素に代入する
文を、該リスト交換文の後に挿入するステップとを含む
ようにしている。また、配列の添字が配列になっている
間接参照ループを分散メモリ型並列計算機で並列実行す
る方法において、参照されている配列要素が自プロセッ
サにあるか他プロセッサにあるかを該間接参照ループ内
で判定するステップと、自プロセッサにある場合に該配
列要素への代入をするステップと、他プロセッサにある
場合に該配列要素についての情報を該間接参照ループ内
でリストに登録するステップと、該間接参照ループ終了
後に該リストをプロセッサ間で交換するステップと、該
交換されたリストを用いて他プロセッサの配列要素の値
を自プロセッサの配列要素に代入するステップとを含む
ようにしている。また、逐次処理プログラムまたは共有
メモリ型並列計算機用プログラムを分散メモリ型並列計
算機プログラムに変換するプログラム並列化装置におい
て、配列の添字が配列になっている間接参照を含むルー
プに対して、参照されている配列要素が自プロセッサに
あるか他プロセッサにあるかを判定する文を、該間接参
照ループ内に挿入する手段と、参照されている配列要素
が他プロセッサにある場合に該配列要素についての情報
をリストに登録する文を、該間接参照ループ内に挿入す
る手段と、該リストをプロセッサ間で交換するリスト交
換文を、該間接参照ループの後に挿入する手段と、該交
換されたリストを用いて他プロセッサの配列要素の値を
自プロセッサの配列要素に代入する文を、該リスト交換
文の後に挿入する手段とを備えるようにしている。ま
た、配列の添字が配列になっている間接参照ループを分
散メモリ型並列計算機で並列実行する装置において、参
照されている配列要素が自プロセッサにあるか他プロセ
ッサにあるかを判定する手段と、自プロセッサにある場
合に該配列要素への代入をする手段と、他プロセッサに
ある場合に該配列要素についての情報をリストに登録す
る手段と、該リストをプロセッサ間で交換する手段と、
該交換されたリストを用いて他プロセッサの配列要素の
値を自プロセッサの配列要素に代入する手段とを備える
ようにしている。また、プログラム並列化方法におい
て、配列の添字が配列になっている間接参照が代入文の
右辺に現われるループに対して、参照されている配列要
素が自プロセッサにあるか他プロセッサにあるかを判定
する文を、該間接参照ループ内に挿入するステップと、
他プロセッサにある場合に該配列要素についての位置情
報を位置リストに登録する文を、該間接参照ループ内に
挿入するステップと、該位置リストをプロセッサ間で交
換する位置リスト交換文を、該間接参照ループの後に挿
入するステップと、該交換された位置リストを用いて、
他プロセッサから参照されている配列要素の値を含む値
リストを作成する文を、該位置リスト交換文の後に挿入
するステップと、該値リストをプロセッサ間で交換する
値リスト交換文を、該値リスト作成文の後に挿入するス
テップと、該交換された値リストを用いて他プロセッサ
の配列要素の値を自プロセッサの配列要素に代入する文
を、該値リスト交換文の後に挿入するステップとを含む
ようにしている。また、並列実行する方法において、参
照されている配列要素が自プロセッサにあるか他プロセ
ッサにあるかを、該間接参照ループ内で判定するステッ
プと、自プロセッサにある場合に該配列要素への代入を
するステップと、他プロセッサにある場合に該配列要素
についての位置情報を該間接参照ループ内で位置リスト
に登録するステップと、該間接参照ループ終了後に該位
置リストをプロセッサ間で交換するステップと、該交換
された位置リストを用いて、他プロセッサから参照され
ている配列要素の値を含む値リストを作成するステップ
と、該値リストをプロセッサ間で交換するステップと、
該交換された値リストを用いて他プロセッサの配列要素
の値を自プロセッサの配列要素に代入するステップとを
含むようにしている。また、プログラム並列化方法にお
いて、配列の添字が配列になっている間接参照が代入文
の左辺に現われるループに対して、間接参照されている
配列の要素を最後に書き換えたイタレーションのインデ
ックスを記録する最終イタレーション配列の宣言文をプ
ログラム内に挿入するステップと、該最終イタレーショ
ン配列の初期化文を該間接参照ループの前に挿入するス
テップと、参照されている配列要素が自プロセッサにあ
るか他プロセッサにあるかを判定する文を、該間接参照
ループ内に挿入するステップと、最終イタレーション配
列にイタレーションインデックスを記録する文を、該間
接参照ループ内に挿入するステップと、他プロセッサに
ある場合に該配列要素についての代入情報を代入リスト
に登録する文を、該間接参照ループ内に挿入するステッ
プと、該代入リストをプロセッサ間で交換する代入リス
ト交換文を、該間接参照ループの後に挿入するステップ
と、該交換された代入リストを用いて他プロセッサの配
列要素の値を自プロセッサの配列要素に代入する文を、
該代入リスト交換文の後に挿入するステップとを含むよ
うにしている。また、プログラム並列化方法において、
配列の添字が配列になっている間接参照が加算代入文の
左辺に現われるループに対して、参照されている配列要
素が自プロセッサにあるか他プロセッサにあるかを判定
する文を、該間接参照ループ内に挿入するステップと、
他プロセッサにある場合に該配列要素についての代入情
報を代入リストに登録する文を、該間接参照ループ内に
挿入するステップと、該代入リストをプロセッサ間で交
換する代入リスト交換文を、該間接参照ループの後に挿
入するステップと、該交換された代入リストを用いて他
プロセッサの配列要素の値を自プロセッサの配列要素に
加算代入する文を、該代入リスト交換文の後に挿入する
ステップとを含むようにしている。また、並列実行する
方法において、参照されている配列要素が自プロセッサ
にあるか他プロセッサにあるかを、該間接参照ループ内
で判定するステップと、自プロセッサにある場合に該配
列要素への加算代入をするステップと、他プロセッサに
ある場合に該配列要素についての代入情報を該間接参照
ループ内で代入リストに登録するステップと、該間接参
照ループ終了後に該代入リストをプロセッサ間で交換す
るステップと、該交換された代入リストを用いて他プロ
セッサの配列要素の値を自プロセッサの配列要素に加算
代入するステップとを含むようにしている。
【0007】
【作用】本発明の並列実行方法によれば、間接参照ルー
プの実行中にremote参照に関する情報のリストを
作成するので、添字配列がプログラム内で変化する場合
でも並列実行可能である。また、左辺に間接参照がある
場合でも、配列要素を書き換えたイタレーションのイン
デックスが記録されているので、最後のイタレーション
によって書き換えられた値のみを、ループ終了後に残す
ことができる。また、本発明の並列化方法によれば、上
記の並列実行方法を実現するプログラムが生成できる。
プの実行中にremote参照に関する情報のリストを
作成するので、添字配列がプログラム内で変化する場合
でも並列実行可能である。また、左辺に間接参照がある
場合でも、配列要素を書き換えたイタレーションのイン
デックスが記録されているので、最後のイタレーション
によって書き換えられた値のみを、ループ終了後に残す
ことができる。また、本発明の並列化方法によれば、上
記の並列実行方法を実現するプログラムが生成できる。
【0008】
【実施例】以下、図面を用いて本発明の実施例を説明す
る。図1は、本発明の一実施例に係わるプログラム並列
化方法の手順を示すフローチャートである。図1を参照
してプログラム並列化について説明する前に、本発明に
より並列化されたプログラムが動作する並列計算機の構
成、および、その並列計算機上での本発明による間接参
照ループの並列実行方法について説明する。図2は本発
明の適用対象である分散メモリ型並列計算機の構成の一
例である。この並列計算機は、本発明のプログラム並列
化方法によって並列化されたプログラムを実行する。並
列計算機は複数のプロセッサ201から20n、各プロ
セッサに付随するローカルメモリ211から21n、そ
してそれらを結合する相互結合ネットワーク22から構
成される。各ローカルメモリ上のデータは、それが付随
するプロセッサからは直接参照できるが、他のプロセッ
サからは直接参照することはできない。あるプロセッサ
に付随するデータを他のプロセッサから参照するために
は、そのデータは相互結合ネットワーク22を通じて転
送されなければならない。
る。図1は、本発明の一実施例に係わるプログラム並列
化方法の手順を示すフローチャートである。図1を参照
してプログラム並列化について説明する前に、本発明に
より並列化されたプログラムが動作する並列計算機の構
成、および、その並列計算機上での本発明による間接参
照ループの並列実行方法について説明する。図2は本発
明の適用対象である分散メモリ型並列計算機の構成の一
例である。この並列計算機は、本発明のプログラム並列
化方法によって並列化されたプログラムを実行する。並
列計算機は複数のプロセッサ201から20n、各プロ
セッサに付随するローカルメモリ211から21n、そ
してそれらを結合する相互結合ネットワーク22から構
成される。各ローカルメモリ上のデータは、それが付随
するプロセッサからは直接参照できるが、他のプロセッ
サからは直接参照することはできない。あるプロセッサ
に付随するデータを他のプロセッサから参照するために
は、そのデータは相互結合ネットワーク22を通じて転
送されなければならない。
【0009】図3に間接参照ループの一例を示す。1行
目は実数型の10000個の要素から成る配列a,bの
宣言文、2行目は整数型の10000個の要素から成る
配列pの宣言文である。3行目から5行目までが間接参
照ループである。4行目の代入文の右辺の配列bの添字
が配列pになっている。このループを分散メモリ型並列
計算機で実行する場合、ループのイタレーションと配列
要素を分割して各プロセッサに割り当てる。例えば、 プロセッサ1: イタレーション0から99、配列a
[0]からa[99]、b[0]からb[99]、p
[0]からp[99] プロセッサ2: イタレーション100から199、配
列a[100]からa[199]、b[100]からb
[199]、p[100]からp[199] 以下同様 のように割り当てる。ここでイタレーションの番号は変
数iの値で表している。このように割り当てれば、ある
イタレーションiを実行するときに、配列要素参照a
[i]とp[i]は必ず自プロセッサに割り当てられて
いる。すなわちlocal参照である。しかし、配列要
素参照b[p[i]]については、自プロセッサに割り
当てられているとは限らない。すなわちremote参
照の可能性がある。b[p[i]]がlocal参照か
remote参照かはp[i]の値によって決まり、プ
ログラムの実行時まで確定しない。この状況を考慮しな
がら、この間接参照ループの並列実行方法について説明
する。なお、以下では、配列要素が割り当てられている
プロセッサを「所有者」と呼び、その要素を参照してい
るイタレーションが割り当てられているプロセッサを
「参照者」と呼ぶ(例えば、b[p[2]]=b[12
0]のとき、要素b[120]を参照しているi=2の
イタレーションが割り当てられているプロセッサはプロ
セッサ1であり、この場合のプロセッサ1は参照者であ
る。)。また、間接参照されている配列要素のインデッ
クス、すなわち、p[i]の値(例えば、先の例でp
[2]の値120)のことを「所有者インデックス」、
イタレーションのインデックスi(例えば、先の例でi
=2)のことを「参照者インデックス」と呼ぶ。
目は実数型の10000個の要素から成る配列a,bの
宣言文、2行目は整数型の10000個の要素から成る
配列pの宣言文である。3行目から5行目までが間接参
照ループである。4行目の代入文の右辺の配列bの添字
が配列pになっている。このループを分散メモリ型並列
計算機で実行する場合、ループのイタレーションと配列
要素を分割して各プロセッサに割り当てる。例えば、 プロセッサ1: イタレーション0から99、配列a
[0]からa[99]、b[0]からb[99]、p
[0]からp[99] プロセッサ2: イタレーション100から199、配
列a[100]からa[199]、b[100]からb
[199]、p[100]からp[199] 以下同様 のように割り当てる。ここでイタレーションの番号は変
数iの値で表している。このように割り当てれば、ある
イタレーションiを実行するときに、配列要素参照a
[i]とp[i]は必ず自プロセッサに割り当てられて
いる。すなわちlocal参照である。しかし、配列要
素参照b[p[i]]については、自プロセッサに割り
当てられているとは限らない。すなわちremote参
照の可能性がある。b[p[i]]がlocal参照か
remote参照かはp[i]の値によって決まり、プ
ログラムの実行時まで確定しない。この状況を考慮しな
がら、この間接参照ループの並列実行方法について説明
する。なお、以下では、配列要素が割り当てられている
プロセッサを「所有者」と呼び、その要素を参照してい
るイタレーションが割り当てられているプロセッサを
「参照者」と呼ぶ(例えば、b[p[2]]=b[12
0]のとき、要素b[120]を参照しているi=2の
イタレーションが割り当てられているプロセッサはプロ
セッサ1であり、この場合のプロセッサ1は参照者であ
る。)。また、間接参照されている配列要素のインデッ
クス、すなわち、p[i]の値(例えば、先の例でp
[2]の値120)のことを「所有者インデックス」、
イタレーションのインデックスi(例えば、先の例でi
=2)のことを「参照者インデックス」と呼ぶ。
【0010】図5は、図2の並列計算機上での、図3の
間接参照ループの本発明による並列実行方法の手順を示
すフローチャートである。本手順は、並列計算機の各プ
ロセッサ201から20nが実行するものである。ま
ず、各プロセッサは、自身に割り当てられたイタレーシ
ョンの各々について、ステップ400からステップ40
3の処理を行う。全イタレーションについての処理が終
了した後で、ステップ404からステップ407の処理
を実行する。以下では各ステップの処理の詳細を述べ
る。ステップ400は自身に割り当てられたイタレーシ
ョンのうち、未処理のものがまだあるかどうかの判定で
ある。未処理のイタレーションがあればステップ401
に進み、以下、そのイタレーションについての処理を行
う。ステップ401で間接参照b[p[i]]がloc
al参照かremote参照かを判定する。ループの実
行時には添字配列p[i]の値は確定しているのでこの
判定が可能である。もしlocal参照ならばステップ
402に進み、remote参照ならばステップ403
に進む。ステップ402でlocal参照についての代
入を実行する。local参照されている配列要素は自
プロセッサ上にあるので、この代入に際してプロセッサ
間通信は必要ない。ステップ403ではremote参
照についての位置情報を位置リストに登録する。ここで
位置情報とは、要素b[p[i]]の所有者のプロセッ
サ番号(例えば、b[p[2]]=b[120]であれ
ば、所有者のプロセッサ番号は2である。)、所有者イ
ンデックスp[i]の値(例えば、p[2]=120な
ら値は120である。)、および参照者インデックスi
の値(例えば、b[p[2]]なら、この値は2であ
る。)である。位置リストの構造は図6を用いて後述す
る。ステップ400で未処理のイタレーションがもうな
ければステップ404に進み、以下、位置リストに基づ
いてremote参照の後処理をする。ステップ404
に進んだ時点では、各プロセッサの位置リストには、自
身が参照者であるようなremote参照についての位
置情報が登録されている。これを「参照者側位置リス
ト」と呼ぶ。ステップ404では、remote参照の
位置情報が参照者から所有者に渡るように、全プロセッ
サ間で位置リストを交換する。このとき参照者情報も渡
される。交換方法としては、例えば、Johnsson
and Ho, ”Optimum Broadca
sting and Personalized Co
mmunication in Hypercube
s”, IEEE Trans. on Comput
ers, Vol.38, No.9, pp.124
9−1268, 1989年 に述べられている全対全
通信などの方法を用いれば良い。この交換により、各プ
ロセッサは、自身が所有者であるようなremote参
照についての位置リストを持つようになる。これを「所
有者側位置リスト」と呼ぶ。ステップ405では、所有
者側位置リストに基づいて、自身が所有者となっている
remote参照の値を含む値リスト(これを「所有者
側値リスト」と呼ぶ)を作成する。値リストの構造は図
7を用いて後述する。ステップ406で、remote
参照の値が所有者から参照者に渡るように、値リストを
全プロセッサ間で交換する。この交換により、各プロセ
ッサは、自身が参照者であるようなremote参照に
ついての値リストを持つようになる。これを「参照者側
値リスト」と呼ぶ。ステップ407で、参照者側値リス
トに基づいて、自身が参照者であるremote参照に
ついて、b[p[i]]の値を左辺の配列要素a[i]
に代入する。以上の処理により、図3の間接参照ループ
の並列実行が完了した。
間接参照ループの本発明による並列実行方法の手順を示
すフローチャートである。本手順は、並列計算機の各プ
ロセッサ201から20nが実行するものである。ま
ず、各プロセッサは、自身に割り当てられたイタレーシ
ョンの各々について、ステップ400からステップ40
3の処理を行う。全イタレーションについての処理が終
了した後で、ステップ404からステップ407の処理
を実行する。以下では各ステップの処理の詳細を述べ
る。ステップ400は自身に割り当てられたイタレーシ
ョンのうち、未処理のものがまだあるかどうかの判定で
ある。未処理のイタレーションがあればステップ401
に進み、以下、そのイタレーションについての処理を行
う。ステップ401で間接参照b[p[i]]がloc
al参照かremote参照かを判定する。ループの実
行時には添字配列p[i]の値は確定しているのでこの
判定が可能である。もしlocal参照ならばステップ
402に進み、remote参照ならばステップ403
に進む。ステップ402でlocal参照についての代
入を実行する。local参照されている配列要素は自
プロセッサ上にあるので、この代入に際してプロセッサ
間通信は必要ない。ステップ403ではremote参
照についての位置情報を位置リストに登録する。ここで
位置情報とは、要素b[p[i]]の所有者のプロセッ
サ番号(例えば、b[p[2]]=b[120]であれ
ば、所有者のプロセッサ番号は2である。)、所有者イ
ンデックスp[i]の値(例えば、p[2]=120な
ら値は120である。)、および参照者インデックスi
の値(例えば、b[p[2]]なら、この値は2であ
る。)である。位置リストの構造は図6を用いて後述す
る。ステップ400で未処理のイタレーションがもうな
ければステップ404に進み、以下、位置リストに基づ
いてremote参照の後処理をする。ステップ404
に進んだ時点では、各プロセッサの位置リストには、自
身が参照者であるようなremote参照についての位
置情報が登録されている。これを「参照者側位置リス
ト」と呼ぶ。ステップ404では、remote参照の
位置情報が参照者から所有者に渡るように、全プロセッ
サ間で位置リストを交換する。このとき参照者情報も渡
される。交換方法としては、例えば、Johnsson
and Ho, ”Optimum Broadca
sting and Personalized Co
mmunication in Hypercube
s”, IEEE Trans. on Comput
ers, Vol.38, No.9, pp.124
9−1268, 1989年 に述べられている全対全
通信などの方法を用いれば良い。この交換により、各プ
ロセッサは、自身が所有者であるようなremote参
照についての位置リストを持つようになる。これを「所
有者側位置リスト」と呼ぶ。ステップ405では、所有
者側位置リストに基づいて、自身が所有者となっている
remote参照の値を含む値リスト(これを「所有者
側値リスト」と呼ぶ)を作成する。値リストの構造は図
7を用いて後述する。ステップ406で、remote
参照の値が所有者から参照者に渡るように、値リストを
全プロセッサ間で交換する。この交換により、各プロセ
ッサは、自身が参照者であるようなremote参照に
ついての値リストを持つようになる。これを「参照者側
値リスト」と呼ぶ。ステップ407で、参照者側値リス
トに基づいて、自身が参照者であるremote参照に
ついて、b[p[i]]の値を左辺の配列要素a[i]
に代入する。以上の処理により、図3の間接参照ループ
の並列実行が完了した。
【0011】次に、この並列実行方法で用いた位置リス
トや値リストの構造を説明する。図6は、参照者側位置
リストの構造を示す。所有者ごとにエントリを持つヘッ
ダ500と、その各エントリからポインタでつながるリ
スト本体501によって構成される。remote参照
の各々に対して、リスト本体501の1エントリが対応
する。リスト本体501は所有者インデックスと参照者
インデックスを表す2個のフィールド504および50
5から成る。ヘッダ500には、所有者のプロセッサ番
号を表すフィールド502と、リスト本体に登録されて
いる対の数(登録数)を示すフィールド503が含まれ
る。例えば、図6の位置リストの一番最初の項目(斜線
部分)は、プロセッサ4番の持つ配列要素b[66]の
値が、このプロセッサの配列要素a[5]に代入される
べきことを表している。なお、所有者側位置リストの構
造は、参照者側位置リストの構造とほとんど同じである
が、ヘッダ500内の所有者フィールド502が参照者
を表すフィールドに置き換わっている点だけが異なる。
トや値リストの構造を説明する。図6は、参照者側位置
リストの構造を示す。所有者ごとにエントリを持つヘッ
ダ500と、その各エントリからポインタでつながるリ
スト本体501によって構成される。remote参照
の各々に対して、リスト本体501の1エントリが対応
する。リスト本体501は所有者インデックスと参照者
インデックスを表す2個のフィールド504および50
5から成る。ヘッダ500には、所有者のプロセッサ番
号を表すフィールド502と、リスト本体に登録されて
いる対の数(登録数)を示すフィールド503が含まれ
る。例えば、図6の位置リストの一番最初の項目(斜線
部分)は、プロセッサ4番の持つ配列要素b[66]の
値が、このプロセッサの配列要素a[5]に代入される
べきことを表している。なお、所有者側位置リストの構
造は、参照者側位置リストの構造とほとんど同じである
が、ヘッダ500内の所有者フィールド502が参照者
を表すフィールドに置き換わっている点だけが異なる。
【0012】図7は、所有者側値リストの構造を示す。
位置リストと同様に、ヘッダ510とリスト本体511
から構成される。ヘッダ510のエントリは参照者ごと
に設ける。また、リスト本体511の内容は、転送すべ
き配列要素の値である。値の順序は、位置リスト内のイ
ンデックスの順序と一致するようにする。例えば、図7
の値リストの網かけ部分は、値13.2が、プロセッサ
5番で参照されることを表している。13.2という値
が、参照者側のどの配列要素に代入されるかは、値リス
トが参照者側に送られたときに、参照者側の位置リスト
との順序対応によって分かる。なお、参照者側値リスト
の構造は、所有者者側値リストの構造とほとんど同じで
あるが、ヘッダ510内の参照者フィールド512が所
有者を表すフィールドに置き換わっている点だけが異な
る。以上で、本発明による間接参照ループの並列実行方
法の説明を終わる。
位置リストと同様に、ヘッダ510とリスト本体511
から構成される。ヘッダ510のエントリは参照者ごと
に設ける。また、リスト本体511の内容は、転送すべ
き配列要素の値である。値の順序は、位置リスト内のイ
ンデックスの順序と一致するようにする。例えば、図7
の値リストの網かけ部分は、値13.2が、プロセッサ
5番で参照されることを表している。13.2という値
が、参照者側のどの配列要素に代入されるかは、値リス
トが参照者側に送られたときに、参照者側の位置リスト
との順序対応によって分かる。なお、参照者側値リスト
の構造は、所有者者側値リストの構造とほとんど同じで
あるが、ヘッダ510内の参照者フィールド512が所
有者を表すフィールドに置き換わっている点だけが異な
る。以上で、本発明による間接参照ループの並列実行方
法の説明を終わる。
【0013】次に、本発明による間接参照ループの並列
実行方法のための並列実行装置について説明する。図8
は、そのような並列実行装置の一例を表す。各プロセッ
サ20内に、演算部230、remote参照判定部2
31、位置情報登録部232、ネットワーク制御部23
3、値リスト作成部234、remote参照代入部2
35、参照者側位置リスト240、所有者側位置リスト
241、所有者側値リスト242、参照者側値リスト2
43を含む。各リスト240から243はローカルメモ
リ21内に置くこともできる。remote参照判定部
231は図5のステップ401の処理を行う。すなわ
ち、演算部230から間接参照の所有者インデックスp
[i]を受け取り、それがlocal参照かremot
e参照かを判定する。位置情報登録部232は、図5の
ステップ403の処理を行う。すなわち、remote
参照についての位置情報を参照者側位置リスト240に
登録する。ネットワーク制御部233は図5のステップ
404およびステップ406の処理を行う。すなわち、
相互結合ネットワーク22を通じて、位置リスト240
および241や値リスト242および243をプロセッ
サ間で交換する。値リスト作成部234は、図5のステ
ップ405の処理を行う。すなわち、所有者側位置リス
ト241に基づいて所有者側値リスト242を作成す
る。演算部230は通常の演算処理を行う。これには、
図5のステップ402におけるlocal参照の代入実
行を含む。remote参照代入部235は図5のステ
ップ407の処理を行う。すなわち、参照者側値リスト
243用いて、自身が参照者であるremote参照に
ついての代入を実行する。
実行方法のための並列実行装置について説明する。図8
は、そのような並列実行装置の一例を表す。各プロセッ
サ20内に、演算部230、remote参照判定部2
31、位置情報登録部232、ネットワーク制御部23
3、値リスト作成部234、remote参照代入部2
35、参照者側位置リスト240、所有者側位置リスト
241、所有者側値リスト242、参照者側値リスト2
43を含む。各リスト240から243はローカルメモ
リ21内に置くこともできる。remote参照判定部
231は図5のステップ401の処理を行う。すなわ
ち、演算部230から間接参照の所有者インデックスp
[i]を受け取り、それがlocal参照かremot
e参照かを判定する。位置情報登録部232は、図5の
ステップ403の処理を行う。すなわち、remote
参照についての位置情報を参照者側位置リスト240に
登録する。ネットワーク制御部233は図5のステップ
404およびステップ406の処理を行う。すなわち、
相互結合ネットワーク22を通じて、位置リスト240
および241や値リスト242および243をプロセッ
サ間で交換する。値リスト作成部234は、図5のステ
ップ405の処理を行う。すなわち、所有者側位置リス
ト241に基づいて所有者側値リスト242を作成す
る。演算部230は通常の演算処理を行う。これには、
図5のステップ402におけるlocal参照の代入実
行を含む。remote参照代入部235は図5のステ
ップ407の処理を行う。すなわち、参照者側値リスト
243用いて、自身が参照者であるremote参照に
ついての代入を実行する。
【0014】図1に戻って、本発明のプログラム並列化
方法の一実施例の詳細を説明する。本実施例の並列化方
法は、図3の形の間接参照ループを対象とする。すなわ
ち、次の条件を充たすループを対象とする。 (1)ループの中身は1個の代入文である。 (2)その代入文の両辺はそれぞれ1個の配列要素参照
である。両辺の配列は異なる。 (3)左辺の配列の添字はループイタレーションのイン
デックスiである。 (4)右辺の配列の添字は、別の配列である。すなわ
ち、右辺は間接参照である。 本並列化方法によって、図3の間接参照ループは図4に
示すような並列実行プログラム301に変換される。図
4のプログラムは図5に示した並列実行方法40を実現
するものである。
方法の一実施例の詳細を説明する。本実施例の並列化方
法は、図3の形の間接参照ループを対象とする。すなわ
ち、次の条件を充たすループを対象とする。 (1)ループの中身は1個の代入文である。 (2)その代入文の両辺はそれぞれ1個の配列要素参照
である。両辺の配列は異なる。 (3)左辺の配列の添字はループイタレーションのイン
デックスiである。 (4)右辺の配列の添字は、別の配列である。すなわ
ち、右辺は間接参照である。 本並列化方法によって、図3の間接参照ループは図4に
示すような並列実行プログラム301に変換される。図
4のプログラムは図5に示した並列実行方法40を実現
するものである。
【0015】以下、図4のプログラムを参照しながら、
図1の並列化方法の詳細を説明する。ステップ100
で、ループ内の代入文の前に、間接参照がlocal参
照かremote参照判定する文を挿入する。図4では
4行目に相当する。ここでowner(p[i])は、
インデックスの値p[i]から所有者プロセッサ番号を
求めるライブラリ関数である。また、_selfは自プ
ロセッサ番号を表す変数である。6行目のelseも本
ステップで挿入する。ステップ101で、remote
参照についての位置情報を位置リストに登録する文を、
elseの後、すなわちremote参照の場合に実行
される部分に挿入する。図4の7行目にあるput_l
ocinfo()というライブラリ手続き(図5のステ
ップ403の処理に対応する)の呼び出しが、その登録
文である。手続きの引数は、登録する情報、すなわち、
所有者プロセッサ番号owner(p[i])、所有者
インデックスp[i]、参照者インデックスiである。
ステップ102からステップ105で、ループの後にr
emote参照の後処理を行う文を挿入する。後処理
は、ライブラリ手続き呼び出しの形をとる。ステップ1
02では、位置リストを交換する文、すなわち、ライブ
ラリ手続きexchange_loclist()(図
5のステップ404の処理に対応する)の呼び出しを挿
入する。ステップ103では、値リストを作成する文、
すなわち、ライブラリ手続きmake_vallist
(b)(図5のステップ405の処理に対応する)の呼
び出しを挿入する。引数として、間接参照されている配
列bを与えている。ステップ104では、値リストを交
換する文、すなわち、ライブラリ手続きexchang
e_vallist()(図5のステップ406の処理
に対応する) の呼び出しを挿入する。ステップ10
5では、参照者側でremote参照に対する代入を実
行する文、すなわち、ライブラリ手続きremote_
assign(a)(図5のステップ407の処理に対
応する)の呼び出しを挿入する。引数として、代入先の
配列aを与えている。これらのライブラリ手続き呼び出
しは、図4の並列化後プログラムでは9行目から12行
目に挿入されている。なお、図7の3行目のep1,e
p2は、各プロセッサに割り当てられたイタレーション
の範囲を表す変数であり、プロセッサごとに異なる値が
設定される。また、各プロセッサに割り当てられる配列
の範囲は、実際にはep1からep2までであるが、図
4では簡単のため、1,2行目の宣言文における配列の
サイズは10000のままにしてある。
図1の並列化方法の詳細を説明する。ステップ100
で、ループ内の代入文の前に、間接参照がlocal参
照かremote参照判定する文を挿入する。図4では
4行目に相当する。ここでowner(p[i])は、
インデックスの値p[i]から所有者プロセッサ番号を
求めるライブラリ関数である。また、_selfは自プ
ロセッサ番号を表す変数である。6行目のelseも本
ステップで挿入する。ステップ101で、remote
参照についての位置情報を位置リストに登録する文を、
elseの後、すなわちremote参照の場合に実行
される部分に挿入する。図4の7行目にあるput_l
ocinfo()というライブラリ手続き(図5のステ
ップ403の処理に対応する)の呼び出しが、その登録
文である。手続きの引数は、登録する情報、すなわち、
所有者プロセッサ番号owner(p[i])、所有者
インデックスp[i]、参照者インデックスiである。
ステップ102からステップ105で、ループの後にr
emote参照の後処理を行う文を挿入する。後処理
は、ライブラリ手続き呼び出しの形をとる。ステップ1
02では、位置リストを交換する文、すなわち、ライブ
ラリ手続きexchange_loclist()(図
5のステップ404の処理に対応する)の呼び出しを挿
入する。ステップ103では、値リストを作成する文、
すなわち、ライブラリ手続きmake_vallist
(b)(図5のステップ405の処理に対応する)の呼
び出しを挿入する。引数として、間接参照されている配
列bを与えている。ステップ104では、値リストを交
換する文、すなわち、ライブラリ手続きexchang
e_vallist()(図5のステップ406の処理
に対応する) の呼び出しを挿入する。ステップ10
5では、参照者側でremote参照に対する代入を実
行する文、すなわち、ライブラリ手続きremote_
assign(a)(図5のステップ407の処理に対
応する)の呼び出しを挿入する。引数として、代入先の
配列aを与えている。これらのライブラリ手続き呼び出
しは、図4の並列化後プログラムでは9行目から12行
目に挿入されている。なお、図7の3行目のep1,e
p2は、各プロセッサに割り当てられたイタレーション
の範囲を表す変数であり、プロセッサごとに異なる値が
設定される。また、各プロセッサに割り当てられる配列
の範囲は、実際にはep1からep2までであるが、図
4では簡単のため、1,2行目の宣言文における配列の
サイズは10000のままにしてある。
【0016】以上で、本発明による間接参照ループの並
列化方法の説明を終わる。なお、本実施例および以後の
実施例では、並列化後プログラムをソースプログラムの
形式で示すが、本発明は並列化後プログラムがオブジェ
クトプログラム形式である場合でも同様に適用できる。
また、本実施例および以後の実施例では、並列化前プロ
グラムの例として図3のような逐次処理プログラムを用
いるが、並列化前プログラムが共有メモリ型並列計算機
用プログラムである場合でも、本発明は同様に適用でき
る。また、本実施例および以後の実施例では、1次元配
列および1重ループの場合を例として述べたが、多次元
配列や多重ループの場合でも同様に並列化できる。
列化方法の説明を終わる。なお、本実施例および以後の
実施例では、並列化後プログラムをソースプログラムの
形式で示すが、本発明は並列化後プログラムがオブジェ
クトプログラム形式である場合でも同様に適用できる。
また、本実施例および以後の実施例では、並列化前プロ
グラムの例として図3のような逐次処理プログラムを用
いるが、並列化前プログラムが共有メモリ型並列計算機
用プログラムである場合でも、本発明は同様に適用でき
る。また、本実施例および以後の実施例では、1次元配
列および1重ループの場合を例として述べたが、多次元
配列や多重ループの場合でも同様に並列化できる。
【0017】次に本発明の別の実施例として、代入文の
左辺に間接参照があるループの並列実行方法および並列
化方法について説明する。図9に左辺に間接参照がある
ループの一例を示す。ループ内の代入文の左辺の配列a
の添字が配列pになっている。このループでは、異なる
iに対してp[i]が同じ値を取ったときに、異なるイ
タレーションが配列aの同一の要素を書き換える。それ
らのうち、最後のイタレーションによって書かれた値の
みがループ終了後の値として残る。例えば、a[p
[2]]=b[2]でp[2]=12であり、a[p
[6]]=b[6]でp[6]=12であったとする
と、a[12]の値としてはb[6]が残る。このルー
プを並列実行する場合は、ループ終了後の各配列要素が
逐次実行のときと同じ値を持つようにしなければならな
い。本発明の並列実行方法では、上記の問題を解決する
ために、左辺配列aと同じサイズの整数配列を新たに設
ける。この配列を「最終イタレーション配列」と呼ぶ。
最終イタレーション配列の各要素は、左辺配列aと同様
に各プロセッサに割り当てる。各要素は、配列aの対応
する要素を最後に書き換えたイタレーションのインデッ
クス(上記の例では6になる)を保持する。
左辺に間接参照があるループの並列実行方法および並列
化方法について説明する。図9に左辺に間接参照がある
ループの一例を示す。ループ内の代入文の左辺の配列a
の添字が配列pになっている。このループでは、異なる
iに対してp[i]が同じ値を取ったときに、異なるイ
タレーションが配列aの同一の要素を書き換える。それ
らのうち、最後のイタレーションによって書かれた値の
みがループ終了後の値として残る。例えば、a[p
[2]]=b[2]でp[2]=12であり、a[p
[6]]=b[6]でp[6]=12であったとする
と、a[12]の値としてはb[6]が残る。このルー
プを並列実行する場合は、ループ終了後の各配列要素が
逐次実行のときと同じ値を持つようにしなければならな
い。本発明の並列実行方法では、上記の問題を解決する
ために、左辺配列aと同じサイズの整数配列を新たに設
ける。この配列を「最終イタレーション配列」と呼ぶ。
最終イタレーション配列の各要素は、左辺配列aと同様
に各プロセッサに割り当てる。各要素は、配列aの対応
する要素を最後に書き換えたイタレーションのインデッ
クス(上記の例では6になる)を保持する。
【0018】図11は、図9の間接参照ループの本発明
による並列実行方法の手順を示すフロートチャートであ
る。ステップ420で、最終イタレーション配列の各要
素に初期値を設定する。初期値は、イタレーションイン
デックスの最小値より1少ない値とする。図9のループ
の場合は初期値として−1を設定する。ステップ421
は自身に割り当てられたイタレーションのうち、未処理
のものがまだあるかどうかの判定である。未処理のイタ
レーションがあればステップ422に進み、以下、その
イタレーションについての処理を行う。ステップ422
で間接参照a[p[i]]がlocal参照かremo
te参照かを判定する。もしlocal参照ならばステ
ップ423に進み、remote参照ならばステップ4
25に進む。ステップ423でlocal参照について
の代入を実行する。代入を実行したイタレーションにつ
いては、ステップ424でそのインデックスiを最終イ
タレーション配列に記録する。ステップ425ではre
mote参照についての代入情報を「代入リスト」に登
録する。ここで登録する代入情報とは、要素a[p
[i]]の所有者のプロセッサ番号、所有者インデック
スp[i]の値、参照者インデックスiの値、および右
辺配列要素b[i]の値である。
による並列実行方法の手順を示すフロートチャートであ
る。ステップ420で、最終イタレーション配列の各要
素に初期値を設定する。初期値は、イタレーションイン
デックスの最小値より1少ない値とする。図9のループ
の場合は初期値として−1を設定する。ステップ421
は自身に割り当てられたイタレーションのうち、未処理
のものがまだあるかどうかの判定である。未処理のイタ
レーションがあればステップ422に進み、以下、その
イタレーションについての処理を行う。ステップ422
で間接参照a[p[i]]がlocal参照かremo
te参照かを判定する。もしlocal参照ならばステ
ップ423に進み、remote参照ならばステップ4
25に進む。ステップ423でlocal参照について
の代入を実行する。代入を実行したイタレーションにつ
いては、ステップ424でそのインデックスiを最終イ
タレーション配列に記録する。ステップ425ではre
mote参照についての代入情報を「代入リスト」に登
録する。ここで登録する代入情報とは、要素a[p
[i]]の所有者のプロセッサ番号、所有者インデック
スp[i]の値、参照者インデックスiの値、および右
辺配列要素b[i]の値である。
【0019】ここで代入リストの構造を説明する。図1
2に代入リストの構造を示す。位置リストなどと同様
に、所有者ごとにエントリを持つヘッダ520と、その
各エントリからポインタでつながるリスト本体521に
よって構成される。リスト本体521は3個のフィール
ド524,525,および526から成り、各フィール
ドは、右辺の配列要素b[i]の値、所有者インデック
スp[i]、参照者インデックスiを表す。例えば、図
12の代入リストの一番最初の項目(斜線部分)は、プ
ロセッサ4番の持つ配列要素a[35]に対して、イタ
レーション3番によって26.5という値が代入される
べきことを表している。
2に代入リストの構造を示す。位置リストなどと同様
に、所有者ごとにエントリを持つヘッダ520と、その
各エントリからポインタでつながるリスト本体521に
よって構成される。リスト本体521は3個のフィール
ド524,525,および526から成り、各フィール
ドは、右辺の配列要素b[i]の値、所有者インデック
スp[i]、参照者インデックスiを表す。例えば、図
12の代入リストの一番最初の項目(斜線部分)は、プ
ロセッサ4番の持つ配列要素a[35]に対して、イタ
レーション3番によって26.5という値が代入される
べきことを表している。
【0020】図11に戻って、ステップ421で未処理
のイタレーションがもうなければステップ426に進
み、以下、代入リストに基づいてremote参照の後
処理をする。ステップ426では、全プロセッサ間で代
入リストを交換する。この交換により、各プロセッサ
は、自身が所有者であるようなremote参照につい
ての代入リストを持つようになる。代入リストのリスト
本体521の各エントリについて、ステップ427から
ステップ430の処理を行う。ステップ427は、リス
ト本体521に未処理のエントリがあるかどうかの判定
である。未処理のエントリがなければ並列実行は終了で
ある。未処理のエントリがあればステップ428に進
み、以下、そのエントリについての処理を行う。ステッ
プ428では、エントリ内の参照者インデックス526
と、エントリ内の所有者インデックス525に対応する
最終イタレーション配列の要素値と、を比較する。例え
ば、エントリ内の参照者インデックスがi=2であり、
所有者インデックスがp[2]=12であり、最終イタ
レーション配列lastにおいてlast[12]=6
であったとしたとき、2と6を比較する。もし前者が後
者以下ならば、代入リストのエントリは、最終イタレー
ション配列に記録されているイタレーションより前のイ
タレーションによる代入を表している。したがって、こ
の代入は実行してはならず、ステップ427にもどって
次のエントリの処理を行う。例えば、エントリ内の参照
者インデックスがi=2であり、所有者インデックスが
p[2]=12であり、最終イタレーション配列las
tにおいてlast[12]=6であったとしたとき、
2(前者)<6(後者)なので、代入は実行しない。も
し前者が後者より大きければ、ステップ429に進む。
ステップ429ではremote参照による代入を実行
する。例えば、エントリ内の参照者インデックスがi=
6であり、所有者インデックスがp[6]=12であ
り、最終イタレーション配列lastにおいてlast
[12]=2であったとしたとき、6(前者)>2(後
者)なので、代入を実行する。すなわち、代入リストエ
ントリの値フィールド524の内容を、所有者インデッ
クス525に対応する左辺配列aの要素に代入する。ま
たステップ430で、所有者インデックス525に対応
する最終イタレーション配列の要素に、参照者インデッ
クス526を代入する。
のイタレーションがもうなければステップ426に進
み、以下、代入リストに基づいてremote参照の後
処理をする。ステップ426では、全プロセッサ間で代
入リストを交換する。この交換により、各プロセッサ
は、自身が所有者であるようなremote参照につい
ての代入リストを持つようになる。代入リストのリスト
本体521の各エントリについて、ステップ427から
ステップ430の処理を行う。ステップ427は、リス
ト本体521に未処理のエントリがあるかどうかの判定
である。未処理のエントリがなければ並列実行は終了で
ある。未処理のエントリがあればステップ428に進
み、以下、そのエントリについての処理を行う。ステッ
プ428では、エントリ内の参照者インデックス526
と、エントリ内の所有者インデックス525に対応する
最終イタレーション配列の要素値と、を比較する。例え
ば、エントリ内の参照者インデックスがi=2であり、
所有者インデックスがp[2]=12であり、最終イタ
レーション配列lastにおいてlast[12]=6
であったとしたとき、2と6を比較する。もし前者が後
者以下ならば、代入リストのエントリは、最終イタレー
ション配列に記録されているイタレーションより前のイ
タレーションによる代入を表している。したがって、こ
の代入は実行してはならず、ステップ427にもどって
次のエントリの処理を行う。例えば、エントリ内の参照
者インデックスがi=2であり、所有者インデックスが
p[2]=12であり、最終イタレーション配列las
tにおいてlast[12]=6であったとしたとき、
2(前者)<6(後者)なので、代入は実行しない。も
し前者が後者より大きければ、ステップ429に進む。
ステップ429ではremote参照による代入を実行
する。例えば、エントリ内の参照者インデックスがi=
6であり、所有者インデックスがp[6]=12であ
り、最終イタレーション配列lastにおいてlast
[12]=2であったとしたとき、6(前者)>2(後
者)なので、代入を実行する。すなわち、代入リストエ
ントリの値フィールド524の内容を、所有者インデッ
クス525に対応する左辺配列aの要素に代入する。ま
たステップ430で、所有者インデックス525に対応
する最終イタレーション配列の要素に、参照者インデッ
クス526を代入する。
【0021】次に図13を参照して、左辺に間接参照が
あるループに対する、本発明のプログラム並列化方法の
一実施例の詳細を説明する。本実施例の並列化方法は、
図9の形の間接参照ループを対象とする。すなわち、次
の条件を充たすループを対象とする。 (1)ループの中身は1個の代入文である。 (2)その代入文の両辺はそれぞれ1個の配列要素参照
である。両辺の配列は異なる。 (3)右辺の配列の添字はループイタレーションのイン
デックスiである。 (4)左辺の配列の添字は、別の配列である。すなわ
ち、左辺は間接参照である。 本並列化方法によって、図9の間接参照ループは図10
に示すような並列実行プログラム311に変換される。
図10のプログラムは図に示した並列実行方法を実現す
るものである。以下、図10のプログラム311を参照
しながら、図13の並列化方法の詳細を説明する。ステ
ップ120で、最終イタレーション配列lastの宣言
文を挿入する。図10では3行目がその宣言文である。
また、ステップ121で、間接参照ループの直前に最終
イタレーション配列lastの初期化文を挿入する。図
10では4行目のライブラリ手続きinitializ
e()(図11のステップ420の処理に対応する)の
呼び出しが、その初期化文である。手続きの引数は、初
期化される配列lastと初期値−1である。ステップ
122でプログラムのループ内の代入文の前に、間接参
照がlocal参照かremote参照かを判定する文
を挿入する。図10では6行目に相当する。9行目のe
lseも本ステップで挿入する。ステップ123で、イ
タレーションインデックスを最終イタレーション配列に
記録する文を、elseの前、すなわちlocal参照
の場合に実行される部分に挿入する。図の8行目がその
文である。ステップ124で、remote参照につい
ての代入情報を代入リストに登録する文を、elseの
後、すなわちremote参照の場合に実行される部分
に挿入する。図10の10行目にあるput_asgn
info()というライブラリ手続き(図11のステッ
プ425の処理に対応する)の呼び出しが、その登録文
である。手続きの引数は、登録する情報、すなわち、所
有者プロセッサ番号owner(p[i])、所有者イ
ンデックスp[i]、参照者インデックスi、および右
辺配列要素b[i]である。ステップ125からステッ
プ126で、ループの後にremote参照の後処理を
行う文を挿入する。ステップ125では、代入リストを
交換する文、すなわち、ライブラリ手続きexchan
ge_asgnlist()(図11のステップ426
の処理に対応する)の呼び出しを挿入する。図10では
12行目に挿入されている。ステップ126では、所有
者側でremote参照の代入を実行する文、すなわ
ち、ライブラリ手続きremote_assign_1
(a)の呼び出しを挿入する。引数として、代入先の配
列aを与えている。図10では13行目に挿入されてい
る。このライブラリは、図11のステップ427からス
テップ430の処理を実行する。すなわち、代入リスト
の各エントリにつき、参照者インデックスと最終イタレ
ーション配列の要素値を比較して、前者が後者より大き
い場合にのみ代入を実行する。また、代入を実行したと
きには最終イタレーション配列にインデックスを記録す
る。以上で、本発明による左辺間接参照ループの並列化
方法の説明を終わる。
あるループに対する、本発明のプログラム並列化方法の
一実施例の詳細を説明する。本実施例の並列化方法は、
図9の形の間接参照ループを対象とする。すなわち、次
の条件を充たすループを対象とする。 (1)ループの中身は1個の代入文である。 (2)その代入文の両辺はそれぞれ1個の配列要素参照
である。両辺の配列は異なる。 (3)右辺の配列の添字はループイタレーションのイン
デックスiである。 (4)左辺の配列の添字は、別の配列である。すなわ
ち、左辺は間接参照である。 本並列化方法によって、図9の間接参照ループは図10
に示すような並列実行プログラム311に変換される。
図10のプログラムは図に示した並列実行方法を実現す
るものである。以下、図10のプログラム311を参照
しながら、図13の並列化方法の詳細を説明する。ステ
ップ120で、最終イタレーション配列lastの宣言
文を挿入する。図10では3行目がその宣言文である。
また、ステップ121で、間接参照ループの直前に最終
イタレーション配列lastの初期化文を挿入する。図
10では4行目のライブラリ手続きinitializ
e()(図11のステップ420の処理に対応する)の
呼び出しが、その初期化文である。手続きの引数は、初
期化される配列lastと初期値−1である。ステップ
122でプログラムのループ内の代入文の前に、間接参
照がlocal参照かremote参照かを判定する文
を挿入する。図10では6行目に相当する。9行目のe
lseも本ステップで挿入する。ステップ123で、イ
タレーションインデックスを最終イタレーション配列に
記録する文を、elseの前、すなわちlocal参照
の場合に実行される部分に挿入する。図の8行目がその
文である。ステップ124で、remote参照につい
ての代入情報を代入リストに登録する文を、elseの
後、すなわちremote参照の場合に実行される部分
に挿入する。図10の10行目にあるput_asgn
info()というライブラリ手続き(図11のステッ
プ425の処理に対応する)の呼び出しが、その登録文
である。手続きの引数は、登録する情報、すなわち、所
有者プロセッサ番号owner(p[i])、所有者イ
ンデックスp[i]、参照者インデックスi、および右
辺配列要素b[i]である。ステップ125からステッ
プ126で、ループの後にremote参照の後処理を
行う文を挿入する。ステップ125では、代入リストを
交換する文、すなわち、ライブラリ手続きexchan
ge_asgnlist()(図11のステップ426
の処理に対応する)の呼び出しを挿入する。図10では
12行目に挿入されている。ステップ126では、所有
者側でremote参照の代入を実行する文、すなわ
ち、ライブラリ手続きremote_assign_1
(a)の呼び出しを挿入する。引数として、代入先の配
列aを与えている。図10では13行目に挿入されてい
る。このライブラリは、図11のステップ427からス
テップ430の処理を実行する。すなわち、代入リスト
の各エントリにつき、参照者インデックスと最終イタレ
ーション配列の要素値を比較して、前者が後者より大き
い場合にのみ代入を実行する。また、代入を実行したと
きには最終イタレーション配列にインデックスを記録す
る。以上で、本発明による左辺間接参照ループの並列化
方法の説明を終わる。
【0022】次に本発明のまた別の実施例として、加算
代入文(意味は後述)の左辺に間接参照がある場合の並
列実行方法および並列化方法について説明する。本実施
例が対象とするループは次の条件を充たすものである。 (1)ループの中身は1個の加算代入文である。 (2)その代入文の両辺はそれぞれ1個の配列要素参照
である。両辺の配列は異なる。 (3)右辺の配列の添字はループイタレーションのイン
デックスiである。 (4)左辺の配列の添字は、別の配列である。すなわ
ち、左辺は間接参照である。 図14に本実施例が対象とするループの一例を示す。4
行目が加算代入文である。それに含まれる加算代入演算
子’+=”は、左辺の要素に右辺の要素を足し込むこと
を表している。すなわち、a[p[i]]=a[p
[i]]+b[i]と同等である。このループのように
配列要素に値を次々に足し込んでいく処理は、数値計算
プログラムで頻繁に現われる。したがってこのループの
並列実行は、現実に非常に重要である。
代入文(意味は後述)の左辺に間接参照がある場合の並
列実行方法および並列化方法について説明する。本実施
例が対象とするループは次の条件を充たすものである。 (1)ループの中身は1個の加算代入文である。 (2)その代入文の両辺はそれぞれ1個の配列要素参照
である。両辺の配列は異なる。 (3)右辺の配列の添字はループイタレーションのイン
デックスiである。 (4)左辺の配列の添字は、別の配列である。すなわ
ち、左辺は間接参照である。 図14に本実施例が対象とするループの一例を示す。4
行目が加算代入文である。それに含まれる加算代入演算
子’+=”は、左辺の要素に右辺の要素を足し込むこと
を表している。すなわち、a[p[i]]=a[p
[i]]+b[i]と同等である。このループのように
配列要素に値を次々に足し込んでいく処理は、数値計算
プログラムで頻繁に現われる。したがってこのループの
並列実行は、現実に非常に重要である。
【0023】この形のループを並列実行する場合、加算
の交換結合法則が利用できるので、各イタレーションの
実行順序は任意で良い。そのため、前の実施例と違っ
て、最終イタレーション配列が必要ない。また、代入リ
ストの本体の参照者インデックスも必要ない。同様のこ
とは、代入演算子に含まれる演算が乗算などの場合にも
成り立つ。このループの並列実行方法は、基本的には図
11に示したものと同じであるが、上記の理由により、
多くのステップが省略できる。省略できるのは、ステッ
プ420の最終イタレーション配列の初期化、ステップ
424およびステップ430の最終イタレーション配列
へのインデックスの記録、ステップ428のインデック
スの大小判定である。このループの並列化方法も、基本
的に図13に示したものと同じであるが、いくつかのス
テップが省略できる。省略できるのは、ステップ120
の最終イタレーション配列の宣言文の挿入、ステップ1
21の最終イタレーション配列の初期化文の挿入、ステ
ップ123のインデックス記録文の挿入である。
の交換結合法則が利用できるので、各イタレーションの
実行順序は任意で良い。そのため、前の実施例と違っ
て、最終イタレーション配列が必要ない。また、代入リ
ストの本体の参照者インデックスも必要ない。同様のこ
とは、代入演算子に含まれる演算が乗算などの場合にも
成り立つ。このループの並列実行方法は、基本的には図
11に示したものと同じであるが、上記の理由により、
多くのステップが省略できる。省略できるのは、ステッ
プ420の最終イタレーション配列の初期化、ステップ
424およびステップ430の最終イタレーション配列
へのインデックスの記録、ステップ428のインデック
スの大小判定である。このループの並列化方法も、基本
的に図13に示したものと同じであるが、いくつかのス
テップが省略できる。省略できるのは、ステップ120
の最終イタレーション配列の宣言文の挿入、ステップ1
21の最終イタレーション配列の初期化文の挿入、ステ
ップ123のインデックス記録文の挿入である。
【0024】図15は、本並列化方法によって、図14
の間接参照ループを並列化した並列実行プログラムであ
る。前実施例の図10のプログラムと比較して、最終イ
タレーション配列に関する文がなくなっている。また、
7行目の代入リストへの登録ライブラリput_asg
ninfo_2(図11のステップ425の処理に対応
する)の引数に、参照者インデックスiが含まれていな
い。9行目のexchange_asnglist_2
は参照者インデックスを含まない代入リストを、プロセ
ッサ間で交換するライブラリ手続き(図11のステップ
426の処理に対応する)である。10行目のremo
te_assign_2は、所有者側でremote代
入を実行するライブラリ手続き(図11のステップ42
7,429の処理に対応する)であるが、図10のre
mote_assign_1と違って、図11のステッ
プ428のインデックス比較やステップ430のインデ
ックス記録は含まない。
の間接参照ループを並列化した並列実行プログラムであ
る。前実施例の図10のプログラムと比較して、最終イ
タレーション配列に関する文がなくなっている。また、
7行目の代入リストへの登録ライブラリput_asg
ninfo_2(図11のステップ425の処理に対応
する)の引数に、参照者インデックスiが含まれていな
い。9行目のexchange_asnglist_2
は参照者インデックスを含まない代入リストを、プロセ
ッサ間で交換するライブラリ手続き(図11のステップ
426の処理に対応する)である。10行目のremo
te_assign_2は、所有者側でremote代
入を実行するライブラリ手続き(図11のステップ42
7,429の処理に対応する)であるが、図10のre
mote_assign_1と違って、図11のステッ
プ428のインデックス比較やステップ430のインデ
ックス記録は含まない。
【0025】次に本発明のまた別の実施例として、複数
の文や複数の間接参照を含むループの並列化方法を説明
する。本並列化方法では、そのようなループを、これま
で述べてきた1個の間接参照を含むループの組み合わせ
に変換してから、並列化するものである。本実施例の並
列化方法は、次の条件を充たすループを対象とする。 (1)ループ内に代入文または加算代入文のみを含む。
文が複数個あってもよい。 (2)ループ内に間接参照が1個以上ある。 (3)ループ外への制御の飛び出しやループ内への制御
の飛び込みがない。 (4)各代入文の右辺は配列要素かスカラ変数から構成
される式である。 (5)間接参照の添字配列は、ループ内で定義されな
い。 (6)代入文の左辺に現われる間接参照配列が、ループ
内のそれ以外の個所で参照されていない。 この条件を充たすループを以下では、「一般間接参照ル
ープ」と呼ぶ。また、これまでの実施例で対象としてい
たループを「基本間接参照ループ」と呼ぶ。本実施例で
は簡単のために、ループのインデックスは0から始まり
1ずつ増えるものとするが、そうでない場合でも同様の
方法が適用できる。図16に本並列化方法の対象となる
ループの一例を示す。
の文や複数の間接参照を含むループの並列化方法を説明
する。本並列化方法では、そのようなループを、これま
で述べてきた1個の間接参照を含むループの組み合わせ
に変換してから、並列化するものである。本実施例の並
列化方法は、次の条件を充たすループを対象とする。 (1)ループ内に代入文または加算代入文のみを含む。
文が複数個あってもよい。 (2)ループ内に間接参照が1個以上ある。 (3)ループ外への制御の飛び出しやループ内への制御
の飛び込みがない。 (4)各代入文の右辺は配列要素かスカラ変数から構成
される式である。 (5)間接参照の添字配列は、ループ内で定義されな
い。 (6)代入文の左辺に現われる間接参照配列が、ループ
内のそれ以外の個所で参照されていない。 この条件を充たすループを以下では、「一般間接参照ル
ープ」と呼ぶ。また、これまでの実施例で対象としてい
たループを「基本間接参照ループ」と呼ぶ。本実施例で
は簡単のために、ループのインデックスは0から始まり
1ずつ増えるものとするが、そうでない場合でも同様の
方法が適用できる。図16に本並列化方法の対象となる
ループの一例を示す。
【0026】図18は、本実施例の並列化方法の手順を
表す。図18のステップ140からステップ145まで
によって、図16の一般間接参照ループ330は図17
に示すような基本間接参照ループの組み合わせ331に
分解される。
表す。図18のステップ140からステップ145まで
によって、図16の一般間接参照ループ330は図17
に示すような基本間接参照ループの組み合わせ331に
分解される。
【0027】以下、図16,17のプログラム330,
331を参照しながら、図18の並列化方法の詳細を説
明する。ループ内の各間接参照について、ステップ14
0からステップ145の処理を行う。ステップ140
は、元のループ内に間接参照があるかどうかの判定であ
る。間接参照がなければ元のループは既に分解されたの
でステップ146に進む。間接参照があればステップ1
41に進み、以下、その間接参照についての処理を行
う。ステップ141で間接参照の値を保持するための一
時配列を生成する。一時配列のサイズはループのイタレ
ーションの数とし、型は間接参照配列の型とする。この
一時配列を以下では_tmp[]と書く。ステップ14
2で間接参照が右辺にあるか左辺にあるかを判定する。
右辺ならばステップ143に進み、左辺ならばステップ
144に進む。ステップ143で、元のループの前に次
の基本間接参照ループを挿入する。 for(i=...) _tmp[i]=間接参照; ここでiはループの制御変数を表す。例えば、図16の
2行目の間接参照b[q[i]]に対して、図17の
1,2行目のループを挿入し、図16の3行目の間接参
照e[t[i]]に対して、図の3,4行目の基本間接
参照ループを挿入する。ステップ144で、元のループ
の後に次の基本間接参照ループを挿入する。 for(i) 間接参照=_tmp[i]; 元の代入文に加算代入演算子’+=’が用いられていれ
ば、挿入した基本間接参照ループの代入文にも’+=’
を用いる。例えば、図16の2行目の間接参照a[p
[i]]に対して、図17の9,10行目のループを挿
入し、図16の3行目の間接参照d[s[i]]に対し
て、図17の11,12行目の基本間接参照ループを挿
入する。ステップ145で、元のループ内の間接参照
を、一時配列の参照_tmp[i]で置き換える。もし
も間接参照が左辺にあるならば、それに対する代入演算
子が何であっても、’=’に置き換える。このステップ
145により、図16の元のループは、図17の5行目
から8行目のように変換される。ステップ145までの
変換により、元のループ内から間接参照は消去され、代
わりにステップ143,145で間接参照ループが生成
された。生成されたループは以前の実施例で対象とした
基本間接参照ループであり、前述の方法で並列化でき
る。ステップ146では、生成された基本間接参照ルー
プの各々に対して、前述の方法に従って並列化を行う。
以上で、複数の間接参照を含むループの並列化が終了し
た。
331を参照しながら、図18の並列化方法の詳細を説
明する。ループ内の各間接参照について、ステップ14
0からステップ145の処理を行う。ステップ140
は、元のループ内に間接参照があるかどうかの判定であ
る。間接参照がなければ元のループは既に分解されたの
でステップ146に進む。間接参照があればステップ1
41に進み、以下、その間接参照についての処理を行
う。ステップ141で間接参照の値を保持するための一
時配列を生成する。一時配列のサイズはループのイタレ
ーションの数とし、型は間接参照配列の型とする。この
一時配列を以下では_tmp[]と書く。ステップ14
2で間接参照が右辺にあるか左辺にあるかを判定する。
右辺ならばステップ143に進み、左辺ならばステップ
144に進む。ステップ143で、元のループの前に次
の基本間接参照ループを挿入する。 for(i=...) _tmp[i]=間接参照; ここでiはループの制御変数を表す。例えば、図16の
2行目の間接参照b[q[i]]に対して、図17の
1,2行目のループを挿入し、図16の3行目の間接参
照e[t[i]]に対して、図の3,4行目の基本間接
参照ループを挿入する。ステップ144で、元のループ
の後に次の基本間接参照ループを挿入する。 for(i) 間接参照=_tmp[i]; 元の代入文に加算代入演算子’+=’が用いられていれ
ば、挿入した基本間接参照ループの代入文にも’+=’
を用いる。例えば、図16の2行目の間接参照a[p
[i]]に対して、図17の9,10行目のループを挿
入し、図16の3行目の間接参照d[s[i]]に対し
て、図17の11,12行目の基本間接参照ループを挿
入する。ステップ145で、元のループ内の間接参照
を、一時配列の参照_tmp[i]で置き換える。もし
も間接参照が左辺にあるならば、それに対する代入演算
子が何であっても、’=’に置き換える。このステップ
145により、図16の元のループは、図17の5行目
から8行目のように変換される。ステップ145までの
変換により、元のループ内から間接参照は消去され、代
わりにステップ143,145で間接参照ループが生成
された。生成されたループは以前の実施例で対象とした
基本間接参照ループであり、前述の方法で並列化でき
る。ステップ146では、生成された基本間接参照ルー
プの各々に対して、前述の方法に従って並列化を行う。
以上で、複数の間接参照を含むループの並列化が終了し
た。
【0028】図19に本発明の並列化方法を実行する並
列化コンパイラ6の構成を示す。並列化コンパイラ6
は、構文解析部60、一般間接参照ループ分解部61、
基本間接参照ループ並列化部62、通常ループ並列化部
63、コード生成部64を含む。一般間接参照ループ分
解部61には、一時配列生成部610、基本間接参照ル
ープ生成部611、間接参照置換部612が含まれる。
基本間接参照ループ並列化部62には、remote/
local判定文挿入部620、情報登録文挿入部62
1、リスト交換文挿入部622、remote代入実行
文挿入部623、値リスト作成文挿入部624、最終イ
タレーション配列生成部625が含まれる。構文解析部
60は、並列化前プログラム30を読み込んで、中間語
70を生成する。中間語70はコンパイラ内部でのプロ
グラムの表現であり、その形式は通常のコンパイラの場
合と特に変わらないので、ここでは詳細には述べない。
列化コンパイラ6の構成を示す。並列化コンパイラ6
は、構文解析部60、一般間接参照ループ分解部61、
基本間接参照ループ並列化部62、通常ループ並列化部
63、コード生成部64を含む。一般間接参照ループ分
解部61には、一時配列生成部610、基本間接参照ル
ープ生成部611、間接参照置換部612が含まれる。
基本間接参照ループ並列化部62には、remote/
local判定文挿入部620、情報登録文挿入部62
1、リスト交換文挿入部622、remote代入実行
文挿入部623、値リスト作成文挿入部624、最終イ
タレーション配列生成部625が含まれる。構文解析部
60は、並列化前プログラム30を読み込んで、中間語
70を生成する。中間語70はコンパイラ内部でのプロ
グラムの表現であり、その形式は通常のコンパイラの場
合と特に変わらないので、ここでは詳細には述べない。
【0029】一般間接参照ループ分解部61は、図18
のステップ140からステップ145までの処理を行
う。すなわち、一般間接参照ループを基本間接参照ルー
プの組み合わせに分解する。その中で、一時配列生成部
610は図18のステップ141の処理を行う。すなわ
ち、元のループ内の間接参照に対して、一時配列を生成
する。また、基本間接参照ループ生成部611は、図1
8のステップ143およびステップ144の処理を行
う、すなわち、間接参照が右辺か左辺かに応じて、元の
ループの前または後に基本間接参照ループを生成する。
間接参照置換部612は図18のステップ145の処理
を行う。すなわち、元のループ内の間接参照を、一時配
列生成部610が生成した一時配列の参照に置換する。
のステップ140からステップ145までの処理を行
う。すなわち、一般間接参照ループを基本間接参照ルー
プの組み合わせに分解する。その中で、一時配列生成部
610は図18のステップ141の処理を行う。すなわ
ち、元のループ内の間接参照に対して、一時配列を生成
する。また、基本間接参照ループ生成部611は、図1
8のステップ143およびステップ144の処理を行
う、すなわち、間接参照が右辺か左辺かに応じて、元の
ループの前または後に基本間接参照ループを生成する。
間接参照置換部612は図18のステップ145の処理
を行う。すなわち、元のループ内の間接参照を、一時配
列生成部610が生成した一時配列の参照に置換する。
【0030】基本間接参照ループ並列化部62は、図1
8のステップ146の処理を行う。すなわち、基本間接
参照ループの種類に応じて、図1および図13に示した
並列化を行う。その中で、remote/local判
定文挿入部620は、図1のステップ100および図1
3のステップ122の処理を行う。すなわち、間接参照
がremote参照かlocal参照か判定する文をル
ープ内に挿入する。また、情報登録文挿入部621は図
1のステップ101および図13のステップ124の処
理を行う。すなわち、位置リストや代入リストに情報を
登録する文をループ内に挿入する。リスト交換文挿入部
622は図1のステップ102および図13のステップ
125の処理を行う。すなわち、位置リストや代入リス
トをプロセッサ間で交換する文をプログラムに挿入す
る。remote代入実行文挿入部623は図1のステ
ップ105および図13のステップ126の処理を行
う。すなわち、交換したリストを用いてremote参
照についての代入を実行する文を挿入する。値リスト作
成文挿入部624は図1のステップ103の処理を行
う。すなわち、右辺間接参照ループに対して、値リスト
を作成する文を位置リスト交換文の後に挿入する。最終
イタレーション配列生成部625は図13のステップ1
20とステップ121の処理を行う。すなわち、左辺間
接参照ループに対して、最終イタレーション配列の宣言
文や初期化文を挿入する。通常ループ並列化部63は間
接参照ループでないループの並列化を行う。またコード
生成部64は中間語70を読み込んで並列化後プログラ
ム31を生成する。これらの処理の内容は従来の並列化
コンパイラの場合と特に変わらないので、ここでは詳細
は述べない。
8のステップ146の処理を行う。すなわち、基本間接
参照ループの種類に応じて、図1および図13に示した
並列化を行う。その中で、remote/local判
定文挿入部620は、図1のステップ100および図1
3のステップ122の処理を行う。すなわち、間接参照
がremote参照かlocal参照か判定する文をル
ープ内に挿入する。また、情報登録文挿入部621は図
1のステップ101および図13のステップ124の処
理を行う。すなわち、位置リストや代入リストに情報を
登録する文をループ内に挿入する。リスト交換文挿入部
622は図1のステップ102および図13のステップ
125の処理を行う。すなわち、位置リストや代入リス
トをプロセッサ間で交換する文をプログラムに挿入す
る。remote代入実行文挿入部623は図1のステ
ップ105および図13のステップ126の処理を行
う。すなわち、交換したリストを用いてremote参
照についての代入を実行する文を挿入する。値リスト作
成文挿入部624は図1のステップ103の処理を行
う。すなわち、右辺間接参照ループに対して、値リスト
を作成する文を位置リスト交換文の後に挿入する。最終
イタレーション配列生成部625は図13のステップ1
20とステップ121の処理を行う。すなわち、左辺間
接参照ループに対して、最終イタレーション配列の宣言
文や初期化文を挿入する。通常ループ並列化部63は間
接参照ループでないループの並列化を行う。またコード
生成部64は中間語70を読み込んで並列化後プログラ
ム31を生成する。これらの処理の内容は従来の並列化
コンパイラの場合と特に変わらないので、ここでは詳細
は述べない。
【0031】
【発明の効果】本発明によれば、一般的な間接参照ルー
プのプログラムを分散メモリ型並列計算機用に並列化す
ることができる。また、間接参照が左辺にある場合の間
接参照ループのプログラムを分散メモリ型並列計算機用
に並列化することができる。また、分散メモリ型並列計
算機において、一般的な間接参照ループを並列実行する
ことができる。また、分散メモリ型並列計算機におい
て、間接参照が左辺にある場合の間接参照ループを並列
実行することができる。
プのプログラムを分散メモリ型並列計算機用に並列化す
ることができる。また、間接参照が左辺にある場合の間
接参照ループのプログラムを分散メモリ型並列計算機用
に並列化することができる。また、分散メモリ型並列計
算機において、一般的な間接参照ループを並列実行する
ことができる。また、分散メモリ型並列計算機におい
て、間接参照が左辺にある場合の間接参照ループを並列
実行することができる。
【図1】本発明による間接参照ループの並列化方法の一
実施例のフローチャートを示す図である。
実施例のフローチャートを示す図である。
【図2】本発明の並列化方法によって並列化されたプロ
グラムを実行する分散メモリ型並列計算機の構成例を示
す図である。
グラムを実行する分散メモリ型並列計算機の構成例を示
す図である。
【図3】並列化前の右辺間接参照ループの例を示す図で
ある。
ある。
【図4】図3の間接参照ループに対して、図1の並列化
方法を適用した結果の間接参照ループを示す図である。
方法を適用した結果の間接参照ループを示す図である。
【図5】本発明による右辺間接参照ループの並列実行方
法の一実施例のフローチャートを示す図である。
法の一実施例のフローチャートを示す図である。
【図6】図5の並列実行方法で使用する位置リストの構
造を示す図である。
造を示す図である。
【図7】図5の並列実行方法で使用する値リストの構造
を示す図である。
を示す図である。
【図8】図5の並列実行方法を実現する装置の構成例を
示す図である。
示す図である。
【図9】並列化前の左辺間接参照ループの例を示す図で
ある。
ある。
【図10】図9の左辺間接参照ループに対して、本発明
の並列化方法を適用した結果のプログラムを示す図であ
る。
の並列化方法を適用した結果のプログラムを示す図であ
る。
【図11】本発明による左辺間接参照ループの並列実行
方法の一実施例のフローチャートを示す図である。
方法の一実施例のフローチャートを示す図である。
【図12】図11の並列実行方法で使用する代入リスト
の構造図を示す図である。
の構造図を示す図である。
【図13】本発明による左辺間接参照ループの並列化方
法の一実施例のフローチャートを示す図である。
法の一実施例のフローチャートを示す図である。
【図14】並列化前の加算代入間接参照ループの例を示
す図である。
す図である。
【図15】図14の加算代入間接参照ループに対して、
本発明の並列化方法を適用した結果のプログラムを示す
図である。
本発明の並列化方法を適用した結果のプログラムを示す
図である。
【図16】一般間接参照ループの例を示す図である。
【図17】図16の一般間接参照ループに対して本発明
の方法を適用して、基本間接参照ループの組み合わせに
分解した結果のプログラムを示す図である。
の方法を適用して、基本間接参照ループの組み合わせに
分解した結果のプログラムを示す図である。
【図18】本発明による一般間接参照ループの並列化方
法の一実施例のフローチャートを示す図である。
法の一実施例のフローチャートを示す図である。
【図19】本発明の間接参照ループ並列化方法を実行す
る並列化コンパイラの例を示す図である。
る並列化コンパイラの例を示す図である。
22 相互結合ネットワーク 20、201〜20n プロセッサ 21、211〜21n ローカルメモリ 230 演算部 231 remote参照判定部 232 位置情報登録部 233 ネットワーク制御部 234 値リスト作成部 235 remote参照代入部 240 参照者側位置リスト 241 所有者側位置リスト 242 所有者側値リスト 243 参照者側値リスト 500、510、520 ヘッダ 501、511、521 リスト本体
───────────────────────────────────────────────────── フロントページの続き (72)発明者 海永 正博 神奈川県川崎市麻生区王禅寺1099番地 株 式会社日立製作所システム開発研究所内 (72)発明者 斎藤 靖彦 神奈川県川崎市麻生区王禅寺1099番地 株 式会社日立製作所システム開発研究所内
Claims (20)
- 【請求項1】 逐次処理プログラムまたは共有メモリ型
並列計算機用プログラムを分散メモリ型並列計算機プロ
グラムに変換するプログラム並列化方法において、 配列の添字が配列になっている間接参照を含むループに
対して、参照されている配列要素が自プロセッサにある
か他プロセッサにあるかを判定する文を、該間接参照ル
ープ内に挿入するステップと、 参照されている配列要素が他プロセッサにある場合に該
配列要素についての情報をリストに登録する文を、該間
接参照ループ内に挿入するステップと、該リストをプロ
セッサ間で交換するリスト交換文を、該間接参照ループ
の後に挿入するステップと、 該交換されたリストを用いて他プロセッサの配列要素の
値を自プロセッサの配列要素に代入する文を、該リスト
交換文の後に挿入するステップとを含むことを特徴とす
るプログラム並列化方法。 - 【請求項2】 配列の添字が配列になっている間接参照
ループを分散メモリ型並列計算機で並列実行する方法に
おいて、 参照されている配列要素が自プロセッサにあるか他プロ
セッサにあるかを該間接参照ループ内で判定するステッ
プと、 自プロセッサにある場合に該配列要素への代入をするス
テップと、 他プロセッサにある場合に該配列要素についての情報を
該間接参照ループ内でリストに登録するステップと、 該間接参照ループ終了後に該リストをプロセッサ間で交
換するステップと、 該交換されたリストを用いて他プロセッサの配列要素の
値を自プロセッサの配列要素に代入するステップとを含
むことを特徴とする間接参照ループの並列実行方法。 - 【請求項3】 逐次処理プログラムまたは共有メモリ型
並列計算機用プログラムを分散メモリ型並列計算機プロ
グラムに変換するプログラム並列化装置において、 配列の添字が配列になっている間接参照を含むループに
対して、参照されている配列要素が自プロセッサにある
か他プロセッサにあるかを判定する文を、該間接参照ル
ープ内に挿入する手段と、 参照されている配列要素が他プロセッサにある場合に該
配列要素についての情報をリストに登録する文を、該間
接参照ループ内に挿入する手段と、 該リストをプロセッサ間で交換するリスト交換文を、該
間接参照ループの後に挿入する手段と、 該交換されたリストを用いて他プロセッサの配列要素の
値を自プロセッサの配列要素に代入する文を、該リスト
交換文の後に挿入する手段とを備えることを特徴とする
プログラム並列化装置。 - 【請求項4】 配列の添字が配列になっている間接参照
ループを分散メモリ型並列計算機で並列実行する装置に
おいて、 参照されている配列要素が自プロセッサにあるか他プロ
セッサにあるかを判定する手段と、 自プロセッサにある場合に該配列要素への代入をする手
段と、 他プロセッサにある場合に該配列要素についての情報を
リストに登録する手段と、 該リストをプロセッサ間で交換する手段と、 該交換されたリストを用いて他プロセッサの配列要素の
値を自プロセッサの配列要素に代入する手段とを備える
ことを特徴とする間接参照ループの並列実行装置。 - 【請求項5】 逐次処理プログラムまたは共有メモリ型
並列計算機用プログラムを分散メモリ型並列計算機プロ
グラムに変換するプログラム並列化方法において、 配列の添字が配列になっている間接参照を複数個含むル
ープに対して、該ループを分解して各々が1個の間接参
照を含む複数のループの組み合わせに変換するステップ
と、該分解されたループの各々を請求項1の並列化方法
にしたがって並列化するステップとを含むことを特徴と
するプログラム並列化方法。 - 【請求項6】 請求項5記載のプログラム並列化方法に
おいて、 間接参照ループを分解して各々が1個の間接参照を含む
複数のループの組み合わせに変換するステップは、間接
参照の各々に対して、一時配列を生成するステップと、
該間接参照ループ内の該間接参照を該一時配列の参照に
置換するステップと、該間接参照と該一時配列要素を両
辺に持つ代入文を含む新たなループを、該間接参照ルー
プの前または後に生成するステップとを含むことを特徴
とするプログラム並列化方法。 - 【請求項7】 逐次処理プログラムまたは共有メモリ型
並列計算機用プログラムを分散メモリ型並列計算機プロ
グラムに変換するプログラム並列化方法において、 配列の添字が配列になっている間接参照が代入文の右辺
に現われるループに対して、参照されている配列要素が
自プロセッサにあるか他プロセッサにあるかを判定する
文を、該間接参照ループ内に挿入するステップと、 他プロセッサにある場合に該配列要素についての位置情
報を位置リストに登録する文を、該間接参照ループ内に
挿入するステップと、 該位置リストをプロセッサ間で交換する位置リスト交換
文を、該間接参照ループの後に挿入するステップと、 該交換された位置リストを用いて、他プロセッサから参
照されている配列要素の値を含む値リストを作成する文
を、該位置リスト交換文の後に挿入するステップと、 該値リストをプロセッサ間で交換する値リスト交換文
を、該値リスト作成文の後に挿入するステップと、 該交換された値リストを用いて他プロセッサの配列要素
の値を自プロセッサの配列要素に代入する文を、該値リ
スト交換文の後に挿入するステップとを含むことを特徴
とするプログラム並列化方法。 - 【請求項8】 請求項7記載のプログラム並列化方法に
おいて、 位置リストに登録する位置情報は、参照されている配列
要素を所有するプロセッサのプロセッサ番号、該配列要
素のインデックス、該配列要素を参照しているループイ
タレーションのインデックスを含むことを特徴とするプ
ログラム並列化方法。 - 【請求項9】 配列の添字が配列になっている間接参照
が代入文の右辺に現われるループを分散メモリ型並列計
算機で並列実行する方法において、 参照されている配列要素が自プロセッサにあるか他プロ
セッサにあるかを、該間接参照ループ内で判定するステ
ップと、 自プロセッサにある場合に該配列要素への代入をするス
テップと、 他プロセッサにある場合に該配列要素についての位置情
報を該間接参照ループ内で位置リストに登録するステッ
プと、 該間接参照ループ終了後に該位置リストをプロセッサ間
で交換するステップと、 該交換された位置リストを用いて、他プロセッサから参
照されている配列要素の値を含む値リストを作成するス
テップと、 該値リストをプロセッサ間で交換するステップと、 該交換された値リストを用いて他プロセッサの配列要素
の値を自プロセッサの配列要素に代入するステップとを
含むことを特徴とする、間接参照ループの並列実行方
法。 - 【請求項10】 請求項9記載の間接参照ループの並列
実行方法において、 位置リストに登録する位置情報は、参照されている配列
要素を所有するプロセッサのプロセッサ番号、該配列要
素のインデックス、該配列要素を参照しているループイ
タレーションのインデックスを含むことを特徴とする間
接参照ループの並列実行方法。 - 【請求項11】 逐次処理プログラムまたは共有メモリ
型並列計算機用プログラムを分散メモリ型並列計算機プ
ログラムに変換するプログラム並列化方法において、 配列の添字が配列になっている間接参照が代入文の左辺
に現われるループに対して、間接参照されている配列の
要素を最後に書き換えたイタレーションのインデックス
を記録する最終イタレーション配列の宣言文をプログラ
ム内に挿入するステップと、 該最終イタレーション配列の初期化文を該間接参照ルー
プの前に挿入するステップと、参照されている配列要素
が自プロセッサにあるか他プロセッサにあるかを判定す
る文を、該間接参照ループ内に挿入するステップと、 最終イタレーション配列にイタレーションインデックス
を記録する文を、該間接参照ループ内に挿入するステッ
プと、 他プロセッサにある場合に該配列要素についての代入情
報を代入リストに登録する文を、該間接参照ループ内に
挿入するステップと、 該代入リストをプロセッサ間で交換する代入リスト交換
文を、該間接参照ループの後に挿入するステップと、 該交換された代入リストを用いて他プロセッサの配列要
素の値を自プロセッサの配列要素に代入する文を、該代
入リスト交換文の後に挿入するステップとを含むことを
特徴とするプログラム並列化方法。 - 【請求項12】 請求項11記載のプログラム並列化方
法において、 代入リストに登録する代入情報は、参照されている配列
要素を所有するプロセッサのプロセッサ番号、該配列要
素のインデックス、該配列要素を参照しているループイ
タレーションのインデックス、および該配列要素に代入
すべき値を含むことを特徴とするプログラム並列化方
法。 - 【請求項13】 配列の添字が配列になっている間接参
照が代入文の左辺に現われるループを分散メモリ型並列
計算機で並列実行する方法において、 配列要素を最後に書き換えたイタレーションのインデッ
クスを記録する最終イタレーション配列を初期化するス
テップと、 参照されている配列要素が自プロセッサにあるか他プロ
セッサにあるかを、該間接参照ループ内で判定するステ
ップと、 自プロセッサにある場合に該配列要素への代入を実行
し、該最終イタレーション配列にイタレーションインデ
ックスを記録するステップと、 他プロセッサにある場合に該配列要素についての代入情
報を、該間接参照ループ内で代入リストに登録するステ
ップと、 該間接参照ループ終了後に該代入リストをプロセッサ間
で交換するステップと、 該交換された代入リストを用いて他プロセッサの配列要
素の値を自プロセッサの配列要素に代入するステップと
を含むことを特徴とする間接参照ループの並列実行方
法。 - 【請求項14】 請求項13記載の間接参照ループの並
列実行方法において、 代入リストに登録する代入情報は、参照されている配列
要素を所有するプロセッサのプロセッサ番号、該配列要
素のインデックス、該配列要素を参照しているループイ
タレーションのインデックス、および該配列要素に代入
すべき値を含むことを特徴とする、間接参照ループの並
列実行方法。 - 【請求項15】 請求項13記載の間接参照ループの並
列実行方法において、 交換された代入リストを用いて他プロセッサの配列要素
の値を自プロセッサの配列要素に代入するステップは、
最終イタレーション配列に格納されているインデックス
と代入リスト内のループイタレーションインデックスを
比較するステップと、前者が後者よりも小さいときに、
代入を実行し、かつ、後者を最終イタレーション配列に
格納するステップを含むことを特徴とする間接参照ルー
プの並列実行方法。 - 【請求項16】 配列の添字が配列になっている間接参
照が代入文の左辺に現われるループを分散メモリ型並列
計算機で並列実行する方法において、間接参照されてい
る配列の要素を最後に書き換えたイタレーションのイン
デックスを記録する配列を設けたことを特徴とする間接
参照ループの並列実行方法。 - 【請求項17】 逐次処理プログラムまたは共有メモリ
型並列計算機用プログラムを分散メモリ型並列計算機プ
ログラムに変換するプログラム並列化方法において、 配列の添字が配列になっている間接参照が加算代入文の
左辺に現われるループに対して、参照されている配列要
素が自プロセッサにあるか他プロセッサにあるかを判定
する文を、該間接参照ループ内に挿入するステップと、 他プロセッサにある場合に該配列要素についての代入情
報を代入リストに登録する文を、該間接参照ループ内に
挿入するステップと、 該代入リストをプロセッサ間で交換する代入リスト交換
文を、該間接参照ループの後に挿入するステップと、 該交換された代入リストを用いて他プロセッサの配列要
素の値を自プロセッサの配列要素に加算代入する文を、
該代入リスト交換文の後に挿入するステップとを含むこ
とを特徴とするプログラム並列化方法。 - 【請求項18】 請求項17記載のプログラム並列化方
法において、 代入リストに登録する代入情報は、参照されている配列
要素を所有するプロセッサのプロセッサ番号、該配列要
素のインデックス、および該配列要素に代入すべき値を
含むことを特徴とするプログラム並列化方法。 - 【請求項19】 配列の添字が配列になっている間接参
照が加算代入文の左辺に現われるループを分散メモリ型
並列計算機で並列実行する方法において、 参照されている配列要素が自プロセッサにあるか他プロ
セッサにあるかを、該間接参照ループ内で判定するステ
ップと、 自プロセッサにある場合に該配列要素への加算代入をす
るステップと、 他プロセッサにある場合に該配列要素についての代入情
報を該間接参照ループ内で代入リストに登録するステッ
プと、 該間接参照ループ終了後に該代入リストをプロセッサ間
で交換するステップと、 該交換された代入リストを用いて他プロセッサの配列要
素の値を自プロセッサの配列要素に加算代入するステッ
プとを含むことを特徴とする間接参照ループの並列実行
方法。 - 【請求項20】 請求項19記載の間接参照ループの並
列実行方法において、 代入リストに登録する代入情報は、参照されている配列
要素を所有するプロセッサのプロセッサ番号、該配列要
素のインデックス、および該配列要素に代入すべき値を
含むことを特徴とする間接参照ループの並列実行方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP6062045A JPH07244647A (ja) | 1994-03-07 | 1994-03-07 | 間接参照ループの並列化方法、並列化装置、並列実行方法および並列実行装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP6062045A JPH07244647A (ja) | 1994-03-07 | 1994-03-07 | 間接参照ループの並列化方法、並列化装置、並列実行方法および並列実行装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH07244647A true JPH07244647A (ja) | 1995-09-19 |
Family
ID=13188807
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP6062045A Withdrawn JPH07244647A (ja) | 1994-03-07 | 1994-03-07 | 間接参照ループの並列化方法、並列化装置、並列実行方法および並列実行装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH07244647A (ja) |
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7076777B2 (en) | 2002-08-07 | 2006-07-11 | International Business Machines Corporation | Run-time parallelization of loops in computer programs with static irregular memory access patterns |
| US8028281B2 (en) | 2003-12-15 | 2011-09-27 | International Business Machines Corporation | Run-Time parallelization of loops in computer programs using bit vectors |
| US8028280B2 (en) | 1999-12-01 | 2011-09-27 | International Business Machines Corporation | Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code |
| US8176108B2 (en) | 2000-06-20 | 2012-05-08 | International Business Machines Corporation | Method, apparatus and computer program product for network design and analysis |
| JPWO2021161978A1 (ja) * | 2020-02-10 | 2021-08-19 |
-
1994
- 1994-03-07 JP JP6062045A patent/JPH07244647A/ja not_active Withdrawn
Cited By (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8028280B2 (en) | 1999-12-01 | 2011-09-27 | International Business Machines Corporation | Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code |
| US8176108B2 (en) | 2000-06-20 | 2012-05-08 | International Business Machines Corporation | Method, apparatus and computer program product for network design and analysis |
| US7076777B2 (en) | 2002-08-07 | 2006-07-11 | International Business Machines Corporation | Run-time parallelization of loops in computer programs with static irregular memory access patterns |
| US8028281B2 (en) | 2003-12-15 | 2011-09-27 | International Business Machines Corporation | Run-Time parallelization of loops in computer programs using bit vectors |
| JPWO2021161978A1 (ja) * | 2020-02-10 | 2021-08-19 | ||
| WO2021161978A1 (ja) * | 2020-02-10 | 2021-08-19 | 日本電気株式会社 | 記録媒体、命令生成方法及び命令生成装置 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5293631A (en) | Analysis and optimization of array variables in compiler for instruction level parallel processor | |
| EP0735468B1 (en) | Method and apparatus for an optimizing compiler | |
| US6530079B1 (en) | Method for optimizing locks in computer programs | |
| CN114936099B (zh) | 一种用于神经网络计算的图优化方法和装置 | |
| JPH06266683A (ja) | 並列処理装置 | |
| US7254809B2 (en) | Compilation of unified parallel C-language programs | |
| JPH0830561A (ja) | プログラムの並列化実行方法及び並列化実行コンパイラ | |
| Tu | Automatic array privatization and demand-driven symbolic analysis | |
| US20020166115A1 (en) | System and method for computer program compilation using scalar register promotion and static single assignment representation | |
| JP3047998B2 (ja) | 並列計算機におけるプロセッサ割り当て方法、及び装置 | |
| Agrawal et al. | Interprocedural compilation of irregular applications for distributed memory machines | |
| WO2024065867A1 (zh) | 一种用于神经网络编译的内存优化方法及装置 | |
| Gaudiot et al. | The Sisal project: real world functional programming | |
| Brown et al. | Fortran performance optimisation and auto-parallelisation by leveraging MLIR-based domain specific abstractions in Flang | |
| JPH07244647A (ja) | 間接参照ループの並列化方法、並列化装置、並列実行方法および並列実行装置 | |
| US20030126589A1 (en) | Providing parallel computing reduction operations | |
| US11762641B2 (en) | Allocating variables to computer memory | |
| JP3266097B2 (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム | |
| Witterauf et al. | Polyhedral fragments: an efficient representation for symbolically generating code for processor arrays | |
| Fitchett et al. | CPU-less parallel execution of lambda calculus in digital logic | |
| JP3608993B2 (ja) | コンパイラ装置及びコンパイラプログラムを記録した記録媒体 | |
| JP3551352B2 (ja) | ループ分割方法 | |
| CN114625551B (zh) | 车辆通信方法及装置 | |
| Faiman et al. | An optimizing Pascal compiler | |
| Granston et al. | Combining flow and dependence analyses to expose redundant array accesses |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20010508 |