JPH08328871A - 並列処理プログラム生成方法及びその実行方法並びにそれらの実施装置 - Google Patents

並列処理プログラム生成方法及びその実行方法並びにそれらの実施装置

Info

Publication number
JPH08328871A
JPH08328871A JP13308295A JP13308295A JPH08328871A JP H08328871 A JPH08328871 A JP H08328871A JP 13308295 A JP13308295 A JP 13308295A JP 13308295 A JP13308295 A JP 13308295A JP H08328871 A JPH08328871 A JP H08328871A
Authority
JP
Japan
Prior art keywords
input
output
parallel
processing
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP13308295A
Other languages
English (en)
Inventor
Hiroshi Ota
寛 太田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP13308295A priority Critical patent/JPH08328871A/ja
Publication of JPH08328871A publication Critical patent/JPH08328871A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 逐次入出力用の入出力文を並列化して並列処
理プログラムを生成し、実行することが可能な技術を提
供する。 【構成】 逐次処理プログラムの入出力文を並列入出力
処理用コードまたは並列入出力処理用のライブラリ手続
きの呼び出しに変換して並列処理プログラムを生成し、
入出力処理の対象であるファイルが並列入出力用である
かまたは逐次入出力用であるかに応じて、並列入出力処
理または逐次入出力処理を実行し、前記入出力処理のデ
ータの分散形状がメモリ上と前記ファイル上で異なる場
合には前記分散形状の変換を行い、前記ファイルの分散
情報を前記入出力処理のデータと共に前記ファイル内に
保持し、配列データ以外のデータについても並列入出力
処理を行うものである。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、並列処理プログラム生
成方法及びその実行方法並びにそれらの実施装置に関
し、特に、入出力文を含む逐次処理プログラムを並列入
出力機能を持つ分散メモリ型並列計算機用のプログラム
に変換する並列処理プログラム生成方法及びその実行方
法並びにそれらの実施装置に適用して有効な技術に関す
るものである。
【0002】
【従来の技術】従来、複数のプロセッサから構成される
並列計算機システムにおいて、各プロセッサごとに固有
のメモリを備えているものを、分散メモリ型並列計算機
と呼んでいる。この様な構成は、プロセッサ数が数百台
以上迄拡張可能な高並列/超並列計算機において採用さ
れている。分散メモリ型並列計算機の多くは、複数のノ
ード(プロセッサとローカルメモリ)が入出力装置を備
えており、並列入出力処理が可能である。
【0003】科学技術計算等の様に大規模配列を扱うプ
ログラムを分散メモリ型並列計算機で実行するときは、
配列の要素を各ノードのメモリに分散して割り当て、各
配列要素に対する処理を各ノードで並列に実行するとい
う方法が、通常用いられる。
【0004】前記の様なプログラムでは、しばしば、大
規模配列の初期値を読み込んだり、中間結果や最終結果
を格納したりする為に、入出力処理が用いられる。この
とき、配列が大規模になるにつれて、並列入出力処理の
利用は必須となる。なぜなら、大規模配列に対する入出
力処理を1つのノードで逐次的に行っていては、そこが
性能のボトルネックとなってしまうからである。
【0005】FortranやC言語等の従来のプログラム言語
では、逐次的な入出力処理を想定しており、並列入出力
処理の機能は設けられていなかった。しかし、並列入出
力機能を持つ並列計算機が広まるにつれて、プログラム
内から並列入出力処理を扱える様に、言語の入出力機能
の拡張が提案される様になってきた。その一例は、Pete
r Brezany、他、"Concurrent File Operations in a Hi
gh Performance FORTRAN" Supercomputing '92、pp. 23
0-237、1992年 に述べられているVienna Fortran の入
出力機能である。
【0006】Vienna Fortranでは「標準ファイル」と
「配列ファイル」の2つの種別のファイルを設ける。標
準ファイルは逐次的な入出力処理によってアクセスされ
るファイルであり、その処理は従来のFortranの入出力
文で記述する。一方、配列ファイルは並列入出力処理の
為のファイルであり、その処理は Vienna Fortran 特有
の並列入出力文で記述する。
【0007】配列ファイルには、プログラム内の配列デ
ータが分散されて格納される。配列データの分散形状と
しては、「ブロック分散」や「巡回分散」等がある。ブ
ロック分散は、配列全体を連続したブロックに等分し
て、各ノードに割り当てるものである。例えば、100
0個の要素からなるaという配列を4台のノードにブロ
ック分散すると、各ノードへの要素の割り当ては、次の
様になる。 ノード0:a(1), a(2), ..., a(250) ノード1:a(251), a(252), ..., a(500) ノード2:a(501), a(502), ..., a(750) ノード3:a(751), a(752), ..., a(1000) ここでa(i)は配列aのi番目の要素を表す。また、巡回分
散は、各配列要素を1個ずつ順番にノードに割り当てる
ものである。例えば、上と同じ配列を巡回分散すると、
次の様になる。 ノード0:a(1), a(5), ..., a(997) ノード1:a(2), a(6), ..., a(998) ノード2:a(3), a(7), ..., a(999) ノード3:a(4), a(8), ..., a(1000) この様な配列データの分散は、配列がメモリ上に置かれ
る場合でも、配列ファイルに格納される場合でも、同様
に適用できる。配列ファイルに配列を格納するときは、
各配列の先頭にその分散形状を表す「分散記述子」を付
けて格納する。これによって、分散形状の異なる複数の
配列を1個の配列ファイルに格納できる。1個の配列と
その分散記述子を合わせたものを配列レコードと呼んで
いる。
【0008】配列ファイルに対する並列入出力処理をプ
ログラム内に記述するときは、拡張された入出力文を用
いる。例えば、配列aをメモリ上の分散形状のままで配
列ファイルに格納する場合、次の様に記述する。 CWRITE (f) a ここで、CWRITEはVienna Fortranで用いられるキーワー
ドであり、配列ファイルへの並列出力を表す。また、f
は書き込み先の配列ファイルを指定する番号である。こ
の文によって、配列aとその分散記述子が配列ファイル
に書き込まれる。
【0009】また、分散形状を指定して配列ファイルに
格納したいときには、次の様に記述する。 CWRITE (f, DIST='(CYCLIC)') a この例で、DIST='(CYCLIC)'は、巡回分散で格納するこ
とを指定するオプションパラメタである。このときもし
も、配列aのメモリ上での分散形状がブロック分散にな
っていたとしたら、巡回分散になる様にメモリ上で配置
替え(「再分散」と呼ぶ)が行われてから、ファイルに
格納される。再分散にはノード間のデータ転送が伴う。
巡回分散を表す分散記述子も共に格納される。
【0010】配列ファイルからメモリにデータを読み込
むときは、次の様に記述する。 CREAD (f) a ここで、CREADはVienna Fortranで用いられるキーワー
ドであり、配列ファイルからの並列入力を表す。この文
によって、配列ファイルfの配列レコードが1個読み込
まれ、メモリ上の配列aに格納される。配列ファイル内
での分散形状は、分散記述子によって分かる。これがメ
モリ上での配列aの分散形状と異なる場合には、メモリ
上で再分散が行われる。
【0011】
【発明が解決しようとする課題】本発明者は、前記従来
技術を検討した結果、以下の問題点を見い出した。
【0012】すなわち、従来の並列処理プログラム生成
方法では、拡張された並列入出力機能を利用する為、ユ
ーザが従来の逐次入出力用の入出力文を新たな並列入出
力文に修正しなければならないという問題と、拡張され
た並列入出力機能を記述する為、移植性が低下するとい
う問題があった。
【0013】また、従来の並列処理プログラム生成方法
では、拡張された並列入出力機能の記述を支援するライ
ブラリが充分に用意されていなかった為、プログラムを
修正する際には、逐次入出力用の標準ファイルと並列入
出力用の配列ファイルを意識して使い分けなければなら
ないという問題があった。この様なプログラムの修正は
ユーザにとって面倒な作業である。
【0014】また、従来の逐次処理プログラムの実行で
は、入出力処理の対象であるファイルはプログラム実行
時に変更することが可能であるが、従来の並列処理プロ
グラム実行方法では、ここに大きな制約があり、並列入
出力処理の対象であるファイルは配列ファイルでなけれ
ばならない為、実行時に対象であるファイルを標準ファ
イルに変更するこができないという問題があった。例え
ば、ネットワークで接続されたワークステーション等の
他の計算機上のファイルを出力先にするときは、プログ
ラムを書き直さなければならない。
【0015】また、従来の並列処理プログラム実行方法
の配列ファイルは、配列データをそのまま出力するとい
う特殊な場合にしか対応していない為、他の様々な場合
に対して並列入出力処理が利用できないという問題があ
った。例えば、Fortran言語では、データを人間が読め
る文字列に変換してファイルに出力する、書式付き入出
力が規定されており、また、1つのファイル内に配列デ
ータと配列以外のデータが混在していても構わない。し
かし、その様な種々の入出力処理の並列実行方法が、従
来技術では考慮されていない。
【0016】本発明の目的は、移植性を低下させること
なく、ユーザの修正無しに逐次入出力用の入出力文を並
列化して並列処理プログラムの生成を行うことが可能な
技術を提供することにある。
【0017】本発明の他の目的は、並列処理プログラム
の生成を高速化に行うことが可能な技術を提供すること
にある。
【0018】本発明の他の目的は、並列処理プログラム
の実行時に入出力処理の対象であるファイルを任意に変
更することが可能な技術を提供することにある。
【0019】本発明の他の目的は、配列データ以外のデ
ータについても並列出力処理を実行することが可能な技
術を提供することにある。
【0020】本発明の他の目的は、配列データ以外のデ
ータについても並列入力処理を実行することが可能な技
術を提供することにある。
【0021】本発明の前記並びにその他の目的と新規な
特徴は、本明細書の記述及び添付図面によって明かにな
るであろう。
【0022】
【課題を解決するための手段】本願において開示される
発明のうち、代表的なものの概要を簡単に説明すれば、
下記のとおりである。
【0023】(1)逐次処理用に記述された逐次処理プ
ログラムの入出力文を並列処理用に記述された並列入出
力処理用コードに変換する並列処理プログラム生成方法
であって、前記逐次処理プログラムの入出力文を検索
し、前記入出力文の入出力処理の対象であるファイルが
並列入出力用であるかまたは逐次入出力用であるかを判
定するコードを挿入し、前記判定結果に応じて複数のメ
モリと複数の外部記憶装置との間で並列入出力処理また
は逐次入出力処理を実行すると共に前記入出力処理のデ
ータの分散形状が前記メモリ上と前記外部記憶装置上と
で異なっている場合に分散形状の変換を行うコードを挿
入するものである。
【0024】(2)逐次処理用に記述された逐次処理プ
ログラムの入出力文を並列入出力処理用のライブラリ手
続きの呼び出しに変換する並列処理プログラム生成方法
であって、前記逐次処理プログラムの入出力文を検索
し、前記入出力文の入出力処理の対象であるファイルが
並列入出力用であるかまたは逐次入出力用であるかを判
定した後に前記判定結果に応じて複数のメモリと複数の
外部記憶装置との間で並列入出力処理または逐次入出力
処理を実行すると共に前記入出力処理のデータの分散形
状が前記メモリ上と前記外部記憶装置上とで異なってい
る場合に分散形状の変換を行うライブラリ手続き呼び出
しを挿入するものである。
【0025】(3)入出力処理の対象であるファイルの
種別に応じて並列入出力処理または逐次入出力処理を行
う並列処理プログラム実行方法であって、前記入出力処
理の対象であるファイルが並列入出力用であるかまたは
逐次入出力用であるかを判定し、前記判定結果に応じて
複数のメモリと複数の外部記憶装置との間で並列入出力
処理または逐次入出力処理を実行すると共に前記入出力
処理のデータの分散形状が前記メモリ上と前記外部記憶
装置上とで異なっている場合に分散形状の変換を行うも
のである。
【0026】(4)任意の出力データについて前記出力
データの種別に応じて並列出力処理または逐次出力処理
を行う並列処理プログラム実行方法であって、前記出力
データを複数の外部記憶装置に分散して格納するか否か
を決定し、前記出力データを分散して格納する場合に前
記出力データが分散されていることを示す情報と分散単
位を示す情報と前記分散単位の長さを示す情報と分散形
状から成る分散情報を作成し、前記出力データを分散し
ないで格納する場合に前記出力データが分散されていな
いことを示す情報と出力データの長さを示す情報から成
る分散情報を作成し、前記分散情報をメモリに記憶され
た出力データと共に前記外部記憶装置に並列出力または
逐次出力するものである。
【0027】(5)任意の入力データについて前記入力
データの種別に応じて並列入力処理または逐次入力処理
を行う並列処理プログラム実行方法であって、前記入力
データが複数の外部記憶装置に分散して格納されている
か否かを表す情報を前記外部記憶装置から入力し、前記
入力データが分散されている場合には分散単位を示す情
報と前記分散単位の長さを示す情報と共に入力データを
前記複数の外部記憶装置から並列入力してメモリに記憶
し、前記入力データが分散されていない場合には前記入
力データの長さを示す情報と共に前記入力データを当該
外部記憶装置から逐次入力してメモリに記憶するもので
ある。
【0028】(6)逐次処理用に記述された逐次処理プ
ログラムの入出力文を並列処理用に記述された並列入出
力処理用コードに変換する並列処理プログラム生成装置
であって、前記逐次処理プログラムと前記並列処理プロ
グラムを一時的に記憶するメモリと、前記逐次処理プロ
グラムと前記並列処理プログラムを格納する外部記憶装
置と、前記外部記憶装置に格納された前記逐次処理プロ
グラムを前記メモリに記憶して入出力文を検索し、前記
入出力文の入出力処理の対象であるファイルが並列入出
力用であるかまたは逐次入出力用であるかを判定するコ
ードを挿入し、前記判定結果に応じて複数のメモリと複
数の外部記憶装置との間で並列入出力処理または逐次入
出力処理を実行すると共に前記入出力処理のデータの分
散形状が前記メモリ上と前記外部記憶装置上とで異なっ
ている場合に分散形状の変換を行うコードを挿入して並
列処理プログラムを生成し、前記並列処理プログラムを
前記外部記憶装置に格納する制御装置を備えるものであ
る。
【0029】(7)逐次処理用に記述された逐次処理プ
ログラムの入出力文を並列入出力処理用のライブラリ手
続きの呼び出しに変換する並列処理プログラム生成装置
であって、前記逐次処理プログラムと前記並列処理プロ
グラムを一時的に記憶するメモリと、前記逐次処理プロ
グラムと前記並列処理プログラムを格納する外部記憶装
置と、前記外部記憶装置に格納された前記逐次処理プロ
グラムを前記メモリに記憶して入出力文を検索し、前記
入出力文の入出力処理の対象であるファイルが並列入出
力用であるかまたは逐次入出力用であるかを判定した後
に前記判定結果に応じて複数のメモリと複数の外部記憶
装置との間で並列入出力処理または逐次入出力処理を実
行すると共に前記入出力処理のデータの分散形状が前記
メモリ上と前記外部記憶装置上とで異なっている場合に
分散形状の変換を行うライブラリ手続き呼び出しを挿入
して並列処理プログラムを生成し、前記並列処理プログ
ラムを前記外部記憶装置に格納する制御装置を備えるも
のである。
【0030】(8)入出力処理の対象であるファイルの
種別に応じて並列入出力処理または逐次入出力処理を行
う並列処理プログラム実行装置であって、前記入出力処
理のデータを記憶する複数のメモリと、前記入出力処理
の行われるファイルを格納する複数の外部記憶装置と、
前記入出力処理の対象であるファイルが並列入出力用で
あるかまたは逐次入出力用であるかを判定し、前記判定
結果に応じて複数のメモリと複数の外部記憶装置との間
で並列入出力処理または逐次入出力処理を実行すると共
に前記入出力処理のデータの分散形状が前記メモリ上と
前記外部記憶装置上とで異なっている場合に分散形状の
変換を行う複数の制御装置を備えるものである。
【0031】(9)任意の出力データについて前記出力
データの種別に応じて並列出力処理または逐次出力処理
を行う並列処理プログラム実行装置であって、前記出力
データを記憶する複数のメモリと、前記並列出力処理の
行われるファイルを格納する複数の外部記憶装置と、前
記出力データを複数の外部記憶装置に分散して格納する
か否かを決定し、前記出力データを分散して格納する場
合に前記出力データが分散されていることを示す情報と
分散単位を示す情報と前記分散単位の長さを示す情報と
分散形状から成る分散情報を作成し、前記出力データを
分散しないで格納する場合に前記出力データが分散され
ていないことを示す情報と出力データの長さを示す情報
から成る分散情報を作成し、前記分散情報を前記メモリ
に記憶された出力データと共に前記外部記憶装置に並列
出力または逐次出力する複数の制御装置を備えるもので
ある。
【0032】(10)任意の入力データについて前記入
力データの種別に応じて並列入力処理または逐次入力処
理を行う並列処理プログラム実行装置であって、前記入
力データを記憶する複数のメモリと、前記並列入力処理
の行われるファイルを格納する複数の外部記憶装置と、
前記入力データが複数の外部記憶装置に分散して格納さ
れているか否かを表す情報を前記外部記憶装置から入力
し、前記入力データが分散されている場合には分散単位
を示す情報と前記分散単位の長さを示す情報と共に入力
データを前記複数の外部記憶装置から並列入力して前記
メモリに記憶し、前記入力データが分散されていない場
合には前記入力データの長さを示す情報と共に前記入力
データを当該外部記憶装置から逐次入力して前記メモリ
に記憶する複数の制御装置を備えるものである。
【0033】
【作用】上述した手段の項に記載された、並列処理プロ
グラム生成方法及びその実行方法並びにそれらの実施装
置における作用は以下のとおりである。
【0034】(1)逐次処理プログラムの入出力文を検
索し、前記入出力文を以下の様に並列入出力処理用コー
ドに変換する。
【0035】まず、前記入出力文の入出力処理の対象で
あるファイルが並列入出力用ファイルであるかまたは逐
次入出力用ファイルであるかを判定するコードを挿入す
る。
【0036】次に、前記ファイルが並列入出力用ファイ
ルである場合には、前記入出力処理を複数の処理装置と
複数の外部記憶装置との間で並列に実行するコードを挿
入し、前記ファイルが逐次入出力用ファイルである場合
には、前記入出力処理を単一の処理装置と単一の外部記
憶装置との間で逐次的に実行するコードを挿入する。
【0037】前記ファイル内のデータの分散形状と当該
処理装置のメモリ上のデータの分散形状とを比較した後
に前記ファイル内のデータの分散形状が当該処理装置の
メモリ上のデータの分散形状と異なっている場合に前記
分散形状の変換を行うコードを挿入する。
【0038】前記の並列処理プログラムの生成では、ユ
ーザが修正すること無しに前記逐次処理プログラムの入
出力文を並列入出力処理用コードに変換し、入出力処理
の対象であるファイルが並列入出力用であるか、或い
は、逐次入出力用であるかを判定するコードが追加され
るので、並列入出力用のファイルをサポートしていない
計算機でも実行可能なプログラムの生成が可能である。
【0039】以上の様に、逐次入出力用の入出力文を検
索した後に前記入出力文を並列入出力用の入出力文に変
換するので、移植性を低下させることなく、ユーザの修
正無しに逐次入出力用の入出力文を並列化して並列処理
プログラムの生成を行うことが可能である。
【0040】(2)前記並列入出力処理用コードをライ
ブラリ化して外部記憶装置に格納しておき、前記逐次処
理プログラムの入出力文を前記並列入出力処理用コード
を実行するライブラリ手続きの呼び出しに変換する。
【0041】前記並列入出力処理用コードをライブラリ
化しておくおことにより、前記並列入出力処理用コード
部分のソースプログラムをコンパイルする必要が無くな
るので、並列処理プログラムの生成を高速化される。
【0042】また、ソースプログラム中の並列入出力処
理用コード部分が簡単な呼び出し文に変換されるので、
ソースプログラムの記憶領域が節約される。
【0043】また、前記ライブラリを実行時に動的にリ
ンクすることにすれば、前記ソースプログラムから作成
した実行形式の並列処理プログラムの大きさが抑えら
れ、記憶領域が節約されると共に、実行時の当該並列処
理プログラムのローディングが高速化される。
【0044】以上の様に、逐次入出力用の入出力文を並
列入出力処理用のライブラリ手続きの呼び出しに変換す
るので、並列処理プログラムの生成を高速化に行うこと
が可能である。
【0045】(3)従来技術では、分散形状の等しい複
数のメモリ上の配列と複数の外部記憶装置上の配列ファ
イルとの間で並列入出力処理が行われており、配列ファ
イル上の分散形状が異なる場合や非分散の逐次入出力用
ファイルの場合は、複数のメモリ上の並列処理用の配列
との入出力処理が行えなかった。
【0046】前記並列処理プログラム生成方法によって
生成された並列処理プログラムでは、並列処理プログラ
ムの入出力処理の対象であるファイルが並列入出力用フ
ァイルであるかまたは逐次入出力用ファイルであるかを
判定し、前記ファイルが並列入出力用ファイルである場
合には、前記入出力処理を複数のメモリと複数の外部記
憶装置との間で並列に実行し、前記ファイルが逐次入出
力用ファイルである場合には、前記入出力処理を1つの
メモリと1つの外部記憶装置との間で逐次的に実行す
る。
【0047】この様に、入出力処理の対象であるファイ
ルによって、並列入出力処理または逐次入出力処理を行
うと、前記入出力処理のデータの分散形状が前記メモリ
上と前記外部記憶装置のファイル上とで異なっている場
合が生じる。
【0048】そこで、前記入出力処理のデータの分散形
状が前記メモリ上と前記外部記憶装置上とで異なってい
る場合には、複数の処理装置間でデータ転送を行って、
前記分散形状の変換を実行する。
【0049】その結果、入出力処理の対象であるファイ
ル上のデータの分散形状が、複数のメモリ上の並列処理
用のデータの分散形状と異なる場合であっても、前記分
散形状の変換を介して並列入出力処理及び並列データ処
理が行われる。
【0050】以上の様に、入出力処理の対象であるファ
イルが並列入出力用ファイルであるかまたは逐次入出力
用ファイルであるかを判定するので、並列処理プログラ
ムの実行時に入出力処理の対象であるファイルを任意に
変更することが可能である。
【0051】(4)従来技術では、並列出力処理が可能
であるファイルは配列ファイルに限られているが、複数
の分散形式をファイル内に記録したレイアウト自己記述
ファイルを作成することで、配列ファイルに格納される
配列データだけでなく、任意のデータについて並列出力
処理を行う。
【0052】すなわち、出力データを複数の外部記憶装
置に分散して格納するか否かを決定し、前記出力データ
を分散して格納する場合に前記出力データが分散されて
いることを示す情報と分散単位を示す情報と前記分散単
位の長さを示す情報と分散形状から成る分散情報を作成
し、前記出力データを分散しないで格納する場合に前記
出力データが分散されていないことを示す情報と出力デ
ータの長さを示す情報から成る分散情報を作成し、前記
分散情報をメモリに記憶された出力データと共に前記外
部記憶装置に並列出力または逐次出力してレイアウト自
己記述ファイルを作成する。
【0053】前記レイアウト自己記述ファイルには、出
力データが分散されているかどうかを示す情報を格納す
るので、並列入出力用ファイル及び逐次入出力用ファイ
ル兼用のファイルとして使用することが可能である。
【0054】また、前記レイアウト自己記述ファイルに
出力データを分散して格納する場合には、分散単位、分
散単位の長さ及び分散形状と共に格納するので、配列デ
ータ以外のデータであっても、分散して格納することが
可能である。
【0055】以上の様に、出力処理の対象であるファイ
ルの分散情報を当該ファイル内に書き込むので、配列デ
ータ以外のデータについても並列出力処理を実行するこ
とが可能である。
【0056】(5)前記レイアウト自己記述ファイルを
使用して入力処理を行うことにより、任意のデータにつ
いて並列入力処理を行う。
【0057】入力データが複数の外部記憶装置に分散し
て格納されているか否かを表す情報を前記外部記憶装置
の前記レイアウト自己記述ファイルから入力し、前記入
力データが分散されている場合には分散単位を示す情報
と前記分散単位の長さを示す情報と共に入力データを前
記複数の外部記憶装置のレイアウト自己記述ファイルか
ら並列入力してメモリに記憶し、前記入力データが分散
されていない場合には前記入力データの長さを示す情報
と共に前記入力データを当該外部記憶装置のレイアウト
自己記述ファイルから逐次入力してメモリに記憶する。
【0058】以上の様に、入力処理の対象であるファイ
ルの分散情報を当該ファイル内から読み込むので、配列
データ以外のデータについても並列入力処理を実行する
ことが可能である。
【0059】
【実施例】以下、本発明について、一実施例とともに図
面を参照して詳細に説明する。
【0060】なお、実施例を説明する為の全図におい
て、同一機能を有するものは同一符号を付け、その繰り
返しの説明は省略する。
【0061】(並列処理プログラム生成処理)図1は、
本発明の並列処理プログラム生成方法を実施する並列化
コンパイラの概略構成を示す図である。図1において、
50は並列化前プログラム、51は並列化後プログラ
ム、54は中間語、6は並列化コンパイラ、60は構文
解析部、61はI/O文並列化部、62は非I/O文並
列化部、63はコード生成部、610はファイル種別判
定条件節挿入部、611は分散記述子アクセス文挿入
部、612は並列I/O文挿入部、613は再分散文挿
入部、614は逐次I/O文挿入部、615はデータ転
送文挿入部である。
【0062】本実施例の並列処理プログラム生成装置
は、並列化前プログラム50、中間語及び並列化後プロ
グラム51を格納する外部記憶装置と、並列化前プログ
ラム50と並列化後プログラム51を一時的に記憶する
メモリと、並列化コンパイラ6を実行する制御装置を備
えている。
【0063】図1に示す様に、本実施例の並列処理プロ
グラム生成方法を実施する並列化コンパイラ6は、並列
化前プログラム50を読み込んで入出力文等を検索し中
間語54を生成する構文解析部60と、並列化前プログ
ラム50の入出力文を並列化するI/O文並列化部61
と、並列化前プログラム50の入出力文以外の文を並列
化する非I/O文並列化部62と、中間語54を読み込
んで並列化後プログラム51を生成するコード生成部6
3を備えている。
【0064】並列化コンパイラ6のI/O文並列化部6
1は、並列化前プログラム50の入出力文のファイルが
配列ファイルであるかまたは標準ファイルであるかかを
判定する条件節を挿入するファイル種別判定条件節挿入
部610と、分散記述子を読み込む文または書き出す文
を挿入する分散記述子アクセス文挿入部611と、配列
ファイルを読み込む文または書き出す文を挿入する並列
I/O文挿入部612と、データの再分散を行うデータ
再分散文を挿入する再分散文挿入部613と、標準ファ
イルを読み込む文または書き出す文を挿入する逐次I/
O文挿入部614と、標準ファイルのデータを転送する
文を挿入するデータ転送文挿入部615を備えている。
【0065】並列化コンパイラ6の非I/O文並列化部
62は、プログラム内の入出力文以外の部分を並列化
し、コード生成部63は中間語54を読み込んで並列化
後プログラム51を生成するが、これらの処理の内容は
従来の並列化コンパイラの場合と特に変わらないので、
ここでは詳細は述べない。
【0066】図2は、本実施例の並列処理プログラム生
成方法において、入力文の並列化処理手順を示すフロー
チャートである。
【0067】図3は、本実施例の並列処理プログラム生
成方法において、出力文の並列化処理手順を示すフロー
チャートである。
【0068】図4は、本発明の並列処理プログラム実行
装置の一実施例である並列計算機の概略構成を示す図で
ある。図4において、2は並列計算機、21は複数のノ
ードを接続するノード間ネットワーク、25は外部ネッ
トワーク、26は外部ネットワーク25に接続されたワ
ークステーション、27はワークステーション26に接
続されたディスク装置、201〜20nはノード間ネッ
トワーク21によって接続された複数のノード、221
〜22nはノード201〜20nのCPU、231〜2
3nはノード201〜20nのローカルメモリ、241
〜24nはノード201〜20nに接続されたディスク
装置、30は配列ファイル、31は標準ファイルであ
る。
【0069】図4に示す様に、本実施例の並列処理プロ
グラム実行装置である並列計算機2は、複数のノード2
01〜20nがノード間ネットワーク21によって接続
されており、ノード201〜20nには、CPU221
〜22n、ローカルメモリ231〜23nが含まれ、ま
た、ディスク装置241〜24nが接続されている。ノ
ード201〜20nは、当該ノードに接続されているデ
ィスク装置のみに直接アクセスできる。
【0070】本実施例の並列処理プログラム実行装置で
ある並列計算機2では、全ノードにディスク装置が付い
ていると仮定しているが、一部のノードだけにディスク
装置が付いている構成であっても、本発明は適用可能で
ある。
【0071】並列計算機2のノード201〜20nに
は、0番から始まる番号が左から順に付けられているも
のとする。左端のノード201、すなわち0番ノード
は、外部ネットワーク25を通してワークステーション
26等の他の計算機と接続されている。ワークステーシ
ョン26には、ディスク装置27が接続されており、0
番ノードは外部ネットワーク25とワークステーション
26を経由してディスク装置27にアクセスできる。
【0072】並列計算機2のディスク装置241〜24
nは並列入出力機能を持ち、ワークステーション26の
ディスク装置27は逐次入出力専用である。ディスク装
置241〜24nには配列ファイル30が格納され、デ
ィスク装置27には標準ファイル31が格納されるもの
とする。
【0073】図5は、本実施例の並列処理プログラム生
成方法の配列ファイルの概略構成を示す図である。図5
において、301は配列ファイル30の要素数、302
は配列ファイル30のデータの分散形状、303は配列
ファイル30のローカル配列要素である。
【0074】図5に示す様に、本実施例の並列処理プロ
グラム生成方法の配列ファイル30は、配列データを複
数のディスク装置241〜24nに分散して格納してお
り、並列計算機2のノード201〜20nは、ディスク
装置241〜24nに分散された複数の配列ファイル3
0に並列にアクセスすることによって、高速な入出力処
理を行う。
【0075】本実施例では、簡単の為に、配列は1次元
とし、分散形状302はブロック分散か巡回分散のいず
れかとする。配列ファイル30は複数の配列レコードの
列であり、その配列レコードは要素数301、分散形状
302、ローカル配列要素303を含んでいる。
【0076】配列ファイル30の要素数301は当該配
列レコードに含まれる全配列要素数を示す整数である。
配列ファイル30のデータの分散形状302は、当該配
列レコード内での配列要素の分散形状を示すコードであ
る。ブロック分散を表す分散形状302のコードをDIST
_BLOCK、巡回分散を表す分散形状302のコードをDIST
_CYCLICで表すことにする。
【0077】要素数301と分散形状302を合わせ
て、「分散記述子」と呼ぶ。各々の配列レコードの分散
記述子の内容は、全ノードで等しい。ローカル配列要素
303は、そのノードに割り当てられた部分配列の要素
である。当然ながら、ローカル配列要素303の内容は
ノードによって異なる。
【0078】図6は、本実施例の並列処理プログラム生
成方法の入力文の並列化処理の変換前プログラムの一例
を示す図である。図6において、500は入力文を含む
変換前プログラムである。
【0079】図6に示す様に、本実施例の並列処理プロ
グラム生成方法の入力文の並列化処理の変換前プログラ
ム500は、Fortran言語で記述されており、1行目は
要素数1000の実数型配列aの宣言文である。
【0080】変換前プログラム500の2行目は配列a
をブロック分散するという指示文であり、例えば、配列
aを、並列計算機2のノード201〜20nのローカル
メモリ231〜23nに分散することを示している。前
記指示文は、HPF(High Performance Fortran)というFor
tran拡張言語の仕様に従っている。
【0081】変換前プログラム500の3行目は、装置
番号15番に割り当てられたファイルから配列aの10
00個の要素の値を読み込む入力文である。
【0082】図7は、本実施例の並列処理プログラム生
成方法の入力文の並列化処理の変換後プログラムの一例
を示す図である。図7において、510は入力文を含む
変換後プログラムである。
【0083】図7に示す様に、本実施例の並列処理プロ
グラム生成方法では変換後プログラム510をソースプ
ログラムの形式で示すが、オブジェクトプログラム形式
に変換する場合でも本発明は同様に適用できる。
【0084】変換後プログラム510の1行目は、分散
後の配列aの宣言である。ここでは、並列計算機2のノ
ード数を4と仮定する。従って、ノード当りの要素数は
1000/4=250となる。なお、以降では特に断ら
ない限り、並列計算機2のノード数は4とする。
【0085】変換後プログラム510の2行目は、入出
力用バッファの配列iobufの宣言文である。後に述べる
様に、入力データを分散配列aに直接読み込むのではな
く、一時的にこの入出力用バッファに読み込んでからノ
ード間で転送して配列aに代入する場合がある。
【0086】変換後プログラム510の3、4行目は、
定数の宣言文である。DIST_BLOCKとDIST_CYCLICは、前
にも述べた様に、配列の分散形状を表す定数である。FT
YPE_PARとFTYPE_SEQは入出力処理の対象であるファイル
の種別を表す定数であり、それぞれ、配列ファイル30
と標準ファイル31を表す。
【0087】変換後プログラム510の5行目から8行
目迄は、分散記述子の構造を表すdistinfoというデータ
型の定義文である。distinfoは、要素数を表すorg_siz
e、分散形状を表すdistの2個のフィールドから構成さ
れる。
【0088】変換後プログラム510の9、10行目
は、distinfo型の分散記述子変数a_dist、file_distの
宣言文である。これらの変数は、それぞれ、ローカルメ
モリ231〜23n及びディスク装置241〜24nの
データの分散形状を表す。
【0089】変換後プログラム510の21、22行目
は、分散記述子変数a_distにローカルメモリ231〜2
3nのデータの分散形状を表す値を設定する文である。
ローカルメモリ231〜23nのデータの分散形状はブ
ロック分散と指示されているので、定数にDIST_BLOCKを
設定している。
【0090】以下に、本実施例の並列処理プログラム生
成方法において、入力文を並列化する処理手順を図2を
参照して説明する。これは、図6に示す様な変換前プロ
グラム500を、図7に示す様な変換後プログラム51
0に変換する処理手順である。
【0091】図2に示す様に、ステップ100の処理で
は、入出力用バッファiobufの宣言文をプログラムに挿
入する。入出力用バッファのサイズは、入出力処理の対
象であるファイルが標準ファイル31だった場合でも充
分な様に、入力先の配列aの元のサイズと等しくする。
このステップ100の処理により、図7の2行目の宣言
文が挿入される。
【0092】ステップ101の処理では、変換後プログ
ラム510で必要になるDIST_BLOCK等の定数
の宣言文を挿入する。このステップ101の処理によ
り、図7の3、4行目の宣言文が挿入される。
【0093】ステップ102の処理では、分散記述子の
変数宣言文を挿入する。このステップ102の処理によ
り、図7の5行目から10行目の宣言文が挿入される。
【0094】ステップ103の処理では、ローカルメモ
リ231〜23nの配列用の分散記述子に値を設定する
代入文を挿入する。このステップ103の処理により、
図7の21、22行目の代入文が挿入される。
【0095】ステップ104の処理では、入出力処理の
対象であるファイルが配列ファイル30であるかまたは
標準ファイル31であるかを判定する条件節を挿入す
る。なお、この条件節を以後の処理で挿入される他の条
件節と区別する為に「条件節1」と呼ぶ。この条件節1
は、図7では、31行目、39行目、42行目のif−
then−else構造に該当する。
【0096】ステップ105の処理では、配列ファイル
30から分散記述子を読み込む文を、条件節1のthen部
に挿入する。この文は、図7では、32行目に該当す
る。
【0097】ステップ106の処理では、ディスク装置
241〜24nとローカルメモリ231〜23nとで分
散形状が一致するかどうかを判定する条件節を、条件節
1のthen部に挿入する。この新たな条件節を「条件節
2」と呼ぶ。この条件節2は、図7では、33行目、3
5行目、38行目のif-then-else構造に該当する。
【0098】ステップ107の処理では、配列ファイル
30内のローカル配列データを配列aに読み込む文を、
条件節2のthen部に挿入する。この文は、図7では、3
4行目に該当する。
【0099】ステップ108の処理では、配列ファイル
30内のローカル配列データを入出力用バッファiobuf
に読み込む文を、条件節2のelse部に挿入する。この文
は、図7では、36行目に該当する。
【0100】ステップ109の処理では、ローカルメモ
リ231〜23nのデータの分散形状に合わせてデータ
を再分散する文を、条件節2のelse部に挿入する。この
文は、図7では、37行目に該当する。
【0101】ステップ110の処理では、標準ファイル
31内のデータを0番ノードが入出力用バッファiobuf
に読み込む文を、条件節1のelse部に挿入する。この文
は、図7では、40行目に該当する。
【0102】ステップ111の処理では、0番ノードか
ら全ノードへ、配列aの分散形状に合わせてデータを転
送する文を条件節1のelse部に挿入する。この文は、図
7では、41行目に該当する。
【0103】図8は、本実施例の並列処理プログラム生
成方法の出力文の並列化処理の変換前プログラムの一例
を示す図である。図8において、501は出力文を含む
変換前プログラムである。
【0104】図8に示す様に、本実施例の並列処理プロ
グラム生成方法の出力文の並列化処理の変換前プログラ
ム501は、Fortran言語で記述されており、1行目は
要素数1000の実数型配列aの宣言文である。変換前
プログラム501の2行目は配列aをブロック分散する
という指示文である。この指示文は、HPFの仕様に従っ
ている。変換前プログラム501の3行目は、装置番号
16番に割り当てられたファイルに配列aの1000個
の要素の値を書き出す出力文である。
【0105】図9は、本実施例の並列処理プログラム生
成方法の出力文の並列化処理の変換後プログラムの一例
を示す図である。図9において、511は出力文を含む
変換後プログラムである。
【0106】図9に示す様に、本実施例の並列処理プロ
グラム生成方法では変換後プログラム511をソースプ
ログラムの形式で示すが、オブジェクトプログラム形式
に変換する場合でも本発明は同様に適用できる。
【0107】変換後プログラム511の1行目は、分散
後の配列aの宣言である。変換後プログラム511の2
行目は、入出力用バッファの配列iobufの宣言文であ
る。
【0108】変換後プログラム511の3、4行目は、
定数の宣言文である。DIST_BLOCKとDIST_CYCLICは、配
列の分散形状を表す定数である。FTYPE_PARとFTYPE_SEQ
は入出力処理の対象であるファイルの種別を表す定数で
あり、それぞれ、配列ファイル30と標準ファイル31
を表す。
【0109】変換後プログラム511の5行目から8行
目迄は、分散記述子の構造を表すdistinfoというデータ
型の定義文である。distinfoは、要素数を表すorg_siz
e、分散形状を表すdistの2個のフィールドから構成さ
れる。
【0110】変換後プログラム511の9行目は、dist
info型の分散記述子変数a_distの宣言文である。この変
数は、ローカルメモリ231〜23nのデータの分散形
状を表す。
【0111】変換後プログラム511の21、22行目
は、分散記述子変数a_distにローカルメモリ231〜2
3nのデータの分散形状を表す値を設定する文である。
ローカルメモリ231〜23nのデータの分散形状はブ
ロック分散と指示されているので、定数DIST_BLOCKを設
定している。
【0112】変換後プログラム511では、ディスク装
置241〜24nのデータの分散形状を表す分散記述子
変数file_distは必要では無い。なぜなら、入力のとき
と違って、出力のときは、ローカルメモリ231〜23
nのデータの分散形状のままディスク装置241〜24
nに書き出せば良いからである。31行目以降が、実際
の出力処理である。
【0113】以下に、本実施例の並列処理プログラム生
成方法において、出力文を並列化する処理手順について
図3を参照して説明する。これは、図8に示す様な変換
前プログラム501を、図9に示す様な変換後プログラ
ム511に変換する処理手順である。
【0114】図3に示す様に、ステップ120からステ
ップ123迄の処理は、入力文を並列化する処理手順に
関連して説明した図2のステップ100からステップ1
03迄の処理と同様なので、説明は省略する。
【0115】ステップ124の処理では、入出力処理の
対象であるファイルが配列ファイル30か標準ファイル
31かを判定する条件節を挿入する。この条件節は、図
9では、31行目、34行目、37行目のif-then-else
構造に該当する。
【0116】ステップ125の処理では、出力する配列
の分散記述子を配列レコードに書き出す文を、条件節の
then部に挿入する。この文は、図9では、32行目に該
当する。
【0117】ステップ126の処理では、配列データを
配列レコードに書き出す文を、条件節のthen部に挿入す
る。この文は、図9では、33行目に該当する。
【0118】ステップ127の処理では、0番ノードの
入出力用バッファに配列の全要素を集める文を、条件節
のelse部に挿入する。この文は、図9では、35行目に
該当する。
【0119】ステップ128の処理では、0番ノードが
入出力用バッファのデータを標準ファイル31に書き出
す文を、条件節のelse部に挿入する。この文は、図9で
は、36行目に該当する。
【0120】以上の様に、本実施例の並列処理プログラ
ム生成方法及びその実施装置によれば、逐次入出力用の
入出力文を検索した後に前記入出力文を並列入出力用の
入出力文に変換するので、移植性を低下させることな
く、ユーザの修正無しに逐次入出力用の入出力文を並列
化して並列処理プログラムの生成を行うことが可能であ
る。
【0121】(ライブラリ手続き呼び出しによる並列処
理プログラム生成処理)以下に、本実施例の並列処理プ
ログラム生成方法において、任意ファイル用入出力ライ
ブラリを利用する並列化方法を述べる。これは、図7や
図9に示した様な変換後プログラム510及び511に
現れる複雑な処理をまとめた、任意ファイル用入出力ラ
イブラリ手続きを用意しておき、逐次処理プログラムの
入出力文を任意ファイル用入出力ライブラリ手続きの呼
び出しに置き換えるというものである。
【0122】本実施例の並列処理プログラム生成装置
は、並列化前プログラム50、中間語及び並列化後プロ
グラム51を格納する外部記憶装置と、並列化前プログ
ラム50と並列化後プログラム51を記憶するメモリ
と、並列化コンパイラ6を実行する制御装置を備えてお
り、また、前記外部記憶装置には、前記任意ファイル用
入出力ライブラリが格納されている。
【0123】図10は、本実施例の並列処理プログラム
生成方法におけるライブラリの呼び出しによる入力文の
並列化方法のフローチャートである。
【0124】図10に示す様に、ステップ141からス
テップ143迄の処理は、図2のステップ100からス
テップ103迄の処理とほぼ同様である。但し、入出力
用バッファの宣言は行わない。なぜなら、本実施例の場
合は、入出力用バッファは任意ファイル用入出力ライブ
ラリ手続きの内部で持っていれば良く、呼び出し側のプ
ログラム内で宣言しておく必要は無いからである。
【0125】ステップ144の処理では、任意ファイル
用入出力ライブラリ手続きの呼び出しを変換前プログラ
ムに挿入する。この任意ファイル用入出力ライブラリ手
続きは、入出力処理の対象であるファイルの種別や配列
の分散形状を判定し、それぞれの場合に応じた入出力処
理を行う。
【0126】図11は、本実施例の並列処理プログラム
生成方法のライブラリの呼び出しによる変換後プログラ
ムの一例を示す図である。図11において、513は任
意ファイル用入出力ライブラリ手続きの呼び出しを含む
変換後プログラムである。
【0127】図11に示す様に、本実施例の並列処理プ
ログラム生成方法では、変換後プログラム513の30
行目に、任意ファイル用入出力ライブラリ手続きの呼び
出しの一例であるread_any_file()の呼び出しが挿入さ
れている。
【0128】変換後プログラム513の任意ファイル用
入出力ライブラリ手続きの呼び出しでは、配列aの分散
形状を任意ファイル用入出力ライブラリ手続きに知らせ
る為に、引数として分散記述子変数a_distを渡してい
る。任意ファイル用入出力ライブラリ手続きの呼び出し
終了後には、配列aにはデータが入力されている。
【0129】同様にして、出力処理を一括して行う任意
ファイル用入出力ライブラリ手続きの呼び出しを変換前
プログラムに挿入することにより、出力文も簡単に変換
することができる。詳細は、入力文の場合とほとんど同
じなので、ここでは説明を省略する。
【0130】以上の様に、本実施例の並列処理プログラ
ム生成方法及びその実施装置によれば、逐次入出力用の
入出力文を並列入出力処理用のライブラリ手続きの呼び
出しに変換するので、並列処理プログラムの生成を高速
化に行うことが可能である。
【0131】また、並列処理プログラムのソースプログ
ラム中の並列入出力処理用コード部分が簡単な呼び出し
文に変換されるので、前記ソースプログラムの記憶領域
を節約することが可能である。
【0132】また、前記ライブラリを実行時に動的にリ
ンクすることにすれば、前記ソースプログラムから作成
した実行形式の並列処理プログラムの大きさを抑えるこ
とが可能であり、記憶領域が節約されると共に、実行時
の当該並列処理プログラムのローディングを高速化する
ことが可能である。
【0133】(並列処理プログラム実行処理)以下に、
本実施例の並列処理プログラム実行方法における入力処
理の処理手順について説明する。
【0134】図4に示す様に、本実施例の並列処理プロ
グラム実行装置である並列計算機2は、前記入出力処理
のデータを記憶する複数のローカルメモリ231〜23
nと、前記入出力処理の行われる配列ファイル30と標
準ファイル31を格納する複数のディスク装置241〜
24n及びディスク装置27と、前記入出力処理の対象
であるファイルが配列ファイル30であるかまたは標準
ファイル31であるかに応じて、ローカルメモリ231
〜23nとディスク装置241〜24nまたはディスク
装置27との間で並列入出力処理または逐次入出力処理
を行う複数のCPU221〜22nを備えている。
【0135】図12は、本実施例の並列処理プログラム
実行方法の入力処理手順を示すフローチャートである。
【0136】図12に示す様に、本実施例の並列処理プ
ログラム実行方法では、ステップ400の処理で、入力
処理の対象であるファイルの種別を調べる。このステッ
プ400の処理は、図7では31行目の処理に当たり、
装置番号15番に割り当てられたファイルの種別をfile
type(15)という関数で、オペレーティングシステムに問
い合わせている。入力処理の対象であるファイルの種別
が配列ファイル30ならばステップ401の処理に進
み、標準ファイル31ならばステップ406の処理に進
む。
【0137】ステップ401の処理では、ディスク装置
241〜24nの配列ファイル30の配列レコードに含
まれる分散記述子を、分散記述子変数file_distに読み
込む。分散記述子は全ディスク装置の配列ファイル30
に同一内容のものが格納されているので、全ノードで並
列に読み込むことができる。このステップ401の処理
は、図7では、32行目のget_file_dist()というサブ
ルーチン呼び出しに該当する。
【0138】ステップ402の処理では、分散記述子変
数file_distを調べてディスク装置241〜24nでの
配列ファイル30のデータの分散形状を求め、前記分散
形状がローカルメモリ231〜23nのデータの分散形
状(本実施例ではブロック分散)と一致するかどうかを
判定する。もし一致すればステップ403の処理に進
み、一致しなければステップ404の処理に進む。この
ステップ402の処理は、図7では、33行目の処理に
当たる。
【0139】ステップ403の処理では、ディスク装置
241〜24nの配列ファイル30の配列レコード内の
ローカル配列を、ノード201〜20nのローカルメモ
リ231〜23nの配列aに並列に読み込む。配列aの分
散形状と配列レコード内のローカル配列データの分散形
状は一致しているので、これで処理を終了する。このス
テップ403の処理は、図7では、34行目のread_arr
ay_file()というサブルーチン呼び出しに当たる。
【0140】また、ステップ404の処理に進んだ場合
は、ディスク装置241〜24nの配列ファイル30の
配列レコード内のローカル配列を、ノード201〜20
nのローカルメモリ231〜23nの入出力用バッファ
iobufに並列に読み込む。この場合、各ノードでは、iob
ufの全要素ではなく初めの250要素のみに値が読み込
まれる。このステップ404の処理は、図7では、36
行目の処理に当たる。この様にして読み込まれたローカ
ル配列データの分散形状は、配列aの分散形状とは異な
っている。
【0141】そこで、ステップ405の処理では、配列
aの分散形状に合わせてデータ再分散を行いながら、入
出力用バッファiobuf内の値を配列aに代入する。これに
より配列aには正しい分散形状の値が代入されるので、
これで処理を終了する。このステップ405の処理は、
図7では、37行目のredist_asgn()というサブルーチ
ン呼び出しに当たる。前記サブルーチン呼び出しでは、
その引数として分散記述子変数a_dist、file_distを渡
している。前記サブルーチン内では、a_distとfile_dis
tを参照して再分散を行う。
【0142】一方、入力処理の対象であるファイルが標
準ファイル31で、ステップ406の処理に進んだ場合
は、0番ノードは、標準ファイル31から入出力用バッ
ファiobufに全配列要素を逐次的に読み込む。このステ
ップ406の処理は、図7では、40行目の処理に当た
る。ここで、_mypidは、当該ノードのノード番号を表す
変数である。そして、ステップ407の処理では、配列
aの分散形状に合わせて、0番ノードから各ノードへの
配列の分散を行う。
【0143】すなわち、0番ノードは各ノードに割り当
てられるべき配列要素の値を転送する。各ノードでは、
受け取った配列要素を当該ノードの持つ配列aに格納す
る。ステップ407の処理は、図7では、41行目のdi
st_asgn()というサブルーチン呼び出しに当たる。前記
サブルーチン呼び出しでは、各ノードへの転送を行う為
に、前記サブルーチンの引数として、分散記述子変数a_
distを渡している。前記サブルーチン内では、a_distを
参照して各ノードへの転送を行う。以上で、ファイルか
らの入力処理の説明を終わる。
【0144】以下に、本実施例の並列処理プログラム実
行方法における出力処理の処理手順について説明する。
【0145】図13は、本実施例の並列処理プログラム
実行方法の出力処理手順を示すフローチャートである。
【0146】図13に示す様に、本実施例の並列処理プ
ログラムの実行方法では、ステップ420で出力処理の
対象であるファイルの種別を調べる。このステップ42
0の処理は、図9では31行目の処理に当たる。出力処
理の対象であるファイルの種別が配列ファイル30なら
ばステップ421の処理に進み、標準ファイル31なら
ばステップ423の処理に進む。
【0147】ステップ421の処理では、配列aに対す
る分散記述子変数a_distの内容を、配列レコードの分散
記述子として配列ファイル30に書き出す。分散記述子
変数a_distは全ノードで同一の内容を持っているので、
ノード201〜20nのディスク装置241〜24nに
並列に書き出すことができる。このステップ421の処
理は、図9では、32行目のput_file_dist()というサ
ブルーチン呼び出しに該当する。
【0148】ステップ422の処理では、全ノードで並
列に、各ノードに割り当てられている配列要素を、当該
ノードに接続されたディスク装置241〜24nの配列
ファイル30の配列レコードにそのまま書き出す。前記
の書き出しにより、配列レコードが1つ作られ、出力処
理は終了する。ステップ422の処理は、図9では、3
3行目のwrite_array_file()というサブルーチン呼び出
しに当たる。
【0149】一方、出力処理の対象であるファイルが標
準ファイル31で、ステップ423の処理に進んだ場合
は、各ノードが、当該ノードに割り当てられている配列
要素の値を、0番ノードに転送する。0番ノードでは、
受け取った配列要素の値を入出力用バッファiobufに格
納する。これによって、0番ノードの入出力用バッファ
には全配列要素が集まる。このステップ423の処理
は、図9では、35行目のgather_asgn()というサブル
ーチン呼び出しに当たる。前記サブルーチンの引数とし
て分散記述子変数a_distを渡している。前記サブルーチ
ン内では、a_distを参照して、0番ノードが各ノードか
ら受け取った値をiobufの適切な位置に格納する。
【0150】ステップ424の処理では、0番ノード
が、入出力用バッファiobufに集めた全配列要素の値
を、逐次的に標準ファイル31に書き出す。このステッ
プ424の処理は、図9では、36行目の処理に当た
る。以上で、標準ファイル31への出力処理が完了す
る。
【0151】以上の様に、本実施例の並列処理プログラ
ム実行方法及びその実施装置によれば、入出力処理の対
象であるファイルが並列入出力用ファイルであるかまた
は逐次入出力用ファイルであるかを判定するので、並列
処理プログラムの実行時に入出力処理の対象であるファ
イルを任意に変更することが可能である。
【0152】(レイアウト自己記述ファイルへの出力処
理)以下に、本実施例の並列処理プログラム実行方法に
おいて、レイアウト自己記述ファイルに出力処理を行う
処理手順について説明する。
【0153】図4に示す様に、本実施例の並列処理プロ
グラム実行装置は、出力データを記憶する複数のローカ
ルメモリ231〜23nと、並列出力処理の行われるレ
イアウト自己記述ファイルを格納する複数のディスク装
置241〜24nと、前記出力データを複数のディスク
装置241〜24nに分散して格納するか否かを決定
し、前記決定された分散情報をローカルメモリ231〜
23nに記憶された出力データと共にディスク装置24
1〜24nに並列出力または逐次出力する複数のCPU
221〜22nを備えている。
【0154】まず、準備として、Fortranで規定されて
いる「書式付き入出力」について説明しておく。書式付
き入出力とは、ファイル上のデータが人間が読むことの
できる文字列となる様に、特定の書式に従って行われる
入出力である。
【0155】これに対して、前記の実施例で述べた入出
力は、ファイル上のデータが計算機内部での表現形式に
なっており、書式なし入出力と呼ばれる。書式付き入出
力を行うときには、入出力文に「書式仕様」と呼ばれる
文字列を指定する。書式仕様とは、計算機内部の値とフ
ァイル上の文字列との間の変換規則を指示するものであ
る。
【0156】例えば、次の書式付き出力文において、'
(F8.3)'という文字列が書式仕様である。
【0157】write(16, '(F8.3)' ) a(1) この書式仕様は、配列要素a(1)の値を、8桁の欄に、小
数点以下3桁の精度で出力することを指定する。もし、
配列要素a(1)の値が1.0であれば、次の文字列が出力さ
れる。ここで、bは空白文字を表す。
【0158】 bbb1.000 書式付き入出力では、改行で区切られた文字列の各々を
「レコード」と呼ぶ。例えば、ファイル上に次の文字列
データがあったとすると、これは3個のレコードであ
り、各レコードは8桁の文字列からなることが判る。
【0159】 bbb1.000 bbb2.000 bbb3.000 また、前記の入出力文による入出力処理では、1個の入
出力文で複数のレコードが処理されることがある。例え
ば、出力文で、書式仕様が要求する変数の数よりも出力
処理の対象の変数の数が多いときは、書式仕様が要求す
る数の変数ごとに分けて別々のレコードとすることが規
定されている。
【0160】例として、次の出力文は、1000個の要
素から成る配列aに対して、配列要素a(1)から配列要素a
(1000)迄の1000個の配列要素を全て出力することを
表す。
【0161】write(16, '(F8.3)' ) a この出力文において、書式仕様'(F8.3)'は、1個の変数
のみを要求するので、この出力文を実行すると、次の様
な1000個のレコードが出力される。
【0162】 bbb1.000 bbb2.000 : 1000.0 ここで、配列aの各要素には、1.0から1000.0迄の値が格
納されているものとする。
【0163】また、別の例として、次の様な出力文にお
いて、書式仕様'(2F8.3)'は、2個の変数を要求する。
(Fの前に付いている数字の2は、F8.3を2回繰り返す
ことを表す) write(16, '(2F8.3)' ) a 従って、この出力文を実行すると、次の様な500個の
レコードが出力される。
【0164】 bbb1.000bbb2.000 bbb3.000bbb4.000 : b999.0001000.000 以上で、書式付き入出力とレコードの簡単な説明を終わ
る。
【0165】ここで説明した様に、書式付き入出力で
は、1個の入出力文で複数のレコードを扱う場合があ
る。この様な入出力を並列実行する為には、レコードを
単位としてデータが分散できる様になっていることが必
要である。この目的の為、本実施例では、配列ファイル
の概念を拡張した、「レイアウト自己記述ファイル」を
導入する。
【0166】図14は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルの概略構成を示
す図である。図14において、32はヘッダ、35はデ
ータである。
【0167】図14に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルは、デ
ータを複数のディスク装置241〜24nに分散して格
納している。レイアウト自己記述ファイルは「スーパー
レコード」の列であり、スーパーレコードはヘッダ32
とデータ35を含んでいる。
【0168】前記レイアウト自己記述ファイルのスーパ
ーレコードには、3つの形式がある。
【0169】図15は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルの「レコード分
散」形式のスーパーレコードの概略構成を示す図であ
る。図15において、320はレコード分散形式の種別
コード、321はレコード長、322はレコード数、3
23は分散形状、351はデータである。
【0170】図15に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルのレコ
ード分散形式のスーパーレコードは、データをレコード
単位で分散する場合に用いられる。
【0171】レコード分散形式のスーパーレコードのヘ
ッダ32は、種別コード320、レコード長321、レ
コード数322、分散形状323の各フィールドを含ん
でおり、種別コード320には、そのスーパーレコード
がレコード分散形式であることを示すコード(REC_DIST
と記す)が格納される。
【0172】レコード分散形式のスーパーレコードのレ
コード長321には、1レコードの長さ(バイト数)が
格納される。なお、レコード分散形式のスーパーレコー
ドに含まれる全てのレコードの長さは等しくなければな
らないものとする。
【0173】レコード分散形式のスーパーレコードのレ
コード数322には、そのスーパーレコードに含まれ
る、全ノードを通じたレコード数が格納される。分散形
状323には、分散形状を表すコードDIST_BLOCKまたは
DIST_CYCLICが格納される。また、データ351には、
そのノードに割り当てられたレコードの内容が格納され
る。
【0174】図16は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルの「要素分散」
形式のスーパーレコードの概略構成を示す図である。図
16において、330は要素分散形式の種別コード、3
31は要素長、332は要素数、333は分散形状、3
52はデータである。
【0175】図16に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルの要素
分散形式のスーパーレコードは、1レコード内に含まれ
るデータを要素単位で分散する場合に用いられる。
【0176】要素分散形式のスーパーレコードのヘッダ
32は、種別コード330、要素長331、要素数33
2、分散形状333の各フィールドを含んでおり、種別
コード330には、そのスーパーレコードが要素分散形
式であることを示すコード(ELM_DISTと記す)が格納さ
れる。
【0177】要素分散形式のスーパーレコードの要素長
331には、1要素の長さ(バイト数)が格納される。
なお、要素分散形式のスーパーレコードに含まれる全て
の要素の長さは等しくなければならないものとする。
【0178】要素分散形式のスーパーレコードの要素数
332には、そのスーパーレコードに含まれる、全ノー
ドを通じた要素数が格納される。分散形状333には、
分散形状を表すコードDIST_BLOCKまたはDIST_CYCLICが
格納される。また、データ352には、そのノードに割
り当てられた要素の内容が格納される。
【0179】図17は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルの「非分散」形
式のスーパーレコードの概略構成を示す図である。図1
7において、340は非分散形式の種別コード、341
はバイト数、353はデータである。
【0180】図17に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルの非分
散形式のスーパーレコードは、データを分散せずに、全
て0番ノードで保持する場合に用いられる。
【0181】非分散形式のスーパーレコードのヘッダ3
2は、種別コード340、バイト数341の各フィール
ドを含んでおり、非分散形式のスーパーレコードの種別
コード340には、そのスーパーレコードが非分散形式
であることを示すコード(NO_DISTと記す)が格納され
る。
【0182】非分散形式のスーパーレコードのバイト数
341には、そのスーパーレコードに含まれる全データ
の合計バイト数が格納される。また、データ353に
は、0番ノードの場合はスーパーレコードに含まれる全
データが格納され、他のノードの場合は何も格納されな
い。
【0183】次に、いくつかの具体的な入出力文を例と
して、レイアウト自己記述ファイルの使い方を説明す
る。まず、基本的な例として、次の出力文について述べ
る。
【0184】write(16, '(F8.3)' ) a 配列aの分散形状は、ブロック分散とし、各配列要素に
は1.0から1000.0の値が格納されているものとする。
【0185】前記の出力文に対しては、1000個の同
じ長さのレコードが生成されるので、レコード分散形式
のスーパーレコードを用いるのが適切である。さらに、
配列aがブロック分散されているので、レコードの分散
形状もブロック分散とすれば、再分散は必要無い。
【0186】従って、この様な場合は、図18に示す様
なスーパーレコードを書き出す。
【0187】図18は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルのレコード分散
形式のスーパーレコードの第1の例を示す図である。
【0188】図18に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルのレコ
ード分散形式のスーパーレコードの第1の例では、種別
コードはREC_DISTであり、レコード長は9である。ここ
で、レコードの最後の改行コードもレコード長に数えて
いる。また、前記レイアウト自己記述ファイルのレコー
ド数は1000、分散形状はブロック分散である。前記
の出力文を実行すると、各ノードのデータ部には、図1
8に示す様な内容が出力される。図18ではレコードの
区切りを改行マークで示している。
【0189】別の例として、次の出力文について述べ
る。
【0190】write(16, '(2F8.3)' ) a この様な出力文に対しては、500個の同じ長さのレコ
ードが生成されるので、やはりレコード分散形式のスー
パーレコードを用いるのが適切である。レコードの分散
形状はやはりブロック分散とするのが良い。従って、こ
の様な場合は、図19に示す様なスーパーレコードを書
き出す。
【0191】図19は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルのレコード分散
形式のスーパーレコードの第2の例を示す図である。
【0192】図19に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルのレコ
ード分散形式のスーパーレコードの第2の例では、1レ
コードに2個の配列要素が含まれるので、レコード長は
改行コードも含めて17である。前記レイアウト自己記
述ファイルのレコード数は500、分散形状はブロック
分散である。前記の出力文を実行すると、各ノードのデ
ータ部には、図19に示す様な内容が出力される。bbb
1.000とbbb2. 000は1個のレコードなので、それらの間には改行マー
クが無い。
【0193】また別の例として、次の出力文について述
べる。
【0194】write(16, '(1000F8.3)' ) a この様な出力文に対しては、ただ1つのレコードが生成
され、その中に1000個の配列要素が含まれるので、
要素分散形式のスーパーレコードを用いるのが適切であ
る。従って、図20に示す様なスーパーレコードを書き
出す。
【0195】図20は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルの要素分散形式
のスーパーレコードの一例を示す図である。
【0196】図20に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルの要素
分散形式のスーパーレコードでは、種別コードはELM_DI
STであり、要素長は8、要素数は1000、分散形状は
ブロック分散である。前記の出力文を実行すると、各ノ
ードのデータ部には、図20に示す様な内容が出力され
る。本実施例の要素分散形式のスーパーレコードの例で
は、全体が1個のレコードであるから、データ部に改行
マークは現れない。
【0197】また別の例として、次の出力文について述
べる。
【0198】 write(16, '(F6.1, 2F8.3)' ) s, a(1), a(2) ここで、sは配列でない変数で、値-1.0が格納されてい
るものとする。なお、配列でない変数は、全ノードで同
一の値のコピーを持つものとする。
【0199】この出力文の書式仕様'(F6.1, 2F8.3)'
は、1個の変数を6桁の欄に小数点以下1桁の精度で出
力し、その後に2個の変数をそれぞれ8桁の欄に小数点
以下3桁の精度で出力することを指定する。この場合
は、分散配列と配列でない変数が混じっており、さら
に、桁数(長さ)が変数によって異なっているので、非
分散形式のスーパーレコードを用いるのが適切である。
従って、図21に示す様なスーパーレコードを書き出
す。
【0200】図21は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルの非分散形式の
スーパーレコードの一例を示す図である。
【0201】図21に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルの非分
散形式のスーパーレコードでは、種別コードはNO_DIST
であり、バイト数は23である。前記の出力文を実行す
ると、0番ノードのデータ部には、図21に示す様な内
容が出力され、他のノードのデータ部には何も出力され
ない。なお、出力変数が0番以外のノードに割り当てら
れているときは、ノード間で転送して0番ノードに集め
てから書き出す。
【0202】以上をまとめて、本実施例の並列処理プロ
グラム実行方法のレイアウト自己記述ファイルへの出力
処理の処理手順について説明する。
【0203】図22は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルへの出力処理の
処理手順を示すフローチャートである。
【0204】図22に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルへの出
力処理を行うステップ440の処理では、出力変数の中
に分散配列が含まれるかどうかを判定する。もし含まれ
ていればステップ441の処理に進み、含まれていなけ
ればステップ451の処理に進む。
【0205】ステップ441の処理では、出力変数の数
と書式仕様に基づいて、出力すべきレコード数、レコー
ド長、レコード内の要素数、要素長等を計算する。
【0206】ステップ442の処理では、レコード数を
判定し、複数ならばステップ443の処理に進み、1個
ならばステップ447の処理に進む。
【0207】ステップ443の処理では、全レコードが
同じ長さかどうかを判定し、全レコードの長さが同じな
らばステップ444の処理に進み、全レコードの長さが
同じでなければ、ステップ451の処理に進む。
【0208】また、ステップ447の処理では1レコー
ド内の全要素が同じ長さかどうかを判定し、全要素の長
さが同じならばステップ448の処理に進み、全要素の
長さが同じでなければステップ451の処理に進む。
【0209】ステップ444以降の処理では、レコード
分散形式のスーパーレコードを出力する。ステップ44
4の処理では、スーパーレコードのヘッダ32に、種別
コードREC_DISTを書き出す。
【0210】ステップ445の処理では、スーパーレコ
ードのヘッダ32に、レコード長321、レコード数3
22、分散形状323を書き出す。
【0211】ステップ446の処理では、各ノードで、
当該ノードに割り当てられたデータ351を書き出す。
これで、レコード分散形式の場合の処理を終了する。
【0212】ステップ448以降の処理では、要素分散
形式のスーパーレコードを出力する。ステップ448の
処理では、スーパーレコードのヘッダ32に、種別コー
ドELM_DISTを書き出す。
【0213】ステップ449の処理では、スーパーレコ
ードのヘッダ32に、要素長331、要素数332、分
散形状333を書き出す。
【0214】ステップ450の処理では、各ノードで、
当該ノードに割り当てられたデータ352を書き出す。
これで、要素分散形式の場合の処理を終了する。
【0215】ステップ451以降の処理では、非分散形
式のスーパーレコードを出力する。ステップ451の処
理では、スーパーレコードのヘッダ32に、種別コード
NO_DISTを書き出す。
【0216】ステップ452の処理では、スーパーレコ
ードのヘッダ32に、バイト数341を書き出す。ステ
ップ453の処理では、出力変数の内容をノード間で転
送して0番ノードに集める。ステップ454の処理で
は、集めたデータを0番ノードが逐次的に書き出す。こ
れで、非分散形式の場合の処理を終了する。
【0217】図22に示す様に、本実施例の並列処理プ
ログラムのレイアウト自己記述ファイルの出力処理で
は、ある出力文で生成される全レコードの長さが等しく
ない場合は、非分散形式のスーパーレコードを出力する
ことになっている。しかし、出力処理方法を拡張して、
全レコードの長さが等しくなくても、データを部分的に
分散して出力することも可能である。例えば、次の出力
文では、3個の配列要素を含むレコードが333個、1
個の配列要素を含むレコードが1個生成される。
【0218】write(16, '(3F8.3)') a これをレイアウト自己記述ファイルに格納する方法とし
ては、図23に示す様なものが可能である。
【0219】図23は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルの複数の形式の
スーパーレコードの一例を示す図である。
【0220】図23に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルへの出
力処理では、1個の出力文に対して、複数の形式のスー
パーレコードを生成している。
【0221】第1のスーパーレコードはレコード分散形
式で、レコード長は25、レコード数は333、分散形
状はブロック分散である。このスーパーレコード内に、
配列要素a(1)から配列要素a(999)迄に対応するデータを
格納する。333個のレコードを4ノードで分散するの
で、最後のノード以外には84個のレコード、最後のノ
ードには81個のレコードを格納する。最後のノードで
余ったレコード3個分の領域は、空白文字で埋める。
【0222】第2のスーパーレコードは非分散形式で、
バイト数は9である。このスーパーレコードには、最後
の配列要素a(1000)に対応するデータを格納する。これ
で、大部分の配列要素を分散して格納できる。なお、元
々の配列要素が各ノードに250個ずつ割り当てられて
いたとすると、この様な形状で出力する為には、データ
再分散が必要である。
【0223】以上の様に、本実施例の並列処理プログラ
ム実行方法及びその実施装置によれば、出力処理の対象
であるファイルの分散情報を当該ファイル内に書き込む
ので、配列データ以外のデータについても並列出力処理
を実行することが可能である。
【0224】(レイアウト自己記述ファイルへの入力処
理)以下に、本実施例の並列処理プログラム実行方法に
おいて、レイアウト自己記述ファイルからの入力処理を
行う処理手順について説明する。
【0225】図4に示す様に、本実施例の並列処理プロ
グラム実行装置は、入力データを記憶する複数のローカ
ルメモリ231〜23nと、並列入力処理の行われるレ
イアウト自己記述ファイルを格納する複数のディスク装
置241〜24nと、前記入力データが複数のディスク
装置241〜24nに分散して格納されているか否かを
表す分散情報を当該ディスク装置から入力し、前記分散
情報によって前記入力データをディスク装置241〜2
4nから並列入力または逐次入力して前記ローカルメモ
リ231〜23nに記憶する複数のCPU221〜22
nを備えている。
【0226】まず、基本的な例として、図18に示す様
なレコード分散形式のスーパーレコードから、次の入力
文によってデータを読み込む場合を述べる。
【0227】read(15, '(F8.3)' ) x ここで、xは1000個の要素から成る配列とする。For
tranでは、入力文で、書式仕様が要求する変数の数より
も入力処理の対象の変数の数が多いときは、書式仕様が
要求する数の変数ごとに分けて別々のレコードから読み
込むことが規定されている。
【0228】前記の入力文では、書式仕様'(F8.3)'は1
個の変数を要求するのに対し、入力変数は1000個の
配列要素であるから、合計1000レコード読み込ん
で、各レコードから初めの8バイトを取り出して、各配
列要素の値とすれば良いことが分かる。
【0229】ここで、スーパーレコードのヘッダ32を
見ると、図18に示す様に、9バイトの長さのレコード
が1000個、ブロック分散で格納されていることが分
かる。このスーパーレコード1個分で、ちょうど必要な
レコード数が充たされるので、各ノードで並列にレコー
ドを読み込み、値を配列xの各要素に代入する。
【0230】ここで、もしも配列xの分散形状がブロッ
ク分散ならば、各ノードで読み込んだデータをそのまま
格納すれば良いし、巡回分散ならば、各ノードで読み込
んだデータを再分散して巡回分散にしてから、配列xに
格納すれば良い。
【0231】別の例として、図19に示す様なスーパー
レコードから、次の入力文によって読み込む場合につい
て述べる。
【0232】read(15, '(2F8.3)' ) x この入力文では、書式仕様'(2F8.3)'は2個の変数を要
求するのに対し、入力変数は1000個の配列要素であ
るから、合計500レコード読み込んで、各レコードか
ら8バイトのデータを2個ずつ取り出して、各配列要素
の値とすれば良いことが分かる。
【0233】ここで、スーパーレコードのヘッダ32を
見ると、図19に示す様に、17バイトのレコードが5
00個、ブロック分散で格納されており、ちょうど必要
なレコード数が充たされることが分かる。そこで、各ノ
ードで並列にレコードを読み込み、値を配列xの各要素
に代入する。配列xが巡回分散であれば、読み込んだデ
ータを再分散してから格納することは、前と同様であ
る。
【0234】また、別の例として、図20に示す様な要
素分散形式のスーパーレコードから、次の入力文によっ
て読み込む場合について述べる。
【0235】read(15, '(1000F8.3)' ) x この入力文の書式仕様'(1000F8.3)'によれば、1レコー
ド読み込んで、8バイトの値を1000個取り出せば良
いことが分かる。
【0236】スーパーレコードのヘッダ32を見ると、
図20に示す様に、1レコード内に8バイトの要素が1
000個、ブロック分散で格納されていることが分か
る。そこで、各ノードで並列に要素を読み込み、必要な
らば再分散を行った後に、値を配列xの各要素に代入す
る。
【0237】また別の例として、図21に示す様な非分
散形式のスーパーレコードから、次の入力文によって読
み込む場合について述べる。
【0238】 read(15, '(F6.1, 2F8.3)' ) t, x(1), x(2) ここでtは配列でない変数とする。前記の入力文の書式
仕様'(F6.1, 2F8.3)'によれば、1レコード読み込ん
で、6バイトの値を1個、8バイトの値を2個取り出せ
ば良いことが分かる。
【0239】スーパーレコードのヘッダ32を見ると、
図21に示す様に、25バイトのレコードが1個、非分
散で格納されていることが分かる。そこで、0番ノード
で1レコードを読み込み、3個の値を得る。入力変数t
は配列ではないので、全ノードで同一の値のコピーを持
つ様にしなければならない。
【0240】従って、当該ファイルから得られた第1の
値を0番ノードから全ノードへ転送し、全ノードでtの
コピーに格納する。また、入力変数x(1)とx(2)について
は、もしも配列xがブロック分散ならば両方とも0番ノ
ード上にあるので、当該ファイルから得られた第2、第
3の値を0番ノードでそのままx(1)とx(2)に格納する。
【0241】もしも、配列xが巡回分散ならば、x(1)は
0番ノードにあるがx(2)は1番ノードにある。従って、
当該ファイルから得られた第2の値は0番ノードでx(1)
に格納するが、第3の値は1番ノードに転送して、そこ
でx(2)に格納する。
【0242】もう少し複雑な場合として、スーパーレコ
ード内のレコード数や要素数が、入力文で要求されるも
のと一致していない場合の処理について説明する。例と
して図18に示す様なブロック分散形式のスーパーレコ
ードから、次の入力文によってデータを読み込む場合に
ついて述べる。
【0243】read(15,'(F8.3)') y ここで、yは500個の要素から成る配列とする。前記
の入力文の書式仕様とyの要素数によれば、500レコ
ード読み込んで、各レコードから初めの8バイトを取り
出せば良いことが分かる。ところが、図18に示す様
に、当該スーパーレコードには1000個のレコードが
含まれているので、スーパーレコード全体を読み込む
と、レコード数が多過ぎることになる。
【0244】この様な場合、スーパーレコードのヘッダ
32を見るとレコードがブロック分散されていることが
分かるので、500レコード取り出す為には、0番ノー
ドと1番ノードだけが当該ノードの持つレコードを読み
込めば良いと分かる。こうして読み込んだレコードから
値を取り出し、必要なら再分散を行って、配列yの50
0個の要素に格納する。なお、次に前記ファイルから読
み出すときには、このスーパーレコードの第501レコ
ード目から読む様にする。
【0245】また、別の例として、1個のスーパーレコ
ード内のレコード数や要素数が、入力文で要求されるも
のより少ない場合の処理について説明する。図23に示
す様な2個のスーパーレコードから、次の入力文によっ
てデータを読み込む場合について述べる。
【0246】read(15, '(3F8.3)' ) x ここで、xは前記の例と同じく1000個の要素から成
る配列とする。書式仕様とxの要素数から、334レコ
ードを読み込んで、初めの333レコードからは各々3
個の値を取り出し、最後の1レコードからは1個の値を
取り出せば良いことが分かる。
【0247】ところが、図23に示す様に、ファイルの
方を見ると、初めのスーパーレコードには、333個の
レコードしか含まれていない。そこで、まずは、初めの
スーパーレコードの333個のレコードを読み込んで、
配列要素x(1)からx(999)の値を得る。
【0248】このままでは、まだ、配列要素x(1000)に
値が入力されていない。そこで、次のスーパーレコード
へ進む。次のスーパーレコードは非分散形式であるか
ら、0番ノードが1レコードを読み込み、このレコード
に含まれる値をx(1000)に格納する。
【0249】以上をまとめて、本実施例の並列処理プロ
グラム実行方法のレイアウト自己記述ファイルからの入
力処理の処理手順について説明する。
【0250】図24は、本実施例の並列処理プログラム
実行方法のレイアウト自己記述ファイルからの入力処理
の処理手順を示すフローチャートである。
【0251】図24に示す様に、本実施例の並列処理プ
ログラム実行方法のレイアウト自己記述ファイルからの
入力処理を行うステップ460の処理では、書式仕様と
入力変数の数を元に必要なレコード数やレコード内デー
タのバイト数等を計算する。
【0252】ステップ461の処理では、レイアウト自
己記述ファイルの現在位置のスーパーレコードがどの形
式かを判定する。スーパーレコードの形式が、レコード
分散形式、要素分散形式、非分散形式の場合に応じて、
それぞれ、ステップ462、ステップ463、または、
ステップ465の処理に進む。
【0253】ステップ462の処理では、レコード分散
形式のスーパーレコードに含まれるレコードを全ノード
で並列に読み込む。但し、入力で必要とするレコード数
がスーパーレコードに含まれるレコード数よりも少ない
場合は、必要数のレコードのみを読み込む。
【0254】また、ステップ463の処理では、要素分
散形式のスーパーレコードに含まれる要素を全ノードで
並列に読み込む。ステップ464の処理では、読み込ん
だ値を、必要ならば入力変数の分散形状に合わせて再分
散して、入力変数に格納する。
【0255】ステップ465の処理では、非分散形式の
スーパーレコードに含まれるレコードを0番ノードで逐
次的に読み込む。但し、入力で必要とするレコード数が
スーパーレコードに含まれるレコード数よりも少ない場
合は、必要数のレコードのみを読み込む。
【0256】ステップ466の処理では、読み込んだ値
を、必要ならば入力変数の分散形状に合わせて0番ノー
ドから他ノードへ転送して、入力変数に格納する。
【0257】ステップ467の処理では、全ての入力変
数に値が格納されたかどうかを判定する。全ての入力変
数に値が格納されたならば、入力処理を終了し、そうで
なければステップ468の処理に進む。
【0258】ステップ468の処理では、必要レコード
数をアップデートする。すなわち、現在のスーパーレコ
ードから読み込んだレコード数を差し引く。ステップ4
69の処理では、レイアウト自己記述ファイルの現在位
置を、次のスーパーレコードの処理に進める。そして、
ステップ461からの処理を繰り返す。以上で、レイア
ウト自己記述ファイルからの入力処理の説明を終わる。
【0259】以上の様に、本実施例の並列処理プログラ
ム実行方法及びその実施装置によれば、入力処理の対象
であるファイルの分散情報を当該ファイル内から読み込
むので、配列データ以外のデータについても並列入力処
理を実行することが可能である。
【0260】以上、本発明を、前記実施例に基づき具体
的に説明したが、本発明は、前記実施例に限定されるも
のではなく、その要旨を逸脱しない範囲において種々変
更可能であることは勿論である。
【0261】
【発明の効果】本願において開示される発明のうち代表
的なものによって得られる効果を簡単に説明すれば、下
記のとおりである。
【0262】すなわち、逐次入出力用の入出力文を検索
した後に前記入出力文を並列入出力用の入出力文に変換
するので、移植性を低下させることなく、ユーザの修正
無しに逐次入出力用の入出力文を並列化して並列処理プ
ログラムの生成を行うことが可能である。
【0263】また、逐次入出力用の入出力文を並列入出
力処理用のライブラリ手続きの呼び出しに変換するの
で、並列処理プログラムの生成を高速化に行うことが可
能である。
【0264】また、入出力処理の対象であるファイルが
並列入出力用ファイルであるかまたは逐次入出力用ファ
イルであるかを判定するので、並列処理プログラムの実
行時に入出力処理の対象であるファイルを任意に変更す
ることが可能である。
【0265】また、出力処理の対象であるファイルの分
散情報を当該ファイル内に書き込むので、配列データ以
外のデータについても並列出力処理を実行することが可
能である。
【0266】また、入力処理の対象であるファイルの分
散情報を当該ファイル内から読み込むので、配列データ
以外のデータについても並列入力処理を実行することが
可能である。
【図面の簡単な説明】
【図1】本発明の並列処理プログラム生成方法を実施す
る並列化コンパイラの概略構成を示す図である。
【図2】本実施例の並列処理プログラム生成方法におい
て、入力文の並列化処理手順を示すフローチャートであ
る。
【図3】本実施例の並列処理プログラム生成方法におい
て、出力文の並列化処理手順を示すフローチャートであ
る。
【図4】本発明の並列処理プログラム実行装置の一実施
例である並列計算機の概略構成を示す図である。
【図5】本実施例の並列処理プログラム生成方法の配列
ファイルの概略構成を示す図である。
【図6】本実施例の並列処理プログラム生成方法の入力
文の並列化処理の変換前プログラムの一例を示す図であ
る。
【図7】本実施例の並列処理プログラム生成方法の入力
文の並列化処理の変換後プログラムの一例を示す図であ
る。
【図8】本実施例の並列処理プログラム生成方法の出力
文の並列化処理の変換前プログラムの一例を示す図であ
る。
【図9】本実施例の並列処理プログラム生成方法の出力
文の並列化処理の変換後プログラムの一例を示す図であ
る。
【図10】本実施例の並列処理プログラム生成方法のラ
イブラリの呼び出しによる入力文の並列化方法のフロー
チャートである。
【図11】本実施例の並列処理プログラム生成方法のラ
イブラリの呼び出しによる変換後プログラムの一例を示
す図である。
【図12】本実施例の並列処理プログラム実行方法の入
力処理手順を示すフローチャートである。
【図13】本実施例の並列処理プログラム実行方法の出
力処理手順を示すフローチャートである。
【図14】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルの概略構成を示す図である。
【図15】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルのレコード分散形式のスーパ
ーレコードの概略構成を示す図である。
【図16】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルの要素分散形式のスーパーレ
コードの概略構成を示す図である。
【図17】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルの非分散形式のスーパーレコ
ードの概略構成を示す図である。
【図18】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルのレコード分散形式のスーパ
ーレコードの第1の例を示す図である。
【図19】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルのレコード分散形式のスーパ
ーレコードの第2の例を示す図である。
【図20】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルの要素分散形式のスーパーレ
コードの一例を示す図である。
【図21】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルの非分散形式のスーパーレコ
ードの一例を示す図である。
【図22】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルへの出力処理の処理手順を示
すフローチャートである。
【図23】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルの複数の形式のスーパーレコ
ードの一例を示す図である。
【図24】本実施例の並列処理プログラム実行方法のレ
イアウト自己記述ファイルからの入力処理の処理手順を
示すフローチャートである。
【符号の説明】
50…並列化前プログラム、51…並列化後プログラ
ム、54…中間語、6…並列化コンパイラ、60…構文
解析部、61…I/O文並列化部、62…非I/O文並
列化部、63…コード生成部、610…ファイル種別判
定条件節挿入部、611…分散記述子アクセス文挿入
部、612…並列I/O文挿入部、613…再分散文挿
入部、614…逐次I/O文挿入部、615…データ転
送文挿入部、2…並列計算機、21…ノード間ネットワ
ーク、25…外部ネットワーク、26…ワークステーシ
ョン、27…ディスク装置、201〜20n…ノード、
221〜22n…CPU、231〜23n…ローカルメ
モリ、241〜24n…ディスク装置、30…配列ファ
イル、31…標準ファイル、301…要素数、302…
分散形状、303…ローカル配列要素。

Claims (10)

    【特許請求の範囲】
  1. 【請求項1】 逐次処理用に記述された逐次処理プログ
    ラムの入出力文を並列処理用に記述された並列入出力処
    理用コードに変換する並列処理プログラム生成方法であ
    って、 前記逐次処理プログラムの入出力文を検索し、前記入出
    力文の入出力処理の対象であるファイルが並列入出力用
    であるかまたは逐次入出力用であるかを判定するコード
    を挿入し、前記判定結果に応じて複数のメモリと複数の
    外部記憶装置との間で並列入出力処理または逐次入出力
    処理を実行すると共に前記入出力処理のデータの分散形
    状が前記メモリ上と前記外部記憶装置上とで異なってい
    る場合に分散形状の変換を行うコードを挿入することを
    特徴とする並列処理プログラム生成方法。
  2. 【請求項2】 逐次処理用に記述された逐次処理プログ
    ラムの入出力文を並列入出力処理用のライブラリ手続き
    の呼び出しに変換する並列処理プログラム生成方法であ
    って、 前記逐次処理プログラムの入出力文を検索し、前記入出
    力文の入出力処理の対象であるファイルが並列入出力用
    であるかまたは逐次入出力用であるかを判定した後に前
    記判定結果に応じて複数のメモリと複数の外部記憶装置
    との間で並列入出力処理または逐次入出力処理を実行す
    ると共に前記入出力処理のデータの分散形状が前記メモ
    リ上と前記外部記憶装置上とで異なっている場合に分散
    形状の変換を行うライブラリ手続き呼び出しを挿入する
    ことを特徴とする並列処理プログラム生成方法。
  3. 【請求項3】 入出力処理の対象であるファイルの種別
    に応じて並列入出力処理または逐次入出力処理を行う並
    列処理プログラム実行方法であって、 前記入出力処理の対象であるファイルが並列入出力用で
    あるかまたは逐次入出力用であるかを判定し、前記判定
    結果に応じて複数のメモリと複数の外部記憶装置との間
    で並列入出力処理または逐次入出力処理を実行すると共
    に前記入出力処理のデータの分散形状が前記メモリ上と
    前記外部記憶装置上とで異なっている場合に分散形状の
    変換を行うことを特徴とする並列処理プログラム実行方
    法。
  4. 【請求項4】 任意の出力データについて前記出力デー
    タの種別に応じて並列出力処理または逐次出力処理を行
    う並列処理プログラム実行方法であって、 前記出力データを複数の外部記憶装置に分散して格納す
    るか否かを決定し、前記出力データを分散して格納する
    場合に前記出力データが分散されていることを示す情報
    と分散単位を示す情報と前記分散単位の長さを示す情報
    と分散形状から成る分散情報を作成し、前記出力データ
    を分散しないで格納する場合に前記出力データが分散さ
    れていないことを示す情報と出力データの長さを示す情
    報から成る分散情報を作成し、前記分散情報をメモリに
    記憶された出力データと共に前記外部記憶装置に並列出
    力または逐次出力することを特徴とする並列処理プログ
    ラム実行方法。
  5. 【請求項5】 任意の入力データについて前記入力デー
    タの種別に応じて並列入力処理または逐次入力処理を行
    う並列処理プログラム実行方法であって、 前記入力データが複数の外部記憶装置に分散して格納さ
    れているか否かを表す情報を前記外部記憶装置から入力
    し、前記入力データが分散されている場合には分散単位
    を示す情報と前記分散単位の長さを示す情報と共に入力
    データを前記複数の外部記憶装置から並列入力してメモ
    リに記憶し、前記入力データが分散されていない場合に
    は前記入力データの長さを示す情報と共に前記入力デー
    タを当該外部記憶装置から逐次入力してメモリに記憶す
    ることを特徴とする並列処理プログラム実行方法。
  6. 【請求項6】 逐次処理用に記述された逐次処理プログ
    ラムの入出力文を並列処理用に記述された並列入出力処
    理用コードに変換する並列処理プログラム生成装置であ
    って、 前記逐次処理プログラムと前記並列処理プログラムを一
    時的に記憶するメモリと、前記逐次処理プログラムと前
    記並列処理プログラムを格納する外部記憶装置と、 前記外部記憶装置に格納された前記逐次処理プログラム
    を前記メモリに記憶して入出力文を検索し、前記入出力
    文の入出力処理の対象であるファイルが並列入出力用で
    あるかまたは逐次入出力用であるかを判定するコードを
    挿入し、前記判定結果に応じて複数のメモリと複数の外
    部記憶装置との間で並列入出力処理または逐次入出力処
    理を実行すると共に前記入出力処理のデータの分散形状
    が前記メモリ上と前記外部記憶装置上とで異なっている
    場合に分散形状の変換を行うコードを挿入して並列処理
    プログラムを生成し、前記並列処理プログラムを前記外
    部記憶装置に格納する制御装置を備えることを特徴とす
    る並列処理プログラム生成装置。
  7. 【請求項7】 逐次処理用に記述された逐次処理プログ
    ラムの入出力文を並列入出力処理用のライブラリ手続き
    の呼び出しに変換する並列処理プログラム生成装置であ
    って、 前記逐次処理プログラムと前記並列処理プログラムを一
    時的に記憶するメモリと、前記逐次処理プログラムと前
    記並列処理プログラムを格納する外部記憶装置と、 前記外部記憶装置に格納された前記逐次処理プログラム
    を前記メモリに記憶して入出力文を検索し、前記入出力
    文の入出力処理の対象であるファイルが並列入出力用で
    あるかまたは逐次入出力用であるかを判定した後に前記
    判定結果に応じて複数のメモリと複数の外部記憶装置と
    の間で並列入出力処理または逐次入出力処理を実行する
    と共に前記入出力処理のデータの分散形状が前記メモリ
    上と前記外部記憶装置上とで異なっている場合に分散形
    状の変換を行うライブラリ手続き呼び出しを挿入して並
    列処理プログラムを生成し、前記並列処理プログラムを
    前記外部記憶装置に格納する制御装置を備えることを特
    徴とする並列処理プログラム生成装置。
  8. 【請求項8】 入出力処理の対象であるファイルの種別
    に応じて並列入出力処理または逐次入出力処理を行う並
    列処理プログラム実行装置であって、 前記入出力処理のデータを記憶する複数のメモリと、前
    記入出力処理の行われるファイルを格納する複数の外部
    記憶装置と、 前記入出力処理の対象であるファイルが並列入出力用で
    あるかまたは逐次入出力用であるかを判定し、前記判定
    結果に応じて複数のメモリと複数の外部記憶装置との間
    で並列入出力処理または逐次入出力処理を実行すると共
    に前記入出力処理のデータの分散形状が前記メモリ上と
    前記外部記憶装置上とで異なっている場合に分散形状の
    変換を行う複数の制御装置を備えることを特徴とする並
    列処理プログラム実行装置。
  9. 【請求項9】 任意の出力データについて前記出力デー
    タの種別に応じて並列出力処理または逐次出力処理を行
    う並列処理プログラム実行装置であって、 前記出力データを記憶する複数のメモリと、前記並列出
    力処理の行われるファイルを格納する複数の外部記憶装
    置と、 前記出力データを複数の外部記憶装置に分散して格納す
    るか否かを決定し、前記出力データを分散して格納する
    場合に前記出力データが分散されていることを示す情報
    と分散単位を示す情報と前記分散単位の長さを示す情報
    と分散形状から成る分散情報を作成し、前記出力データ
    を分散しないで格納する場合に前記出力データが分散さ
    れていないことを示す情報と出力データの長さを示す情
    報から成る分散情報を作成し、前記分散情報を前記メモ
    リに記憶された出力データと共に前記外部記憶装置に並
    列出力または逐次出力する複数の制御装置を備えること
    を特徴とする並列処理プログラム実行装置。
  10. 【請求項10】 任意の入力データについて前記入力デ
    ータの種別に応じて並列入力処理または逐次入力処理を
    行う並列処理プログラム実行装置であって、 前記入力データを記憶する複数のメモリと、前記並列入
    力処理の行われるファイルを格納する複数の外部記憶装
    置と、 前記入力データが複数の外部記憶装置に分散して格納さ
    れているか否かを表す情報を前記外部記憶装置から入力
    し、前記入力データが分散されている場合には分散単位
    を示す情報と前記分散単位の長さを示す情報と共に入力
    データを前記複数の外部記憶装置から並列入力して前記
    メモリに記憶し、前記入力データが分散されていない場
    合には前記入力データの長さを示す情報と共に前記入力
    データを当該外部記憶装置から逐次入力して前記メモリ
    に記憶する複数の制御装置を備えることを特徴とする並
    列処理プログラム実行装置。
JP13308295A 1995-05-31 1995-05-31 並列処理プログラム生成方法及びその実行方法並びにそれらの実施装置 Pending JPH08328871A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP13308295A JPH08328871A (ja) 1995-05-31 1995-05-31 並列処理プログラム生成方法及びその実行方法並びにそれらの実施装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP13308295A JPH08328871A (ja) 1995-05-31 1995-05-31 並列処理プログラム生成方法及びその実行方法並びにそれらの実施装置

Publications (1)

Publication Number Publication Date
JPH08328871A true JPH08328871A (ja) 1996-12-13

Family

ID=15096435

Family Applications (1)

Application Number Title Priority Date Filing Date
JP13308295A Pending JPH08328871A (ja) 1995-05-31 1995-05-31 並列処理プログラム生成方法及びその実行方法並びにそれらの実施装置

Country Status (1)

Country Link
JP (1) JPH08328871A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4867009B2 (ja) * 2004-12-09 2012-02-01 国立大学法人 奈良先端科学技術大学院大学 量子コンピュータを含むコンピュータシステムのためのプログラム開発支援装置、プログラム開発支援用プログラム、及びシミュレーション装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4867009B2 (ja) * 2004-12-09 2012-02-01 国立大学法人 奈良先端科学技術大学院大学 量子コンピュータを含むコンピュータシステムのためのプログラム開発支援装置、プログラム開発支援用プログラム、及びシミュレーション装置

