JPH0241562A - ベクトル演算列分割処理方式 - Google Patents

ベクトル演算列分割処理方式

Info

Publication number
JPH0241562A
JPH0241562A JP19228888A JP19228888A JPH0241562A JP H0241562 A JPH0241562 A JP H0241562A JP 19228888 A JP19228888 A JP 19228888A JP 19228888 A JP19228888 A JP 19228888A JP H0241562 A JPH0241562 A JP H0241562A
Authority
JP
Japan
Prior art keywords
vector
processing
loop
length
operation sequence
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
Application number
JP19228888A
Other languages
English (en)
Inventor
Masaki Aoki
正樹 青木
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP19228888A priority Critical patent/JPH0241562A/ja
Publication of JPH0241562A publication Critical patent/JPH0241562A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Complex Calculations (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔概要〕 ベクトルプロセッサで実行するプログラムの最適化処理
機能を持つコンパイラにおけるベクトル演算列分割処理
方式に関し。
ベクトルプロセッサにおける各パイプラインの使用密度
を高め、演算実行の効率がよいオブジェクトプログラム
を生成する手段を提供することを目的とし。
ベクトル化されたベクトル演算列の演算の種類数および
ベクトル長に基づく所定の条件により。
ベクトル演算列に関する分割処理を行うか否かを判定す
るベクトル演算列分割条件判定部と、所定の分割条件が
満たされたベクトル演算列について。
異なるベクトルレジスタの組を用いて、多重に展開する
ベクトル演算列分割部とを備え、処理構造制御用のベク
トル長に応じて必要となるループについて、外部ループ
の有無に関係なく、ループアンローリングを行うように
構成゛する。
〔産業上の利用分野〕
本発明は、ベクトルプロセッサで実行するプログラムの
最適化処理機能を持つコンパイラにおけるベクトル演算
列分割処理方式に関する。
例えば、FORTRAN言語TR上り作成されたプログ
ラムを、ベクトルプロセッサを用いて実行させるために
、自動的にベクトル演算列を生成するコンパイラが用い
られている。このコンパイラが生成するオブジェクトプ
ログラムについてベクトル化率を上げるとともに、ベク
トルプロセッサにおけるパイプラインによる演算実行の
密度を高め、ベクトルプロセッサの資源を最大限存効に
使用できるようにする技術が必要とされている。
〔従来の技術〕
FORTRAN言語TR上り作成されたプログラムのD
Oループを、ループアンローリングすることによって、
実行性能の向上を狙う最適化/チューニングの技術が、
従来から用いられている。
ループアンローリングは、同じ命令列が何回か繰り返し
実行される場合に、その繰り返し対象となる命令列を多
重に展開することにより、ループ回数を削減し、実行の
高速化を図る処理である。
例えば、オリジナルのソースプログラムが、以下のとお
りであったとする。
Do 10 J、1.N Do 10 I=1.VL 10  A(1,J)・B (1、J) +C(1、J
)このプログラムについて1通常のスカラ計算機での実
行性能を向上させるために、ループアンローリングをし
た結果は1次のような内容となる。
Do 10 、r=t、N Do 101=1.VL、2 A (1、J) =8 (1、J) +C(T 、 J
)10  A(1+1.J)=B(I+1.J)+C(
1+1.J)このループアンローリングでは、配列Bと
配列Cのデータとを加算し配列Aに設定する処理を二重
化することにより、ループ回数を半減させている。
このループアンローリングを、ベクトルプロセッサで実
行するプログラムに適用した場合、ループ回数が半分に
なるので、ベクトル長が半減し。
また、距離付きのメモリアクセスとなって、かえって実
行速度が低下することがある。
そこで、ベクトルプロセッサで実行するプログラム用に
は、その最適化のために、従来、ループが多重化されて
いる場合に、外側ループ中のデータ依存関係を解析し、
その結果に従って、外側ループの回転数を1/Nとし、
ベクトル化後のベクトル演算列をN倍に展開するループ
アンローリングが用いられている(参照:特開昭62−
169272号公報等)。
前述のソースプログラムを、ベクトルプロセッサによる
実行用にループアンローリングした結果は、以下のとお
りである。
Do 10 J=LN+2 A(率、J)=8(*、J)+C(*、J)10   
 A(*、J+1)=8(*、J+1)+C(本、J+
1)ここで、*は、1からVLまでの値をとるベクトル
を示している。
〔発明が解決しようとする課題〕
以上のような従来のベクトル演算列ループアンローリン
グ処理方式の場合には、ベクトル演算列の外側にループ
が構えていなければ、適用することができないという問
題がある。すなわち、ループが多重化されていない場合
を含めて、もっとも内側のループに対してのみ、ループ
アンローリングを行うことはできず、無理してループア
ンローリングを行うと、ベクトルプロセッサ用では、か
えって実行速度が低下することがあるという問題がある
本発明は上記問題点の解決を図り、構造を制御するため
のベクトル長に応じて必要となるベクトル処理のループ
に着目して、ソースプログラムではループが多重化され
ていない場合でも、ループアンローリングを行い、ベク
トルプロセッサにおける各パイプラインの使用密度を高
め、演算実行の効率がよいオブジェクトプログラムを生
成できるようにすることを目的としている。
〔課題を解決するための手段〕
第1図は本発明の構成例を示す。
第1図において、10は計算機用の高級言語により記述
されたソースプログラム、11はCPUおよびメモリ等
からなる処理装置、12はソースプログラム10を計算
機が実行可能な機械語に翻訳するコンパイラ、13はソ
ースプログラム10を入力し解析するプログラム入力部
、14は中間テキストについてベクトル化を行うベクト
ル化処理部、15は実行性能を上げるための最適化を行
う最適化処理部、16はベクトル演算列分割条件判定部
、17はベクトル演算列分割部、18は最適化に応じて
ベクトル長を決定するベクトル長決定部、19はオブジ
ェクト生成部、20はソースプログラム10に対応する
機械語コード列からなるオブジェクトプログラムを表す
プログラム入力部13は、ソースプログラム10から処
理すべきソースステートメントを入力する。この人力プ
ログラムを解析することにより。
中間テキストを生成する。コンパイラ12は、自動ベク
トル化機能を備えており、ベクトル化処理部14によっ
て、中間テキストを解読し、ヘクトル化可能なものを検
出して、ベクトル演算列を生成する。
ベクトル演算列分割条件判定部16は、ベクトル化され
たベクトル演算列の演算の種類、数およびベクトル長に
基づく所定の条件により、ベクトル演算列に関する分割
処理を行うか否かを判定する処理を行うものである。ベ
クトル演算列に関する分割処理を行う場合、ベクトル演
算列分割部17を起動する。分割処理を行わない場合、
ベクトル演算列分割部17による処理を省略し、従来と
同様なオブジェクト展開が行われるように処理する。
ベクトル演算列分割部17は、所定の分割条件が満たさ
れたベクトル演算列について、異なるベクトルレジスタ
の組を用いて、多重に展開する処理を行うものである。
この展開にあたって、処理構造制御用のベクトル長に応
じて必要となるループに着目し、外部ループの有無に関
係なく、ループアンローリングを行う。
ベクトル長決定部1日は、ベクトル演算列のベクトル長
を決定する。最適化処理部15においてループアンロー
リングされた中間テキストは、必要に応して、さらに他
の手段により最適化される。
オブジェクト生成部19は、最終的にオブジェクトプロ
グラム20を生成し、指定された記憶媒体に出力する。
〔作用〕 ベクトル化されたベクトル演算列のベクトルの長さが、
使用可能なベクトルレジスタ数などにより決定したベク
トル長よりも十分に長いと予想される場合に、構造を制
御するために設定したベクトル長でもって、ベクトル処
理を操り返す必要がある。そこで1本発明では、その部
分について分割処理によるループアンローリングの対象
とする。
ベクトル演算列分割条件判定部16による判定の条件値
は、厳密には、実行マシンの演算パイプラインの特性に
よって異なる0例えば、以下の場合には1分割処理によ
って、実行速度が低下するおそれがあるので3分割処理
を行わずに、従来と同様な通常処理とする。
[ベクトル長に関する分割不可条件] ベクトル演算列のベクトル長が短い。
[演算列に関する分割不可条件] 演算の数が多い(例えば20以上のとき)。
演算の種顕が、ロード・ストアのみである。
このような条件をクリアしたベクトル演算列について、
ベクトル演算列分割部17により、所定のベクトル長以
上のベクトル演算列を分割して。
多重に展開する。これによって、実行時にパイプライン
の演算密度が高まり、高速な実行が可能になる。
〔実施例〕
第2図は本発明の一実施例処理フロー、第3図および第
4図は本発明による展開例を示す。
本発明に関連する部分のコンパイラの処理は例えば第2
図に示すようになる。以下の説明における■〜■は、第
2図に示す処理■〜■に対応する。
■ コンパイル対象プログラム中のループまたは配列の
ベクトル記述により、中間テキストがベクトル化されて
いる場合に、1回設定したベクトル長が存効となる制御
範囲の中で、使用可能なベクトルレジスタの数を調べ、
それから構造を制御するためのベクトル長を仮定する。
■ 最適化対象となっているベクトル演算列のベクトル
長が、所定の条件値より短いかどうかを判定する。短い
場合、処理0へ移る。
■ ベクトル演算列における演算の数が多いかどうかを
判定する。演算の数が多い場合、処理■へ移る。
■ ベクトル演算列における演算の種類が、ロードおよ
びストアのみであるかどうかを判定する。
ロード・ストアのみである場合には、処理◎へ移る。
■ ソースプログラム中のループ回数またはベクトル記
述の長さを、処理■で仮定したベクトル長で割った余り
の部分について、そのベクトル演算を行うベクトル命令
のテキストを生成する。
■ ソースプログラム中のループ回数またはベクトル記
述の長さを、処理■で仮定したベクトル長で割った商を
、ベクトル処理回数とする。
■ 何重に展開するかの分割数を決定する。この分割数
は、固定とするのではなく、ベクトル演算列と各マシン
のパイプライン特性とにより決定するのが望ましい。
■ ベクトル処理回数を分割数で割った余りの部分につ
いて、そのベクトル演算を行うベクトル命令のテキスト
を生成する。
■ ベクトル演算列を分割数に応じて多重に展開したテ
キストを生成する。実行時には、この部分の実行が、パ
イプラインの効率的な使用により、高速化することにな
る。
[相] 展開結果に従って、ベクトル長を決定する。
ここで、前に仮定したベクトル長による展開がうまくい
かない場合には、再度、ベクトル長を仮定しなおすとか
1通常処理による展開に移行するとかしてもよい。
■ 処理■、■、■により5分割不可条件のいずれかに
該当し1分割処理を行わないと判定された場合、従来と
同様な通常のベクトル演算列によるテキストとし1本発
明に係るループアンローリングによる最適化を行わない
次に、第3図および第4図に従って、FORTRANプ
ログラムについて1本発明を通用した具体例を説明する
この例で用いているベクトル命令の記述は、それぞれ次
の意味を持つ。
・VLVL (ベクトル長設定命令) ベクトルレジスタで扱うベクトルの長さを設定する。
・VL(ベクトルロード命令) ベクトルデータを、第2オペランドで指定されたメモリ
から、第1オペランドで指定されたベクトルレジスタに
ロードする。
・VA(ベクトル加算命令) 第2オペランドと第3オペランドのベクトルレジスタ中
のデータを加算し、第1オペランドで指定されたベクト
ルレジスタに設定する。
・VST (ベクトルストア命令) 第2オペランドで指定されたベクトルレジスタ中のデー
タを、第1オペランドで指定されたメモリにストアする
なお、他の記述については、FORTRAN等の記述に
準じているので、説明を省略する。
第3図(イ)に示すソースプログラム10を展開すると
する。ベクトル長は512と仮定し、このプログラム中
におけるループ回数Nは、512で割り切れないものと
する。
分割処理の判定条件が満たされない場合の通常処理によ
る展開結果は、第3図に示す(ロ)または(ハ)のよう
になる、この展開は、従来から行われていた展開で、特
に、 (ロ)はベクトル長制御ループ方式、 (ハ)は
MOD方式と呼ばれている。通常処理の場合、ベクトル
長制御のための処理構造は、この2つのいずれかが選択
される。
第3図(ロ)では、ループ回数Nをベクトル長の512
で割り、それに1を加えたものをベクトル処理回数とし
、1回目の処理では、Nを512で割った剰余部分の演
算を行い、2回目以降ではベクトル長を512として、
演算を行っている。
なお、変数■Sはメモリ上の配列に対するインデックス
として用いられている。
第3図(ハ)では、ループ回数Nを512で割った剰余
のベクトル長により、まず演算を行い。
そこで演算が終了した場合には3図示省略した99のラ
ベル位置(最終行の次の位置)へ分岐する。
そして、演算が未終了の部分について、ベクトル長を5
12としたベクトル処理を繰り返す。
分割処理の判定条件が満たされている場合には。
第3図(ニ)に示すように2本発明に係る分割処理によ
る展開が行われる。ここでは、Nが変数であり、ベクト
ル長を512と仮定している。
第3図(ニ)における最初のCa+の部分では、第3図
(ハ)に示したMOD方式の場合と同様に。
ループ回数Nを512で割った剰余のベクトル長により
、まず演算を行っている。(′b1. fclでは1分
割数を2とし、まず、ループ回数Nを512で割った商
りが、奇数である場合に、ループアンローリング対象の
ベクトル処理を偶数回にするために。
1回分の演算を実行するテキストを、(b)のように生
成する。
そして、(G)に示すように、ループ処理回数りを2分
の1にし、ベクトルレジスタVRI〜VR3と、ベクト
ルレジスタVR4〜VR6の異なる組を用いて、ベクト
ル演算列を2重に展開する。この部分の実行が速くなる
ことになる。
ループ回数Nが定数である場合には、NやLに関する判
定処理等を省略した展開を行うことは言うまでもない。
第4図(イ)に示すソースプログラム10に対する展開
は1次のように行われる。
このソースプログラム10中における内部ループのルー
プ回数VLが、1224であるとする。
このソースプログラムlOについてのベクトル化後のソ
ースイメージは、第4図(ロ)図示のようになる。ここ
で、*は、配列の1:VL(1からVLまで)がベクト
ルであることを示す。
分割処理を行わない従来方式によるベクトル演算列の展
開は、第4図(ハ)に示すようになる。
構造を制御するためのベクトル長は512と仮定してい
る。ループ回数VLが1224であるので。
これを512で割った余りのLlは200となり。
最初に1 : 200のベクトルデータについての処理
を行っている0次にベクトル長を512にした処理を2
回繰り返している。
本発明に係る分割処理によるループアンローリングを行
った結果は、第4図(ニ)に示すようになる。第4図(
ハ)では、ベクトル長を512にしたベクトル演算の処
理を2回繰り返しているがその部分が、第4図(ニ)で
は、ベクトルレジスタVRI〜VR3の他に、ベクトル
レジスタVR4〜VR6を用いることにより、2重に展
開され。
それによって、内部ループが解消されている。
〔発明の効果〕
以上説明したように1本発明によれば、ベクトル演算列
の分割処理を、外部ループのを無に関係なく行うので、
これによって生成されたプログラムを、ベクトルプロセ
フすで実行させると、各パイプラインの使用密度が高ま
り、効率のよい演算実行が可能となる。
【図面の簡単な説明】
第1図は本発明の構成例。 第2図は本発明の一実施例処理フロー 第3図および第4図は本発明による展開例を示す。 図中、10はソースプログラム、11は処理装置、12
はコンパイラ、13はプログラム入力部。 14はベクトル化処理部、15は最適化処理部。 16はベクトル演算列分割条件判定部、17はべクトル
演算列分割部、18はベクトル長決定部。 19はオブジェクト生成部、20はオブジェクトプログ
ラムを表す。

Claims (1)

  1. 【特許請求の範囲】 命令列のループまたは配列のベクトル記述を持つソース
    プログラムについてベクトル化を行い、ベクトル演算列
    を含むオブジェクトプログラムを生成するコンパイル処
    理機能を有するデータ処理システムにおいて、 ベクトル化されたベクトル演算列の演算の種類、数およ
    びベクトル長に基づく所定の条件により、ベクトル演算
    列に関する分割処理を行うか否かを判定するベクトル演
    算列分割条件判定部(16)と、所定の分割条件が満た
    されたベクトル演算列について、異なるベクトルレジス
    タの組を用いて、多重に展開するベクトル演算列分割部
    (17)とを備え、 処理構造制御用のベクトル長に応じて必要となるループ
    について、外部ループの有無に関係なく、ループアンロ
    ーリングを行うようにしたことを特徴とするベクトル演
    算列分割処理方式。
JP19228888A 1988-08-01 1988-08-01 ベクトル演算列分割処理方式 Pending JPH0241562A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP19228888A JPH0241562A (ja) 1988-08-01 1988-08-01 ベクトル演算列分割処理方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP19228888A JPH0241562A (ja) 1988-08-01 1988-08-01 ベクトル演算列分割処理方式

Publications (1)

Publication Number Publication Date
JPH0241562A true JPH0241562A (ja) 1990-02-09

Family

ID=16288787

Family Applications (1)

Application Number Title Priority Date Filing Date
JP19228888A Pending JPH0241562A (ja) 1988-08-01 1988-08-01 ベクトル演算列分割処理方式

Country Status (1)

Country Link
JP (1) JPH0241562A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006114069A (ja) * 2006-01-20 2006-04-27 Matsushita Electric Ind Co Ltd コンパイラ装置
US7698696B2 (en) 2002-07-03 2010-04-13 Panasonic Corporation Compiler apparatus with flexible optimization
JP2011154523A (ja) * 2010-01-27 2011-08-11 Nec Corp コンパイル方法、コンパイラおよびベクトル計算機

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7698696B2 (en) 2002-07-03 2010-04-13 Panasonic Corporation Compiler apparatus with flexible optimization
US8418157B2 (en) 2002-07-03 2013-04-09 Panasonic Corporation Compiler apparatus with flexible optimization
JP2006114069A (ja) * 2006-01-20 2006-04-27 Matsushita Electric Ind Co Ltd コンパイラ装置
JP2011154523A (ja) * 2010-01-27 2011-08-11 Nec Corp コンパイル方法、コンパイラおよびベクトル計算機

Similar Documents

Publication Publication Date Title
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
US5710902A (en) Instruction dependency chain indentifier
JP4077252B2 (ja) コンパイラプログラムおよびコンパイル処理方法
JP2002333978A (ja) Vliw型プロセッサ
JPH05143332A (ja) 命令スケジユーラを備えたコンピユータ・システム及び入力命令シーケンスを再スケジユールする方法
US6061367A (en) Processor with pipelining structure and method for high-speed calculation with pipelining processors
KR20180126520A (ko) 벡터 술어 명령
KR20130064794A (ko) 반도체 칩 상에서 구현되는 벡터 논리 감소 연산
JP3573506B2 (ja) 述語、及びブール式を解くためのコンピュータ・システム、及び方法
US5770894A (en) Parallel processing method having arithmetical conditions code based instructions substituted for conventional branches
JPH11272474A (ja) レジスタの複数割当てを利用した演算の処理中に割込み可能な複数実行装置
US11481223B2 (en) Reducing operations of sum-of-multiply-accumulate (SOMAC) instructions
JPH0241562A (ja) ベクトル演算列分割処理方式
JP2008523523A (ja) プログラム内のループ用のコンパイル方法、コンパイル装置およびコンピュータシステム
JP3887097B2 (ja) コンパイル方法,コンパイル装置および、コンパイル用プログラムを記憶したコンピュータ読み取り可能な記憶媒体
US11416261B2 (en) Group load register of a graph streaming processor
Waidyasooriya et al. FPGA-Oriented Parallel Programming
US11593114B1 (en) Iterating group sum of multiple accumulate operations
TWI807927B (zh) 具有向量歸約方法與元素歸約方法的向量處理器
JPH06290057A (ja) ループ最適化方法
JP2018049461A (ja) コンパイル装置、コンパイル方法、および、コンパイルプログラム
JP2629474B2 (ja) 並列パイプライン命令処理装置の命令実行処理方式
JPH10105412A (ja) 主記憶の効率的アクセスを実現するオブジェクト生成方法
JP2000029696A (ja) プロセッサおよびパイプライン処理制御方法
JPH07110769A (ja) Vliw型計算機