竹下世界塔の計算機よもやま話

アクセスカウンタ

zoom RSS 積和演算命令の命令フォーマットについて

<<   作成日時 : 2013/01/10 20:49   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

 4オペランド命令を3オペランドに押し込めた時にどうなるか考えた。

コンピュータアーキテクチャの話 100 浮動小数点積和演算器(マイナビ)
RWTのHaswell Microarchitectureの解説記事と雑感(Intel Fanboy Blog)


 積和演算は ±A×B±C → D となるので4オペランドが必要。SPARC64は32bit長の1命令(Format 5)に押しこんであるが、x86のAVX命令で追加された積和演算は3オペランドのFMA3、4オペランドのFMA4に分けられる。このうちAMDはBulldozerアーキでFMA4を実装済、IntelはHaswellアーキでFMA3を実装するらしい。
FMA Instruction set(Wikipedia)

MIPS Architecture Release 5では浮動小数点ではない整数の積和演算を追加するそうだ。

 汎用レジスタの本数が多いと4オペランドはきつい。32本の汎用レジスタだと命令フォーマットのうち5×4=20bitを使ってしまう。従来と同じ3オペランド、ただしソースに指定した3本のうち1本に結果が上書きされるとしたらどのような組み合わせがあるか?

A×B+C → A
A×B+C → B
A×B+C → C

これで3パターン。次に積和でなく積差だとしたら

A×BーC → A
A×BーC → B
A×BーC → C

合計6パターン。そして積の部分、AまたはBの符号を反転させた場合を追加すると

-(A×B)+C → A
-(A×B)+C → B
-(A×B)+C → C
-(A×B)ーC → A
-(A×B)ーC → B
-(A×B)ーC → C

で、合計12パターン。4bitあれば指定できる。
これを命令フォーマットに落とし込んだらどうなるか。3オペランドのレジスタ指定のうち、結果を書き込むレジスタを指定する位置は固定しておかないと作るときに困る。

MADD Rs1,Rs2,Rd

という並びで、Rdを結果を書き込むレジスタとして組み合わせを考えると

Rs1×Rs2+Rd → Rd
Rs1+Rs2×Rd → Rd
Rs1×Rd+Rs2 → Rd

とすればOK。アセンブラでは

MADD GRa,GRb,GRc,GRc
MSUB GRa,GRb,GRc,GRa

などと書いて結果を書き込むレジスタがソースに指定した3本のレジスタのうちどれかと同じであることをチェックすればよさそう。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




積和演算命令の命令フォーマットについて 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる