JP3289685B2 - ベクトル演算方法 - Google Patents

ベクトル演算方法

Info

Publication number
JP3289685B2
JP3289685B2 JP26083598A JP26083598A JP3289685B2 JP 3289685 B2 JP3289685 B2 JP 3289685B2 JP 26083598 A JP26083598 A JP 26083598A JP 26083598 A JP26083598 A JP 26083598A JP 3289685 B2 JP3289685 B2 JP 3289685B2
Authority
JP
Japan
Prior art keywords
arrays
vector
vector register
array
memory
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.)
Expired - Fee Related
Application number
JP26083598A
Other languages
English (en)
Other versions
JP2000076224A (ja
Inventor
賢 橋本
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP26083598A priority Critical patent/JP3289685B2/ja
Publication of JP2000076224A publication Critical patent/JP2000076224A/ja
Application granted granted Critical
Publication of JP3289685B2 publication Critical patent/JP3289685B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はベクトル演算機能を
有するコンピュータ上で配列に対する演算をベクトル演
算により実行する方法に関し、特に同種の複数のベクト
ル演算を一括して実行するベクトル演算方法に関する。
【0002】
【従来の技術】ベクトル演算機能を有するコンピュータ
は、幾つかのベクトルレジスタと、加算や乗算などの演
算種別毎のベクトル演算器とを備えており、科学技術計
算などに多く現れる配列に対する繰り返し演算を高速に
実行することができる。
【0003】例えば、 A(:)=B(:)+C(:) …(1) (但し、配列A,B,Cの要素の範囲は1〜n)という
配列どうしの加算は、ベクトル演算を用いると、以下の
4ステップで実行できる。 1.配列Bの各要素を、メモリ上からベクトルレジスタ
B(Vb)に複写する。 2.配列Cの各要素を、メモリ上からベクトルレジスタ
C(Vc)に複写する。 3.ベクトル演算命令Va=Vb+Vcを実行する。 4.ベクトルレジスタA(Va)の各要素を、メモリ上
の配列Aに複写する。
【0004】ここで、1,2,4の各ステップでは、メ
モリ上で連続的に配置されているn個の配列要素とベク
トルレジスタとの間の複写を一括して行う複写命令が使
用される。
【0005】また、科学技術計算などの分野において
は、配列の数や演算の種類が等しいベクトル演算を連続
して実行する場合がある。この場合も従来は、各演算毎
に前記(1)式の場合と同様な手順を繰り返していた。
以下に、同種のベクトル演算が連続する幾つかの例と、
その場合の従来の演算方法とを示す。
【0006】例1 A(:)=B(:)+C(:) …(2−1) D(:)=E(:)+F(:) …(2−2) (但し、配列A,B,Cの要素の範囲は1〜n 配列D,E,Fの要素の範囲は1〜m) これは、配列Bと配列Cとの要素どうしの和を配列Aの
要素とする加算式(2−1)に続けて、配列Eと配列F
との要素どうしの和を配列Dの要素とする加算式(2−
2)を実行する例である。
【0007】図7は実行時にメモリ上に割り付けられた
配列A〜Fを示す。各配列A〜Fは、同図に示すように
メモリ上の連続した領域E1〜E6に割り付けられてい
る。
【0008】図8は、前記の2つの式(2−1),(2
−2)をベクトル演算を用いて実行する場合の従来の手
順を示すフローチャートであり、以下のステップから構
成される。 ステップS21;配列Bの各要素をメモリ上からベクト
ルレジスタB(Vb)に複写する。 ステップS22;配列Cの各要素をメモリ上からベクト
ルレジスタC(Vc)に複写する。 ステップS23;ベクトル演算命令Va=Vb+Vcを
実行する。 ステップS24;ベクトルレジスタA(Va)の各要素
をメモリ上の配列Aに複写する。 ステップS25;配列Eの各要素をメモリ上からベクト
ルレジスタB(Vb)に複写する。 ステップS26;配列Fの各要素をメモリ上からベクト
ルレジスタC(Vc)に複写する。 ステップS27;ベクトル演算命令Va=Vb+Vcを
実行する。 ステップS28;ベクトルレジスタA(Va)の各要素
をメモリ上の配列Dに複写する。
【0009】 例2 DO I=1,11 ,12 A(:,I)=B(:,I)+C(:,I) …(3−1) D(:,I)=E(:,I)+F(:,I) …(3−2) ENDDO (但し、2次元配列A,B,Cの1次元目の添字の範囲
は1〜n、2次元目の添字の範囲は1〜11 、2次元配
列D,E,Fの1次元目の添字の範囲は1〜m、2次元
目の添字の範囲は1〜11 で、11 ≧12 ≧1とする) このDOループは、配列Bと配列Cの2次元目の添字が
1,1+12 ,1+2×12 ,…となる要素どうしの和
を配列Cの2次元目の添字が1,1+12 ,1+2×1
2 ,…となる要素とする計算式(3−1)と、配列Eと
配列Fの2次元目の添字が1,1+12 ,1+2×
2 ,…となる要素どうしの和を配列Dの2次元目の添
字が1,1+12 ,1+2×12 ,…となる要素とする
計算式(3−2)とを実行する例である。
【0010】図9は実行時にメモリ上に割り付けられた
配列A〜Fを示す。各配列A〜Fは、同図に示すように
メモリ上の連続した領域E1〜E6に割り付けられてい
る。
【0011】図10は、前記のDOループをベクトル演
算を用いて実行する場合の従来の手順を示すフローチャ
ートであり、以下のステップから構成される。 ステップS31;ループ制御変数Iに1を代入する。 ステップS32;I>11 ならば処理を終了し、そうで
ないならステップS33に分岐する。 ステップS33;配列Bの各要素B(1,I)〜B
(n,I)をメモリ上からベクトルレジスタB(Vb)
に複写する。 ステップS34;配列Cの各要素C(1,I)〜C
(n,I)をメモリ上からベクトルレジスタC(Vc)
に複写する。 ステップS35;ベクトル演算命令Va=Vb+Vcを
実行する。 ステップS36;ベクトルレジスタA(Va)の内容を
メモリ上の配列Aの各要素A(1,I)〜A(n,I)
に複写する。 ステップS37;配列Eの各要素E(1,I)〜E
(m,I)をメモリ上からベクトルレジスタB(Vb)
に複写する。 ステップS38;配列Fの各要素F(1,I)〜F
(m,I)をメモリ上からベクトルレジスタC(Vc)
に複写する。 ステップS39;ベクトル演算命令Va=Vb+Vcを
実行する。 ステップS3A;ベクトルレジスタA(Va)の内容を
メモリ上の配列Dの各要素D(1,I)〜D(m,I)
に複写する。 ステップS3B;Iに12 を加算し、ステップS32に
戻る。
【0012】なお、ベクトル演算機能を有するコンピュ
ータに関しては、例えば「新版情報処理ハンドブック」
(株式会社オーム社,平成7年11月25日発行)の第
3編,第6章の『ベクトル計算機』に詳しい解説があ
る。
【0013】
【発明が解決しようとする課題】上述したように、配列
の数や演算の種類が等しい複数の計算式をベクトル演算
を用いて実行する場合、従来は、各計算式毎にメモリ上
の配列をベクトルレジスタへ複写する処理、ベクトル演
算命令を実行する処理、ベクトルレジスタの内容をメモ
リへ複写する処理を繰り返している。このため、特に要
素数の少ない配列に対する演算の場合には、ベクトル演
算命令を実行する前にメモリ上の配列をベクトルレジス
タに複写するのにかかる時間と、ベクトル演算命令で得
られた値をベクトルレジスタからメモリ上の配列に複写
するのにかかる時間とが、ベクトル演算命令自身の所要
時間に比べて相対的に大きくなってしまい、ベクトル演
算の高速性が十分に活かせないという問題点があった。
【0014】そこで本発明の目的は、配列の数や演算の
種類が等しい複数の計算式をベクトル演算を用いて実行
する際に必要となる、メモリとベクトルレジスタ間の複
写回数およびベクトル演算命令の実行回数を削減し、処
理速度を向上させることにある。
【0015】
【課題を解決するための手段】本発明は、各々独立して
計算可能な複数の計算式であって、各計算式に含まれる
配列が全て1次元配列でその数および演算の種類が同じ
であり且つ複数の計算式の左辺に現れる配列どうし及び
右辺の同じ位置(同じ項)に現れる配列どうしの要素数
の和がコンピュータの保有するベクトルレジスタのサイ
ズ以下である複数の計算式や、各々独立して計算可能な
複数の計算式をループ内に含むDOループであって、各
計算式に含まれる配列が全て同じ次元数の多次元配列で
その数および演算の種類が同じであり且つ複数の計算式
の左辺に現れる配列どうし及び右辺の同じ位置に現れる
配列どうしのループの1回の繰り返し当たりの要素数の
和がコンピュータの保有するベクトルレジスタのサイズ
以下であるDOループ中の複数の計算式などは、ベクト
ル演算を用いて実行する場合、1組のベクトルレジスタ
でまとめて処理できること、同じベクトルレジスタで処
理可能な各計算式中の配列要素をメモリ上で連続するよ
うに配置しておくことで1度の複写命令で一括してベク
トルレジスタに複写したり、その逆にメモリ上に複写で
きることに着目してなされたものであり、そのような複
数の計算式における左辺に現れる配列どうし及び右辺の
同じ位置に現れる配列どうしをそれぞれ組にして、同じ
組の配列をメモリ上の連続した領域に割り当てる第1の
ステップと、前記複数の計算式の右辺の同じ位置に現れ
る配列どうしの組毎に1つの入力用のベクトルレジスタ
を割り当て、各組の配列を前記メモリ上の連続した領域
から前記入力用のベクトルレジスタに複写命令によって
複写する第2のステップと、前記入力用のベクトルレジ
スタに複写された配列に対する演算を前記計算式の演算
の種類に対応するベクトル演算器で実行し、その演算結
果を出力用のベクトルレジスタに格納する第3のステッ
プとを含むことを特徴とする。
【0016】また、前記出力用のベクトルレジスタに格
納された演算結果を、前記複数の計算式の左辺に現れる
配列どうしの組に割り当てられた前記メモリ上の連続し
た領域に複写命令によって複写する第4のステップを含
むことを特徴とする。
【0017】
【発明の実施の形態】次に本発明の実施の形態の例につ
いて図面を参照して詳細に説明する。
【0018】図1は本発明のベクトル演算方法を実施す
るコンピュータの一例を示すブロック図である。この例
のコンピュータは、CPU1と、メモリ(主記憶)2
と、ローダ3と、記憶装置4,5と、コンパイラ6とを
備えている。
【0019】CPU1は、ベクトル演算機能を有するC
PUであり、ベクトルレジスタセット11と、ベクトル
加算器12およびベクトル乗算器13と、データ転送部
14と、命令解釈部15とを含んでいる。
【0020】ベクトルレジスタセット11は、複数のベ
クトルレジスタA(Va)、B(Vb)、C(Vc)、
…を備えている。各々のベクトルレジスタのサイズ(ベ
クトル長)はLである。
【0021】ベクトル加算器12は、ベクトルレジスタ
セット11中の任意の2つのベクトルレジスタから供給
されるデータを加算し、その加算結果をベクトルレジス
タセット11中の他の1つのベクトルレジスタに格納す
る処理を、ベクトル乗算器13は、ベクトルレジスタセ
ット11中の任意の2つのベクトルレジスタから供給さ
れるデータを乗算し、その乗算結果をベクトルレジスタ
セット11中の他の1つのベクトルレジスタに格納する
処理を、それぞれ司る。
【0022】データ転送部14は、複写命令に従って、
メモリ2上の連続する領域に存在するデータをベクトル
レジスタセット11中の任意のベクトルレジスタに複写
したり、その反対に、任意のベクトルレジスタに格納さ
れた内容をメモリ2上の連続する領域に複写する手段で
ある。
【0023】命令解釈部15は、メモリ2からベクトル
演算命令,複写命令等の命令コードをフェッチし、解読
して、データ転送部14,ベクトルレジスタセット1
1,ベクトル加算器12およびベクトル乗算器13を制
御する手段である。
【0024】なお、CPU1はベクトル演算機能以外に
スカラ演算機能も有しているが、本発明の動作と直接関
係しないため、図示は省略している。
【0025】メモリ2は、命令コードを格納する命令コ
ード部21と、配列などのデータを格納するデータ部2
2とから構成される。命令コード部21には、本発明に
より最適化された命令コード列211が格納され、デー
タ部22には、本発明により最適配置されたデータ列2
21が格納される。
【0026】記憶装置5は磁気ディスク装置上のファイ
ルであり、配列に対する演算式を複数記述したソースプ
ログラム51を記憶している。
【0027】コンパイラ6は、ソースプログラム51を
記憶装置5から入力し、構文解析,意味解析,コード生
成などを行って、オブジェクトプログラム41を生成す
る。この際、ソースプログラム51中に、配列に対する
計算式が連続して現れる場合、それら複数の計算式に対
して本発明による最適化が可能か否かを判定し、可能な
らば最適化されたオブジェクトプログラム41を生成す
る。
【0028】複数の計算式に対して本発明による最適化
が可能となる条件は、以下の通りである。 (1)各々の計算式が独立して計算可能であること。つ
まり、先行する計算式で定義された配列を後続の計算式
で引用する等、依存関係が存在しないこと。 (2)全ての計算式に含まれる配列の数が等しく、か
つ、同じ演算が用いられていること。 (3)各計算式に含まれる配列が全て1次元配列である
場合、各計算式の左辺に現れる配列どうし及び右辺の同
じ位置に現れる配列どうしの要素数の和がベクトルレジ
スタのサイズ以下であること。 (4)各計算式に含まれる配列が全て同じ次元数の多次
元配列であり、それらの計算式が同じDOループ中に含
まれる場合、各計算式の左辺に現れる配列どうし及び右
辺の同じ位置に現れる配列どうしのループの1回の繰り
返し当たりの要素数の和がベクトルレジスタのサイズ以
下であること。
【0029】上記の条件を満たす複数の計算式に対して
は、コンパイラ6は、以下のような最適化を行う。
【0030】まず、データ割り付け方法として、複数の
計算式における左辺に現れる配列どうし及び右辺の同じ
位置に現れる配列どうしをそれぞれ組にして、同じ組の
配列がメモリ2上の連続した領域に割り付けられるよう
なデータ割り付け方法を採用する。
【0031】次に、複数の計算式に対応する命令コード
として、以下のような命令コードを生成する。 (1)複数の計算式の右辺の同じ位置に現れる配列どう
しの組毎に1つの入力用のベクトルレジスタを割り当
て、各組の配列をメモリ2上の連続した領域から対応す
る入力用のベクトルレジスタに複写する複写命令の命令
コードを生成する。この際、複写するベクトル長は、そ
の組の配列の要素数の合計値に等しい。 (2)入力用のベクトルレジスタに複写された配列を、
演算の種類に対応するベクトル演算器でベクトル演算
し、その演算結果を出力用のベクトルレジスタに格納す
るベクトル演算命令の命令コードを生成する。この際、
演算にかかるベクトル長は、入力用ベクトルレジスタに
複写された配列のサイズ、つまり、複数の計算式の右辺
の同じ位置に現れる配列の要素数の合計値に等しい。 (3)出力用のベクトルレジスタに格納された演算結果
を、前記複数の計算式の左辺に現れる配列どうしの組に
割り当てられたメモリ2上の連続した領域に複写する複
写命令の命令コードを生成する。
【0032】次に図1の記憶装置4は、コンパイラ6に
よって生成されたオブジェクトプログラム41を格納す
る磁気ディスク装置上のファイルであり、ローダ3は、
オブジェクトプログラム41をメモリ2にロードする手
段である。オブジェクトプログラム41中の命令コード
列は命令コード列211として命令コード部21にロー
ドされ、配列などのデータはデータ列221としてデー
タ部22にロードされる。配列のデータ部22へのロー
ドに際しては、コンパイラ6で決定されたデータ割り付
け方法に従う。
【0033】上述のようにしてメモリ2の命令コード部
21にロードされたオブジェクトプログラム41の命令
コード列211は、CPU1の命令解釈部15によって
順次に解釈され、実行される。
【0034】次に、本実施の形態の実施例について説明
する。
【0035】今、ソースプログラム51中に、以下のよ
うに、配列Bと配列Cとの要素どうしの和を配列Aの要
素とする加算式(4−1)に続けて、配列Eと配列Fと
の要素どうしの和を配列Dの要素とする加算式(4−
2)が記述されているものとする。この式は従来技術で
挙げた式(2−1),(2−2)と同じである。 A(:)=B(:)+C(:) …(4−1) D(:)=E(:)+F(:) …(4−2) 但し、配列A,B,Cの要素の範囲は1〜n、配列D,
E,Fの要素の範囲は1〜mとし、n+mはベクトルレ
ジスタセット11中のベクトルレジスタのサイズL以下
とする。
【0036】コンパイラ6は、ソースプログラム51中
に配列に対する演算式が連続している箇所を検出する
と、これらの演算式に対し本発明による最適化が可能か
否かを判定する。今の場合、式(4−1)と式(4−
2)とは独立して計算可能であり、双方の式に含まれる
配列の数が3つで等しく、かつ、加算という同じ演算が
用いられている。また、各式の左辺に現れる配列A,D
どうし及び右辺の同じ位置に現れる配列BとE、CとF
どうしの要素数の和は、n+mであり、ベクトルレジス
タのサイズL以下である。このため、コンパイラ6は式
(4−1)と(4−2)とは本発明による最適化が可能
と判断し、以下のような最適化を行う。
【0037】まず、データ割り付け方法として、式(4
−1),(4−2)の左辺に現れる配列A,Dどうし及
び右辺の同じ位置に現れる配列BとE、CとFどうしを
それぞれ組にして、図2に示すように、同じ組の配列が
メモリ2上の連続した領域E1,E2,E3に割り付け
られるようなデータ割り付け方法を採用する。
【0038】次に、式(4−1),(4−2)に対応す
る命令コードとして、以下のような命令コードを生成す
る。 (1)式の右辺の第1項に現れる配列BとEの組に1つ
の入力用のベクトルレジスタ(B(Vb)とする)を割
り当て、その組の配列BとEをメモリ2上の図2に示し
た連続した領域E2からベクトルレジスタB(Vb)に
複写する複写命令の命令コードを生成する。 (2)同様に、式の右辺の第2項に現れる配列CとFの
組に1つの入力用のベクトルレジスタ(C(Vc)とす
る)を割り当て、その組の配列CとFをメモリ2上の図
2に示した連続した領域E3からベクトルレジスタC
(Vc)に複写する複写命令の命令コードを生成する。 (3)ベクトル加算命令Va=Vb+Vcを生成する。
このベクトル加算命令は、図3に示すように、ベクトル
レジスタB(Vb)の要素とベクトルレジスタC(V
c)の要素との加算値をベクトル加算器12で求め、そ
の結果を出力用のベクトルレジスタA(Va)に格納す
る命令である。 (4)ベクトルレジスタA(Va)に格納された演算結
果を、式(4−1),(4−2)の左辺に現れる配列A
とDどうしの組に割り当てられたメモリ2上の図2に示
した連続した領域E1に複写する複写命令の命令コード
を生成する。
【0039】図4は以上のようにして生成された式(4
−1),(4−2)に対応する命令コード列をフローチ
ャート形式で示している。
【0040】コンパイラ6によって生成された図4に示
すような命令コード列を含むオブジェクトプログラム4
1は記憶装置4に格納され、その後、ローダ3によっ
て、命令コード列211がメモリ2の命令コード部21
にロードされ、配列等のデータ列221がデータ部22
にロードされる。このとき、式(4−1),(4−2)
で定義,参照される配列は図2で示したように、所定の
配列の組ごとにメモリ2の連続した領域E1〜E3に割
り付けられる。そして、CPU1の命令解釈部15が命
令コード列211から命令コードを順次に読み取って解
釈し、各部を制御する。これにより、図4に示した命令
コード列の箇所に実行が進んだとき、以下のような動作
が行われる。
【0041】ステップS1;命令解釈部15の制御の下
に、データ転送部14は、メモリ2上の連続領域E2か
ら配列Bと配列Eの各要素をベクトルレジスタB(V
b)に複写する。 ステップS2;命令解釈部15の制御の下に、データ転
送部14は、メモリ2上の連続領域E3から配列Cと配
列Fの各要素をベクトルレジスタC(Vc)に複写す
る。 ステップS3;命令解釈部15の制御の下に、ベクトル
加算器12は、ベクトル演算命令Va=Vb+Vcを実
行する。すなわち、ベクトルレジスタB(Vb)とベク
トルレジスタC(Vc)の各要素ごとの加算値を求め、
ベクトルレジスタA(Va)に格納する。 ステップS4;命令解釈部15の制御の下に、データ転
送部14は、ベクトルレジスタA(Va)の各要素を、
メモリ2上の連続領域E1に複写する。
【0042】以上のようにして、従来は図8に示したよ
うに8ステップを要した処理が、本実施例では図4に示
すように4ステップで済むようになる。
【0043】以上の実施例では、演算の右辺の項数が2
であり、左辺が右辺の項の何れの配列とも同じでなく、
しかも演算が加算であるような複数の計算式について説
明したが、右辺の項数や演算の種類、項の異同について
は制限は無く、例えば次のような複数の演算式の組に対
しても適用可能である。
【0044】 A(:)=−A(:) B(:)=−B(:) …(5) A(:)=B(:)−C(:)*D(:) E(:)=F(:)−G(:)*H(:) …(6) A(:)=sinB(:)+cosC(:) D(:)=sinE(:)+cosF(:) …(7)
【0045】また、以上の例は1次元配列に対する演算
を取り上げたが、本発明は2次元以上の配列に対する演
算にも適用可能である。以下にその例を示す。
【0046】 DO I=1,11 ,12 …(8−1) A(:,I)=B(:,I)+C(:,I) …(8−2) D(:,I)=E(:,I)+F(:,I) …(8−3) ENDDO …(8−4) 但し、2次元配列A,B,Cの1次元目の添字の範囲は
1〜n、2次元目の添字の範囲は1〜11 、2次元配列
D,E,Fの1次元目の添字の範囲は1〜m、2次元目
の添字の範囲は1〜11 で、11 ≧12 ≧1とし、ま
た、n+mはベクトルレジスタセット11中のベクトル
レジスタのサイズL以下とする。
【0047】上記のDOループによる計算式は、配列B
と配列Cの2次元目の添字が1,1+12 ,1+2×1
2 ,…となる要素どうしの和を配列Cの2次元目の添字
が1,1+12 ,1+2×12 ,…となる要素とし、配
列Eと配列Fの2次元目の添字が1,1+12 ,1+2
×12 ,…となる要素どうしの和を配列Dの2次元目の
添字が1,1+12 ,1+2×12 ,…となる要素とす
るもので、従来の技術で挙げた式(3−1),(3−
2)と同じである。
【0048】上記のような計算式がソースプログラム5
1中に存在する場合、コンパイラ6は、これらの計算式
に対し本発明による最適化が可能か否かを判定する。今
の場合、DOループ中の式(8−2)と式(8−3)と
は独立して計算可能であり、双方の式に含まれる配列の
数が3つで等しく、かつ、加算という同じ演算が用いら
れている。また、各式の左辺に現れる配列A,Dどうし
及び右辺の同じ位置に現れる配列BとE、CとFどうし
のループの1回の繰り返し当たりの要素数の和は、n+
mであり、ベクトルレジスタのサイズL以下である。こ
のため、コンパイラ6は上記DOループ中の式(8−
2)と(8−3)とは本発明による最適化が可能と判断
し、以下のような最適化を行う。
【0049】まず、データ割り付け方法として、式(8
−2),(8−3)の左辺に現れる配列A,Dどうし及
び右辺の同じ位置に現れる配列BとE、CとFどうしを
それぞれ組にして、メモリ2上の連続した領域に割り付
けるようなデータ割り付け方法を採用する。この際、式
(8−2),(8−3)はDOループ中に存在するた
め、各連続領域内では、ループ制御変数Iに対応する添
字が同じものが連続するように割り付ける。つまり、図
5に示すように、配列A,Dについては、ループ制御変
数Iに対応する2次元目の添字が1のものA(1,
1),…,A(n,1)とD(1,1),…,D(m,
1)を連続してメモリ2上の連続領域E1に割り付け、
次に添字が2のもの、3のもの、…、11 のものをメモ
リ2上の連続領域E1に同様に連続して割り付ける。ま
た、配列BとE、配列CとFも同様に、図5に示すよう
にメモリ2上の連続領域E2,E3に割り付ける。
【0050】次に、DOループに対応する命令コードと
して、以下のような命令コードを生成する。
【0051】まず、DOループの制御文(8−1),
(8−4)に対応して、ループ制御変数Iを1に初期化
する命令コード、ループ制御変数Iを終値11 と比較し
て分岐処理する命令コード、1ループ実行毎にループ制
御変数Iを増分値12 だけ加算する命令コードを生成す
る。
【0052】次に、式(8−2),(8−3)に対応す
る命令コードとして、以下のような命令コードを生成す
る。 (1)式の右辺の第1項に現れる配列BとEの組に1つ
の入力用のベクトルレジスタ(B(Vb)とする)を割
り当て、その組の配列BとEの現ループ制御変数Iの値
に応じた各要素をメモリ2上の図5に示した連続した領
域E2からベクトルレジスタB(Vb)に複写する複写
命令の命令コードを生成する。 (2)同様に、式の右辺の第2項に現れる配列CとFの
組に1つの入力用のベクトルレジスタ(C(Vc)とす
る)を割り当て、その組の配列CとFの現ループ制御変
数Iの値に応じた各要素をメモリ2上の図5に示した連
続した領域E3からベクトルレジスタC(Vc)に複写
する複写命令の命令コードを生成する。 (3)ベクトル加算命令Va=Vb+Vcを生成する。
このベクトル加算命令は、図3に示したように、ベクト
ルレジスタB(Vb)の要素とベクトルレジスタC(V
c)の要素との加算値をベクトル加算器12で求め、そ
の結果を出力用のベクトルレジスタA(Va)に格納す
る命令である。 (4)ベクトルレジスタA(Va)に格納された演算結
果を、式(8−2),(8−3)の左辺に現れる配列A
とDどうしの組に割り当てられたメモリ2上の図5に示
した連続した領域E1における現ループ制御変数Iの値
に対応する部分に複写する複写命令の命令コードを生成
する。
【0053】図6は以上のようにして生成された上記D
Oループに対応する命令コード列をフローチャート形式
で示している。
【0054】コンパイラ6によって生成された図6に示
すような命令コード列を含むオブジェクトプログラム4
1は記憶装置4に格納され、その後、ローダ3によっ
て、命令コード列211がメモリ2の命令コード部21
にロードされ、配列等のデータ列221がデータ部22
にロードされる。このとき、式(8−2),(8−3)
で定義,参照される配列は図5で示したように、所定の
配列の組ごとにメモリ2の連続した領域E1〜E3に割
り付けられる。そして、CPU1の命令解釈部15が命
令コード列211から命令コードを順次に読み取って解
釈し、各部を制御する。これにより、図6に示した命令
コード列の箇所に実行が進んだとき、以下のような動作
が行われる。
【0055】ステップS11;命令解釈部15はループ
制御変数Iに1を代入する。 ステップS12;命令解釈部15はI>11 ならばステ
ップS13に分岐し、そうでなければ図6の処理を終了
する。 ステップS13;命令解釈部15の制御の下に、データ
転送部14は、メモリ2上の連続領域E2から配列Bの
要素B(1,I)〜B(n,I)と配列Eの要素E
(1,I)〜E(m,I)を、ベクトルレジスタB(V
b)に複写する。 ステップS14;命令解釈部15の制御の下に、データ
転送部14は、メモリ2上の連続領域E3から配列Cの
要素C(1,I)〜C(n,I)と配列Fの要素F
(1,I)〜F(m,I)を、ベクトルレジスタC(V
c)に複写する。 ステップS15;命令解釈部15の制御の下に、ベクト
ル加算器12は、ベクトル演算命令Va=Vb+Vcを
実行する。すなわち、ベクトルレジスタB(Vb)とベ
クトルレジスタC(Vc)の各要素ごとの加算値を求
め、ベクトルレジスタA(Va)に格納する。 ステップS16;命令解釈部15の制御の下に、データ
転送部14は、ベクトルレジスタA(Va)の各要素
を、メモリ2上の連続領域E1に複写する。 ステップS17;命令解釈部15はループ制御変数Iに
2 を加算し、ステップS12に進む。
【0056】以上のようにして、従来は図10に示した
ように多くのステップを要した処理が、本実施例では図
6に示すように少ないステップで済むようになる。
【0057】
【発明の効果】以上説明したように本発明によれば、配
列の数や演算の種類が等しい複数の計算式をベクトル演
算を用いて実行する際の処理速度を向上することができ
る。その理由は、複数の計算式の右辺の同じ位置に現れ
る配列どうしを組にしてメモリ上の連続した領域に割り
付けておき、同じ組の配列を同じベクトルレジスタに一
括して複写し、同じベクトル演算命令で処理するため、
メモリからベクトルレジスタへの複写回数およびベクト
ル演算命令の実行回数が削減されるからである。また、
複数の計算式の左辺に現れる配列どうしを組にしてメモ
リ上の連続した領域に割り付けておき、ベクトル演算命
令によってベクトルレジスタ上に得られた演算結果を一
括してメモリ上の連続領域に複写するため、ベクトルレ
ジスタからメモリへの複写回数が削減されるからであ
る。
【図面の簡単な説明】
【図1】本発明のベクトル演算方法を実施するコンピュ
ータの一例を示すブロック図である。
【図2】本発明の一実施例における配列のメモリへの割
り付け方法を示す図である。
【図3】ベクトル加算命令Va=Vb+Vcの説明図で
ある。
【図4】本発明の一実施例における最適化された命令コ
ード列をフローチャート形式で示す図である。
【図5】本発明の別の実施例における配列のメモリへの
割り付け方法を示す図である。
【図6】本発明の別の実施例における最適化された命令
コード列をフローチャート形式で示す図である。
【図7】一次元配列のメモリへの割り付け方法の従来例
を示す図である。
【図8】従来のベクトル演算方法の手順を示すフローチ
ャートである。
【図9】二次元配列のメモリへの割り付け方法の従来例
を示す図である。
【図10】従来のベクトル演算方法の手順を示すフロー
チャートである。
【符号の説明】
1…CPU 11…ベクトルレジスタセット 12…ベクトル加算器 13…ベクトル乗算器 14…データ転送部 15…命令解釈部 2…メモリ(主記憶) 21…命令コード部 211…命令コード列 22…データ部 221…データ列 3…ローダ 4…記憶装置 41…オブジェクトプログラム 5…記憶装置 51…ソースプログラム 6…コンパイラ

Claims (4)

    (57)【特許請求の範囲】
  1. 【請求項1】 ベクトル演算機能を有するコンピュータ
    上で、配列に対する演算をベクトル演算により実行する
    方法において、 各々独立して計算可能な複数の同種の計算式を最適化対
    象とし、その複数の計算式における左辺に現れる配列ど
    うし及び右辺の同じ位置に現れる配列どうしをそれぞれ
    組にして、同じ組の配列をメモリ上の連続した領域に割
    り当てる第1のステップと、 前記複数の計算式の右辺の同じ位置に現れる配列どうし
    の組毎に1つの入力用のベクトルレジスタを割り当て、
    各組の配列を前記メモリ上の連続した領域から前記入力
    用のベクトルレジスタに複写命令によって複写する第2
    のステップと、 前記入力用のベクトルレジスタに複写された配列に対す
    る演算を前記計算式の演算の種類に対応するベクトル演
    算器で実行し、その演算結果を出力用のベクトルレジス
    タに格納する第3のステップとを含むことを特徴とする
    ベクトル演算方法。
  2. 【請求項2】 前記出力用のベクトルレジスタに格納さ
    れた演算結果を、前記複数の計算式の左辺に現れる配列
    どうしの組に割り当てられた前記メモリ上の連続した領
    域に複写命令によって複写する第4のステップを含むこ
    とを特徴とする請求項1記載のベクトル演算方法。
  3. 【請求項3】 各々独立して計算可能な複数の計算式で
    あって、各計算式に含まれる配列が全て1次元配列でそ
    の数および演算の種類が同じであり且つ複数の計算式の
    左辺に現れる配列どうし及び右辺の同じ位置に現れる配
    列どうしの要素数の和が前記コンピュータの保有するベ
    クトルレジスタのサイズ以下である複数の計算式を、最
    適化対象とする請求項1または2記載のベクトル演算方
    法。
  4. 【請求項4】 各々独立して計算可能な複数の計算式を
    ループ内に含むDOループであって、各計算式に含まれ
    る配列が全て同じ次元数の多次元配列でその数および演
    算の種類が同じであり且つ複数の計算式の左辺に現れる
    配列どうし及び右辺の同じ位置に現れる配列どうしのル
    ープの1回の繰り返し当たりの要素数の和が前記コンピ
    ュータの保有するベクトルレジスタのサイズ以下である
    DOループ中の複数の計算式を、最適化対象とする請求
    項1または2記載のベクトル演算方法。
JP26083598A 1998-08-31 1998-08-31 ベクトル演算方法 Expired - Fee Related JP3289685B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP26083598A JP3289685B2 (ja) 1998-08-31 1998-08-31 ベクトル演算方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP26083598A JP3289685B2 (ja) 1998-08-31 1998-08-31 ベクトル演算方法

Publications (2)

Publication Number Publication Date
JP2000076224A JP2000076224A (ja) 2000-03-14
JP3289685B2 true JP3289685B2 (ja) 2002-06-10

Family

ID=17353430

Family Applications (1)

Application Number Title Priority Date Filing Date
JP26083598A Expired - Fee Related JP3289685B2 (ja) 1998-08-31 1998-08-31 ベクトル演算方法

Country Status (1)

Country Link
JP (1) JP3289685B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7548882B1 (en) * 2002-11-05 2009-06-16 Trading Technologies International, Inc. System and method for determining implied market information
JP6555259B2 (ja) * 2014-06-19 2019-08-07 日本電気株式会社 情報処理装置、データ格納方法、及び、プログラム

Also Published As

Publication number Publication date
JP2000076224A (ja) 2000-03-14

Similar Documents

Publication Publication Date Title
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
US5099447A (en) Blocked matrix multiplication for computers with hierarchical memory
US6308250B1 (en) Method and apparatus for processing a set of data values with plural processing units mask bits generated by other processing units
JP4339907B2 (ja) マルチプロセッサ向け最適コード生成方法及びコンパイル装置
US4763255A (en) Method for generating short form instructions in an optimizing compiler
US20070271325A1 (en) Matrix multiply with reduced bandwidth requirements
US6263494B1 (en) Data updating method using overlap area and program converting device for converting update program in distributed-memory parallel processor
CN111381880B (zh) 一种处理器、介质和处理器的操作方法
CN111381939B (zh) 多线程处理器中的寄存器文件
JPH05143332A (ja) 命令スケジユーラを備えたコンピユータ・システム及び入力命令シーケンスを再スケジユールする方法
JPH06103463B2 (ja) コード生成方法
US5524242A (en) System and method for determining the number of parallel processes to be created according to run cost value and parallelization overhead
JP2019511056A (ja) 複素数乗算命令
US6754806B2 (en) Mapping circuitry and method comprising first and second candidate output value producing units, an in-range value determining unit, and an output value selection unit
JPH04336378A (ja) 情報処理装置
US11422781B1 (en) Generation of vector codes for tensor convolutions
JP3477137B2 (ja) 最適化装置及び最適化プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2023525811A (ja) 行列処理のための可変位置シフト
US6564372B1 (en) Critical path optimization-unzipping
JP3289685B2 (ja) ベクトル演算方法
CN110073332A (zh) 向量生成指令
JPH04293150A (ja) コンパイル方法
JP2003241960A (ja) プロセッサ、該プロセッサにおける演算命令処理方法及び演算制御方法
JP2023525812A (ja) 行列処理のための行又は列の位置のマスキング
EP0180077B1 (en) A data processing machine for compiling computer programs

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees