JP2738692B2 - 並列化コンパイル方法 - Google Patents
並列化コンパイル方法Info
- Publication number
- JP2738692B2 JP2738692B2 JP63017075A JP1707588A JP2738692B2 JP 2738692 B2 JP2738692 B2 JP 2738692B2 JP 63017075 A JP63017075 A JP 63017075A JP 1707588 A JP1707588 A JP 1707588A JP 2738692 B2 JP2738692 B2 JP 2738692B2
- Authority
- JP
- Japan
- Prior art keywords
- processor
- data
- parallel
- program
- execution type
- 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.)
- Expired - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
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)
- Multi Processors (AREA)
Description
【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、並列計算機システムに係り、特に逐次実行
型の高級言語で記述されたソース・プログラムから、並
列に実行するのに好適なオブジェクトプログラムを生成
する方法に関する。
型の高級言語で記述されたソース・プログラムから、並
列に実行するのに好適なオブジェクトプログラムを生成
する方法に関する。
従来、マルチプロセッサのような並列処理システムに
おいては、ユーザインタフェースとして、逐次型のソー
スプログラムに、並列化の手段,タスクの起動,同期な
どの指示を明示的にユーザが記述する必要があった。AC
M−0−89791−174−1−12185−0107, A Data Flow Approach to Multitasking on CRAY X−MP
computersでは、4台のベクトルプロセッサを並列に動
作させるマルチタスキングの動作と、そのためのユーザ
の指示方法について述べられている。これによれば、タ
スクの起動や同期の制御のためのライブラリがシステム
に用意されており、ユーザはFORTRANプログラムの中
で、これらを呼び出すように記述する。さらに細いレベ
ルでは、ループごとに並列化の手段をコメント形式の制
御文の形でコンパイラに指示する必要がある。
おいては、ユーザインタフェースとして、逐次型のソー
スプログラムに、並列化の手段,タスクの起動,同期な
どの指示を明示的にユーザが記述する必要があった。AC
M−0−89791−174−1−12185−0107, A Data Flow Approach to Multitasking on CRAY X−MP
computersでは、4台のベクトルプロセッサを並列に動
作させるマルチタスキングの動作と、そのためのユーザ
の指示方法について述べられている。これによれば、タ
スクの起動や同期の制御のためのライブラリがシステム
に用意されており、ユーザはFORTRANプログラムの中
で、これらを呼び出すように記述する。さらに細いレベ
ルでは、ループごとに並列化の手段をコメント形式の制
御文の形でコンパイラに指示する必要がある。
このようなマルチプロセッサシステムに対して、逐次
型のコンパイル言語から自動的に並列化する手法につい
て言及したものはない。
型のコンパイル言語から自動的に並列化する手法につい
て言及したものはない。
一方、第2図に示すような並列処理システムでは、送
信処理と受信処理が独立に行われる。この様なシステム
は、特願昭61−182361に詳細に記載されている。この並
列処理システムを簡単に説明すると、 (1) このシステムはホスト計算機121と並列処理部1
22から構成され、さらに、並列処理部122は複数台のプ
ロセッサ123と任意のプロセッサ間でデータ転送可能な
ネットワーク124から構成される。
信処理と受信処理が独立に行われる。この様なシステム
は、特願昭61−182361に詳細に記載されている。この並
列処理システムを簡単に説明すると、 (1) このシステムはホスト計算機121と並列処理部1
22から構成され、さらに、並列処理部122は複数台のプ
ロセッサ123と任意のプロセッサ間でデータ転送可能な
ネットワーク124から構成される。
(2) 各プロセッサ123は、プログラムやデータを保
持するローカルメモリ125と、ローカルメモリ125から順
次命令を読み出し、実行する命令処理部126と、送信部1
27および受信部128から構成される。
持するローカルメモリ125と、ローカルメモリ125から順
次命令を読み出し、実行する命令処理部126と、送信部1
27および受信部128から構成される。
(3) データ送信処理は、送信命令(Send命令)を実
行することにより実現される。Send命令が解読される
と、そのオペランドで指定したレジスタから、転送先プ
ロセッサ番号,データ識別子およびデータを送信部127
のレジスタ132にセットする。レジスタ132の3つの情報
は、メッセージとして、ネットワーク124に送られる。
ネットワーク124上のメッセージは、メッセージ内の転
送先プロセッサ番号で示されたプロセッサの受信部内受
信バッファ129に、データ識別子130とデータ131の組と
して取り込まれる。
行することにより実現される。Send命令が解読される
と、そのオペランドで指定したレジスタから、転送先プ
ロセッサ番号,データ識別子およびデータを送信部127
のレジスタ132にセットする。レジスタ132の3つの情報
は、メッセージとして、ネットワーク124に送られる。
ネットワーク124上のメッセージは、メッセージ内の転
送先プロセッサ番号で示されたプロセッサの受信部内受
信バッファ129に、データ識別子130とデータ131の組と
して取り込まれる。
(4) データ受信処理は、受信命令(Receive命令)
を実行することにより実現される。
を実行することにより実現される。
Receive命令が解読されると、そのオペランドで指定
したレジスタから検索用の識別子を取り出し、受信部12
8に送る。受信部128では、受信バッファ129の中から、
検索用の識別子と一致するデータ識別子を検索する。も
し、一致するデータ識別子がない場合は、一致するデー
タ識別子が到着するまで待つ。もし、一致するデータ識
別子がある場合は命令処理部に報告する。命令処理部は
対応するデータを取り込む。
したレジスタから検索用の識別子を取り出し、受信部12
8に送る。受信部128では、受信バッファ129の中から、
検索用の識別子と一致するデータ識別子を検索する。も
し、一致するデータ識別子がない場合は、一致するデー
タ識別子が到着するまで待つ。もし、一致するデータ識
別子がある場合は命令処理部に報告する。命令処理部は
対応するデータを取り込む。
このとき、Send処理とReceive処理は独立に実行され
るため、データ識別子により一意性を保つことが重要と
なる。
るため、データ識別子により一意性を保つことが重要と
なる。
このデータ識別子の設定は、プログラムの静的な構造
のみでは決めることはむずかしく、動的な構造を考慮す
る必要がある。
のみでは決めることはむずかしく、動的な構造を考慮す
る必要がある。
ところがこのような並列計算機に対して逐次形のコン
パイル言語から自動的に並列化するとき、データ識別子
を自動的に生成する手法について言及したものは今まで
なかつた。
パイル言語から自動的に並列化するとき、データ識別子
を自動的に生成する手法について言及したものは今まで
なかつた。
〔発明が解決しようとする問題点〕 上記従来技術は、並列処理が可能なハードウエアに対
して、自動的にデータ識別子を生成して並列化する点に
ついては配慮されておらず、ユーザ自身が、並列処理の
手段を考え、それを明示的にプログラムに埋め込むとい
うプログラム変換が必要であった。従って、財産として
ユーザが持っていた逐次型のプログラムをそのままの形
で並列実行させることはできず、並列処理向きに再コー
ディングさらにそのデバッグが必要となる。また、ハー
ドウエアの特性が変わるたびに、その資源を有効に使う
ために、並列化の指示を変更する必要があり、他のシス
テムでは動かないなど、ユーザプログラムの汎用性が損
われるなどの問題点があった。
して、自動的にデータ識別子を生成して並列化する点に
ついては配慮されておらず、ユーザ自身が、並列処理の
手段を考え、それを明示的にプログラムに埋め込むとい
うプログラム変換が必要であった。従って、財産として
ユーザが持っていた逐次型のプログラムをそのままの形
で並列実行させることはできず、並列処理向きに再コー
ディングさらにそのデバッグが必要となる。また、ハー
ドウエアの特性が変わるたびに、その資源を有効に使う
ために、並列化の指示を変更する必要があり、他のシス
テムでは動かないなど、ユーザプログラムの汎用性が損
われるなどの問題点があった。
本発明の目的は、上記のようなユーザの負担を軽減
し、既に存在する逐次型のプログラムはそのまま手を入
れることなくプロセッサ間で、データのSendやReceive
を伴う並列コードを自動生成する上で必要となるデータ
の識別子を自動生成することにより、自動並列化を容易
にでき、かつ新しくコーディングする場合においても、
ハードウエアの細い特性を意識しなくても効率のよいオ
ブジェクトコードを生成できるようにすることにある。
し、既に存在する逐次型のプログラムはそのまま手を入
れることなくプロセッサ間で、データのSendやReceive
を伴う並列コードを自動生成する上で必要となるデータ
の識別子を自動生成することにより、自動並列化を容易
にでき、かつ新しくコーディングする場合においても、
ハードウエアの細い特性を意識しなくても効率のよいオ
ブジェクトコードを生成できるようにすることにある。
上記目的は、番号付けられた複数のプロセッサから構
成され、データ識別子により転送データを識別するプロ
セッサ間データ転送方式を用いる並列プロセッサを対象
とし、高級言語で記述された逐次処理型ソースプログラ
ムから並列実行のためのオブジェクトコードを生成する
コンパイラにおいて、まず逐次実行型ソースプログラム
を並列実行型プログラムに変換し、変換によって得られ
た並列実行型プログラムを実行するときの処理の流れの
中からプロセッサ間データ転送処理を抽出し、抽出した
すべてのプロセッサ間データ転送処理に対して重なりの
ないデータ識別子を付けることにより達成される。重な
りのないデータ識別子を付けるためには、並列プロセッ
サが有するプロセッサ数,並列実行型プログラムを実行
させるプロセッサ番号,並列実行型プログラム中のルー
プ識別番号,ループ長,ループ内のデータ転送処理の数
またはループ内の番号の1つ以上を引数とし、引数と関
数値が1対1対応になる関数を決定する。この関数の値
を重なりのないデータ識別子にすればよい。
成され、データ識別子により転送データを識別するプロ
セッサ間データ転送方式を用いる並列プロセッサを対象
とし、高級言語で記述された逐次処理型ソースプログラ
ムから並列実行のためのオブジェクトコードを生成する
コンパイラにおいて、まず逐次実行型ソースプログラム
を並列実行型プログラムに変換し、変換によって得られ
た並列実行型プログラムを実行するときの処理の流れの
中からプロセッサ間データ転送処理を抽出し、抽出した
すべてのプロセッサ間データ転送処理に対して重なりの
ないデータ識別子を付けることにより達成される。重な
りのないデータ識別子を付けるためには、並列プロセッ
サが有するプロセッサ数,並列実行型プログラムを実行
させるプロセッサ番号,並列実行型プログラム中のルー
プ識別番号,ループ長,ループ内のデータ転送処理の数
またはループ内の番号の1つ以上を引数とし、引数と関
数値が1対1対応になる関数を決定する。この関数の値
を重なりのないデータ識別子にすればよい。
上記方法によれば、逐次実行型プログラムを並列化
し、データ識別子を自動生成するので、ユーザは従来か
ら蓄積してきたプログラムの財産を並列プロセッサ向け
に書き直す必要がなくなる。これにより上記目的を達成
することができる。
し、データ識別子を自動生成するので、ユーザは従来か
ら蓄積してきたプログラムの財産を並列プロセッサ向け
に書き直す必要がなくなる。これにより上記目的を達成
することができる。
以下、複数台のプロセッサと各プロセッサ相互間でデ
ータ転送を行うための通信路を備えた並列プロセッサの
ためのFORTRANコンパイラにおける、本発明の一実施例
を図表を参照しつつ説明する。
ータ転送を行うための通信路を備えた並列プロセッサの
ためのFORTRANコンパイラにおける、本発明の一実施例
を図表を参照しつつ説明する。
第2図は適用する並列プロセッサの例を示す。ここで
は、主記憶を共有しない形態の並列プロセッサ・システ
ムを例にとり実施例を説明するが、本発明は、主記憶を
共有する形態のマルチプロセッサ・システムにも適用可
能である。複数の並列に動作するプロセッサがあり、こ
れらはネットワークを共有する。従って、各プロセッサ
がデータを送受信する場合には、同期制御によりそのデ
ータの順序性あるいは一意性を保証する必要がある。こ
のようなハードウエアの資源を有効に用いて、計算結果
を得るまでの経過時間が短くなるように、データの送受
信を行うSend−Receive命令を出したとき、データの一
意性を保証するようなオブジェクトコードを生成する本
発明の詳細な実施例を述べる。
は、主記憶を共有しない形態の並列プロセッサ・システ
ムを例にとり実施例を説明するが、本発明は、主記憶を
共有する形態のマルチプロセッサ・システムにも適用可
能である。複数の並列に動作するプロセッサがあり、こ
れらはネットワークを共有する。従って、各プロセッサ
がデータを送受信する場合には、同期制御によりそのデ
ータの順序性あるいは一意性を保証する必要がある。こ
のようなハードウエアの資源を有効に用いて、計算結果
を得るまでの経過時間が短くなるように、データの送受
信を行うSend−Receive命令を出したとき、データの一
意性を保証するようなオブジェクトコードを生成する本
発明の詳細な実施例を述べる。
第3図に、本発明を適用するコンパイラ全体の構成を
示す。第3図内の構文解析処理13がFORTRANのソースプ
ログラム11を入力とし、これを中間語6に変換する。中
間処理14はこの中間語6を入力として、最適化や並列化
を行い、中間語6を変形する。コード生成処理15は、中
間処理14が変形した中間語から並列に実行されるオブジ
ェクトコード12を生成する。本発明は、中間処理4に係
り、オブジェクトコード12を並列に実行させるために必
要なデータの送受信のためのデータ識別子を一意性を保
証しつつ自動的に生成することにより、プログラミング
効率を高めるものである。
示す。第3図内の構文解析処理13がFORTRANのソースプ
ログラム11を入力とし、これを中間語6に変換する。中
間処理14はこの中間語6を入力として、最適化や並列化
を行い、中間語6を変形する。コード生成処理15は、中
間処理14が変形した中間語から並列に実行されるオブジ
ェクトコード12を生成する。本発明は、中間処理4に係
り、オブジェクトコード12を並列に実行させるために必
要なデータの送受信のためのデータ識別子を一意性を保
証しつつ自動的に生成することにより、プログラミング
効率を高めるものである。
第3図の中間処理14のうち、自動並列化に係わる処理
の構成を第1図に示す。第3図の入力するソースプログ
ラム11の例として、第4図にFORTRANプログラムをあげ
て説明する。第4図のFORTRANプログラムから中間処理1
4は、DO 10のループテーブル(一般の場合は多重ループ
のテーブル)を作る。このループの構造を解析し、並列
性の検出やループの多重度,演算精度の評価および並列
化手段の選択を行うことは第1図処理2によって行な
い、各プロセッサ(PE)へのプログラムおよびデータの
割り付けは処理3によって行なう。また同期制御にあた
るデータのSend−Receive命令を用いたプロセッサ間の
データ送受信のデータの個数やPE番号等の解析は処理4
で行なわれる。以上の2,3,4の処理の結果は7のPEのデ
ータテーブルおよびPE間のデータ送受信テーブルに書き
込まれ、第6図のように、PE番号,ループ各称およびル
ープ長,変数または配列名と各PEで持たれる個数、およ
び、何番のPEから何番のPEへデータがどう送られるか、
またはその逆にどうデータを受けとるかのテーブルが作
れる。以上の技術は、公知の例、たとえば、H.P.Zima,e
t al.SUPERB:The SUPRENUM Parallelizer,Bon Universi
ty research report 861203によって実現することが可
能である。
の構成を第1図に示す。第3図の入力するソースプログ
ラム11の例として、第4図にFORTRANプログラムをあげ
て説明する。第4図のFORTRANプログラムから中間処理1
4は、DO 10のループテーブル(一般の場合は多重ループ
のテーブル)を作る。このループの構造を解析し、並列
性の検出やループの多重度,演算精度の評価および並列
化手段の選択を行うことは第1図処理2によって行な
い、各プロセッサ(PE)へのプログラムおよびデータの
割り付けは処理3によって行なう。また同期制御にあた
るデータのSend−Receive命令を用いたプロセッサ間の
データ送受信のデータの個数やPE番号等の解析は処理4
で行なわれる。以上の2,3,4の処理の結果は7のPEのデ
ータテーブルおよびPE間のデータ送受信テーブルに書き
込まれ、第6図のように、PE番号,ループ各称およびル
ープ長,変数または配列名と各PEで持たれる個数、およ
び、何番のPEから何番のPEへデータがどう送られるか、
またはその逆にどうデータを受けとるかのテーブルが作
れる。以上の技術は、公知の例、たとえば、H.P.Zima,e
t al.SUPERB:The SUPRENUM Parallelizer,Bon Universi
ty research report 861203によって実現することが可
能である。
以上の自動並列化手段によって、第4図にある逐次型
のプログラムは第5図のプログラムに変換される。第5
図では、PEの台数が2台として示したが、この手法はも
っと多数台のPE台に対しても同様に成り立つ。ここで
は、文16のDO 10のループ長はそのままPE−1およびPE
−2で保たれ、文17および文18の演算がそれぞれPE−1
とPE−2に分割され、文29,文34に対応する。各PEでは
必要なデータが別のPEで保持されているため、文28,文3
3にあるように相手が必要なデータを相手に送るためにS
end命令が必要になる。ここで文28のSend命令の2はデ
ータを送る先のPE番号であり、 KEYはこれから決めようとするデータ識別子であり、
A(I−1)は送るデータである。文33に対しても同様
である。ここで文29のRECEIVE命令はKEYだけでデータが
指定できるのでKeyだけ指定すればデータを受けとれ
る。
のプログラムは第5図のプログラムに変換される。第5
図では、PEの台数が2台として示したが、この手法はも
っと多数台のPE台に対しても同様に成り立つ。ここで
は、文16のDO 10のループ長はそのままPE−1およびPE
−2で保たれ、文17および文18の演算がそれぞれPE−1
とPE−2に分割され、文29,文34に対応する。各PEでは
必要なデータが別のPEで保持されているため、文28,文3
3にあるように相手が必要なデータを相手に送るためにS
end命令が必要になる。ここで文28のSend命令の2はデ
ータを送る先のPE番号であり、 KEYはこれから決めようとするデータ識別子であり、
A(I−1)は送るデータである。文33に対しても同様
である。ここで文29のRECEIVE命令はKEYだけでデータが
指定できるのでKeyだけ指定すればデータを受けとれ
る。
この場合にもSend命令とReceive命令は一般には対応
させて発行するのでどちらか一方のデータ識別子を決定
するだけで、他方は自動的に決まる。
させて発行するのでどちらか一方のデータ識別子を決定
するだけで、他方は自動的に決まる。
次に第6図のPEのデータ・テーブルおよびPE間データ
・テーブルから、第1図5のデータ識別子をいかに一般
的に決定するかを、第7図を参照しつつ述べる。テーブ
ル7あるいは第6図より、処理270は各々のPEに対し、S
end命令に対し、ループ制御変数を探し出す。この場合
には各PEともにIがループ制御変数である。次に処理28
0は、Sendされる変数または配列名を探し出す。第8図
に示すように、PE−1では配列A,PE−2では配列Bであ
る。処理290では、ループ中の変数や配列の個数すなわ
ちSendの回数を数える。PE−1およびPE−2ともに1と
なる。処理300は全PEのなかでSend命令の数の最大値お
よびLoop長の最大値を求める。PE−1とPE−2ともに、
N−1および1である。従って、この場合にはデータ識
別子として、全PEに対して一意性を保つためには、Send
命令を実行するPE番号、あるいはSend命令を送りつける
PE番号および各PEの最大のLoop長およびループ内のSend
の回数からIが変化するとき、Keyは、 Key=(PEの番号)・(Iの最大値)+(I−1)・(loop内のSendの最大 値)+(loop内のSendの数) =nPE・(N−1)+(I−1)・1+1 =nPE(N−1)+I と書ける。ここでIは1から、N−1まで変化する。PE
の番号としてはSend命令を実行するPE番号を選ぶ。また
nPEは1または2をとるPEの番号である。この関数形を
つくる処理は、310によっておこなう。
・テーブルから、第1図5のデータ識別子をいかに一般
的に決定するかを、第7図を参照しつつ述べる。テーブ
ル7あるいは第6図より、処理270は各々のPEに対し、S
end命令に対し、ループ制御変数を探し出す。この場合
には各PEともにIがループ制御変数である。次に処理28
0は、Sendされる変数または配列名を探し出す。第8図
に示すように、PE−1では配列A,PE−2では配列Bであ
る。処理290では、ループ中の変数や配列の個数すなわ
ちSendの回数を数える。PE−1およびPE−2ともに1と
なる。処理300は全PEのなかでSend命令の数の最大値お
よびLoop長の最大値を求める。PE−1とPE−2ともに、
N−1および1である。従って、この場合にはデータ識
別子として、全PEに対して一意性を保つためには、Send
命令を実行するPE番号、あるいはSend命令を送りつける
PE番号および各PEの最大のLoop長およびループ内のSend
の回数からIが変化するとき、Keyは、 Key=(PEの番号)・(Iの最大値)+(I−1)・(loop内のSendの最大 値)+(loop内のSendの数) =nPE・(N−1)+(I−1)・1+1 =nPE(N−1)+I と書ける。ここでIは1から、N−1まで変化する。PE
の番号としてはSend命令を実行するPE番号を選ぶ。また
nPEは1または2をとるPEの番号である。この関数形を
つくる処理は、310によっておこなう。
この場合、PE−1に対しては、Keyの値はNから2
(N−1)まで変化し、PE−2に対してはKeyの値は、2
N−1から、3(N−1)まで変化することになる。こ
れらの値を処理320はデータ識別子に設定する。全PEに
対してデータ識別子が一意に定義できる。以上Send命令
のデータ識別子を設定したが、文の意味から、Send命令
に対応するReceive命令が存在するので、処理330はRece
ive命令のデータ識別子も自動的に設定できる。
(N−1)まで変化し、PE−2に対してはKeyの値は、2
N−1から、3(N−1)まで変化することになる。こ
れらの値を処理320はデータ識別子に設定する。全PEに
対してデータ識別子が一意に定義できる。以上Send命令
のデータ識別子を設定したが、文の意味から、Send命令
に対応するReceive命令が存在するので、処理330はRece
ive命令のデータ識別子も自動的に設定できる。
従って、第5図のKeyは、第9図に示すようにDO 10の
ループ制御変数を用いてプログラムとして書けることに
なる。文36ではPE−1は、PE−1の番号に依存した識別
子をもつデータをPE−2に送り、文37ではPE−2の番号
に依存した識別子をもつデータをPE−1はReceive命令
により受けとる。同様に文38ではPE−2はPE−2の番号
に依存した識別子を持つデータをPE−1に送り、文39で
はPE−1の番号に依存した識別子をもつデータをPE−2
はReceive命令により受けとることになる。
ループ制御変数を用いてプログラムとして書けることに
なる。文36ではPE−1は、PE−1の番号に依存した識別
子をもつデータをPE−2に送り、文37ではPE−2の番号
に依存した識別子をもつデータをPE−1はReceive命令
により受けとる。同様に文38ではPE−2はPE−2の番号
に依存した識別子を持つデータをPE−1に送り、文39で
はPE−1の番号に依存した識別子をもつデータをPE−2
はReceive命令により受けとることになる。
さらに以下のように全PEにわたってデータ識別子に一
意的に値を設定する方法はより一般化できる。すなわち
より一般的な多重ループを各PEがもつ場合には、例えば
第11図に示すように、ループ内のSendの個数をn1、内側
Jループの1つの個数をn2、別の外側Iループの個数を
n3とすると、Sendの個数は1Cn1となるので、デー
タ識別子Keyの値としては、 Key=nPE・n3・n2・n1+I・n2・n1+J・n1+C 1Cn1 1Jn2,1In3 とすることによって全PEにわたってデータ識別子を一意
的に設定できる。さらに一般のk多重ループを各PEがも
つ場合は Key=nPE・nk+1…n1+Ik・nk…n2・n1+I2n2n1+I1n1 +C1Ik′nk′(k′=1,…,k), 1Cn1,1nPNPe とかける。nkはループ長。nPeはPE番号,NPeはPE台数。
意的に値を設定する方法はより一般化できる。すなわち
より一般的な多重ループを各PEがもつ場合には、例えば
第11図に示すように、ループ内のSendの個数をn1、内側
Jループの1つの個数をn2、別の外側Iループの個数を
n3とすると、Sendの個数は1Cn1となるので、デー
タ識別子Keyの値としては、 Key=nPE・n3・n2・n1+I・n2・n1+J・n1+C 1Cn1 1Jn2,1In3 とすることによって全PEにわたってデータ識別子を一意
的に設定できる。さらに一般のk多重ループを各PEがも
つ場合は Key=nPE・nk+1…n1+Ik・nk…n2・n1+I2n2n1+I1n1 +C1Ik′nk′(k′=1,…,k), 1Cn1,1nPNPe とかける。nkはループ長。nPeはPE番号,NPeはPE台数。
ただし、Ik′(k′=1,…,k)はPEがもつDOループの
最初が1になるようにその値域を変更してあるものとす
る。
最初が1になるようにその値域を変更してあるものとす
る。
ところが上記のようにデータ識別子を全体のPEにわた
って一意的になる様に使うとデータ識別子の表現のため
の桁数が大きくなりすぎ、桁あふれがおこる心配があ
る。そのためにはデータ識別子の値は小さい方がよく、
またデータの送受信の局所性が強いときなどPEのグルー
プごとに共通にデータ識別子が使える場合には使った方
がよい。そこでPEのグループごとに同一のデータ識別子
を使うことを考える。これはあるPEのグループをとった
ときにReceive命令にあらわれるデータ識別子の一意性
が保証されていれば可能になる。この保証には、第6図
あるいは第8図のPEのデータ送受信テーブルから、デー
タのやりとりを追跡することにより明らかにできる。と
りあげたプログラムの例では、第8図にあるようにPE−
1およびPE−2の受けるデータはそれぞれPE−2および
PE−1がおのおのSend命令によって送ったものであるこ
とがはっきりするので、式のnPeによるPEの区別はい
らなくなる。従ってデータ識別子Keyの値としては、PE
−1とPE−2ともにnPeを省き、 Key=I と書ける。従って、この場合には、第10図のように、PE
−1とPE−2ともに共通のデータ識別子を使うことがで
きる。実際、文40と文42および文41と文43ではPE番号が
異なっていても共通のデータ識別子が使える。
って一意的になる様に使うとデータ識別子の表現のため
の桁数が大きくなりすぎ、桁あふれがおこる心配があ
る。そのためにはデータ識別子の値は小さい方がよく、
またデータの送受信の局所性が強いときなどPEのグルー
プごとに共通にデータ識別子が使える場合には使った方
がよい。そこでPEのグループごとに同一のデータ識別子
を使うことを考える。これはあるPEのグループをとった
ときにReceive命令にあらわれるデータ識別子の一意性
が保証されていれば可能になる。この保証には、第6図
あるいは第8図のPEのデータ送受信テーブルから、デー
タのやりとりを追跡することにより明らかにできる。と
りあげたプログラムの例では、第8図にあるようにPE−
1およびPE−2の受けるデータはそれぞれPE−2および
PE−1がおのおのSend命令によって送ったものであるこ
とがはっきりするので、式のnPeによるPEの区別はい
らなくなる。従ってデータ識別子Keyの値としては、PE
−1とPE−2ともにnPeを省き、 Key=I と書ける。従って、この場合には、第10図のように、PE
−1とPE−2ともに共通のデータ識別子を使うことがで
きる。実際、文40と文42および文41と文43ではPE番号が
異なっていても共通のデータ識別子が使える。
以上のようにデータ識別子は、全PEで一意的に決める
こともできる。その上、Receive命令によって受けるデ
ータのデータ識別子が、受け手側からみて一意的になる
PEのグループごとに、共通のデータ識別子を使うことも
できる。
こともできる。その上、Receive命令によって受けるデ
ータのデータ識別子が、受け手側からみて一意的になる
PEのグループごとに、共通のデータ識別子を使うことも
できる。
次に一般の場合に対する、Receive命令のデータ識別
子の一意性だけを保ち、データ識別子はPEのグループ内
だけで異なるようする手段を第12図を用いて説明する。
子の一意性だけを保ち、データ識別子はPEのグループ内
だけで異なるようする手段を第12図を用いて説明する。
第7図の処理330の終了後には、データ識別子は全PE
に対して一意的な値になっている。そのままでよいとき
は第12図の処理380を通り、データ識別子は該関数値に
よって決められた値となる。データ識別子が全PEに対し
て一意的な値ではなくあるPEのグループ内でだけ一意的
であればいい場合は、次の手順でデータ識別子の値を決
定する。
に対して一意的な値になっている。そのままでよいとき
は第12図の処理380を通り、データ識別子は該関数値に
よって決められた値となる。データ識別子が全PEに対し
て一意的な値ではなくあるPEのグループ内でだけ一意的
であればいい場合は、次の手順でデータ識別子の値を決
定する。
まず1つの中心となるPE(i番目とする。)を選び、
他のPE全てからのReceiveの状態をテーブル7から調べ
る。テーブル7から、処理350はあるPEがReceive命令に
よって受けとる全ての変数のデータ識別子を調べ、処理
360はPE番号をはぶいたデータ識別子であっても、Recei
veするデータ識別子が一意的になるようなPEのグループ
を探す。以上の操作を中心となるPEの番号iが全てのPE
の番号をなぞり終わるまで行なう。もしあるPEが両方の
グループに属するような場合は、グループ分けのときに
用いた中心となるPE番号の小さい方のグループに属する
ことにする。以上によりReceive命令のデータ識別子が
一意的になるようにPEのグループ分けができる。このよ
うなグループ分けは、静的に決まる場合に対しても、動
的に決まる場合に対しても、Receive命令の一意性が保
証できさえすればともに決定が可能である。
他のPE全てからのReceiveの状態をテーブル7から調べ
る。テーブル7から、処理350はあるPEがReceive命令に
よって受けとる全ての変数のデータ識別子を調べ、処理
360はPE番号をはぶいたデータ識別子であっても、Recei
veするデータ識別子が一意的になるようなPEのグループ
を探す。以上の操作を中心となるPEの番号iが全てのPE
の番号をなぞり終わるまで行なう。もしあるPEが両方の
グループに属するような場合は、グループ分けのときに
用いた中心となるPE番号の小さい方のグループに属する
ことにする。以上によりReceive命令のデータ識別子が
一意的になるようにPEのグループ分けができる。このよ
うなグループ分けは、静的に決まる場合に対しても、動
的に決まる場合に対しても、Receive命令の一意性が保
証できさえすればともに決定が可能である。
PEのグループが定まったあと処理370によってPEの番
号を考慮してつけたデータ識別子を、PEの番号を省いた
データ識別子でおきかえる。このとき用いるデータ識別
子の値は、処理310でPEを省いた形の関数から求められ
る。処理370ではReceive命令中のデータ識別子にあわせ
て同一のグループ内のSend命令中のデータ識別子をつけ
かえる。以上により、PEのグループごとに同一のデータ
識別子を持つことができ、各グループ内では一意的に決
まる様なデータ識別子の決定ができる。
号を考慮してつけたデータ識別子を、PEの番号を省いた
データ識別子でおきかえる。このとき用いるデータ識別
子の値は、処理310でPEを省いた形の関数から求められ
る。処理370ではReceive命令中のデータ識別子にあわせ
て同一のグループ内のSend命令中のデータ識別子をつけ
かえる。以上により、PEのグループごとに同一のデータ
識別子を持つことができ、各グループ内では一意的に決
まる様なデータ識別子の決定ができる。
以上ではループになつている場合を扱ってきたが以下
ではループになっていない場合を扱う。
ではループになっていない場合を扱う。
PEの番号iごとに、Send命令の総数niがテーブル7よ
りわかるので、Send命令をPEすべてにわたって数えあ
げ、番号付けをし、その番号をデータ識別子にすること
によって全PEに対して一意的にデータ識別子を決めるこ
とができる。
りわかるので、Send命令をPEすべてにわたって数えあ
げ、番号付けをし、その番号をデータ識別子にすること
によって全PEに対して一意的にデータ識別子を決めるこ
とができる。
以上に似た方法としては、全PEに対して各PEのもつSe
nd命令の総数niの最大値nmaxを求め、かつPE番号i,(1
iNPe)によってKeyを以下のように全PEに対して一
意的に決める方法がある。このとき、データ識別子Key
は、各PEで持つSend命令の総数およびPEの番号を変数と
して、 Key=i・nmax+C となる。ここで1Cnmaxであり、1iNPであ
る。NPはPE台数である。
nd命令の総数niの最大値nmaxを求め、かつPE番号i,(1
iNPe)によってKeyを以下のように全PEに対して一
意的に決める方法がある。このとき、データ識別子Key
は、各PEで持つSend命令の総数およびPEの番号を変数と
して、 Key=i・nmax+C となる。ここで1Cnmaxであり、1iNPであ
る。NPはPE台数である。
例について述べる。
ここで別の逐次型FORTRANプログラムを例にとり、デ
ータ識別子のつけ方の例について述べる。第13図に示し
た逐次形の総和計算のプログラムが、PE台数が3のとき
にいかに並列化されるかを第14図に示す。第13図のプロ
グラムは、配列AのNS個のデータを総和し、結果をSと
するものである。処理2,3と4によって、並列化された
プログラムを第14図に示す。ここではまだ、データ識別
子の値は決まっていない。逐次処理の配列Aは、部分配
列A1,A2,A3に分割され、各プロセッサは、配列A1,A2,A3
それぞれの部分和を求め、その結果を各プロセッサに配
ることになる。この場合もループのある場合の例と同様
にテーブル7のPEのデータテーブルおよびPE間のデータ
送受信テーブルから、第7図の一連の処理でループに関
する処理以外の処理を行ない、処理310により、データ
識別子を決定する。第15図にデータ識別子を決定したあ
との並列化プログラムを記す。各PEの部分和の番号1の
プロセッサへのデータ転送は、処理310より送信元のプ
ロセッサ番号をデータ識別子と設定して行なう。次にPE
番号1で求められた総和結果Sは、第14図のDO 30の部
分のプログラムにより、PE番号2およびPE番号3のプロ
セッサに送られる。この場合にも、処理310より受信側
のPEの番号をデータ識別子とする。
ータ識別子のつけ方の例について述べる。第13図に示し
た逐次形の総和計算のプログラムが、PE台数が3のとき
にいかに並列化されるかを第14図に示す。第13図のプロ
グラムは、配列AのNS個のデータを総和し、結果をSと
するものである。処理2,3と4によって、並列化された
プログラムを第14図に示す。ここではまだ、データ識別
子の値は決まっていない。逐次処理の配列Aは、部分配
列A1,A2,A3に分割され、各プロセッサは、配列A1,A2,A3
それぞれの部分和を求め、その結果を各プロセッサに配
ることになる。この場合もループのある場合の例と同様
にテーブル7のPEのデータテーブルおよびPE間のデータ
送受信テーブルから、第7図の一連の処理でループに関
する処理以外の処理を行ない、処理310により、データ
識別子を決定する。第15図にデータ識別子を決定したあ
との並列化プログラムを記す。各PEの部分和の番号1の
プロセッサへのデータ転送は、処理310より送信元のプ
ロセッサ番号をデータ識別子と設定して行なう。次にPE
番号1で求められた総和結果Sは、第14図のDO 30の部
分のプログラムにより、PE番号2およびPE番号3のプロ
セッサに送られる。この場合にも、処理310より受信側
のPEの番号をデータ識別子とする。
さらにまた別の逐次型RORTRANプログラムを例にと
り、データ識別子のつけ方について述べる。第16図に示
した逐次形の計算のプログラムがPE台数が2のときにい
かに並列化されるかを第17図に示す。第16図のプログラ
ムは、第4図に示すプログラムに、DO 20の部分を加え
たものである。第16図では、DOループが複数個になって
いることが第4図のプログラムと異なっている。第16図
のプログラムを例として、同一のプロセッサ・エレメン
ト内で、Receive命令に対しての転送処理のグループ分
けができることを示す。第16図のプログラムを処理2,3
と4によって並列化したときのプログラムを第17図に示
す。ここではまだデータ識別子の値は決まっていない。
この場合もループのある場合の例と同様にテーブル7の
PEのデータテーブルおよびPE間のデータ送受信テーブル
から、第7図の一連の処理でループの分割に関する処理
を行ない、処理310および処理350,360,370により、デー
タ識別子を決定する。第18図にデータ識別子を決めたあ
との並列化プログラムを記す。
り、データ識別子のつけ方について述べる。第16図に示
した逐次形の計算のプログラムがPE台数が2のときにい
かに並列化されるかを第17図に示す。第16図のプログラ
ムは、第4図に示すプログラムに、DO 20の部分を加え
たものである。第16図では、DOループが複数個になって
いることが第4図のプログラムと異なっている。第16図
のプログラムを例として、同一のプロセッサ・エレメン
ト内で、Receive命令に対しての転送処理のグループ分
けができることを示す。第16図のプログラムを処理2,3
と4によって並列化したときのプログラムを第17図に示
す。ここではまだデータ識別子の値は決まっていない。
この場合もループのある場合の例と同様にテーブル7の
PEのデータテーブルおよびPE間のデータ送受信テーブル
から、第7図の一連の処理でループの分割に関する処理
を行ない、処理310および処理350,360,370により、デー
タ識別子を決定する。第18図にデータ識別子を決めたあ
との並列化プログラムを記す。
各PEともに、データ識別子として、DO 10、およびDO
20のループ制御変数Iを用いることができる。すなわち
DO 10の最後のReceive命令の識別子はI=100であり、D
O 20の最初のReceive命令の識別子はI=1であるの
で、DO 10とDO 20の他の制御変数の場合にはReceive命
令は重ならない。従ってDO10ループとDO 20ループの中
で用いるデータ識別子は同じ1〜100までの値を用いる
ことができ、DO 10とDO 20のループ制御変数が共通に使
える。
20のループ制御変数Iを用いることができる。すなわち
DO 10の最後のReceive命令の識別子はI=100であり、D
O 20の最初のReceive命令の識別子はI=1であるの
で、DO 10とDO 20の他の制御変数の場合にはReceive命
令は重ならない。従ってDO10ループとDO 20ループの中
で用いるデータ識別子は同じ1〜100までの値を用いる
ことができ、DO 10とDO 20のループ制御変数が共通に使
える。
以上のようにKeyをつけたプログラムを作ったあと
は、最適化処理等を行なう。第4図のFORTRANプログラ
ムは、第3図のコード生成処理15がオブジェクトコード
12を生成するが、このオブジェクトコードの実行時の様
子を第9図に示す。以上のようにもとの逐次実行型のFO
RTRNAプログラムは、Send・Recieve命令を含み、データ
識別子のついたコードとして各PEに割り付けられ、並列
に実行される。
は、最適化処理等を行なう。第4図のFORTRANプログラ
ムは、第3図のコード生成処理15がオブジェクトコード
12を生成するが、このオブジェクトコードの実行時の様
子を第9図に示す。以上のようにもとの逐次実行型のFO
RTRNAプログラムは、Send・Recieve命令を含み、データ
識別子のついたコードとして各PEに割り付けられ、並列
に実行される。
本発明によれば、従来の逐次型のユーザプログラム
を、再コーディングすることなく、並列処理システムで
実行させることができる。またこの時、ハードウエア資
源を有効に用いることにより、経過時間が短く、実行効
率の高いオブジェクトコードを自動生成させることがで
きる。
を、再コーディングすることなく、並列処理システムで
実行させることができる。またこの時、ハードウエア資
源を有効に用いることにより、経過時間が短く、実行効
率の高いオブジェクトコードを自動生成させることがで
きる。
第1図は自動並列化処理の1部,第2図は適用するシス
テムの概要図、第3図はコンパイラの全体図、第4図は
実施例説明のためのソースプログラム例を示す図、第5
図は実施例説明のための並列化コード、第6図は、PEの
データテーブルおよびPE間データ送受信テーブル、第7
図はデータ識別子生成の概要を示す図、第8図は実施例
説明のためのPEのデータ・テーブルおよびPE間データ送
受信テーブル、第9,10,11図は実施例説明のための並列
化FORTRANプログラム、第12図はデータ識別子生成の概
要を示す図、第13〜18図は実施例説明のためのFORTRAN
プログラムを示す図である。 1……自動並列化処理、2……並列性抽出部および並列
手段選択、3……各プロセッサへのプログラムの分割と
データの割り付け、4……プロセッサ間データ送受信解
析、5……データ識別子の生成、 6……中間語、7……ループテーブル、 10……FORTRANコンパイラ、 11……FORTRANソースプログラム、 12……オブジェクトコード、13……構文解析処理、 14……中間処理、15……コード生成処理、 16〜20……FORTRANプログラム、 21〜26……テーブルのフィールド、 27〜43……FORTRANプログラム、 121〜133……並列プロセッサ装置名称、 270〜380……処理部。
テムの概要図、第3図はコンパイラの全体図、第4図は
実施例説明のためのソースプログラム例を示す図、第5
図は実施例説明のための並列化コード、第6図は、PEの
データテーブルおよびPE間データ送受信テーブル、第7
図はデータ識別子生成の概要を示す図、第8図は実施例
説明のためのPEのデータ・テーブルおよびPE間データ送
受信テーブル、第9,10,11図は実施例説明のための並列
化FORTRANプログラム、第12図はデータ識別子生成の概
要を示す図、第13〜18図は実施例説明のためのFORTRAN
プログラムを示す図である。 1……自動並列化処理、2……並列性抽出部および並列
手段選択、3……各プロセッサへのプログラムの分割と
データの割り付け、4……プロセッサ間データ送受信解
析、5……データ識別子の生成、 6……中間語、7……ループテーブル、 10……FORTRANコンパイラ、 11……FORTRANソースプログラム、 12……オブジェクトコード、13……構文解析処理、 14……中間処理、15……コード生成処理、 16〜20……FORTRANプログラム、 21〜26……テーブルのフィールド、 27〜43……FORTRANプログラム、 121〜133……並列プロセッサ装置名称、 270〜380……処理部。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 濱中 直樹 東京都国分寺市東恋ケ窪1丁目280番地 株式会社日立製作所中央研究所内 (56)参考文献 情報処理学会第36回 (昭和63年前 期) 全国大会講演論文集 2C−1
Claims (6)
- 【請求項1】番号付けられた複数のプロセッサから構成
され、データ識別子により転送データを識別するプロセ
ッサ間データ転送方式を用いる並列プロセッサを対象と
し、高級言語で記述された逐次実行型ソースプログラム
から該並列プロセッサによる並列実行のためのオブジェ
クトコードを生成するコンパイル方法であって、上記逐
次実行型ソースプログラムを並列実行型プログラムに変
換し、該並列実行型プログラムを実行するときの処理の
流れの中からプロセッサ間データ転送処理を抽出し、該
抽出したプロセッサ間データ転送処理に重なりのないデ
ータ識別子を付けることを特徴とする並列化コンパイル
方法。 - 【請求項2】少なくとも上記並列実効型プログラムを実
行させるプロセッサ番号を引数とし、該引数と関数値と
が1対1対応になる関数を決定し、該関数の値を上記重
なりのないデータ識別子にする請求項1項の並列化コン
パイル方法。 - 【請求項3】番号付けられた複数のプロセッサから構成
され、データ識別子により転送データを識別するプロセ
ッサ間データ転送方式を用いる並列プロセッサを対象と
し、高級言語で記述された逐次実行型ソースプログラム
から該並列プロセッサによる並列実行のためのオブジェ
クトコードを生成するコンパイル方法であって、上記逐
次実行型ソースプログラムを並列実行型プログラムに変
換し、該並列実行型プログラムを実行するときの処理の
流れの中からプロセッサ間データ転送処理を抽出し、該
抽出したプロセッサ間データ転送処理をデータの受信処
理を行なうプロセッサごとのグループに分割し、該分割
で得られた各グループごとにグループ内のプロセッサ間
データ転送処理に重なりのないデータ識別子を付けるこ
とを特徴とする並列化コンパイル方法。 - 【請求項4】上記並列プロセッサが具備するプロセッサ
数、上記並列実行型プログラムを実行させるプロセッサ
番号、上記並列実行型プログラム中のループ識別番号、
ループ長、ループ内のデータ転送処理の数、またはルー
プ内の番号のうちのすくなくとも1個を引数とし、該引
数と関数値が1対1対応になる関数を決定し、該関数の
値を上記重なりのないデータ識別子にする請求項3項の
並列化コンパイル方法。 - 【請求項5】番号付けられた複数のプロセッサから構成
され、データ識別子により転送データを識別するプロセ
ッサ間データ転送方式を用いる並列プロセッサを対象と
し、高級言語で記述された逐次実行型ソースプログラム
から該並列プロセッサによる並列実行のためのオブジェ
クトコードを生成するコンパイル方法であって、上記逐
次実行型ソースプログラムを並列実行型プログラムに変
換し、該並列実行型プログラムを実行するときの処理の
流れの中からプロセッサ間データ転送処理を抽出し、該
抽出したプロセッサ間データ転送処理により作られるデ
ータ依存関係から処理の流れを同時に実行されることな
く順次実行されるグループに分割し、該分割で得られた
各グループごとにグループ内のプロセッサ間データ転送
処理に重なりのないデータ識別子を付けることを特徴と
する並列化コンパイル方法。 - 【請求項6】上記並列プロセッサが具備するプロセッサ
数、上記並列実行型プログラムを実行させるプロセッサ
番号、上記並列実行型プログラム中のループ識別番号、
ループ長、ループ内のデータ転送処理の数、またはルー
プ内の番号のうちのすくなくとも1個を引数とし、該引
数と関数値が1対1対応になる関数を決定し、該関数の
値を上記重なりのないデータ識別子にする請求項5項の
並列化コンパイル方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP63017075A JP2738692B2 (ja) | 1988-01-29 | 1988-01-29 | 並列化コンパイル方法 |
US07/301,648 US5088034A (en) | 1988-01-29 | 1989-01-25 | Compiling method for determining programs to be executed parallelly by respective processors in a parallel computer which transfer data with a data identifier to other processors |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP63017075A JP2738692B2 (ja) | 1988-01-29 | 1988-01-29 | 並列化コンパイル方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH01194033A JPH01194033A (ja) | 1989-08-04 |
JP2738692B2 true JP2738692B2 (ja) | 1998-04-08 |
Family
ID=11933861
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP63017075A Expired - Lifetime JP2738692B2 (ja) | 1988-01-29 | 1988-01-29 | 並列化コンパイル方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5088034A (ja) |
JP (1) | JP2738692B2 (ja) |
Families Citing this family (67)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0353819B1 (en) * | 1988-08-02 | 1997-04-09 | Koninklijke Philips Electronics N.V. | Method and apparatus for synchronizing parallel processors using a fuzzy barrier |
JP3039953B2 (ja) * | 1989-04-28 | 2000-05-08 | 株式会社日立製作所 | 並列化装置 |
JPH03111971A (ja) * | 1989-09-27 | 1991-05-13 | Toshiba Corp | ベクトル化診断方式 |
JP2551187B2 (ja) * | 1990-02-08 | 1996-11-06 | 日本電気株式会社 | スキャン動作実行方式 |
US5255385A (en) * | 1990-02-26 | 1993-10-19 | Hitachi, Ltd. | Method of testing program, and compiler and program testing tool for the method |
US5412799A (en) * | 1990-02-27 | 1995-05-02 | Massachusetts Institute Of Technology | Efficient data processor instrumentation for systematic program debugging and development |
US5303377A (en) * | 1990-03-27 | 1994-04-12 | North American Philips Corporation | Method for compiling computer instructions for increasing instruction cache efficiency |
US5210837A (en) * | 1990-06-15 | 1993-05-11 | Digital Equipment Corporation | Methods and apparatus for transforming machine language program control into high-level language constructs by manipulating graphical program representations |
JPH0475139A (ja) * | 1990-07-18 | 1992-03-10 | Toshiba Corp | ループ並列化装置 |
JP2818016B2 (ja) * | 1990-08-09 | 1998-10-30 | 株式会社日立製作所 | プロセス並列実行方法および装置 |
JPH04262453A (ja) * | 1991-02-15 | 1992-09-17 | Hitachi Ltd | ニュ−ロ学習制御方法及び装置 |
JP2770603B2 (ja) * | 1991-03-14 | 1998-07-02 | 三菱電機株式会社 | 並列計算機 |
US5437034A (en) * | 1991-04-19 | 1995-07-25 | Hitachi, Ltd. | Method of generating from source program object program by which final values of variables for parallel execution are guaranteed |
FR2677474B1 (fr) * | 1991-06-04 | 1993-09-24 | Sextant Avionique | Dispositif permettant d'accroitre les performances d'un noyau d'executif temps reel associe a une structure multiprocesseur pouvant comprendre un nombre eleve de processeurs. |
JP2884831B2 (ja) * | 1991-07-03 | 1999-04-19 | 株式会社日立製作所 | 処理装置 |
JP2921190B2 (ja) * | 1991-07-25 | 1999-07-19 | 日本電気株式会社 | 並列実行方式 |
US5293631A (en) * | 1991-08-06 | 1994-03-08 | Hewlett-Packard Company | Analysis and optimization of array variables in compiler for instruction level parallel processor |
US5355492A (en) * | 1991-11-05 | 1994-10-11 | Thinking Machines Corporation | System for compiling parallel communications instructions including their embedded data transfer information |
US5278986A (en) * | 1991-12-13 | 1994-01-11 | Thinking Machines Corporation | System and method for compiling a source code supporting data parallel variables |
US5551039A (en) * | 1992-02-03 | 1996-08-27 | Thinking Machines Corporation | Compiling a source code vector instruction by generating a subgrid loop for iteratively processing array elements by plural processing elements |
US5548761A (en) * | 1993-03-09 | 1996-08-20 | International Business Machines Corporation | Compiler for target machine independent optimization of data movement, ownership transfer and device control |
GB9305263D0 (en) * | 1993-03-15 | 1993-05-05 | Univ Westminster | Parrallel computation |
JPH0744508A (ja) * | 1993-08-03 | 1995-02-14 | Hitachi Ltd | プログラム分割方法 |
JPH07110800A (ja) * | 1993-10-13 | 1995-04-25 | Matsushita Electric Ind Co Ltd | 最適化並列コンパイル装置及び最適化並列コンパイル方法 |
WO1995026530A1 (fr) * | 1994-03-28 | 1995-10-05 | Sony Corporation | Procede de compilation de programmes a execution parallele, imageur et procede de traitement d'image |
JPH07319710A (ja) * | 1994-05-20 | 1995-12-08 | Matsushita Electric Ind Co Ltd | コンパイル処理方法 |
US5457795A (en) * | 1994-06-01 | 1995-10-10 | Willman; Todd J. | Method and apparatus for sharing and transferring data between software programs |
US6006033A (en) * | 1994-08-15 | 1999-12-21 | International Business Machines Corporation | Method and system for reordering the instructions of a computer program to optimize its execution |
JP3560662B2 (ja) * | 1994-12-06 | 2004-09-02 | 富士通株式会社 | 並列プロセッサ装置 |
JP2669603B2 (ja) * | 1994-12-15 | 1997-10-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンパイラにおけるコード生成方法及びコンパイラ |
GB2299422B (en) * | 1995-03-30 | 2000-01-12 | Sony Uk Ltd | Object code allocation in multiple processor systems |
US6539435B2 (en) | 1995-06-21 | 2003-03-25 | International Business Machines Corporation | System and method for establishing direct communication between parallel programs |
US5946463A (en) * | 1996-07-22 | 1999-08-31 | International Business Machines Corporation | Method and system for automatically performing an operation on multiple computer systems within a cluster |
GB2315888A (en) * | 1996-07-31 | 1998-02-11 | Ibm | Controlling the degree of parallelism when performing parallel processing on an inherently serial computer program |
US5812852A (en) * | 1996-11-14 | 1998-09-22 | Kuck & Associates, Inc. | Software implemented method for thread-privatizing user-specified global storage objects in parallel computer programs via program transformation |
US5999729A (en) * | 1997-03-06 | 1999-12-07 | Continuum Software, Inc. | System and method for developing computer programs for execution on parallel processing systems |
US5999734A (en) * | 1997-10-21 | 1999-12-07 | Ftl Systems, Inc. | Compiler-oriented apparatus for parallel compilation, simulation and execution of computer programs and hardware models |
US6463580B1 (en) * | 1998-11-18 | 2002-10-08 | Intel Corporation | Parallel processing utilizing highly correlated data values |
US7047232B1 (en) * | 1999-01-13 | 2006-05-16 | Ab Initio Software Corporation | Parallelizing applications of script-driven tools |
US6813701B1 (en) * | 1999-08-17 | 2004-11-02 | Nec Electronics America, Inc. | Method and apparatus for transferring vector data between memory and a register file |
US6859927B2 (en) | 1999-12-21 | 2005-02-22 | Lockheed Martin Corporation | Apparatus and method for controlling allocation of resources and task execution |
CA2343437A1 (en) * | 2001-04-06 | 2002-10-06 | Ibm Canada Limited-Ibm Canada Limitee | Method and system for cross platform, parallel processing |
US7278137B1 (en) * | 2001-12-26 | 2007-10-02 | Arc International | Methods and apparatus for compiling instructions for a data processor |
US7159211B2 (en) * | 2002-08-29 | 2007-01-02 | Indian Institute Of Information Technology | Method for executing a sequential program in parallel with automatic fault tolerance |
JP5271494B2 (ja) | 2003-06-25 | 2013-08-21 | アビニシオ テクノロジー エルエルシー | コンピュータ支援による計算グラフの並列化 |
US20070234315A1 (en) * | 2006-02-09 | 2007-10-04 | International Business Machines Corporation | Compiling an application by cluster members |
US8443348B2 (en) * | 2006-06-20 | 2013-05-14 | Google Inc. | Application program interface of a parallel-processing computer system that supports multiple programming languages |
US8136102B2 (en) | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for compiling an application for a parallel-processing computer system |
US8136104B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
US8381202B2 (en) * | 2006-06-20 | 2013-02-19 | Google Inc. | Runtime system for executing an application in a parallel-processing computer system |
US8261270B2 (en) * | 2006-06-20 | 2012-09-04 | Google Inc. | Systems and methods for generating reference results using a parallel-processing computer system |
US8146066B2 (en) | 2006-06-20 | 2012-03-27 | Google Inc. | Systems and methods for caching compute kernels for an application running on a parallel-processing computer system |
US7814486B2 (en) * | 2006-06-20 | 2010-10-12 | Google Inc. | Multi-thread runtime system |
US8375368B2 (en) * | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling an application running on a parallel-processing computer system |
US8024708B2 (en) | 2006-06-20 | 2011-09-20 | Google Inc. | Systems and methods for debugging an application running on a parallel-processing computer system |
US8108844B2 (en) * | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
WO2008020967A2 (en) * | 2006-08-08 | 2008-02-21 | Peak Biosciences, Inc. | Catheter and array for anticancer therapy |
GB2443277B (en) * | 2006-10-24 | 2011-05-18 | Advanced Risc Mach Ltd | Performing diagnostics operations upon an asymmetric multiprocessor apparatus |
JP4952317B2 (ja) * | 2007-03-16 | 2012-06-13 | 富士通株式会社 | 退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置 |
US9665620B2 (en) | 2010-01-15 | 2017-05-30 | Ab Initio Technology Llc | Managing data queries |
US9116955B2 (en) | 2011-05-02 | 2015-08-25 | Ab Initio Technology Llc | Managing data queries |
AU2014360106B2 (en) | 2013-12-06 | 2019-05-23 | Ab Initio Technology Llc | Source code translation |
US10437819B2 (en) | 2014-11-14 | 2019-10-08 | Ab Initio Technology Llc | Processing queries containing a union-type operation |
US10417281B2 (en) | 2015-02-18 | 2019-09-17 | Ab Initio Technology Llc | Querying a data source on a network |
JP6528531B2 (ja) * | 2015-05-12 | 2019-06-12 | 富士通株式会社 | コンパイラプログラム、コンパイル方法、及び情報処理装置 |
US9733911B2 (en) * | 2015-11-11 | 2017-08-15 | National Instruments Corporation | Value transfer between program variables using dynamic memory resource mapping |
US11093223B2 (en) | 2019-07-18 | 2021-08-17 | Ab Initio Technology Llc | Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4636948A (en) * | 1985-01-30 | 1987-01-13 | International Business Machines Corporation | Method for controlling execution of application programs written in high level program language |
DE3855524T2 (de) * | 1987-06-19 | 1997-02-06 | Hitachi Ltd | Arithmetik-Parallelverarbeitungseinheit und zugehöriger Kompilator |
US4943912A (en) * | 1987-10-13 | 1990-07-24 | Hitachi, Ltd. | Parallel processor system having control processor and array control apparatus for selectively activating different processors |
US4885684A (en) * | 1987-12-07 | 1989-12-05 | International Business Machines Corporation | Method for compiling a master task definition data set for defining the logical data flow of a distributed processing network |
-
1988
- 1988-01-29 JP JP63017075A patent/JP2738692B2/ja not_active Expired - Lifetime
-
1989
- 1989-01-25 US US07/301,648 patent/US5088034A/en not_active Expired - Fee Related
Non-Patent Citations (1)
Title |
---|
情報処理学会第36回 (昭和63年前期) 全国大会講演論文集 2C−1 |
Also Published As
Publication number | Publication date |
---|---|
JPH01194033A (ja) | 1989-08-04 |
US5088034A (en) | 1992-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2738692B2 (ja) | 並列化コンパイル方法 | |
Tzen et al. | Trapezoid self-scheduling: A practical scheduling scheme for parallel compilers | |
US5021945A (en) | Parallel processor system for processing natural concurrencies and method therefor | |
US5303357A (en) | Loop optimization system | |
US20020019910A1 (en) | Methods and apparatus for indirect VLIW memory allocation | |
JPH08185325A (ja) | コンパイラにおけるコード生成方法及びコンパイラ | |
Gebrewahid et al. | Realizing efficient execution of dataflow actors on manycores | |
Knobe et al. | Massively parallel data optimization | |
Beck et al. | Static scheduling for dynamic dataflow machines | |
Shaw et al. | Performance of data-parallel primitives on the EM-4 dataflow parallel supercomputer | |
JP2008523523A (ja) | プログラム内のループ用のコンパイル方法、コンパイル装置およびコンピュータシステム | |
Gao et al. | Towards efficient fine-grain software pipelining | |
JP2765861B2 (ja) | 並列化コンパイル方法 | |
Kornkven et al. | Dynamic adaptive scheduling in an implementation of a data parallel language | |
Prakash et al. | Parallel simulation of data parallel programs | |
JP2865694B2 (ja) | コンパイル方法 | |
Tang | Self-scheduling, data synchronization and program transformation for multiprocessor systems | |
Shieh et al. | Fine grain mapping strategy for multiprocessor systems | |
Babb et al. | Retargetable high performance Fortran compiler challenges | |
Li et al. | Automating the coordination of interprocessor communication | |
JPH0561899A (ja) | プログラムの自動並列化処理方式 | |
Yuasa et al. | The extended C language NCX for data‐parallel programming | |
JP3072772B2 (ja) | コンパイル装置 | |
Tanase et al. | Fundamentals and Compiler Framework | |
JPH02132525A (ja) | コンパイル方法 |