• 検索結果がありません。

ベクトルプロセッサの構成方式に関する研究

N/A
N/A
Protected

Academic year: 2021

シェア "ベクトルプロセッサの構成方式に関する研究"

Copied!
41
0
0

読み込み中.... (全文を見る)

全文

(1)

九州大学学術情報リポジトリ

Kyushu University Institutional Repository

ベクトルプロセッサの構成方式に関する研究

弘中, 哲夫

九州大学総合理工学研究科情報システム学専攻

https://doi.org/10.11501/3092828

出版情報:Kyushu University, 1993, 博士(工学), 課程博士 バージョン:

権利関係:

(2)

第 4 章

フ口トタイフ MSFV 型フ口セッサの命令 セット・アーキテクチャ

ベクトルプロセッサにおいて,高いベクトル化率を達成するためには可能な限り多くの スカラ命令の機能をベクトル命令はサポートする必要がある.このため,プロトタイプ MSFV型プロセッサでは各々のスカラ演算命令に対応する機能をもっベクトル演算命令 をそれぞれ実現している.しかし,実際のプログラムによく含まれ,ベクトル化を阻害す る要因はスカラ演算命令に対応する適当なベクトル演算命令の不在だけではない.この他 にもベクトル化率低下の要因となるものとして iIF文を含む DOループ

J

があり,それ

に対する対処法が課題となる[堀越 83][棚 倉86].この章ではプロトタイプMSFV型プロ セッサの命令セット・アーキテクチャについて述べる.

4 . 1   レジスタ・アーキテクチャ

プロトタイプMSFV型プロセッサで使用するレジスタ,およびその本数は以下の通り である.

(1)汎用レジスタ(整数レジスタと使用する場合 GRO47,浮動小数点使用する場合 FROrv47と表記):個数48本,語長64ピット.

(2)データ FIFOレジスタ(FOrv 15と表記)1:個数 16本,語長 64ピット,レジスタ長 32語.

FIFOベクトル・レジスタの内,デ}タを格納するもの

46 

(3)マスク FIFOレジスタ (MO15と表記)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コンデイション・コード EOSVALの組合せで条件付きベクトル演算で使用されるコンデイション・

コード(EOSJ:End of Stream with Invalid data)お よ び 但OS̲V: End of Stream with Valid data)を表す.

4ストリーミングなどのベクトルースカラ協調処理においてスカラ・ユニットで実行される条件分岐など に利用される.

47 

(3)

いずれかのソースレジスタから

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 RslRs SUB  Rd RslRs2  MUL  Rd RslRs2  DTV  Rd RsIRs2  SQRT  Rd Rs  AND  Rd RsIRs2  OR  Rd RslRs XOR  Rd RslRs2  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  TfRsl.Rs CAT  Tf Rs 1 Rs2Rs3  BA  PC RslTF  BR  PC RST

4 . 3   ベクトル命令

加算命令 Rd=Rsl+Rs2  減算命令 Rd=RsIRs2  乗算命令 Rd=RsI xRs2  除算命令 Rd=RsIlRs2 

平方根命令 Rsの平方根をRdに傍納する

論理AND命令 RslRs2の問でANDをとった値をRdに格納する(整 数演算のみ)

論理OR命令 RslRs2の問でORをとった値をRdに格納する(整数 演算のみ)

論理XOR命令 RslRs2の聞でXORをとった値をRdに待納する(整 数演算のみ)

左シフト命令 Rsの左への論理シフトした値をRdに俗納する(整数演算 のみ)

右シフト命令 Rsの右への論理シフトまたは算術シフトした値をRd 格納する(整数演算のみ)

整数→浮動小数点型変換命令 Rsを浮動小数点型のデータに変換し.Rd  に傍納する

符号付き整数型変換命令 Rsを符号付き整数型のデータに変換し.Rd 格納する

符号なし整数型命令 Rsを符号なし整数型のデータに変換し.Rdに侍納 する

レジスタ間移動命令 Rsの値をRdに格納する.RdVLRを指定するこ とによってベクトル長の設定ができる

ロード命令 Rsで示すメモリアドレスのデータをRdに絡納する ストア命令 む をRdで示すメモリアドレスにストアする

テスト命令 RslRs2に示す条件に基つ・いて比較した結果をTfに傍納 する

比較テスト命令 RslRs2Rs3に示す条件に基づいて比較した結果 をTfに格納する