Similar Documents

Publication Publication Date Title
JP3551353B2 (ja) データ再配置方法
US8739022B2 (en) Parallel approach to XML parsing
JP3478820B2 (ja) プログラムを実行するシステム
US5551039A (en) Compiling a source code vector instruction by generating a subgrid loop for iteratively processing array elements by plural processing elements
US7143388B1 (en) Method of transforming software language constructs to functional hardware equivalents
US4463423A (en) Method of transforming high level language statements into multiple lower level language instruction sets
JP2000035893A (ja) デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体
US6083282A (en) Cross-project namespace compiler and method
JP2003529808A (ja) スクリプト駆動ツールの並列処理アプリケーション
US20110314456A1 (en) System and Method for Mapping Structured Document to Structured Data of Program Language and Program for Executing Its Method
JPS6293735A (ja) コンパイラ
JP3047998B2 (ja) 並列計算機におけるプロセッサ割り当て方法、及び装置
JPH0441378B2 (ja)
US10585871B2 (en) Database engine for mobile devices
US5781779A (en) Tools for efficient sparse matrix computation
JP4673299B2 (ja) 情報処理方法及び情報処理システム
US6314564B1 (en) Method for resolving arbitrarily complex expressions at link-time
CN1894674A (zh) 存储器访问指令向量化
US6883080B1 (en) Program executing apparatus and program development supporting apparatus
CN116186045A (zh) 稀疏矩阵的调整方法、装置、电子设备及存储介质
JPH08328871A (ja) 並列処理プログラム生成方法及びその実行方法並びにそれらの実施装置
Deshpande et al. C & Data Structures
JP3266097B2 (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
US7334221B1 (en) System and method for encoding trace framework enabling in an object file
Al-Sharif Functional Level Simulator for Universal AHPL.