JPH04329472A - 並列実行命令列生成方式 - Google Patents
並列実行命令列生成方式Info
- Publication number
- JPH04329472A JPH04329472A JP12849891A JP12849891A JPH04329472A JP H04329472 A JPH04329472 A JP H04329472A JP 12849891 A JP12849891 A JP 12849891A JP 12849891 A JP12849891 A JP 12849891A JP H04329472 A JPH04329472 A JP H04329472A
- Authority
- JP
- Japan
- Prior art keywords
- vector
- loop
- executed
- clause
- instruction string
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 claims description 9
- 238000004904 shortening Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 7
- 238000007796 conventional method Methods 0.000 description 2
- 238000005457 optimization Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【0001】
【産業上の利用分野】本発明は並列実行命令列生成方式
に関し、特に高級言語で記述されたソースプログラムか
らオブジェクトプログラムを生成するコンパイラの自動
ベクトル化技術および自動並列化技術に係わる並列実行
命令列生成方式に関する。
に関し、特に高級言語で記述されたソースプログラムか
らオブジェクトプログラムを生成するコンパイラの自動
ベクトル化技術および自動並列化技術に係わる並列実行
命令列生成方式に関する。
【0002】
【従来の技術】従来のCRAY−XMPに代表されるベ
クトル型のマルチプロセッサにおいては、IF文を含む
ループがあった場合に、ベクトル実行及び並列実行が可
能であるとコンパイラが判断すれば、単一のループを複
数のプロセッサでベクトル実行するオブジェクトコード
をコンパイラが生成する事ができる。この際に、たとえ
ばN回の繰り返しを有するループを2台のプロセッサで
実行させるコードを生成する場合にはNを機械的に2等
分して(Nが奇数の場合には一方が他方より1多い)、
それぞれをベクトル実行するコードを生成する。この際
のベクトル実行は通常のIF文のベクトル化と同様の方
法を用いる。図5に例を示す。Iの値が1から200ま
で実行されるFORTRAN言語で記述されたDOルー
プがについて、Iが1から100までの繰り返しをプロ
セッサ#1で、Iが101から200までの繰り返しを
プロセッサで実行するオブジェクトコードが生成される
。実行の様子を説明するためにオブジェクトコードの構
成がFORTRAN言語の実行イメージで記述してある
。この際に各プロセッサで実行されるコードはそれぞれ
ループ長100で実行されるベクトル命令列として生成
される。IF文は通常はマスク命令を用いて実行される
。機種とIF文の形態によってはベクトル収集/拡散命
令を用いてIF文を実行するオブジェクトコードが生成
される場合もある。IF文がマスク命令により実現され
た場合のプロセッサ#1で実行されるオブジェクト命令
列の例を図6に示す。
クトル型のマルチプロセッサにおいては、IF文を含む
ループがあった場合に、ベクトル実行及び並列実行が可
能であるとコンパイラが判断すれば、単一のループを複
数のプロセッサでベクトル実行するオブジェクトコード
をコンパイラが生成する事ができる。この際に、たとえ
ばN回の繰り返しを有するループを2台のプロセッサで
実行させるコードを生成する場合にはNを機械的に2等
分して(Nが奇数の場合には一方が他方より1多い)、
それぞれをベクトル実行するコードを生成する。この際
のベクトル実行は通常のIF文のベクトル化と同様の方
法を用いる。図5に例を示す。Iの値が1から200ま
で実行されるFORTRAN言語で記述されたDOルー
プがについて、Iが1から100までの繰り返しをプロ
セッサ#1で、Iが101から200までの繰り返しを
プロセッサで実行するオブジェクトコードが生成される
。実行の様子を説明するためにオブジェクトコードの構
成がFORTRAN言語の実行イメージで記述してある
。この際に各プロセッサで実行されるコードはそれぞれ
ループ長100で実行されるベクトル命令列として生成
される。IF文は通常はマスク命令を用いて実行される
。機種とIF文の形態によってはベクトル収集/拡散命
令を用いてIF文を実行するオブジェクトコードが生成
される場合もある。IF文がマスク命令により実現され
た場合のプロセッサ#1で実行されるオブジェクト命令
列の例を図6に示す。
【0003】
【発明が解決しようとする課題】上記のようなベクトル
化及び並列化を行うオブジェクトコードを生成した場合
には、その実行において、全体の繰り返し回数を2つに
分けて2台のプロセッサで実行するために、各プロセッ
サで実行するベクトル長が短くなるという問題点がある
。図5の例では、ソースコードにおけるベクトル長が2
00であるにもかかわらず、各プロセッサで実行される
ベクトル長は100となっている。
化及び並列化を行うオブジェクトコードを生成した場合
には、その実行において、全体の繰り返し回数を2つに
分けて2台のプロセッサで実行するために、各プロセッ
サで実行するベクトル長が短くなるという問題点がある
。図5の例では、ソースコードにおけるベクトル長が2
00であるにもかかわらず、各プロセッサで実行される
ベクトル長は100となっている。
【0004】
【課題を解決するための手段】本発明の並列実行命令列
生成方式は、ベクトル命令の実行が可能な複数のプロセ
ッサを有する電子計算機システムにおいて、高級言語で
記述されたソースプログラムより、オブジェクトプログ
ラムを生成するコンパイラにおいて、ある条件1が成立
すればステートメント集合2を実行し、そうでなければ
ステートメント集合3を実行するIF〜THEN〜EL
SE型の条件実行ブロックを含むベクトル実行可能なル
ープに対して、前記ループに、ループの繰り返し間にま
たがるデータ依存関係がなく、ループの各繰り返しが並
列実行可能であることを判定する並列化判定手段4と、
前記条件1が成立して、前記ステートメント集合2を実
行するループの繰り返しを選択して、ベクトル実行する
ベクトル命令列5を生成するベクトル命令列生成手段6
と、前記条件1が成立せずに、前記ステートメント集合
3を実行するループの繰り返しを選択して、ベクトル実
行するベクトル命令列7を生成するベクトル命令列生成
手段8と、前記ベクトル命令列5と、前記ベクトル命令
列6とを並列に別プロセッサで実行させる並列実行制御
命令列9を生成する並列実行制御命令列生成手段10と
、を有する。
生成方式は、ベクトル命令の実行が可能な複数のプロセ
ッサを有する電子計算機システムにおいて、高級言語で
記述されたソースプログラムより、オブジェクトプログ
ラムを生成するコンパイラにおいて、ある条件1が成立
すればステートメント集合2を実行し、そうでなければ
ステートメント集合3を実行するIF〜THEN〜EL
SE型の条件実行ブロックを含むベクトル実行可能なル
ープに対して、前記ループに、ループの繰り返し間にま
たがるデータ依存関係がなく、ループの各繰り返しが並
列実行可能であることを判定する並列化判定手段4と、
前記条件1が成立して、前記ステートメント集合2を実
行するループの繰り返しを選択して、ベクトル実行する
ベクトル命令列5を生成するベクトル命令列生成手段6
と、前記条件1が成立せずに、前記ステートメント集合
3を実行するループの繰り返しを選択して、ベクトル実
行するベクトル命令列7を生成するベクトル命令列生成
手段8と、前記ベクトル命令列5と、前記ベクトル命令
列6とを並列に別プロセッサで実行させる並列実行制御
命令列9を生成する並列実行制御命令列生成手段10と
、を有する。
【0005】
【作用】ある条件1が成立すればステートメント集合2
を実行し、そうでなければステートメント集合3を実行
するIF〜THEN〜ELSE型の条件実行ブロックを
含むベクトル実行可能なループに対して、前記条件1が
成立する場合のループ繰り返しとそうでない場合の繰り
返しとを別々のプロセッサでベクトル実行する命令列を
生成する。
を実行し、そうでなければステートメント集合3を実行
するIF〜THEN〜ELSE型の条件実行ブロックを
含むベクトル実行可能なループに対して、前記条件1が
成立する場合のループ繰り返しとそうでない場合の繰り
返しとを別々のプロセッサでベクトル実行する命令列を
生成する。
【0006】
【実施例】次に、本発明について図面を参照して説明す
る。図1は、本発明の並列実行命令列生成方式の一実施
例の構成を示すブロック図である。本実施例の並列実行
命令列生成方式は、IF〜THEN〜ELSEブロック
を有しかつベクトル実行が可能なループを含み高級言語
で記述されたソースプログラム1と、コンパイラ2と、
オブジェクトコードである命令列からなるオブジェクト
プログラム3とから構成されている。
る。図1は、本発明の並列実行命令列生成方式の一実施
例の構成を示すブロック図である。本実施例の並列実行
命令列生成方式は、IF〜THEN〜ELSEブロック
を有しかつベクトル実行が可能なループを含み高級言語
で記述されたソースプログラム1と、コンパイラ2と、
オブジェクトコードである命令列からなるオブジェクト
プログラム3とから構成されている。
【0007】コンパイラ2はベクトル命令列生成部21
と並列実行可能性判定部22とTHEN節命令列生成部
23とELSE節命令列選択部24と並列実行制御命令
列選択部25とを含んで構成されている。
と並列実行可能性判定部22とTHEN節命令列生成部
23とELSE節命令列選択部24と並列実行制御命令
列選択部25とを含んで構成されている。
【0008】またオブジェクトプログラム3は並列実行
制御命令列とTHEN節命令列とELSE節命令列とを
含んで構成される。
制御命令列とTHEN節命令列とELSE節命令列とを
含んで構成される。
【0009】次に、このように構成された本実施例の並
列実行命令列生成方式の動作について説明する。
列実行命令列生成方式の動作について説明する。
【0010】コンパイラ2によってソースプログラム1
が読み込まれると、ソースプログラム1中のIF〜TH
EN〜ELSE型の条件実行ブロックを含むベクトル化
可能なループに対して、並列実行可能性判定部22によ
って、ループの繰り返し間にデータ依存関係がなく、ル
ープの各繰り返しが並列実行可能であるかどうかが判定
される。並列実行が可能であれば、ベクトル命令生成部
21によって単一プロセッサのためのコード生成と同様
の方法でベクトル実行命令列が生成される。ただし、こ
のベクトル実行命令列はベクトル実行オブジェクトを生
成する前段階の中間テキストであり、レジスタ割当や各
種最適化はまだ施されていないものであるとする。
が読み込まれると、ソースプログラム1中のIF〜TH
EN〜ELSE型の条件実行ブロックを含むベクトル化
可能なループに対して、並列実行可能性判定部22によ
って、ループの繰り返し間にデータ依存関係がなく、ル
ープの各繰り返しが並列実行可能であるかどうかが判定
される。並列実行が可能であれば、ベクトル命令生成部
21によって単一プロセッサのためのコード生成と同様
の方法でベクトル実行命令列が生成される。ただし、こ
のベクトル実行命令列はベクトル実行オブジェクトを生
成する前段階の中間テキストであり、レジスタ割当や各
種最適化はまだ施されていないものであるとする。
【0011】次に、THEN節命令列選択部23によっ
て、上記ベクトル実行命令列を、THEN節を実行し、
ELSE節は実行しないように最構成し、ベクトル化さ
れたTHEN節命令列32が生成される。
て、上記ベクトル実行命令列を、THEN節を実行し、
ELSE節は実行しないように最構成し、ベクトル化さ
れたTHEN節命令列32が生成される。
【0012】さらに、ELSE節命令列選択部24によ
って、上記ベクトル実行命令列を、ELSE節を実行し
、THEN節は実行しないように最構成し、ベクトル化
されたELSE節命令列33が生成される。
って、上記ベクトル実行命令列を、ELSE節を実行し
、THEN節は実行しないように最構成し、ベクトル化
されたELSE節命令列33が生成される。
【0013】最後に並列実行制御命令列生成部25によ
って、一方のプロセッサではTHEN節命令列を実行し
、他方のプロセッサではELSE節を実行するための制
御命令を並列に実行するための並列実行制御命令列31
が生成される。
って、一方のプロセッサではTHEN節命令列を実行し
、他方のプロセッサではELSE節を実行するための制
御命令を並列に実行するための並列実行制御命令列31
が生成される。
【0014】例えば、コンパイラ2によって、図2に示
すようなFORTRAN言語で記述されたソースプログ
ラム11(図1ではソースプログラム1に対応する)中
に含まれるループ111からは、図3に示すような構造
のオブジェクトプログラム31が生成される。このオブ
ジェクトプログラムは2つのプロセッサの両方にロード
され、両方のプロセッサで並列に実行される。
すようなFORTRAN言語で記述されたソースプログ
ラム11(図1ではソースプログラム1に対応する)中
に含まれるループ111からは、図3に示すような構造
のオブジェクトプログラム31が生成される。このオブ
ジェクトプログラムは2つのプロセッサの両方にロード
され、両方のプロセッサで並列に実行される。
【0015】図3において、並列実行制御命令列31は
、同一オブジェクトコードを実行する2つのプロセッサ
において、それぞれのプロセッサに別の処理をさせるた
めの制御を行う部分であり、この例ではP#がそれぞれ
のプロセッサの識別番号(1or2)を保持しているも
のとする。この並列実行制御命令列31によってP#の
値が1のプロセッサはTHEN節命令列を、P#の値が
2つのプロセッサはELSE節命令列を実行するように
制御できる。
、同一オブジェクトコードを実行する2つのプロセッサ
において、それぞれのプロセッサに別の処理をさせるた
めの制御を行う部分であり、この例ではP#がそれぞれ
のプロセッサの識別番号(1or2)を保持しているも
のとする。この並列実行制御命令列31によってP#の
値が1のプロセッサはTHEN節命令列を、P#の値が
2つのプロセッサはELSE節命令列を実行するように
制御できる。
【0016】図4にTHEN節命令列とELSE節命令
列のオブジェクトプログラムの構造を示す。THEN節
命令列はIF文で示される論理式を評価し、論理式が真
である場合に対応するマスクを生成し、このマスクを用
いてTHEN節の命令列をマスク演算によりベクトル実
行する命令列である。ELSE節命令列はIF文で示さ
れる論理式を評価し、論理式が偽である場合に対応する
マスクを生成し、このマスクを用いてELSE節の命令
列をマスク演算によりベクトル実行する命令列である。
列のオブジェクトプログラムの構造を示す。THEN節
命令列はIF文で示される論理式を評価し、論理式が真
である場合に対応するマスクを生成し、このマスクを用
いてTHEN節の命令列をマスク演算によりベクトル実
行する命令列である。ELSE節命令列はIF文で示さ
れる論理式を評価し、論理式が偽である場合に対応する
マスクを生成し、このマスクを用いてELSE節の命令
列をマスク演算によりベクトル実行する命令列である。
【0017】この例ではループ回転数(ベクトル長)が
200のループに対して、ベクトル長を200に保った
まま並列実行するオブジェクトコードが生成されている
。
200のループに対して、ベクトル長を200に保った
まま並列実行するオブジェクトコードが生成されている
。
【0018】
【発明の効果】以上説明したように本発明の並列実行命
令列生成方式は、ベクトル命令の実行が可能な複数のプ
ロセッサを有する電子計算機システムにおいて、高級言
語で記述されたソースプログラムより、オブジェクトプ
ログラムを生成するコンパイラにおいて、ある条件1が
成立すればステートメント集合2を実行し、そうでなけ
ればステートメント集合3を実行するIF〜THEN〜
ELSE型の条件実行ブロックを含むベクトル実行可能
なループに対して、前記ループに、ループの繰り返し間
にまたがるデータ依存関係がなく、ループの各繰り返し
が並列実行可能であることを判定する並列化判定手段4
と、前記条件1が成立して、前記ステートメント集合2
を実行するループの繰り返しを選択して、ベクトル実行
するベクトル命令列5を生成するベクトル命令列生成手
段6と、前記条件1が成立せずに、前記ステートメント
集合3を実行するループの繰り返しを選択して、ベクト
ル実行するベクトル命令列7を生成するベクトル命令列
生成手段8と、前記ベクトル命令列5と、前記ベクトル
命令列6とを並列に別プロセッサで実行させる並列実行
制御命令列9を生成する並列実行制御命令列生成手段1
0と、を設けることにより、ベクトル長を短くすること
なしにIF〜THEN〜ELSE型の条件ブロックを並
列実行できるという効果がある。
令列生成方式は、ベクトル命令の実行が可能な複数のプ
ロセッサを有する電子計算機システムにおいて、高級言
語で記述されたソースプログラムより、オブジェクトプ
ログラムを生成するコンパイラにおいて、ある条件1が
成立すればステートメント集合2を実行し、そうでなけ
ればステートメント集合3を実行するIF〜THEN〜
ELSE型の条件実行ブロックを含むベクトル実行可能
なループに対して、前記ループに、ループの繰り返し間
にまたがるデータ依存関係がなく、ループの各繰り返し
が並列実行可能であることを判定する並列化判定手段4
と、前記条件1が成立して、前記ステートメント集合2
を実行するループの繰り返しを選択して、ベクトル実行
するベクトル命令列5を生成するベクトル命令列生成手
段6と、前記条件1が成立せずに、前記ステートメント
集合3を実行するループの繰り返しを選択して、ベクト
ル実行するベクトル命令列7を生成するベクトル命令列
生成手段8と、前記ベクトル命令列5と、前記ベクトル
命令列6とを並列に別プロセッサで実行させる並列実行
制御命令列9を生成する並列実行制御命令列生成手段1
0と、を設けることにより、ベクトル長を短くすること
なしにIF〜THEN〜ELSE型の条件ブロックを並
列実行できるという効果がある。
【図1】本発明の一実施例の構成を示すブロック図。
【図2】図1中のソースプログラムにおけるループの一
例を示す図。
例を示す図。
【図3】図2に示すソースプログラムから図1のコンパ
イラにより生成されるオブジェクトプログラムの構成を
示す図。
イラにより生成されるオブジェクトプログラムの構成を
示す図。
【図4】本発明の一実施例により生成されたオブジェク
トコードの構成例を示す図。
トコードの構成例を示す図。
【図5】従来方式による並列化例を示す図。
【図6】従来方式によるオブジェクトコードの構成例を
示す図。
示す図。
1,11 ソースプログラム
2 コンパイラ
3 オブジェクトプログラム
21 ベクトル命令列生成部
22 並列実行可能性判定部
23 THEN節命令列生成部
24 ELSE節命令列生成部
25 並列実行制御命令列生成部
31 並列実行制御命令列
32 THEN節命令列
33 ELSE節命令列
111 IF〜THEN〜ELSE条件ブロックを含
むループ例
むループ例
Claims (1)
- 【請求項1】 ベクトル命令の実行が可能な複数のプ
ロセッサを有する電子計算機システムにおいて、高級言
語で記述されたソースプログラムよりオブジェクトプロ
グラムを生成するコンパイラにおいて、ある条件1が成
立すればステートメント集合2を実行し、そうでなけれ
ばステートメント集合3を実行するIF〜THEN〜E
LSE型の条件実行ブロックを含むベクトル実行可能な
ループに対して、前記ループに、ループの繰り返し間に
またがるデータ依存関係がなく、ループの各繰り返しが
並列実行可能であることを判定する並列化判定手段4と
、前記条件1が成立して、前記ステートメント集合2を
実行するループの繰り返しを選択して、ベクトル実行す
るベクトル命令列5を生成するベクトル命令列生成手段
6と、前記条件1が成立せずに、前記ステートメント集
合3を実行するループの繰り返しを選択して、ベクトル
実行するベクトル命令列7を生成するベクトル命令列生
成手段8と、前記ベクトル命令列5と、前記ベクトル命
令列6とを並列に別プロセッサで実行させる並列実行制
御命令列9を生成する並列実行制御命令列生成手段10
と、を有することによって、前記条件1が成立する場合
のループ繰り返しとそうでない場合の繰り返しとを別々
のプロセッサでベクトル実行する命令列を生成すること
を特徴とする並列実行命令列生成方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP12849891A JP2870218B2 (ja) | 1991-04-30 | 1991-04-30 | 並列実行命令列生成方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP12849891A JP2870218B2 (ja) | 1991-04-30 | 1991-04-30 | 並列実行命令列生成方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH04329472A true JPH04329472A (ja) | 1992-11-18 |
JP2870218B2 JP2870218B2 (ja) | 1999-03-17 |
Family
ID=14986231
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP12849891A Expired - Fee Related JP2870218B2 (ja) | 1991-04-30 | 1991-04-30 | 並列実行命令列生成方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2870218B2 (ja) |
-
1991
- 1991-04-30 JP JP12849891A patent/JP2870218B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2870218B2 (ja) | 1999-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4042604B2 (ja) | プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム | |
Dubey et al. | Single-program speculative multithreading (SPSM) architecture: compiler-assisted fine-grained multithreading. | |
US9038042B2 (en) | Staged loop instructions | |
US5710902A (en) | Instruction dependency chain indentifier | |
US5317743A (en) | System for compiling iterated loops based on the possibility of parallel execution | |
US6446258B1 (en) | Interactive instruction scheduling and block ordering | |
JPH05143332A (ja) | 命令スケジユーラを備えたコンピユータ・システム及び入力命令シーケンスを再スケジユールする方法 | |
JPH01108638A (ja) | 並列化コンパイル方式 | |
Nguyen et al. | Lazy sequentialization for the safety verification of unbounded concurrent programs | |
Yip et al. | The ForeC synchronous deterministic parallel programming language for multicores | |
Kessler | Scheduling expression DAGs for minimal register need | |
JP3179536B2 (ja) | ディジタルコンピュータの操作方法 | |
Kazi et al. | Coarse-grained speculative execution in shared-memory multiprocessors | |
Marzulo et al. | Talm: A hybrid execution model with distributed speculation support | |
US7073169B2 (en) | Compiler device with branch instruction inserting unit | |
Nicolau et al. | Realistic scheduling: compaction for pipelined architectures | |
KR20150040663A (ko) | 소프트웨어 파이프라이닝을 이용한 명령어 스케줄링 방법 및 장치 | |
JP2870218B2 (ja) | 並列実行命令列生成方式 | |
Littin et al. | Block based execution and task level parallelism | |
Peiler | Priority-based compilation of SCCharts | |
Waduge | Taming Irregular Control-Flow with Targeted Compiler Transformations | |
Vandierendonck | The Cilk and Cilk++ Programming Languages | |
Fürtler et al. | SPOT—development tool for software pipeline optimization for VLIW-DSPs used in real-time image processing | |
von Hanxleden et al. | A balanced code placement framework | |
Prokesh et al. | A Strategy for Generating Time-Predictable Code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 19981201 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080108 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090108 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100108 Year of fee payment: 11 |
|
LAPS | Cancellation because of no payment of annual fees |