JPH0814817B2 - 自動ベクトル化方法 - Google Patents

自動ベクトル化方法

Info

Publication number
JPH0814817B2
JPH0814817B2 JP61239007A JP23900786A JPH0814817B2 JP H0814817 B2 JPH0814817 B2 JP H0814817B2 JP 61239007 A JP61239007 A JP 61239007A JP 23900786 A JP23900786 A JP 23900786A JP H0814817 B2 JPH0814817 B2 JP H0814817B2
Authority
JP
Japan
Prior art keywords
loop
variable
statement
value
sentence
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
Application number
JP61239007A
Other languages
English (en)
Other versions
JPS6394368A (ja
Inventor
京子 岩澤
義一 田中
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 JP61239007A priority Critical patent/JPH0814817B2/ja
Priority to US07/106,120 priority patent/US4833606A/en
Publication of JPS6394368A publication Critical patent/JPS6394368A/ja
Publication of JPH0814817B2 publication Critical patent/JPH0814817B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

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

Landscapes

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、ソースプログラムからスーパーコンピュー
タにおけるベクトル処理が可能となるようなオブジェク
トコードを生成するコンパイル方式に係り、特に、最内
側ループの実行比率が低いプログラムにおいて、多重ル
ープの外側ループをベクトル処理して実行効率の高いオ
ブジェクトコードになるようプログラム変換する方式に
関する。
スーパーコンピュータたとえば、本譲受人によるスー
パーコンピュータS-810には、配列の各要素を同時に保
持できるベクトルレジスタと、このベクトルレジスタ上
の演算を高速に実行するベクトル演算器が用意されてお
り、これらを有効に用いることにより、ソースプログラ
ムの繰り返しループで要求される処理を高速に実行する
ことができる。ソースプログラム中の繰り返しループを
ベクトルレジスタとベクトル演算器を用いるベクトル命
令からなるオブジェクトコードに変換することをベクト
ル化という。また、全プログラムのうち、ベクトル演算
器により実行される部分の割合をベクトル化率と呼ぶ。
一般に、スーパーコンピュータでは、ベクトル化率が高
い方がオブジェクトコードの実行効率が高いことが知ら
れている。
従来のコンパイラは、最内側ループをベクトル演算の
対象として、その最内側ループのベクトル化のために様
々なプログラム変換を施してきた。そのなかに変数を配
列に置き換える配列化という変換がある。これは次のよ
うな手法である。
DO 10 I=1,100 S=X(I)/Y(I) 10 B(I)=S*A(I)+S このようなソースプログラム対して、このままベクト
ル化して得られるオブジェクトコードは、以下の処理を
するものとなる。まず、配列X,Yの第1〜第100要素群を
各々第1、第2のベクトルレジスタにロードし、第1、
第2のベクトルレジスタ内の対応する要素間で除算を行
い、最終結果を変数Sにストアする。次に、配列Aの第
1〜第100要素を第3のベクトルレジスタにロードし、
それらとスカラデータSとかけ合わせた結果を第4のベ
クトルレジスタに格納し、その第4のベクトルレジスタ
からメモリ上に、配列Bの第1〜第100要素としてスト
アする。
即ち、次のようにプログラム変換することと等しい。
DO 10 I=1,100 10 S=X(I)/Y(I) DO 11 I=1,100 11 B(I)=S*A(I)+S しかしこのまま実行すると、DO10のループが終了した
時のS=X(100)/Y(100)の値しかDO11の計算では使
うことができないため、変換前のプログラムとは計算結
果が異ってしまう。変換前と同じ計算を行うためには、
Sを配列にして、I=1,100の全ての値を保存し、それ
をDO11のループで使うよう、次のように置き換える必要
がある。
DO 10 I=1,100 10 S′(I)=X(I)/Y(I) DO 11 I=1,100 11 B(I)=S′(I)*A(I)+S′(I) このような変数から配列への変換を配列化という。この
S′のようにコンパイラが作り出した配列をテンポラリ
配列という。
配列化に関する公知例としては、Kuckらの論文「Depend
ence Graphs and Compiler Optimization」SIGPLAN,Pri
nciples of Programming Languages,Jan.1981,p207〜21
8があげられる。
上記論文では、多重ループの最内側ループにのみ現れ
る変数を配列化する方式について論じられている。すな
わち、対象とする最内側ループがn重ループの最内側ル
ープである場合は、n次元の配列に変数を置き換えてい
る。
例えば、次のプログラムの場合に変数P,Sの内、 DO 20 I=1,N S=Y(I)/X(I) DO 10 J=1,N P=A(I,J)+X(J) B(I,J)=P*S/A(I,J) 10 CONTINUE 20 CONTINUE 最内側ループ内のみに表れる変数Pの配列化を論じてお
り、Sのように、2つのループにまたがって現れる変数
については論じられていない。
〔発明が解決しようとする問題点〕
上記従来技術では、最内側ループについては、変数を
配列に置換し、遂次実行の時と等しい計算結果を生じ
る、ベクトル演算器で実行可能なオブジェクトコードを
生成できるしかし、オブジェクトコードの実行効率を高
めるために多重ループの最内側ループばかりではなく、
その外側ループもベクトル演算させる必要がある。
30 B(I)=…+S+… }外側部 このようなプログラムに対して、最内部の変数Sを配
列に置き換え、ベクトル処理を施すことはできるが、外
側部のSの配列化に対しては考慮されておらず、公知技
術を適用しただけでは、ベクトル演算を行うと、逐次演
算したした場合と結果が異なるという問題がある。
本発明の目的は、上記プログラムの変数Sのように、
外側部で足義した値を内側ループで用いていたり、内側
ループで定義した値を外側部で用いるような変数を配列
に置き換え、外側部にもベクトル処理を施すことができ
るようにオブジェクトコードを生成するコンパイル方法
を提供することにある。
本発明のもう一つの目的は、上記の配列化により導入
する配列の大きさを最小限にし、もって、必要とするメ
モリ容量が小さくてすむオブジェクトコードを生成する
コンパイル方法を提供することにある。
〔問題点を解決するための手段〕
上記目的は、コンパイラの自動ベクトル化処理におい
て、コンパイルすべき多重ループ中の変数の定義と参照
の順序を示すデータ依存グラフの有向線分でつながって
いる連結成分を検出し、この連結成分ごとに変数を配列
に置き換え、この配列に対して、ループを実行する前の
変数の値を設定する代入文を最内側ループ直前に挿入
し、ループ実行後の配列の適切な要素の値を元の変数に
設定する代入文を多重ループの後に挿入することによ
り、達成される。
変数の値を決める定義とその値を使う参照の順序を示
すフロー依存グラフの連結成分を検出して、異なる計算
に使われている同じ名称の変数に異なる名称を付ける。
各連結成分ごとに、ベクトル処理の対象としているルー
プにおける変数の定義と参照の順序に応じて添字付変数
すなわち配列への変換要、不要を判定し、必要な場合は
配列でもって、その変数をテンポラリ配列に置き換え
る。テンポラリ配列とソースプログラムには現れず、コ
ンパイラがオブジェクトコードの実効性能向上のために
作った一時的な作業用配列である。ある変数に関してル
ープのi回目に定義した値を、次のi+1回目のループ
で用いていたり、ベクトル化処理の対象ループの内側の
ループで用いている場合はその変数の配列化が必要であ
ると判断する。これはメモリを介して、データの受け渡
しをする必要があるためである。
ベクトル化処理の対象としているループの中で使用さ
れるテンポラリ配列について、ループ1回目の計算に用
いられる値が、ループの外側で定義されている場合は、
テンポラリ配列にベクトル化処理の対象としているルー
プを実行する直前の変数の値を代入して初期値を保証す
る。さらに、当該ループ中で定義した値をループの外側
で使用される場合は、テンポラリ配列の最終要素の値を
置換前の変数に代入して終値を保証する。当該ループが
内側ループを含んでいる場合には、同様に内側ループに
対しても初期値と終値を保証する代入文を挿入するか否
かを判別する。
〔作用〕
前記手段により、第2図の(a)、(b)、(c)、
(d)のソースプログラムは各々第7図のように変換し
てからベクトル化される。図中「…」はSとは無関係な
演算を表す。
(a)外側ループi回目で値を定義した変数の値を、そ
の外側ループのi回目の内側ループで使用する場合 第2図(a)のように、外側ループで変数Sを定義す
る文19とその内側ループでその変数Sを使用する文20と
が含まれている場合、外側部のベクトル化のためには、
第7図(a)のようにDO20ループの直前でDO10のループ
を2つに分割する必要がある。第7図(a)のようにS
をテンポラリ配列TV1で置き置えれば第2図(a)と同
様の計算を行うことができる。即ち、第7図(a)のDO
10ループでI=1〜Nの各回のSを計算し、その結果を
TV1[1:N]に保持し、次のDO11ループで、TV1の要素の
値を順に変数Sに代入すれば、DO20ループはこのままベ
クトル化することができ、第2図(a)と同様の計算を
行うことになる。
(b)外側ループi回目の時に実行した内側ループで定
義した変数の値を、外側ループi+1回目の計算で用い
る場合 第2図(b)のように、内側ループで変数Sを定義す
る文22と、その変数を次の外側ループの繰り返し時に使
用する文21とがある場合、文21を含む外側部をベクトル
化するためには、DO20ループの直前で、DO10ループを2
つに分割する必要がある。ループを分割しても同じ計算
を実行させるためには、外側ループの各回で計算した文
22のSの値を配列に保持し、その値を文21の計算に使用
できるよう変形しなければならない。第6図(b)の文
64のようにSをテンポラリ配列TV1で置き換えると、文2
1の計算に、I=1の時は、ループの外のSの値を用
い、I>1の時は、1回目の文21′の計算に、I-1回目
の内側ループの文22の計算結果を使用することができ
る。これより、DO20のループと文21′を入れ換えても計
算結果は保証され、第7図(b)に示すようにループを
分割しても、第2図(b)と同じ計算を実行させること
ができる。(c)外側ループi回目に実行した内側ルー
プで定義した変数の値を、外側ループi回目の計算で用
いる場合 第2図(c)のように、内側ループに変数Sを定義す
る文23を含み、外側ループにこの変数を使用する文24を
含む場合、外側部のベクトル処理のためには、DO20ルー
プの直後で、第7図(c)のように、DO10ループを2つ
のループを分割する必要がある。ループを分割しても同
じ計算をさせるためには、外側ループの各回で計算した
文23のSの値を保持し、その値を文24の計算に使用でき
るよう変形しなければならない。第6図(c)の文58の
ように変数Sをテンポラリ配列TV1で置き換えると、外
側ループI回目に内側ループで計算した値を、I回目の
文24の計算に使用することができる。この後、第7図
(c)に示すようにループを分割しても、第2図(c)
と同じ計算を実行させることができる。(d)外側ルー
プi回目で定義した値を、外側ループi+1回目の内側
ループで使用する場合 第2図(d)のように、外側ループで変数Sを定義す
る文25と、その変数Sを、外側ループの次回の実行時に
使用する、内側ループ内の文25とがある場合、文26を含
む外側部をベクトル化するためには、DO20のループの直
後でDO10ループを2つに分割する必要がある。第7図
(d)のようにSをテンポラリ配列TV1で置き換える
と、第2図(d)と同じ計算を行うことができる。文2
5′の計算に外側ループのI=1の時は、ループの外の
Sの値を用い、I>1の時は、I回目の内側ループの文
25′の計算に、I-1回目の文26の計算結果を用いること
ができる。これにより、DO20のループと文26を入れ換え
ても計算結果は保証され、第7図(d)に示すようにル
ープを分割しても、第2図(d)と同じ計算を実行させ
ることができる。
〔実施例〕
以下、本発明のFORTRANコンパイラにおける実施例を
図表を参照しつつ説明する。
第1図に、本発明が適用されたコンパイラ1の全体の
構造を示す。FORTRANソースプログラム11を入力として
処理2は構文解析を行い、中間語12を出力する。処理3
は、これを入力としてベクトル化や最適化を行ない、中
間語12を変換する。この中間語12を入力として、処理4
は、オブジェクトコード14を生成する。本発明の特徴は
処理3にあり、ベクトル化率の高いオブジェクトコード
14を生成するものである。
第1図では処理3の内、特に自動ベクトル化処理に係
わる部分を示し、他は簡単化のために省略してある。処
理7には、自動ベクトル化処理のうち特に変数の配列化
に係る部分を示し、他は簡単化のために省略してある。
ソースプログラム11が、二重ループを含み、その二重
ループの内の外側ループで計算した値を内側ループで使
用したり、逆に内側ループで計算した値と外側ループで
使うような変数を含む場合、その変数を配列にて置換す
る配列化について説明する。
フロー依存は、第2図の(a),(b),(c),
(d)のよつの型に分類することができる。第2図
(a)〜(d)の図中「・・・」は、Sとは無関係な演
算を現わす。
まず、第1図の処理5が制御構造を解析しソースプロ
グラム11に対して2重ループを検出し、次に第1図の処
理6では、まずデータフローを解析し、計算してある変
数の値を決める定義文と、その値を他の計算に用いる使
用文との間を有向線分で結ぶフロー依存グラフを検出す
る。第2図(a)〜(d)の27,28,29,30は検出される
有向線分を示す。さらに、このデータフロー解析6で
は、検出されたフロー依存があるループのi回目に計算
されたある変数値を、i回目に使うフロー依存なのか、
i+1回目に使うフロー依存なのかの区別を行う。i回
目に計算した値をi回目に使う依存ループ独立な依存、
次のi+1回目に使う依存をループ運搬2回の依存とい
う。このようなデータフロー解析方法については公知で
あり、情報処理学会論文誌、第28巻第6号p567〜576の
金田らの論文「配列の大域データフロー解析法」に論じ
られている。
このようなフロー依存グラフと、ソースプログラムの
中間表現が、第1図の処理7の自動ベクトル化処理の入
力となる。
第1図の処理8は、ベクトル化の対象とする2重ルー
プ内の変数のフロー依存について、グラフ上有向線分で
連結されている連結成分ごとのグループに分類する。連
結成分検出のアルゴリズムはグラフ理論の文野では基本
的であり、公知である。
第2図(a)〜(d)のプログラムでは、いずれも、
1つの連結成分のみであるから、変数Sについて、グル
ープ分けすることはない。
次に第1図の処理9が、変数をテンポラリ配列に置き
換える。これを配列化と呼ぶ。この処理の流れを第3図
に示す。外側ループから順に配列化処理を行うため、ま
ず、外側のDO10ループを対象とする。この時には、内側
ループの変数についてはいかなる変換も施さない。各ル
ープのネストレベルごとに独立に処理を行うためであ
る。すなわち、外側ループの処理の終了後に、内側ルー
プについて処理を施す。
第3図は、この配列化処理の詳細を示す。第3図の判
定31においては、処理8で検出した連結成分内のフロー
依存にある変数の値を計算した図の次の回にその値を使
うというループ運搬依存性2回の変数があるか否かを判
定する。第2図(b)のフロー依存28や、第2図(d)
のフロー依存30がこの例である。処理33では、そのよう
なループ運搬依存性2回のフローを有し、その値を定義
するのに用いられている変数(これを定義点にある変数
と呼ぶ)が配列化処理9の対象となっているループ中に
ある場合に、その定義点にある変数を、配列化処理9の
対象としているループの繰り返し回数Iに対して、添字
I+1を付けて配列化する。たとえば第2図(b)の文
22の変数Sは、内側ループにて定義される変数であるた
め、外側ループに対して配列化処理9をしているときに
は上記配列化はしないが、第2図(d)の文26中の変数
Sは、外側ループで定義される変数であるため外側ルー
プに対して配列化処理9をするときに、その外側ループ
の繰り返し回数Iに対して、添字I+1を付けてテンポ
ラリ配列TV1(I+1)で置き換えて配列化し、第4図
(d)の文26′をしたる。上記ループ運搬依存性2回を
有する変数で定義点において定義された、同じ変数につ
いての、値を使用する位置にある変数(これを参照点に
ある変数と呼ぶ)が配列化処理9の対象としているルー
プ中にある場合に、その定義点にある変数とその参照点
にある変数の間のフロー依存に、ループ運搬性があるか
否かに応じて処理35と処理34のいずれかを行う。すなわ
ち、両者の間にループ運搬性がない場合、つまり当該ル
ープ中のi回目で定義された変数をその同じループ回数
で使用する場合は、定義点の変数についての処理33と同
様、その参照点の変数もループ回数Iに対して、添字I
+1を付けた配列に配列化する(処理34)。ループ運搬
性がある場合、つまり、あるループのi回目に定義され
た変数をi+1回目に使用する場合は、その参照点にあ
る変数を、そのループのループ回数Iに対して、添字I
を付けて配列に配列化する(処理35)。第2図(b)の
文21中の変数Sがこの例で、この変数を、添字Iを付け
たテンポラリ配列TV1(I)で置き換えて配列化し、第
4図(b)の文21′を作る。
第3図の判定31で、ループ運搬依存2回のフロー依存
が無ければ、判定32が、フロー依存の相手が内側ループ
にあるか否かを判定し、フロー依存の相手が内側ループ
にあれば、処理36で、配列化処理対象のループの変数
を、その変数が定義点の変数と参照点の変数のいずれで
あってもループ回数Iに対して添字Iを付けて配列化す
る。この時も、内側ループの変数は配列化しない。第2
図(a)の文19の変数Sや第2図(c)中の文24中の変
数Sがこの例で、それぞれの変数Sを外側ループの繰り
返し回数Iに対して、添字Iを付けてテンポラリ配列TV
1(I)に書き換えて配列化し、第4図(a)の文19′
や第4図(c)の文24′を作る。
以上の第3図の処理を内側ループに対しても実施す
る。こうして配列化処理9(第1図)が終了する。
次に、第1図の初期値・終値保証代入文挿入処理10で
は当該ループの前後や内側ループの前後に各々のループ
に対する、配列化した変数の初期値や終値を保証するた
めの代入文を挿入する。この処理の流れを第5図のフロ
ーチャートに示す。判定46で終了と判定されるまで、全
てのテンポラリ配列について以下の処理を施す。
判定47で、配列化した変数がその値を使われる参照点
かその値を決定する定義点かを分ける。定義点であれ
ば、判定48で、処理中の2重ループの外へフロー依存が
届くか否かにより、当該2重ループに対する終値保証の
必要性を判定する。外側へフロー依存が届く場合は、処
理49で、配列の最終要素の値をもとの変数の値に代入す
る文を挿入する。
第4図(a),(b),(c),(d)の例だと、各
々DO10ループの直後に、代入文60,61,62,63(第61
(a)〜(d))を挿入する。
判定50では、当該ループの内側ループへフロー依存が
届くか否かにより、内側ループに対する初期値保証の必
要性を判定する。内側ループにフロー依存が届く場合
は、処理51が、内側ループに対する初期値保証の代入文
を内側ループの直前に挿入する。内側ループへのフロー
依存がループ独立であれば、定義点の添字と同じ添字で
表わされる要素の値をもとの変数に代入する文を内側ル
ープの直前に挿入する。第4図(a)の文19′がこの例
で、文19′の定義点と同様、第I要素の値を変数Sに代
入する文を内側ループの直前に挿入し、第6図(a)の
文56のようにする。内側ループへのフロー依存が、ルー
プ運搬依存2回であれば、定義点の添字より1小さい添
字で表わされる要素の値のもとの変数に挿入する文を内
側ループの直前に挿入する。第4図(d)の文26′がこ
の例で、文26′の定義点の添字I+1より1小さい、第
I要素の値を変数Sに代入する文を内側ループの直前に
挿入し、第6図(d)の文59のようにする。
配列化した変数が参照点であれば、第5図の判定52
が、当該ループの外からフロー依存が届くか否かによ
り、当該ループに対する初期値保証の必要性を判定す
る。外からフロー依存が届く場合は、処理53が、もとの
変数の値を配列の第1要素へ代入する文を、当該ループ
の直前に挿入する。第6図(b)や(d)がこの例でDO
10ループの直前に文64,文65を挿入し、TV1の第1要素に
値を改定する。
判定54は、当該ループの内側ループからのフロー依存
が届くか否かにより、内側ループの終値保証の必要性を
判定する。内側ループからのフロー依存が届く場合は、
処理55が、内側ループの終値を保証する代入文を内側ル
ープの直後に挿入する。内側フロー依存からのフロー依
存がループ独立であれば、参照点の添字と添字で表わさ
れる要素へもとの変数の値を代入する文を内側ループの
直後に挿入する。第4図(c)の文24′がこの例で、文
24′の参照点と同様、第I要素へ変数Sの値を代入する
文を内側ループの直後に挿入し、第6図(c)の文58の
ようにする。内側ループへのフロー依存が、ループ運搬
依存2回であれば、参照点の添字より1大きい添字で表
わされる要素へもとの変数の値を代入する文を内側ルー
プの直後に挿入する。第4図(b)の文21′がこの例
で、文21′の参照点の添字Iより1大きい、第I+1要
素に変数Sの値を代入する文を内側ループの直後に挿入
し、第6図(b)の文57のようにする。
以上のようにして、内側ループと依存関係がある変数
について、外側ループの配列化と初期値・終値保証用代
入文の追加が終了する。
このようにすることにより、文の移動が可能になり、
内側ループの前後で次のループ分割処理100(第1図)
を施すと、外側ループもベクトル化可能とすることがで
きる。
第7図(a)は、第6図(a)の内、外側ループ部分
に属するテンポラリ配列を含む文19′を単一のループと
して分割した結果を示す。第7図(b)は、第6図
(b)の文21′を外側ループの末尾に移動した後、単一
のループとして分割した結果を示す。第7図(c)は、
第6図(c)の文24′を単一のループとして分割した結
果を示す。第7図(d)は、第6図(d)の文26を外側
ループの先頭部分に移動した後単一のループとして分割
した結果を示す。第7図(b)では第6図(b)の文2
1′を、第7図(d)では文26′を移動しかつ、外側ル
ープを分割したが、第4図(b),(d)とそれぞれ全
く同一の計算を行う。
この後、第7図(a),(b),(c),(d)の内
側ループDO20の変数Sについても、必要と判断すれば、
配列に置き換える。第7図(a)は文20で、第7図
(d)は文25で、Sの値を使うばかりで、DC20のループ
内で新しく定義をしていないため、フロー依存の関係は
なく配列化は行わない。第7図(b),(c)は、前述
の実行例で示した処理と同様の処理を施すと、第8図
(a),(b)のようになる。
こうして、第7図(a)のDO10とDO20、第7図(d)
のDO10とDO20のループを、第8図(a)のDO20とDO11、
第8図(b)のDO20とDO11のループをそれぞれベクトル
化する。すなわち、ベクトル命令を使用するオブジェク
トコードを生成する。
〔発明の効果〕
本発明によれば、多重ループにまたがって、値を決め
る定義とそれを用いる参照がある変数を、配列化するこ
とができる。このことにより、内部にループに含むよう
なループも最内側ループと同様に取扱うことができ、文
の移動など、ベクトル化のためのプログラム変換を施
し、ベクトル処理を行う形に変換することができる。
従来、ベクトル化の対象としていなかった、最内側以
外のループをベクトル化の対象とすることにより、ベク
トル化の範囲は広がり、ベクトル化率が上がる。その結
果、生成するオブジェクトコードの実行効率が高まる効
果がある。
【図面の簡単な説明】
第1図は、本発明によるコンパイラ処理のフロー図、 第2図(a)はソースプログラム中の2重ループの一例
を示す図、 第2図(b)はソースプログラム中の2重ループの他の
例を示す図、 第2図(c)はソースプログラム中の2重ループの他の
例を示す図、 第2図(d)はソースプログラム中の2重ループの他の
例を示す図、 第3図第1図の配列化処理(9)のフローチャート、 第4図(a)は第2図(a)のプログラムに対する配列
化処理の結果を示す図、 第4図(b)は第2図(b)のプログラムに対する配列
化処理の結果を示す図、 第4図(c)は第2図(c)のプログラムに対する配列
化処理の結果を示す図、 第4図(d)は第2図(d)のプログラムに対する配列
化処理の結果を示す図、 第5図は第1図の初期値・終値保証代入文挿入処理(1
0)のフローチャート、 第6図(a)は、第4図(a)のプログラムに対する初
期値・終値保証処理の結果を示す図、 第6図(b)は第4図(b)のプログラムに対する初期
値・終値保証処理の結果を示す図、 第6図(c)は第4図(c)のプログラムに対する初期
値・終値保証処理の結果を示す図、 第6図(d)は第4図(d)のプログラムに対する初期
値・終値保証処理の結果を示す図、 第7図(a)は第6図(a)のプログラムに対してルー
プ分割処理をした結果を示す図、 第7図(b)は第6図(b)のプログラムに対してルー
プ分割処理をした結果を示す図、 第7図(c)は第6図(c)のプログラムに対してルー
プ分割処理をした結果を示す図、 第7図(d)は第6図(d)のプログラムに対してルー
プ分割処理をした結果を示す図、 第8図(a)は第7図(b)の内側ループに対する配列
化処理の結果を示す図、 第8図(b)は第7図(c)の内側ループに対する配列
化処理の結果を示す図。

Claims (8)

    【特許請求の範囲】
  1. 【請求項1】ソースプログラム内の多重ループ内に、そ
    の多重ループの内側ループの前に位置し、ある変数の値
    を定義する第1の文と、その内側ループに含まれ、その
    変数を使用する第2の文との組み合せがあるか否かを判
    別し、 その組み合せがあるときには、上記変数の代わりに一時
    的に使用する配列の、上記外側ループの繰返し変数を添
    え字とする要素でもって上記変数を定義する第3の文
    を、上記多重ループ内で、かつ、上記内側ループの前に
    付加し、 上記配列の各要素の値を定義するための新たなループと
    して、上記多重ループの外側のループの各繰返し時に上
    記第1の文により定義される上記変数の値でもって、該
    配列の各要素を定義する第4の文を有するループを、該
    外側ループに先行する位置に付加し、かつ、該第1の文
    を削除し、 上記二つの付加および削除を行なった後の上記ソースプ
    ログラムをベクトル化する自動ベクトル化方法。
  2. 【請求項2】上記ソースプログラム内に、上記多重ルー
    プの処理を実行した後の上記変数の最終値を使用する第
    5の文がある場合には、上記置換後の多重ループと上記
    第5の文の間に、上記変数の最終値を、上記配列の最後
    の要素でもって定義する文を追加するステップをさらに
    有する請求項1記載の自動ベクトル化方法。
  3. 【請求項3】ソースプログラム内の多重ループ内に、そ
    の多重ループの内側ループに含まれた、ある変数の値を
    定義する第1の文と、その内側ループの後に位置する、
    その変数を使用する第2の文との組み合せがあるか否か
    を判別し、 その組み合せがあるときには、上記変数の代わりに一時
    的に使用する配列の、上記外側ループの繰返し変数を添
    え字とする要素をその時の上記変数の値により定義する
    第3の文を、該内側ループの後に付加し、かつ、該第2
    の文を削除し、 上記第2の文で使用される上記変数に代えて上記配列の
    各要素を使用するための第4の文を有する新たなループ
    を上記多重ループの後に付加し、 上記多重ループに対する付加および削除、ならびに上記
    新たなループの付加を行なった後の上記ソースプログラ
    ムをベクトル化する自動ベクトル化方法。
  4. 【請求項4】上記ソースプログラム内に、上記多重ルー
    プの処理を実行した後の上記変数の最終値を使用する第
    5の文がある場合には、上記追加されたループと上記第
    5の文の間に、上記変数の最終値を、上記配列の最後の
    要素でもって定義する文を追加するステップをさらに有
    する請求項3記載の自動ベクトル化方法。
  5. 【請求項5】ソースプログラム内の多重ループ内に、そ
    の多重ループの内側ループに含まれた、ある変数の値を
    定義する第1の文と、その外側ループに含まれ、その内
    側ループの前に位置する、その変数を使用する第2の文
    との組み合せがあるか否かを判別し、 その組み合せがあるときには、上記変数の代わりに一時
    的に使用する配列の、上記外側ループの繰返し変数の次
    の値を添え字とする要素を、その時の上記変数の値によ
    り定義する第3の文を、該多重ループ内の該内側ループ
    の後に付加し、かつ、該第2の文を削除し、 上記第2の文で使用される上記変数に代えて上記配列の
    各要素を使用するための第4の文を有する新たなループ
    を上記多重ループの後に付加し、 上記外側ループの前に、上記配列の要素のうち、上記外
    側ループで使用される最初の要素でもって上記変数の初
    期値を定義する第5の文を付加し、 上記多重ループに対する付加および削除、ならびに上記
    新たなループの付加および上記第5の文の付加を行なっ
    た後の上記ソースプログラムをベクトル化する自動ベク
    トル化方法。
  6. 【請求項6】上記ソースプログラム内に、上記多重ルー
    プの処理を実行した後の上記変数の最終値を使用する第
    6の文がある場合には、上記追加されたループと上記第
    6の文の間に、上記変数の最終値を、上記配列の最後の
    要素でもって定義する文を追加するステップをさらに有
    する請求項5記載の自動ベクトル化方法。
  7. 【請求項7】ソースプログラム内の多重ループ内に、そ
    の多重ループの内側ループの後に位置する、ある変数の
    値を定義する第1の文と、その内側ループに含まれ、そ
    の変数を使用する第2の文との組み合せがあるか否かを
    判別し、 その組み合せがあるときには、上記変数の代わりに一時
    的に使用する配列の、上記外側ループの繰返し変数を添
    え字とする要素でもって上記変数を定義する第3の文
    を、該多重ループ内で、かつ、内側ループの前に付加
    し、かつ、上記第1の文を削除し、 上記配列の各要素の値を定義するための新たなループと
    して、上記多重ループの外側のループの各繰返し時に上
    記第1の文により定義される上記変数の値でもって、上
    記外側ループの繰返し変数の次の値を添え字とする該配
    列の各要素を定義する第4の文を有するループを、該外
    側ループに先行する位置に付加し、 上記新たなループの前に、上記配列の要素のうち、上記
    外側ループで使用される最初の要素でもって上記変数の
    初期値を定義する第5の文を付加し、 上記多重ループに対する置換および付加ならびに第5の
    文の付加を行なった後の上記ソースプログラムをベクト
    ル化する自動ベクトル化方法。
  8. 【請求項8】上記ソースプログラム内に、上記多重ルー
    プの処理を実行した後の上記変数の最終値を使用する第
    6の文がある場合には、上記置換後の多重ループと上記
    第6の文の間に、上記変数の最終値を、上記配列の最後
    の要素でもって定義する文を追加するステップをさらに
    有する請求項7記載の自動ベクトル化方法。
JP61239007A 1986-10-09 1986-10-09 自動ベクトル化方法 Expired - Lifetime JPH0814817B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP61239007A JPH0814817B2 (ja) 1986-10-09 1986-10-09 自動ベクトル化方法
US07/106,120 US4833606A (en) 1986-10-09 1987-10-07 Compiling method for vectorizing multiple do-loops in source program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP61239007A JPH0814817B2 (ja) 1986-10-09 1986-10-09 自動ベクトル化方法

Publications (2)

Publication Number Publication Date
JPS6394368A JPS6394368A (ja) 1988-04-25
JPH0814817B2 true JPH0814817B2 (ja) 1996-02-14

Family

ID=17038506

Family Applications (1)

Application Number Title Priority Date Filing Date
JP61239007A Expired - Lifetime JPH0814817B2 (ja) 1986-10-09 1986-10-09 自動ベクトル化方法

Country Status (2)

Country Link
US (1) US4833606A (ja)
JP (1) JPH0814817B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104201394A (zh) * 2014-09-23 2014-12-10 浙江南都电源动力股份有限公司 铅酸蓄电池集流体

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3053092B2 (ja) * 1987-06-05 2000-06-19 株式会社日立製作所 並列化コンパイル方法
US5396627A (en) * 1987-11-06 1995-03-07 Hitachi, Ltd. Method of producing object program based on interprocedural dataflow analysis of a source program
JP2749039B2 (ja) * 1987-11-06 1998-05-13 株式会社日立製作所 オブジェクト生成方法
CA1319757C (en) * 1988-07-29 1993-06-29 Digital Equipment Corporation Echelon method for execution of nested loops in multiple processor computers
EP0353819B1 (en) * 1988-08-02 1997-04-09 Koninklijke Philips Electronics N.V. Method and apparatus for synchronizing parallel processors using a fuzzy barrier
US5313387A (en) * 1989-06-30 1994-05-17 Digital Equipment Corporation Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers
US5182806A (en) * 1989-06-30 1993-01-26 Digital Equipment Corporation Incremental compiler for source-code development system
US5325531A (en) * 1989-06-30 1994-06-28 Digital Equipment Corporation Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US5301327A (en) * 1989-06-30 1994-04-05 Digital Equipment Corporation Virtual memory management for source-code development system
US5201050A (en) * 1989-06-30 1993-04-06 Digital Equipment Corporation Line-skip compiler for source-code development system
US5170465A (en) * 1989-06-30 1992-12-08 Digital Equipment Corporation Incremental-scanning compiler for source-code development system
US5193191A (en) * 1989-06-30 1993-03-09 Digital Equipment Corporation Incremental linking in source-code development system
JPH03111971A (ja) * 1989-09-27 1991-05-13 Toshiba Corp ベクトル化診断方式
JPH03150636A (ja) * 1989-11-08 1991-06-27 Matsushita Electric Ind Co Ltd コンパイル方法
US5623650A (en) * 1989-12-29 1997-04-22 Cray Research, Inc. Method of processing a sequence of conditional vector IF statements
US5197130A (en) * 1989-12-29 1993-03-23 Supercomputer Systems Limited Partnership Cluster architecture for a highly parallel scalar/vector multiprocessor system
JPH04211830A (ja) * 1990-02-05 1992-08-03 Matsushita Electric Ind Co Ltd 並列化コンパイル方式
JPH0475139A (ja) * 1990-07-18 1992-03-10 Toshiba Corp ループ並列化装置
WO1992003782A1 (en) * 1990-08-23 1992-03-05 Super-Computer Systems Limited Partnership Parsing program data streams
US5247696A (en) * 1991-01-17 1993-09-21 Cray Research, Inc. Method for compiling loops having recursive equations by detecting and correcting recurring data points before storing the result to memory
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
US5293631A (en) * 1991-08-06 1994-03-08 Hewlett-Packard Company Analysis and optimization of array variables in compiler for instruction level parallel processor
JPH05250341A (ja) * 1991-11-11 1993-09-28 Matsushita Electric Ind Co Ltd 並列可能性判定装置、及び並列可能性判定方法、並びにそれを用いたプログラム変換装置
US5278986A (en) * 1991-12-13 1994-01-11 Thinking Machines Corporation System and method for compiling a source code supporting data parallel variables
US6055627A (en) * 1992-06-22 2000-04-25 Hitachi, Ltd. Compiling method of accessing a multi-dimensional array and system therefor
US5442792A (en) * 1992-08-07 1995-08-15 Hughes Aircraft Company Expert system compilation method
JP2634137B2 (ja) * 1993-01-27 1997-07-23 インターナショナル・ビジネス・マシーンズ・コーポレイション ユーザ・インターフェースシステム及び方法
AU6774894A (en) * 1993-04-26 1994-11-21 Comdisco Systems, Inc. Method for scheduling synchronous data flow graphs
US5485619A (en) * 1993-12-29 1996-01-16 International Business Machines Corporation Array variable transformation system employing subscript table mapping to scalar loop indices
US5802375A (en) * 1994-11-23 1998-09-01 Cray Research, Inc. Outer loop vectorization
US6049864A (en) * 1996-08-20 2000-04-11 Intel Corporation Method for scheduling a flag generating instruction and a subsequent instruction by executing the flag generating instruction in a microprocessor
US6415264B1 (en) 1997-07-08 2002-07-02 Walker Digital, Llc System and method for determining a posting payment amount
JP3196675B2 (ja) * 1996-12-27 2001-08-06 日本電気株式会社 言語処理方式
US6029005A (en) * 1997-04-01 2000-02-22 Intel Corporation Method for identifying partial redundancies in a new processor architecture
US6031994A (en) * 1997-04-01 2000-02-29 Intel Corporation Method for determining the set of variables that may be ambiguously defined at a point in a computer program
US5991540A (en) * 1997-04-01 1999-11-23 Intel Corporation Method for identifying partial redundancies in existing processor architectures
US6151704A (en) * 1997-04-01 2000-11-21 Intel Corporation Method for optimizing a loop in a computer program by speculatively removing loads from within the loop
US6038398A (en) * 1997-05-29 2000-03-14 Hewlett-Packard Co. Method and apparatus for improving performance of a program using a loop interchange, loop distribution, loop interchange sequence
US7185330B1 (en) * 2001-01-05 2007-02-27 Xilinx, Inc. Code optimization method and system
US7257808B2 (en) * 2002-01-03 2007-08-14 Intel Corporation System and method to reduce the size of source code in a processing system
US7581215B1 (en) * 2003-06-30 2009-08-25 Sun Microsystems, Inc. Dependency analysis system and method
US7487497B2 (en) * 2004-08-26 2009-02-03 International Business Machines Corporation Method and system for auto parallelization of zero-trip loops through induction variable substitution
US8954484B2 (en) * 2009-06-12 2015-02-10 Cray Inc. Inclusive or bit matrix to compare multiple corresponding subfields
US8433883B2 (en) 2009-06-11 2013-04-30 Cray Inc. Inclusive “OR” bit matrix compare resolution of vector update conflict masks
US8583898B2 (en) * 2009-06-12 2013-11-12 Cray Inc. System and method for managing processor-in-memory (PIM) operations
US8826252B2 (en) * 2009-06-12 2014-09-02 Cray Inc. Using vector atomic memory operation to handle data of different lengths
US8458685B2 (en) * 2009-06-12 2013-06-04 Cray Inc. Vector atomic memory operation vector update system and method
US8621448B2 (en) 2010-09-23 2013-12-31 Apple Inc. Systems and methods for compiler-based vectorization of non-leaf code
US9529574B2 (en) 2010-09-23 2016-12-27 Apple Inc. Auto multi-threading in macroscalar compilers
US8949808B2 (en) 2010-09-23 2015-02-03 Apple Inc. Systems and methods for compiler-based full-function vectorization
US8881124B2 (en) 2010-12-21 2014-11-04 Panasonic Corporation Compiler device, compiler program, and loop parallelization method
US9361079B2 (en) * 2012-01-30 2016-06-07 Nvidia Corporation Method for compiling a parallel thread execution program for general execution
US9244677B2 (en) 2012-09-28 2016-01-26 Intel Corporation Loop vectorization methods and apparatus
WO2014142972A1 (en) 2013-03-15 2014-09-18 Intel Corporation Methods and systems to vectorize scalar computer program loops having loop-carried dependences
US10346144B2 (en) * 2017-09-29 2019-07-09 Intel Corporation Methods and apparatus to map single static assignment instructions onto a data flow graph in a data flow architecture

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4374408A (en) * 1971-06-16 1983-02-15 Burroughs Corporation Multi-pass system and method for source to source code translation
US4330822A (en) * 1971-09-02 1982-05-18 Burroughs Corporation Recursive system and method for binding compiled routines
US4435753A (en) * 1980-10-31 1984-03-06 International Business Machines Corporation Register allocation system using recursive queuing during source code compilation
US4437184A (en) * 1981-07-09 1984-03-13 International Business Machines Corp. Method of testing a data communication system
US4456958A (en) * 1982-06-08 1984-06-26 Burroughs Corporation System and method of renaming data items for dependency free code
US4466061A (en) * 1982-06-08 1984-08-14 Burroughs Corporation Concurrent processing elements for using dependency free code
US4468736A (en) * 1982-06-08 1984-08-28 Burroughs Corporation Mechanism for creating dependency free code for multiple processing elements
US4463423A (en) * 1982-07-14 1984-07-31 Burroughs Corporation Method of transforming high level language statements into multiple lower level language instruction sets
US4567574A (en) * 1983-03-14 1986-01-28 International Business Machines Corporation Optimizing cobol object code instruction path length with respect to perform statements
JPS6120129A (ja) * 1984-07-06 1986-01-28 Hitachi Ltd 複数コ−ド系情報処理方式
JPS6123275A (ja) * 1984-07-11 1986-01-31 Nec Corp ベクトル処理装置
US4710872A (en) * 1985-08-07 1987-12-01 International Business Machines Corporation Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104201394A (zh) * 2014-09-23 2014-12-10 浙江南都电源动力股份有限公司 铅酸蓄电池集流体

