JPH08221276A - コンパイラ - Google Patents
コンパイラInfo
- Publication number
- JPH08221276A JPH08221276A JP2818195A JP2818195A JPH08221276A JP H08221276 A JPH08221276 A JP H08221276A JP 2818195 A JP2818195 A JP 2818195A JP 2818195 A JP2818195 A JP 2818195A JP H08221276 A JPH08221276 A JP H08221276A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- array
- range
- subscript
- value
- 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
Links
Landscapes
- Multi Processors (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【目的】 複数のプロセッサに分散された配列データの
DOループの高速実行を可能にする。 【構成】 ソースプログラム21には、並列実行向けの
分割指示と配列に対する大域のDOループが定義されて
いる。構文解析部11は、ソースプログラムを入力し、
構文・意味解析して中間言語22に変換する。中間部1
2は、中間言語22を入力し、ソースプログラム21の
分割指示に従って配列を分割し、分割前と後の配列に対
する添字の範囲の関係を解析して、DO制御変数の範囲
を分割した局所配列の範囲内に変更した中間語23に変
換する。コード生成部13は、中間語23を入力して目
的プログラム30を生成する。 【効果】 目的プログラムのDOループ内の添字は、分
散された配列の添字の範囲内であることを保証してお
り、DOループ内における添字範囲の判定は不要であ
る。
DOループの高速実行を可能にする。 【構成】 ソースプログラム21には、並列実行向けの
分割指示と配列に対する大域のDOループが定義されて
いる。構文解析部11は、ソースプログラムを入力し、
構文・意味解析して中間言語22に変換する。中間部1
2は、中間言語22を入力し、ソースプログラム21の
分割指示に従って配列を分割し、分割前と後の配列に対
する添字の範囲の関係を解析して、DO制御変数の範囲
を分割した局所配列の範囲内に変更した中間語23に変
換する。コード生成部13は、中間語23を入力して目
的プログラム30を生成する。 【効果】 目的プログラムのDOループ内の添字は、分
散された配列の添字の範囲内であることを保証してお
り、DOループ内における添字範囲の判定は不要であ
る。
Description
【0001】
【産業上の利用分野】本発明は、高級言語のソースプロ
グラムを機械語の目的プログラム(オブジェクト)に変
換するコンパイラに関し、特に分散記憶向け並列計算機
において、複数のプロセッサに分散された配列データに
関するDOループの実行を効率的に実行させるためのオ
ブジェクトを生成するコンパイラに関する。
グラムを機械語の目的プログラム(オブジェクト)に変
換するコンパイラに関し、特に分散記憶向け並列計算機
において、複数のプロセッサに分散された配列データに
関するDOループの実行を効率的に実行させるためのオ
ブジェクトを生成するコンパイラに関する。
【0002】
【従来の技術】従来のコンパイラでは、並列実行向けの
指示を含むDOループ定義文の高級言語ソースプログラ
ムを、分散記憶計算機のプロセッサ向けの目的プログラ
ム(オブジェクト、目的コードともいう)に変換する場
合、DOループのループ回数は変更せず、プロセッサが
ループ内で自分のプロセッサ番号を比較するコードを出
力していた。図8に具体例を示す。
指示を含むDOループ定義文の高級言語ソースプログラ
ムを、分散記憶計算機のプロセッサ向けの目的プログラ
ム(オブジェクト、目的コードともいう)に変換する場
合、DOループのループ回数は変更せず、プロセッサが
ループ内で自分のプロセッサ番号を比較するコードを出
力していた。図8に具体例を示す。
【0003】図8(1)は高級言語FORTRAN(H
igh Performance Fortran)ソースプログラムの一例
で、並列実行向けの分割指示と、その配列データに対す
るDOループを示している。この例では、配列Aを4つ
のプロセッサに25要素ずつ連続に分割する。このプロ
グラムは、従来のコンパイラでは、図8(2)のように
変換される。即ち、DOループの初期値(1)、終値
(100)は変換せず、該ループ内で自分のプロセッサ
番号を比較するIF文のコードが出力される。
igh Performance Fortran)ソースプログラムの一例
で、並列実行向けの分割指示と、その配列データに対す
るDOループを示している。この例では、配列Aを4つ
のプロセッサに25要素ずつ連続に分割する。このプロ
グラムは、従来のコンパイラでは、図8(2)のように
変換される。即ち、DOループの初期値(1)、終値
(100)は変換せず、該ループ内で自分のプロセッサ
番号を比較するIF文のコードが出力される。
【0004】複数のプロセッサ(本例では4台)に分散
された配列データに関するDOループの実行は、各プロ
セッサIPが、DOループの内部において配列の添字が
自プロセッサの持つ局所配列の添字の範囲内であるか否
かを判定することにより、DOループの繰返しを実行す
るか否かを決定することになる。図9は、図8の例につ
いて、4台のプロセッサ0〜3に分散記憶された局所配
列の添字の範囲と大域添字の関係を示したものである。
された配列データに関するDOループの実行は、各プロ
セッサIPが、DOループの内部において配列の添字が
自プロセッサの持つ局所配列の添字の範囲内であるか否
かを判定することにより、DOループの繰返しを実行す
るか否かを決定することになる。図9は、図8の例につ
いて、4台のプロセッサ0〜3に分散記憶された局所配
列の添字の範囲と大域添字の関係を示したものである。
【0005】
【発明が解決しようとする課題】上記従来技術では、複
数のプロセッサに分散された配列型データを含むDOル
ープの実行に際して、該プロセッサにおいてDOループ
の繰返しを実行するか否かの判定をDOループ本体で毎
回行う必要があるため、DOループの効率のよい実行が
行えないという問題があった。
数のプロセッサに分散された配列型データを含むDOル
ープの実行に際して、該プロセッサにおいてDOループ
の繰返しを実行するか否かの判定をDOループ本体で毎
回行う必要があるため、DOループの効率のよい実行が
行えないという問題があった。
【0006】本発明の目的は、コンパイルの過程で、D
Oループ内に存在する、分散された配列データの添字を
各プロセッサのDO制御変数で置き換えることにより、
ループ内での現在の繰返しを実行するか否かの判定をせ
ず、DOループの効率のよい実行を行えるようにするこ
とにある。
Oループ内に存在する、分散された配列データの添字を
各プロセッサのDO制御変数で置き換えることにより、
ループ内での現在の繰返しを実行するか否かの判定をせ
ず、DOループの効率のよい実行を行えるようにするこ
とにある。
【0007】
【課題を解決するための手段】本発明のコンパイラは、
並列実行向けの分割指示と配列に対する大域のDOルー
プを定義した高級言語のソースプログラムを入力して、
該ソースプログラムで定義された並列実行の分割指示に
従って、指定された配列を分割する手段と、分割前の配
列に対する添字の範囲と分割後の局所配列に対する添字
の範囲の関係を解析し、DOループ制御変数の初期値、
終値を局所配列の添字の範囲内とするDOループオブジ
ェクトを生成する手段を有する。
並列実行向けの分割指示と配列に対する大域のDOルー
プを定義した高級言語のソースプログラムを入力して、
該ソースプログラムで定義された並列実行の分割指示に
従って、指定された配列を分割する手段と、分割前の配
列に対する添字の範囲と分割後の局所配列に対する添字
の範囲の関係を解析し、DOループ制御変数の初期値、
終値を局所配列の添字の範囲内とするDOループオブジ
ェクトを生成する手段を有する。
【0008】また、本発明のコンパイラは初期値、終値
が不明な場合には、初期値、終値に対して局所配列の添
字の範囲を計算するオブジェクトと、前記範囲を繰り返
すDOループオブジェクトを生成する手段を有する。
が不明な場合には、初期値、終値に対して局所配列の添
字の範囲を計算するオブジェクトと、前記範囲を繰り返
すDOループオブジェクトを生成する手段を有する。
【0009】
【作用】コンパイラは並列向けの指示文に従って配列型
データを分割する。DOループ内に存在する分割された
配列型データに対してその添字の範囲が参照されるため
のDO制御変数の値の集合を計算し、その結果に従って
DOループの制御変数の初期値、終値を求め、DO文を
生成する。この生成されたDOループ内の配列の添字
は、自プロセッサの持つ、分散された配列の添字の範囲
内であることが保証されるため、DOループ内における
添字範囲の判定は不要となり、DOループの効率の良い
実行を行うことが出来る。
データを分割する。DOループ内に存在する分割された
配列型データに対してその添字の範囲が参照されるため
のDO制御変数の値の集合を計算し、その結果に従って
DOループの制御変数の初期値、終値を求め、DO文を
生成する。この生成されたDOループ内の配列の添字
は、自プロセッサの持つ、分散された配列の添字の範囲
内であることが保証されるため、DOループ内における
添字範囲の判定は不要となり、DOループの効率の良い
実行を行うことが出来る。
【0010】
【実施例】以下、本発明の一実施例を図面を参照しつつ
説明する。
説明する。
【0011】図1に、本発明の一実施例のコンパイラ全
体の構成図を示す。図において、コンパイラ(ここでは
FORTRANコンパイラ)10は構文解析部11、中
間部12及びコード生成部13に大別される。構文解析
部11は、FORTRANソースプログラム21を入力
し、構文・意味解析して中間言語22に変換する。中間
部12はデータ分割や添字解析を含み、中間言語22を
入力して、DOループの制御変数の範囲を変更した中間
言語23に変換する。コード生成部13は、中間言語2
3を入力して、目的プログラム30を生成する。本発明
は中間部12に係る。
体の構成図を示す。図において、コンパイラ(ここでは
FORTRANコンパイラ)10は構文解析部11、中
間部12及びコード生成部13に大別される。構文解析
部11は、FORTRANソースプログラム21を入力
し、構文・意味解析して中間言語22に変換する。中間
部12はデータ分割や添字解析を含み、中間言語22を
入力して、DOループの制御変数の範囲を変更した中間
言語23に変換する。コード生成部13は、中間言語2
3を入力して、目的プログラム30を生成する。本発明
は中間部12に係る。
【0012】図2は、中間部12における本発明の一実
施例によるDOループの分割処理フローを示す図であ
る。中間部12において、まず、FORTRANソース
プログラム(High Performance Fortran)で定義さ
れた並列実行向けの分割指示に従って、指定された配列
を分割し、配列データ分割テーブルを作成する(ステッ
プ110)。配列データ分割テーブルについては後述す
る。次に、プログラム中のDOループに対して分割され
た配列を含んだループであるか否かを判定する(ステッ
プ120)。当該ループが分割された配列を含む場合
は、次に、DOループの初期値、終値が定数で表されて
いるか否かを判定する(ステップ130)。当該ループ
の初期値、終値が定数で表されている場合は、ステップ
110で作成した配列データ分割テーブルを参照して、
分割された配列の添字の範囲と当該ループのDO制御変
数の値の集合を計算し(ステップ140)、初期値、終
値を局所配列の添字の範囲に置き換えたDOループオブ
ジェクトを生成する(ステップ150)。また、ステッ
プ130で当該ループの初期値、終値が定数で表されて
いない場合は、初期値、終値に対して局所配列の添字の
範囲を計算するオブジェクトと、その範囲を繰り返すD
Oループオブジェクトを生成する(ステップ160)。
一方、ステップ120で当該ループが分割された配列を
含まない場合は、当該DOループを分割しない。
施例によるDOループの分割処理フローを示す図であ
る。中間部12において、まず、FORTRANソース
プログラム(High Performance Fortran)で定義さ
れた並列実行向けの分割指示に従って、指定された配列
を分割し、配列データ分割テーブルを作成する(ステッ
プ110)。配列データ分割テーブルについては後述す
る。次に、プログラム中のDOループに対して分割され
た配列を含んだループであるか否かを判定する(ステッ
プ120)。当該ループが分割された配列を含む場合
は、次に、DOループの初期値、終値が定数で表されて
いるか否かを判定する(ステップ130)。当該ループ
の初期値、終値が定数で表されている場合は、ステップ
110で作成した配列データ分割テーブルを参照して、
分割された配列の添字の範囲と当該ループのDO制御変
数の値の集合を計算し(ステップ140)、初期値、終
値を局所配列の添字の範囲に置き換えたDOループオブ
ジェクトを生成する(ステップ150)。また、ステッ
プ130で当該ループの初期値、終値が定数で表されて
いない場合は、初期値、終値に対して局所配列の添字の
範囲を計算するオブジェクトと、その範囲を繰り返すD
Oループオブジェクトを生成する(ステップ160)。
一方、ステップ120で当該ループが分割された配列を
含まない場合は、当該DOループを分割しない。
【0013】以下に処理の具体例を示す。図3はFOR
TRANソースプログラムの一例である。ここで、図3
(1)のFORTRANソースプログラムAは、高級言
語(High Performance Fortran)で定義された並列
実行向けの分割指示と、その配列データに対するDOル
ープの例である。この例は、図8の例と同じであり、配
列Aを4つのプロセッサに25要素ずつ連続に分割す
る。図3(2)のFORTRANソースプログラムB
も、High Performance Fortranで定義された並列実
行向けの分割指示と、その配列データに対するDOルー
プの例であるが、この例では、配列Aを4つのプロセッ
サに循環的に分割する。図3(3)のFORTRANソ
ースプログラムCは、High Performance Fortranで
定義された並列実行向けの分割指示と、その配列データ
に対するDOループの初期値、終値がコンパイル時に不
明な場合の例である。この例では配列Aを4つのプロセ
ッサに25要素づつ連続に分割する。また、DOループ
の初期値、終値は実行時に動的に決まる。
TRANソースプログラムの一例である。ここで、図3
(1)のFORTRANソースプログラムAは、高級言
語(High Performance Fortran)で定義された並列
実行向けの分割指示と、その配列データに対するDOル
ープの例である。この例は、図8の例と同じであり、配
列Aを4つのプロセッサに25要素ずつ連続に分割す
る。図3(2)のFORTRANソースプログラムB
も、High Performance Fortranで定義された並列実
行向けの分割指示と、その配列データに対するDOルー
プの例であるが、この例では、配列Aを4つのプロセッ
サに循環的に分割する。図3(3)のFORTRANソ
ースプログラムCは、High Performance Fortranで
定義された並列実行向けの分割指示と、その配列データ
に対するDOループの初期値、終値がコンパイル時に不
明な場合の例である。この例では配列Aを4つのプロセ
ッサに25要素づつ連続に分割する。また、DOループ
の初期値、終値は実行時に動的に決まる。
【0014】図4に、図3(1)のFORTRANソー
スプログラムA中の配列Aに対して連続的に分割された
配列データ分割テーブルを示す。図において、プロセッ
サ番号411は分割された配列を保持するプロセッサの
番号(本例では0〜3)、大域添字値412は分割前の
配列に対する添字の値(本例では1〜100)、局所添
字値413は、プロセッサ番号411対応の分割後の局
所配列に対する添字の値(本例では1〜25)である。
大域添字値412から局所添字値413への変換は、プ
ロセッサ番号をip、大域添字値をgx、局所添字値を
lxとすると、 lx=gx−ip×25 (1) で計算できる。
スプログラムA中の配列Aに対して連続的に分割された
配列データ分割テーブルを示す。図において、プロセッ
サ番号411は分割された配列を保持するプロセッサの
番号(本例では0〜3)、大域添字値412は分割前の
配列に対する添字の値(本例では1〜100)、局所添
字値413は、プロセッサ番号411対応の分割後の局
所配列に対する添字の値(本例では1〜25)である。
大域添字値412から局所添字値413への変換は、プ
ロセッサ番号をip、大域添字値をgx、局所添字値を
lxとすると、 lx=gx−ip×25 (1) で計算できる。
【0015】図5に、図3(2)のFORTRANソー
スプログラムB中の配列Aに対して循環的に分割された
配列データ分割テーブルを示す。図において、プロセッ
サ番号511は分割された配列を保持するプロセッサの
番号(本例では0〜3)、大域添字値512は分割前の
配列に対する添字の値(本例では1〜100で、プロセ
ッサ間で循環的に割当てる)、局所添字値513は、プ
ロセッサ番号511対応の分割後の局所配列に対する添
字の値(本例では1〜25)である。大域添字値512
から局所添字値513への変換は、プロセッサ数を4、
大域添字値をgx、局所添字値をlxとすると、 lx={(gx−1) div 4}+1 (2) で計算できる。また、大域添字値512の配列要素を保
持するプロセッサ番号511は、プロセッサ数を4、大
域添字値をgx、プロセッサ番号をipとすると、 ip=(gx−1) mod 4 (3) で計算できる。この計算によって作成された配列データ
分割テーブルを参照することにより、循環的に分割され
た配列をプロセッサごとに連続な添字を持つ配列として
扱うことが出来る。
スプログラムB中の配列Aに対して循環的に分割された
配列データ分割テーブルを示す。図において、プロセッ
サ番号511は分割された配列を保持するプロセッサの
番号(本例では0〜3)、大域添字値512は分割前の
配列に対する添字の値(本例では1〜100で、プロセ
ッサ間で循環的に割当てる)、局所添字値513は、プ
ロセッサ番号511対応の分割後の局所配列に対する添
字の値(本例では1〜25)である。大域添字値512
から局所添字値513への変換は、プロセッサ数を4、
大域添字値をgx、局所添字値をlxとすると、 lx={(gx−1) div 4}+1 (2) で計算できる。また、大域添字値512の配列要素を保
持するプロセッサ番号511は、プロセッサ数を4、大
域添字値をgx、プロセッサ番号をipとすると、 ip=(gx−1) mod 4 (3) で計算できる。この計算によって作成された配列データ
分割テーブルを参照することにより、循環的に分割され
た配列をプロセッサごとに連続な添字を持つ配列として
扱うことが出来る。
【0016】次に、図3(3)のFORTRANソース
プログラムCの例では、配列データに対するDOループ
の初期値、終値がコンパイラ時に不明なため、図4や図
5に示す配列データ分割テーブルを作成することができ
ない。この場合は、初期値、終値に対して局所配列の添
字の範囲を計算するオブジェクトと、その範囲を繰り返
すDOループオブジェクトを生成する(図2のステップ
160)。図3(3)の例の配列が連続的に分割された
場合では、初期値、終値に対する局所配列の添字の範囲
は、元のDOループの初期値をn、終値をmとすると、
n、mを大域添字値とした各プロセッサipの局所添字
値の範囲であるn−ip×25〜ip×25と、各プロ
セッサIPの実際の局所添字値の範囲である1〜25と
の重なる部分として計算でき、それぞれ、局所初期値を
ln、局所終値lmとすると、 ln=max{1,min(26,n−ip×25)} (4) lm=mix{25,max(0,m−ip×25)} (5) となる。ここで、max,mixはそれぞれ最大値、最
小値をとる関数である。また、配列が循環的に分割され
た場合では、初期値、終値に対する局所配列の添字の範
囲は、元のDOループの初期値をn、終値をmとする
と、n、mを大域添字値とした局所添字の範囲である
((n−1) div 4)+1((m−1) div4)+1
を各プロセッサipに±1に補正を行うことにより計算
できる。
プログラムCの例では、配列データに対するDOループ
の初期値、終値がコンパイラ時に不明なため、図4や図
5に示す配列データ分割テーブルを作成することができ
ない。この場合は、初期値、終値に対して局所配列の添
字の範囲を計算するオブジェクトと、その範囲を繰り返
すDOループオブジェクトを生成する(図2のステップ
160)。図3(3)の例の配列が連続的に分割された
場合では、初期値、終値に対する局所配列の添字の範囲
は、元のDOループの初期値をn、終値をmとすると、
n、mを大域添字値とした各プロセッサipの局所添字
値の範囲であるn−ip×25〜ip×25と、各プロ
セッサIPの実際の局所添字値の範囲である1〜25と
の重なる部分として計算でき、それぞれ、局所初期値を
ln、局所終値lmとすると、 ln=max{1,min(26,n−ip×25)} (4) lm=mix{25,max(0,m−ip×25)} (5) となる。ここで、max,mixはそれぞれ最大値、最
小値をとる関数である。また、配列が循環的に分割され
た場合では、初期値、終値に対する局所配列の添字の範
囲は、元のDOループの初期値をn、終値をmとする
と、n、mを大域添字値とした局所添字の範囲である
((n−1) div 4)+1((m−1) div4)+1
を各プロセッサipに±1に補正を行うことにより計算
できる。
【0017】図6に、変換された目的プログラムの例を
示す。なお、図3との対応が一見して分かるように、図
6ではFORTRANライクに記述してある。図6
(1)のFORTRANライクの目的プログラムAは、
図3(1)のFORTRANソースプログラムAに対し
て、図4の配列データ分割テーブルを参照して、図2の
ステップ140,150の処理が行なわれた結果を示し
たものである。この例では、DOループの初期値、終値
はプロセッサ数で分割された局所配列の添字の範囲内で
ある1から25の範囲に変換される。図6(2)のFO
RTRANライクの目的プログラムBは、図3(2)の
FORTRANソースプログラムBに対して、図5の配
列データ分割テーブルを参照して、同じく図2のステッ
プ140,150の処理が行なわれた結果を示したもの
である。この例では、循環的な分割指示が行なわれた配
列データに対して連続な局所添字に変換される。図6
(3)のFORTRANライクの目的プログラムCは、
図3(3)のFORTRANソースプログラムCに対し
て、図2のステップ160の処理が行なわれた結果を示
したものである。この例では、DOループの初期値、終
値が定数でないため、DO変数の値が局所配列の範囲内
になるように初期値と終値を計算した値を一時的変数に
置き、その範囲でループを繰り返す。
示す。なお、図3との対応が一見して分かるように、図
6ではFORTRANライクに記述してある。図6
(1)のFORTRANライクの目的プログラムAは、
図3(1)のFORTRANソースプログラムAに対し
て、図4の配列データ分割テーブルを参照して、図2の
ステップ140,150の処理が行なわれた結果を示し
たものである。この例では、DOループの初期値、終値
はプロセッサ数で分割された局所配列の添字の範囲内で
ある1から25の範囲に変換される。図6(2)のFO
RTRANライクの目的プログラムBは、図3(2)の
FORTRANソースプログラムBに対して、図5の配
列データ分割テーブルを参照して、同じく図2のステッ
プ140,150の処理が行なわれた結果を示したもの
である。この例では、循環的な分割指示が行なわれた配
列データに対して連続な局所添字に変換される。図6
(3)のFORTRANライクの目的プログラムCは、
図3(3)のFORTRANソースプログラムCに対し
て、図2のステップ160の処理が行なわれた結果を示
したものである。この例では、DOループの初期値、終
値が定数でないため、DO変数の値が局所配列の範囲内
になるように初期値と終値を計算した値を一時的変数に
置き、その範囲でループを繰り返す。
【0018】図7は、本発明による分散記憶向け並列計
算機の構成例として、図3(1)に示すソースプログラ
ムの指示により、配列データAの要素1〜100を4台
のプロセッサに25要素ずつ連続に分散してDOループ
を実行する構成を示したものである。図において、4台
のプロセッサ700〜730には、図3(1)のFOR
TRANソースプログラムAを変更した図6(1)に示
す目的プログラムAがロードされる。このプロセッサ7
00〜730の目的プログラムは同一構成である。記憶
装置740の配列データAの要素1〜100は、25要
素ずつ連続に分割されて、各々、プロセッサ700には
要素1〜25、プロセッサ410には要素26〜50、
プロセッサ720には要素51〜75、プロセッサ73
0には要素76〜100が分散格納される。この場合、
プロセッサ700〜730が、要素1〜100中のどの
要素群を格納すべきかは、先の式(1)で計算できる。
同様に、要素1〜100を、プロセッサ700〜730
に循環的に分散格納する場合は、先の式(2)で計算で
きる。なお、図4や図5に示したような配列データ分割
テーブルの大域添字値と局所添字値の対応をプロセッサ
に与えれば、計算を省略することができる。
算機の構成例として、図3(1)に示すソースプログラ
ムの指示により、配列データAの要素1〜100を4台
のプロセッサに25要素ずつ連続に分散してDOループ
を実行する構成を示したものである。図において、4台
のプロセッサ700〜730には、図3(1)のFOR
TRANソースプログラムAを変更した図6(1)に示
す目的プログラムAがロードされる。このプロセッサ7
00〜730の目的プログラムは同一構成である。記憶
装置740の配列データAの要素1〜100は、25要
素ずつ連続に分割されて、各々、プロセッサ700には
要素1〜25、プロセッサ410には要素26〜50、
プロセッサ720には要素51〜75、プロセッサ73
0には要素76〜100が分散格納される。この場合、
プロセッサ700〜730が、要素1〜100中のどの
要素群を格納すべきかは、先の式(1)で計算できる。
同様に、要素1〜100を、プロセッサ700〜730
に循環的に分散格納する場合は、先の式(2)で計算で
きる。なお、図4や図5に示したような配列データ分割
テーブルの大域添字値と局所添字値の対応をプロセッサ
に与えれば、計算を省略することができる。
【0019】図6(1)に示したように、プロセッサ7
00〜730にロードされた目的プログラムのDOルー
プ内の配列の添字は、プロセッサ700〜730に分散
格納された局所配列Aの添字の範囲内であることを保証
している。この結果、プロセッサ700〜730では、
DOループ内における添字範囲の判定を行うことなく、
各々、自プロセッサに分散格納された配列データに対す
るDOループの実行を効率よく行うことができる。
00〜730にロードされた目的プログラムのDOルー
プ内の配列の添字は、プロセッサ700〜730に分散
格納された局所配列Aの添字の範囲内であることを保証
している。この結果、プロセッサ700〜730では、
DOループ内における添字範囲の判定を行うことなく、
各々、自プロセッサに分散格納された配列データに対す
るDOループの実行を効率よく行うことができる。
【0020】以上、実施例では、高級言語ソースプログ
ラムとしてFORTRAN(HighPerformance Fortr
an)を例に説明したが、本発明は、これに限定されない
ことは言うまでもない(例えば、COBOL、C言語で
もよい)。
ラムとしてFORTRAN(HighPerformance Fortr
an)を例に説明したが、本発明は、これに限定されない
ことは言うまでもない(例えば、COBOL、C言語で
もよい)。
【0021】
【発明の効果】本発明によれば、並列実行向けの分割指
示と配列に対する大域のDOループを定義した高級言語
のソースプログラムを並列計算機の各プロセッサ向けの
目的プログラム(オブジェクト、目的コード)に変換す
るコンパイラにおいて、DOループの制御変数の値をプ
ロセッサの持つ局所配列の添字の範囲に変更したオブジ
ェクトを生成するため、プロセッサでは、分散された配
列型データのアクセスを行うDOループの実行をDOル
ープ内の判定なしに行うことができ、高速実行が可能に
なる。
示と配列に対する大域のDOループを定義した高級言語
のソースプログラムを並列計算機の各プロセッサ向けの
目的プログラム(オブジェクト、目的コード)に変換す
るコンパイラにおいて、DOループの制御変数の値をプ
ロセッサの持つ局所配列の添字の範囲に変更したオブジ
ェクトを生成するため、プロセッサでは、分散された配
列型データのアクセスを行うDOループの実行をDOル
ープ内の判定なしに行うことができ、高速実行が可能に
なる。
【図1】本発明の一実施例にかかるコンパイラの全体の
構成図を示す。
構成図を示す。
【図2】本発明の一実施例によるDOループ分割処理の
フローチャートを示す。
フローチャートを示す。
【図3】FORTRANソースプログラムの一例を示
す。
す。
【図4】図3(1)の例に対する配列データ分割テーブ
ルを示す。
ルを示す。
【図5】図3(2)の例に対する配列データ分割テーブ
ルを示す。
ルを示す。
【図6】図3(1)、(2)、(3)のFORTRAN
ソースプログラムに対する本発明による目的プログラム
を示す。
ソースプログラムに対する本発明による目的プログラム
を示す。
【図7】本発明による分散記憶向け並列計算機の構成例
を示す。
を示す。
【図8】FORTRANソースプログラムの一例を示
す。
す。
【図9】従来技術による分散記憶向け並列計算機の構成
例を示す。
例を示す。
10 コンパイラ 11 構文解析部 12 中間部 13 コード生成部 21 FORTRANソースプログラム 22 中間言語 23 中間言語 30 目的プログラム
Claims (2)
- 【請求項1】 並列実行向けの分割指示と配列に対する
大域のDOループを定義した高級言語のソースプログラ
ムを、並列計算機の各プロセッサ向けの目的プログラム
に変換するコンパイラであって、 前記ソースプログラムで定義された並列実行の分割指示
に従って、指定された配列を分割する手段と、 分割前の配列に対する添字の範囲と分割後の局所配列に
対する添字の範囲の関係を解析し、DOループ制御変数
の初期値、終値を局所配列の添字の範囲内とするDOル
ープオブジェクトを生成する手段と、を有することを特
徴とするコンパイラ。 - 【請求項2】 請求項1記載のコンパイラにおいて、D
Oループの初期値、終値が不明な場合には、初期値、終
値に対して局所配列の添字の範囲を計算するオブジェク
トと、前記範囲を繰り返すDOループオブジェクトを生
成する手段を有することを特徴とするコンパイラ。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2818195A JPH08221276A (ja) | 1995-02-16 | 1995-02-16 | コンパイラ |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2818195A JPH08221276A (ja) | 1995-02-16 | 1995-02-16 | コンパイラ |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH08221276A true JPH08221276A (ja) | 1996-08-30 |
Family
ID=12241551
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2818195A Pending JPH08221276A (ja) | 1995-02-16 | 1995-02-16 | コンパイラ |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH08221276A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2006024088A (ja) * | 2004-07-09 | 2006-01-26 | Fujitsu Ltd | トランスレータプログラム、プログラム変換方法およびトランスレータ装置 |
| KR101349631B1 (ko) * | 2011-12-07 | 2014-01-09 | 한국과학기술연구원 | 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체 |
-
1995
- 1995-02-16 JP JP2818195A patent/JPH08221276A/ja active Pending
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2006024088A (ja) * | 2004-07-09 | 2006-01-26 | Fujitsu Ltd | トランスレータプログラム、プログラム変換方法およびトランスレータ装置 |
| KR101349631B1 (ko) * | 2011-12-07 | 2014-01-09 | 한국과학기술연구원 | 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US4833606A (en) | Compiling method for vectorizing multiple do-loops in source program | |
| JP2921190B2 (ja) | 並列実行方式 | |
| US20010039654A1 (en) | Compiler processing system for generating assembly program codes for a computer comprising a plurality of arithmetic units | |
| JPH1097430A (ja) | 最適化のためにアセンブリコードルーチンをソースコードルーチンに挿入する方法およびそのシステム | |
| JP2001167060A (ja) | タスク並列化方法 | |
| US5522074A (en) | Vectorization system for vectorizing loop containing condition induction variables | |
| Rauber et al. | A transformation approach to derive efficient parallel implementations | |
| Vasilev et al. | Loop-invariant optimization in the Pifagor language | |
| Lee et al. | Global optimization for mapping parallel image processing tasks on distributed memory machines | |
| Willis et al. | Optimizing VHDL compilation for parallel simulation | |
| CN118297099A (zh) | 一种模型优化方法、模型优化装置以及计算机存储介质 | |
| JP3032030B2 (ja) | ループ最適化方法及び装置 | |
| Bratvold | Determining useful parallelism in higher order functions | |
| Wei et al. | Minimizing communication in rate-optimal software pipelining for stream programs | |
| Wang et al. | A general-purpose compiler design for instruction-based AI accelerator implementation | |
| JPH0512033A (ja) | 並列化コンパイル方式 | |
| JPS63155264A (ja) | ベクトル計算機用言語チユ−ニング処理方式 | |
| JPH06290159A (ja) | 並列計算機のプロセス割当方法 | |
| JP3311775B2 (ja) | ポインタベクトル化方式 | |
| JPH10326193A (ja) | インライン展開関数の最適化のためのコンパイル方法 | |
| Wichmann | An experimental parallelizing systolic compiler for regular programs | |
| Cosnard et al. | Automatic coarse-grained parallelization techniques | |
| JPH07234794A (ja) | マルチプロセッサシステムにおける目的プログラム生成方法 | |
| JPS62169272A (ja) | ベクトル演算列ル−プアンロ−リング処理方式 | |
| Knobe et al. | Compiling to TStreams, a new model of parallel computation |