九州大学学術情報リポジトリ
Kyushu University Institutional Repository
ベクトルプロセッサの構成方式に関する研究
弘中, 哲夫
九州大学総合理工学研究科情報システム学専攻
https://doi.org/10.11501/3092828
出版情報:Kyushu University, 1993, 博士(工学), 課程博士 バージョン:
権利関係:
第 4 章
フ口トタイフ MSFV 型フ口セッサの命令 セット・アーキテクチャ
ベクトルプロセッサにおいて,高いベクトル化率を達成するためには可能な限り多くの スカラ命令の機能をベクトル命令はサポートする必要がある.このため,プロトタイプ MSFV型プロセッサでは各々のスカラ演算命令に対応する機能をもっベクトル演算命令 をそれぞれ実現している.しかし,実際のプログラムによく含まれ,ベクトル化を阻害す る要因はスカラ演算命令に対応する適当なベクトル演算命令の不在だけではない.この他 にもベクトル化率低下の要因となるものとして iIF文を含む DOループ
J
があり,それに対する対処法が課題となる[堀越 83][棚 倉86].この章ではプロトタイプMSFV型プロ セッサの命令セット・アーキテクチャについて述べる.
4 . 1 レジスタ・アーキテクチャ
プロトタイプMSFV型プロセッサで使用するレジスタ,およびその本数は以下の通り である.
(1)汎用レジスタ(整数レジスタと使用する場合 GRO,,‑,47,浮動小数点使用する場合 FROrv47と表記):個数48本,語長64ピット.
(2)データ FIFOレジスタ(FOrv 15と表記)1:個数 16本,語長 64ピット,レジスタ長 32語.
1 FIFOベクトル・レジスタの内,デ}タを格納するもの
46
(3)マスク FIFOレジスタ (MO,,‑,15と表記)2:個数 16本,語長 lピット,レジスタ長 32語.
(4) TF(True False :分岐判定に使用する):個数 16本,語長 lピット.
なお,これらのレジスタの内スカラ命令で使用するのは(1), (2), (4)の3つであり ベ クトル命令から使用されるのは(1), (2), (3)の3つである.なお,以下で単にレジスタと 言った場合,データ FIFOレジスタ,あるいは,スカラレジスタを指す.
また,汎用レジスタ,データ FIFOレジスタ,マスク FIFOレジスタには次のようなコ ンデイションコードが付随している.
(1)データ FIFOレジスタ,汎用レジスタ:レジスタには 6ピットのコンデイションコー ドが付随している.この内 2ピットは (EOS: End
0 1
Streamベクトルの終了を示す),と, (VAL: VALidデータの有効/無効を示す)である3. EOSおよびVALは条件付き ベクトル演算で使用される.残りの4ピットはレジスタを用いたスカラ演算およびベ クトル演算の結果生成されるコンデイション・コードが格納される4 コンデイショ ン・コードはレジスタに格納されたデータの型(整数,浮動小数点)によって次のよ うに意味が変わる.
a)整数データ:Z(Zero), N(Negative),
V ( O ¥
セrflow),C(Carη)b)浮動小数点データ :EQ(EQual), GT(GreaterThan), LT(LessThan), UO(UnOrdered) (2)マスク FIFOレジスタ:データ FIFOレジスタと同様コンデイション・コードはEOS
VALの2ピットである.
この他にベクトル命令のベクトル長を決定するレジスタとしてベクトル長レジスタ
( V L R )
が存在する.ただし,以下のベクトル命令は,指定ベクトル長に達しなくても EOSによ り実行を完了する場合がある.
・ベクトル演算命令,マスク付きベクトル演算命令 .ベクトルコピー命令
・すべてのベクトルロード/ストア命令
2 FIFOベクトル・レジスタの内,マスクを格納するもの
3コンデイション・コード EOSとVALの組合せで条件付きベクトル演算で使用されるコンデイション・
コード(EOSJ:End of Stream with Invalid data)お よ び 但OS̲V: End of Stream with Valid data)を表す.
4ストリーミングなどのベクトルースカラ協調処理においてスカラ・ユニットで実行される条件分岐など に利用される.
47
いずれかのソースレジスタから
EOS̲V
の付加したデータあるいはマスクを取り出した 場合,演算を行ったのち実行を完了する.一方,EOS
J:の付加したデータあるいはマスク を取り出した場合,演算を行わずに直ちに実行を完了する.いずれの場合も,ソースレジ スタから取り出したEOS
をそのままデステイネーションレジスタに伝搬する.4 . 2 スカラ命令
プロトタイプ MSFV型プロセッサで用いるスカラ命令については,表4.1に示す.プロ
トタイプ MSFV型プロセツサで採用されている先行条件決定 (advanced‑conditioning)方 式[原 90Jでは演算命令でコンデイション・コード (CC: Condition Code)の設定を行うが 条件決定(Conditioning),分岐先アドレス生成,分岐処理は別々の命令で行う.ここで,条 件決定を分岐に先行して行う命令を先行条件決定 (advanced‑conditioning)命令と呼ぶ.分 岐アドレス生成,分岐処理は 1個の分岐 (branch)命令で行い,この時の分岐アドレス生 成,分岐処理のクリテイカル・パスは短い.ここでは,プロトタイプ MSFV型プロセツ サで採用されている先行条件決定(advanced‑conditioning)方式で使用されている命令につ いて述べる.
TEST
先行条件決定命令.ソースレジスタのコンデイションコードをチェックし,オベ ランドで指定している条件を満たす(ピットが立っている)時はデステイネーショ ンTFレジスタに 1を格納し,条件を満たさない時は0を格納する.ストリ ーミン グ等でスカラ処理の終了判定を行うときにデータF I F O
レジスタのE OS
J:.E O S ̲ V
条件判定などにも使用される.
CAT 比較演算命令.先行条件決定命令で早期に条件決定を行うことが不可能な時に用 いられる.2つのソースデータを比較し条件を満たす時はデステイネーション T下レジスタに lを格納し,条件を満たさない時はOを格納する.
BA 絶対ブランチ命令.ソース T下レジスタの内容が 0の時はプランチを行わない.
BR
レジスタの内容が1の場合,指定されたアドレスへプランチする.ブランチ先ア ドレスの指定は定数,または,汎用レジスタで行われる.
相対プランチ命令.ソース 1下レジスタの内容がOの時はプランチを行わない.
レジスタの内容が lの時,現在のプログラムカウンタに指定されたオフセットを 加えたアドレスへ分岐する.オフセットの指定は定数,または,汎用レジスタで 行われる.
48
モニック 演算命令 ADD Rd← Rsl,Rs2 SUB Rd← Rsl,Rs2 MUL Rd← Rsl,Rs2 DTV Rd← RsI,Rs2 SQRT Rd← Rs AND Rd← RsI,Rs2 OR Rd← Rsl,Rs2 XOR Rd← Rsl,Rs2 SHlFTL Rd← Rs SHIFTR Rd← Rs FLOAT Rd← Rs SINT Rd← RsI UINT Rd← Rs MOVE Rd← Rs ロード/ストア命令 LOAD Rd← Rs STORE Rd← Rs
分岐命令 TEST Tf→Rsl.Rs2 CAT Tf← Rs 1 ,Rs2,Rs3 BA PC← Rsl,TF BR PC← RS,T下
4 . 3 ベクトル命令
加算命令 Rd=Rsl+Rs2 減算命令 Rd=RsI‑Rs2 乗算命令 Rd=RsI xRs2 除算命令 Rd=RsIlRs2
平方根命令 Rsの平方根をRdに傍納する
論理AND命令 RslとRs2の問でANDをとった値をRdに格納する(整 数演算のみ)
論理OR命令 RslとRs2の問でORをとった値をRdに格納する(整数 演算のみ)
論理XOR命令 RslとRs2の聞でXORをとった値をRdに待納する(整 数演算のみ)
左シフト命令 Rsの左への論理シフトした値をRdに俗納する(整数演算 のみ)
右シフト命令 Rsの右への論理シフトまたは算術シフトした値をRdに 格納する(整数演算のみ)
整数→浮動小数点型変換命令 Rsを浮動小数点型のデータに変換し.Rd に傍納する
符号付き整数型変換命令 Rsを符号付き整数型のデータに変換し.Rdに 格納する
符号なし整数型命令 Rsを符号なし整数型のデータに変換し.Rdに侍納 する
レジスタ間移動命令 Rsの値をRdに格納する.RdにVLRを指定するこ とによってベクトル長の設定ができる
ロード命令 Rsで示すメモリアドレスのデータをRdに絡納する ストア命令 む をRdで示すメモリアドレスにストアする
テスト命令 RslをRs2に示す条件に基つ・いて比較した結果をTfに傍納 する
比較テスト命令 RslとRs2をRs3に示す条件に基づいて比較した結果 をTfに格納する
絶対プランチ命令 T下が真を示していたらRsの示すプログラムカウン タにプランチする
相対プランチ命令 τ下が真を示していたら(現在のプログラムカウン タ+Rsの示すプログラムカウンタ)にプランチする
プロトタイプMSFV型プロセツサで用いるベクトル命令は次の 3種に分類で、きる.
.ベクトル演算命令
‑ベクトル・ロード/ストア令命
・ベクトル編集命令
ここではこの 3種の命令について説明する.
49
ベクトル演算命令
4 . 3 . 1
ベクトル演算命A
表4.2
ベクトル加算命令 Rd=Rsl+Rs2 マスク付きベクトJレ加算命令 ベクトル減算命令
マスクイ寸き減ま革命令
ベクトル乗算命令 Rd=Rsl xRs2 マスクイすきベクトル乗算命令 ベクトル除算命令 Rd=Rs1 IRs2 マスク付きベクトル除算命令
ベクトル平方根命令 Rsの平方根をRdに格納する マスク付き平方根命令
ベクトル論理AND命令 RslとRs2の間でANDをとった値をRdに格 納する(整数演算のみ)
マスク付きベクトル論理AND命令(整主主演算のみ)
ベクトル論理OR命令 RslとRs2の間でORをとった値をRdに格納す る(整数演算のみ)
マスク付きベクトル論理OR命令(整数演算のみ)
ベクトル論理XOR命令 RslとRs2の間でXORをとった値をRdに絡 納する(整数演算のみ)
マスク付きベクトル論理XOR命令(整数演算のみ)
ベクトル左シフト命令 Rsの左への論理シフトした値を Rdに絡納する (整数演算のみ)
マスク付きベクトル左シフト命令(整数演算のみ)
ベクトル右シフト命令 Rsの右への論理シフトまたは算術シフトした値 をRdに格納する(整数演算のみ)
マスク付きベクトル右シフト命令(整数演算のみ)
ベクトル整数一浮動小数点型変換命令 Rsを浮動小数点型のデータに変 換し, Rdに絡納する
マスク付きベクトル整数→浮動小数点型変換命令
ベクトル符号付き整数型変換命令 Rsを符号付き整数型のデータに変挽 し, Rdに格納する
マスク付きベクトル符号付き整数型変換命令
ベクトル符号なし整数型命令 Rsを符号なし整数型のデータに変換し.
Rdに傍納する
寸コ
動作 一 ク 一ツ
令 ニ一 命 モ一 算
‑ A雨
ベクトル 明
プロトタイプMSFV型プロセッサで用いるベクトル演算命令を表4.2に示す.
マスク付き演算の3つに分類できる VADDM VADD Rd← RsI,Rs2 比較演算命令,
演算命令は四則演算命令,
Rd← RsI,Rs2ルF
Rd=RsI.Rs2 Rd← Rsl.Rs2
Rd← Rsl,Rs2,MF Rd← Rsl,Rs2 Rd ‑Rs 1 ,Rs2,MF VSUB
VSUBM
デステイネーション・
2つのソースレジスタに対して四則演算を行い,
〉寅 算 員Ij 四
V恥fUL VルR正M
お よ びp 演算時のコンデイション・コードを付け レジスタに演算結果,
Rd← Rsl.Rs2 Rd← RsI.Rs2ルF VDIV
デステイネーション・レジスタはデータ
F I F O
レジスタを て格納する.Rd← Rs VDIVM
VSQRT
指定する場合,最大
2
本のデータF I F O
レジスタをデステイネーションVSQRTM Rd←Rsル1F Rd← Rsl.Rs2 VAND
として指定することができる人
7寅 比 較
Rd← RsI.Rs2ル1F Rd← RsI.Rs2 VAND恥f
VOR
マスクベクトルの生成の仕方の違いから次の 2種が存在する.
算
VORM
2個のソースレジスタに対してベクトル比較演算を行う.
VCOMP
Rd← Rsl.Rs2ル1F Rd← RsI.Rs2 VXOR
VXORM
デステイネーション (複数個指定可能りであるマスク
F I F O
レジスタに格納 比較結果をマスクベクトルとして,Rd← RsI.Rs2.MF Rd← Rs
Rd← Rs恥,σ
VSHIF1工
VSHIFT工M VSHIFTR
2個のソースレジスタに対してベク 比較結果をマスクベクトルとして,
する.
VCOMP
命令同様,トル比較演算を行う.
VWHILEM
Rd← Rs Rd← RsルF VSHlFTRM
Rd← Rs Rd← Rs,恥1F VFLOAT
VFLOATM
デステイネーション(複数個指定可能)であるマスク
F I F O
ただし,
VCOMP
命令と異なり,比 レジスタに格納する.Rd← RsI VSINT
較結果が一度でも偽となったら EOSをすべてのデステイ
Rd← RslルtF VSINTM
この命令はプロト 実行を完了する.
ネーションに送り,
Rd← Rs VUINT
タイプMSFV型プロセッサで独自にループからの飛び出
しを行う
I F
文に対処するために設けた命令である. マスクfすきベクトル符号なし整数型命令ベクトル比較命令 RsIとRs2をRs3の条件に基つ・いて比較した結果を マスクベクトルとしてMFに格納する(MFli複数指定可)
ベクトル実行停止命令 VCOMPM命令と同様にマスクベクトルを生成 する,ただし比較結果が偽になるとただちに実行を終了する(恥仔は複 数 指定可)
Rd← Rsル1F MF← Rs 1 ,Rs2,Rs3 VUINT恥f
VCOル伊
ル 庄 ←Rsl,Rs2.Rs3 VWH比E
対応するマスクベクトル要素が真であるベクトル要素に対してのみ演 デステイネーションレジスタに演算結果を格納する.従来の ベクトルレジスタにおけるマスク付きベクトル演算命令の定義と異な 算を行い,
マスク付き演算
対応するマスクベクトル要素が偽であるベクトル要素に対しては,
空データを生成・格納する.
り,
ベクトル・ロード/ストア命令
4 . 3 . 2
プロトタイプ MSFV型プロセツサで用いるベクトル・ロード/ストア命令については.
ベクトル・ロード/ストア命令にはロード/ストア・アドレスの指定法の違い
これをダブル・デステイネーション指定と呼ぴ,連続するレジスタ番号を持つ2本のデータ FIFOレ ジスタに同一の演算結果を格納できる.
5
51 表4.3に示す.
で次の2通り存在する.
50
最大 16本のマスク FIFOレジスタを指定可.
6
(1)ストライド ・アクセス (等間隔参照方 式):汎用レジスタで指定されたベース・ア ドレス (Bαse)と汎用レジス タで指 定されたストライド (Stride)を用い Address
=
Bαse
+
Stride X 1:(i=
0,…,
n)で参照するアドレスを参照する方式である.(2)リストベク トル・アクセス(間接指標方式):汎用レジスタで指定されたベース・アド レス(Bαse)と汎用レジスタで指定されたストライド(Stn:de)
,
および, データ FIFOレジスタで指定されたリストベクトル (IndeXi)を用い, Add7・essニ Bαse
+
St7・idex Inde.'ri(i=
0,…, n)でメモリを参照する方式である.このよう なアド レシングを用いメモリから最大2本のデステイネーション・レジスタに ベクト ルをロードまたはストアする.
これらの通常のロード/ストア命令の他にマスク付きロード/ストア命令が存在する. ~ 、~
れらのロ ード/ス トア命令はマスクベクトルの値に従ってベクトルをロード/ストアするか 否かだけでなく, ベクトルの圧縮/伸長を行うか否かで次の4種に分類できる.
VLOADM
VCLOADM
VSTOREM
VESTOREM
マスク付きベクトルロード命令. メモリ上のベクトルに対して 対応する マスクベクトル要素が真であるベクトル要素のみをデステ イネーションレ ジスタにロードする.対応するマスクベクトル要素が偽であるベクトル要 素に対しては, 空データをロードする.
マスク付きベクトル圧縮ロード命令. メモリ上のベクトルに対して,対応、
するマスクベクトル要素が真であるベクトル要素のみをデステイネーショ ンレジスタにロードする.対応するマスクベクトル要素が偽であるベクト ル要素に対しては, ロードを行わない.
マスク付きベクトルストア命令.ソースレジスタ上のベクトルに対して,
対 応するマスクベクトル要素が真であるベクトル要素のみをメモリにス トアする.対応するマスクベクトル要素が偽であるベクトル要素に対して
ストアを行わない(そのベクトル要素は捨てられる).
は,
マスク付きベクトル伸長ストア命令. メモリ上のベクトルに対して,対応、
するマスクベクトル要素が真であるベクトル要素へソースレジスタからス トアする.対応するマスクベクトル要素が偽であるベクトル要素へは, ス トアしない(ベクトル要素は次にマスクベクトル要素が真になるまで保存 される).
表 4.3 ベクトル・ロード/ストア命令セット
一」モーツク ロード/ストア命令 重力作
VLOAD Rd←B,I
ベクトルロード命令B伺ase)+I(lndex)xS(S凶de)で計算されるデータをRd に倦納する(S凶deは事前に註定)
VLOAD恥f Rd←及 川 町 マスク付きベクトルロード命令
VCLOADM Rd←BよMF
マスク付きベクトjレ圧縮ロード命令マスク値が真の時のみRdにデータを
VSTORE 日I←Rs 格納する
ベクトルストア命令Rsをストアする
VSTOREM B,I←RS.MF
マスク付きベクトルストア命令
VESTOREM B.I←Rsル1F マスク付きベクトル伸長ストア命令マスク値が真になるまでRsからデー タを読み込まない
4 . 3 . 3 ベクトル編集命令
プロトタイプMSFV型プロセツサで用いるベクトル編集命令については,表
4
.4に示す. ここでは各命令の動作を説明する.VSPLITM
VCOpy
ベクトル分配命令.対応するマスクベクトル要素の真偽に従って,ソースレ ジスタから読み込んだベクトル要素を 2個のデステ イネーションレジスタに 分配する.分配し終わると,その旨を示すコンデイシヨンコード (EOS:End Of Stream)を両デステ イネーションレジスタに送る.EOSには,次の2種 類がある.
EOS̲V: ソースレジスタからの最終データに付随する EOSで,データが 有効である旨を示す.
EOS̲l : ソースレジスタからの最終データを受け取らない側のレジスタ には,分配終了を通知するための空データを分配する. この空データ に付随する EOSで データが無効である旨を示す.
ベクトルコピー命令.データ FIFOレジスタ内のデータは破壊読出しなの で複数のベクトル命令で同じソースデータ FIFOレジスタを共有できない.
そのような場合,データ FIFOレジスタ内のデータをコピーする必要があ る.VCOpy命令はソース・レジスタの値を 2つのデステイネーション・レ ジスタに格納する.
VMAX
,
VMIN 最大値/最小値探索命令.2つのソース・レジスタの値を比較して,値 が大きい方(小さい方)をデステイネーション・レジスタに格納する.VGENAS 等差数列生成命令.初項0,公差がソース・レジスタの値とする等差数列を デステイネーション・レジスタに格納する.リストベクトル・アクセスな
53
VSPUTM
VCOpy VCOpy恥t Vル仏X VルfAXM Vル包N VMINM VGENAS VGENASM
ーモニック 編集命令
Rd← Rs.MF
Rd← Rs Rd← RsルfF
Rd← Rsl,Rs2 Rd← Rsl,Rs2ルfF
Rd← Rsl.Rs2 Rd← Rsl,Rs2,恥{F Rd← Rs Rd← RS,MF
表4.4 ベクトル編集命令
動作
ベクトル分配命令 て格納する
Rsをマスク値の真偽に基つ・き 2つのRdに振り分け
ベクトルコピー命令 Rsの値をRdにコピーする.
マスク付きベクトJレコピー命令
ベクトJレ最大値命令 RslとRs2の値の大きい方をRdに格納する マスク付きベクトル最大値命令
ベクトル最小値命令 RslとRs2の値の小さい方をRdに絡納する マスク付きベクトル最小値命令
ベクトル等差数列生成命令 初項0公差Rsの等差数列をRdに傍納する マスク付きベクトル等差数列生成命令 マスク値が真の時のみ数列をRd に格納する
どで使用するリストベクトルを生成する.
VGENAS島f インデックスリスト生成命令.初期値 0の等差数列を生成する.公差は,
ソーススカラレジスタにより与える.生成される数列のデステイネーショ ンFIFOレジスタへの格納は マスクベクトルにより制御される.数列の 最終データには EOS̲VまたはEOS̲]が付力目される.
4 . 4 マク口演算への対処法
総和,内積,最大値探索,回帰演算などを行う DOループは,本来ベクトル化に不適な データ依存関係にあるので,通常のベクトル演算用のハードウェアではベクトル処理でき ない.そこで,従来のベクトルプロセツサではこれらをマクロ演算として定義し,特殊な 専用ハードウェアを用いてベクトル処理を行っている.これに対してプロトタイプMSFV 型プロセッサでは,M S円Fアーキテクチャの特長である柔軟なチェイニング能力により,
特別なハードウェアを必要とすることなくベクトル処理を可能としている.
4 . 4 . 1 フ口トタイプ MSFV 型プロセッサにおける処理
プロトタイプMSFV型プロセツサでは,従来のベクトルプロセッサと異なり,チェイニ ングを行う際の制限が,命令出現順序(先行/後続),命令の種類(ベクトル/スカラ),命令 数,等ではなく fFIFOベクトル・レジスタに対する単一書込み&単一読出し
J
という条 イ牛だけにある. この条件さえ満足すれば,先行命令→後続命令はもちろん,後続命令→先 ベクトル命令→スカラ命令,スカラ命令→ベクトル命令,および,同一命令内で 行命令,のチエイニングが可能である.これにより,図 4.1に示すように,イタレーシヨン聞に依 存関係がある演算でも,単純命令をチエイニングすることでベクトル処理が可能である.
以下では次の5つのタイプのマクロ演算について適用する対応法を示す.
(1)総和型演算 (2)内積型演算 (3)累積型演算
(4)最大値/最小値探索 (5)回帰演算
(1)‑‑‑(3)の総和型,内積型,累積型の各演算に関しては,上記のような柔軟なチェイニ ング能力により,単純命令をチエイニングするだけで、特別なハードウエアを必要とせずに 従来のベクトルプロセッサ同様の処理が行える.
人?の最大値劇値探索については, VMAX(VMIN)命令を用意している VMAX(VM別) 命令は, 2つのソース・レジスタの大小比較を行い,大きい(小さい)方の値をデステイ 不一ションに格納する. さらに, VMAX(VMIN)命令のデステイネーションをチェイニン グにより,ソース・オペランドとして演算を繰り返すととで最大値(最小値)を得る.
(5)の一次回帰演算については, 2.2.1節で、述べた逐次ベクトル処理が図4.1(c)に示すよ うに同様に行える.これについては, 4.4.2節で具体的に説明する.また,並列ベクトル処 理で実現されているのと同様な一次回帰演算の高速化を仮想パイプラインを併用するこ
とにより実現可能である.つまり,偶数要素と奇数要素を異なる仮想パイプラインで独立 に実行する.増加した分の演算数は,仮想パイプラインを切り替えることにより,パイプ ラインの空きステージを利用して処理する.
4 . 4 . 2 回帰演算の処理例
プロトタイプ MSFV型プロセッサにおいて一次回帰演算を逐 図4.l(a)の例を用いて,
次ベクトル実行する際の処理について述べる.
(1)まず, (a)のMOVE命令で, データ FIFOレジスタ FOの初期化のため, ベクトル長 を1に設定する.
(2) (b)のVLOAD命令により,実行前にデータ FIFOレジスタ FOを初期化する. つま り, ベクトルデータのうち X(Q)をロードする.
(3)次に, (c)のMOVE命令でベクトル長を 100に設定する.
55
(4) VLOAD命 令 (d)お よ び(e)は,ベクトル AおよびベクトルBをデータ FIFOレジ ス 夕 刊 お よ びF2にそれぞれロードする.(f)のVMUL命令はベクトル Xとベクト ルB を乗算する.
(5) (g)のVADD命令は,乗算結果のベクトル要素とベクトル Aのベクトル要素を加算 し,それを 2つのデステイネーションであるデータ FIFOレジスタ FO,F4に格納す る.F4はメモリへのストアのために, FOは回帰演算のために用いられる.
(6) (h)のVSTORE命令で,演算結果をメモリに格納する.
4 . 5 条件付きベクトル演算への対処法
IIF文を含む DOループ」のベクトル化は困難である.そこで, IJF文を含むDOルー プ」に対処するため MSFVアーキテクチャの特徴を利用した,ベクトル分配/併合方式,
ベクトル実行停止の2つの新しいベクトル化手法をプロトタイプ MSFVアーキテクチャ に導入した[岡崎90]. また, IIF文を含むDOループ」全体がベクトル化可能でなければ,
コンパイラ手法である部分ベクトル化,および, MSFVアーキテクチャの特長であるベ クトルースカラ協調処理により対処する.ここではそれらの対処法について述べる.
4
ふ1 ベクトル分配/併合方式
従来のベクトルプロセッサおよび自動ベクトル化コンパイラは, IIF文を含む DOルー プ」を以下の方法で対処している[小高88][三浦 88][渡 辺88].
ベクトル比較演算命令等で, IF文のTHEN項あるいは ELSE項に対応するマスクベク トルを生成する.マスクベクトルを用いたベクトル化の方、法には,次の 2方式がある.
(1)マスク付きベクトル演算方式:マスクイナきベクトル演算命令が,通常のベクトル演 算命令と同様に,すべてのベクトル要素に対して演算を行う.ただし,対応するマス クベクトル要素が真(あるいは偽)であるベクトル要素に対してのみ演算結果を格納 する.
(2)ベクトル収集/拡散(gather/sca tte r)方式:まず,対応するマスクベクトル要素が真 (あるいは偽)であるベクトル要素のみを収集したベクトルを生成する.演算は,この 収集したベクトルに対して行う.したがって, (1)のように元のベクトルの全要素に 対して演算を行う必要がない.演算結果であるベクトルに対しては,各要素がベクト
56
ル内の正しい位置に格納されるようにこれを拡散する.これには,次の2つの方法が 存在する.
• γ < <
クトル圧縮/パイ申長(仕C仰 r陀問叩ιe白 削s幻f口si々
le飢切x勾m
抑仰p仰 仰y川αンデツクスが,対応するマスクベクトル要素のインデックスで直接与えられる ベクトル圧縮/伸長命令により,ベクトルレジスタ問あるいはベクトルレジスター
メモリ問で,ベクトルの収集/拡散を行う.
・リストベクトル・アクセス方式:収集/拡散すべきベクトル要素のインデックス が,インデックス・リストにより与えられる.これにはまず,マスクベクトルか らインデックス・リストを作成して,元のベクトルがリスト・ベクトルとしてア クセスできるようにする必要がある.そして, リストベクトル・アクセス命令 と?りリストベクトルをロード/ストアすることで,当該ベクトルの収集/拡散
5
イ丁つ.
いずれの方法も MSFVアーキテクチヤでは実現可能である.ベクトル圧縮/伸長はそれ ぞれロード/ストア命令として実現できる.
プロトタイプMSFVアーキテクチヤではこれらに加えてベクトル収集/拡散方式の l方 式として,ベクトル分配/併合(防ctorSplit‑Merge)方式を導入する[岡崎90]・ベクトル分 配/併合方式は, THEN項と ELSE項が同ーのソース・オペランドおよびデステイネーシ守 ン オペランドを用いる場合に特化したものである まずp 対応するマスクベクいレ要素 の真偽に従って,元の各ベクトル要素を 2個のベクトル(真ベクトルおよび偽ベクトル) のいずれかに分配する.THEN項 お よ びELSE項の演算は,それぞれ真ベクトルおよび偽 ベクトルに対して行う.これは,同時実行可能である.演算結果である 2個のベクトルは 同一マスクベクトル要素の真偽に従って,メモリ上で併合される.表4.5に従来のベクト ル化方式との所要処理量の比較を行った結果を示す.
4 . 5 . 2 ベクトル実行停止方式
ルーフ。外への飛び出しのあるループは通常ベクトル化不可能である.この様なループを ベクトル化するに当り次に述べる問題が存在する.
(1)得られたベクトル・コードを実行した場合,オリジナルのスカラ・コードの方が高 速に実行される可能性がある.
(2)ベクトル化された結果,無効な演算結果を生成する可能性があり,そのためオリジ ナルのスカラ・コードと異なる動作をする可能性がある.
57
(3)ベクトル化されたループは実行された結果,オリジナルのスカラ・コードが行わな い演算を行う可能性がある.それに伴い,オリジナルのスカラ・コードでは生じない 演算例外が生じる可能性がある.
これらの問題を解決するためプロトタイプMSFV型プロセツサではマスク付きベクト ル演算を拡張したベクトル命令実行停止機能を備えることで,ループ外への飛び出しのあ るループのベクトル化を可能にする.
︺持 品ザ
・告 会 話 俗︑ 血唱 え
(‑ 川
h
山︒ )妙 城一
¥
ム
km V九 円︑ 四凶 勺出 い
U
Aれて
eE WZ
国 ロ
ζ
ベクトルースカラ協調処理
単一のループのままではベクトル化不可能であるループを,複数の部分ループに分割 することで分割した幾つかの部分ループをベクトル化することが可能になる場合がある.
この場合,ベクトル化可能な部分ルーフ。は4.5.1節の方法で対処し,ベクトル化不可能な 部分ループはスカラ命令のループのままとする.しかし,この対処法には次の問題点が
ば円以同誌や心部 ある.
ιkmyA町﹂﹁トム
ιれV
九 時 い ト ム
ベクトル化可能な部分ループとベクトル化不可能な部分ループとの聞にデータ依存関係 ベクトル・ユニットとスカラ・ユニット問でデータの このとき,
が存在することがある.
凶山口凶川田
ば円 札ド ペ
(b
w部
ベレ 吟門 も明
このデータ授受の方法には,メモリ経由とレジスタ経由の2つの方法 レジスタ経由で行う場合,従来のベクトルレジスタでは 授受が必要となる.
が可能だが, メモリ経由は遅い.
通常のスカラ命令から直接アクセス不可能なので,ベクトルレジスタースカラレジスタ転 送を別に行う必要がある.しかも,同一ベクトルレジスタに対して通常のベクトル命令に よるアクセスと当該データ転送とをデータ依存関係の保証をしながら同時に行うのは困
立証
ム
これら 2つのレジスタアクセスは一般にオーバラップされない.
これに対し,プロトタイプ MSFV型プロセツサではベクト jレースカラ協調処理により,
ベクトル化可能な部分ループとベクトル化不可能な部分ループとの聞のデータ依存関係に 効率良く対処する.すなわち,ベクトル・ユニットとスカラ・ユニット聞のデータ授受に データ FIFOレジスタを用いる.これにより,ベクトル命令およびスカラ命令からの同一 さらには,部分ループ同士のオーバラップ実行を可能とする.
レジスタへの同時アクセス
フロトタイプ MSFV 型プロセッサでの対処例
ベクトル分配/併合方式
ベクトル分配/併合方式を説明する.
4 . 5 . 3
訴えム
km yA
町 t干 トム 訴え訴え Z凶戸閉じ司
凶的
Jω 一九 回司
Z凶同円引い町
難である. よって,
ヘムれV
九 時 い え
l
ロリ
﹃間
味ゃ
い廊
訴え
︐一
︑
V九時﹂r
・ ム
l訴えム
hm yA 町が り{ l
4 . 6
凶句 同川 同州 四
Z凶
国
' Hい じ ﹃
ロ札
ド吟
門︑
回同
的
J
凶一 同﹃
ロレ iw 回Z凶出﹄﹃eLPh
4 . 6 . 1
図4.2の例を用いて,
JAn J 「
d全財 ト
E Z
♀+11cj十L。
で‑ム 3ミw午句旬
d
哩zミ
二 品
+1+1+れ、召Fト 土 と ご 町ト
て
「
? く
的勺
斗J
。
号
、ト +1..‑.. +IN
~I"'"
c : :
":"'11
│ 5
~ 11"':'
.L. ー、̲.‑I <u ) 匂 .L.
号
、 ど +的 Tく
て + む +士、
. J .
ーK 』h「 句、h 「 伊「
ト
。
( 匂、 AむN+。
.L. + +I~
1く col
QJ ,.col +
出 + + + 司;j
出 芝 ト
Hー「
『ト 出提 さ
出3
ム露子
pu、J F pS .L.
号て、ー』4き
‑ 。
、c、ど + ++ +I~ ~
ト
.L. col Q; ~I+ +
U r
i〈M + + + ご と ト場、』「 明F判
モート
f1費2吾出子
五
=
、 時
町
。
ト ミ .L.
+ ",1+
?
く ~ 十 日
府U
年策止:t: + 相 +
も
、 ト
tト勾
士 ミ ペ
ム P
号
、「
てJ 町匂
府U
士
、 守 ー、ぷ +
町じ 号
、 1'‑‑
『ト rく .L.
+1", +
ヤく「
じ +司col
崎U
、 令
,
ー、+ 十
号
、 col 町F、 rく +
ヤ 噌ト
起回 訴目 話回 ム、ト
LL l 訴垣ムト ャぐヘl ロ K 1‑1マ
L l...̲j̲ 」
総試
Q酬刷嗣
出制 剛山 医
Q ょ税 J
収ど ム
﹁ム
hい
' ど ハ
b
快 足
m u.
守 山 附
59
58
(1)まず~, (a)の
MOVE
命令でベクトル長を設定する.( 2 ) ( b )
のVLOAD
命令でベクトルA
をロードする.ここで,ベクトルA
はI F
文 の 条 件判定とルーフ。本体の演算の双方に用いるので,2
個のデータF I F O
レジスタF O
とF l
にロードする.( 3 )
(c)のVCOMP
命令は,F O
のベクトルA
に対して比較演算( I F
の条件判定)を行う.その結果ベクトルはマスクベクトルとして,マスク
F I F O
レジスタMOrvM4
に格納 する.( 4 ) ( d )
のVSPLITM
命令は,MO
のマスクベクトルに従って,F l
のベクトルA
をTHEN
項側の
F 2
(真ベクトルA )
とELSE
項側のF 3
(偽ベクトルA )
に分配する.これ以 降は,THEN
項とELSE
項とで並列に処理が進む.ベクトルA
の分配が終了すると,EOS ( E O S ̲ V
またはE O S ̲ ] )
をF 2
とF 3
に送る.( 5 ) THEN
項では, (e)のVCLOADM
命 令 がMl
のマスクベクトルに従ってベクトルB を圧縮ロードし, (t)のVSUB
命令が真ベクトルA
と圧縮ベクトルBの減算を行い,得られた結果を
( g )
のVESTOREM
命 令 がM2
に従ってベクトルD
の真側の結果を メモリに格納する.一方,ELSE
項では,( h )
のVCLOADM
命 令 がM3
のマスクベク トルに従ってベクトルC を圧縮ロードする.そして, (i)のVMUL命令が偽ベクトルA
とスカラ X( F R 2 )
との乗算を行った結果に, (j)のVADD
命令が圧縮ベクトルC
を 加算し,得られた結果を( k )
のVESTOREM
命 令 がM4
に従ってベクトルD
の偽側 の結果をメモリに格納する.つまり,( g ) ( k )
のVESTOREM
命令によりメモリ上でベ クトルD
を併合する.ベクトル命令(t)(i)(j)の命令実行は,それぞれF 2
,F 3
,F 7
か らEOS
を取り出すまで続く.4 . 6 . 2 ベクトル命令実行停止機能
図
4 . 3 ( a )
に示すプログラム例を用いて,従来ベクトル化が不可能であった「ループ外へ の飛び出しのあるループJ
をベクトル化可能とするベクトル命令実行停止機能について述 べる.(1)まず, (a)の
MOVE
命令で,マスクF I F O
レジスタM O r v M 3
を初期化するためのベ クトル長を M(4.7.2節参照)に設定する.( 2 ) ( b )
のVCOMP
命令の比較結果は常に真となる.これをマスクF I F O
レジスタMOrvM3
に格納して初期化を行う.
( 3 )
次に, (c)のMOVE
命令でベクトル長を 100に設定する.60
( 4 ) VLOADM
命 令(d)は,ベクトルA
をデータF I F O
レジスタF O
にロードする.( 5 )
(e) の V~恒正E 命令では,ベクトル A に対して比較演算を行う.比較結果が真の場 合,それをデステイネーションであるマスクF I F O
レジスタMOrvM7
に格納する.比 較結果が偽の場合は,EOS
をすべてのデステイネーション・マスクF I F O
レジスタに 出力して,実行を完了する.(6)マスク付きベクトル演算およびロード/ストア命令(d)(t)
r v (
l)は,それぞれのソース・マスク
F I F O
レジスタに従って,マスク付き演算を実行する.命令の終了は,所定の ベクトル長に達したか,あるいは,ソース・マスクF I F O
レジスタからEOS
を検出したときである.
4 . 6 . 3 ベクト
jレースカラ協調処理図4.4(a)に示すプログラム例を用いて,ベクトルースカラ協調処理について述べる.
図4.4(a)の二重ループでは,外側のループはベクトル化可能であるが,内側のループは ループ外への飛び出しがあるためベクトル化不可能である.よって,ループを分割する.
ベクトル化可能なループはベクトル圧縮/伸長方式によりベクトル化される.また,ベク トル化不可能な部分ループにデータを渡すため, (η の
VSUB
命 令 は , デ ー 夕 刊FO
レジ ス 夕 日 に も 演 算 結 果 を 格 納 し て い る .これにより,ベクトル命令
( b ) r v ( g )
を実行するベクトル・ユニットとスカラ命令( h ) r v ( w )
実行するスカラ・ユニットは,データ
F I F O
レジスタF 5
に関するデータ依存関係を保証 する範囲内において並列動作可能である.4 . 7 条件付きベクトル演算に対する概略評価
マスク付きベクトル演算方式,ベクトル分配/併合方式,リストベクトル・アクセス方 式,ベクトルースカラ協調処理,および,ベクトル命令実行停止機能の性能をシミュレー ションにより評価した[岡崎90][橋 本 91].シミュレータは第 5章 で 述 べ る プ ロ ト タ イ プ MSFV型プロセッサの構成に基づいて,動作を機能レベルでシミュレーションするソフト ウェア・シミュレータ[弘中 90c]を用いた.入力はプロトタイプMSFV型プロセッサの オブジェクト・コード(ベクトルおよびスカラ命令)である.
・命令と実パイプラインの対応関係
仮想パイプラインに割り当てられた各々のベクトル命令は次の実パイプラインで実行さ れるとした.
61