JP2000112901A - データ再配置方法 - Google Patents

データ再配置方法

Info

Publication number
JP2000112901A
JP2000112901A JP10281692A JP28169298A JP2000112901A JP 2000112901 A JP2000112901 A JP 2000112901A JP 10281692 A JP10281692 A JP 10281692A JP 28169298 A JP28169298 A JP 28169298A JP 2000112901 A JP2000112901 A JP 2000112901A
Authority
JP
Japan
Prior art keywords
array
loop
dimension
data
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP10281692A
Other languages
English (en)
Other versions
JP3551353B2 (ja
Inventor
Makoto Sato
真琴 佐藤
Takashi Hirooka
孝志 廣岡
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
Hitachi Ltd
Real World Computing Partnership
Original Assignee
REAL WORLD COMPUTING PARTNERSH
Hitachi Ltd
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, Hitachi Ltd, Real World Computing Partnership filed Critical REAL WORLD COMPUTING PARTNERSH
Priority to JP28169298A priority Critical patent/JP3551353B2/ja
Priority to US09/409,900 priority patent/US6681388B1/en
Publication of JP2000112901A publication Critical patent/JP2000112901A/ja
Application granted granted Critical
Publication of JP3551353B2 publication Critical patent/JP3551353B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/453Data distribution

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 分散記憶型または分散共有記憶型並列機で、
プログラム実行中のデータ再分散におけるコピーを不要
にしプログラムの実行を高速化すること。 【解決手段】 各配列要素の分散メモリへの割付け方法
を表わすデータ分散形状を収集し(形状収集部103)、各
配列をどのデータ分散形状においても各部分配列が唯一
のプロセッサに属するような部分配列からなる集合に分
割し(配列細分化部105)、各部分配列内の配列要素が連
続アドレスになるように元の配列の次元数を増加させて
配列要素の順序を並び替え(配列高次元化部106)、配列
の各次元のデータ分散形状の種類が2種類以下であるこ
とを判定し(形状種別数判定104)、配列の高次元化され
る次元の添字にループ制御変数が含まれることを検出
し、そのループ制御変数を持つループを配列高次元化に
対応してネストする複数のループに変換し(ループ変換
部1071)、プログラム中の配列参照点における配列添字
を配列高次元化に対応して変更する(添字変更部1072)。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、逐次計算機向けの
プログラムまたは並列計算機向けのデータ再分散指示を
含むプログラムを入力してデータ再配置を行なったり、
あるいは、データ再配置指示を挿入した並列計算機向け
のプログラムまたはオブジェクトプログラムを生成する
コンパイラに係り、特に、バッファへのコピー時間を不
要とし、プログラムの実行時間を短縮することが可能な
データ再配置方法に関する。
【0002】
【従来技術】従来、分散メモリ型並列計算機におけるデ
ータ再分散を高速化する技術として、ダニエル・ジェイ
・パレルモ、オイゲネ・ヴェー・ホッジ・フィエル、プ
リスヴィラージ・バナジー著「ダイナミック データ パ
ーティショニング フォー ディストリビューテッド−メ
モリ マルチコンピューターズ」ジャーナル オブ パラ
レル アンド ディストリビューテッド コンピューティ
ング 38、第158頁から第175頁(1988)(D
aniel J. Palermo, Eugene W. Hodges IV, andPrithvir
aj Banerjee. "Dynamic Data Partitioning for Distri
buted-Memory Multicomputers", Journal of Parallel
and Distributed Computing 38, pp. 158-175 (1998))
中のpp.170-171で言及されているように、データ再分散
オペレーションのアグレゲーション、即ち、データ再分
散すべき複数の配列、または、データ再分散すべき一つ
の配列の中の非連続な部分を、1つのバッファの連続ア
ドレス領域へプログラム実行時にコピーし、そのバッフ
ァに対して再分散を唯1回、行なうことで、再分散の起
動オーバヘッドを削減するものがあった。
【0003】また、従来、共有メモリ型並列計算機にお
けるFalse Sharingと呼ばれるキャッシュ間コンフリク
トを削減する技術として、ジェニファー・エム・アンダ
ースン、サマン・ピー・アマラシンハ、モニカ・エス・
ラム著「データ アンド コミュニケーション トランス
フォーメーションズ フォー マルチプロセッサーズ」ピ
ーピーオーピーピー95、第166頁カラ第178頁、
1995(Jennifer M. Anderson, Saman P. Amarasing
he, and Monica S. Lam. "Data and Communication Tra
nsformations for Multiprocessors", PPOPP'95, pp. 1
66-178 (1995))で述べられているように、配列の次元
の内、アドレスが連続する配列要素を特定するのに使わ
れる次元を、プロセッサ個数分に分割し、その次元を、
一つのプロセッサがアクセスする添字だけからなる次元
と、プロセッサ番号を指定する次元の2つの次元に分割
し、後者を、アドレスの増加が最も遅い次元になるよう
に配列を高次元化することで、キャッシュ内のデータが
2つのプロセッサにまたがる機会を減少させるものがあ
った。
【0004】
【発明が解決しようとする課題】上記第1の従来技術
は、プログラム実行時にバッファへコピーするため、コ
ピーに余分な時間がかかるという問題点がある。また、
上記第1の従来技術は、再分散前後で配列の大きさが変
化する可能性があるため、再分散のたびに配列領域の確
保・開放が必要で、それらに余分な時間がかかるという
問題点がある。さらに、上記第1の従来技術は、上記配
列領域の確保・開放、および、再分散前後で配列の形状
が変化することにより、本来は不要な、再分散前後で同
一のプロセッサに割り当てられる部分配列のコピーも必
要で、それに余分な時間がかかるという問題点がある。
【0005】上記第2の従来技術は、ある特定の次元の
配列要素を複数プロセッサが分担して計算する時には適
用可能だが、配列が3次元以上で、プログラム中に2つ
の異なるループが存在し、複数プロセッサが分担して計
算する配列の次元がそれらのループに対して、各々、ア
ドレスが連続になる次元から1次元目と2次元目である
時、前者のループに対してはキャッシュ間コンフリクト
の一種であるフォールスシェアリングがかなり削減可能
である。しかし、後者のループに対しては配列の2次元
目の、プロセッサ間の割り当て境界で、3次元目の各添
字に対してプロセッサ総数だけ両プロセッサがキャッシ
ュ共有する可能性があるため、フォールスシェアリング
はあまり削減できないという問題点がある。
【0006】本発明の目的は、プログラム実行時にバッ
ファへのコピー処理をなくし、プログラムの実行時間を
短縮することである。また、本発明の別の目的は、再分
散時の、配列領域の確保・開放処理をなくし、プログラ
ムの実行時間を短縮することである。また、本発明の別
の目的は、再分散前後で同一のプロセッサに割り当てら
れる部分配列のコピーをなくすことにより、プログラム
の実行時間を短縮することである。また、本発明の別の
目的は、プログラム中に複数の異なるループが存在し、
各々のループで、複数プロセッサが分担して計算する配
列の次元が異なる時に、それら全てのループに対してキ
ャッシュ間コンフリクトを削減することにより、プログ
ラムの実行時間を短縮することである。
【0007】
【課題を解決するための手段】本発明は、上記目的を達
成するために、プログラム中の各点における、各配列要
素の分散メモリへの割付け方法を表わすデータ分散形状
を収集する形状収集ステップ(図1の形状収集部10
3)と、各配列を、上記形状収集で得られたどのデータ
分散形状においても、各部分配列が唯一のプロセッサに
属するような部分配列からなる集合に分割する配列細分
化ステップ(同、配列細分化部105)と、上記各部分
配列内の配列要素が連続アドレスになるように元の配列
の次元数を増加させて配列要素の順序を並び替える配列
高次元化ステップ(同、配列高次元化部106)と、配
列の各次元のデータ分散形状の種類が2種類以下である
ことを判定する形状種別数判定ステップ(同、形状種別
数判定104)と、配列の高次元化される次元の添字に
ループ制御変数が含まれることを検出し、そのループ制
御変数を持つループを、配列高次元化に対応して、ネス
トする複数のループに変換するループ変換ステップ
(同、ループ変換部1071)と、プログラム中の配列
参照点における配列添字を、配列高次元化に対応して変
更する添字変更ステップ(同、添字変更部1072)
と、分散メモリ型並列計算機の各プロセッサで、データ
分散前の元の配列全体を宣言するグローバルデータ宣言
作成ステップ(図7のステップ706)と、各配列参照
点における配列添字の値を、データ分散前の元の値を用
いるグローバル添字生成ステップ(図7のステップ70
52)と、通信データのバッファリングを行なわない再
分散通信を生成する非バッファリング再分散通信生成ス
テップ(図7のステップ7041)を含むものである。
【0008】また、本発明は、上記別の目的を達成する
ために、複数プロセッサがその部分配列を分担して計算
すべき配列に対して、プログラム中の各点における、各
配列要素のプロセッサへの割付け方法を表わすデータ分
担形状を収集する形状収集ステップ(図27の形状収集
部103)と、各配列を、上記形状収集で得られたどの
データ分担形状においても、各部分配列が唯一のプロセ
ッサの分担になるような部分配列からなる集合に分割す
る配列細分化ステップ(同、配列細分化部105)と、
上記各部分配列内の配列要素が連続アドレスになるよう
に元の配列の次元数を増加させて配列要素の順序を並び
替える配列高次元化ステップ(同、配列高次元化部10
6)と、配列の各次元のデータ分担形状の種類が2種類
以下であることを判定する形状種別数判定ステップ
(同、形状種別数判定部104)と、配列の高次元化さ
れる次元の添字にループ制御変数が含まれることを検出
し、そのループ制御変数を持つループを、配列高次元化
に対応して、ネストする複数のループに変換するループ
変換ステップ(同、ループ変換部1071)と、プログ
ラム中の配列参照点における配列添字を、配列高次元化
に対応して変更する添字変更ステップ(同、添字変更部
1072)と、分散メモリ型並列計算機の各プロセッサ
で、データ分散前の元の配列全体を宣言するグローバル
データ宣言作成ステップ(図7のステップ706)と、
各配列参照点における配列添字の値を、データ分散前の
元の値を用いるグローバル添字生成ステップ(図7のス
テップ7052)と、通信データのバッファリングを行
なわない再分散通信を生成する非バッファリング再分散
通信生成ステップ(図7のステップ7041)を含むも
のである。
【0009】
【発明の実施の形態】(第1の実施例)以下、本発明の
第1の実施例を図1から図26を用いて説明する。第1
の実施例では分散メモリを持つ並列計算機を対象として
いる。図1は、本発明による並列化コンパイラの構成を
示したものである。100は並列化コンパイラである。
並列化コンパイラ100は、同図に示すように、ソース
プログラム110を入力して辞書120及び中間語13
0を出力する構文解析部101、辞書120及び中間語
130を入力してデータ分散指示文を解析し、データ分
散情報140を出力するデータ分散指示文解析部10
2、データ分散情報140を入力してプログラム内に現
れるデータ分散形状情報を収集し、その結果を辞書12
0に反映させる形状収集部103、辞書120及びデー
タ分散情報140を入力して配列のデータ分散の種別数
を判定し、配列を細分化すべきか否かを辞書120に反
映させる形状種別数判定部104、辞書120及びデー
タ分散情報140を入力して配列を細分化し、その結果
を辞書120に反映させる配列細分化部105、辞書1
20及びデータ分散情報140を入力して、データ分散
形状が変化する次元の配列添字範囲を分割して、その次
元を2つの次元に分けることによって配列を高次元化
し、その結果を辞書120に反映させる配列高次元化部
106、辞書120,データ分散情報140及び中間語
130を入力してプログラムを変換し、その結果を中間
語130に反映し、またループテーブル150を出力す
るプログラム変換部107,辞書120,データ分散情
報140,中間語130及びループテーブル150を入
力してプログラムを並列化し、その結果を辞書120,
中間語130,ループテーブル150に反映するプログ
ラム並列化部108、辞書120,中間語130,ルー
プテーブル150を入力して並列化プログラム160を
出力するコード生成部109よりなる。
【0010】ここで、プログラム変換部107は、辞書
120,データ分散情報140及び中間語130を入力
して、配列を高次元化する時に添字範囲を分割すること
によって生じる、分割境界をまたいだ配列要素の参照と
そうでない配列要素の参照で添字が異なることに対処す
るために、分割境界をまたいだ配列要素を参照する文を
含むループ繰り返しと、そのような文を含まないループ
繰り返しを別のループにするループピーリングと、配列
高次元化に伴い、増加した添字に対するループを作成す
るループ多重化とを行い、その結果をループテーブル1
50を作成してそこに反映し、また中間語130に反映
するループ変換部1071、配列の高次元化とループピ
ーリングに伴って、配列の添字を変更する添字変更部1
072、よりなる。
【0011】本実施例におけるソースプログラム110
は、HPF(High Performance Fortran)のようなデータ
分散指示文の入ったプログラムであり、並列化プログラ
ム160は、分散メモリマシン向けのMPI(Message P
assing Interface)のようなメッセージ通信入りの並列
化プログラムである。ここで、データ分散指示文とは、
データを分割して分割された個々のデータを複数の論理
プロセッサの内の一つに割り付けるように、コンパイラ
に指示する文である。
【0012】HPFの言語仕様の説明は、ハイ パフォ
ーマンス フォートラン フォーラム編「ハイ パフォー
マンス フォートラン ランゲージ スペシフィケーショ
ン バージョン2.0.α.2」センター フォー リサーチ オ
ン パラレル コンピュテーション、ライス ユニバーシ
ティ、ヒューストン、テキサス、1996(High Perfo
rmance Fortran Forum, "High Performance Fortran La
nguage SpecificationVer. 2.0.α.2", Center for Res
earch on Parallel Computation, Rice Univ.,Houston,
Tx, 1996.)に詳しい。
【0013】MPIの仕様の説明は、メッセージ パッ
シング インターフェース フォーラム編「エム ピー ア
イ:ア メッセージ ―パッシング インターフェース ス
タンダード」ユニバーシティ オブ テネシー、ノックス
ビル、テネシー、1994(Message Passing Interfac
e Forum, "MPI: A Message-Passing Interface Standar
d", University of Tennessee, Knoxville, Tennessse
e, 1994.)に詳しい。
【0014】次に、本発明の並列化コンパイラの動作
を、図1を元に、図2から図26まで、具体例を用いて
説明する。図8はソースプログラム110の具体例であ
る。文800は、Fortranの文法による配列a及
びスカラ変数b,cの宣言である。文803と文817
で囲まれた部分は、kをループ制御変数とするループ本
体である。文805と文809で囲まれた部分は、jを
ループ制御変数とするループ本体であり、文806と文
808で囲まれた部分は、iをループ制御変数とするル
ープ本体である。文811と文815で囲まれた部分も
同様に、jをループ制御変数とするループ本体であり、
文812と文814で囲まれた部分も同様に、iをルー
プ制御変数とするループ本体である。
【0015】文816は、スカラ変数b,cの値を変更
する手続き呼出し文である。文801,文802,文8
04,及び文810はHPFの指示文である。“!HP
F$”は、それで始まる文がHPFの指示文であること
を表わすキーワードである。文801は論理プロセッサ
の配置形状を指定する指示文である。“PROCESS
ORS”はキーワードであり、それに続く“proc
(4)”により、論理プロセッサ4台が直線状に配置さ
れていることを宣言している。文802は、配列aの初
期分割を指示する文である。“DISTRIBUTE”
はキーワードであり、それに続く“a(block,
*) ONTO proc”により、配列aの1次元目を
blockという方法で分割し、分割された各々の部分
配列を論理プロセッサproc(1),proc
(2),proc(3),proc(4)に、それぞれ
割り付けることを表わす。
【0016】ここで、上記の論理プロセッサ宣言におい
て、配列aの1次元目をblock分割するとは、配列
aの1次元目の下限値を1、上限値をNとすると、配列
aの1次元目の添字を、1から[(N−1)/4]+1
個ずつ区切って、proc(1)から順番に割り付ける
ことである。今の場合、a(1:3,1:12),a
(4:6,1:12),a(7:9,1:12),a
(10:12,1:12)がそれぞれ、proc
(1),proc(2),proc(3),proc
(4)に割り付けられる。
【0017】文804は配列aをプログラム実行中に再
分割することを指示する文である。“REDISTRI
BUTE”はキーワードであり、それに続く“a(bl
ock,*) ONTO proc”により、配列aの1
次元目をblockという方法で分割し、分割された各
々の部分配列を論理プロセッサproc(1),pro
c(2),proc(3),proc(4)に、それぞ
れ割り付けることを表わす。この指示文により、それま
で他の方法で論理プロセッサに割り付けられていた配列
要素は、配列aの1次元目をblock分割するような
割り付けられ方に変更される。これにより、一般に論理
プロセッサ間のデータ移動が発生する。
【0018】文810も同様に配列aをプログラム実行
中に再分割することを指示する文である。この文は、文
804とは異なり、配列aの2次元目をblock分割
するような割り付けかたを指示する。今の場合、a
(1:12,1:3),a(1:12,4:6),a
(1:12,7:9),a(1:12,10:12)が
それぞれ、proc(1),proc(2),proc
(3),proc(4)に割り付けられる。
【0019】以下、並列化コンパイラ100の中の個々
の処理を説明する。構文解析部101は上記ソースプロ
グラム110を入力して辞書120、中間語130を生
成する。中間語130はソースプログラム110に対応
しているので、以下の説明では、図8のソースプログラ
ム110を、中間語130のソースプログラムイメージ
の表現として用いる。
【0020】図10は、構文解析部101が生成する辞
書120を示したものである。1000は、配列aに対
する辞書120である。本説明ではスカラ変数bとcに
対する辞書は説明で用いないため、省略する。1001
は変数名を示し、配列名である“a”という文字列が設
定されている。1002は変数の型で、実数型を示す
“REAL”が設定されている。1003は変数長で、
4バイト変数を示す“4”が設定されている。1004
は変数が配列か否かを表わすフラグで、aは配列なので
“TRUE”が設定されている。
【0021】1005は配列を細分化すべきか否かを表
わすフラグであり、“TRUE”は配列を細分化すべき
であることを表わす。この値は形状種別数判定104で
設定される。1006は変数が配列の場合、その次元数
を表わす。配列aは2次元配列なので、値2が設定され
ている。1007は変数が配列の場合、その配列の各次
元の寸法宣言情報を格納した配列辞書1040を指すポ
インタである。1008は細分化情報1100へのポイ
ンタである。これは配列細分化105で設定される。1
009は高次元化辞書1200へのポインタである。こ
れは配列高次元化106で設定される。1010はデー
タ分散情報の収集リストの先頭1020へのポインタで
ある。これは形状収集103で設定される。
【0022】1040は配列の各次元の寸法宣言情報を
格納した配列辞書であり、辞書1000のフィールド1
007から指されている。1041は配列aの第1次元
目の下限値と上限値が、各々、1と12であることを表
わしている。1042は配列aの第2次元目の下限値と
上限値が、各々、1と12であることを表わしている。
【0023】データ分散指示文解析102は、辞書12
0及び中間語130を入力して、データ分散情報140
を出力する。図9は、データ分散情報140を示したも
のである。上記説明した通り、中間語130として図8
のソースプログラム110を用いる。また、図8におけ
る文802に対するデータ分散情報は文804に対する
データ分散情報と同じなので、ここでは文804と文8
10に対するデータ分散情報、及び文801に対する論
理プロセッサ情報のみ示す。
【0024】940はPROCESSORS指示文80
1を解析して得たPROCESSORS情報テーブルで
ある。941は論理プロセッサの変数名を表わす文字列
“proc”である。942は論理プロセッサの配列次
元数であり、値1は1次元配列であることを示す。94
3は論理プロセッサの各次元の寸法情報を表わす配列辞
書950へのポインタである。950は論理プロセッサ
の各次元の寸法情報を表わす配列辞書であり、論理プロ
セッサprocの第1次元目の下限値と上限値が、各
々、0と3であることを示している。
【0025】900は再分散指示文804を解析して得
た、配列aに対するデータ分散情報テーブルである。9
01は804の指示文に対してデータ分散情報が変化す
る他の変数へのポインタである。今の場合、そのような
変数は存在しないので値NULLが設定されている。9
02は配列aの次元数であり、値2が設定されている。
903は各次元ごとのデータ分散情報を表わす次元毎デ
ータ分散情報テーブル920へのポインタである。90
4は論理プロセッサに対するPROCESSORS情報
テーブルへのポインタであり、procに対するPRO
CESSORS情報テーブル940を指している。
【0026】920は配列aに対する次元毎データ分散
情報テーブルである。921は第1次元目の分散形状が
block分割であることを示している。922は第1
次元目のblock分割により、連続する3個の配列要
素が各論理プロセッサに割り当てられることを示してい
る。この数値3は、配列辞書1040から得られる配列
aの第1次元目の寸法「12」を、配列辞書950から
得られる論理プロセッサ数「4」で割って、小数点以下
の端数を切り上げることで得られる。今の場合は「3」
となる。この計算方法は前出の“High PerformanceFort
ran Language Specification”に記述されている。92
3は第2次元目が分散されないことを示している。92
4は第2次元目の、連続する12個の配列要素が各論理
プロセッサに割り当てられることを示している。即ち、
これは第2次元目の全部が各論理プロセッサに割り当て
られることを示している。
【0027】910は再分散指示文810を解析して得
た、配列aに対するデータ分散情報テーブルである。9
11は再分散指示文810に対してデータ分散情報が変
化する他の変数へのポインタである。今の場合、そのよ
うな変数は存在しないので値NULLが設定されている。9
12は配列aの次元数であり、値2が設定されている。
913は各次元ごとのデータ分散情報を表わす次元毎デ
ータ分散情報テーブル930へのポインタである。
【0028】914は論理プロセッサに対するPROC
ESSORS情報テーブルへのポインタであり、pro
cに対するPROCESSORS情報テーブル940を
指している。930は配列aに対する次元毎データ分散
情報テーブルである。931は第1次元目が分散されな
いことを示している。932は第1次元目の、連続する
12個の配列要素が各論理プロセッサに割り当てられる
ことを示している。即ち、これは第2次元目の全部が各
論理プロセッサに割り当てられることを示している。9
33は第2次元目の分散形状がblock分割であるこ
とを示している。934は第2次元目のblock分割
により、連続する3個の配列要素が各論理プロセッサに
割り当てられることを示している。この数値3の計算方
法は922の場合と同様である。
【0029】データ分散指示文解析部102は、上記説
明したデータ分散情報テーブル900及び910を得る
ものであり、通常の構文解析処理に、辞書の各次元ごと
の寸法と論理プロセッサ数から922及び934を計算
する処理を加えただけのものであるので、詳細なアルゴ
リズムは省略する。
【0030】次に、形状収集部103はデータ分散情報
140を入力して、変数ごとのデータ分散情報をまとめ
るための収集リストを作成して、その収集リストの先頭
を変数の辞書120に接続する。図10の1020と1
030はその結果得られるデータ分散情報の収集リスト
であり、1020はその内の先頭であり、辞書1000
のフィールド1010から指されている。1021は次
の収集リストへのポインタであり、次の収集リスト10
30を指している。1022は形状収集103が収集す
るデータ分散情報900へのポインタである。1031
は次の収集リストへのポインタであり、もうリストがな
いので、値NULLが設定されている。1032は形状
収集103が収集するデータ分散情報910へのポイン
タである。
【0031】形状種別数判定部104は、辞書120及
びデータ分散情報140を入力して配列のデータ分散の
種別数を判定し、種別数が2の時は配列を細分化すべき
と判定し、その結果を辞書120に反映させる。まず、
配列aに対する辞書1000のフィールド1010から
収集リスト1020及び1030をたどり、そこから得
られるデータ分散情報テーブル900及び910が各々
異なる分散形状(block,*),(*,bloc
k)であることからデータ分散の種別数2を得る。その
結果、細分化すべきと判定し、細分化フラグ1005の
値をTRUEに設定する。
【0032】配列細分化部105は、辞書120及びデ
ータ分散情報140を入力して配列を細分化し、その結
果を辞書120に反映させる。図2は配列細分化部10
5の処理手順を示したものである。以下、配列aに対す
る処理を示す。まず、形状種別判定部104で設定され
た1005のフラグの値がTRUEなので、配列aは細
分化すべきであり、ステップ200はYesとなる。次
に、ステップ201でIの値が1となる。収集リスト1
020と1030から、配列aのデータ分散情報テーブ
ル900、910をたどり、それらから指される921
及び931より、配列aの1次元目のデータ分散形状が
“block”と“*”とわかる。今の場合、202に
おけるブロック分割の記法におけるmの値は、922の
値3にあたるので、ステップ202はYesとなる。
【0033】ステップ203では、細分化フラグTRU
E、細分分散block、細分幅mとして3、細分PE
数として1次元目がblock分散となるデータ分散指
示文804の、blockに対する論理プロセッサ数4
を、細分化情報の1次元目に設定する。
【0034】図11は細分化情報1100を示したもの
である。1101は1次元目に対する細分化フラグの値
を、1102は1次元目に対する細分分散を、1103
は1次元目に対する細分幅を、1104は1次元目に対
する細分PE数を示している。同様にして、1105は
2次元目に対する細分化フラグの値を、1106は2次
元目に対する細分分散を、1107は2次元目に対する
細分幅を、1108は2次元目に対する細分PE数を示
す。今、Iが1なので、ステップ203で設定された情
報は細分化情報1100の1次元目に対するフィールド
に格納される。即ち、細分化フラグの値TRUEが11
01に、細分分散blockが1102に、細分幅3が
1103に、細分PE数4が1104に格納される。
【0035】次に、ステップ207において、Iの値が
2になる。配列aは2次元なのでステップ208はNo
となり、処理はステップ202に戻る。収集リスト10
20と1030から、配列aのデータ分散情報テーブル
900及び910をたどり、それらから指される92
3,933より、配列aの2次元目のデータ分散形状が
“*”と“block”とわかる。今の場合、ステップ
202におけるブロック分割の記法におけるmの値は、
934の値3にあたるので、ステップ202はYesと
なる。
【0036】ステップ203では、細分化フラグTRU
E、細分分散block、細分幅mとして3、細分PE
数として2次元目がblock分散となるデータ分散指
示文810の、blockに対する論理プロセッサ数4
を、細分化情報の2次元目に設定する。今、Iが2なの
で、ステップ203で設定された情報は細分化情報11
00の2次元目に対するフィールドに格納される。即
ち、細分化フラグの値TRUEが1105に、細分分散
blockが1106に、細分幅3が1107に、細分
PE数4が1108に格納される。
【0037】次に、ステップ207において、Iの値が
3になる。配列aは2次元なのでステップ208はYe
sになる。他にデータ分散配列はないので、ステップ2
09はNoとなり処理を終了する。
【0038】次に、配列高次元化部106は、辞書12
0及びデータ分散情報140を入力して配列宣言を高次
元化することにより配列要素のアドレス順序を変更し、
その結果を辞書120に反映させる。図3は配列高次元
化部106の処理手順を示したものである。以下、配列
aに対する処理を示す。
【0039】まず、形状種別判定部104で設定された
1005のフラグの値がTRUEなので、配列aは細分
化すべきであり、ステップ300はYesとなる。ステ
ップ301では、配列aの辞書1000のフィールド1
006より配列の次元数Kは2、細分化情報1100の
フラグ1101と1105が両方ともTRUEなので、
細分化すべき次元数Jは2で、K+J=4となって、4
次元分の高次元化辞書の領域を確保する。
【0040】図12は高次元化辞書1200を示したも
のである。1201は高次元化後の配列の次元数、12
02は高次元化後の配列の次元毎情報テーブル1210
へのポインタ、1210は次元毎情報テーブル、121
1,1214,1217,1220は各々、高次元化後
の配列の1,2,3,4次元目の高次元化フラグであ
る。高次元化フラグには、高次元化の対象次元なら“c
hanged”が、高次元化により新しく作成される次
元なら“new”が、高次元化の対象でない次元なら
“not changed”が設定される。
【0041】1212,1215,1218,1221
は各々、高次元化後の配列の1,2,3,4次元目の高
次元化対応次元である。高次元化対応次元には、高次元
化の対象次元なら、その次元に対応する新しく作成され
る次元が、高次元化により新しく作成される次元なら、
その元の高次元化対象次元が設定され、高次元化の対象
でない次元なら0が設定される。1213,1216,
1219,1222は各々、高次元化後の配列の1,
2,3,4次元目の上下限値が設定される。
【0042】次に、ステップ302でIの値が1、Jの
値が0となる。細分化情報1100の1次元目の細分化
フラグ1101の値がTRUEなので、ステップ303
はYesとなる。次に、ステップ304でJの値を1に
する。ステップ305で高次元化辞書1200の第1次
元目の高次元化フラグ1211の値をchangedに
設定する。辞書1000中の1041で示された、配列
aの第1次元の下限値1と上限値12、細分化情報11
00のフィールド1104が示す細分化PE数の値4よ
り、細分化後の下限値1、細分化後の上限値1+(12
/4)−1=3を得る。これらから得られる下限値と上
限値の組1:3を高次元化辞書1200の第1次元目に
対するフィールド1213に設定する。また、高次元化
対応次元K+Jの値3を1212に設定する。
【0043】ステップ306で、高次元化辞書のK+J
=3次元目の高次元化フラグ1217の値をnew、下
限値を1、上限値を細分化PE数の値4として、組1:
4を1219に設定する。また、高次元化対応次元Iの
値1を1218に設定する。ステップ308で、Iの値
が2になる。Iの値2は、Kの値2より大きいことはな
いので、ステップ309はNoとなり、ステップ310
により次の次元に処理を移し、ステップ303に戻る。
【0044】細分化情報1100の2次元目の細分化フ
ラグ1105の値がTRUEなので、ステップ303は
Yesとなる。ステップ304でJの値は2になる。ス
テップ305で高次元化辞書1200の第2次元目の高
次元化フラグ1214の値をchangedに設定す
る。辞書1000中の1042で示された、配列aの第
2次元の下限値1と上限値12、細分化情報1100の
フィールド1108が示す細分化PE数の値4より、細
分化後の下限値1、細分化後の上限値1+(12/4)
−1=3を得る。これらから得られる下限値と上限値の
組1:3を高次元化辞書1200の第2次元目に対する
フィールド1216に設定する。また、高次元化対応次
元K+Jの値4を1215に設定する。
【0045】ステップ306で、高次元化辞書のK+J
=4次元目の高次元化フラグ1220の値をnew、下
限値を1、上限値を細分化PE数の値4として、組1:
4を1222に設定する。また、高次元化対応次元Iの
値2を1221に設定する。ステップ308で、Iの値
が3になる。Iの値3は、Kの値2より大きいので、ス
テップ309はYesとなる。データ分散配列は他にな
いので、ステップ311はNoとなり、配列高次元化の
処理を終了する。
【0046】次に、プログラム変換部107は、辞書1
20、データ分散情報140及び中間語130を入力し
てプログラムを変換し、その結果を中間語130に反映
し、またループテーブル150を出力するプログラム変
換を行なう。プログラム変換部107はループ変換部1
071と添字変換部1072からなる。ここでは、中間
語130として、図8の文803と文817に対応する
ループkと、文805から文809までのループj、ル
ープiのみを対象として説明し、文811と文815に
対応するループjと文812から文814までに対応す
るループiに関する処理は省略する。
【0047】図4はループ変換部1071の処理手順を
説明したものである。プログラム分割解析ステップ40
0では辞書120,データ分散情報140及び中間語1
30を入力して、ループテーブル150を出力する。図
13はループテーブル150を示す。1300は図8の
文803と文817に対応するループkのループテーブ
ル、1310は文805と文809に対応するループj
のループテーブル、1330は文806から文808ま
でに対応するループiのループテーブル、1320は文
811と文815に対応するループjのループテーブル
を示す。文812から文814までに対応するループi
のループテーブルは説明に使わないため省略されている
が、それは1320から接続されている。
【0048】1301はループkの一つ内側にあるルー
プ群の先頭ループのループテーブルへのポインタであ
り、1310を指している。1302はループkの一つ
外側にあるループのループテーブルへのポインタであ
り、ループkにはそのようなループはないので、値NU
LLが設定されている。1303は当該ループのループ
制御変数の辞書へのポインタであり、kを指している。
1304はループネストであり、一番外側のループなの
で、1が設定されている。1305は当該ループをピー
リングするか否かを示すフラグであり、これはループピ
ーリング解析401で設定される。1306はループの
上下限値を示し、下限値1、上限値10が設定されてい
る。1307はループをプログラム分割した結果、作成
されるプログラム分割テーブルの先頭テーブルへのポイ
ンタである。ループkはプログラム分割対象ループでな
いので値NULLが設定されている。1308は後続の
ループのループテーブルへのポインタで、ループkには
後続ループはないので値NULLが設定されている。
【0049】同様にして、1311はループjの内側ル
ープであるループiのループテーブル1330へのポイ
ンタ、1312はループjの外側ループであるループk
のループテーブル1300へのポインタ、1313はル
ープ制御変数jの辞書へのポインタ、1314はループ
jのネスト2、1315はループjをピーリングするか
否かを示すフラグ、1316はループjの上下限値、1
317はプログラム分割テーブルの先頭テーブル134
0へのポインタ、1318は後続ループである、811
と815が示すループjのループテーブルへのポインタ
を示す。
【0050】同様にして、1331はループiの内側ル
ープがないため値NULL、1332はループiの外側
ループであるループjのループテーブル1310へのポ
インタ、1333はループiのループ制御変数iの辞書
へのポインタ、1334はループiのネスト3、133
5はループiをピーリングするか否かを示すフラグ、1
336はループiの上下限値、1337はプログラム分
割テーブルの先頭テーブル1360へのポインタ、13
38は後続ループがないため値NULLを示す。ループ
テーブルの内、以上の内容は中間語130から容易に得
られる。
【0051】1340及び1350はループjに対する
プログラム分割テーブルである。1341は本テーブル
が有効な論理プロセッサ番号の範囲を示し、論理プロセ
ッサ番号1に対して有効であることを示す。1342は
プログラム分割後のループの上下限値であり、下限値が
2、上限値が3であることを示す。1343は次のプロ
グラム分割テーブルへのポインタであり、1350を指
している。1351は本テーブルが有効な論理プロセッ
サ番号の範囲を示し、論理プロセッサ番号2から4まで
に対して有効であることを示す。1352はプログラム
分割後のループの上下限値であり、下限値が1、上限値
が3であることを示す。1353は次のプログラム分割
テーブルへのポインタであるが、もうないので値NUL
Lが設定されている。上記2つのプログラム分割テーブ
ルにより、ループjは論理プロセッサ番号1に対して
は、ループ上下限値が2と3、論理プロセッサ番号2か
ら4に対しては、ループ上下限値が1と3、になること
がわかる。
【0052】上記プログラム分割テーブルを得るための
処理はジーマ・ヒラナンダニ、ケン・ケネディ、チャウ
・ウェン・ツェン著「コンパイリング フォートラン デ
ィーフォー エムアイエムディー ディストリビューテッ
ド メモリ マシーンズ」コミュニケーションズ オブ ザ
エーシーエム、ボリューム35、ナンバー8、オーガ
スト、1992、第66頁から第80頁(Seema Hirana
ndani, Ken Kennedy, Chau-Wen Tseng, "Compiling For
tran D for MIMD Distributed-Memory Machines", Comm
unications of the ACM, Vol. 35, No. 8, August, 199
2, pp.66-80)に詳しい。
【0053】次にループピーリング解析ステップ401
は中間語130中の配列参照テーブルとループテーブル
を入力し、各々に対してループピーリング後の情報を追
加する。
【0054】図14は文807中のa(i,j−1)に
対する配列参照テーブルを示したものである。1400
はa(i,j−1)に対する配列参照テーブルである。
1401は配列aの辞書へのポインタである。1402
は配列の各次元の添字情報を表わす添字テーブルの先頭
へのポインタであり、1410を指している。1403
は各次元ごとのピーリング情報を表わすテーブルへのポ
インタであり、1430を指している。これはループピ
ーリング解析ステップ401で設定される。1410は
a(i,j−1)の1次元目の添字テーブルである。1
411は2次元目に対する添字テーブルへのポインタで
あり、1420を指している。1412は添字を表わす
中間語へのポインタであり、iを表わす中間語を指して
いる。1420はa(i,j−1)の2次元目の添字テ
ーブルである。1421は配列aには3次元目が存在し
ないので、値NULLが設定されている。1422は添
字を表わす中間語へのポインタであり、j−1を表わす
中間語を指している。1430及び1440は次のルー
プピーリング解析で作成されるテーブルであり、その処
理の中で説明する。
【0055】図5はループピーリング解析ステップ40
1の詳細な処理手順を示したものである。ここでは図1
4で示された配列参照テーブル1400に対する処理の
み説明する。ステップ500でIの値は1になる。配列
aの1次元目は細分化情報1100中のフィールド11
01がTRUEなので細分化する次元であり、ステップ
501はYesとなる。
【0056】1412より当次元に現れる変数はiであ
り、これはループテーブル1330よりループ制御変数
であることがわかる。このiに分散後ループ範囲136
2を代入して、当次元の添字範囲は1:3になる。一
方、データ分散後の当次元の添字範囲は高次元化辞書1
200のフィールド1213より1:3であるから、分
散後ループ範囲から得られた添字範囲1:3からデータ
分散後の添字範囲1:3をひいた残りの範囲は空集合と
なり、ステップ502の結果は空集合である。よって、
ステップ503はYesとなる。
【0057】ステップ505で当次元はピーリングしな
い、とし、ピーリングすべきループ範囲とピーリングす
べき添字のはみ出す方向を各々、0とする。次に、ステ
ップ506で、ピーリング情報テーブル1430を作成
する。ここで、1431は次のピーリング情報テーブル
へのポインタ,1432はピーリングするか否かを示す
フラグ,1433は当次元に現れるループ制御変数,1
434はピーリングすべきループ範囲,1435はピー
リングすべき添字のはみ出す方向,1436は当ループ
制御変数を持つループテーブルへのポインタである。
【0058】よって、今の場合、1431には、まずN
ULLが設定される。但し、このフィールドは次の2次
元目の処理で、新規に作成されるピーリング情報テーブ
ル1440を指すように変更される。1432にはピー
リングしないのでFALSEが、1433には当次元に
現れるループ制御変数iが、1434には0が、143
5にも0が、1436にはループiに対するループテー
ブル1330へのポインタが設定される。
【0059】次に、ステップ507では、現在は1次元
目の処理をしているので、Yesとなる。ステップ50
8で、Iの値は2になる。配列aの2次元目は細分化情
報1100中のフィールド1105がTRUEなので細
分化する次元であり、ステップ501はYesとなる。
1422より当次元に現れる変数はjであり、これはル
ープテーブル1310よりループ制御変数であることが
わかる。このjに分散後ループ範囲1342、1352
を代入し、1341、1351の論理プロセッサ番号範
囲も合わせると、当次元の添字範囲は、論理プロセッサ
番号範囲が1:1の時は1:2、論理プロセッサ番号範
囲が2:4の時は0:2となる。
【0060】一方、データ分散後の当次元の添字範囲は
高次元化辞書1200のフィールド1216より1:3
であるから、分散後ループ範囲から得られた添字範囲か
らデータ分散後の添字範囲をひいた残りの範囲は論理プ
ロセッサ番号範囲が2:4の時に0:0となり、ステッ
プ502の結果は0:0である。よって、ステップ50
3はNoとなる。
【0061】ステップ504では、まず、「当次元はピ
ーリングする」とする。次に、0:0が2次元目の添字
であるj―1と等しくなることより、jの値は1:1と
なる。よって、はみ出す時のループ範囲であるピーリン
グ範囲は1:1である。また、このピーリング範囲は論
理プロセッサ番号範囲が2:4の時に生じるので、ルー
プテーブル1310の分散後ループ範囲のうち、この論
理プロセッサ番号範囲に対応するテーブル1350を細
分する。即ち、テーブル1350を、ピーリング範囲
1:1の範囲を持つテーブルとそれ以外の範囲からなる
テーブルに分割する。
【0062】図15は細分化後のループ分散範囲テーブ
ルである。テーブル1350のループ分散範囲は1:3
から1:1に変更されている。新たにテーブル1500
が作成され、1353は1500を指す。1501は細
分されるループ分散範囲の論理プロセッサ番号範囲2:
4に設定される。1502は元のループ分散範囲は1:
3から1:1を引いた範囲2:3に設定される。150
3は他に指すべきテーブルがないので、値NULLが設
定される。
【0063】次に、ステップ506より、ピーリング情
報テーブル1440を作成する。まず、1441には次
のテーブルがないのでNULLが設定され、1431に
は1440へのポインタが設定される。1442には、
ピーリングすることを示すフラグTRUEが、1443
には当次元に現れるループ制御変数であるjが、144
4にはステップ504で計算した1:1を設定する。ル
ープ分散後のループ範囲1342及び1352の内、
1:1は1352の下限を含むので、はみ出す方向とし
て下限方向を示す−1を、1445に設定する。144
6には、ループjに対するループテーブル1310への
ポインタを設定する。
【0064】次に、配列aにはもう処理すべき次元がな
いので、ステップ507はNoとなる。上記説明したよ
うに、図5では図14の配列参照に対する処理だけを説
明するので、ステップ509はNoになり、これでルー
プピーリング処理の説明を終了する。
【0065】ここで、図4に戻り、ループ変換の説明を
続ける。ループ変換の残りの処理では、図13のループ
テーブル群から図16及び17で示されたループテーブ
ル群を生成し、図18のプログラムを生成する。まず、
ステップ402で、最初の最内側ループであるループi
を検出する。以降の処理で、処理済みの分散ループに対
しては、ループ分散範囲テーブルへのポインタをNUL
Lにする。よって、ステップ403で、未処理の分散ル
ープであることは、分散ループであることを示すフラグ
がTRUEで、かつ、ループ分散範囲テーブルへのポイ
ンタがNULLでないことからわかる。図13の、ルー
プiに対するループテーブル1330で、1335はT
RUEで、1337はNULLでないので、ループiは
未処理の分散ループであり、ステップ403はYesで
ある。
【0066】ステップ404では、1330の一つ内側
にループテーブルを作成する。図16はステップ404
により現ループテーブル1330(LT1)の一つ内側
に新たにループテーブル1600(LT2)が作成され
た様子を表わした図である。
【0067】以下、ステップ404に従って図16を説
明する。まず、ループ分散テーブル1360は1個だけ
なので、LT1以下のループテーブルのコピーは作成す
る必要はない。LT1に対するループ制御変数名をi2
とし、1333に設定する。LT1のループ範囲133
6をループ分散範囲テーブル1360の論理プロセッサ
番号範囲1361である1:4に設定する。
【0068】ループテーブル1600は一つ内側のルー
プに対するテーブルなので、一つ内側のループ先頭を指
すポインタ1331を1600を指すように設定する。
一つ外側のループテーブルへのポインタ1331,ルー
プネスト1334,分散ループフラグ1335,後続ル
ープへのポインタ1338はそのままである。ループ分
散範囲テーブル1360へのポインタ1337をNUL
Lに設定して、このループテーブルが処理済みであるこ
とを示す。
【0069】次に、LT2に対するループ制御変数名を
i1とし、1603に設定する。LT2のループ範囲1
606をループ分散範囲テーブル1360のループ分散
範囲1362である1:3に設定する。ループテーブル
1600は最内側ループなので、1601はNULL
に、一つ外側のループテーブルへのポインタである16
02は1330を指すように設定される。また、160
4,1605,1607,1608は各々、0、TRU
E、NULL、NULLに初期化される。1605がT
RUEで1607がNULLなので、ループテーブル1
600は処理済みであることを示す。
【0070】次に、1338はNULLなので後続ルー
プはなく、ステップ405はNoである。1332は外
側ループテーブル1310を指しているので、ステップ
407はTRUE(Yes)であり、ステップ408で
処理は外側ループテーブル1310に移り、ステップ4
03へ戻る。1315はTRUEだが、1317はNU
LLでないので、ループテーブル1310は未処理の分
散ループであり、ステップ403はYesである。
【0071】ループテーブル1310のループ分散範囲
テーブルの個数は図15より3個なので、ステップ40
4では、ループテーブル1310(LT1)の一つ内側
にループテーブル(LT2)を作成し、LT1以下のル
ープテーブルのコピーを2個作成して、LT1の後続ル
ープとして接続する。
【0072】図17はこれらのテーブルが作成された様
子を表わした図である。1700がLT2を、171
0,1720,1730,1740がLT1以下のルー
プテーブルの第1のコピーを、1750,1760,1
770,1780がLT1以下のループテーブルの第2
のコピーを表わす。
【0073】以下、ステップ404に従って図17を説
明する。まず、LT1とそのコピーに対するループ制御
変数名をj2とし、1313,1713,1753に設
定する。LT1とそのコピーのループ範囲1316,1
716,1756をループ分散範囲テーブル1340,
1350,1500の論理プロセッサ番号範囲134
1,1351,1501である1:1,2:4,2:4
に設定する。ループテーブル1700,1720,17
60は、各々、ループテーブル1310,1710,1
750の一つ内側のループに対するテーブルなので、一
つ内側のループ先頭を指すポインタ1311,171
1,1751を、各々、1700,1720,1760
を指すように設定する。一つ外側のループテーブルへの
ポインタ1312はそのままであり、1712,175
2はNULLに初期化される。
【0074】ループネスト1314はそのままであり、
1714,1754は0に初期化される。これらの値は
後のループネスト決定ステップ409で、括弧内の値に
設定される。分散ループフラグ1315はそのままであ
り、1715,1755はTRUEに設定される。ルー
プ分散範囲テーブル1340へのポインタ1317、及
び1717,1757をNULLに設定して、これらの
ループテーブルが処理済みであることを示す。後続ルー
プテーブルへのポインタは、1320を指していた13
18は1710を、1718は1750を、1758は
1320を指すように設定される。
【0075】次に、LT2とそのコピーに対するループ
制御変数名をj1とし、1703,1723,1763
に設定する。LT2とそのコピーのループ範囲170
6,1726,1766をループ分散範囲テーブル13
40,1350,1500のループ分散範囲1342,
1352,1502である2:3,1:1,2:3に設
定する。
【0076】ループテーブル1330,1730,17
70は、各々、ループテーブル1700,1720,1
760の一つ内側のループに対するテーブルなので、一
つ内側のループ先頭を指すポインタ1701,172
1,1761を、各々、1330,1730,1770
を指すように設定する。ループテーブル1310,17
10,1750は、各々、ループテーブル1700,1
720,1760の一つ外側のループに対するテーブル
なので、一つ外側のループ先頭を指すポインタ170
2,1722,1762を、各々、1310,171
0,1750を指すように設定する。ループネスト17
04,1724,1764は0に初期化される。これら
の値は後のループネスト決定409で、括弧内の値に設
定される。分散ループフラグ1705,1725,17
65はTRUEに設定される。ループ分散範囲テーブル
へのポインタ1707,1727,1767をNULL
に設定して、こららのループテーブルが処理済みである
ことを示す。後続ループテーブルへのポインタは170
8,1728,1768はNULLに初期化される。
【0077】1730と1770、1740と1780
は各々、1330,1600のコピーであり、外側ルー
プ、内側ループを指すポインタ、ループネスト以外は全
て同じ値となる。即ち、1733,1773とは133
3と同じ値で、1735から1738まで、1775か
ら1778までは1335から1338までと同じ値で
ある。また、1743,1783は1603と同じ値
で、1745から1748までと1785から1788
までは1605から1608までと同じ値である。ルー
プネストである1734,1774,1744,178
4は0に初期化される。一つ内側のループテーブルを指
すポインタは、1731が1740を、1741はNU
LLを、1771は1780を、1781はNULLを
指すように設定される。一つ外側のループテーブルを指
すポインタは、1732が1720を、1742は17
30を、1772は1760を、1782は1770を
指すように設定される。
【0078】次に、ループテーブル1310の元々の後
続テーブルは1320であるが、本実施例では1320
以降のテーブルに対する処理は説明しないので、ステッ
プ405はNoとなる。1312より、ループテーブル
1310の外側ループテーブル1300が存在するの
で、ステップ407はYesとなり、ステップ408で
処理をループテーブル1300に移し、ステップ403
へ戻る。
【0079】1305がFALSEなので、ループテー
ブル1300に対応するループkは分散ループでなく、
ステップ403はNoとなる。1308はNULLなの
で、後続ループはなく、ステップ405はNoとなる。
1302はNULLなので、外側ループはなく、ステッ
プ407はNoとなる。
【0080】次に、ループネスト決定ステップ409
で、図17のループテーブルのネストを決定する。この
処理は最も外側のループから順番に決定する簡単な処理
なので、詳細は省略する。図17の、1304,131
4,及び,1704,1334,1604,1714,
1724,1734,1744,1754,1764,
1774,1784の括弧内の数値が決定されたループ
ネストである。
【0081】次にループ多重化・ループピーリングステ
ップ410で図17のループテーブル群に従って、ルー
プを表わす元の中間語に、ループ多重化とループピーリ
ングを適用する。図18は、元のループ中間語である図
8の文803から文817に、ループ多重化とループピ
ーリングを適用した結果のプログラムである。
【0082】文1810から文1835までが図8の文
805から文809に対応する部分である。このうち、
文1810から文1815までがループテーブル131
0,1700,1330,1600に対応し、文182
0から文1825までがループテーブル1710,17
20,1730,1740に対応し、文1830から文
1835までがループテーブル1750,1760,1
770,1780に対応する。同様にして、文1840
から文1880までが図8の文811から文815に対
応する部分である。
【0083】図4に戻り、最後に後続ループネストはな
いので、ステップ411はNoとなり、ループ変換部1
071の処理を終了する。
【0084】次に、図1の添字変更部1072の処理を
行なう。図6は添字変更部1072の処理手順を説明し
た図である。ここでは、文1814と文1824中の配
列参照a(i,j−1)に対する処理を、その配列参照
テーブルを示した図14、処理結果得られるプログラム
を示した図19を用いて説明する。
【0085】まず、ステップ600でIの値は1とな
り、1次元目の処理を行なう。細分化情報テーブル中の
1次元目の細分化フラグ1101の値がTRUEなの
で、この次元は細分化する次元であり、ステップ601
はYesとなる。高次元化辞書1200の1次元目に対
する高次元化対応次元1212は3となっているので、
ステップ602では、配列参照に3次元目を追加する。
文1814はループ中にあるので、ステップ603はY
esである。
【0086】ステップ604で、現在の配列参照テーブ
ル1400の1次元目の添字は1411よりiで、ルー
プ制御変数iを持っていたループテーブルへのポインタ
は1436より1330とわかるので、1次元目の添字
を値が先に増加する内側ループのループ制御変数である
1603のi1に、3次元目の添字を外側ループのルー
プ制御変数である1333のi2に設定する。現配列参
照の1次元目に対するピーリングフラグ1432はFA
LSEなので、ステップ606はNoとなる。配列aは
元々2次元なので、ステップ608はYesとなり、ス
テップ610でIの値を2にして処理を2次元目に移
し、ステップ601に戻る。
【0087】細分化情報テーブル中の2次元目の細分化
フラグ1105の値がTRUEなので、この次元は細分
化する次元であり、ステップ601はYesとなる。高
次元化辞書1210の2次元目に対する高次元化対応次
元1215は4となっているので、ステップ602で
は、配列参照に4次元目を追加する。文1814はルー
プ中にあるので、ステップ603はYesである。
【0088】ステップ604で、現在の配列参照テーブ
ル1400の2次元目の添字は1422よりj−1で、
ループ制御変数jを持っていたループテーブルへのポイ
ンタは1446より1310とわかるので、2次元目の
添字を値が先に増加する内側ループのループ制御変数で
ある1703のj1を用いてj1−1に、4次元目の添
字を外側ループのループ制御変数である1313のj2
に設定する。
【0089】現配列参照の2次元目に対するピーリング
フラグ1442はTRUEだが、現配列参照のピーリン
グすべきループ範囲は1444より1:1である。一
方、現配列参照を含み、元々ピーリングループ制御変数
jを持っていたループのループテーブル1310の、一
つ内側ループのループ範囲1706は2:3であるか
ら、1:1は2:3に含まれておらず、ステップ606
はNoとなる。これは、ピーリングに伴って、jに対す
る添字変更の特別処理が必要なループ範囲が1:1であ
るが、現在のループ範囲はその範囲を含んでいないの
で、特別な処理が不要であることを示している。
【0090】配列aの次元はもうないので、ステップ6
08はNoとなる。以上で、文1814中の配列参照a
(i,j−1)は、文1915中の配列参照a(i1,
j1−1,i2,j2)に変更される。配列参照はまだ
あるので、ステップ609はYesとなり、ステップ6
11で次の配列参照である文1824のa(i,j−
1)に処理を移す。
【0091】この配列参照に対して、1次元目の処理は
文1814の場合と同じなので、省略して、2次元目の
場合のみ説明する。ステップ601,602,603,
604の処理は文1814の配列参照の場合と同様で、
その結果、文1824のa(i,j−1)は、一旦、文
1915の配列参照a(i1,j1−1,i2,j2)
のように変更される。
【0092】次に、ピーリングフラグ1442はTRU
Eで、現配列参照のピーリングすべきループ範囲は14
44より1:1である。一方、現配列参照を含み、元々
ピーリングループ制御変数jを持っていたループのルー
プテーブル1310のコピーになるループテーブルは1
710であり、その一つ内側ループのループ範囲172
6は1:1である。よって、両者は一致し、ステップ6
06はYesとなる。ピーリング添字のはみ出す方向は
1445より−1、現次元の寸法は1216より3なの
で、j1はj1+3,j2はj2−1となる。これよ
り、j1−1はj1+2に、j2はj2−1になり、文
1925の配列参照a(i1,j1+2,i2,j2−
1)が得られる。
【0093】次に、配列aは2次元配列なので、ステッ
プ608はNoとなる。本説明では2つの配列参照につ
いてのみ説明するので、ステップ609はNoとなり、
添字変更部1072の処理を終了する。他の配列参照に
ついても同様に処理することで、図19の中間語が得ら
れる。以上により、プログラム変換部107の処理を終
了する。
【0094】次に、プログラム並列化部108の処理を
説明する。図7はプログラム並列化部108の処理手順
を説明した図である。データ分散情報変更ステップ70
0は、データ分散情報140と高次元化辞書1200を
入力して、変更したデータ分散情報を出力する。図20
は変更後のデータ分散情報である。データ分散情報変更
の処理は容易なので以下、概略を記す。
【0095】配列高次元化部106の処理によって、配
列の次元が1201に示されるように4になったので、
図20における902,912は図9における2から4
になる。これに伴い、2000,2010には4次元分
のテーブルを確保する。次に、高次元化辞書において、
フラグの値が“changed”で、かつ、データ分散
が指定された次元の分散形状は、次元毎分散情報テーブ
ルの該当する次元では“*”と変更され、上記次元に対
応する、フラグの値が“new”である次元の分散形状
は、上記“changed”フラグを持つ次元の、元の
分散形状に設定される。但し、ブロック分割の幅は再計
算される。その他の次元は、“*”と設定される。
【0096】まず、図9のデータ分散情報テーブル90
0について処理する。高次元化辞書の第1次元目は、フ
ラグ1211の値が“changed”で、データ分散
情報テーブル900に対応する第1次元目のデータ分散
形状921はblockなので、この次元の分散形状は
“*”に変更される。2001は“*”となり、200
2には1213より、高次元化辞書の第1次元目の寸法
3が設定される。上記第1次元目に対応する次元は12
12より3次元目であり、3次元目のフラグ1217の
値が“new”なので、この次元はデータ分散するよう
に変更される。よって、2005はblockとなり、
この次元の上下限1219よりわかる寸法4を、950
よりわかる論理プロセッサ数4で割った値1がブロック
分割の幅となるので、この値1を2006に設定する。
【0097】一方、第2次元目は、フラグ1214の値
は“changed”であるが、データ分散情報テーブ
ル900に対応する第2次元目のデータ分散形状923
は“*”なので、この次元の分散形状は“*”に設定さ
れる。よって、2003は“*”となり、2004には
1216より、高次元化辞書の第2次元目の寸法3が設
定される。また、上記2次元目に対応する次元は121
5より4となり、第4次元目の分散形状も“*”に設定
される。よって、2007は“*”となり、2008に
は1222より、高次元化辞書の第4次元目の寸法4が
設定される。
【0098】次に、図9のデータ分散情報テーブル91
0について処理する。高次元化辞書の第1次元目は、フ
ラグ1211の値は“changed”であるが、デー
タ分散情報テーブル910に対応する第1次元目のデー
タ分散形状931は“*”なので、この次元はデータ分
散しないように設定される。よって、2011は“*”
となり、2012には1213より、高次元化辞書の第
1次元目の寸法3が設定される。また、上記第1次元目
に対応する次元は1212より3となり、第3次元目も
データ分散されないように設定される。よって、201
5は“*”となり、2016には1219より、高次元
化辞書の第3次元目の寸法4が設定される。
【0099】一方、高次元化辞書の第2次元目は、フラ
グ1210の値が“changed”で、データ分散情
報テーブル910に対応する第2次元目のデータ分散形
状933はblockなので、この次元はデータ分散し
ないように変更される。2013は“*”となり、20
14には1216より、高次元化辞書の第2次元目の寸
法3が設定される。上記第2次元目に対応する次元は1
215より4次元目であり、4次元目のフラグ1220
の値が“new”なので、この次元はデータ分散するよ
うに変更される。よって、2017はblockとな
り、この次元の上下限1222よりわかる寸法4を、9
50よりわかる論理プロセッサ数4で割った値1がブロ
ック分割の幅となるので、この値1を2018に設定す
る。
【0100】次に、図20のデータ分散情報に基づい
て、プログラム分割解析ステップ701、通信解析ステ
ップ702を実行する。これらに対する処理方法はジー
マ・ヒラナンダニ、ケン・ケネディ、チャウ・ウェン・
ツェン著「コンパイリング フォートラン ディー フォ
ー エムアイエムディー ディストリビューテッド メモ
リ マシーンズ」コミュニケーションズ オブ ザ エーシ
ーエム、ボリューム35、ナンバー8、オーガスト、1
992、第66頁から第80頁(Seema Hiranandani, K
en Kennedy, Chau-Wen Tseng, "Compiling Fortran D f
or MIMD Distributed-Memory Machines", Communicatio
ns of the ACM, Vol. 35, No. 8, August,1992, pp.66-
80)に書かれている。また、通信生成707、プログラ
ム分割コード生成708、分割データ宣言作成709に
ついても同文献に書かれている。
【0101】図21はプログラム並列化の処理結果のプ
ログラムを示す図である。以下、図10,図20,図2
1を用い、処理手順の概略を説明する。配列aは細分化
フラグ1005がTRUEなので、ステップ703はY
esとなる。通信生成ステップ704では、通常のse
nd/receive型の論理プロセッサ間通信の生成
を行い、再分散処理ではステップ7041の非バッファ
リング再分散通信生成により、バッファリングしない再
分散通信を生成する。これは図21の文2102及び文
2140に対応する。2101の再分散ルーチン“no
n_buf_remap”は、配列aを、ディスクリプ
タD1に記述されたデータ分散形状から、ディスクリプ
タD2に記述されたデータ分散形状に、バッファを使わ
ずにデータ再分散するルーチンである。
【0102】文2102のD1は、この時点における配
列aのデータ分散形状を記述したディスクリプタであ
る。これは、ループkの1回目の繰り返しでは、プログ
ラム先頭におけるデータ分散であり、文802と文80
4が元々同じデータ分散であることから、文804での
データ分散に対応する、図20のテーブル900及び2
000が示すデータ分散となる。また、ループkの2回
目以降の繰り返しでは、文810でのデータ分散に対応
する、図20のテーブル910及び2010が示すデー
タ分散となる。
【0103】文2102のD2は、再分散ルーチン“n
on_buf_remap”により、配列aが再分散さ
れた後のデータ分散形状を記述したディスクリプタであ
り、図20のテーブル900及び2000が示すデータ
分散情報に対応している。文2140の再分散ルーチン
“non_buf_remap”は、配列aを、ディス
クリプタD2に記述されたデータ分散形状から、ディス
クリプタD1に記述されたデータ分散形状に、バッファ
を使わずにデータ再分散するルーチンである。
【0104】文2140のD2は、この時点における配
列aのデータ分散形状を記述したディスクリプタであ
り、図20のテーブル900及び2000が示すデータ
分散情報に対応している。文2140のD1は、この時
点における配列aのデータ分散形状を記述したディスク
リプタであり、図20のテーブル910及び2010が
示すデータ分散情報に対応している。
【0105】プログラム分割コード生成ステップ705
では、ループインデックス生成ステップ7051とグロ
ーバル添字生成ステップ7052の処理を実行する。ル
ープインデックス生成ステップ7051では、データ分
散する配列次元の添字に含まれるループ制御変数に対応
するループのループ範囲を分散して、分散後のループの
上下限値を生成する。
【0106】本発明の配列高次元化部106の処理を適
用した後の配列では、データ分散情報変更ステップ70
0によりデータ分散する次元は元のデータ分散次元の高
次元化対応次元であり、その次元の寸法は配列高次元化
部106の処理より論理プロセッサ数と等しい。ループ
変換部1071により上記データ分散される次元に現れ
るループ制御変数を持つループのループ長はループ分散
範囲テーブルの論理プロセッサ番号範囲に等しく、図8
に対する中間語を入力とした場合、それは論理プロセッ
サ数に等しいのでループは解消される。
【0107】グローバル添字生成ステップ7052で
は、データ分散した次元の添字として、データ分散前の
該当する配列要素を表わす添字を用いる。本発明では、
データ分散する配列次元の添字はデータ分散前は、論理
プロセッサ番号の内のいずれかと等しくなっているの
で、データ分散後の添字も同じ論理プロセッサ番号にす
る。
【0108】文1910から文1936までのデータ分
散は、データ分散情報テーブル900と2000で示さ
れたものであり、配列aの第3次元目がブロック分割さ
れる。aの第3次元目にあるループ制御変数は文191
4,1915,1924,1925,1934,193
5の配列参照においてi2であるので、ループi2は解
消され、配列aの第3次元目の添字は論理プロセッサ番
号になる。図21の文2113,2114,2123,
2124,2133,2134における配列aの第3次
元目の添字“mype”が論理プロセッサ番号を表わし
ており、図21の文2110から2135には、ループ
i2がないことがわかる。
【0109】同様にして、文1940から文1980ま
でのデータ分散は、データ分散情報テーブル910と2
010で示されたものであり、配列aの第4次元目がブ
ロック分割される。aの第4次元目にあるループ制御変
数は文1952,1953,1962,1963,19
72,1973の配列参照においてj2であるので、ル
ープj2は解消され、配列aの第4次元目の添字は論理
プロセッサ番号になる。図21の文2152,215
3,2162,2163,2172,2173における
配列aの第4次元目の添字“mype”が論理プロセッ
サ番号を表わしており、図21の文2141から文21
80には、ループj2がないことがわかる。
【0110】次にグローバルデータ宣言作成ステップ7
06では、データ分散配列に対しても、高次元化後で、
データ分散前の配列宣言を行なう。文2100の宣言が
それに該当する。最後に、コード生成部109は、図2
1に対応する中間語を入力し、図21のソースプログラ
ムまたはそれをオブジェクトプログラムの形にした並列
化プログラム160を出力する。これで第1の実施例の
処理フローの説明を終了する。
【0111】図22は本願のデータ再配置やデータ分散
を適用する前の配列を用いて、データ再分散の様子を説
明したものである。2200は1時限目および2次元目
の要素数が各々12の2次元配列aを表わし、縦方向は
配列の1次元目を表わす。この次元はFORTRANで
はアドレスの連続する次元にあたる。また、横方向は配
列の2次元目を表わす。2200中の16個の矩形は各
々、3x3の部分配列を表わす。
【0112】各部分配列中の矢印の左側の数字は、配列
aが(block,*)という方法で4台の論理プロセ
ッサにブロック分散された時の、各々の部分配列が割り
付けられる論理プロセッサ番号を、矢印の右側の数字
は、配列aが(*,block)という方法で4台の論
理プロセッサにブロック分散された時の、各々の部分配
列が割り付けられる論理プロセッサ番号を表わす。した
がって、各部分配列中の矢印とその両側の数字により、
その部分配列が(block,*)から(*,bloc
k)へのデータ再分散によって、左側の番号の論理プロ
セッサから右側の番号の論理プロセッサへ送信されるこ
とを表わす。
【0113】図23は従来技術による並列化プログラム
である。文2300における配列aの宣言が示すよう
に、配列は第1次元目が分割されて寸法が3になってい
る。文2302と文2320はバッファリングをするデ
ータ再分散ルーチンである。文2302の再分散ルーチ
ン“remap”は、配列aを、ディスクリプタE1に
記述されたデータ分散形状から、ディスクリプタE2に
記述されたデータ分散形状に、データ再分散するルーチ
ンである。
【0114】文2302のE1は、この時点における配
列aのデータ分散形状を記述したディスクリプタであ
る。これは、ループkの1回目の繰り返しでは、プログ
ラム先頭におけるデータ分散形状であり、文802と文
804が同じデータ分散であることから、文804のデ
ータ分散を表わす、図9のテーブル900及び920が
示すデータ分散となる。また、ループkの2回目以降の
繰り返しでは、文810でのデータ分散を表わす、図9
のテーブル910及び930が示すデータ分散となる。
【0115】文2302のE2は、再分散ルーチン“r
emap”により、配列aが再分散された後のデータ分
散形状を記述したディスクリプタであり、図9のテーブ
ル900及び920が示すデータ分散情報に対応してい
る。文2320の再分散ルーチン“remap”は、配
列aを、ディスクリプタE2に記述されたデータ分散形
状から、ディスクリプタE1に記述されたデータ分散形
状に、データ再分散するルーチンである。文2320の
E2は、この時点における配列aのデータ分散形状を記
述したディスクリプタであり、図9のテーブル900及
び920が示すデータ分散情報に対応している。文23
20のE1は、再分散ルーチン“remap”により、
配列aが再分散された後のデータ分散形状を記述したデ
ィスクリプタであり、図9のテーブル910及び930
が示すデータ分散情報に対応している。
【0116】図24は従来の並列化によるデータ再分散
の様子を、特に、論理プロセッサ1(以下、P1と略
す)から論理プロセッサ2(以下、P2と略す)へ送信
されるデータに注目して表示したものである。2401
で示される3行12列の部分配列は、配列aを(blo
ck,*)というデータ分散方法で従来の並列化方法に
より並列化した時、P1に割り付けられる分割データで
ある。2400は分割データ2401の元の配列におけ
る相対的な位置を示すために、参考までに表示した12
行12列の元の配列である。配列aは(block,
*)でデータ分散されるため、配列の1次元目が4分割
され、その内の一つである2401がP1に割り付けら
れるデータとなる。2401中の数字は、P1に割り付
けられたデータ2401の配列要素がアドレス順に並ぶ
様子を示している。
【0117】2411で示される12行3列の部分配列
は、配列aを(*,block)というデータ分散方法
で従来の並列化方法により並列化した時、P2に割り付
けられる分割データである。2410は分割データ24
11の元の配列における相対的な位置を示すために、参
考までに表示した12行12列の元の配列である。配列
aは(*,block)でデータ分散されるため、配列
の2次元目が4分割され、その内の一つである2411
がP2に割り付けられるデータとなる。2411中の数
字は、P2に割り付けられたデータ2411の配列要素
がアドレス順に並ぶ様子を示している。
【0118】2401中の網掛け部分2402は、(b
lock,*)から(*,block)へのデータ再分
散により、P1からP2へ送信されるデータを表わす。
図中に示されたアドレス順により、このデータは19番
目から27番目までの配列要素からなる連続データであ
ることがわかる。一方、2411中の網掛け部分241
2は、(block,*)から(*,block)への
データ再分散により、P2がP1から受信するデータの
格納先を表わす。図中に示されたアドレス順により、こ
のデータは4番目から6番目,16番目から18番目,
28番目から30番目までの配列要素からなる非連続デ
ータであることがわかる。
【0119】従って、送信側データは連続であるが、受
信側では非連続な位置にデータを格納することが必要で
あるとわかる。データ通信ルーチンの中には、送信側デ
ータは非連続なものを許すものもあるが、受信側は通
常、連続になってないといけないので、この場合、1回
のデータ送信で済ます場合には、受信側でどうしてもバ
ッファリングが必要なことがわかる。即ち、送信側デー
タ2402は送信ルーチンにより、P2内のアドレスが
連続するバッファに送信され、受信したP2は、そのバ
ッファ内のデータを2412へ、各列毎に1回、少なく
とも計3回コピーを行なう。
【0120】図25は、本発明の並列化によるデータ再
分散の様子を、P1からP2へ送信されるデータに注目
して表示したものである。2500で示される12行1
2列の配列は、配列aを(block,*)というデー
タ分散方法で分割して、本発明の並列化方法により並列
化した時、P1に割り付けられるデータである。この配
列の大きさはデータ分散前の配列の大きさと同じであ
る。2500中の数字は、P1に割り付けられたデータ
配列2500の配列要素がアドレス順に並ぶ様子を示し
ている。左上角から始まる12行3列の部分に、最初の
36要素のアドレス順が示されている。これにより、太
線で区切られた3行3列の部分は連続アドレスであるこ
とがわかる。数字が表示されてない他の部分についても
同様である。
【0121】この、本発明による配列要素のアドレスの
変更は、一般に、配列aを2次元配列a(N,N)、プ
ロセッサ数をP、NはPで割り切れる、とする時、次の
式(1)によって表現される。 (i,j)→((i-1)modL+1,(j-1)modL+1,[(i-1)/L]+1,[(J-1)/L]+1) (1) ここで、矢印の左辺の(i,j)は元の配列aの第i行
第j列の配列要素を表し、矢印の右辺は本発明による配
列再配置を適用した後の4次元配列における対応する配
列要素を表わす。また、LはN/Pを、[]は切り捨て
を表わすガウスの記号である。
【0122】この4次元配列の最初の2次元から作られ
る2次元配列は、データ配列2500中の、太線で区切
られた3行3列の部分に対応し、最後の2次元から作ら
れる2次元配列は、この太線で区切られた3行3列の部
分を一つの配列要素とみなして得られる4行4列の位置
配列を表わす。
【0123】例として、図25と同様に、N=12,P
=4とすると、L=N/P=3となり、式(1)は次の
式となる。 (i,j)→((i-1)mod3+1,(j-1)mod3+1,[(i-1)/3]+1,[(J-1)/3]+1) (2) ここで、データ配列2500の左上角にある配列要素
(1,1)は、式(2)より、(1,1,1,1)に移
される。これは、位置配列の配列要素が(1,1)、即
ち、データ配列2500の左上角の太線で区切られた3
行3列の部分であり、その3行3列の部分からなる2次
元配列中の配列要素が(1,1)であることを示してお
り、元の(1,1)と同じアドレスを指していることが
わかる。
【0124】また、データ配列2500中のアドレス番
号が83の部分は、元の配列における配列要素が(5,
7)であり、これは式(2)により、(2,1,2,
3)に移される。これは、位置配列の配列要素が(2,
3)、即ち、2502を示しており、その位置配列要素
が指す、3行3列の部分からなる2次元配列中の配列要
素が(2,1)であることを示しており、アドレス番号
が83の部分を指していることがわかる。
【0125】2501で示される、アドレス順で、10
番目から18番目,46番目から54番目,82番目か
ら90番目,118番目から126番目の、3行12列
の部分配列は、配列aを(block,*)というデー
タ分散方法で分割して、本発明の並列化方法により並列
化した時、P1がその配列要素の計算を担当するデータ
である。即ち、2502の配列要素の値の更新は、原則
的にP1が行なう。2510で示される12行12列の
配列は、配列aを(*,block)というデータ分散
方法で分割して、本発明の並列化方法により並列化した
時、P2に割り付けられるデータである。この配列の大
きさはデータ分散前の配列の大きさと同じである。
【0126】2510中の一部の数字も同様に、P2に
割り付けられたデータ2510の配列要素がアドレス順
に並ぶ様子を示している。2511で示される、アドレ
ス順で、73番目から108番目の、12行3列の部分
配列は、配列aを(*,block)というデータ分散
方法で分割して、本発明の並列化方法により並列化した
時、P2がその配列要素の計算を担当するデータであ
る。即ち、2511の配列要素の値の更新は、原則的に
P2が行なう。
【0127】2501中の網掛け部分2502は、(b
lock,*)から(*,block)へのデータ再分
散により、P1からP2へ送信されるデータを表わす。
図中に示されたアドレス順により、このデータは82番
目から90番目までの配列要素からなる連続データであ
ることがわかる。一方、2511中の網掛け部分251
2は、(block,*)から(*,block)への
データ再分散により、P2がP1から受信するデータを
表わす。図中に示されたアドレス順により、このデータ
はやはり、82番目から90番目までの配列要素からな
る連続データであることがわかる。
【0128】従って、送信側データも受信側データも連
続となり、データ通信に際してはバッファを介する必要
がないことがわかる。これは、配列からバッファへのコ
ピーが不要であることを意味している。以上により、従
来技術では、データ再分散に際し、データとバッファ間
のコピーが必要であったが、本願により、それが不要に
なることがわかる。
【0129】尚、本実施例では、分散メモリマシン向け
の並列化プログラムに関するデータ再分散の説明を行っ
たが、分散共有メモリマシンと呼ばれる、メモリは物理
的に分散しているが、ハードウエアやOSなどにより、
ユーザ側には共有メモリに見えるマシン向けの、並列化
プログラムに関するデータ再分散に対しても本発明は適
用可能である。
【0130】図26は、本発明のコンパイラが対象とす
る並列計算機システムのハードウェア構成の一例を示し
たものである。同図において、2601はローカルメモ
リ、2602は論理プロセッサエレメント、2603は
ネットワーク、2604は入出力用論理プロセッサエレ
メント、2605は入出力用コンソールまたはワークス
テーションを表す。
【0131】本発明の並列化コンパイラ100は、入出
力用コンソールまたはワークステーション2605にお
いて実行され、並列ソースプログラムまたは並列オブジ
ェクトプログラムに変換される。前者の並列ソースプロ
グラムは、さらに、論理プロセッサエレメント2602
向けのコンパイラにより並列オブジェクトプログラムに
変換される。上記並列オブジェクトプログラムはリンカ
によりロードモジュールに変換され、入出力用論理プロ
セッサエレメント2604を通じて各論理プロセッサエ
レメント2602のローカルメモリ2601にロードさ
れ、各論理プロセッサエレメント2602により実行さ
れる。実行時における各ロードモジュール間の通信はネ
ットワーク2603を通じて行われる。本発明に係る並
列化コンパイラは、上記並列計算機システムを有効利用
してプログラムを高速化するものである。
【0132】(第2の実施例)次に、本発明の第2の実
施例を図27から図33を用いて説明する。第2の実施
例では共有メモリを持つ並列計算機を対象としている。
図27は、本発明による並列化コンパイラの構成を示し
たものである。2700は並列化コンパイラである。並
列化コンパイラ2700中、ループ並列化解析部270
1,データ分散形状決定部2702,プログラム並列化
部2703以外は、図1のものと同じであるので説明を
省略し、ループ並列化解析部2701,データ分散形状
決定部2702,プログラム並列化部2703について
のみ説明する。
【0133】ループ並列化解析部2701は辞書120
及び中間語130を入力し、ループの並列性を解析し、
ループテーブル150を出力する。この処理の詳細は、
ハンス・ジーマ、バーバラ・チャップマン著「スーパー
コンパイラーズ フォー パラレル アンド ベトトル コ
ンピューターズ」アディッソン−ウエスリー、1991
(Hans Zima and Barbara Chapman. "Supercompilers f
or Parallel and Vector Computers", Addison-Wesley,
1991)に説明されている。
【0134】データ分散形状決定部2702は辞書12
0,中間語130,及びループテーブル150を入力
し、データ分散情報140を出力する。ここでは、ま
ず、並列化された各ループに対して、そのループのルー
プ制御変数が、配列のどの次元に出現するかを調べる。
次に、ループ並列化によるループ繰り返しのプロセッサ
への割り当て方法に対応して、配列要素がどのようなデ
ータ分散方法によってプロセッサに割り付けられるかを
調べる。これは、ループ中にある、代入文の左辺の配列
添字に、並列化後の各プロセッサへ割り当てられるルー
プ繰り返し範囲を代入することで得ることができる。
【0135】例えば、ループiのループ繰り返しの1か
ら10,11から20,21から30,31から40回
目が各々、プロセッサ0番,1番,2番,3番に割り当
てられ、そのループ中で要素数40の配列aが、“a
(i)=”の形で代入文の左辺に出現しているとする
と、a(1)からa(10),a(11)からa(2
0),a(21)からa(30),a(31)からa
(40)までが各々、プロセッサ0番,1番,2番,3
番によって、値が更新される。即ち、そのループの並列
化方法は配列がブロック分散でプロセッサに割り付けら
れた時と同じになる。後は、上記の方法で得られた分散
情報テーブル140を用いて、上述した第1の実施例と
同じ方法を適用することで並列化プログラム2720が
得られる。
【0136】次に、具体例を用いて説明する。図28
は、ソースプログラム2710を示す図である。これ
は、図8のソースプログラムから、プロセッサ指示文8
01、データ分散指示文802、データ再分散指示文8
04及び810を除いたものである。プロセッサ数はソ
ースプログラム2710では指定されてないが、コンパ
イルオプションで4と指定されている、とする。
【0137】ループ並列化解析部2701は、ソースプ
ログラム2710を解析し、第1のループネストである
文2802から文2806に対してはループiを並列化
し、第2のループネストである文2807から文281
1に対しては、ループjを並列化する、と決定する。
【0138】データ分散形状決定部2702では、ルー
プ並列化解析部2701が出力したループテーブル15
0,辞書120,及び中間語130を入力して以下の処
理を行なう。まず、プロセッサ数は上記コンパイルオプ
ションで4と指定されているので、第1のループネスト
中のループiでは、ループ繰り返しの1から3,4から
6,7から9,10から12回目が各々、プロセッサ0
番,1番,2番,3番に割り当てられており、この割り
当て方法はデータ分散におけるブロック分散と同じであ
る。
【0139】また、ループi中で1次元目の要素数12
の配列aが、“a(i,j)=”の形で代入文の左辺に
出現しているので、a(1,j)からa(3,j),a
(4,j)からa(6,j),a(7,j)からa
(9,j),a(10,j)からa(12,j)までが
各々、プロセッサ0番,1番,2番,3番によって、値
が更新される。即ち、配列aの1次元目はブロック分散
される。同様にして、第2のループネスト中のループj
では、ループ繰り返しがブロック分散され、ループj中
で2次元目の要素数12の配列aが、“a(i,j)
=”の形で代入文の左辺に出現しているので、配列aの
2次元目はブロック分散される。よって、データ分散情
報140には、第1のループネストでは、配列aの1次
元目がブロック分散され、第2のループネストでは配列
aの2次元目がブロック分散される、という情報が設定
される。この結果、図9のデータ分散情報が得られる。
形状収集部103からプログラム変換部107までの処
理は前述した第1の実施例と同じである。
【0140】プログラム並列化部2703での処理も、
ほぼ、第1の実施例と同じであるが、通信生成ステップ
704(図7参照)におけるremapやsend,r
eceive通信のかわりにバリア同期を引き起こすル
ーチンであるbarierを呼出し、ループを並列化す
るために、並列化部分の最初でスレッド生成ルーチンf
orkを、並列化部分の直後でスレッド消滅ルーチンj
oinを呼ぶ。
【0141】これらのfork,joinは、しばし
ば、並列化ループよりも外側に、しかも、複数の並列化
ループに対して1組だけ呼出される。上記forkとj
oinによって囲まれる、実際の並列化ループよりも大
きい範囲はSPMD リージョンと呼ばれる。このSP
MDリージョンの作成処理については、チャウ・ヴェン
・ツェン著「コンパイラ オプティマイゼーション フォ
ー エリミネイティングバリア シンクロナイゼーショ
ン」ピーピーオーピーピー95、第144頁から第15
5頁、1995(Chau-Wen Tseng." Compiler Optimizations
for Eliminationg Barrier Synchronization",PPOPP'9
5, pp.144-155, 1995)で説明されている。コード生成部
109の処理も第1の実施例と同じである。
【0142】図29は、上記の処理の結果得られた並列
化プログラム2720を示す図である。文2903と文
2940では、図21の、第1の実施例における並列化
プログラムにおける文2102及び文2140での再分
散ルーチンのかわりに、バリア同期が呼出されている。
文2901ではforkが、文2983ではjoinが
呼出されている。これらforkとjoinで囲まれた
部分がSPMDリージョンである。これら以外は図21
のプログラムと同じである。
【0143】図30は従来技術による並列化プログラム
を示す図である。文3003と文3020では、やは
り、図23の、第1の実施例における並列化プログラム
における文2302及び文2320での再分散ルーチン
のかわりに、バリア同期が呼出されている。また、文3
001ではforkが、文3042ではjoinが呼出
されている。これら以外に、図23と異なる点は以下の
2つである。
【0144】図23では、配列データが分散メモリに分
散されていたため、一つのプロセッサにはそのうちの一
部のみが割り付けられていた。そのため、図23におけ
る配列aの宣言はa(3,12)となっていた。しか
し、図30は共有メモリ型並列計算機に対するプログラ
ムなので、配列aは分散されず、宣言はa(12,1
2)である。
【0145】また、上記と同じ理由により、図23で
は、各プロセッサは、分散された配列の要素を参照する
ように、文2311及び文2330で示されるように、
ループの繰り返し範囲も縮小されていた。ところが、図
30の文3011及び文3030では、各プロセッサは
分散されない配列の一部分のみ参照するように、プロセ
ッサ番号が格納された変数mypeを用いて、ちょうど
自プロセッサが分担する配列要素のみ参照するようなル
ープ範囲を生成している。
【0146】図31は、従来の並列化によるプロセッサ
への計算分担部分を、第1のループネストにおける論理
プロセッサ1(以下、P1と略す)の計算分担部分と、
第2のループネストにおける論理プロセッサ2(以下、
P2と略す)の計算分担部分に注目して表示したもので
ある。3100は12行12列の配列a全体を示す。3
100中の数字は、配列要素がアドレス順に並ぶ様子を
示している。左上角から始まる12行3列の部分に、最
初の36要素(1〜36)のアドレス順が示されてい
る。これにより、1列中の部分は連続アドレスであるこ
とがわかる。数字が表示されてない他の部分についても
同様である。この本発明による配列要素のアドレスの変
更は、図25の場合と同じである。
【0147】4つの角のアドレスが、4,6,136,
138番目になる矩形部分3101は、第1のループネ
ストにおける、配列aを(block,*)というデー
タ分散方法で分散することに対応した、P1の計算分担
部分である。また、4つの角のアドレスが、3,4,1
35,136番目になる網掛け部分3102はプロセッ
サがキャッシュを持ち、そのキャッシュライン長が配列
2要素分であり、配列aの最初の要素がキャッシュライ
ン先頭にある場合に、P1とP0が共有するキャッシュ
ラインを示したものである。この条件の下では、キャッ
シュラインは、アドレスが奇数番目の配列要素から始ま
り、それより一つアドレスが大きい配列要素で終わる。
したがって、2つのプロセッサは、12個のキャッシュ
ラインを共有し、フォールスシェアリングもその共有キ
ャッシュラインの数だけ発生しやすい。
【0148】4つの角のアドレスが、73,84,9
7,108番目になる矩形部分3111は、第2のルー
プネストにおける、配列aを(*,block)という
データ分散方法で分散することに対応した、P2の計算
分担部分である。この矩形部分3111は、奇数番目の
アドレスで始まり、偶数番目のアドレスで終わる単一の
連続領域なので、他プロセッサとキャッシュを共有する
ことはない。よって、フォールスシェアリングは第1の
ループネストにおいてのみ発生する。
【0149】図32は、本発明の並列化によるプロセッ
サへの計算分担部分を、第1のループネストにおけるP
1の計算分担部分と、第2のループネストにおけるP2
の計算分担部分に注目して表示したものである。320
0は12行12列の配列a全体を示す。3200中の数
字は、配列要素がアドレス順に並ぶ様子を示している。
左上角から始まる12行3列の部分に、最初の36要素
(1〜36)のアドレス順が示されている。これによ
り、太線で囲まれた3行3列中の部分は連続アドレスで
あることがわかる。数字が表示されてない他の部分につ
いても同様である。
【0150】4つの角のアドレスが、10,12,12
4,126番目になる矩形部分3201は、第1のルー
プネストにおける、配列aを(block,*)という
データ分散方法で分散することに対応した、P1の計算
分担部分である。アドレスが9と10,45と46,8
1と82,117と118の網掛け部分は、P1とP0
が共有する4つのキャッシュラインを示したものであ
る。図31に比べて共有キャッシュラインの数が3分の
1になっているので、フォールスシェアリングはそれだ
け、発生しにくい。
【0151】4つの角のアドレスが、73,79,10
2,108番目になる矩形部分3211は、第2のルー
プネストにおける、配列aを(*,block)という
データ分散方法で分散することに対応した、P2の計算
分担部分である。この矩形部分3211は、奇数番目の
アドレスで始まり、偶数番目のアドレスで終わる、単一
の連続領域なので、他プロセッサとキャッシュを共有す
ることはない。よって、フォールスシェアリングは第1
のループネストにおいてのみ、発生する。
【0152】今の例では、共有キャッシュラインの数は
3分の1になっていたが、一般に、従来技術では、図3
1において配列aの第2次元の寸法だけキャッシュライ
ンを共有する可能性があり、本発明では、図32におい
て太線で囲まれた部分について1つだけ、即ち、プロセ
ッサ数分だけキャッシュラインを共有する可能性がある
ので、第2次元の寸法がプロセッサ数を上回れば、後者
の方がフォールスシェアリングは発生しにくい。
【0153】図33は、本発明のコンパイラが対象とす
る並列計算機システムの構成の一例を示したものであ
る。同図において、3301は共有メモリ、3302は
論理プロセッサエレメント、3303は制御用ネットワ
ーク、3304は入出力用論理プロセッサエレメント、
3305は入出力用コンソールまたはワークステーショ
ンを表す。
【0154】本発明のコンパイラは、入出力用コンソー
ルまたはワークステーション3305において実行さ
れ、並列ソースプログラムまたは並列オブジェクトプロ
グラムに変換される。前者の並列ソースプログラムは、
さらに、論理プロセッサエレメント3302向けのコン
パイラにより並列オブジェクトプログラムに変換され
る。上記並列オブジェクトプログラムはリンカによりロ
ードモジュールに変換され、入出力用論理プロセッサエ
レメント3304を通じて共有メモリ3301にロード
され、各論理プロセッサエレメント3302により実行
される。論理プロセッサエレメント3302の起動、終
了などの制御は制御用ネットワーク3303を通じて行
われる。
【0155】
【発明の効果】本発明によれば、プロセッサiからプロ
セッサjへ送信される部分配列は、プロセッサi側でも
プロセッサj側でも連続アドレスになるので、非連続デ
ータを1回の通信で送信するために使われるバッファが
不要になり、バッファへのデータのコピー時間が削除さ
れるので、その分、プログラムの実行時間が短縮され
る。
【0156】また、本発明によれば、各プロセッサはデ
ータ分散前の配列全体を宣言して使用するので、データ
再分散の際に、データ領域の確保・開放が不要であり、
それにかかる実行時間が短縮される。また、本発明によ
れば、データ分散前の配列全体を宣言して使用している
ため、再分散されるデータの内、自プロセッサから自プ
ロセッサへ送信されるデータは、再分散前後でアドレス
が全く変わらないため処理が不要であり、従来、自プロ
セッサ内の異なるアドレスへコピーしていたのにかかる
時間が短縮される。
【0157】また、本発明によれば、プロセッサiに割
り付けられたデータは、送信先プロセッサによって、高
々、プロセッサ総数分の非連続な領域に別れるだけなの
で、プロセッサiに割り付けられたデータとプロセッサ
jに割り付けられたデータのアドレスが隣合う回数は、
全プロセッサ数以下となる。したがって、異なるプロセ
ッサが同じキャッシュラインを共有する機会が少ないた
め、異なるプロセッサが同じキャッシュラインをアクセ
スすることにより発生するフォールスシェアリングの発
生する機会が少なく、プログラムの実行時間が短縮され
る。
【図面の簡単な説明】
【図1】本発明の第1実施例による並列化コンパイラの
構成図である。
【図2】配列細分化部の処理を説明するためのフローチ
ャートである。
【図3】配列高次元化部の処理を説明するためのフロー
チャートである。
【図4】ループ変換部の処理を説明するためのフローチ
ャートである。
【図5】ループピーリング解析処理を説明するためのフ
ローチャートである。
【図6】添字変更部の処理を説明するためのフローチャ
ートである。
【図7】プログラム並列化部の処理を説明するためのフ
ローチャートである。
【図8】ソースプログラムの例を示す図である。
【図9】ソースプログラムに対するデータ分散情報を説
明するための図である。
【図10】ソースプログラムに対する辞書を説明するた
めの図である。
【図11】配列細分化による細分化情報を説明するため
の図である。
【図12】配列高次元化による高次元化辞書を説明する
ための図である。
【図13】ソースプログラムに対するループテーブルと
ループ分散範囲テーブルを説明するための図である。
【図14】ソースプログラムに対する配列参照テーブル
とピーリングテーブルを説明するための図である。
【図15】ループ範囲細分化後のループ分散範囲テーブ
ルを説明するための図である。
【図16】ループiのループ範囲細分化後のループテー
ブルを説明するための図である。
【図17】ループjのループ範囲細分化後のループテー
ブルを説明するための図である。
【図18】ループピーリング後の中間語をプログラムイ
メージで表現した図である。
【図19】添字変更後の中間語をプログラムイメージで
表現した図である。
【図20】データ分散情報変更後のデータ分散情報を説
明するための図である。
【図21】並列化後のプログラムを示した図である。
【図22】データ分散前の配列によるデータ再分散の様
子を示した図である。
【図23】従来技術による並列化プログラムを示した図
である。
【図24】従来の並列化によるデータ再分散を説明する
ための図である。
【図25】本発明の第1実施例の並列化によるデータ再
分散を説明するための図である。
【図26】本発明の第1実施例のコンパイラが対象とす
る並列計算機システムの構成の一例である。
【図27】本発明の第2実施例による並列化コンパイラ
の構成図である。
【図28】ソースプログラムの例を示す図である。
【図29】並列化後のプログラムを示す図である。
【図30】従来技術による並列化プログラムを示す図で
ある。
【図31】従来の並列化によるプロセッサへの計算分担
部分を説明するための図である。
【図32】本発明の第2実施例の並列化によるプロセッ
サへの計算分担部分を説明するための図である。
【図33】本発明の第2実施例のコンパイラが対象とす
る並列計算機システムの構成の一例を示す図である。
【符号の説明】 100:並列化コンパイラ 101:構文解析部 102:データ分散指示文解析部 103:形状収集部 104:形状種別数判定部 105:配列細分化部 106:配列高次元化部 107:プログラム変換部 1071:ループ変換部 1072:添字変更部 108:プログラム並列化部 109:コード生成部 110,2710:ソースプログラム 120:辞書 130:中間語 140:データ分散情報 150:ループテーブル 160,2720:並列化プログラム 2601:ローカルメモリ 2602,3302:論理プロセッサエレメント 2603:ネットワーク 2604,3304:入出力用論理プロセッサエレメン
ト 2605,3305:入出力用コンソールまたはワーク
ステーション 2701:ループ並列化解析部 2702:データ分散形状決定部 2703:プログラム並列化部 3301:共有メモリ 3303:制御用ネットワーク
───────────────────────────────────────────────────── フロントページの続き (72)発明者 廣岡 孝志 神奈川県川崎市麻生区王禅寺1099番地 株 式会社日立製作所システム開発研究所内 Fターム(参考) 5B045 GG11 5B081 CC28 CC32

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】 逐次計算機向けのソースプログラムまた
    はデータ分散指示文あるいはデータ再分散指示文を含む
    並列計算機向けのソースプログラムを入力し、並列計算
    機の各分散メモリにデータを分散し、データ再分散指示
    文またはデータ再分散ルーチンを含む並列計算機向けソ
    ースプログラムまたはオブジェクトプログラムを出力す
    るコンパイラにおけるデータ再配置方法であって、 プログラム中の各点における、各配列要素の分散メモリ
    への割付け方法を表わすデータ分散形状を収集する形状
    収集ステップと、 各配列を、上記形状収集ステップで得られたどのデータ
    分散形状においても、各部分配列が唯一のプロセッサに
    属するような部分配列からなる集合に分割する配列細分
    化ステップと、 上記各部分配列内の配列要素が連続アドレスになるよう
    に元の配列の次元数を増加させて配列要素の順序を並び
    替える配列高次元化ステップを有することを特徴とする
    データ再配置方法。
  2. 【請求項2】 逐次計算機向けまたは並列指示文を含む
    並列計算機向けのソースプログラムを入力し、共有メモ
    リ型並列計算機向けの並列化指示文を含むソースプログ
    ラムまたはオブジェクトプログラムを出力するコンパイ
    ラにおけるデータ再配置方法であって、 複数プロセッサがその部分配列を分担して計算すべき配
    列に対して、プログラム中の各点における、各配列要素
    のプロセッサへの割付け方法を表わすデータ分担形状を
    収集する形状収集ステップと、 各配列を、上記形状収集ステップで得られたどのデータ
    分担形状においても各部分配列が唯一のプロセッサの分
    担になるような部分配列からなる集合に分割する配列細
    分化ステップと、 上記各部分配列内の配列要素が連続アドレスになるよう
    に元の配列の次元数を増加させて配列要素の順序を並び
    替える配列高次元化ステップを有することを特徴とする
    データ再配置方法。
  3. 【請求項3】 請求項1または2記載のデータ再配置方
    法において、上記形状収集ステップによって得られた配
    列の各次元のデータ分散形状またはデータ分担形状の種
    類が2種類以下であることを判定する形状種別数判定ス
    テップをさらに有することを特徴とするデータ再配置方
    法。
  4. 【請求項4】 請求項1または2記載のデータ再配置方
    法において、上記配列高次元化ステップは、元の配列の
    各要素を、それぞれの請求項における配列細分化ステッ
    プによって得られた部分配列中の要素と各部分配列の全
    体配列中での位置を示す位置配列の要素との組で表現可
    能なように、元の配列から、上記部分配列の次元数と上
    記位置配列の次元数の和の次元数を持つ高次元化配列を
    作成し、上記高次元化配列の連続アドレスを与える次元
    から上記部分配列の次元数分の次元までの各寸法は、上
    記部分配列の各次元の寸法とし、残りの次元の寸法は、
    上記位置配列の各次元の寸法とすることを特徴とするデ
    ータ再配置方法。
  5. 【請求項5】 請求項1または2記載のデータ再配置方
    法において、上記配列高次元化ステップに伴い、配列の
    高次元化される次元の添字にループ制御変数が含まれる
    ことを検出し、そのループ制御変数を持つループを、配
    列高次元化ステップに対応してネストする複数のループ
    に変換するループ変換ステップと、プログラム中の配列
    参照点における配列添字を、配列高次元化ステップに対
    応して変更する添字変更ステップとをさらに含むことを
    特徴とするデータ再配置方法。
  6. 【請求項6】 請求項5記載のデータ再配置方法におい
    て、上記ループ変換ステップは、配列要素の参照が部分
    配列間の境界をまたがるか否かを判定し、境界をまたが
    る場合とまたがらない場合とで別ループになるようにル
    ープの繰り返し範囲を分割するための解析を行なうルー
    プピーリング解析ステップと、上記解析の結果を用いて
    ループの繰返し範囲を分割するループピーリングステッ
    プとを含むことを特徴とするデータ再配置方法。
  7. 【請求項7】 請求項1記載のデータ再配置方法におい
    て、通信データのバッファリングを行なわない再分散通
    信を生成する非バッファリング再分散通信生成ステップ
    をさらに含むことを特徴とするデータ再配置方法。
  8. 【請求項8】 請求項7記載のデータ再配置方法におい
    て、分散メモリ型並列計算機の各プロセッサで、データ
    分散前の元の配列全体を宣言するグローバルデータ宣言
    作成ステップと、各配列参照点における配列添字の値
    を、データ分散前の元の値を用いるグローバル添字生成
    ステップをさらに含むことを特徴とするデータ再配置方
    法。
JP28169298A 1998-10-02 1998-10-02 データ再配置方法 Expired - Lifetime JP3551353B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP28169298A JP3551353B2 (ja) 1998-10-02 1998-10-02 データ再配置方法
US09/409,900 US6681388B1 (en) 1998-10-02 1999-10-01 Method and compiler for rearranging array data into sub-arrays of consecutively-addressed elements for distribution processing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP28169298A JP3551353B2 (ja) 1998-10-02 1998-10-02 データ再配置方法

Publications (2)

Publication Number Publication Date
JP2000112901A true JP2000112901A (ja) 2000-04-21
JP3551353B2 JP3551353B2 (ja) 2004-08-04

Family

ID=17642661

Family Applications (1)

Application Number Title Priority Date Filing Date
JP28169298A Expired - Lifetime JP3551353B2 (ja) 1998-10-02 1998-10-02 データ再配置方法

Country Status (2)

Country Link
US (1) US6681388B1 (ja)
JP (1) JP3551353B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2005078579A1 (ja) * 2004-02-12 2007-10-18 松下電器産業株式会社 プログラム変換装置およびプログラム変換方法
US9552197B2 (en) 2014-10-10 2017-01-24 Fujitsu Limited Computer-readable recording medium storing information processing program, information processing apparatus, and information processing method
US10101980B2 (en) 2016-12-05 2018-10-16 Fujitsu Limited Compilation method and information processing apparatus

Families Citing this family (67)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7266725B2 (en) * 2001-09-03 2007-09-04 Pact Xpp Technologies Ag Method for debugging reconfigurable architectures
DE19651075A1 (de) * 1996-12-09 1998-06-10 Pact Inf Tech Gmbh Einheit zur Verarbeitung von numerischen und logischen Operationen, zum Einsatz in Prozessoren (CPU's), Mehrrechnersystemen, Datenflußprozessoren (DFP's), digitalen Signal Prozessoren (DSP's) oder dergleichen
DE19654595A1 (de) * 1996-12-20 1998-07-02 Pact Inf Tech Gmbh I0- und Speicherbussystem für DFPs sowie Bausteinen mit zwei- oder mehrdimensionaler programmierbaren Zellstrukturen
EP1329816B1 (de) * 1996-12-27 2011-06-22 Richter, Thomas Verfahren zum selbständigen dynamischen Umladen von Datenflussprozessoren (DFPs) sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstrukturen (FPGAs, DPGAs, o.dgl.)
DE19654846A1 (de) * 1996-12-27 1998-07-09 Pact Inf Tech Gmbh Verfahren zum selbständigen dynamischen Umladen von Datenflußprozessoren (DFPs) sowie Bausteinen mit zwei- oder mehrdimensionalen programmierbaren Zellstrukturen (FPGAs, DPGAs, o. dgl.)
US6542998B1 (en) 1997-02-08 2003-04-01 Pact Gmbh Method of self-synchronization of configurable elements of a programmable module
US8686549B2 (en) * 2001-09-03 2014-04-01 Martin Vorbach Reconfigurable elements
DE19861088A1 (de) * 1997-12-22 2000-02-10 Pact Inf Tech Gmbh Verfahren zur Reparatur von integrierten Schaltkreisen
JPH11259437A (ja) * 1998-03-12 1999-09-24 Hitachi Ltd 不要バリア命令の削減方式
TW463528B (en) * 1999-04-05 2001-11-11 Idemitsu Kosan Co Organic electroluminescence element and their preparation
AU5805300A (en) 1999-06-10 2001-01-02 Pact Informationstechnologie Gmbh Sequence partitioning in cell structures
US7500188B1 (en) * 2000-04-26 2009-03-03 Novarra, Inc. System and method for adapting information content for an electronic device
US20040049737A1 (en) * 2000-04-26 2004-03-11 Novarra, Inc. System and method for displaying information content with selective horizontal scrolling
US7747782B2 (en) * 2000-04-26 2010-06-29 Novarra, Inc. System and method for providing and displaying information content
EP1342158B1 (de) 2000-06-13 2010-08-04 Richter, Thomas Pipeline ct-protokolle und -kommunikation
US8058899B2 (en) * 2000-10-06 2011-11-15 Martin Vorbach Logic cell array and bus system
US9037807B2 (en) * 2001-03-05 2015-05-19 Pact Xpp Technologies Ag Processor arrangement on a chip including data processing, memory, and interface elements
US7444531B2 (en) 2001-03-05 2008-10-28 Pact Xpp Technologies Ag Methods and devices for treating and processing data
WO2005045692A2 (en) * 2003-08-28 2005-05-19 Pact Xpp Technologies Ag Data processing device and method
US20090210653A1 (en) * 2001-03-05 2009-08-20 Pact Xpp Technologies Ag Method and device for treating and processing data
US7844796B2 (en) * 2001-03-05 2010-11-30 Martin Vorbach Data processing device and method
EP1402382B1 (de) * 2001-06-20 2010-08-18 Richter, Thomas Verfahren zur bearbeitung von daten
US7055144B2 (en) * 2001-07-12 2006-05-30 International Business Machines Corporation Method and system for optimizing the use of processors when compiling a program
US7996827B2 (en) * 2001-08-16 2011-08-09 Martin Vorbach Method for the translation of programs for reconfigurable architectures
US7434191B2 (en) * 2001-09-03 2008-10-07 Pact Xpp Technologies Ag Router
US8686475B2 (en) * 2001-09-19 2014-04-01 Pact Xpp Technologies Ag Reconfigurable elements
US8281108B2 (en) * 2002-01-19 2012-10-02 Martin Vorbach Reconfigurable general purpose processor having time restricted configurations
EP1347375A1 (en) * 2002-02-07 2003-09-24 Sap Ag Method and apparatus for parallel distributed compilation
ATE402446T1 (de) * 2002-02-18 2008-08-15 Pact Xpp Technologies Ag Bussysteme und rekonfigurationsverfahren
US8914590B2 (en) * 2002-08-07 2014-12-16 Pact Xpp Technologies Ag Data processing method and device
US20060075211A1 (en) * 2002-03-21 2006-04-06 Martin Vorbach Method and device for data processing
US20110161977A1 (en) * 2002-03-21 2011-06-30 Martin Vorbach Method and device for data processing
US20070011433A1 (en) * 2003-04-04 2007-01-11 Martin Vorbach Method and device for data processing
JP3847672B2 (ja) * 2002-07-03 2006-11-22 松下電器産業株式会社 コンパイラ装置及びコンパイル方法
US7657861B2 (en) * 2002-08-07 2010-02-02 Pact Xpp Technologies Ag Method and device for processing data
US20110238948A1 (en) * 2002-08-07 2011-09-29 Martin Vorbach Method and device for coupling a data processing unit and a data processing array
WO2004021176A2 (de) * 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
US6952821B2 (en) * 2002-08-19 2005-10-04 Hewlett-Packard Development Company, L.P. Method and system for memory management optimization
AU2003289844A1 (en) * 2002-09-06 2004-05-13 Pact Xpp Technologies Ag Reconfigurable sequencer structure
US7484079B2 (en) * 2002-10-31 2009-01-27 Hewlett-Packard Development Company, L.P. Pipeline stage initialization via task frame accessed by a memory pointer propagated among the pipeline stages
US7373640B1 (en) * 2003-07-31 2008-05-13 Network Appliance, Inc. Technique for dynamically restricting thread concurrency without rewriting thread code
US7395527B2 (en) 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US8381037B2 (en) * 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US7415705B2 (en) 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US7496908B2 (en) * 2004-01-14 2009-02-24 International Business Machines Corporation Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US7895382B2 (en) 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US20060123401A1 (en) * 2004-12-02 2006-06-08 International Business Machines Corporation Method and system for exploiting parallelism on a heterogeneous multiprocessor computer system
EP1849095B1 (en) * 2005-02-07 2013-01-02 Richter, Thomas Low latency massive parallel data processing device
US8473934B2 (en) * 2005-07-15 2013-06-25 Imec Method for mapping applications on a multiprocessor platform/system
JP4822817B2 (ja) * 2005-11-22 2011-11-24 パナソニック株式会社 コンパイルシステム
US8543992B2 (en) * 2005-12-17 2013-09-24 Intel Corporation Method and apparatus for partitioning programs to balance memory latency
JP2009524134A (ja) * 2006-01-18 2009-06-25 ペーアーツェーテー イクスペーペー テクノロジーズ アクチエンゲゼルシャフト ハードウェア定義方法
US7792895B1 (en) * 2006-06-16 2010-09-07 Nvidia Corporation Efficient matrix multiplication on a parallel processing device
US7836118B1 (en) 2006-06-16 2010-11-16 Nvidia Corporation Hardware/software-based mapping of CTAs to matrix tiles for efficient matrix multiplication
US7912889B1 (en) 2006-06-16 2011-03-22 Nvidia Corporation Mapping the threads of a CTA to the elements of a tile for efficient matrix multiplication
US8255890B2 (en) * 2007-02-14 2012-08-28 The Mathworks, Inc. Media for performing parallel processing of distributed arrays
US8239844B2 (en) * 2007-02-14 2012-08-07 The Mathworks, Inc. Method of using parallel processing constructs and dynamically allocating program portions
WO2008118613A1 (en) * 2007-03-01 2008-10-02 Microsoft Corporation Executing tasks through multiple processors consistently with dynamic assignments
EP2217999A2 (de) * 2007-11-28 2010-08-18 Krass, Maren Compiler für rekonfigurierbare architekturen mit besonderem zwischenformat
EP2235627A1 (en) * 2007-12-07 2010-10-06 Krass, Maren Using function calls as compiler directives
US8572276B2 (en) * 2010-04-29 2013-10-29 International Business Machines Corporation Pipelining protocols in misaligned buffer cases
US20120221788A1 (en) * 2011-02-28 2012-08-30 Microsoft Corporation Multi-dimensional array manipulation
US20130332937A1 (en) * 2012-05-29 2013-12-12 Advanced Micro Devices, Inc. Heterogeneous Parallel Primitives Programming Model
US10402110B2 (en) * 2016-08-04 2019-09-03 Rambus Inc. Adjustable access energy and access latency memory system and devices
US9946539B1 (en) * 2017-05-23 2018-04-17 Google Llc Accessing data in multi-dimensional tensors using adders
US10628141B2 (en) * 2018-05-07 2020-04-21 Intel Corporation Compiler transformation with loop and data partitioning
US11113064B2 (en) * 2019-11-27 2021-09-07 Sas Institute Inc. Automated concurrency and repetition with minimal syntax

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247632A (en) * 1989-01-23 1993-09-21 Eastman Kodak Company Virtual memory management arrangement for addressing multi-dimensional arrays in a digital data processing system
US5475842A (en) * 1993-08-11 1995-12-12 Xerox Corporation Method of compilation optimization using an N-dimensional template for relocated and replicated alignment of arrays in data-parallel programs for reduced data communication during execution
US5485619A (en) * 1993-12-29 1996-01-16 International Business Machines Corporation Array variable transformation system employing subscript table mapping to scalar loop indices
US5659714A (en) * 1995-07-05 1997-08-19 Mitsubishi Denki Kabushiki Kaisha Data processor including memory for associating data elements of two-dimensional array which are numbered in spiral order with element numbers thereof
US5845126A (en) * 1995-12-06 1998-12-01 International Business Machines Corporation Method of, system for, and computer program product for providing inlined nested array constructors using normalized counters

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2005078579A1 (ja) * 2004-02-12 2007-10-18 松下電器産業株式会社 プログラム変換装置およびプログラム変換方法
US9552197B2 (en) 2014-10-10 2017-01-24 Fujitsu Limited Computer-readable recording medium storing information processing program, information processing apparatus, and information processing method
US10101980B2 (en) 2016-12-05 2018-10-16 Fujitsu Limited Compilation method and information processing apparatus

Also Published As

Publication number Publication date
JP3551353B2 (ja) 2004-08-04
US6681388B1 (en) 2004-01-20

Similar Documents

Publication Publication Date Title
JP2000112901A (ja) データ再配置方法
US8400458B2 (en) Method and system for blocking data on a GPU
US6088511A (en) Nested parallel 2D Delaunay triangulation method
US6212617B1 (en) Parallel processing method and system using a lazy parallel data type to reduce inter-processor communication
Cuomo et al. A GPU-accelerated parallel K-means algorithm
O'Keefe et al. Hardware barrier synchronization: static barrier MIMD (SBM)
JP6502616B2 (ja) バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法
JPH0830561A (ja) プログラムの並列化実行方法及び並列化実行コンパイラ
WO2022068205A1 (zh) 数据存储和读取方法及系统
Gremse et al. Memory-efficient sparse matrix-matrix multiplication by row merging on many-core architectures
Wang et al. Parallel convolution algorithm using implicit matrix multiplication on multi-core cpus
US12045591B2 (en) Skip buffer splitting
CN112765094A (zh) 一种基于数据划分和计算分配的稀疏张量典范分解方法
US5781777A (en) Optimization method for computation partitioning oriented to a distributed memory
Liu et al. Architecture and synthesis for area-efficient pipelining of irregular loop nests
Chung Prefix computations on a generalized mesh-connected computer with multiple buses
Shehab et al. Accelerating relational database operations using both CPU and GPU co-processor
JP4787456B2 (ja) 並列プログラム生成装置,並列プログラム生成方法および並列プログラム生成プログラム
Bassoy Design of a high-performance tensor-vector multiplication with BLAS
Coole et al. A traversal cache framework for fpga acceleration of pointer data structures: A case study on barnes-hut n-body simulation
Freire et al. A GPU method for the analysis stage of the SPTRSV kernel
Raju et al. Performance enhancement of CUDA applications by overlapping data transfer and Kernel execution
Yu et al. Accelerated Synchronous Model Parallelism Using Cooperative Process for Training Compute-Intensive Models
Schreiner A para-functional programming interface for a parallel computer algebra package
CN116737238A (zh) 指令生成方法、装置及电子设备

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20040402

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040415

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080514

Year of fee payment: 4

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080514

Year of fee payment: 4

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

EXPY Cancellation because of completion of term