JPS6234275A - ベクトル化コンパイラ - Google Patents
ベクトル化コンパイラInfo
- Publication number
- JPS6234275A JPS6234275A JP61168232A JP16823286A JPS6234275A JP S6234275 A JPS6234275 A JP S6234275A JP 61168232 A JP61168232 A JP 61168232A JP 16823286 A JP16823286 A JP 16823286A JP S6234275 A JPS6234275 A JP S6234275A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- level
- dependency
- statements
- graph
- 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; 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)
- Complex Calculations (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
下記の順序で本発明を説明する。
A、産業上の利用分野
B、従来技術
C0発明が解決しようとする問題点
り1問題点を解決するための手段
E、実施例
El、制御の依存関係
E2.データの依存関係
E3.依存関係のレベル
E4.依存関係の交換
E5.ベクトル実行のための分割
E6.実施例の方法の概略
E7.説明のための例
E8.計算機による実行可能性
F0発明の効果
A、産業上の利用分野
本発明は、SIMD計算機上で実行するために、内部ル
ープ中に漸化関係の存在するネストされたループを含む
手続き言語のソース・コードからオブジェクト・コード
をベクトル化し且つコンパイルする方法に関する。
ープ中に漸化関係の存在するネストされたループを含む
手続き言語のソース・コードからオブジェクト・コード
をベクトル化し且つコンパイルする方法に関する。
B、従来技術
計算機のために書かれた多くのプログラムは、データの
系列に対して反復的な操作を行なうためのループ及びル
ープのネストを含んでいる。それらのプログラムは、明
確に定められた順序で操作が行なわれる事を指示してい
る。単一命令単一データ経路(S I S D)計算機
は歴史的に最も昏及した型の計算機であったので、上記
順序は、そのような5ISD計算機上で容易に実行しう
るものになっている。しかし、その同じ順序が、単一命
令複数データ経路(SIMD)計算機上でも有効である
とは限らない。SIMD計算機を用いた場合、連続した
要素がその順序で取り出され、独立に並列に操作される
。一方、要素が有効に取り出され、独立に並列に操作さ
れるような別の順序も存在しうる。従って、反復的操作
を実行するためにSIMD計算機が使えるような操作の
順序及びプログラム部分を探知する事が必要である。こ
の要請及びそれに伴なう結果はベクトル化として知られ
ている。従って、スカラー5ISD計算機のために書か
れたプログラムから出発して、ベクトルSIMD計算機
上で実行するためのオブジェクト・コートを生成する事
が望まれる。
系列に対して反復的な操作を行なうためのループ及びル
ープのネストを含んでいる。それらのプログラムは、明
確に定められた順序で操作が行なわれる事を指示してい
る。単一命令単一データ経路(S I S D)計算機
は歴史的に最も昏及した型の計算機であったので、上記
順序は、そのような5ISD計算機上で容易に実行しう
るものになっている。しかし、その同じ順序が、単一命
令複数データ経路(SIMD)計算機上でも有効である
とは限らない。SIMD計算機を用いた場合、連続した
要素がその順序で取り出され、独立に並列に操作される
。一方、要素が有効に取り出され、独立に並列に操作さ
れるような別の順序も存在しうる。従って、反復的操作
を実行するためにSIMD計算機が使えるような操作の
順序及びプログラム部分を探知する事が必要である。こ
の要請及びそれに伴なう結果はベクトル化として知られ
ている。従って、スカラー5ISD計算機のために書か
れたプログラムから出発して、ベクトルSIMD計算機
上で実行するためのオブジェクト・コートを生成する事
が望まれる。
ベクトル化は、少なくとも3つの理由で興味がある。第
1点は、5ISD計算機のために書かれた大量の既存の
プログラムが存在する事である。
1点は、5ISD計算機のために書かれた大量の既存の
プログラムが存在する事である。
自動的ベクトル化を行なえば、プログラムを書きかえる
事なしに既存のプログラムをSIMD計算機上で実行さ
せる事が可能になる。第2点は移植性である。自動的ベ
クトル化は、同じプログラムを、変更なしに、5ISD
計算機とSIMD計算機の両者で実行させる事を可能に
する。第3点はスピードである。自動的ベクトル化を用
いれば、同じプログラムが、5ISD計算機上で走る時
はスカラーに関して最適化され、SIMD計算機上で走
る時はベクトルに関して最適化される事が可能になる。
事なしに既存のプログラムをSIMD計算機上で実行さ
せる事が可能になる。第2点は移植性である。自動的ベ
クトル化は、同じプログラムを、変更なしに、5ISD
計算機とSIMD計算機の両者で実行させる事を可能に
する。第3点はスピードである。自動的ベクトル化を用
いれば、同じプログラムが、5ISD計算機上で走る時
はスカラーに関して最適化され、SIMD計算機上で走
る時はベクトルに関して最適化される事が可能になる。
ベクトル化の目的は、ベクトルSIMD計算機を利用す
るために、順次的なスカラー操作であって1等価な並列
式ベクトル操作に変換できるものを見つける事である。
るために、順次的なスカラー操作であって1等価な並列
式ベクトル操作に変換できるものを見つける事である。
2つの操作は、プログラムが同じ結果を生じれば、等価
である。
である。
一般に、ステートメントは、それがループの1つの繰り
返しの中で入力としてループの初期の繰り返しの中で計
算した値を必要としないならば、ベクトル化が可能であ
る。Doループの1つの繰り返しの中で計算された値が
後の繰り返しの中で使われなければ、全てのデータ値が
並列に計算できる。1回のD○ループの繰り返しから得
られるデータ値の、次の繰り返しに対する独立性は、S
IMD計算機上での実行を可能にする1つの因子である
。逆に、もし1回の繰り返しの中である値が計算され、
次に後の繰り返しの中でそれが使われるならば、そのD
oループは一般にベクトル化できない。
返しの中で入力としてループの初期の繰り返しの中で計
算した値を必要としないならば、ベクトル化が可能であ
る。Doループの1つの繰り返しの中で計算された値が
後の繰り返しの中で使われなければ、全てのデータ値が
並列に計算できる。1回のD○ループの繰り返しから得
られるデータ値の、次の繰り返しに対する独立性は、S
IMD計算機上での実行を可能にする1つの因子である
。逆に、もし1回の繰り返しの中である値が計算され、
次に後の繰り返しの中でそれが使われるならば、そのD
oループは一般にベクトル化できない。
順次的操作のベクトル化を行なうには、プログラム中の
依存関係を判定する必要がある。ソース・プログラム中
のあるステートメントは、プログラム中の他のステート
メントに対して、制御の流れがその1つによって影響を
受けるか又は両者が同じ記憶位置を使用する場合、依存
的である。ベクトル化のためにプログラムを解析する時
、両方の種類の依存性が考11iされなければならない
。
依存関係を判定する必要がある。ソース・プログラム中
のあるステートメントは、プログラム中の他のステート
メントに対して、制御の流れがその1つによって影響を
受けるか又は両者が同じ記憶位置を使用する場合、依存
的である。ベクトル化のためにプログラムを解析する時
、両方の種類の依存性が考11iされなければならない
。
本発明に最も関係の深い従来技術文献は例えば、A11
en著、”Dependence Analysis
forSubscripted Variables
and Its Application t。
en著、”Dependence Analysis
forSubscripted Variables
and Its Application t。
Program Transforn+ations”
、 ph、 D学位論文、Computer 5cie
nce、 Rice University、 19
83年4月;及びKennedy著、“Automat
ic Translation ofFORTRAN
Programs to Vector ForIll
”+RicelJniversity Technic
al Report 476−029−4.1980年
10月である。これらA11en及びKennedyの
文献は、(a)依存関係グラフを形成する、(b)グラ
フをトポロジカルに意味のある領域に分割する、(c)
どの領域がSIMD計算機上で実行可能かを探知するた
めに領域を調査する、(d)(C)の結果に基づいてス
カラー又はベクトルのコードを生成する、というスカラ
ー・ベクトル変換ステップを示している。
、 ph、 D学位論文、Computer 5cie
nce、 Rice University、 19
83年4月;及びKennedy著、“Automat
ic Translation ofFORTRAN
Programs to Vector ForIll
”+RicelJniversity Technic
al Report 476−029−4.1980年
10月である。これらA11en及びKennedyの
文献は、(a)依存関係グラフを形成する、(b)グラ
フをトポロジカルに意味のある領域に分割する、(c)
どの領域がSIMD計算機上で実行可能かを探知するた
めに領域を調査する、(d)(C)の結果に基づいてス
カラー又はベクトルのコードを生成する、というスカラ
ー・ベクトル変換ステップを示している。
C0発明が解決しようとする問題点
従来技術では、ループのネストの選ばれた1つのものの
中のプログラム・ステートメントの中に漸化関係がある
と、漸化を生じるループ中のプログラム・ステー1〜メ
ントのベクトル化は不可能であり、さらにそのループを
含む外側のループ中のプログラム・ステートメントのベ
クトル化も不可能であった。ループの順序の交換は、ル
ープ中のステートメントのベクトル化の可能性に影響を
与える事が知られている。しかしながら、ループの識別
及び交換に関係した複雑さ及びコストにより、これは最
も内側及び内側から2番目のループにおいて慎ましく用
いられていただけであった。
中のプログラム・ステートメントの中に漸化関係がある
と、漸化を生じるループ中のプログラム・ステー1〜メ
ントのベクトル化は不可能であり、さらにそのループを
含む外側のループ中のプログラム・ステートメントのベ
クトル化も不可能であった。ループの順序の交換は、ル
ープ中のステートメントのベクトル化の可能性に影響を
与える事が知られている。しかしながら、ループの識別
及び交換に関係した複雑さ及びコストにより、これは最
も内側及び内側から2番目のループにおいて慎ましく用
いられていただけであった。
D8問題点を解決するための手段
本発明によれば、繰り返し操作の実行にSIMD計算機
が使用できるような5ISDプログラムの部分が自動的
に探知される。
が使用できるような5ISDプログラムの部分が自動的
に探知される。
本発明は、所定のレベルnのループにおいてプログラム
のベクトル化の可能性を判定するには、レベルn及びそ
の内側のプログラムの領域を表現する依存関係グラフに
おいて、最内敏感型(innermost−sensi
tive)のレベルnの依存関係辺及びループ独立な依
存関係辺のみを考察するだけでよいという、予期されな
かった重要な発見に基いている。ちょうどこれらの2種
類の辺(最内敏感型のレベルnの辺及びループ独立な辺
)から形成されたグラフが閉路を持たないならば、その
領域はベクトル化が可能である。これは従来技術の方法
とは対照的である。従来は、レベルnの辺。
のベクトル化の可能性を判定するには、レベルn及びそ
の内側のプログラムの領域を表現する依存関係グラフに
おいて、最内敏感型(innermost−sensi
tive)のレベルnの依存関係辺及びループ独立な依
存関係辺のみを考察するだけでよいという、予期されな
かった重要な発見に基いている。ちょうどこれらの2種
類の辺(最内敏感型のレベルnの辺及びループ独立な辺
)から形成されたグラフが閉路を持たないならば、その
領域はベクトル化が可能である。これは従来技術の方法
とは対照的である。従来は、レベルnの辺。
レベルnの内側の辺、及びループ独立な辺を含む、領域
中の全ての辺がグラフ中に含まれていた。
中の全ての辺がグラフ中に含まれていた。
従来技術は、最内敏感辺の重要性を発見し識別する事が
できなかったので、最内敏感辺でないレベルnの依存関
係及びレベルnの内側のレベルの依存関係辺をグラフか
ら除く事ができなかった。
できなかったので、最内敏感辺でないレベルnの依存関
係及びレベルnの内側のレベルの依存関係辺をグラフか
ら除く事ができなかった。
それらの辺は、本発明によって、レベルnにおけるステ
ートメントのベクトル化の可能性には無関係である事が
知られている。従って、従来技術は、グラフ中により多
くの辺が存在するので、グラフ中に閉路が見い出される
事が多く、従って非常に多くの種類のステートメントが
レベルnでベクトル化できる事を探知するのに失敗して
いた。例えば、レベルnの内側の辺による閉路は、レベ
ルnのステートメントのベクトル化を妨げる。 A11
en及びKennedyの文献は、閉路を検出すると、
プログラム・ステートメントをレベルnでのスカラー処
理にゆだねている。
ートメントのベクトル化の可能性には無関係である事が
知られている。従って、従来技術は、グラフ中により多
くの辺が存在するので、グラフ中に閉路が見い出される
事が多く、従って非常に多くの種類のステートメントが
レベルnでベクトル化できる事を探知するのに失敗して
いた。例えば、レベルnの内側の辺による閉路は、レベ
ルnのステートメントのベクトル化を妨げる。 A11
en及びKennedyの文献は、閉路を検出すると、
プログラム・ステートメントをレベルnでのスカラー処
理にゆだねている。
より具体的には、本発明の目的は、内側のループに漸化
の存在するネストされたループを含む手続き型言語のソ
ース・コードから、SIMD計算機で実行するためのオ
ブジェクト・コードをコンパイルし且つベクトル化する
方法によって満足される。この方法はフォノ・ノイマン
型のCPUで実行可能である。この方法のステップは、
下記のものを含む。(a)ソース・コードを中間言語ス
トリングに変換し、そのストリングを最適化する。
の存在するネストされたループを含む手続き型言語のソ
ース・コードから、SIMD計算機で実行するためのオ
ブジェクト・コードをコンパイルし且つベクトル化する
方法によって満足される。この方法はフォノ・ノイマン
型のCPUで実行可能である。この方法のステップは、
下記のものを含む。(a)ソース・コードを中間言語ス
トリングに変換し、そのストリングを最適化する。
(b)そのストリングから依存関係グラフを形成する。
このグラフのノードはストリング中のステートメントを
表わしている。(C)外側から内側ヘレベル毎にグラフ
の強連結領域に従ってグラフを分割する。上記領域中で
は少なくとも1つの経路が各ノードを他の全てのノード
に結合している。(d)分割されたグラフの強連結領域
のどれが、SIMD計算機上で実行可能かを確認する。
表わしている。(C)外側から内側ヘレベル毎にグラフ
の強連結領域に従ってグラフを分割する。上記領域中で
は少なくとも1つの経路が各ノードを他の全てのノード
に結合している。(d)分割されたグラフの強連結領域
のどれが、SIMD計算機上で実行可能かを確認する。
(e)1組のベクトル化可能で、実行可能な、強連結領
域を選択し、それからベクトル・オブジェクト・コード
を生成する。ステップ(d)に関して、この方法は、レ
ベルnの領域において、各レベルnの依存関係が各々の
1つ内側のループと交換できるか否かを、レベルnのル
ープが最も内側のループになるまで確認するステップを
含む。もしそのような依存関係が交換できなければ、領
域はレベルnでベクトル化できない。しかし、交換時に
依存関係が消失すれば、それは無視できる。ステップ(
d)は、さらに、最も内側のレベルまで交換した後に生
き残った全てのレベルn依存関係及び全てのループ独立
な依存関係を用いてグラフを構成し、構成されたグラフ
が閉路を含まないならば、レベルnにおいてそれらのス
テートメントがベクトル化可能である事を知るステップ
を含んでいる。
域を選択し、それからベクトル・オブジェクト・コード
を生成する。ステップ(d)に関して、この方法は、レ
ベルnの領域において、各レベルnの依存関係が各々の
1つ内側のループと交換できるか否かを、レベルnのル
ープが最も内側のループになるまで確認するステップを
含む。もしそのような依存関係が交換できなければ、領
域はレベルnでベクトル化できない。しかし、交換時に
依存関係が消失すれば、それは無視できる。ステップ(
d)は、さらに、最も内側のレベルまで交換した後に生
き残った全てのレベルn依存関係及び全てのループ独立
な依存関係を用いてグラフを構成し、構成されたグラフ
が閉路を含まないならば、レベルnにおいてそれらのス
テートメントがベクトル化可能である事を知るステップ
を含んでいる。
便利な事に、本発明の方法は内側のループの依存関係及
び交換中に消失したレベルnの依存関係を除去している
。不幸な事に、レベルnのループがレベルn+1に2つ
以上のループを含む時、それらのループの1つ以上から
のステートメントがレベルnにおいて強く連結していれ
ば、レベルnにおいてベクトル化は不可能である。
び交換中に消失したレベルnの依存関係を除去している
。不幸な事に、レベルnのループがレベルn+1に2つ
以上のループを含む時、それらのループの1つ以上から
のステートメントがレベルnにおいて強く連結していれ
ば、レベルnにおいてベクトル化は不可能である。
E、実施例
本発明を理解するために、制御及びデータの依存関係、
依存関係のレベル及び交換、並びにベクトル実行のため
の分割の概念についての前置き的説明を示す、それに続
いて、−膜化された方法について付加的な説明を行なう
。最後に、図面を参照しながら例を説明する。
依存関係のレベル及び交換、並びにベクトル実行のため
の分割の概念についての前置き的説明を示す、それに続
いて、−膜化された方法について付加的な説明を行なう
。最後に、図面を参照しながら例を説明する。
E 1 、制御の依存関係
制御の依存関係は、1つのステートメントが、第2のス
テートメントが実行されるか否かを決定するために生じ
る。下記の例で、ステートメント2はステートメント1
に依存する。
テートメントが実行されるか否かを決定するために生じ
る。下記の例で、ステートメント2はステートメント1
に依存する。
Do 3 I=i、NL I F
(A(I)、GT、O,0)GOT○ 32 A(
I)=B(I)+1.0 3 C0NTINUE ステートメント1のテストの結果は、ステートメント2
が実行されるか否かを決定する。ステートメント2の実
行は、ステートメント1の実行に依存する。IF交換は
、制御の依存関係をデータの依存関係に変換するために
使われる技術である。
(A(I)、GT、O,0)GOT○ 32 A(
I)=B(I)+1.0 3 C0NTINUE ステートメント1のテストの結果は、ステートメント2
が実行されるか否かを決定する。ステートメント2の実
行は、ステートメント1の実行に依存する。IF交換は
、制御の依存関係をデータの依存関係に変換するために
使われる技術である。
下記に、そのような変更の例を示す。
Do 3 I=1.N
L L=A(I)、LE、0.0
2 IF(L) A(I)=B(I)+1.03
C0NTINUE ステートメント2は論理スカラーLを含んでいる。ルー
プの各繰り返し毎に、Lは、A (r)の対応する結果
要素が記憶されるべきか否かを指定する。従って、制御
の依存関係は、ステートメント中でデータ要素が参照さ
れる条件付き代入ステートメントに変換された。2つの
ループは同じ効果を有している。
C0NTINUE ステートメント2は論理スカラーLを含んでいる。ルー
プの各繰り返し毎に、Lは、A (r)の対応する結果
要素が記憶されるべきか否かを指定する。従って、制御
の依存関係は、ステートメント中でデータ要素が参照さ
れる条件付き代入ステートメントに変換された。2つの
ループは同じ効果を有している。
E2.データの依存関係
データの依存関係は3通りの場合に生じる。第1に、ス
テートメントSがある値を定義し、ステートメントTが
それを参照するならば、TはSに依存する。第2に、ス
テートメントSがある値を参照し、ステートメントTが
それを定義するならば、TはSに依存する。第3に、ス
テートメントSがある値を記憶し、ステートメントTも
またその値を記憶するならば、TはSに依存する。
テートメントSがある値を定義し、ステートメントTが
それを参照するならば、TはSに依存する。第2に、ス
テートメントSがある値を参照し、ステートメントTが
それを定義するならば、TはSに依存する。第3に、ス
テートメントSがある値を記憶し、ステートメントTも
またその値を記憶するならば、TはSに依存する。
第1の依存性は真の依存関係とも呼ばれる。これは次の
ように示す事ができる。
ように示す事ができる。
s : l=
T:=X
明らかに、Sは、Tによって使用される値を定義してい
るので、Tが実行可能になる前にSが実行されなければ
ならない。Tの実行は、Sの実行が完了している事に依
存する。
るので、Tが実行可能になる前にSが実行されなければ
ならない。Tの実行は、Sの実行が完了している事に依
存する。
第2の依存関係は反依存関係とも呼ばれる。これは次の
ように示される。
ように示される。
S:=X
T:X=
この場合も、SはTの以前に実行されなければならない
、さもなければ、Tが変数Xを記憶し。
、さもなければ、Tが変数Xを記憶し。
そしてSが間違った値を使用する事になるであろう。再
び、Tの実行は、Sの実行が完了している事に依存する
。
び、Tの実行は、Sの実行が完了している事に依存する
。
第3の形のデータ依存関係は出力依存関係とも呼ばれる
。これは次のように示される。
。これは次のように示される。
S : X=
T:X=
SはTの前に実行されなければならない、さもなければ
、変数Xに間違った値が残されるであろう。上記の2つ
の場合と同様に、Tの実行はSの実行が完了している事
に依存する。
、変数Xに間違った値が残されるであろう。上記の2つ
の場合と同様に、Tの実行はSの実行が完了している事
に依存する。
E3.依存関係のレベル
依存関係は、1群のステートメントを取り囲んでいるル
ープ中の特定のD○ループのレベルに付属する。ある種
の依存関係は常に存在する。例えば: Do J= Do 工 = S : V=A(I 、JE B(I 、J)T :
Z(I 、J)=V Tは常にSに依存する。というのは各ループの各繰り返
し毎に、変数Vに関係した真の依存関係が存在するから
である。この型の依存関係はループ独立な依存関係と呼
ばれる。即ち、それらは、それらを取り囲んでいるルー
プの動作から独立しているからである。
ープ中の特定のD○ループのレベルに付属する。ある種
の依存関係は常に存在する。例えば: Do J= Do 工 = S : V=A(I 、JE B(I 、J)T :
Z(I 、J)=V Tは常にSに依存する。というのは各ループの各繰り返
し毎に、変数Vに関係した真の依存関係が存在するから
である。この型の依存関係はループ独立な依存関係と呼
ばれる。即ち、それらは、それらを取り囲んでいるルー
プの動作から独立しているからである。
ある種の依存関係は1つのループ・レベルに存在するが
他のループ・レベルには存在しない。例えば: Do J= Do I= s : A(I+1.J)=A(I、J)インデックス
エを有するループのレベルには真の依存性が存在する。
他のループ・レベルには存在しない。例えば: Do J= Do I= s : A(I+1.J)=A(I、J)インデックス
エを有するループのレベルには真の依存性が存在する。
例えば繰り返し2で記憶された要素が繰り返し3で取り
出される。この型の依存関係は漸化(recurren
ce)と呼ばれる。しかしレベルJには何の依存関係も
存在しない。より具体的には、ループJの1つの繰り返
しにおいて記憶されたどの要素も他の繰り返しにおいて
参照されない。
出される。この型の依存関係は漸化(recurren
ce)と呼ばれる。しかしレベルJには何の依存関係も
存在しない。より具体的には、ループJの1つの繰り返
しにおいて記憶されたどの要素も他の繰り返しにおいて
参照されない。
E4.依存関係の交換
Doループのホスト中の所定のループがSIMD計算機
で実行するために選ばれた時、各ペクト/L/(SIM
D)命令は、その所定のDoループ・インデックスによ
って選択された連続的なデータ要素に対して作用する。
で実行するために選ばれた時、各ペクト/L/(SIM
D)命令は、その所定のDoループ・インデックスによ
って選択された連続的なデータ要素に対して作用する。
例えば、Jループ(インデックスJを有するループ)が
下記のホスト中でベクトル化される場合; Do I K=1.N Do I J=1.N Do I I=1.N I A(I、J、K)=B(I、J、K)ベクトルL
OAD命令は、(1,1,1)、(1,2,1)、・・
・・、(1、n、1)の順序で、Bの要素を取り出しA
の要素に記憶する。これはスカラー・モードで使用され
るのとは異なった順序である。スカラー・モードではイ
ンデックスIを有する最も内側のD○ループが最も速く
循回する。事実、ベクトルの順序は、Jループがその1
つの内側のループと交換されそれが最も内側のループに
なった場合にスカラー・モードで見られる順序と全く同
じである。即ち: Do I K=1.N Do I I=1.N Do I J=1.N L A(I、J、K)=B(I、J、K)SIMD計
算機で実行するための所定のループを選ぶために、この
交換が有効でなければならない。即ち、それはソース・
コードの意味を保存しなければならない。
下記のホスト中でベクトル化される場合; Do I K=1.N Do I J=1.N Do I I=1.N I A(I、J、K)=B(I、J、K)ベクトルL
OAD命令は、(1,1,1)、(1,2,1)、・・
・・、(1、n、1)の順序で、Bの要素を取り出しA
の要素に記憶する。これはスカラー・モードで使用され
るのとは異なった順序である。スカラー・モードではイ
ンデックスIを有する最も内側のD○ループが最も速く
循回する。事実、ベクトルの順序は、Jループがその1
つの内側のループと交換されそれが最も内側のループに
なった場合にスカラー・モードで見られる順序と全く同
じである。即ち: Do I K=1.N Do I I=1.N Do I J=1.N L A(I、J、K)=B(I、J、K)SIMD計
算機で実行するための所定のループを選ぶために、この
交換が有効でなければならない。即ち、それはソース・
コードの意味を保存しなければならない。
元の例のにループがベクトル化可能な場合、下記のルー
プの順序が、元と同じ結果を生じなければならない。
プの順序が、元と同じ結果を生じなければならない。
Do I J=1.N
Do I I=1.N
Do I K=1.N
L A(I、J、K)=B(I、J、K)他のループ
は交換する必要はない。興味のあるループが他の全ての
ループの内側へ移動可能か否かを問うだけでよい。
は交換する必要はない。興味のあるループが他の全ての
ループの内側へ移動可能か否かを問うだけでよい。
場合によっては、このループ交換は不可能である。下記
のネストにおいて: Do I J=1.N Do I I=1.N L A(I−1,J+1)=A(I、J)Jループの
レベルに依存関係が存在する。ここで、Jの1つの繰り
返し中に記憶された値が次の繰り返し中に取り出される
。多くの依存関係は、ループが交換される時、処理の結
果に影響を与えない。しかし、この例では、Jループは
エループと交換できない。というのは答が変化するから
である。これは交換を妨げる依存関係の例である。
のネストにおいて: Do I J=1.N Do I I=1.N L A(I−1,J+1)=A(I、J)Jループの
レベルに依存関係が存在する。ここで、Jの1つの繰り
返し中に記憶された値が次の繰り返し中に取り出される
。多くの依存関係は、ループが交換される時、処理の結
果に影響を与えない。しかし、この例では、Jループは
エループと交換できない。というのは答が変化するから
である。これは交換を妨げる依存関係の例である。
もちろん、これはJループのベクトル化も妨げる。
多レベルのネストにおいて、ある依存関係は最も内側の
レベルに至る途中まで交換可能であるがそこで阻止され
る事がある。そのような依存関係は、最内ループ阻止型
の依存関係と呼ばれる。とイウのは、そのレベルのルー
プは最も内側のレベルに移動できないからである。もし
ループが最も内側のレベルに移動できな番づれば、それ
はベクトル化する事ができない。
レベルに至る途中まで交換可能であるがそこで阻止され
る事がある。そのような依存関係は、最内ループ阻止型
の依存関係と呼ばれる。とイウのは、そのレベルのルー
プは最も内側のレベルに移動できないからである。もし
ループが最も内側のレベルに移動できな番づれば、それ
はベクトル化する事ができない。
E5.ベクトル実行のための分割
上述のように、(SIMDの実行に適合させる)ベクト
ル化を行なうために、ループは最も内側の位置へ有効に
移動できなければならない。この交換を物理的に行なう
必要はない。その代りに、コンパイラのコード生成部分
において、選ばれたループによって選択される要素の群
をアクセスするベクトル命令が生成される。選ばれたル
ープに関するループ制御は元の場所に残され、各命令に
よって処理される群の中の要素の数ずつ増訂数されるよ
うに変更される。
ル化を行なうために、ループは最も内側の位置へ有効に
移動できなければならない。この交換を物理的に行なう
必要はない。その代りに、コンパイラのコード生成部分
において、選ばれたループによって選択される要素の群
をアクセスするベクトル命令が生成される。選ばれたル
ープに関するループ制御は元の場所に残され、各命令に
よって処理される群の中の要素の数ずつ増訂数されるよ
うに変更される。
E6.実施例の方法の概略
この方法においては、プログラム中の全ての依存関係辺
を含むグラフが、最も外側のレベルにおいて、強連結領
域に分割される。そのような領域の各々が順々に考察さ
れる。各領域内で、領域を定義するD○ループ・レベル
における各依存関係が考察される。元のループが最も内
側のループになるまで、この依存性を交換する試みが行
なわれる。もしこの交換が不可能ならば、その領域は、
領域を定義するレベルにおいてSIMD計算機によって
実行できない。この時、手続きはこの領域に関してこの
レベルで終了する。一方、交換が可能であるが、最も内
側のループに至る途中で依存性そのものが、中間ループ
における依存性によって吸収される事により、消失する
ならば、その依存性は無視される。というのはそれはそ
の領域を定義するレベルにおいてSIMDの実行に影響
を与えないからである。そうでない場合、その依存性は
その領域に関する「最内敏感型」の依存性と表現される
。
を含むグラフが、最も外側のレベルにおいて、強連結領
域に分割される。そのような領域の各々が順々に考察さ
れる。各領域内で、領域を定義するD○ループ・レベル
における各依存関係が考察される。元のループが最も内
側のループになるまで、この依存性を交換する試みが行
なわれる。もしこの交換が不可能ならば、その領域は、
領域を定義するレベルにおいてSIMD計算機によって
実行できない。この時、手続きはこの領域に関してこの
レベルで終了する。一方、交換が可能であるが、最も内
側のループに至る途中で依存性そのものが、中間ループ
における依存性によって吸収される事により、消失する
ならば、その依存性は無視される。というのはそれはそ
の領域を定義するレベルにおいてSIMDの実行に影響
を与えないからである。そうでない場合、その依存性は
その領域に関する「最内敏感型」の依存性と表現される
。
次に領域中の「最内敏感型」の依存性及びループ独立な
依存性だけを用いて、グラフが形成される。このグラフ
が閉路を含めば、その領域は、領域を定義するレベルに
おいてSIMD計算機で実行できないかもしれない。一
方そうでなければ、この領域は、領域を定義するループ
の内側の他のループが漸化関係を有していてもSIMD
計算機で実行するのに適している。
依存性だけを用いて、グラフが形成される。このグラフ
が閉路を含めば、その領域は、領域を定義するレベルに
おいてSIMD計算機で実行できないかもしれない。一
方そうでなければ、この領域は、領域を定義するループ
の内側の他のループが漸化関係を有していてもSIMD
計算機で実行するのに適している。
この時点で、この領域はSIMDで実行できる事がマー
ク付けられる。次に内側の領域が再帰的に考察され、各
々SIMDで有効に実行されるか否かが同様にマーク付
けられる。
ク付けられる。次に内側の領域が再帰的に考察され、各
々SIMDで有効に実行されるか否かが同様にマーク付
けられる。
この時点で、構造は、従来技術に従って形成されたもの
とはかなり異なっている事が明らかである。従来技術に
おいて、 A11en及びKennedyの方法は、漸
化を含む全ての領域に関して順次的なり。
とはかなり異なっている事が明らかである。従来技術に
おいて、 A11en及びKennedyの方法は、漸
化を含む全ての領域に関して順次的なり。
ステートメントを形成した。さらに、彼らの方法は、内
側の領域が漸化を含まない場合にのみSIMD実行が可
能である事を結論付けた。従来技術がその仕事を終了し
たのはこの時点においてである。
側の領域が漸化を含まない場合にのみSIMD実行が可
能である事を結論付けた。従来技術がその仕事を終了し
たのはこの時点においてである。
本発明の場合には、前述のステップの結果として、より
深いネスティングのレベルにおいて、より多くのソース
・コードのステートメントがベクトル化可能であると確
認される。このようにして。
深いネスティングのレベルにおいて、より多くのソース
・コードのステートメントがベクトル化可能であると確
認される。このようにして。
スカラー手続き言語のソース・コードをSIMD計算機
で実行するのに適したコード形式に変換するために、可
能な命令経路の組から1つの命令経路が選択されたにれ
に関して、この方法は、(a)ソース・コードを中間言
語ストリングに変換しそのストリングを最適化し、(b
)グラフのノードがストリング中のステートメントを表
現するような、依存関係グラフをストリングから形成し
、そして(c)命令の型、数及び分布、その実行時間、
並びに関連する資源のコストを考慮して、依存関係グラ
フから最小コストの経路を探知するというステップから
成っている。
で実行するのに適したコード形式に変換するために、可
能な命令経路の組から1つの命令経路が選択されたにれ
に関して、この方法は、(a)ソース・コードを中間言
語ストリングに変換しそのストリングを最適化し、(b
)グラフのノードがストリング中のステートメントを表
現するような、依存関係グラフをストリングから形成し
、そして(c)命令の型、数及び分布、その実行時間、
並びに関連する資源のコストを考慮して、依存関係グラ
フから最小コストの経路を探知するというステップから
成っている。
本発明の改善の特質を示すために、次の例を考察する。
ル−プのネストであって、一般にスカラー命令、又はホ
スト中のループのどれでもよいが1つだけに適用される
ベクトル(SIMD)計算機を用いたベクトル命令によ
って実行できるものを想定する。例えば、下記のネスト
において、DOI K=1.N DOI J=1.N D○ l I=1.N A(I、 J、 K)=B(I、 J、 K)+P(J
、 F、)申Q(J、 K)I E(K、 J、 I
)=F(K、 J、 I)+X(I、 J) IY(I
、 J)各ステートメント毎に4つの可(+l性(x、
J、■についてベクトル化するか又は全くしな一部)力
〜存在する。従って、2つのステートメントの組み合せ
に関しては16個の可能性が存在する。本発明の改善の
目的は、それらの可能性の中から最も実行速度の速いも
のを探知する事である。実行のコストを評価する時、い
くつかの因子が考慮されなければならない。それには、
ループ・オーバーヘッドのコスト、ハードウェア命令の
コスト、及びオペランドの取り出しと記憶のコストが含
まれる。それらのコストは、同じステートメントに関し
て、それを囲む各々のループがSIMD計算機上で実行
される候補として考慮される毎に変化する。
スト中のループのどれでもよいが1つだけに適用される
ベクトル(SIMD)計算機を用いたベクトル命令によ
って実行できるものを想定する。例えば、下記のネスト
において、DOI K=1.N DOI J=1.N D○ l I=1.N A(I、 J、 K)=B(I、 J、 K)+P(J
、 F、)申Q(J、 K)I E(K、 J、 I
)=F(K、 J、 I)+X(I、 J) IY(I
、 J)各ステートメント毎に4つの可(+l性(x、
J、■についてベクトル化するか又は全くしな一部)力
〜存在する。従って、2つのステートメントの組み合せ
に関しては16個の可能性が存在する。本発明の改善の
目的は、それらの可能性の中から最も実行速度の速いも
のを探知する事である。実行のコストを評価する時、い
くつかの因子が考慮されなければならない。それには、
ループ・オーバーヘッドのコスト、ハードウェア命令の
コスト、及びオペランドの取り出しと記憶のコストが含
まれる。それらのコストは、同じステートメントに関し
て、それを囲む各々のループがSIMD計算機上で実行
される候補として考慮される毎に変化する。
この改善は、修正された最小コスト・グラフ探索アルゴ
リズムを実現している。例えば、元々同じループのネス
トから生じたがその後グラフの独立な領域に分割された
2つのステートメントが、そのステートメントに関して
オブジェクト・コードが生成される時に、同じ組のルー
プ制御に実際上合併される可能性のある場合等を解決す
るためにヒユーリスティックスを用いなければならない
。
リズムを実現している。例えば、元々同じループのネス
トから生じたがその後グラフの独立な領域に分割された
2つのステートメントが、そのステートメントに関して
オブジェクト・コードが生成される時に、同じ組のルー
プ制御に実際上合併される可能性のある場合等を解決す
るためにヒユーリスティックスを用いなければならない
。
SIM、D実行に適しているか又は不適として領域の各
々がマーク付けられた時、それらの領域はその処理の一
部として依存関係に基いてトポロジカルな順序にソート
される。最小コストのグラフの探索は、ヌルの最初の領
域から開始しヌルの最終の領域で終るトポロジカルな順
序でそれらの領域を考慮する6次にそれらの領域の部分
集合中のステートメントを実行するのに必要なプロセッ
サ時間のリストが作成され維持される。この部分集合は
、常にトポロジカルな順序にヌルの最初の領域から始ま
り、そして常にその順序で他の領域で終る。その2つの
間に全ての領域が常に含まれる。
々がマーク付けられた時、それらの領域はその処理の一
部として依存関係に基いてトポロジカルな順序にソート
される。最小コストのグラフの探索は、ヌルの最初の領
域から開始しヌルの最終の領域で終るトポロジカルな順
序でそれらの領域を考慮する6次にそれらの領域の部分
集合中のステートメントを実行するのに必要なプロセッ
サ時間のリストが作成され維持される。この部分集合は
、常にトポロジカルな順序にヌルの最初の領域から始ま
り、そして常にその順序で他の領域で終る。その2つの
間に全ての領域が常に含まれる。
考察中の特定の経路上の各領域は、経路によって表現さ
れる実行可能性に依存して5ISD又はSIMD実行に
関してコストが評価される。
れる実行可能性に依存して5ISD又はSIMD実行に
関してコストが評価される。
リスト上の各要素は、経路上のヌルの最初の領域から最
後の領域までの経路上の領域の実行を表わしている。但
し各領域は特定の方式、即ち5ISD又はSIMDのい
ずれかで実行される。この領域の集まり全体を実行する
ためのコストが、挿入しなければならないループ制御ス
テートメントの数を最小化しなからヒユーリスティック
に評価される。このコストが確認されると、この経路に
沿った実行のための次の可能な候補領域が識別される。
後の領域までの経路上の領域の実行を表わしている。但
し各領域は特定の方式、即ち5ISD又はSIMDのい
ずれかで実行される。この領域の集まり全体を実行する
ためのコストが、挿入しなければならないループ制御ス
テートメントの数を最小化しなからヒユーリスティック
に評価される。このコストが確認されると、この経路に
沿った実行のための次の可能な候補領域が識別される。
これらの候補は、トポロジカルな順序中の次の領域であ
る。次にこれらの候補及びそれらに到達するまでにちょ
うど評価された実行のコストは、係属中の可能な実行経
路のリスト上に記録される。
る。次にこれらの候補及びそれらに到達するまでにちょ
うど評価された実行のコストは、係属中の可能な実行経
路のリスト上に記録される。
候補領域が5ISDの候補としてマーク付けられている
時、その候補の内側の領域は次に5ISD又はSIMD
のいずれかの候補として考察される。候補領域がSIM
Dの候補としてマーク付けられている時、全ての内側の
領域は5ISDの候補であり、処理を促進するために迂
回される。
時、その候補の内側の領域は次に5ISD又はSIMD
のいずれかの候補として考察される。候補領域がSIM
Dの候補としてマーク付けられている時、全ての内側の
領域は5ISDの候補であり、処理を促進するために迂
回される。
リスト上の全ての要素から、実行可能性の特定の経路に
沿ってそれに関連するコストが最小の次の候補を有する
ものを選択し、その先行者と共に実行する時にそれを含
めるコストを確認し、その可能な後継者を児つけ、そし
てそれらに到達する事のコストと共にそれらを、係属中
の候補のリスト上に記録する操作が反復される。経路上
に含めるための最小コストの候補としてヌルの最終領域
が選択される時、操作は終了する6選択された経路は、
各領域が5ISD又はSIMDのいずれにより実行され
るかに関する判定を表わす。さらにそれは、ループ制御
ステートメントを最小化する目的のためにいかにして領
域をより少数の領域に併合するかに関する判定を表わす
。次にソース・コードのストリングが、これらの判定を
実現するために再処理される。次に、ソース・コードの
ストリングの最適化、特にレジスタの最適化が行なわれ
、最後にオブジェクト・コードが生成される。
沿ってそれに関連するコストが最小の次の候補を有する
ものを選択し、その先行者と共に実行する時にそれを含
めるコストを確認し、その可能な後継者を児つけ、そし
てそれらに到達する事のコストと共にそれらを、係属中
の候補のリスト上に記録する操作が反復される。経路上
に含めるための最小コストの候補としてヌルの最終領域
が選択される時、操作は終了する6選択された経路は、
各領域が5ISD又はSIMDのいずれにより実行され
るかに関する判定を表わす。さらにそれは、ループ制御
ステートメントを最小化する目的のためにいかにして領
域をより少数の領域に併合するかに関する判定を表わす
。次にソース・コードのストリングが、これらの判定を
実現するために再処理される。次に、ソース・コードの
ストリングの最適化、特にレジスタの最適化が行なわれ
、最後にオブジェクト・コードが生成される。
E7.説明のための例
Do 9 L=1.10
Do 9 K=1.1.0
Do 9 J=1.10
Do 9 I=1.10
1 A(I+1.J、に、L+1)=[3(I、J、に
+1.L+1)◆C(I、J、に、L+1)+D(I、
J、に、L)200◆1. Jul、 K+1. L+
1)=^(I、 J、 K、 L+1)3 C(I
+1.Jul、に◆1. L+1)=A(I、J、に
、 L+1)◆D(I、J、 に+1. 国)4
D(I+1. Jul、 K+1. L+1)=
C(I、 Jul、 K+1. 国)9 C0N
TINUE 上記プログラムは、説明のために、文番号1〜4の付い
たステートメントを含むFORTRANソース・コード
の一部分を示したものである。第1A図を参照すると、
これらのステートメントの間の依存関係をグラフで表現
したものが示されている。グラフのノード1〜4は各々
ステートメンlvl〜4を表している。また辺には、依
存関係を斐じさせるループのレベルを示すレベル番号1
〜4が(、tけられている。この場合、レベル1の依存
関係は最も外側のループによって生じる。同様に、レベ
ル4の依存関係は最も内側のループによって生じる。こ
の例ではループ独立な依存関係は存在しない、そのよう
なものが存在する場合、それらはレベル5が与えられる
。
+1.L+1)◆C(I、J、に、L+1)+D(I、
J、に、L)200◆1. Jul、 K+1. L+
1)=^(I、 J、 K、 L+1)3 C(I
+1.Jul、に◆1. L+1)=A(I、J、に
、 L+1)◆D(I、J、 に+1. 国)4
D(I+1. Jul、 K+1. L+1)=
C(I、 Jul、 K+1. 国)9 C0N
TINUE 上記プログラムは、説明のために、文番号1〜4の付い
たステートメントを含むFORTRANソース・コード
の一部分を示したものである。第1A図を参照すると、
これらのステートメントの間の依存関係をグラフで表現
したものが示されている。グラフのノード1〜4は各々
ステートメンlvl〜4を表している。また辺には、依
存関係を斐じさせるループのレベルを示すレベル番号1
〜4が(、tけられている。この場合、レベル1の依存
関係は最も外側のループによって生じる。同様に、レベ
ル4の依存関係は最も内側のループによって生じる。こ
の例ではループ独立な依存関係は存在しない、そのよう
なものが存在する場合、それらはレベル5が与えられる
。
第1A図は、従来技術に従って構成された依存関係グラ
フを表している。これに対して、第1B図は本発明に従
ってこの依存関係グラフを修正したものを表しており、
各辺に、その辺が「最内阻止」か否か及びその辺が[最
内敏感」か否かを述べる付加的情報を与えている。この
例では[最内阻止」型の辺しか存在せず、その辺はグラ
フ中ではr工PJと示されている。
フを表している。これに対して、第1B図は本発明に従
ってこの依存関係グラフを修正したものを表しており、
各辺に、その辺が「最内阻止」か否か及びその辺が[最
内敏感」か否かを述べる付加的情報を与えている。この
例では[最内阻止」型の辺しか存在せず、その辺はグラ
フ中ではr工PJと示されている。
第2A図を参照すると、従来技術に従ってレベル1のス
テートメントのベクトル化の可能性を判定するグラフが
示されている。再び、これと対比的に、本発明に従って
レベル1のステートメントのベクトル化の可能性を判定
するために使われるグラフが第2B図に示されている。
テートメントのベクトル化の可能性を判定するグラフが
示されている。再び、これと対比的に、本発明に従って
レベル1のステートメントのベクトル化の可能性を判定
するために使われるグラフが第2B図に示されている。
第2B図において、レベルlの最内敏感型の辺及びルー
プ独立な辺しか必要でない。第2A図では、すべてのス
テートメントが強く結合した領域中に存在し、これは従
来技術によればどれもベクトル化が可能であるとは判定
されない、これと対照的に、第2B図はどのステートメ
ントも、強く結合された領域中には存在しない事を示し
ている。この事は、そのステートメントの全てがレベル
1においてベクトル化可能である事を示している。
プ独立な辺しか必要でない。第2A図では、すべてのス
テートメントが強く結合した領域中に存在し、これは従
来技術によればどれもベクトル化が可能であるとは判定
されない、これと対照的に、第2B図はどのステートメ
ントも、強く結合された領域中には存在しない事を示し
ている。この事は、そのステートメントの全てがレベル
1においてベクトル化可能である事を示している。
第3A図及び第3B図を参照すると、レベル2のステー
トメントのベクトル化の可能性を判定する時に各々従来
技術及び本発明によって使用されるグラフが示されてい
る。この場合も、従来技術のグラフは全てのステートメ
ントが1強く結合した領域中にあり、従ってどれもベク
トル化可能でない事を示している。一方1本発明はレベ
ル2の全てのステートメントがベクトル化できる事を示
している。また第4A図及び第4B図を参照すると、レ
ベル3に関する同様の結果が得られる。第4A図のグラ
フには2個の強く結合した領域が存在する。一方第4B
図では1本発明によりステートメントはレベル3におい
てベクトル化可能である事が判明する。最後に、第5A
図及び第5B図を参照すると、レベル4に関するグラフ
が示されている。この場合、グラフは同一であり1両方
の方式により全てのステートメントがベクトル化可能で
ある事が示される。
トメントのベクトル化の可能性を判定する時に各々従来
技術及び本発明によって使用されるグラフが示されてい
る。この場合も、従来技術のグラフは全てのステートメ
ントが1強く結合した領域中にあり、従ってどれもベク
トル化可能でない事を示している。一方1本発明はレベ
ル2の全てのステートメントがベクトル化できる事を示
している。また第4A図及び第4B図を参照すると、レ
ベル3に関する同様の結果が得られる。第4A図のグラ
フには2個の強く結合した領域が存在する。一方第4B
図では1本発明によりステートメントはレベル3におい
てベクトル化可能である事が判明する。最後に、第5A
図及び第5B図を参照すると、レベル4に関するグラフ
が示されている。この場合、グラフは同一であり1両方
の方式により全てのステートメントがベクトル化可能で
ある事が示される。
E8.計算機による実行可能性
上記説明中では、FORTRANを例にとって説明して
きたが、本発明はPL/I、PASCAL、ALGOL
、ΔDA等の他の手続き言語にも適用できる。
きたが、本発明はPL/I、PASCAL、ALGOL
、ΔDA等の他の手続き言語にも適用できる。
F0発明の効果
本発明によれば、従来の方法ではベクトル化が不可能で
あると判定されていたステートメントをベクトル化でき
るので、IIMD計算機によるプログラムの実行効率を
改善する事ができる6
あると判定されていたステートメントをベクトル化でき
るので、IIMD計算機によるプログラムの実行効率を
改善する事ができる6
第1A図及び第1B@は、それぞれ従来技術及び本発明
による依存関係グラフを示す図、第2A図、第3A図、
第4A図及び第5A図は。 ベクトル化可能なステートメントを識別するための従来
技術による工程を示す図、 第2B図、第3B図、第4B図及び第5B図は本発明に
よる工程を示す図である。 出願人 インターナショナル・ビジネス・マシーンズ
・コーポレーション 代理人 弁理士 頓 宮 孝 −(外1名) 第1A図 第1B図 第2A図 第2B図 ′I1.3A図 第3B図 第4A図 第4B図
による依存関係グラフを示す図、第2A図、第3A図、
第4A図及び第5A図は。 ベクトル化可能なステートメントを識別するための従来
技術による工程を示す図、 第2B図、第3B図、第4B図及び第5B図は本発明に
よる工程を示す図である。 出願人 インターナショナル・ビジネス・マシーンズ
・コーポレーション 代理人 弁理士 頓 宮 孝 −(外1名) 第1A図 第1B図 第2A図 第2B図 ′I1.3A図 第3B図 第4A図 第4B図
Claims (1)
- 【特許請求の範囲】 SIMD計算機上で実行可能なオブジェクト・コードの
形にコンパイル可能なソース・コードの手続き言語ステ
ートメントの数を増加させる方法であって、 (a)上記ソース・コードのステートメントを依存関係
グラフの対応するノードに写像し、 (b)グラフの最内敏感なレベルnの辺及びループ独立
な辺を境界付けるノードにおけるステートメントであっ
て、レベルnの依存関係が最内ループとして動作するよ
うに再配置でき且つ再配置後のグラフに閉路が存在しな
いものを識別し、 (c)上記識別されたステートメントからオブジェクト
・コードを生成する ステップを含む方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US763481 | 1985-08-07 | ||
US06/763,481 US4710872A (en) | 1985-08-07 | 1985-08-07 | Method for vectorizing and executing on an SIMD machine outer loops in the presence of recurrent inner loops |
Publications (1)
Publication Number | Publication Date |
---|---|
JPS6234275A true JPS6234275A (ja) | 1987-02-14 |
Family
ID=25067943
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP61168232A Pending JPS6234275A (ja) | 1985-08-07 | 1986-07-18 | ベクトル化コンパイラ |
Country Status (4)
Country | Link |
---|---|
US (1) | US4710872A (ja) |
EP (1) | EP0214751B1 (ja) |
JP (1) | JPS6234275A (ja) |
DE (1) | DE3689915T2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011165216A (ja) * | 2004-06-24 | 2011-08-25 | Intel Corp | 複数の入力命令をベクトル化する方法及び装置 |
Families Citing this family (51)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62159274A (ja) * | 1986-01-08 | 1987-07-15 | Hitachi Ltd | 条件分岐の分割・複写によるベクトル化方式 |
JPH0795274B2 (ja) * | 1986-09-19 | 1995-10-11 | 株式会社日立製作所 | 配列添字解析方法 |
JPH0814817B2 (ja) * | 1986-10-09 | 1996-02-14 | 株式会社日立製作所 | 自動ベクトル化方法 |
JP2749039B2 (ja) * | 1987-11-06 | 1998-05-13 | 株式会社日立製作所 | オブジェクト生成方法 |
US5396627A (en) * | 1987-11-06 | 1995-03-07 | Hitachi, Ltd. | Method of producing object program based on interprocedural dataflow analysis of a source program |
CA1319757C (en) * | 1988-07-29 | 1993-06-29 | Digital Equipment Corporation | Echelon method for execution of nested loops in multiple processor computers |
US5003470A (en) * | 1988-12-09 | 1991-03-26 | International Business Machines Corporation | Method for tying and untying path access in a CPU-based, layered communications system |
DE3913011A1 (de) * | 1989-04-20 | 1990-10-25 | Siemens Ag | Verfahren zur feststellung von durch vektorbefehle eines vektorrechners ersetzbare zyklen innerhalb von befehlsschleifen von fuer von neumann rechnern geschriebenen programmen |
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 |
US5107418A (en) * | 1990-06-11 | 1992-04-21 | Supercomputer Systems Limited Partnership | Method for representing scalar data dependences for an optimizing compiler |
JPH0475139A (ja) * | 1990-07-18 | 1992-03-10 | Toshiba Corp | ループ並列化装置 |
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 |
US5586125A (en) * | 1993-02-26 | 1996-12-17 | Warner; William T. | Method for generating test vectors for characterizing and verifying the operation of integrated circuits |
JPH06314203A (ja) * | 1993-04-28 | 1994-11-08 | Fujitsu Ltd | コンパイラの最適化方法および装置 |
EP1729216A3 (en) * | 1993-07-22 | 2007-04-04 | Koninklijke Philips Electronics N.V. | A multi-media system for interactive presentation of user information and mass storage means for use with such system |
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 |
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 |
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 |
US6301706B1 (en) * | 1997-12-31 | 2001-10-09 | Elbrus International Limited | Compiler method and apparatus for elimination of redundant speculative computations from innermost loops |
CA2288614C (en) | 1999-11-08 | 2004-05-11 | Robert J. Blainey | Loop allocation for optimizing compilers |
US6708331B1 (en) * | 2000-05-03 | 2004-03-16 | Leon Schwartz | Method for automatic parallelization of software |
JP3779602B2 (ja) * | 2001-11-28 | 2006-05-31 | 松下電器産業株式会社 | Simd演算方法およびsimd演算装置 |
US20040006667A1 (en) * | 2002-06-21 | 2004-01-08 | Bik Aart J.C. | Apparatus and method for implementing adjacent, non-unit stride memory access patterns utilizing SIMD instructions |
US7386842B2 (en) * | 2004-06-07 | 2008-06-10 | International Business Machines Corporation | Efficient data reorganization to satisfy data alignment constraints |
US7478377B2 (en) | 2004-06-07 | 2009-01-13 | International Business Machines Corporation | SIMD code generation in the presence of optimized misaligned data reorganization |
US8549501B2 (en) * | 2004-06-07 | 2013-10-01 | International Business Machines Corporation | Framework for generating mixed-mode operations in loop-level simdization |
US7367026B2 (en) * | 2004-06-07 | 2008-04-29 | International Business Machines Corporation | Framework for integrated intra- and inter-loop aggregation of contiguous memory accesses for SIMD vectorization |
US7395531B2 (en) * | 2004-06-07 | 2008-07-01 | International Business Machines Corporation | Framework for efficient code generation using loop peeling for SIMD loop code with multiple misaligned statements |
US7475392B2 (en) | 2004-06-07 | 2009-01-06 | International Business Machines Corporation | SIMD code generation for loops with mixed data lengths |
US8201159B2 (en) * | 2006-08-04 | 2012-06-12 | International Business Machines Corporation | Method and apparatus for generating data parallel select operations in a pervasively data parallel system |
US8196127B2 (en) * | 2006-08-04 | 2012-06-05 | International Business Machines Corporation | Pervasively data parallel information handling system and methodology for generating data parallel select operations |
US7962906B2 (en) * | 2007-03-15 | 2011-06-14 | International Business Machines Corporation | Compiler method for employing multiple autonomous synergistic processors to simultaneously operate on longer vectors of data |
US8954484B2 (en) | 2009-06-12 | 2015-02-10 | Cray Inc. | Inclusive or bit matrix to compare multiple corresponding subfields |
US8255884B2 (en) * | 2008-06-06 | 2012-08-28 | International Business Machines Corporation | Optimized scalar promotion with load and splat SIMD instructions |
US8060857B2 (en) * | 2009-01-31 | 2011-11-15 | Ted J. Biggerstaff | Automated partitioning of a computation for parallel or other high capability architecture |
US8433883B2 (en) | 2009-06-11 | 2013-04-30 | Cray Inc. | Inclusive “OR” bit matrix compare resolution of vector update conflict masks |
US8826252B2 (en) * | 2009-06-12 | 2014-09-02 | Cray Inc. | Using vector atomic memory operation to handle data of different lengths |
US8583898B2 (en) * | 2009-06-12 | 2013-11-12 | Cray Inc. | System and method for managing processor-in-memory (PIM) operations |
US8458685B2 (en) * | 2009-06-12 | 2013-06-04 | Cray Inc. | Vector atomic memory operation vector update system and method |
US8949808B2 (en) | 2010-09-23 | 2015-02-03 | Apple Inc. | Systems and methods for compiler-based full-function vectorization |
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 |
US8640112B2 (en) | 2011-03-30 | 2014-01-28 | National Instruments Corporation | Vectorizing combinations of program operations |
EP3555790B1 (en) * | 2016-12-19 | 2023-09-20 | Sol1 BV | Method and apparatus for real-time control loop application execution from a high-level description |
CN114692600B (zh) * | 2019-02-19 | 2023-04-18 | 洛林·G·克雷默三世 | 使用子例程图谱进行形式语言处理的方法和系统 |
US11640295B2 (en) * | 2020-06-26 | 2023-05-02 | Intel Corporation | System to analyze and enhance software based on graph attention networks |
US11714615B2 (en) * | 2020-09-18 | 2023-08-01 | International Business Machines Corporation | Application migration using cost-aware code dependency graph |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4479196A (en) * | 1982-11-15 | 1984-10-23 | At&T Bell Laboratories | Hyperedge entity-relationship data base systems |
US4567574A (en) * | 1983-03-14 | 1986-01-28 | International Business Machines Corporation | Optimizing cobol object code instruction path length with respect to perform statements |
-
1985
- 1985-08-07 US US06/763,481 patent/US4710872A/en not_active Expired - Lifetime
-
1986
- 1986-07-18 JP JP61168232A patent/JPS6234275A/ja active Pending
- 1986-07-31 DE DE3689915T patent/DE3689915T2/de not_active Expired - Fee Related
- 1986-07-31 EP EP86305905A patent/EP0214751B1/en not_active Expired - Lifetime
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011165216A (ja) * | 2004-06-24 | 2011-08-25 | Intel Corp | 複数の入力命令をベクトル化する方法及び装置 |
Also Published As
Publication number | Publication date |
---|---|
EP0214751A2 (en) | 1987-03-18 |
DE3689915D1 (de) | 1994-07-21 |
EP0214751A3 (en) | 1990-03-07 |
EP0214751B1 (en) | 1994-06-15 |
US4710872A (en) | 1987-12-01 |
DE3689915T2 (de) | 1995-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPS6234275A (ja) | ベクトル化コンパイラ | |
Midkiff | Automatic parallelization: an overview of fundamental compiler techniques | |
Scarborough et al. | A vectorizing Fortran compiler | |
US8201159B2 (en) | Method and apparatus for generating data parallel select operations in a pervasively data parallel system | |
EP1145105B1 (en) | Determining destinations of a dynamic branch | |
US6002879A (en) | Method for performing common subexpression elimination on a rack-N static single assignment language | |
Allen et al. | Vector register allocation | |
US6128775A (en) | Method, system, and computer program product for performing register promotion via load and store placement optimization within an optimizing compiler | |
Kim et al. | Efficient SIMD code generation for irregular kernels | |
JP2500079B2 (ja) | プログラムの最適化方法及びコンパイラ・システム | |
JPH06507990A (ja) | コンピュータのための最適化コンパイラ | |
JPH0814817B2 (ja) | 自動ベクトル化方法 | |
US20080034356A1 (en) | Pervasively Data Parallel Information Handling System and Methodology for Generating Data Parallel Select Operations | |
US20140122832A1 (en) | Partial vectorization compilation system | |
US6029005A (en) | Method for identifying partial redundancies in a new processor architecture | |
Porpodas et al. | Look-ahead SLP: Auto-vectorization in the presence of commutative operations | |
US6016398A (en) | Method for using static single assignment to color out artificial register dependencies | |
Horváth et al. | Generic search plans for matching advanced graph patterns | |
US6031994A (en) | Method for determining the set of variables that may be ambiguously defined at a point in a computer program | |
US5999735A (en) | Method for constructing a static single assignment language accommodating complex symbolic memory references | |
Di Martino et al. | Two program comprehension tools for automatic parallelization | |
Sotoudeh et al. | ISA mapper: a compute and hardware agnostic deep learning compiler | |
EP1164477A2 (en) | A loop optimization method and a compiler | |
Pottenger | Induction variable substitution and reduction recognition in the Polaris parallelizing compiler | |
US5991540A (en) | Method for identifying partial redundancies in existing processor architectures |