JPH04332044A - コンパイラのベクトル化処理方式 - Google Patents
コンパイラのベクトル化処理方式Info
- Publication number
- JPH04332044A JPH04332044A JP13032091A JP13032091A JPH04332044A JP H04332044 A JPH04332044 A JP H04332044A JP 13032091 A JP13032091 A JP 13032091A JP 13032091 A JP13032091 A JP 13032091A JP H04332044 A JPH04332044 A JP H04332044A
- Authority
- JP
- Japan
- Prior art keywords
- loop
- increment
- vector
- array
- vectorization
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 239000013598 vector Substances 0.000 claims abstract description 42
- 238000004458 analytical method Methods 0.000 claims description 25
- 238000009825 accumulation Methods 0.000 claims description 16
- 238000003672 processing method Methods 0.000 claims description 9
- 238000004364 calculation method Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 2
- 238000000034 method Methods 0.000 description 2
- 230000007423 decrease Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004904 shortening Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【0001】
【産業上の利用分野】本発明は、ベクトル演算を実行可
能な計算機システムにおいて、目的プログラムのベクト
ル化率を高め、実行時間を短縮するための、コンパイラ
のベクトル化処理方式に関するものである。
能な計算機システムにおいて、目的プログラムのベクト
ル化率を高め、実行時間を短縮するための、コンパイラ
のベクトル化処理方式に関するものである。
【0002】
【従来の技術】ベクトル演算が実行可能な計算機システ
ムにおいては、ベクトル演算は、スカラー演算に比べて
極めて高速である。このような、ベクトル計算機の能力
を最大限に引き出すために、プログラムのうちベクトル
演算で実行される部分の割合、即ちベクトル化率を高め
ることが重要な要件となる。このため、コンパイラにお
いても可能な限りベクトル化を行うことが望ましい。
ムにおいては、ベクトル演算は、スカラー演算に比べて
極めて高速である。このような、ベクトル計算機の能力
を最大限に引き出すために、プログラムのうちベクトル
演算で実行される部分の割合、即ちベクトル化率を高め
ることが重要な要件となる。このため、コンパイラにお
いても可能な限りベクトル化を行うことが望ましい。
【0003】ところで、従来のコンパイラのベクトル化
処理方式においては、ループ中に、“A(K)=A(K
)+T”のようなコーディングが存在し、添字Kはルー
プの繰り返しごとに一定の増分値で増加/減少するもの
とする。増分値が0でない場合、当該部分は、配列Aの
各要素にループの繰り返しごとのTの値を加える演算と
なる。一方、増分値が0である場合、上記演算は、各繰
り返しにおけるTの値の総和を配列Aのただ一つの要素
A(K)に加える演算となる。当該部分は、前者の場合
ベクトル加算命令でベクトル化可能であり、後者の場合
ベクトル総和命令を用いてベクトル化することができる
。
処理方式においては、ループ中に、“A(K)=A(K
)+T”のようなコーディングが存在し、添字Kはルー
プの繰り返しごとに一定の増分値で増加/減少するもの
とする。増分値が0でない場合、当該部分は、配列Aの
各要素にループの繰り返しごとのTの値を加える演算と
なる。一方、増分値が0である場合、上記演算は、各繰
り返しにおけるTの値の総和を配列Aのただ一つの要素
A(K)に加える演算となる。当該部分は、前者の場合
ベクトル加算命令でベクトル化可能であり、後者の場合
ベクトル総和命令を用いてベクトル化することができる
。
【0004】
【発明が解決しようとする課題】ところが、このような
ベクトル化処理方式では、実際の添字の振るまいが上記
2者の何れに属するものか、コンパイル時には判断がつ
かない場合がある。このような場合、従来の技術では、
当該部分はベクトル化できなかった。
ベクトル化処理方式では、実際の添字の振るまいが上記
2者の何れに属するものか、コンパイル時には判断がつ
かない場合がある。このような場合、従来の技術では、
当該部分はベクトル化できなかった。
【0005】そこで、本発明の目的は、添字式の増分が
不明な上記のようなパターンの配列参照に対して、総和
/累積等のベクトル命令を用いたベクトルコードと、総
和/累積以外のベクトル命令を用いたベクトルコードの
両方を作成しておき、実行時に、増分の値により実行可
能なコードを選択して、目的プログラムのベクトル化率
を上げることのできるコンパイラのベクトル化処理方式
を得ることである。
不明な上記のようなパターンの配列参照に対して、総和
/累積等のベクトル命令を用いたベクトルコードと、総
和/累積以外のベクトル命令を用いたベクトルコードの
両方を作成しておき、実行時に、増分の値により実行可
能なコードを選択して、目的プログラムのベクトル化率
を上げることのできるコンパイラのベクトル化処理方式
を得ることである。
【0006】
【課題を解決するための手段】上記の目的を達成するた
め、本発明におけるコンパイラのベクトル化処理方式は
、ベクトル演算機能を有する電子計算機のために、高級
言語で書かれた原始プログラムを入力とし、ベクトル化
された目的プログラムを出力するコンパイラにおいて、
原始プログラムの構文解析を行って中間テキストを生成
する構文解析部と、中間テキスト中にループを検出して
ベクトル化するベクトル化部と、中間テキストから目的
プログラムを生成する目的プログラム生成部とを備え、
さらに上記ベクトル化部は、ループ中において、増分が
コンパイル時には不明である線形添字をもつ配列要素参
照を検出する増分値解析部と、上記配列参照の、ループ
中における出現状況を解析し、上記増分が0のときには
、当該配列参照が総和/累積型演算となり、上記増分が
0でないときには要素ごとに計算を行う通常の演算とな
ることを検出する参照パターン解析部と、当該ループを
2種類のループ、即ち、当該配列を総和/累積型ベクト
ル命令を用いてベクトル化するループ、及び当該配列を
総和/累積以外のベクトル命令を用いてベクトル化する
ループとに分割するループ分割部と、上記増分の値を実
行時に検査し、上記増分が0のときには総和/累積型ベ
クトル命令を用いてベクトル化されたループが実行され
、上記増分が0でないときには上記通常のベクトル命令
を用いてベクトル化されたループが実行されるための条
件分岐を生成する条件分岐生成部とを備えており、ルー
プ中に、増分がコンパイル時には不明である線形添字を
もつ配列参照があるときに当該ループをベクトル化すこ
とを特徴とする。
め、本発明におけるコンパイラのベクトル化処理方式は
、ベクトル演算機能を有する電子計算機のために、高級
言語で書かれた原始プログラムを入力とし、ベクトル化
された目的プログラムを出力するコンパイラにおいて、
原始プログラムの構文解析を行って中間テキストを生成
する構文解析部と、中間テキスト中にループを検出して
ベクトル化するベクトル化部と、中間テキストから目的
プログラムを生成する目的プログラム生成部とを備え、
さらに上記ベクトル化部は、ループ中において、増分が
コンパイル時には不明である線形添字をもつ配列要素参
照を検出する増分値解析部と、上記配列参照の、ループ
中における出現状況を解析し、上記増分が0のときには
、当該配列参照が総和/累積型演算となり、上記増分が
0でないときには要素ごとに計算を行う通常の演算とな
ることを検出する参照パターン解析部と、当該ループを
2種類のループ、即ち、当該配列を総和/累積型ベクト
ル命令を用いてベクトル化するループ、及び当該配列を
総和/累積以外のベクトル命令を用いてベクトル化する
ループとに分割するループ分割部と、上記増分の値を実
行時に検査し、上記増分が0のときには総和/累積型ベ
クトル命令を用いてベクトル化されたループが実行され
、上記増分が0でないときには上記通常のベクトル命令
を用いてベクトル化されたループが実行されるための条
件分岐を生成する条件分岐生成部とを備えており、ルー
プ中に、増分がコンパイル時には不明である線形添字を
もつ配列参照があるときに当該ループをベクトル化すこ
とを特徴とする。
【0007】
【作用】コンパイラ1のベクトル化部4は、増分値解析
部6及び参照パターン解析部7により、ループ中に存在
するある配列要素名の参照の増分値が不明であり、増分
値が0ならば総和/累積型の演算となり、0でなければ
通常の演算となることを検出する。次に、ループ分割部
8でループを二つに分け、それぞれのループをベクトル
総和(累積)命令やその他のベクトル命令で各々ベクト
ル化する。更に、条件分岐生成部9で実行時に、上記二
つのループのうち適するループが実行されるための条件
分岐を生成する。
部6及び参照パターン解析部7により、ループ中に存在
するある配列要素名の参照の増分値が不明であり、増分
値が0ならば総和/累積型の演算となり、0でなければ
通常の演算となることを検出する。次に、ループ分割部
8でループを二つに分け、それぞれのループをベクトル
総和(累積)命令やその他のベクトル命令で各々ベクト
ル化する。更に、条件分岐生成部9で実行時に、上記二
つのループのうち適するループが実行されるための条件
分岐を生成する。
【0008】
【実施例】以下、本発明の一実施例を図面を参照して説
明する。
明する。
【0009】図1は、本発明のコンパイラのベクトル化
処理方式の構成を示すブロック図である。図中、1はコ
ンパイラ、2はコンパイラの制御部、3は構文解析部、
4はベクトル化部、5は目的プログラム生成部、6は増
分値解析部、7は参照パターン解析部、8はループ分割
部、9は条件分岐生成部、10は原始プログラム、11
は目的プログラムである。
処理方式の構成を示すブロック図である。図中、1はコ
ンパイラ、2はコンパイラの制御部、3は構文解析部、
4はベクトル化部、5は目的プログラム生成部、6は増
分値解析部、7は参照パターン解析部、8はループ分割
部、9は条件分岐生成部、10は原始プログラム、11
は目的プログラムである。
【0010】このうち、構文解析部3は、原始プログラ
ム10の構文解析を行って中間テキストを生成し、ベク
トル化部4は、中間テキスト中にループを検出してベク
トル化する。ただし、ベクトル化部4は、中間テキスト
をベクトル化する過程において増分値解析部6、参照パ
ターン解析部7、ループ分割部8、条件分岐生成部9を
用いる。
ム10の構文解析を行って中間テキストを生成し、ベク
トル化部4は、中間テキスト中にループを検出してベク
トル化する。ただし、ベクトル化部4は、中間テキスト
をベクトル化する過程において増分値解析部6、参照パ
ターン解析部7、ループ分割部8、条件分岐生成部9を
用いる。
【0011】増分値解析部6は、ループ中において、増
分がコンパイル時には、不明である線形添字をもつ配列
要素参照を検出する。参照パターン解析部7は、配列要
素参照のループ中における出現状況を解析し、増分が0
のときには当該配列要素参照が総和/累積型演算となり
、増分が0でないときには要素ごとに計算を行う通常の
演算となることを検出する。ループ分割部8は、ループ
を2種類のループ、即ち、配列を総和/累積型ベクトル
命令を用いてベクトル化するループと配列を総和/累積
以外のベクトル命令を用いてベクトル化するループとに
分割する。条件分岐生成部9は、増分の値を実行時に検
査し、増分が0のときには、総和/累積型ベクトル命令
を用いてベクトル化されたループが実行され、増分が0
でないときには、通常のベクトル命令を用いてベクトル
化されたループが実行されるための条件分岐を生成する
。目的プログラム生成部5は、中間テキストから目的プ
ログラムを生成する。
分がコンパイル時には、不明である線形添字をもつ配列
要素参照を検出する。参照パターン解析部7は、配列要
素参照のループ中における出現状況を解析し、増分が0
のときには当該配列要素参照が総和/累積型演算となり
、増分が0でないときには要素ごとに計算を行う通常の
演算となることを検出する。ループ分割部8は、ループ
を2種類のループ、即ち、配列を総和/累積型ベクトル
命令を用いてベクトル化するループと配列を総和/累積
以外のベクトル命令を用いてベクトル化するループとに
分割する。条件分岐生成部9は、増分の値を実行時に検
査し、増分が0のときには、総和/累積型ベクトル命令
を用いてベクトル化されたループが実行され、増分が0
でないときには、通常のベクトル命令を用いてベクトル
化されたループが実行されるための条件分岐を生成する
。目的プログラム生成部5は、中間テキストから目的プ
ログラムを生成する。
【0012】一例として、ソースプログラム中に次のよ
うなループが存在していた場合を想定する。
うなループが存在していた場合を想定する。
【0013】K=1
DO 10I=1,N
A(K)=A(K)+I
10K=K+KD
構文解析部3は、次のような中間テキストを生成する。
【0014】K=1
dc I=1,N
A(K)=A(K)+I
K=K+KD
end do
ベクトル化部4は、上記の中間テキストの列をループと
して認識し、以下のようにベクトル化する。まず、増分
値解析部6で、配列Aの添字Kの増分値KDの値が不明
であることを検出する。
して認識し、以下のようにベクトル化する。まず、増分
値解析部6で、配列Aの添字Kの増分値KDの値が不明
であることを検出する。
【0015】次に、参照パターン解析部7で、配列要素
参照の出現パターンに関して、次に述べる事実を検出す
る。この事実とは、KDの値が0ならば、配列要素参照
は、 A(1)=A(1)+1→A(1)=A(1)+2→A
(1)=A(1)+3→・・・→A(1)=A(1)+
N のように、数列{1,2,3,・・・N}の和を求めて
配列要素A(1)に代入する総和型の演算となり、一方
、KDの値が0でなければ、配列要素参照は、A(1)
=A(1)+1→A(1+ID)=A(1+ID)+2
→A(1+2*ID)=A(1+2*ID)+3→・・
・→A(1+(N−1)*ID)=A(1+(N−1)
*ID)+N のように、Aの各要素ごとに計算を行う通常の演算とな
るということである。
参照の出現パターンに関して、次に述べる事実を検出す
る。この事実とは、KDの値が0ならば、配列要素参照
は、 A(1)=A(1)+1→A(1)=A(1)+2→A
(1)=A(1)+3→・・・→A(1)=A(1)+
N のように、数列{1,2,3,・・・N}の和を求めて
配列要素A(1)に代入する総和型の演算となり、一方
、KDの値が0でなければ、配列要素参照は、A(1)
=A(1)+1→A(1+ID)=A(1+ID)+2
→A(1+2*ID)=A(1+2*ID)+3→・・
・→A(1+(N−1)*ID)=A(1+(N−1)
*ID)+N のように、Aの各要素ごとに計算を行う通常の演算とな
るということである。
【0016】次に、ベクトル化部4は、ループ分割8で
ループを二つのループに分割し、それぞれベクトル総和
命令、ベクトル加算命令を用いてベクトル化する。
ループを二つのループに分割し、それぞれベクトル総和
命令、ベクトル加算命令を用いてベクトル化する。
【0017】最期に、ベクトル化部4は、条件分岐生成
部9により、KDの値が0であるときには、ベクトル総
和命令を用いてベクトル化されたループが実行され、K
Dの値が0でないときには、ベクトル加算命令を用いて
ベクトル化されたループが実行されるように条件分岐文
などを生成する。
部9により、KDの値が0であるときには、ベクトル総
和命令を用いてベクトル化されたループが実行され、K
Dの値が0でないときには、ベクトル加算命令を用いて
ベクトル化されたループが実行されるように条件分岐文
などを生成する。
【0018】上記一連の処理によりベクトル化部4が生
成する中間テキストは、次のようになる。
成する中間テキストは、次のようになる。
【0019】
【数1】
上記テキスト中、ベクトル命令に相当するテキストは、
(V)印で示してある。目的プログラム生成部5は、上
記中間テキストからベクトル化された目的プログラムを
生成する。
(V)印で示してある。目的プログラム生成部5は、上
記中間テキストからベクトル化された目的プログラムを
生成する。
【0020】
【発明の効果】以上説明したように、本発明のベクトル
化処理方式によれば、添字式の増分が不明なパターンの
配列参照に対して、総和/累積等のベクトル命令を用い
たベクトルコードと、総和/累積以外のベクトル命令を
用いたベクトルコードの両方を作成しておき、実行時に
、増分の値により実行可能なコードを選択して実行する
ことで、従来のコンパイラではベクトル化されなかった
ループがベクトル化されるので、目的プログラムの実行
時間を短縮することのできるコンパイラのベクトル化処
理方式を得ることができる。
化処理方式によれば、添字式の増分が不明なパターンの
配列参照に対して、総和/累積等のベクトル命令を用い
たベクトルコードと、総和/累積以外のベクトル命令を
用いたベクトルコードの両方を作成しておき、実行時に
、増分の値により実行可能なコードを選択して実行する
ことで、従来のコンパイラではベクトル化されなかった
ループがベクトル化されるので、目的プログラムの実行
時間を短縮することのできるコンパイラのベクトル化処
理方式を得ることができる。
【図1】本発明の一実施の概略構成を示すブロック図。
1…コンパイラ、2…コンパイラの制御部、3…構文解
析部、4…ベクトル化部、5…目的プログラム生成部、
6…増分値解析部、7…参照パターン解析部、8…ルー
プ分割部、9…条件分岐生成部、10…原子プログラム
、11…目的プログラム。
析部、4…ベクトル化部、5…目的プログラム生成部、
6…増分値解析部、7…参照パターン解析部、8…ルー
プ分割部、9…条件分岐生成部、10…原子プログラム
、11…目的プログラム。
Claims (1)
- 【請求項1】 ベクトル演算機能を有する電子計算機
のために、高級言語で書かれた原始プログラムを入力と
し、ベクトル化された目的プログラムを出力するコンパ
イラにおいて、前記原始プログラムの構文解析を行って
中間テキストを生成する構文解析部と、前記中間テキス
ト中にループを検出してベクトル化するベクトル化部と
、前記中間テキストから前記目的プログラムを生成する
目的プログラム生成部とを備え、前記ベクトル化部は、
ループ中において、増分がコンパイル時には不明である
線形添字をもつ配列要素参照を検出する増分値解析部と
、前記配列要素参照の、前記ループ中における出現状況
を解析し、前記増分が0の場合には、前記配列要素参照
が総和/累積型演算となり、前記増分が0でないときに
は要素ごとに計算を行う通常の演算となることを検出す
る参照パターン解析部と、当該ループを、当該配列を総
和/累積型ベクトル命令を用いてベクトル化するループ
、及び当該配列を総和/累積以外のベクトル命令を用い
てベクトル化するループとに分割するループ分割部と、
前記増分の値を実行時に検査し、前記増分が0の場合に
は総和/累積型ベクトル命令を用いてベクトル化された
ループが実行され、前記増分が0でない場合には前記通
常のベクトル命令を用いてベクトル化されたループが実
行されるための条件分岐を生成する条件分岐生成部とを
備え、前記ループ中に、増分がコンパイル時には不明で
ある線形添字をもつ配列参照がある場合に当該ループを
ベクトル化することを特徴とするコンパイラのベクトル
化処理方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3130320A JP2701246B2 (ja) | 1991-05-07 | 1991-05-07 | コンパイラのベクトル化処理方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3130320A JP2701246B2 (ja) | 1991-05-07 | 1991-05-07 | コンパイラのベクトル化処理方式 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH04332044A true JPH04332044A (ja) | 1992-11-19 |
| JP2701246B2 JP2701246B2 (ja) | 1998-01-21 |
Family
ID=15031516
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP3130320A Expired - Fee Related JP2701246B2 (ja) | 1991-05-07 | 1991-05-07 | コンパイラのベクトル化処理方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2701246B2 (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2009211458A (ja) * | 2008-03-05 | 2009-09-17 | Nec Corp | コンパイラ、変数最適化装置、方法、及び、プログラム |
Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS6418876A (en) * | 1987-07-14 | 1989-01-23 | Nec Corp | Production system for vector instruction column |
-
1991
- 1991-05-07 JP JP3130320A patent/JP2701246B2/ja not_active Expired - Fee Related
Patent Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPS6418876A (en) * | 1987-07-14 | 1989-01-23 | Nec Corp | Production system for vector instruction column |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2009211458A (ja) * | 2008-03-05 | 2009-09-17 | Nec Corp | コンパイラ、変数最適化装置、方法、及び、プログラム |
Also Published As
| Publication number | Publication date |
|---|---|
| JP2701246B2 (ja) | 1998-01-21 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| Zhang et al. | Using hammock graphs to structure programs | |
| JP2921190B2 (ja) | 並列実行方式 | |
| JPH0814817B2 (ja) | 自動ベクトル化方法 | |
| US5067068A (en) | Method for converting an iterative loop of a source program into parellelly executable object program portions | |
| US5522074A (en) | Vectorization system for vectorizing loop containing condition induction variables | |
| Norris et al. | Generating empirically optimized composed matrix kernels from MATLAB prototypes | |
| US20170206068A1 (en) | Program optimization based on directives for intermediate code | |
| CN118092931A (zh) | 基于指导语句的函数向量化方法及系统 | |
| JP2701246B2 (ja) | コンパイラのベクトル化処理方式 | |
| Jiang et al. | Boosting the performance of multimedia applications using SIMD instructions | |
| JPH0795272B2 (ja) | コンパイル方法 | |
| JPH0440742B2 (ja) | ||
| JP3034582B2 (ja) | コンパイル処理方式 | |
| JP2001175617A (ja) | コンパイラ並列化方法 | |
| JP2853604B2 (ja) | 無限ループのベクトル化処理方式 | |
| JPH04184540A (ja) | 並列化コンパイル方式 | |
| JPH04135244A (ja) | コンパイル処理方式 | |
| JPH0269867A (ja) | ベクトル化方式 | |
| JP2000222369A (ja) | 並列/ベクトル化方法およびその手順が記録された記録媒体 | |
| JPH04152464A (ja) | コンパイル処理方式 | |
| Kwiatkowski et al. | Automatic program parallelization for multicore processors | |
| Matos et al. | Data Flow Analysis applied to optimize generic workflow problems | |
| Koseki et al. | A global code scheduling technique using guarded PDG | |
| Komatsu et al. | Performance Evaluation of Compiler-Assisted OpenMP Codes on Various HPC Systems | |
| JPH10326193A (ja) | インライン展開関数の最適化のためのコンパイル方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20071003 Year of fee payment: 10 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081003 Year of fee payment: 11 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091003 Year of fee payment: 12 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091003 Year of fee payment: 12 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101003 Year of fee payment: 13 |
|
| LAPS | Cancellation because of no payment of annual fees |