JPH0713962A - コンパイラ装置 - Google Patents
コンパイラ装置Info
- Publication number
- JPH0713962A JPH0713962A JP14244693A JP14244693A JPH0713962A JP H0713962 A JPH0713962 A JP H0713962A JP 14244693 A JP14244693 A JP 14244693A JP 14244693 A JP14244693 A JP 14244693A JP H0713962 A JPH0713962 A JP H0713962A
- Authority
- JP
- Japan
- Prior art keywords
- vector
- execution
- program
- data
- processing
- 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.)
- Withdrawn
Links
Landscapes
- Complex Calculations (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【目的】 計算機の原始プログラム翻訳処理に関し、ベ
クトル化部分とスカラ処理部分との間でデータを授受す
るための作業領域を効率よく処理する目的プログラムを
生成するコンパイラ装置を目的とする。 【構成】 解析部1が原始プログラムの配列の要素デー
タに対する繰り返し処理部分について、ベクトル長が実
行時に初めて確定し、ベクトル実行部分と、スカラ実行
部分とに分割され、両実行部分間にデータ依存関係があ
ることを識別した場合に、部分ベクトル化処理部2は、
該繰り返し処理部分の該ベクトル実行部分の繰り返しの
1回ごとの処理のベクトル長に等しい大きさの領域をベ
クトル作業域とし、ベクトル実行部分とスカラ実行部分
と、該ベクトル作業域を介するデータ授受とを所要の順
序で直列に実行する実行パスを、所要回数繰り返すプロ
グラムに変更し、翻訳部3は、その結果のプログラムに
ついて翻訳処理を実行するように構成する。
クトル化部分とスカラ処理部分との間でデータを授受す
るための作業領域を効率よく処理する目的プログラムを
生成するコンパイラ装置を目的とする。 【構成】 解析部1が原始プログラムの配列の要素デー
タに対する繰り返し処理部分について、ベクトル長が実
行時に初めて確定し、ベクトル実行部分と、スカラ実行
部分とに分割され、両実行部分間にデータ依存関係があ
ることを識別した場合に、部分ベクトル化処理部2は、
該繰り返し処理部分の該ベクトル実行部分の繰り返しの
1回ごとの処理のベクトル長に等しい大きさの領域をベ
クトル作業域とし、ベクトル実行部分とスカラ実行部分
と、該ベクトル作業域を介するデータ授受とを所要の順
序で直列に実行する実行パスを、所要回数繰り返すプロ
グラムに変更し、翻訳部3は、その結果のプログラムに
ついて翻訳処理を実行するように構成する。
Description
【0001】
【産業上の利用分野】本発明は計算機の原始プログラム
を、ベクトル命令を実行するベクトル実行部分とスカラ
命令を実行するスカラ実行部分とからなる目的プログラ
ムに翻訳する処理において、ベクトル実行部分とスカラ
実行部分との間でデータを授受するためのベクトル作業
域を効率よく処理できるように目的プログラムを生成す
るコンパイラ装置に関する。
を、ベクトル命令を実行するベクトル実行部分とスカラ
命令を実行するスカラ実行部分とからなる目的プログラ
ムに翻訳する処理において、ベクトル実行部分とスカラ
実行部分との間でデータを授受するためのベクトル作業
域を効率よく処理できるように目的プログラムを生成す
るコンパイラ装置に関する。
【0002】
【従来の技術】公知のように、ベクトル処理装置は、ベ
クトルレジスタにあるデータについて演算を実行して、
演算結果をベクトルレジスタに格納する等の処理を行う
ベクトル命令を、高度のパイプライン方式の演算制御に
よって高速に実行するものである。
クトルレジスタにあるデータについて演算を実行して、
演算結果をベクトルレジスタに格納する等の処理を行う
ベクトル命令を、高度のパイプライン方式の演算制御に
よって高速に実行するものである。
【0003】データを、そのような演算速度に対応する
速度で、演算パイプラインに高速且つ連続的に供給でき
るようにするために、ベクトル処理装置のベクトルレジ
スタは、演算対象の配列データの要素を比較的大量に
(例えば64要素×256 個)保持するように構成される。
速度で、演算パイプラインに高速且つ連続的に供給でき
るようにするために、ベクトル処理装置のベクトルレジ
スタは、演算対象の配列データの要素を比較的大量に
(例えば64要素×256 個)保持するように構成される。
【0004】コンパイラがFORTRAN プログラミング言語
等で記述された原始プログラムを、所要の計算機で実行
できる目的プログラムに翻訳する場合に、原始プログラ
ムを解析して、前記のようなベクトル処理装置によって
効率よく実行される処理の部分を識別し、ベクトル命令
を実行する目的プログラムに翻訳する、いわゆるベクト
ル化を行うことはよく知られている。
等で記述された原始プログラムを、所要の計算機で実行
できる目的プログラムに翻訳する場合に、原始プログラ
ムを解析して、前記のようなベクトル処理装置によって
効率よく実行される処理の部分を識別し、ベクトル命令
を実行する目的プログラムに翻訳する、いわゆるベクト
ル化を行うことはよく知られている。
【0005】この場合に、ベクトル命令を実行する部分
をベクトル実行部分といい、それに対しベクトル化が不
適当と識別して、通常のいわゆるスカラ命令を実行する
計算機で実行するようにする部分を、スカラ実行部分と
いう。
をベクトル実行部分といい、それに対しベクトル化が不
適当と識別して、通常のいわゆるスカラ命令を実行する
計算機で実行するようにする部分を、スカラ実行部分と
いう。
【0006】ベクトル化の主要な対象は、原始プログラ
ムにおいて、配列データに対する繰り返し処理であり、
そのような場合に、所要の全処理を一連のベクトル命令
の実行で処理できるようにベクトル化することが望まし
い。
ムにおいて、配列データに対する繰り返し処理であり、
そのような場合に、所要の全処理を一連のベクトル命令
の実行で処理できるようにベクトル化することが望まし
い。
【0007】なお原始プログラムにおける繰り返し処理
の記述には、公知のようにFORTRAN等のDOループ等によ
る記述と、配列式の形式かによる記述がある。配列式と
は、FORTRAN等の場合にはA(1:99)で、配列Aの要素A(1)
からA(99)までの全要素を示し、例えばA(1:99)+B(1:99)
でA(1)+B(1)、A(2)+B(2)、....A(99)+B(99)を示すもの
である。
の記述には、公知のようにFORTRAN等のDOループ等によ
る記述と、配列式の形式かによる記述がある。配列式と
は、FORTRAN等の場合にはA(1:99)で、配列Aの要素A(1)
からA(99)までの全要素を示し、例えばA(1:99)+B(1:99)
でA(1)+B(1)、A(2)+B(2)、....A(99)+B(99)を示すもの
である。
【0008】しかしベクトル化対象の配列データの範囲
が広い場合には、前記のベクトル処理装置のベクトルレ
ジスタの容量の制約から、一度に必要なデータをすべて
ベクトルレジスタに格納できなくなるので、ベクトル実
行部分を例えばDOループによって繰り返し実行するよう
にし、各繰り返しごとにベクトルレジスタに対するデー
タのロード/ストアを行うことになる。
が広い場合には、前記のベクトル処理装置のベクトルレ
ジスタの容量の制約から、一度に必要なデータをすべて
ベクトルレジスタに格納できなくなるので、ベクトル実
行部分を例えばDOループによって繰り返し実行するよう
にし、各繰り返しごとにベクトルレジスタに対するデー
タのロード/ストアを行うことになる。
【0009】そのようにして一般に繰り返し実行される
ベクトル実行部分の、1回の実行で処理するベクトルデ
ータの大きさ (要素数) を物理ベクトル長といい、それ
に対して、原始プログラムに処理範囲として指定された
ベクトルデータ全体の大きさを論理ベクトル長という。
ベクトル実行部分の、1回の実行で処理するベクトルデ
ータの大きさ (要素数) を物理ベクトル長といい、それ
に対して、原始プログラムに処理範囲として指定された
ベクトルデータ全体の大きさを論理ベクトル長という。
【0010】次に、同じDOループ等の制御範囲の中にあ
っても、その一部のみベクトル化が可能で、他の部分は
スカラ実行部分としなければならない場合がある。図3
(a)は、そのような原始プログラムの例であって、公知
のFORTRAN言語によって記述されたプログラムであるの
で、その意味は明らかであるが、例えばその二重DOルー
プの内側ループについてベクトル化の可能性を解析する
と、文はベクトル化できるが、文は代入先の配列要
素を代入元で回帰的に参照しているために、通常はベク
トル化対象としないように判断される。
っても、その一部のみベクトル化が可能で、他の部分は
スカラ実行部分としなければならない場合がある。図3
(a)は、そのような原始プログラムの例であって、公知
のFORTRAN言語によって記述されたプログラムであるの
で、その意味は明らかであるが、例えばその二重DOルー
プの内側ループについてベクトル化の可能性を解析する
と、文はベクトル化できるが、文は代入先の配列要
素を代入元で回帰的に参照しているために、通常はベク
トル化対象としないように判断される。
【0011】そこで、文のDOループによる繰り返し処
理をベクトル化し、その結果について文を通常のDOル
ープで行うようにするために、文の実行結果をすべて
保持して、文のDOループに渡すためのベクトル作業域
を設けて、両者を結合するようにプログラムを変更す
る。
理をベクトル化し、その結果について文を通常のDOル
ープで行うようにするために、文の実行結果をすべて
保持して、文のDOループに渡すためのベクトル作業域
を設けて、両者を結合するようにプログラムを変更す
る。
【0012】ここで、必要なベクトル作業域の大きさ
は、文の実行結果を格納するために、要素の大きさ×
繰り返し回数 (即ち論理ベクトル長=LVL)であって、こ
のプログラムでは論理ベクトル長が変数LVL で指定され
ているので、大きさが実行時に動的に定まることにな
り、一般にコンパイル時には分からない。
は、文の実行結果を格納するために、要素の大きさ×
繰り返し回数 (即ち論理ベクトル長=LVL)であって、こ
のプログラムでは論理ベクトル長が変数LVL で指定され
ているので、大きさが実行時に動的に定まることにな
り、一般にコンパイル時には分からない。
【0013】そこで、実行時にベクトル作業域を確保す
るようにしなければならない。又、この例ではベクトル
作業域は1個でよいが、プログラムによっては2個以上
設けることが必要になり、図3(a)のプログラムに対し
て、(b)に示すようなベクトル化プログラムが生成され
る。
るようにしなければならない。又、この例ではベクトル
作業域は1個でよいが、プログラムによっては2個以上
設けることが必要になり、図3(a)のプログラムに対し
て、(b)に示すようなベクトル化プログラムが生成され
る。
【0014】図3(b) において、文は前記ベクトル作
業域を確保するためのALLOC サブルーチンを呼ぶ命令で
あり、そのパラメータにより、作業域の名前をDVTと
し、データ型は8バイトのREALで、要素数LVLの大きさ
のものを1個確保することを示す。
業域を確保するためのALLOC サブルーチンを呼ぶ命令で
あり、そのパラメータにより、作業域の名前をDVTと
し、データ型は8バイトのREALで、要素数LVLの大きさ
のものを1個確保することを示す。
【0015】文は物理ベクトル長を表す変数PVL の値
に2048を選択したことを示し、この値はベクトルレジス
タの容量と、論理ベクトル長、配列の大きさ、プログラ
ムで指定された演算を行う上で同時に格納されている必
要のあるデータの個数等を勘案して、別途決定される。
に2048を選択したことを示し、この値はベクトルレジス
タの容量と、論理ベクトル長、配列の大きさ、プログラ
ムで指定された演算を行う上で同時に格納されている必
要のあるデータの個数等を勘案して、別途決定される。
【0016】で示す部分の各文は、このベクトル実行
部分の繰り返しで使用される各種変数の値を設定するも
ので、変数IRは回数を定める値の変数であり、変数VLEN
G は各繰り返しにおける物理ベクトル長を表す変数であ
って、ここでは初回のための値として、LVLをPVL で除
した剰余が設定され、2回以降はPVLにされる。変数I1
は各繰り返しにおける配列要素の始点の添字の値であ
り、ここでは初回のための値に設定される。
部分の繰り返しで使用される各種変数の値を設定するも
ので、変数IRは回数を定める値の変数であり、変数VLEN
G は各繰り返しにおける物理ベクトル長を表す変数であ
って、ここでは初回のための値として、LVLをPVL で除
した剰余が設定され、2回以降はPVLにされる。変数I1
は各繰り返しにおける配列要素の始点の添字の値であ
り、ここでは初回のための値に設定される。
【0017】で示す部分が、ベクトル処理装置によっ
てベクトル実行部分をIR回繰り返し実行するDOループで
あり、「V 」を冠する命令がベクトル命令を示し、最初
のベクトル命令VLVLは、各回のベクトル実行部分の演算
の長さを制御する機構に演算長(即ち物理ベクトル長)
をロードする命令である。
てベクトル実行部分をIR回繰り返し実行するDOループで
あり、「V 」を冠する命令がベクトル命令を示し、最初
のベクトル命令VLVLは、各回のベクトル実行部分の演算
の長さを制御する機構に演算長(即ち物理ベクトル長)
をロードする命令である。
【0018】又、ベクトル命令VLは配列データの各一群
の要素データ群を主記憶領域からベクトルレジスタにロ
ードする命令であり、例えば最初の文は、ベクトルレジ
スタの中のVR0として定義したレジスタ群に、主記憶上
の配列Bの要素B(I1+1,J)からB(I1+VLENG,J)までをロー
ドすることを示す。
の要素データ群を主記憶領域からベクトルレジスタにロ
ードする命令であり、例えば最初の文は、ベクトルレジ
スタの中のVR0として定義したレジスタ群に、主記憶上
の配列Bの要素B(I1+1,J)からB(I1+VLENG,J)までをロー
ドすることを示す。
【0019】VAはベクトルレジスタにあるデータの加算
を行って結果をベクトルレジスタに置くベクトル加算命
令であり、ここで一連のデータについて前記図3(a) の
文に対応する演算を実行する。
を行って結果をベクトルレジスタに置くベクトル加算命
令であり、ここで一連のデータについて前記図3(a) の
文に対応する演算を実行する。
【0020】次のベクトル命令VST は、ベクトルレジス
タ上のデータを主記憶領域へストアする命令であり、こ
の命令により演算結果を格納したベクトルレジスタVR64
上の各データを、ベクトル作業域DVT の添字I1+1からI1
+VLENGの部分の領域にストアする。
タ上のデータを主記憶領域へストアする命令であり、こ
の命令により演算結果を格納したベクトルレジスタVR64
上の各データを、ベクトル作業域DVT の添字I1+1からI1
+VLENGの部分の領域にストアする。
【0021】その後次の繰り返しのために、変数I1とVL
ENG を更新して、繰り返しの1回の処理を終わり、以上
をIR回実行してベクトル処理装置による実行を終わる
と、次にで示す元の原始プログラムで同じループにあ
ったスカラ実行部分の処理に入る。
ENG を更新して、繰り返しの1回の処理を終わり、以上
をIR回実行してベクトル処理装置による実行を終わる
と、次にで示す元の原始プログラムで同じループにあ
ったスカラ実行部分の処理に入る。
【0022】では図3(a)の原始プログラムの文に
相当する処理を、ベクトル作業域DVTによって渡される
ベクトル実行部分の演算結果と配列Cについて実行す
る。このDOループの処理が終わると、文により利用域
解放のためのFREEサブルーチンを呼んで、ベクトル作業
域DVT を解放し、以上により外側のDOループによる繰り
返しの1回の処理を終わる。
相当する処理を、ベクトル作業域DVTによって渡される
ベクトル実行部分の演算結果と配列Cについて実行す
る。このDOループの処理が終わると、文により利用域
解放のためのFREEサブルーチンを呼んで、ベクトル作業
域DVT を解放し、以上により外側のDOループによる繰り
返しの1回の処理を終わる。
【0023】以上の処理を外側のDOループで指定された
繰り返し回数Nだけ繰り返し実行する。ここで、各繰り
返しごとに文及びによりベクトル作業域DVT の獲得
と解放を行うのは、外側のDOループ内の最初の命令「CA
LL SUB」によってSUB サブルーチンが実行されるが、SU
B サブルーチンの内容はコンパイラに不明であるので、
その実行によってベクトル作業域DVT の大きさを決める
変数LVL の値が変更されることがあっても差し支え無い
ようにしなければならないからである。
繰り返し回数Nだけ繰り返し実行する。ここで、各繰り
返しごとに文及びによりベクトル作業域DVT の獲得
と解放を行うのは、外側のDOループ内の最初の命令「CA
LL SUB」によってSUB サブルーチンが実行されるが、SU
B サブルーチンの内容はコンパイラに不明であるので、
その実行によってベクトル作業域DVT の大きさを決める
変数LVL の値が変更されることがあっても差し支え無い
ようにしなければならないからである。
【0024】
【発明が解決しようとする課題】以上に説明したよう
に、図3(a) に例示したようなプログラムのベクトル化
において、一般にベクトル実行部分とスカラ実行部分と
の間でデータを授受するためのベクトル作業域の大きさ
が実行時に動的に定まるために、実行時にベクトル作業
域の獲得が必要であり、且つ繰り返しごとにベクトル作
業域の獲得と解放を繰り返す必要のある場合がある。
に、図3(a) に例示したようなプログラムのベクトル化
において、一般にベクトル実行部分とスカラ実行部分と
の間でデータを授受するためのベクトル作業域の大きさ
が実行時に動的に定まるために、実行時にベクトル作業
域の獲得が必要であり、且つ繰り返しごとにベクトル作
業域の獲得と解放を繰り返す必要のある場合がある。
【0025】そのような場合には、ベクトル作業域の獲
得と解放のためのサブルーチン呼び出しのオーバーヘッ
ドが大きくなり、又ベクトル作業域の大きさが定まらな
いために、論理的なベクトル長でベクトル作業域を獲得
する必要があり、実行時にシステムの領域不足による実
行不能を生じる可能性もある。
得と解放のためのサブルーチン呼び出しのオーバーヘッ
ドが大きくなり、又ベクトル作業域の大きさが定まらな
いために、論理的なベクトル長でベクトル作業域を獲得
する必要があり、実行時にシステムの領域不足による実
行不能を生じる可能性もある。
【0026】本発明は、ベクトル実行部分とスカラ実行
部分との間でデータを授受するためのベクトル作業域の
大きさを予定でき、且つ効率よく処理できるように目的
プログラムを生成するコンパイラ装置を目的とする。
部分との間でデータを授受するためのベクトル作業域の
大きさを予定でき、且つ効率よく処理できるように目的
プログラムを生成するコンパイラ装置を目的とする。
【0027】
【課題を解決するための手段】図1は、本発明の構成を
示すブロック図である。図はコンパイラ装置の構成であ
って、所定のプログラミング言語で記述された原始プロ
グラムをベクトル命令を実行するベクトル実行部分と、
スカラ命令を実行するスカラ実行部分とからなる目的プ
ログラムに翻訳する装置であって、解析部1と、部分ベ
クトル化処理部2と、翻訳部3とを有する。
示すブロック図である。図はコンパイラ装置の構成であ
って、所定のプログラミング言語で記述された原始プロ
グラムをベクトル命令を実行するベクトル実行部分と、
スカラ命令を実行するスカラ実行部分とからなる目的プ
ログラムに翻訳する装置であって、解析部1と、部分ベ
クトル化処理部2と、翻訳部3とを有する。
【0028】解析部1は該原始プログラムを解析し、該
原始プログラムのうちの配列の要素データに対する繰り
返し処理部分について、該繰り返し処理部分のベクトル
長が実行時に初めて確定し、該繰り返し処理部分が所要
のベクトル長ごとのデータを処理するベクトル実行部分
の繰り返しと、スカラ実行部分の繰り返しとに分割さ
れ、該ベクトル実行部分と該スカラ実行部分との間にデ
ータ依存関係があることを識別した場合には、該繰り返
し処理部分の解析結果を該部分ベクトル化処理部2に渡
す。
原始プログラムのうちの配列の要素データに対する繰り
返し処理部分について、該繰り返し処理部分のベクトル
長が実行時に初めて確定し、該繰り返し処理部分が所要
のベクトル長ごとのデータを処理するベクトル実行部分
の繰り返しと、スカラ実行部分の繰り返しとに分割さ
れ、該ベクトル実行部分と該スカラ実行部分との間にデ
ータ依存関係があることを識別した場合には、該繰り返
し処理部分の解析結果を該部分ベクトル化処理部2に渡
す。
【0029】部分ベクトル化処理部2は、該繰り返し処
理部分の該ベクトル実行部分の繰り返しの1回ごとの処
理のベクトル長に等しい大きさの領域を、該データ依存
関係に該当するデータの異なる配列の個数だけ設けて、
該領域を該ベクトル実行部分と該スカラ実行部分との間
で該データ依存関係に該当するデータを授受するための
ベクトル作業域とし、該繰り返し処理部分のプログラム
を、該ベクトル実行部分の該繰り返しの1回の実行と、
該スカラ実行部分の該ベクトル実行部分に対応する繰り
返し実行と、該ベクトル作業域を介するデータ授受とを
所要の順序で直列に実行する実行パスを、所要回数繰り
返すプログラムに変更する。
理部分の該ベクトル実行部分の繰り返しの1回ごとの処
理のベクトル長に等しい大きさの領域を、該データ依存
関係に該当するデータの異なる配列の個数だけ設けて、
該領域を該ベクトル実行部分と該スカラ実行部分との間
で該データ依存関係に該当するデータを授受するための
ベクトル作業域とし、該繰り返し処理部分のプログラム
を、該ベクトル実行部分の該繰り返しの1回の実行と、
該スカラ実行部分の該ベクトル実行部分に対応する繰り
返し実行と、該ベクトル作業域を介するデータ授受とを
所要の順序で直列に実行する実行パスを、所要回数繰り
返すプログラムに変更する。
【0030】翻訳部3は、部分ベクトル化処理部2が変
更した結果のプログラムについて翻訳処理を実行する。
更した結果のプログラムについて翻訳処理を実行する。
【0031】
【作用】本発明のコンパイラ装置により、前記のような
原始プログラムのベクトル化において、ベクトル実行部
分の繰り返しの1回ごとの処理についてスカラ実行部分
とデータを授受するに必要な大きさのベクトル作業域を
設け、スカラ実行部分の実行もベクトル実行部分と同じ
繰り返し制御の下で、このベクトル作業域で受け渡され
る範囲ごとのデータに対応する処理を実行し、このよう
にすることによって繰り返しごとに同じベクトル作業域
を反復して使用できるように目的プログラムを生成す
る。
原始プログラムのベクトル化において、ベクトル実行部
分の繰り返しの1回ごとの処理についてスカラ実行部分
とデータを授受するに必要な大きさのベクトル作業域を
設け、スカラ実行部分の実行もベクトル実行部分と同じ
繰り返し制御の下で、このベクトル作業域で受け渡され
る範囲ごとのデータに対応する処理を実行し、このよう
にすることによって繰り返しごとに同じベクトル作業域
を反復して使用できるように目的プログラムを生成す
る。
【0032】従って、この作業域は前記の物理ベクトル
長に基づいて大きさを翻訳時に確定できるようになり、
比較的小さな領域でよく、且つ予めプログラム内に設け
ることができるので、前記のような動的にベクトル作業
域を確保する場合の問題点はすべて解消される。
長に基づいて大きさを翻訳時に確定できるようになり、
比較的小さな領域でよく、且つ予めプログラム内に設け
ることができるので、前記のような動的にベクトル作業
域を確保する場合の問題点はすべて解消される。
【0033】
【実施例】図1の解析部1は入力される原始プログラム
を解析すると、通常は解析結果を翻訳部3に渡して、翻
訳部3により目的プログラムに翻訳して出力される。
を解析すると、通常は解析結果を翻訳部3に渡して、翻
訳部3により目的プログラムに翻訳して出力される。
【0034】しかし、解析部1は解析により、部分ベク
トル化を要する繰り返し処理であって、ベクトル実行部
分とスカラ実行部分にデータ依存関係があり、且つベク
トル長が実行時まで不明な繰り返し処理部分であること
を識別すると、その部分の処理を部分ベクトル化処理部
2に任せる。
トル化を要する繰り返し処理であって、ベクトル実行部
分とスカラ実行部分にデータ依存関係があり、且つベク
トル長が実行時まで不明な繰り返し処理部分であること
を識別すると、その部分の処理を部分ベクトル化処理部
2に任せる。
【0035】図2は、部分ベクトル化処理部2の処理の
流れの一例を示す図であり、前記のような繰り返し処理
部分を受け取ると、処理ステップ10で物理ベクトル長を
前記従来と同様にして決定する。
流れの一例を示す図であり、前記のような繰り返し処理
部分を受け取ると、処理ステップ10で物理ベクトル長を
前記従来と同様にして決定する。
【0036】次に処理ステップ11で、決定した物理ベク
トル長と所要の配列要素のデータ型によってベクトル作
業域の大きさを決定し、又従来と同様に必要な配列の個
数に応じてベクトル作業域の個数を決定して、それらの
必要なベクトル作業域を生成する。
トル長と所要の配列要素のデータ型によってベクトル作
業域の大きさを決定し、又従来と同様に必要な配列の個
数に応じてベクトル作業域の個数を決定して、それらの
必要なベクトル作業域を生成する。
【0037】処理ステップ12で、物理ベクトル長の範囲
ごとのデータを処理するベクトル実行部分を生成し、処
理ステップ13で同じく物理ベクトル長の範囲のデータを
処理するスカラ実行部分のループを生成し、この両者間
でデータを受け渡すためにベクトル作業域へデータをス
トアするプログラムを処理ステップ14で生成する。
ごとのデータを処理するベクトル実行部分を生成し、処
理ステップ13で同じく物理ベクトル長の範囲のデータを
処理するスカラ実行部分のループを生成し、この両者間
でデータを受け渡すためにベクトル作業域へデータをス
トアするプログラムを処理ステップ14で生成する。
【0038】処理ステップ15で、それらを結合して、す
べてを同一ループの本体とし、論理ベクトル長を満足す
るようにループの繰り返し制御を設定したプログラムを
生成する。
べてを同一ループの本体とし、論理ベクトル長を満足す
るようにループの繰り返し制御を設定したプログラムを
生成する。
【0039】部分ベクトル化処理部2は以上で生成した
プログラムを翻訳部3に渡し、翻訳部3はそれを目的プ
ログラムに翻訳する。図4は前記図3(a)に例示した原
始プログラムから、部分ベクトル化処理部2により変換
生成されたプログラムの例であり、従来の図3(b)に対
応し、図3(b)の最初ので示す部分までは、両者全く
同じ内容である。
プログラムを翻訳部3に渡し、翻訳部3はそれを目的プ
ログラムに翻訳する。図4は前記図3(a)に例示した原
始プログラムから、部分ベクトル化処理部2により変換
生成されたプログラムの例であり、従来の図3(b)に対
応し、図3(b)の最初ので示す部分までは、両者全く
同じ内容である。
【0040】図4において、'で示すループが、図3
(b)ののループに対応するが、(b)ので示すスカラ実
行部分のループが、図4では'として示すように、'
のループの中に置かれ、又ベクトル実行部分からのデー
タの受渡しを、ベクトル作業域VST を反復使用して行っ
ている点が従来と異なる。
(b)ののループに対応するが、(b)ので示すスカラ実
行部分のループが、図4では'として示すように、'
のループの中に置かれ、又ベクトル実行部分からのデー
タの受渡しを、ベクトル作業域VST を反復使用して行っ
ている点が従来と異なる。
【0041】ベクトル作業域VSTの大きさは、要素の大
きさ×PVT(即ち物理ベクトル長)として翻訳部3が確
定できるので、目的プログラム内にこの領域を持つよう
に翻訳され、従来のようなALLOC 及びFREEサブルーチン
を呼んで領域の獲得/解放を行う命令文は無くなる。
きさ×PVT(即ち物理ベクトル長)として翻訳部3が確
定できるので、目的プログラム内にこの領域を持つよう
に翻訳され、従来のようなALLOC 及びFREEサブルーチン
を呼んで領域の獲得/解放を行う命令文は無くなる。
【0042】
【発明の効果】以上の説明から明らかなように本発明に
よれば、計算機のプログラムのベクトル化において、処
理のベクトル長が実行時にしか定まらない場合にも、必
要なベクトル作業域の大きさを物理ベクトル長に基づい
て翻訳時に確定できる領域とすることができ、物理ベク
トル長分のベクトル作業域でプログラムが実行できるの
で、プログラムの実行に必要な領域の大きさを予め確定
して、動的に領域を獲得/解放することによる実行時の
オーバヘッドが無くし、且つメモリ領域を効率良く使用
する、効率の良い目的プログラムを生成できるという著
しい工業的効果がある。
よれば、計算機のプログラムのベクトル化において、処
理のベクトル長が実行時にしか定まらない場合にも、必
要なベクトル作業域の大きさを物理ベクトル長に基づい
て翻訳時に確定できる領域とすることができ、物理ベク
トル長分のベクトル作業域でプログラムが実行できるの
で、プログラムの実行に必要な領域の大きさを予め確定
して、動的に領域を獲得/解放することによる実行時の
オーバヘッドが無くし、且つメモリ領域を効率良く使用
する、効率の良い目的プログラムを生成できるという著
しい工業的効果がある。
【図1】 本発明の構成を示すブロック図
【図2】 本発明の処理の流れ図
【図3】 プログラム例の説明図(その1)
【図4】 プログラム例の説明図(その2)
1 解析部 2 部分ベクトル化処理部 3 翻訳部 10〜15 処理ステップ
Claims (1)
- 【請求項1】 所定のプログラミング言語で記述された
原始プログラムをベクトル命令を実行するベクトル実行
部分と、スカラ命令を実行するスカラ実行部分とからな
る目的プログラムに翻訳する装置であって、 解析部(1)と、部分ベクトル化処理部(2)と、翻訳部(3)
とを有し、 該解析部(1) は該原始プログラムを解析し、該原始プロ
グラムのうちの配列の要素データに対する繰り返し処理
部分について、該繰り返し処理部分のベクトル長が実行
時に初めて確定し、該繰り返し処理部分が所要のベクト
ル長ごとのデータを処理するベクトル実行部分の繰り返
しと、スカラ実行部分の繰り返しとに分割され、該ベク
トル実行部分と該スカラ実行部分との間にデータ依存関
係があることを識別した場合には、該繰り返し処理部分
の解析結果を該部分ベクトル化処理部(2)に渡し、 該部分ベクトル化処理部(2)は、該繰り返し処理部分の
該ベクトル実行部分の繰り返しの1回ごとの処理のベク
トル長に等しい大きさの領域を、該データ依存関係に該
当するデータの異なる配列の個数だけ設けて、該領域を
該ベクトル実行部分と該スカラ実行部分との間で該デー
タ依存関係に該当するデータを授受するためのベクトル
作業域とし、 該繰り返し処理部分のプログラムを、該ベクトル実行部
分の該繰り返しの1回の実行と、該スカラ実行部分の該
ベクトル実行部分に対応する繰り返し実行と、該ベクト
ル作業域を介するデータ授受とを所要の順序で直列に実
行する実行パスを、所要回数繰り返すプログラムに変更
し、 該翻訳部(3)は、該部分ベクトル化処理部(2)が変更した
結果のプログラムについて翻訳処理を実行するように構
成されていることを特徴とするコンパイラ装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP14244693A JPH0713962A (ja) | 1993-06-15 | 1993-06-15 | コンパイラ装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP14244693A JPH0713962A (ja) | 1993-06-15 | 1993-06-15 | コンパイラ装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH0713962A true JPH0713962A (ja) | 1995-01-17 |
Family
ID=15315505
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP14244693A Withdrawn JPH0713962A (ja) | 1993-06-15 | 1993-06-15 | コンパイラ装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH0713962A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0273692A (ja) * | 1988-09-09 | 1990-03-13 | Nec Corp | 半導体集積回路装置 |
-
1993
- 1993-06-15 JP JP14244693A patent/JPH0713962A/ja not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0273692A (ja) * | 1988-09-09 | 1990-03-13 | Nec Corp | 半導体集積回路装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US4833606A (en) | Compiling method for vectorizing multiple do-loops in source program | |
JPH02501866A (ja) | 自動区分およびデータ構造割当てによるプログラムの翻訳と実行とを含む方法ならびに成果 | |
Fauth et al. | Automated generation of DSP program development tools using a machine description formalism | |
Labrousse et al. | CREATE-LIFE: a modular design approach for high performance ASICs | |
Anantharaman et al. | A hardware accelerator for speech recognition algorithms | |
JP3318051B2 (ja) | 翻訳処理方法 | |
JPH0713962A (ja) | コンパイラ装置 | |
JPH03135630A (ja) | 命令スケジューリング方式 | |
JPH05217007A (ja) | データフロープログラムの実行制御方法 | |
JP2585793B2 (ja) | コンパイラシステム | |
JP2564904B2 (ja) | プログラム最適化処理方法 | |
Levesque | Application of the Vectorizer for effective use of high-speed computers | |
JPH04149738A (ja) | プログラム最適化装置 | |
JPH08171554A (ja) | ベクトル演算の最適化コンパイラ | |
JPS63120367A (ja) | プログラム変換装置 | |
JPH0748205B2 (ja) | ベクトル化処理方式 | |
JPS63155265A (ja) | ベクトル演算最適化処理方式 | |
JPH08115220A (ja) | ループ最適化方法 | |
JPH05108700A (ja) | ベクトル化コンパイル方法 | |
JPH05324346A (ja) | ベクトル化方式 | |
JPH03257579A (ja) | コンパイラの並列化方式 | |
JPH05120025A (ja) | ソースプログラムのインライン展開方法 | |
JPH0391035A (ja) | 命令列スケジューリング処理方法 | |
JPH046020B2 (ja) | ||
JPH01159734A (ja) | 回帰演算におけるデータ形式変換処理方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20000905 |