Also Published As

Publication number Publication date
US4833606A (en) 1989-05-23
JPS6394368A (ja) 1988-04-25

Similar Documents

Publication Publication Date Title
JPH0814817B2 (ja) 自動ベクトル化方法
JP3664473B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
EP0214751B1 (en) A method for vectorizing and compiling object code
Krall et al. Compilation techniques for multimedia processors
US8024718B2 (en) System and method for optimizing source code
JP3311462B2 (ja) コンパイル処理装置
Berlin et al. Compiling scientific code using partial evaluation
JP2921190B2 (ja) 並列実行方式
JPH01121938A (ja) オブジェクト生成方法
US5396627A (en) Method of producing object program based on interprocedural dataflow analysis of a source program
US6009273A (en) Method for conversion of a variable argument routine to a fixed argument routine
US6993756B2 (en) Optimization apparatus that decreases delays in pipeline processing of loop and computer-readable storage medium storing optimization program
JP3539613B2 (ja) ループ飛び出し文を含むループに対する配列サマリ解析方法
EP1164477A2 (en) A loop optimization method and a compiler
Naumann et al. Control flow reversal for adjoint code generation
JPH04293150A (ja) コンパイル方法
Custers Algorithmic species: Classifying program code for parallel computing
EP0423597A2 (en) Cross iteration common sub-expression elimination
JP3551352B2 (ja) ループ分割方法
JPH09160784A (ja) 並列化コンパイル方式
JP2801193B2 (ja) インダクション変数のベクトル化処理装置
JPS62169272A (ja) ベクトル演算列ル−プアンロ−リング処理方式
JP2853604B2 (ja) 無限ループのベクトル化処理方式
JP3734658B2 (ja) コンパイラ装置およびコンパイラプログラムを記録したコンピュータ読取可能な記録媒体
JPH0512033A (ja) 並列化コンパイル方式