JPH03111971A - ベクトル化診断方式 - Google Patents
ベクトル化診断方式Info
- Publication number
- JPH03111971A JPH03111971A JP1249072A JP24907289A JPH03111971A JP H03111971 A JPH03111971 A JP H03111971A JP 1249072 A JP1249072 A JP 1249072A JP 24907289 A JP24907289 A JP 24907289A JP H03111971 A JPH03111971 A JP H03111971A
- Authority
- JP
- Japan
- Prior art keywords
- array
- data
- dependence
- dimension
- loop
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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)
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
[発明の目的]
(産業上の利用分野)
本発明はベクトル処理機構を備えたデータ処理装置にお
いて、ソースプログラム中のループ内に出現する配列演
算をベクトル演算に変換する為のベクトル化診断方式に
関する。 (従来の技術) ベクトル処理機構を備えたデータ処理装置では、ソース
プログラムのコンパイル処理時に、そのソースプログラ
ム中におけるループ処理の中でベクトル処理が可能な配
列演算が出現した場合、これをベクトル演算命令に置き
換えてベクトル処理するようにし、これによってその処
理速度の高速化を図ることが行われる。 例えばソースプログラム中に初期値[1コ、終値[N]
のDo小ループ に例1 ] Do 101−1.N A(1)−13(J)+C(1) 10 C0NTINUE なるプログラム記述として与えられた場合、これをベク
トル化処理により IX−(1:N) A(IX)−B(IX)+C(IX) なるベクトル演算に置き換えて、そのベクトル処理が実
行される。 尚、IXは初期値[1]、終値[N]なるベクトル添字
の系列を表すものとして定義される。従ッテ、例えばA
(IX)は、配列A+:ついてA(1)。 A(2)、〜A (N)を順にベクトルアクセスするこ
とを意味する。 ところで上述したプログラム記述例では、DO小ループ
制御変数の変化範囲に応じてその配列をアクセスするだ
けで、そのベクトル化を容易に行い得る。しかし−船釣
に、例えばフォートラン(Portran)プログラム
内に出現するDO小ループより複雑な構造を持つことが
多い。 例えばDO小ループ、 K例2,11 DO101−1,N B(1)−A(+)十C(1) ・・・
5IE(1)−B(++1>+D(+) ・・・5
2to C0NTINUE なる2つの文Sl、S2を含むプログラム記述として与
えられるものとする。この場合、ループ内の2つの文S
1.S2における配列Bを、その参照順序の関係に従い
、そのベクトル処理をS、−1−82の順序で実行する
ようにベクトル化すると、元のプログラムが意図する結
果とは異なる演算結果が求められてしまう。従ってこの
場合には、上述した2つの文S、、S2におけるデータ
参照関係を考慮して、例えば IX−(+、:N) E(IX)=B(lX+1)+D(IX) ・・・S
2B(IX)−A(IX)+C(IX) −、S
1のように、その文の順序を入れ替えてベクトル化す
ることが必要となる。 またDo小ループ、例えば に例3]DOIロ +−1,N B(1)−A(1)+C(1) ・・・S。 A(+)−B(1+1)+D(1) ・・・521
0 C0NTINUE なる2つの文s、、S2を含むプログラム記述として与
えられるような場合、これらの2つの文Sl、S2にお
ける配列A、Bでの参照関係がデータリカージョンと称
される、所謂入れ子関係となっている。このため、これ
らの2つの文Sl+S2をどのように並べ替えても正し
いベクトル化プログラムを肖ることはできない。従って
このような場合には、入力されたソースプログラムをそ
のままスカラープログラムとして残すことが必要となる
。 これらの3つのDo/レープをなすプログラムd己述例
に示されるように、そのDO小ループベクトル化する為
には、■ループ内のデータ参照関係を解析してベクトル
化可能な部分だけを抽出し、ベクトル化不可能な部分に
ついてはそのままスカラープログラムとして残すと云う
処理、および■ベクトル化による正しい処理の実行を保
証するべく、複数の文における配列の参照関係に従って
適宜その文の並べ替えを行うと云う処理が必要となる。 ところでベクトル計算機におけるベクトル演算は、−船
釣に演算対象となるベクトル要素の全体を同時に処理す
ることを原則としている。これ故、演算対象ベクトルを
同時に取り扱うことができないようなループは、この原
則に違反することからベクトル化することができないと
云える。 具体的には、前述したに例3】に示すDo小ループあっ
ては、そのループ内の文SIL S2では、同一メモリ
上におけるデータ参照順序関係を一方向に決定すること
ができない。この結果、元のプログラムが持つ意味を保
ちながら、そのベクトル全体を同時に処理することがで
きなくなり、そのベクトル化が不可能となる。 従ってループをなすプログラム記述をベクトル化するに
際しては、同一メモリ上でのデータのアクセス順序関係
を調べ、これらを総合的に判断して、そのループがベク
トル演算の基本原則である上述した「演算同時性」に違
反しないか否かを調べることが必要となる。このような
同一メモリ上のデータのアクセス順序関係を定式化した
ものが以下に示す「データ依存関係」と称される概念で
ある。 しかしてこのデータ依存関係には次の3つの関係がある
。
いて、ソースプログラム中のループ内に出現する配列演
算をベクトル演算に変換する為のベクトル化診断方式に
関する。 (従来の技術) ベクトル処理機構を備えたデータ処理装置では、ソース
プログラムのコンパイル処理時に、そのソースプログラ
ム中におけるループ処理の中でベクトル処理が可能な配
列演算が出現した場合、これをベクトル演算命令に置き
換えてベクトル処理するようにし、これによってその処
理速度の高速化を図ることが行われる。 例えばソースプログラム中に初期値[1コ、終値[N]
のDo小ループ に例1 ] Do 101−1.N A(1)−13(J)+C(1) 10 C0NTINUE なるプログラム記述として与えられた場合、これをベク
トル化処理により IX−(1:N) A(IX)−B(IX)+C(IX) なるベクトル演算に置き換えて、そのベクトル処理が実
行される。 尚、IXは初期値[1]、終値[N]なるベクトル添字
の系列を表すものとして定義される。従ッテ、例えばA
(IX)は、配列A+:ついてA(1)。 A(2)、〜A (N)を順にベクトルアクセスするこ
とを意味する。 ところで上述したプログラム記述例では、DO小ループ
制御変数の変化範囲に応じてその配列をアクセスするだ
けで、そのベクトル化を容易に行い得る。しかし−船釣
に、例えばフォートラン(Portran)プログラム
内に出現するDO小ループより複雑な構造を持つことが
多い。 例えばDO小ループ、 K例2,11 DO101−1,N B(1)−A(+)十C(1) ・・・
5IE(1)−B(++1>+D(+) ・・・5
2to C0NTINUE なる2つの文Sl、S2を含むプログラム記述として与
えられるものとする。この場合、ループ内の2つの文S
1.S2における配列Bを、その参照順序の関係に従い
、そのベクトル処理をS、−1−82の順序で実行する
ようにベクトル化すると、元のプログラムが意図する結
果とは異なる演算結果が求められてしまう。従ってこの
場合には、上述した2つの文S、、S2におけるデータ
参照関係を考慮して、例えば IX−(+、:N) E(IX)=B(lX+1)+D(IX) ・・・S
2B(IX)−A(IX)+C(IX) −、S
1のように、その文の順序を入れ替えてベクトル化す
ることが必要となる。 またDo小ループ、例えば に例3]DOIロ +−1,N B(1)−A(1)+C(1) ・・・S。 A(+)−B(1+1)+D(1) ・・・521
0 C0NTINUE なる2つの文s、、S2を含むプログラム記述として与
えられるような場合、これらの2つの文Sl、S2にお
ける配列A、Bでの参照関係がデータリカージョンと称
される、所謂入れ子関係となっている。このため、これ
らの2つの文Sl+S2をどのように並べ替えても正し
いベクトル化プログラムを肖ることはできない。従って
このような場合には、入力されたソースプログラムをそ
のままスカラープログラムとして残すことが必要となる
。 これらの3つのDo/レープをなすプログラムd己述例
に示されるように、そのDO小ループベクトル化する為
には、■ループ内のデータ参照関係を解析してベクトル
化可能な部分だけを抽出し、ベクトル化不可能な部分に
ついてはそのままスカラープログラムとして残すと云う
処理、および■ベクトル化による正しい処理の実行を保
証するべく、複数の文における配列の参照関係に従って
適宜その文の並べ替えを行うと云う処理が必要となる。 ところでベクトル計算機におけるベクトル演算は、−船
釣に演算対象となるベクトル要素の全体を同時に処理す
ることを原則としている。これ故、演算対象ベクトルを
同時に取り扱うことができないようなループは、この原
則に違反することからベクトル化することができないと
云える。 具体的には、前述したに例3】に示すDo小ループあっ
ては、そのループ内の文SIL S2では、同一メモリ
上におけるデータ参照順序関係を一方向に決定すること
ができない。この結果、元のプログラムが持つ意味を保
ちながら、そのベクトル全体を同時に処理することがで
きなくなり、そのベクトル化が不可能となる。 従ってループをなすプログラム記述をベクトル化するに
際しては、同一メモリ上でのデータのアクセス順序関係
を調べ、これらを総合的に判断して、そのループがベク
トル演算の基本原則である上述した「演算同時性」に違
反しないか否かを調べることが必要となる。このような
同一メモリ上のデータのアクセス順序関係を定式化した
ものが以下に示す「データ依存関係」と称される概念で
ある。 しかしてこのデータ依存関係には次の3つの関係がある
。
同一のメモリ位置を「定義」=「参照」の順序でアクセ
スする依存関係で、ループ内に記述される2つの文Sl
、S2が次のような関係を持つ場合を示す。
スする依存関係で、ループ内に記述される2つの文Sl
、S2が次のような関係を持つ場合を示す。
同一のメモリ位置を「参照」−「定義」の順序でアクセ
スする依存関係で、ループ内に記述される2つの文Sl
、S2が次のような関係を持つ場合を示す。
スする依存関係で、ループ内に記述される2つの文Sl
、S2が次のような関係を持つ場合を示す。
【アウトプット・デイペンダンス;δ0】同一のメモリ
位置を「参照」−「参照」の順序でアクセスする依存関
係で、ループ内に記述される2つの文Sl、S2が次の
ような関係を持つ場合を示す。 また一般にソースプログラム中のDo小ループ対象とし
たベクトル化処理の場合、単にプログラム上での上述し
た「参照」 「定義」の前後関係だけではなく、そのル
ープの繰り返し世代を考慮してデータ依存関係を調べる
必要がある。 例えば次のようなりoループ に例4] DO101−2,N 10 C0NTINUE のような場合、配列Aはその繰り返しループの各1せ代
においてだけ
位置を「参照」−「参照」の順序でアクセスする依存関
係で、ループ内に記述される2つの文Sl、S2が次の
ような関係を持つ場合を示す。 また一般にソースプログラム中のDo小ループ対象とし
たベクトル化処理の場合、単にプログラム上での上述し
た「参照」 「定義」の前後関係だけではなく、そのル
ープの繰り返し世代を考慮してデータ依存関係を調べる
必要がある。 例えば次のようなりoループ に例4] DO101−2,N 10 C0NTINUE のような場合、配列Aはその繰り返しループの各1せ代
においてだけ
【フロー・デイペンダンス;δ】なる依存
関係をそれぞれ持ち、その繰り返しの世代に互るデータ
依存関係は持たない。しかし別のDO小ルー プ例I DOIf) I−2,N 10 C0NTINUE や、更に別のDO小ルー プ例6] Do 10 +−2,N 10 C0NTINUE にあっては、配列Aは繰り返しループの各世代において
それぞれ
関係をそれぞれ持ち、その繰り返しの世代に互るデータ
依存関係は持たない。しかし別のDO小ルー プ例I DOIf) I−2,N 10 C0NTINUE や、更に別のDO小ルー プ例6] Do 10 +−2,N 10 C0NTINUE にあっては、配列Aは繰り返しループの各世代において
それぞれ
【フロー・デイペンダンス;δ】なる依存関係
を持つものの、その繰り返し世代間に亘るデータ依存関
係を持つ。従ってDo小ループプログラム上から
を持つものの、その繰り返し世代間に亘るデータ依存関
係を持つ。従ってDo小ループプログラム上から
【フロ
ー・デイペンダンス;δ】なる依存関係が見出された場
合には、更にその繰り返しの世代に亘るデータ依存関係
を調べ、これらを区別してベクトル化の処理を行う必要
が生じる。 これ故、例えば上述したに例4】に示されるようなりo
ループの場合には、これを
ー・デイペンダンス;δ】なる依存関係が見出された場
合には、更にその繰り返しの世代に亘るデータ依存関係
を調べ、これらを区別してベクトル化の処理を行う必要
が生じる。 これ故、例えば上述したに例4】に示されるようなりo
ループの場合には、これを
【世代依存のないフロm−デ
イペンダンス:δ−】、またK mJ5】に示されるよ
うなりoループの場合には、これを
イペンダンス:δ−】、またK mJ5】に示されるよ
うなりoループの場合には、これを
【次世代に依存する
フロー・デイペンダンスδ<】、そしてに例6】に示さ
れるようなりoループの場合には、これを
フロー・デイペンダンスδ<】、そしてに例6】に示さ
れるようなりoループの場合には、これを
【前世代に依
存するフロ−・デイペンダンス;δ>】としてそれぞれ
定義し、これらを区別する。 尚、データ依存関係は、ループ内の各文をベクトル処理
する際の実行順序を規定するものであるから、上述した
ようにしてDo小ループベクトル化するに際しては、更
にループ内に現れる全てのデータ(スカラー変数、1次
元配列、多次元配列等)について、それぞれそのデータ
依存関係を調べる必要があることは云うまでもない。 ところで従来、多重ループ内の1次元配列アクセスに対
するデータ依存解析の手法として、例えば下記の文献に
紹介されるものが良く知られている。 U、Banerjee Time and Parallel Process
or bounds forFortran−Like
1oops IEEE trans、on Con
+p。 Vol、c−28,No、9.pp−860〜870
(1979)この文献に紹介されるデータ依存解析の手
法は、Doループ内での1次元配列Aに対するフロー・
デイペンダンスは次のようにして解析される。 D。 iIJ、nl Do 12−0.n2 Do 1I11−0.nm S I ; A(r(il、i2.−−.1li))=
−・” −52; −−−−A(g(11°
、12’、=−= 、bn’))END DO END DO END D。 但し、このループのプログラム記述内におけるil、i
2.・・・・・・、imは各ループの制御変数であり、
f。 gはループ制御変数を示す線形関数である。 ここでこのループにおける添字式関数f1gをそれぞれ
次のように定式化する。 (a k * b k ;整定数)しかしてループ
のに重目以降を並列に実行する場合、このレベルで文S
l、S2にフロー・デイペンダンスがある(これをレベ
ルにの依存と称する)ならば、次の条件を満足すること
になる。 (条件1);gcdテスト gca(a l b l + a 2 b 2
+ ”・°°°、 a h−1b h−+ rak、
・・・・・・a、、b、、・・・・・・b、)が(bo
ao)を割り切る。 (条件2 ) ; Banerjee不等式%式%) を定義したとき、各係数がそれぞれ次の不等式を満足す
る。 α ≦ Σ (b+−at) ≦β(am −+
b* ) (nh −1)−Σ (a + b ) I + (at +bt ) (n
t −1)+Σ (a I +b l−) n 換言すれば、ループのに重目以降を並列に実行すると云
うことは、逆にに正目までは逐次に実行されることを意
味する。従って並列に実行される前記文Sl、S2の関
数f、gの各ループ制御変数の値の間には次の関係が成
立することになる。 +1=I]’ i2−+2゛ ・・・・・・ 1k
−1−1に−1゜このことは、逆にこの条件が成立しな
い場合には、文Sl、S2が並行して実行されることが
ないので、その依存関係を調べる必要がないと云える。 一方、k正目のループ制御変数については、前述したフ
ロー・デイペンダンスが成立する為には、文S1が実行
された後に文S2が実行される必要があるので、 1に≦ik なる関係が必ず存在する。 従って、以上の分析内容をまとめるとループのに亜目以
降を並列に実行する場合のループ変数ベクトル(il、
!2.−、jm)と(il’、I2°、−,3ra’)
との間には次のような大小関係が成立することになる。 [m、m、・・・・・・、−1≦、*、・・・、*]尚
、*はその大小関係に特に依存性がないことを示してい
る。このループの繰り返し世代間の大小関係を示す表記
は依存方向ベクトルと称される。 しかしてこの依存方向ベクトルに従って文S、と文S2
との依存関係を調べてベクトル化の為の判定を行う手法
がBanerjeeのベクトル化診断方式と称される。 このようなりanerjccのベクトル化診断方式によ
れば、ソースプログラム中のどのようなアクセスパター
ンの1次元配列についても、その依存関係を抽出するこ
とが可能となる。しかしDoループ内で多く出現する多
次元配列を扱う場合には、その依存関係をどのようにし
て抽出するかが問題となる。 即ち、多次元配列を扱うDOループについてデータ依存
解析を行う場合、従来−船釣にはその多次元配列を1次
元イメージに変換して取り扱うことが直接的な手法であ
ると云える。つまり1次元イメージに変換できれば、上
述したBanerjeeのベクトル化診断方式をそのま
ま適用してそのデータ依存解析を行うことが可能となる
。 例えば次のようなりoループ 【例7 ] DIMENSION A(10,10)
DO101−1,N DO10j−1,N 10 A(1,j)−A(j−1,j+1)が与えら
れたような場合には、文10における配列Aのアクセス
をそれぞれ A(1,j) →A(1+(j−1)零10)
→A(++10*j−10)A(1−1,j+
1)−A(f+1+(j−1−1)*10) −A(i
+10*j−19)として1次元イメージに変換するこ
とで、始めてBanerjccのベクトル化診断方式を
適用することが可能となる。そしてその多次元配列の全
体に関するデータ依存関係を調べることができる。 然し乍ら、このようにして多次元配列データを1次元イ
メージに変換する為の前処理計算は非常に大変な作業で
ある。しかも変換された1次元イメージは非常に複雑な
添字式となってしまう。これ故、データ依存関係を解析
する為の計算量も非常に膨大化すると云う不具合がある
。 更には多次元配列データを1次元イメージに展開する為
には、全ての多次元配列について各次元のサイズ情報を
保持しておく必要がある。これ故、プログラムのコンパ
イラ全体としても、その処理量が大幅に増大すると云う
不具合があった。 (発明が解決しようとする課題) このように従来のベクトル化診断方式にあっては、ソー
スプログラムのDoループ内に多次元配列のアクセスが
出現した場合、そのデータ依存関係を調べるには、例え
ばその多次元配列の各次元における参照形式を調べ、こ
れを1次元アクセスと等価な形式(1次元イメージ)に
展開してデータ依存診断を行うことが必要となる。この
為のその計算量が非常に膨大化し、コンパイルに要する
時間が非常に長くなると云う問題があった。 本発明はこのような事情を考慮してなされたもので、そ
の目的とするところは、Doループ内に多次元配列参照
が出現するような場合であっても、その解析能力を犠牲
にすることなしに上記多次元配列のデータ依存関係を簡
易に、且つ効率的に調べてその配列演算をベクトル演算
に変換し得るが否かを判定することのできる実用性の高
いベクトル化診断方式を提供することにある。 [発明の構成] (課題を解決するための手段) 本発明に係るベクトル化診断方式は、ソースプログラム
のループ内に出現する配列演算をベクトル演算に変換し
て実行するデータ処理装置において、上記ループ内の多
次元配列データに関するデータ依存解析を行うに際し、 上記多次元配列における各次元の添字式を用いて各次元
毎にそのデータ依存解析をそれぞね独立に行い、各次元
毎に求められるデータ依存性を示す情報を統合して前記
多次元配列データ参照全体についてのデータ依存関係を
決定してなることを特徴とするものである。 具体的には、■同一の配列変数参照についてその配列の
次元数を調べてその配列が多次元配列であると判定され
たとき、■その多次元配列の各次元の添字表現を抽出し
、一次元データ依存解析手段により上記各添字表現によ
り示される各次元毎にその参照依存関係をそれぞれ解析
し、■この一次元データ依存解析手段により求められる
各次元についてのデータ依存関係情報とベクトル化を行
うループのネスト数に応じた依存特性情報とをそれぞれ
記憶収集し、■この記憶収集された前記多次元配列の各
次元に関する依存関係情報を統合して多次元配列全体に
ついてのデータ依存関係を決定することで、ループ内に
出現する配列演算をベクトル演算に変換し得るか否かを
診断するようにしたことを特徴とするものである。 (作 用) このようなベクトル化診断方式によれば、入力されたソ
ースプログラム内の多次元配列データに対して、その添
字表現(添字式)で示される各次元毎に、1次元の簡単
なアクセス形式でそのデータ依存関係を解析し、解析さ
れた各次元でのデータ依存関係を統合判定するだけで、
その多次元配列全体についてのデータ依存関係を正確に
診断することが可能となる。 つまり配列変数参照が多次元配列であっても、これを1
次元イメージに展開することなく、その添字表現に着目
して各添字式で示される各次元毎に、従来の1次元配列
に対するデータ依存解析と同様な手法によりそのデータ
依存関係が調べられる。その上で、添字式で示される各
次元について求められるデータ依存関係を統合して多次
元配列全体についてのデータ依存関係を決定するので、
簡単なアルゴリズムで効率的に、しかも精度良くループ
内の多次元配列をベクトル化し得るか否かを診断するこ
とが可能となる。 (実施例) 以下、図面を参照して本発明の一実施例に係るベクトル
化診断方式について説明する。 第1図は実施例方式を適用して実現されるコンパイラの
概略構成を示す図で、大略的にはプログラム入力部1と
ベクトル化処理部2.最適化部3およびコード生成部4
を備えて構成される。このコンパイラは、ソースプログ
ラムをベクトル演算を含むオブジェクトプログラムに変
換し、これを出力する。 しかしてプログラム入力部lは、入力されたソースプロ
グラムを取り込んで文法チエツク等の所定の処理を行っ
た上で、これを中間テキストに変換する機能を備える。 このプログラム入力部1にて嚢換生成された中間テキス
トがベクトル化処理部2に与えられる。 しかしてベクトル化処理部2はその内部にベクトル化診
断部2aとベクトル化変換部2bとを備えている。ベク
トル化診断部2aは前記プログラム人力部lから与えら
れる中間テキストを元に、そのプログラム内のデータ依
存関係を解析し、そのプログラムをベクトル化し得るか
否かを診断するものである。ベクトル化変換部2bはこ
のベクトル化診断部2aにてベクトル化可能と判断され
たプログラムについて、これをベクトル化形式に変換す
る。 更にこのベクトル化変換部2bでは、上記データ依存関
係の解析結果に従ってそのベクトル化処理の実行順序を
決定し、前記中間テキストの並べ替えを行う。 このようにしてベクトル化処理部2にてベクトル化診断
処理された中間テキストが最適化部3に与えられ、更に
コード生成部4に与えられてオブジェクトプログラムに
変換される。 ここで上記ベクトル化診断部2aは、ソースプログラム
内のデータ依存関係を解析する依存関係解析部21と、
プログラムのベクトル化の可否やそのベクトル化の際の
演算の実行順序を決定する為のベクトル化判定部22と
からなる。この依存関係解析部21での処理対象となる
データは、プログラムのDOループ内で複数の定義(値
の設定)、および複数の〜参照(値の参照)がなされる
データである。この条件に該当するデータのスカラー変
数および配列変数の全てがこの依存関係解析部2Iにて
処理される。 尚、この依存関係解析部21は上記スカラー変数に対す
る解析処理を実行するスカラー依存解析部6と、上記配
列変数に対する解析処理を実行する配列依存解析部7と
を具備して構成される。 しかしてスカラー依存解析部6は、プログラム内での配
列の出現順序等からその依存関係を解析し、決定するも
ので従来より提唱されているアルゴリズムに従って比較
的簡単に実現される。これに対して本実施例方式におい
て特徴的な機能を果たす配列依存解析部7は、例えば第
2図に示すように1次元処理部7a、依存方向ベクトル
テーブル71〕、および依存関係決定部7Cにより構成
され、第3図に示す処理ルーチンに従ってその配列変数
に対する解析処理を実行するものとなっている。 この配列依存解析部7における本発明に係る特徴的なベ
クトル化診断の為の処理、つまりループ内に出現する配
列変数に対する解析処理について以下に説明する。 配列依存解析部7ては、中間テキストとして与えられる
プログラムのDoループ内に出現する配列が1次元配列
であるか、或いは多次元配列であるかを先ず判定する(
ステップa)。この判定は処理対象とする配列の次元数
を調べることによりなされる。 しかして処理対象とする配列が1次元配列である場合に
は、当該配列依存解析部7における1次元処理部7aに
て前記中間テキスト上の添字式を取り出し、これに従っ
て1次元解析処理を実行する。 この1゛次元処理部7aにおける1次元解析処理は、前
述したBanerjeeの診断方式を適用したデータ依
存解析の手法を用いる等して実現される(ステップb)
。この解析処理により1次元配列データのデータ依存関
係(依存方向の情報)が求められる。 これに対して処理対象とする配列が多次元配列であると
判定された場合には、先ずその配列の添字式表現が抽出
され、この添字式表現により示される各次元毎に前記1
次元処理部7aにてそれぞれ独立に1次元解析処理を行
う。 即ち、配列の次元数がn次元である場合、添字式表現に
より示されるn個の次元について1次元解析処理をn回
繰り返して実行し、各次元毎にそのデータ依存関係を求
めてそのデータ依存関係を依存方向ベクトルテーブル7
bに順次登録していくことにより行われる。 ここで依存方向ベクトルテーブル7bは、例えばm重ル
ープ内のn次元配列について解析処理する場合、依存方
向ベクトル情報を格納する為の長さmの(n+1)個の
メモリ領域を持つテーブルとして実現される。 しかして配列に対する1次元解析処理によって求められ
る依存方向ベクトル情報の各要素は前述したループ内の
文S、、S2間のデータ依存関係に従い、例えば >; [1001,−; [010]、 <; [0
01]≧; [110]、 ≦; [0111
,*; [111]なる3ビツトの情報として表現さ
れる。但し、*は全ての方向への依存を表するのである
。このような依存方向ベクトル情報が、前記添字式表現
により示される各次元毎に求められて前記依存方向ベク
トルテーブル7bに順次登録される。 この多次元配列に対するデータ依存関係の解析処理につ
いて更に詳しく説明すると、処理対象配列が多次元配列
であると判定された場合、先ずその配列の次元数nを求
めると共に、ループのネスト数m、およびベクトル化の
ループネスト数kがそれぞれ求められる(ステップC)
。しかる後、上記ベクトル化ループネスト数kに対する
初期方向ベクトルを計算し、これを前記依存方向ベクト
ルテーブル7bに登録する(ステップd)。この依存方
向ベクトルテーブル7bに登録されるベクトル化ルーブ
ネスト数kに対する初期依存方向ベクトルは、例えば として与えられる。このようにして初期設定される初期
依存方向ベクトルは、m重ループにおけるに亜目につい
てベクトル化を行う為の処理である。 つまりにレベルをベクトル化する場合には依存方向ベク
トル情報[−]が(k−1)個並び、k〜mレベルにつ
いてはそれぞれ依存方向ベクトル情報[*]が並ぶ依存
方向ベクトルが初期依存方向ベクトルとして設定される
ことになる。 しかしてこのベクトルは、k重目のループをベクトル化
すると云うこと、そして1重目から(k−1)虫目まで
は逐次に実行されることを仮定している。従ってこれら
のループのループ変数は常に等しく、その依存方向につ
いては依存方向ベクトル情報[−コについてだけ調べれ
ば良いことを意味している。このような初期依存方向ベ
クトルの設定により、ベクトル化を行おうとするループ
レベル以外についての冗長な演算が効果的に省かれる。 ここで前述した添字式表現により示される各次元での処
理対象配列に対する1次元解析処理による依存方向ベク
トルの算出処理は、添字表現式を順次指定する為の制御
パラメータiを[1]に初期設定しくステップe)、前
記1次元処理部7aにてi次元についてのにレベルの依
存方向ベクトルを求め、これによって求められた依存方
向ベクトルを依存方向ベクトルテーブル7bに登録する
ことによりなされる。この処理を上記制御パラメータi
をインクリメントしながら(ステップg)、その値(制
御パラメータiの値)が前述した次元数nに達するまで
繰り返し実行することで、各次元毎にその1次元解析処
理がそれぞれ独立に実行される(ステップh)。 この結果、前記依存方向ベクトルテーブル7bには、配
列の各次元についてそれぞれ独立に求められた依存方向
ベクトルと、前述した初期依存方向ベクトルとの合計(
n+1)個の依存方向ベクトルがエントリされることに
なる。 しかして配列依存解析部7における依存関係決定部7c
は、上記依存方向ベクトルテーブル7bに収集された各
次元毎に求められた依存方向ベクトルに基づき、処理対
象とする多次元配列全体についてのデータ依存関係を判
定する。 この判定処理について説明すると、一般に配列データに
ついての全ての次元についての依存方向に矛盾がなけれ
ば、その配列の依存関係は成立すると云える。逆にその
依存方向に矛盾があるならば、その配列にはデータの依
存関係が存在しないと云える。ここで依存関係に矛盾が
存在するか否かと云うことは、例えば2重ループ内に出
現した2次元配列の各次元での依存関係の依存方向ベク
トルが次のように [−、−] 、 [−+ ≦]となっていれば
、どちらの次元での依存関係が(−、−)について成立
し、従ってこれらの間には矛盾がないと云える。これに
対して2重ループ内に出現した2次元配列の各次元での
依存関係の依存方向ベクトルが次のように [−、<] 、 [−、>] となっていれば、どちらの依存関係にも適合する依存方
向ベクトルが存在しないことから、これらは矛盾してい
ると導き出される。従ってこのような矛盾がある場合に
は、配列全体としては依存関係がないと結論付けること
が可能となる。 依存関係決定部7cでは上述した観点に立脚し、多次元
配列全体の依存関係を、前述した3ビツトの情報として
与えられる依存方向ベクトルの情報をビット単位で論理
積(AND)処理しくステップi)、その全ビットが[
0コとなるベクトル要素が求められたとき、これをその
依存関係に矛盾があると判定している(ステップj)。 具体的には、2つの依存方向ベクトルが[−、<]
、 [−、≦] として与えられる場合、その各方向ベクトルを前述した
3ビツトの情報を用いて表現すると[010、0011
、[010、011]となるから、これらのビット対応
によるAND処理結果は[010、001] として求
められ、これらの2つの配列間には[−、<1なる依存
関係が成立することが求められる。 これに対して2つの依存方向ベクトルが[−1< コ
、 [−、>]として与えられる
場合、その各方向ベクトルを前述した3ビツトの情報を
用いて表現すると[010、001コ 、 [0
10,100コとなるから、これらのビット対応による
AND処理結果は[010、000]となり、その要素
の1つが[0]となることから2つの配列間には依存関
係が存在しないことが求められる。 依存関係決定部7cはこのような依存方向ベクトルの矛
盾判定処理を順次繰り返して行くことにより、その配列
全体についてのデータ依存関係を判定していく。そして
そのビット要素が[0]となるものが検出されたとき、
その依存関係に矛盾があるとの判定結果を求める(ステ
ップg)。またビット要素が[0]となるものが検出さ
れない場合には、その依存方向ベクトルを1乗口から順
に検索し、依存方向ベクトル情報が[−]でないとして
最初に現れた他の依存方向ベクトル情報を、その配列全
体の依存方向を示しているとの結論を得るものとなって
いる(ステップk)。 尚、全ての依存方向ベクトル情報が[−]であるならば
、その配配列体についても[−コ方向の依存性を持つと
して判定される。 このような判定処理を進めるに際しては、例えばビット
要素が[0〕なるものが検出されたとき、その時点で依
存性なしとの結論を得ることができるので、それ以降の
処理については、これを省略することができる。この結
果、無駄な処理を省いてその処理効率の向上を図ること
が可能となる。 次に上述した配列依存解析部7における多次元配列に対
する依存性解析の具体例について幾つが説明する。 尚、ここでは[−]をドントケアを示す符号、[?]を
矛盾を示す記号、 [1nit DV ]は初期依存
方向ベクトル、モして[DV l] [DV 2]は
それぞれ1次元目および2次元目の依存方向ベクトル、
更に[rcs DVIはAND処理結果の依存方向ベク
トルを示すものとして説明する。 今、Do小ループなすプログラム記述かに例8]
Do i−1,n1 DOj−1,口2 S + ; A(i+2*J、J)−・・・・
・・S2 ; ・・・・・・・・・ −八(i+
j、j)END D。 IEND D。 として与えられるものとする。このループをiループで
ベクトル化する場合、2つの文Sl、S2における配列
Aの間の依存関係は次のように決定される。 +nit DV −C*、 *] DV 1 − [*、 *] DV 2 − [−、−] res DV = [*、 −] 従ってこの場合には、その配列全体については[*]力
方向依存性があると決定される。またこれをjループで
ベクトル化する場合には、その依存関係は次のように決
定される。 1n1t DV = [−、*コDVI−[−、
<] DV 2 − [−、−] res DV = [−、?] 従ってこの場合には、その依存方向に矛盾が生じている
ことが検知されるので、配列全体については依存性がな
いとの結論が求められる。 これに対してループをなすプログラム記述が、K例9]
DO+−1,n1 Do j=I、n2 S + ; A(2*++1.j) −・
・・・・・S2 ; ・・・・・・・・・
−A(f+3.j)IEND DO END DO として与えられるものとする。しかしてこの場合、この
ループをiループでベクトル化する場合、2つの文S、
、S2における配列Aの間の依存関係は次のように決定
される。 11ft DV −[*、 * コDVI−[≧
、*] DV2−[−、−コ res DV = [≧、 −] 従ってこの場合には、その配列全体については[≧]方
向の依存性があると決定される。またこれをjループで
ベクトル化する場合には、その依存関係は次のように決
定される。 1njL DV −[−、*] DV l −[−、−] DV 2 − [−、−] res DV諧[雪、■] 従ってこの場合には、その配列全体では[−〕方向の依
存性があるとの結論が求められる。 更にDO小ループなすプログラム記述かに例10]
Do I−1,n1 DOj−1,n2 S+ ; A(1,1)−・・・・・・S2
; ・・・・・・ −A(1+1.1−2)
END D。 END DO として与えられるものとする。しかしてこの場合、この
ループをiループでベクトル化する場合、2つの文S、
、S2における配列Aの間の依存関係は次のように決定
される。 jnlt DV −[*、 *コDVI−[>、
−コ DV2 − [<、 −] res DV = [?、 −] 従ってこの場合には、依存方向に矛盾が生じているので
、配列全体では全く依存関係がないと決定される。しか
してこのように外側ループに依存がないと判断された場
合には、その内側ループ(この例ではjループ)にも依
存関係は存在しなくなる。 これらの具体例からも明らかなように、本方式では多次
元配列の各次元の依存解析を、従来の1次元解析の手法
をそのまま用いて実行するものとなっている。つまり多
次元配列の各次元をそれぞれ示す簡単な添字式を用いて
各次元毎に1次元解析によりその依存方向性をそれぞれ
独立に調べている。従って従来方式のように、多次元配
列を1次元イメージに展開すると云うような処理が不要
であり、その計算量を削減して処理時間を大幅に短縮化
することができる。しかも上述した如く求められた各次
元についての依存方向ベクトルから、その配列全体の依
存関係を単純なAND処理により実現することができる
ので、その処理アルゴリズムを簡略化し、その処理時間
を更に短縮化することが可能となる。 また本方式によれば、任意のネスト数のDo小ループつ
いて、しかも任意の次元数の配列に対しても、その処理
アルゴリズムを変更することなしに対処し、そのベクト
ル化診断を正確に、且つ効率的に行うことができる。そ
してその拡張性にも非常に富んでいる等の効果が奏せら
れる。 尚、本発明は上述した実施例に限定されるものではなく
、その要旨を逸脱しない範囲で種々変形して実施するこ
とが可能なことは云うまでもなく、配列の依存性を解析
する1次元解析処理の手法についても前述したBane
rjeeの診断方式以外の他の方式を適宜採用可能であ
る。 [発明の効果コ 以上説明したように本発明によれば、多次元配列に対す
るベクトル化診断を、その配列の添字式で示される次元
毎にその依存性を調べた上で配列全体についての依存性
を求めて行うので、ベクトル化診断に要する計算量を大
幅に削減し、簡易に効率良く、その正確な診断結果を高
速に求めることが可能である等の実用上多大なる効果が
奏せられる。
存するフロ−・デイペンダンス;δ>】としてそれぞれ
定義し、これらを区別する。 尚、データ依存関係は、ループ内の各文をベクトル処理
する際の実行順序を規定するものであるから、上述した
ようにしてDo小ループベクトル化するに際しては、更
にループ内に現れる全てのデータ(スカラー変数、1次
元配列、多次元配列等)について、それぞれそのデータ
依存関係を調べる必要があることは云うまでもない。 ところで従来、多重ループ内の1次元配列アクセスに対
するデータ依存解析の手法として、例えば下記の文献に
紹介されるものが良く知られている。 U、Banerjee Time and Parallel Process
or bounds forFortran−Like
1oops IEEE trans、on Con
+p。 Vol、c−28,No、9.pp−860〜870
(1979)この文献に紹介されるデータ依存解析の手
法は、Doループ内での1次元配列Aに対するフロー・
デイペンダンスは次のようにして解析される。 D。 iIJ、nl Do 12−0.n2 Do 1I11−0.nm S I ; A(r(il、i2.−−.1li))=
−・” −52; −−−−A(g(11°
、12’、=−= 、bn’))END DO END DO END D。 但し、このループのプログラム記述内におけるil、i
2.・・・・・・、imは各ループの制御変数であり、
f。 gはループ制御変数を示す線形関数である。 ここでこのループにおける添字式関数f1gをそれぞれ
次のように定式化する。 (a k * b k ;整定数)しかしてループ
のに重目以降を並列に実行する場合、このレベルで文S
l、S2にフロー・デイペンダンスがある(これをレベ
ルにの依存と称する)ならば、次の条件を満足すること
になる。 (条件1);gcdテスト gca(a l b l + a 2 b 2
+ ”・°°°、 a h−1b h−+ rak、
・・・・・・a、、b、、・・・・・・b、)が(bo
ao)を割り切る。 (条件2 ) ; Banerjee不等式%式%) を定義したとき、各係数がそれぞれ次の不等式を満足す
る。 α ≦ Σ (b+−at) ≦β(am −+
b* ) (nh −1)−Σ (a + b ) I + (at +bt ) (n
t −1)+Σ (a I +b l−) n 換言すれば、ループのに重目以降を並列に実行すると云
うことは、逆にに正目までは逐次に実行されることを意
味する。従って並列に実行される前記文Sl、S2の関
数f、gの各ループ制御変数の値の間には次の関係が成
立することになる。 +1=I]’ i2−+2゛ ・・・・・・ 1k
−1−1に−1゜このことは、逆にこの条件が成立しな
い場合には、文Sl、S2が並行して実行されることが
ないので、その依存関係を調べる必要がないと云える。 一方、k正目のループ制御変数については、前述したフ
ロー・デイペンダンスが成立する為には、文S1が実行
された後に文S2が実行される必要があるので、 1に≦ik なる関係が必ず存在する。 従って、以上の分析内容をまとめるとループのに亜目以
降を並列に実行する場合のループ変数ベクトル(il、
!2.−、jm)と(il’、I2°、−,3ra’)
との間には次のような大小関係が成立することになる。 [m、m、・・・・・・、−1≦、*、・・・、*]尚
、*はその大小関係に特に依存性がないことを示してい
る。このループの繰り返し世代間の大小関係を示す表記
は依存方向ベクトルと称される。 しかしてこの依存方向ベクトルに従って文S、と文S2
との依存関係を調べてベクトル化の為の判定を行う手法
がBanerjeeのベクトル化診断方式と称される。 このようなりanerjccのベクトル化診断方式によ
れば、ソースプログラム中のどのようなアクセスパター
ンの1次元配列についても、その依存関係を抽出するこ
とが可能となる。しかしDoループ内で多く出現する多
次元配列を扱う場合には、その依存関係をどのようにし
て抽出するかが問題となる。 即ち、多次元配列を扱うDOループについてデータ依存
解析を行う場合、従来−船釣にはその多次元配列を1次
元イメージに変換して取り扱うことが直接的な手法であ
ると云える。つまり1次元イメージに変換できれば、上
述したBanerjeeのベクトル化診断方式をそのま
ま適用してそのデータ依存解析を行うことが可能となる
。 例えば次のようなりoループ 【例7 ] DIMENSION A(10,10)
DO101−1,N DO10j−1,N 10 A(1,j)−A(j−1,j+1)が与えら
れたような場合には、文10における配列Aのアクセス
をそれぞれ A(1,j) →A(1+(j−1)零10)
→A(++10*j−10)A(1−1,j+
1)−A(f+1+(j−1−1)*10) −A(i
+10*j−19)として1次元イメージに変換するこ
とで、始めてBanerjccのベクトル化診断方式を
適用することが可能となる。そしてその多次元配列の全
体に関するデータ依存関係を調べることができる。 然し乍ら、このようにして多次元配列データを1次元イ
メージに変換する為の前処理計算は非常に大変な作業で
ある。しかも変換された1次元イメージは非常に複雑な
添字式となってしまう。これ故、データ依存関係を解析
する為の計算量も非常に膨大化すると云う不具合がある
。 更には多次元配列データを1次元イメージに展開する為
には、全ての多次元配列について各次元のサイズ情報を
保持しておく必要がある。これ故、プログラムのコンパ
イラ全体としても、その処理量が大幅に増大すると云う
不具合があった。 (発明が解決しようとする課題) このように従来のベクトル化診断方式にあっては、ソー
スプログラムのDoループ内に多次元配列のアクセスが
出現した場合、そのデータ依存関係を調べるには、例え
ばその多次元配列の各次元における参照形式を調べ、こ
れを1次元アクセスと等価な形式(1次元イメージ)に
展開してデータ依存診断を行うことが必要となる。この
為のその計算量が非常に膨大化し、コンパイルに要する
時間が非常に長くなると云う問題があった。 本発明はこのような事情を考慮してなされたもので、そ
の目的とするところは、Doループ内に多次元配列参照
が出現するような場合であっても、その解析能力を犠牲
にすることなしに上記多次元配列のデータ依存関係を簡
易に、且つ効率的に調べてその配列演算をベクトル演算
に変換し得るが否かを判定することのできる実用性の高
いベクトル化診断方式を提供することにある。 [発明の構成] (課題を解決するための手段) 本発明に係るベクトル化診断方式は、ソースプログラム
のループ内に出現する配列演算をベクトル演算に変換し
て実行するデータ処理装置において、上記ループ内の多
次元配列データに関するデータ依存解析を行うに際し、 上記多次元配列における各次元の添字式を用いて各次元
毎にそのデータ依存解析をそれぞね独立に行い、各次元
毎に求められるデータ依存性を示す情報を統合して前記
多次元配列データ参照全体についてのデータ依存関係を
決定してなることを特徴とするものである。 具体的には、■同一の配列変数参照についてその配列の
次元数を調べてその配列が多次元配列であると判定され
たとき、■その多次元配列の各次元の添字表現を抽出し
、一次元データ依存解析手段により上記各添字表現によ
り示される各次元毎にその参照依存関係をそれぞれ解析
し、■この一次元データ依存解析手段により求められる
各次元についてのデータ依存関係情報とベクトル化を行
うループのネスト数に応じた依存特性情報とをそれぞれ
記憶収集し、■この記憶収集された前記多次元配列の各
次元に関する依存関係情報を統合して多次元配列全体に
ついてのデータ依存関係を決定することで、ループ内に
出現する配列演算をベクトル演算に変換し得るか否かを
診断するようにしたことを特徴とするものである。 (作 用) このようなベクトル化診断方式によれば、入力されたソ
ースプログラム内の多次元配列データに対して、その添
字表現(添字式)で示される各次元毎に、1次元の簡単
なアクセス形式でそのデータ依存関係を解析し、解析さ
れた各次元でのデータ依存関係を統合判定するだけで、
その多次元配列全体についてのデータ依存関係を正確に
診断することが可能となる。 つまり配列変数参照が多次元配列であっても、これを1
次元イメージに展開することなく、その添字表現に着目
して各添字式で示される各次元毎に、従来の1次元配列
に対するデータ依存解析と同様な手法によりそのデータ
依存関係が調べられる。その上で、添字式で示される各
次元について求められるデータ依存関係を統合して多次
元配列全体についてのデータ依存関係を決定するので、
簡単なアルゴリズムで効率的に、しかも精度良くループ
内の多次元配列をベクトル化し得るか否かを診断するこ
とが可能となる。 (実施例) 以下、図面を参照して本発明の一実施例に係るベクトル
化診断方式について説明する。 第1図は実施例方式を適用して実現されるコンパイラの
概略構成を示す図で、大略的にはプログラム入力部1と
ベクトル化処理部2.最適化部3およびコード生成部4
を備えて構成される。このコンパイラは、ソースプログ
ラムをベクトル演算を含むオブジェクトプログラムに変
換し、これを出力する。 しかしてプログラム入力部lは、入力されたソースプロ
グラムを取り込んで文法チエツク等の所定の処理を行っ
た上で、これを中間テキストに変換する機能を備える。 このプログラム入力部1にて嚢換生成された中間テキス
トがベクトル化処理部2に与えられる。 しかしてベクトル化処理部2はその内部にベクトル化診
断部2aとベクトル化変換部2bとを備えている。ベク
トル化診断部2aは前記プログラム人力部lから与えら
れる中間テキストを元に、そのプログラム内のデータ依
存関係を解析し、そのプログラムをベクトル化し得るか
否かを診断するものである。ベクトル化変換部2bはこ
のベクトル化診断部2aにてベクトル化可能と判断され
たプログラムについて、これをベクトル化形式に変換す
る。 更にこのベクトル化変換部2bでは、上記データ依存関
係の解析結果に従ってそのベクトル化処理の実行順序を
決定し、前記中間テキストの並べ替えを行う。 このようにしてベクトル化処理部2にてベクトル化診断
処理された中間テキストが最適化部3に与えられ、更に
コード生成部4に与えられてオブジェクトプログラムに
変換される。 ここで上記ベクトル化診断部2aは、ソースプログラム
内のデータ依存関係を解析する依存関係解析部21と、
プログラムのベクトル化の可否やそのベクトル化の際の
演算の実行順序を決定する為のベクトル化判定部22と
からなる。この依存関係解析部21での処理対象となる
データは、プログラムのDOループ内で複数の定義(値
の設定)、および複数の〜参照(値の参照)がなされる
データである。この条件に該当するデータのスカラー変
数および配列変数の全てがこの依存関係解析部2Iにて
処理される。 尚、この依存関係解析部21は上記スカラー変数に対す
る解析処理を実行するスカラー依存解析部6と、上記配
列変数に対する解析処理を実行する配列依存解析部7と
を具備して構成される。 しかしてスカラー依存解析部6は、プログラム内での配
列の出現順序等からその依存関係を解析し、決定するも
ので従来より提唱されているアルゴリズムに従って比較
的簡単に実現される。これに対して本実施例方式におい
て特徴的な機能を果たす配列依存解析部7は、例えば第
2図に示すように1次元処理部7a、依存方向ベクトル
テーブル71〕、および依存関係決定部7Cにより構成
され、第3図に示す処理ルーチンに従ってその配列変数
に対する解析処理を実行するものとなっている。 この配列依存解析部7における本発明に係る特徴的なベ
クトル化診断の為の処理、つまりループ内に出現する配
列変数に対する解析処理について以下に説明する。 配列依存解析部7ては、中間テキストとして与えられる
プログラムのDoループ内に出現する配列が1次元配列
であるか、或いは多次元配列であるかを先ず判定する(
ステップa)。この判定は処理対象とする配列の次元数
を調べることによりなされる。 しかして処理対象とする配列が1次元配列である場合に
は、当該配列依存解析部7における1次元処理部7aに
て前記中間テキスト上の添字式を取り出し、これに従っ
て1次元解析処理を実行する。 この1゛次元処理部7aにおける1次元解析処理は、前
述したBanerjeeの診断方式を適用したデータ依
存解析の手法を用いる等して実現される(ステップb)
。この解析処理により1次元配列データのデータ依存関
係(依存方向の情報)が求められる。 これに対して処理対象とする配列が多次元配列であると
判定された場合には、先ずその配列の添字式表現が抽出
され、この添字式表現により示される各次元毎に前記1
次元処理部7aにてそれぞれ独立に1次元解析処理を行
う。 即ち、配列の次元数がn次元である場合、添字式表現に
より示されるn個の次元について1次元解析処理をn回
繰り返して実行し、各次元毎にそのデータ依存関係を求
めてそのデータ依存関係を依存方向ベクトルテーブル7
bに順次登録していくことにより行われる。 ここで依存方向ベクトルテーブル7bは、例えばm重ル
ープ内のn次元配列について解析処理する場合、依存方
向ベクトル情報を格納する為の長さmの(n+1)個の
メモリ領域を持つテーブルとして実現される。 しかして配列に対する1次元解析処理によって求められ
る依存方向ベクトル情報の各要素は前述したループ内の
文S、、S2間のデータ依存関係に従い、例えば >; [1001,−; [010]、 <; [0
01]≧; [110]、 ≦; [0111
,*; [111]なる3ビツトの情報として表現さ
れる。但し、*は全ての方向への依存を表するのである
。このような依存方向ベクトル情報が、前記添字式表現
により示される各次元毎に求められて前記依存方向ベク
トルテーブル7bに順次登録される。 この多次元配列に対するデータ依存関係の解析処理につ
いて更に詳しく説明すると、処理対象配列が多次元配列
であると判定された場合、先ずその配列の次元数nを求
めると共に、ループのネスト数m、およびベクトル化の
ループネスト数kがそれぞれ求められる(ステップC)
。しかる後、上記ベクトル化ループネスト数kに対する
初期方向ベクトルを計算し、これを前記依存方向ベクト
ルテーブル7bに登録する(ステップd)。この依存方
向ベクトルテーブル7bに登録されるベクトル化ルーブ
ネスト数kに対する初期依存方向ベクトルは、例えば として与えられる。このようにして初期設定される初期
依存方向ベクトルは、m重ループにおけるに亜目につい
てベクトル化を行う為の処理である。 つまりにレベルをベクトル化する場合には依存方向ベク
トル情報[−]が(k−1)個並び、k〜mレベルにつ
いてはそれぞれ依存方向ベクトル情報[*]が並ぶ依存
方向ベクトルが初期依存方向ベクトルとして設定される
ことになる。 しかしてこのベクトルは、k重目のループをベクトル化
すると云うこと、そして1重目から(k−1)虫目まで
は逐次に実行されることを仮定している。従ってこれら
のループのループ変数は常に等しく、その依存方向につ
いては依存方向ベクトル情報[−コについてだけ調べれ
ば良いことを意味している。このような初期依存方向ベ
クトルの設定により、ベクトル化を行おうとするループ
レベル以外についての冗長な演算が効果的に省かれる。 ここで前述した添字式表現により示される各次元での処
理対象配列に対する1次元解析処理による依存方向ベク
トルの算出処理は、添字表現式を順次指定する為の制御
パラメータiを[1]に初期設定しくステップe)、前
記1次元処理部7aにてi次元についてのにレベルの依
存方向ベクトルを求め、これによって求められた依存方
向ベクトルを依存方向ベクトルテーブル7bに登録する
ことによりなされる。この処理を上記制御パラメータi
をインクリメントしながら(ステップg)、その値(制
御パラメータiの値)が前述した次元数nに達するまで
繰り返し実行することで、各次元毎にその1次元解析処
理がそれぞれ独立に実行される(ステップh)。 この結果、前記依存方向ベクトルテーブル7bには、配
列の各次元についてそれぞれ独立に求められた依存方向
ベクトルと、前述した初期依存方向ベクトルとの合計(
n+1)個の依存方向ベクトルがエントリされることに
なる。 しかして配列依存解析部7における依存関係決定部7c
は、上記依存方向ベクトルテーブル7bに収集された各
次元毎に求められた依存方向ベクトルに基づき、処理対
象とする多次元配列全体についてのデータ依存関係を判
定する。 この判定処理について説明すると、一般に配列データに
ついての全ての次元についての依存方向に矛盾がなけれ
ば、その配列の依存関係は成立すると云える。逆にその
依存方向に矛盾があるならば、その配列にはデータの依
存関係が存在しないと云える。ここで依存関係に矛盾が
存在するか否かと云うことは、例えば2重ループ内に出
現した2次元配列の各次元での依存関係の依存方向ベク
トルが次のように [−、−] 、 [−+ ≦]となっていれば
、どちらの次元での依存関係が(−、−)について成立
し、従ってこれらの間には矛盾がないと云える。これに
対して2重ループ内に出現した2次元配列の各次元での
依存関係の依存方向ベクトルが次のように [−、<] 、 [−、>] となっていれば、どちらの依存関係にも適合する依存方
向ベクトルが存在しないことから、これらは矛盾してい
ると導き出される。従ってこのような矛盾がある場合に
は、配列全体としては依存関係がないと結論付けること
が可能となる。 依存関係決定部7cでは上述した観点に立脚し、多次元
配列全体の依存関係を、前述した3ビツトの情報として
与えられる依存方向ベクトルの情報をビット単位で論理
積(AND)処理しくステップi)、その全ビットが[
0コとなるベクトル要素が求められたとき、これをその
依存関係に矛盾があると判定している(ステップj)。 具体的には、2つの依存方向ベクトルが[−、<]
、 [−、≦] として与えられる場合、その各方向ベクトルを前述した
3ビツトの情報を用いて表現すると[010、0011
、[010、011]となるから、これらのビット対応
によるAND処理結果は[010、001] として求
められ、これらの2つの配列間には[−、<1なる依存
関係が成立することが求められる。 これに対して2つの依存方向ベクトルが[−1< コ
、 [−、>]として与えられる
場合、その各方向ベクトルを前述した3ビツトの情報を
用いて表現すると[010、001コ 、 [0
10,100コとなるから、これらのビット対応による
AND処理結果は[010、000]となり、その要素
の1つが[0]となることから2つの配列間には依存関
係が存在しないことが求められる。 依存関係決定部7cはこのような依存方向ベクトルの矛
盾判定処理を順次繰り返して行くことにより、その配列
全体についてのデータ依存関係を判定していく。そして
そのビット要素が[0]となるものが検出されたとき、
その依存関係に矛盾があるとの判定結果を求める(ステ
ップg)。またビット要素が[0]となるものが検出さ
れない場合には、その依存方向ベクトルを1乗口から順
に検索し、依存方向ベクトル情報が[−]でないとして
最初に現れた他の依存方向ベクトル情報を、その配列全
体の依存方向を示しているとの結論を得るものとなって
いる(ステップk)。 尚、全ての依存方向ベクトル情報が[−]であるならば
、その配配列体についても[−コ方向の依存性を持つと
して判定される。 このような判定処理を進めるに際しては、例えばビット
要素が[0〕なるものが検出されたとき、その時点で依
存性なしとの結論を得ることができるので、それ以降の
処理については、これを省略することができる。この結
果、無駄な処理を省いてその処理効率の向上を図ること
が可能となる。 次に上述した配列依存解析部7における多次元配列に対
する依存性解析の具体例について幾つが説明する。 尚、ここでは[−]をドントケアを示す符号、[?]を
矛盾を示す記号、 [1nit DV ]は初期依存
方向ベクトル、モして[DV l] [DV 2]は
それぞれ1次元目および2次元目の依存方向ベクトル、
更に[rcs DVIはAND処理結果の依存方向ベク
トルを示すものとして説明する。 今、Do小ループなすプログラム記述かに例8]
Do i−1,n1 DOj−1,口2 S + ; A(i+2*J、J)−・・・・
・・S2 ; ・・・・・・・・・ −八(i+
j、j)END D。 IEND D。 として与えられるものとする。このループをiループで
ベクトル化する場合、2つの文Sl、S2における配列
Aの間の依存関係は次のように決定される。 +nit DV −C*、 *] DV 1 − [*、 *] DV 2 − [−、−] res DV = [*、 −] 従ってこの場合には、その配列全体については[*]力
方向依存性があると決定される。またこれをjループで
ベクトル化する場合には、その依存関係は次のように決
定される。 1n1t DV = [−、*コDVI−[−、
<] DV 2 − [−、−] res DV = [−、?] 従ってこの場合には、その依存方向に矛盾が生じている
ことが検知されるので、配列全体については依存性がな
いとの結論が求められる。 これに対してループをなすプログラム記述が、K例9]
DO+−1,n1 Do j=I、n2 S + ; A(2*++1.j) −・
・・・・・S2 ; ・・・・・・・・・
−A(f+3.j)IEND DO END DO として与えられるものとする。しかしてこの場合、この
ループをiループでベクトル化する場合、2つの文S、
、S2における配列Aの間の依存関係は次のように決定
される。 11ft DV −[*、 * コDVI−[≧
、*] DV2−[−、−コ res DV = [≧、 −] 従ってこの場合には、その配列全体については[≧]方
向の依存性があると決定される。またこれをjループで
ベクトル化する場合には、その依存関係は次のように決
定される。 1njL DV −[−、*] DV l −[−、−] DV 2 − [−、−] res DV諧[雪、■] 従ってこの場合には、その配列全体では[−〕方向の依
存性があるとの結論が求められる。 更にDO小ループなすプログラム記述かに例10]
Do I−1,n1 DOj−1,n2 S+ ; A(1,1)−・・・・・・S2
; ・・・・・・ −A(1+1.1−2)
END D。 END DO として与えられるものとする。しかしてこの場合、この
ループをiループでベクトル化する場合、2つの文S、
、S2における配列Aの間の依存関係は次のように決定
される。 jnlt DV −[*、 *コDVI−[>、
−コ DV2 − [<、 −] res DV = [?、 −] 従ってこの場合には、依存方向に矛盾が生じているので
、配列全体では全く依存関係がないと決定される。しか
してこのように外側ループに依存がないと判断された場
合には、その内側ループ(この例ではjループ)にも依
存関係は存在しなくなる。 これらの具体例からも明らかなように、本方式では多次
元配列の各次元の依存解析を、従来の1次元解析の手法
をそのまま用いて実行するものとなっている。つまり多
次元配列の各次元をそれぞれ示す簡単な添字式を用いて
各次元毎に1次元解析によりその依存方向性をそれぞれ
独立に調べている。従って従来方式のように、多次元配
列を1次元イメージに展開すると云うような処理が不要
であり、その計算量を削減して処理時間を大幅に短縮化
することができる。しかも上述した如く求められた各次
元についての依存方向ベクトルから、その配列全体の依
存関係を単純なAND処理により実現することができる
ので、その処理アルゴリズムを簡略化し、その処理時間
を更に短縮化することが可能となる。 また本方式によれば、任意のネスト数のDo小ループつ
いて、しかも任意の次元数の配列に対しても、その処理
アルゴリズムを変更することなしに対処し、そのベクト
ル化診断を正確に、且つ効率的に行うことができる。そ
してその拡張性にも非常に富んでいる等の効果が奏せら
れる。 尚、本発明は上述した実施例に限定されるものではなく
、その要旨を逸脱しない範囲で種々変形して実施するこ
とが可能なことは云うまでもなく、配列の依存性を解析
する1次元解析処理の手法についても前述したBane
rjeeの診断方式以外の他の方式を適宜採用可能であ
る。 [発明の効果コ 以上説明したように本発明によれば、多次元配列に対す
るベクトル化診断を、その配列の添字式で示される次元
毎にその依存性を調べた上で配列全体についての依存性
を求めて行うので、ベクトル化診断に要する計算量を大
幅に削減し、簡易に効率良く、その正確な診断結果を高
速に求めることが可能である等の実用上多大なる効果が
奏せられる。
図は本発明の一実施例に係るベクトル化診断方式につい
て示すもので、第1図は実施例方式を適用して実現され
るコンパイラの概略構成図、第2図は実施例における配
列依存解析部の概略的な構成例を示す図、第3図は配列
依存解析部における多次元配列に対する依存方向の解析
処理手続きの流れを示す図である。 l・・・プ゛ログラム人力部、2・・・ベクトル化処理
部、2a・・・ベクトル化診断部、2b・・・ベクトル
化変換部、3・・・最適化部、4・・・コード生成部、
21・・・依存解析部、22・・・ベクトル化判定部、
6・・・スカラー依存解析部、7・・・配列依存解析部
、7a・・・1次元処理部、7b・・・依存方向ベクト
ルテーブル、7c・・・依存関係決定部。
て示すもので、第1図は実施例方式を適用して実現され
るコンパイラの概略構成図、第2図は実施例における配
列依存解析部の概略的な構成例を示す図、第3図は配列
依存解析部における多次元配列に対する依存方向の解析
処理手続きの流れを示す図である。 l・・・プ゛ログラム人力部、2・・・ベクトル化処理
部、2a・・・ベクトル化診断部、2b・・・ベクトル
化変換部、3・・・最適化部、4・・・コード生成部、
21・・・依存解析部、22・・・ベクトル化判定部、
6・・・スカラー依存解析部、7・・・配列依存解析部
、7a・・・1次元処理部、7b・・・依存方向ベクト
ルテーブル、7c・・・依存関係決定部。
Claims (2)
- (1)ソースプログラム中のベクトル化の対象となるル
ープ内に出現する配列演算をベクトル演算に変換して実
行するデータ処理装置において、上記ソースプログラム
内の多次元配列データに関するデータ依存解析を行うに
際し、 上記多次元配列における各次元の添字式を用いて各次元
毎にそれぞれ独立に一次元のデータ依存解析を行い、各
次元毎に求められた依存データを統合して前記多次元配
列データについてのデータ依存関係を決定してなること
を特徴とするベクトル化診断方式。 - (2)ソースプログラム中のベクトル化の対象となるル
ープ内に出現する配列演算をベクトル演算に変換して実
行するデータ処理装置において、同一の配列変数参照に
ついて、その配列の次元数を調べる手段と、 この手段により配列が多次元配列であると判定された場
合には、当該配列の各次元の添字表現を抽出し、これら
の添字表現により示される各次元毎にその参照依存関係
をそれぞれ解析する一次元データ依存解析手段と、 この一次元データ依存解析手段により求められる各次元
についてのデータ依存関係情報とベクトル化を行うルー
プのネスト数に応じた依存特性情報とをそれぞれ記憶す
る手段と、この記憶手段に収集された前記配列の各次元
に関する依存関係情報を統合して多次元配列全体につい
てのデータ依存関係を決定する依存関係決定手段とを具
備したことを特徴とするベクトル化診断方式。
Priority Applications (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP1249072A JPH03111971A (ja) | 1989-09-27 | 1989-09-27 | ベクトル化診断方式 |
| US07/556,441 US5274812A (en) | 1989-09-27 | 1990-07-24 | Method of compiling source code into vectorized object code by performing a one-dimensional analysis on each dimension of a multi-dimensional array within a loop |
| EP19900308369 EP0425078A3 (en) | 1989-09-27 | 1990-07-30 | Vectorization method |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP1249072A JPH03111971A (ja) | 1989-09-27 | 1989-09-27 | ベクトル化診断方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH03111971A true JPH03111971A (ja) | 1991-05-13 |
Family
ID=17187589
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP1249072A Pending JPH03111971A (ja) | 1989-09-27 | 1989-09-27 | ベクトル化診断方式 |
Country Status (3)
| Country | Link |
|---|---|
| US (1) | US5274812A (ja) |
| EP (1) | EP0425078A3 (ja) |
| JP (1) | JPH03111971A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8274667B2 (en) | 2005-05-30 | 2012-09-25 | Canon Kabushiki Kaisha | Image processing apparatus, control method thereof, and storage medium storing a program for converting raster image data into block vector image format |
Families Citing this family (26)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| 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 |
| US5386562A (en) * | 1992-05-13 | 1995-01-31 | Mips Computer Systems, Inc. | Circular scheduling method and apparatus for executing computer programs by moving independent instructions out of a loop |
| US6055627A (en) * | 1992-06-22 | 2000-04-25 | Hitachi, Ltd. | Compiling method of accessing a multi-dimensional array and system therefor |
| JPH07110800A (ja) * | 1993-10-13 | 1995-04-25 | Matsushita Electric Ind Co Ltd | 最適化並列コンパイル装置及び最適化並列コンパイル方法 |
| 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 |
| JP2669603B2 (ja) * | 1994-12-15 | 1997-10-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンパイラにおけるコード生成方法及びコンパイラ |
| JP3505266B2 (ja) * | 1995-06-15 | 2004-03-08 | 三洋電機株式会社 | プログラム実行装置 |
| US5742823A (en) * | 1996-01-17 | 1998-04-21 | Nathen P. Edwards | Total object processing system and method with assembly line features and certification of results |
| JP3380390B2 (ja) * | 1996-03-27 | 2003-02-24 | 富士通株式会社 | デバッグ情報表示装置 |
| US5987254A (en) * | 1997-07-14 | 1999-11-16 | Hewlett Packard Company | System-wide memoization of array dependence information |
| US6959434B2 (en) * | 1999-12-01 | 2005-10-25 | International Business Machines Corporation | Method of determining the syntactic correctness of expressions |
| US7337437B2 (en) * | 1999-12-01 | 2008-02-26 | International Business Machines Corporation | Compiler optimisation of source code by determination and utilization of the equivalence of algebraic expressions in the source code |
| US6775765B1 (en) * | 2000-02-07 | 2004-08-10 | Freescale Semiconductor, Inc. | Data processing system having instruction folding and method thereof |
| US6578196B1 (en) * | 2000-06-07 | 2003-06-10 | International Business Machines Corporation | Checking of units and dimensional homogeneity of expressions in computer programs |
| US8176108B2 (en) * | 2000-06-20 | 2012-05-08 | International Business Machines Corporation | Method, apparatus and computer program product for network design and analysis |
| US6952821B2 (en) * | 2002-08-19 | 2005-10-04 | Hewlett-Packard Development Company, L.P. | Method and system for memory management optimization |
| US7484079B2 (en) * | 2002-10-31 | 2009-01-27 | Hewlett-Packard Development Company, L.P. | Pipeline stage initialization via task frame accessed by a memory pointer propagated among the pipeline stages |
| US7171544B2 (en) * | 2003-12-15 | 2007-01-30 | International Business Machines Corporation | Run-time parallelization of loops in computer programs by access patterns |
| US7546583B2 (en) * | 2005-07-12 | 2009-06-09 | International Business Machines Corporation | Real options based iterative development program metrics |
| US8949808B2 (en) | 2010-09-23 | 2015-02-03 | Apple Inc. | Systems and methods for compiler-based full-function vectorization |
| US9529574B2 (en) | 2010-09-23 | 2016-12-27 | Apple Inc. | Auto multi-threading in macroscalar compilers |
| US8621448B2 (en) | 2010-09-23 | 2013-12-31 | Apple Inc. | Systems and methods for compiler-based vectorization of non-leaf code |
| 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 |
| CN113569184A (zh) * | 2021-07-16 | 2021-10-29 | 众安在线财产保险股份有限公司 | 可配置的数据计算方法、装置、设备及计算机可读介质 |
Family Cites Families (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS62159274A (ja) * | 1986-01-08 | 1987-07-15 | Hitachi Ltd | 条件分岐の分割・複写によるベクトル化方式 |
| JP2708405B2 (ja) * | 1986-03-03 | 1998-02-04 | 株式会社日立製作所 | コンパイラにおけるループ展開方法 |
| JPH0685148B2 (ja) * | 1986-03-07 | 1994-10-26 | 株式会社日立製作所 | 配列デ−タフロ−解析装置 |
| US5142681A (en) * | 1986-07-07 | 1992-08-25 | International Business Machines Corporation | APL-to-Fortran translators |
| JPH0814817B2 (ja) * | 1986-10-09 | 1996-02-14 | 株式会社日立製作所 | 自動ベクトル化方法 |
| JPH01108638A (ja) * | 1987-10-21 | 1989-04-25 | Hitachi Ltd | 並列化コンパイル方式 |
| JP2738692B2 (ja) * | 1988-01-29 | 1998-04-08 | 株式会社日立製作所 | 並列化コンパイル方法 |
| US5093916A (en) * | 1988-05-20 | 1992-03-03 | International Business Machines Corporation | System for inserting constructs into compiled code, defining scoping of common blocks and dynamically binding common blocks to tasks |
-
1989
- 1989-09-27 JP JP1249072A patent/JPH03111971A/ja active Pending
-
1990
- 1990-07-24 US US07/556,441 patent/US5274812A/en not_active Expired - Fee Related
- 1990-07-30 EP EP19900308369 patent/EP0425078A3/en not_active Withdrawn
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8274667B2 (en) | 2005-05-30 | 2012-09-25 | Canon Kabushiki Kaisha | Image processing apparatus, control method thereof, and storage medium storing a program for converting raster image data into block vector image format |
Also Published As
| Publication number | Publication date |
|---|---|
| EP0425078A3 (en) | 1992-10-07 |
| US5274812A (en) | 1993-12-28 |
| EP0425078A2 (en) | 1991-05-02 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH03111971A (ja) | ベクトル化診断方式 | |
| CN114399019B (zh) | 神经网络编译方法、系统、计算机设备及存储介质 | |
| Claessen et al. | Generating constrained random data with uniform distribution | |
| JPH06507990A (ja) | コンピュータのための最適化コンパイラ | |
| JPS6234275A (ja) | ベクトル化コンパイラ | |
| CN109961150B (zh) | 一种应对退相干的量子程序变换方法及系统 | |
| JPH0795274B2 (ja) | 配列添字解析方法 | |
| CN108897572B (zh) | 一种基于变量关联树的复杂类型重构方法 | |
| Smetsers et al. | Complementing model learning with mutation-based fuzzing | |
| Nowak et al. | LaGO: a (heuristic) branch and cut algorithm for nonconvex MINLPs | |
| Hu et al. | Tpu-mlir: A compiler for tpu using mlir | |
| CN108228187A (zh) | 一种数值程序的全局优化方法 | |
| US12387130B1 (en) | Automated synthesizing and compilation of quantum programs | |
| Carpentieri et al. | A performance analysis of autovectorization on rvv risc-v boards | |
| KR101229677B1 (ko) | 반복 비트 값 패턴을 결정하는 방법 및 비트 값 패턴 분석기, 테스트 시스템 및 컴퓨터 판독가능 저장 매체 | |
| JP2002527816A (ja) | プログラム最適化装置および方法 | |
| CN113553266A (zh) | 一种基于并行性检测模型的串行程序的并行性检测方法、系统、终端及可读存储介质 | |
| Naumann et al. | Control flow reversal for adjoint code generation | |
| Sommer et al. | Spnc: An open-source mlir-based compiler for fast sum-product network inference on cpus and gpus | |
| CN119883280B (zh) | 一种基于深度学习的plc编程语言程序并行检测方法 | |
| Pett | Stability of Product Sampling under Product-Line Evolution | |
| JP3373641B2 (ja) | テスト系列生成装置 | |
| JP3598090B2 (ja) | コンパイラ装置及びコンパイル方法 | |
| Rus et al. | Using model checking in a parallelizing compiler | |
| Mitov et al. | Fast likelihood evaluation for multivariate phylogenetic comparative methods: the PCMBase R package |