絶対プランチ命令 T下が真を示していたらRsの示すプログラムカウン タにプランチする

相対プランチ命令 τ下が真を示していたら(現在のプログラムカウン +Rsの示すプログラムカウンタ)にプランチする

プロトタイプMSFV型プロセツサで用いるベクトル命令は次の 3種に分類で、きる.

.ベクトル演算命令

‑ベクトル・ロード/ストア令命

・ベクトル編集命令

ここではこの 3種の命令について説明する.

49 

(4)

ベクトル演算命令

4 . 3 . 1  

ベクトル演算命A

表4.2

ベクトル加算命令 Rd=Rsl+Rs2  マスク付きベクトJレ加算命令 ベクトル減算命令

マスクイ寸き減ま革命令

ベクトル乗算命令 Rd=Rsl xRs2  マスクイすきベクトル乗算命令 ベクトル除算命令 Rd=Rs1 IRs マスク付きベクトル除算命令

ベクトル平方根命令 Rsの平方根をRdに格納する マスク付き平方根命令

ベクトル論理AND命令 RslRs2の間でANDをとった値をRdに格 納する(整数演算のみ)

マスク付きベクトル論理AND命令(整主主演算のみ)

ベクトル論理OR命令 RslRs2の間でORをとった値をRdに格納す る(整数演算のみ)

マスク付きベクトル論理OR命令(整数演算のみ)

ベクトル論理XOR命令 RslRs2の間でXORをとった値をRdに絡 納する(整数演算のみ)

マスク付きベクトル論理XOR命令(整数演算のみ)

ベクトル左シフト命令 Rsの左への論理シフトした値を Rdに絡納する (整数演算のみ)

マスク付きベクトル左シフト命令(整数演算のみ)

ベクトル右シフト命令 Rsの右への論理シフトまたは算術シフトした値 Rdに格納する(整数演算のみ)

マスク付きベクトル右シフト命令(整数演算のみ)

ベクトル整数一浮動小数点型変換命令 Rsを浮動小数点型のデータに変 換し, Rdに絡納する

マスク付きベクトル整数→浮動小数点型変換命令

ベクトル符号付き整数型変換命令 Rs符号付き整数型のデータに変挽 Rdに格納する

マスク付きベクトル符号付き整数型変換命令

ベクトル符号なし整数型命令 Rsを符号なし整数型のデータに変換し.

Rdに傍納する

寸コ

動作 ク 一ツ

A

ベクトル

プロトタイプMSFV型プロセッサで用いるベクトル演算命令を表4.2に示す.

マスク付き演算の3つに分類できる VADDM VADD  Rd RsIRs 比較演算命令,

演算命令は四則演算命令,

Rd RsIRs2F

Rd=RsI.Rs2  Rd Rsl.Rs2 

Rd RslRs2MF  Rd RslRs2  Rd Rs Rs2MF  VSUB 

VSUBM 

デステイネーション・

2つのソースレジスタに対して四則演算を行い,

〉寅 算 員Ij 四

V恥fUL VRM

お よ びp 演算時のコンデイション・コードを付け レジスタに演算結果,

Rd Rsl.Rs2  Rd RsI.Rs2F VDIV 

デステイネーション・レジスタはデータ

F I F O

レジスタを て格納する.

Rd Rs  VDIVM 

VSQRT 

指定する場合,最大

2

本のデータ

F I F O

レジスタをデステイネーション

VSQRTM  RdRsル1F Rd Rsl.Rs2  VAND 

として指定することができる人

7寅 比 較

Rd RsI.Rs2ル1F Rd RsI.Rs2  VANDf

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

VSHIFTM VSHIFTR 

2個のソースレジスタに対してベク 比較結果をマスクベクトルとして,

する.

VCOMP

命令同様,

トル比較演算を行う.

VWHILEM 

Rd R Rd RsF VSHlFTR

Rd Rs  Rd Rs1F VFLOAT 

VFLOATM 

デステイネーション(複数個指定可能)であるマスク

F I F O

ただし,

VCOMP

命令と異なり,比 レジスタに格納する.

Rd RsI  VSINT 

較結果が一度でも偽となったら EOSをすべてのデステイ

Rd RslルtF VSINTM 

この命令はプロト 実行を完了する.

ネーションに送り,

Rd Rs  VUINT 

タイプMSFV型プロセッサで独自にループからの飛び出

しを行う

I F

文に対処するために設けた命令である. マスクfすきベクトル符号なし整数型命令

ベクトル比較命令 RsIRs2Rs3の条件に基つ・いて比較した結果を マスクベクトルとしてMFに格納する(MFli複数指定可)

ベクトル実行停止命令 VCOMPM命令と同様にマスクベクトルを生成 する,ただし比較結果が偽になるとただちに実行を終了する(恥仔は複 数 指定可)

Rd Rsル1F MF Rs 1 Rs2Rs3  VUINTf

VCOル伊

ル 庄 ←RslRs2.Rs3 VWHE

対応するマスクベクトル要素が真であるベクトル要素に対してのみ演 デステイネーションレジスタに演算結果を格納する.従来の ベクトルレジスタにおけるマスク付きベクトル演算命令の定義と異な 算を行い,

マスク付き演算

対応するマスクベクトル要素が偽であるベクトル要素に対しては,

空データを生成・格納する.

り,

ベクトル・ロード/ストア命令

4 . 3 . 2  

プロトタイプ MSFV型プロセツサで用いるベクトル・ロード/ストア命令については.

ベクトル・ロード/ストア命令にはロード/ストア・アドレスの指定法の違い

これをダブル・デステイネーション指定と呼ぴ,連続するレジスタ番号を持つ2本のデータ FIFO ジスタに同一の演算結果を格納できる.

51  表4.3に示す.

で次の2通り存在する.

50 

最大 16本のマスク FIFOレジスタを指定可.

(5)

(1)ストライド ・アクセス (等間隔参照方 式):汎用レジスタで指定されたベース・ア ドレス (Bαse)と汎用レジス タで指 定されたストライド (Stride)を用い Address

Bαse 

Stride 1:(i 

0,…

, 

n)で参照するアドレスを参照する方式である.

(2)リストベク トル・アクセス(間接指標方式):汎用レジスタで指定されたベース・アド レス(Bαse)と汎用レジスタで指定されたストライド(Stn:de)

および, データ FIFO

レジスタで指定されたリストベクトル (IndeXi)を用い, Add7ess Bαse

St7idex  Inde.'ri(i 

0,…, n)でメモリを参照する方式である.

このよう なアド レシングを用いメモリから最大2本のデステイネーション・レジスタに ベクト ルをロードまたはストアする.

これらの通常のロード/ストア命令の他にマスク付きロード/ストア命令が存在する. ~ 、~

れらのロ ード/ス トア命令はマスクベクトルの値に従ってベクトルをロード/ストアするか 否かだけでなく, ベクトルの圧縮/伸長を行うか否かで次の4種に分類できる.

VLOADM 

VCLOADM 

VSTOREM 

VESTOREM 

マスク付きベクトルロード命令. メモリ上のベクトルに対して 対応する マスクベクトル要素が真であるベクトル要素のみをデステ イネーションレ ジスタにロードする.対応するマスクベクトル要素が偽であるベクトル要 素に対しては, 空データをロードする.

マスク付きベクトル圧縮ロード命令. メモリ上のベクトルに対して,対応、

するマスクベクトル要素が真であるベクトル要素のみをデステイネーショ ンレジスタにロードする.対応するマスクベクトル要素が偽であるベクト ル要素に対しては, ロードを行わない.

マスク付きベクトルストア命令.ソースレジスタ上のベクトルに対して,

対 応するマスクベクトル要素が真であるベクトル要素のみをメモリにス トアする.対応するマスクベクトル要素が偽であるベクトル要素に対して

ストアを行わない(そのベクトル要素は捨てられる).

は,

マスク付きベクトル伸長ストア命令. メモリ上のベクトルに対して,対応、

するマスクベクトル要素が真であるベクトル要素へソースレジスタからス トアする.対応するマスクベクトル要素が偽であるベクトル要素へは, ス トアしない(ベクトル要素は次にマスクベクトル要素が真になるまで保存 される).

表 4.3 ベクトル・ロード/ストア命令セット

一」モーツク ロード/ストア命令 重力作

VLOAD  RdBI 

ベクロー命令Base)+I(lndex)xS(Sde)で計算されるデータをRd に倦納する(Sdeは事前に註定)

VLOADf Rd及 川 町 マスク付きベクトルロド命令

VCLOADM  RdBMF

マスク付きベクjレ圧縮ロード命令マスク値が真の時のみRdにデータを

VSTORE  IRs 格納する

ベクトルストア命令Rsをストアする

VSTOREM  BIRS.MF 

マスク付きベクトルストア命令

VESTOREM  B.IRs1F マスク付きベクトル伸長ストア命令マスク値が真になるまで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 

(6)

VSPUTM 

VCOpy  VCOpyt Vル仏X VルfAXM VN VMINM  VGENAS  VGENASM 

ーモニック 編集命令

Rd Rs.MF 

Rd Rs  Rd RsルfF

Rd RslRs2  Rd RslRs2fF

Rd Rsl.Rs Rd RslRs2,恥{F Rd Rs  Rd RSMF 

表4.4 ベクトル編集命令

動作

ベクトル分配命令 て格納する

Rsをマスク値の真偽に基つ・き 2つのRdに振り分け

ベクトルコピー命令 Rsの値をRdにコピーする.

マスク付きベクトJレコピー命令

ベクトJレ最大値命令 RslRs2の値の大きい方をRdに格納する マスク付きベクトル最大値命令

ベクトル最小値命令 RslRs2の値の小さい方をRdに絡納する マスク付きベクトル最小値命令

ベクトル等差数列生成命令 初項0公差Rsの等差数列をRdに傍納する マスク付きベクトル等差数列生成命令 マスク値が真の時のみ数列をRd に格納する

どで使用するリストベクトルを生成する.

VGENASf インデックスリスト生成命令.初期値 0の等差数列を生成する.公差は,

ソーススカラレジスタにより与える.生成される数列のデステイネーショ ンFIFOレジスタへの格納は マスクベクトルにより制御される.数列の 最終データには EOS̲VまたはEOS̲]が付力目される.

4 . 4   マク口演算への対処法

総和,内積,最大値探索,回帰演算などを行う DOループは,本来ベクトル化に不適な データ依存関係にあるので,通常のベクトル演算用のハードウェアではベクトル処理でき ない.そこで,従来のベクトルプロセツサではこれらをマクロ演算として定義し,特殊な 専用ハードウェアを用いてベクトル処理を行っている.これに対してプロトタイプMSFV 型プロセッサでは,M SFアーキテクチャの特長である柔軟なチェイニング能力により,

特別なハードウェアを必要とすることなくベクトル処理を可能としている.

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 

(7)

(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白 削sfsi

lex

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 

(8)

(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

Vr

l訴えム

hm yA { l

4 . 6  

Z

' Hい じ ﹃

J

iw ZeLPh

4 . 6 . 1  

4.2の例を用いて,

JAn 

d財 ト

E Z

+11cj

3w

d

z

二 品

+1+1+

Fト 土 と ご 町

?

J

+1..‑..  +IN 

~I"'"

c : :  

":"'11 

│ 5 

~ 11"':' 

.L.  ̲.I <u 匂 .L. 

ど + T

+ む +士、

. J .

h  伊「

  AN

.L. +I~

1 col 

QJ  ,.col 

+ + + ;j

出 芝

H

3

puJ F p .L. 

4

‑ 。

cど + +

+I~ ~

.L.  col Q; ~I+

U r

i+ + + ご と F

f12

=

ト ミ .L. 

"1+ 

?

~ 十 日

U

:t:  + 相 +

t

P

U

ぷ +

1'

r .L. 

+1" 

じ +col 

U

col  F r

LL  11

l...̲j̲ 

総試

Q酬刷嗣

Q  ょ税 J

収ど ム

h

'

b

快 足

m u.

59 

58 

(9)

(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 

参照

Outline

関連したドキュメント

ベクトル計算と解析幾何 移動,移動の加法 移動と実数との乗法 ベクトル空間の概念 平面における基底と座標系

当該不開示について株主の救済手段は差止請求のみにより、効力発生後は無 効の訴えを提起できないとするのは問題があるのではないか

実際, クラス C の多様体については, ここでは 詳細には述べないが, 代数 reduction をはじめ類似のいくつかの方法を 組み合わせてその構造を組織的に研究することができる

地盤の破壊の進行性を無視することによる解析結果の誤差は、すべり面の総回転角度が大きいほ

第14条 株主総会は、法令に別段の 定めがある場合を除き、取 締役会の決議によって、取 締役社長が招集し、議長と

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

優越的地位の濫用は︑契約の不完備性に関する問題であり︑契約の不完備性が情報の不完全性によると考えれば︑

2) ‘disorder’が「ordinary ではない / 不調 」を意味するのに対して、‘disability’には「able ではない」すなわち