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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU 整数積和演算のフォーマット

<<   作成日時 : 2010/02/24 23:36   >>

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

 友人から聞いたのだが、組み込み系のマイコンでは浮動小数点で演算のプロトタイピングをやってから整数演算に書き直して高速化することがあるという。ということで整数の積和演算が命令フォーマットに入るかどうか考えてみた。

フォーマット
00FSDTXYR33333R22222R11111Rddddd

積和演算は飽和演算のほうが都合がいい。多倍長演算は通常の加算や減算でやればよい。

通常命令の場合
Rd = R1 × R3 ± R2
00FSDTXYR33333R22222R11111Rddddd

[31:30] = 00 ALU命令
[29] F =1 浮動小数点命令 F =0 その他汎用レジスタの命令 ここでは、F=0
[28] S =1 SIMD命令 S =0 SIMDでない命令
[27] D =0 R2はレジスタ =1 即値
[26] T =1 積和演算命令
[25] X =0 R2の前の符号 プラス =1 マイナス
[24] Y =0 符号なし飽和演算 =1 符号付き飽和演算

SIMD命令の場合
Rd = R1R × R1L ± R2
00FSDTXYZnnnnnR22222R11111Rddddd

[31:30] = 00 ALU命令
[29] F =1 浮動小数点命令 F =0 その他汎用レジスタの命令 ここでは、F=0
[28] S =1 SIMD命令 =0 SIMDでない命令
[27:26] SIMDのソース側パックドデータサイズ指定 00 8bit 01 16bit 10 32bit 11
[25] X =0 R2の前の符号 プラス =1 マイナス
[24] Y =0 符号なし飽和演算 =1 符号付き飽和演算
[23] Z =1 積和演算命令
[22:17] Reserved

SIMD積和演算命令では、R1のLSB側からパックドデータを数えて0,1,2,3…とすると、Rd[1:0]=R1[0]×R1[1]±R2[1:0]のようになる。
パックドデータが8bit指定だと8bit×8bit±16bit→16bit、
パックドデータが16bit指定だと16bit×16bit±32bit→32bit、
パックドデータが32bit指定だと32bit×32bit±64bit→64bit、
パックドデータが64bit指定だと64bit×64bit±128bit→128bit、となる。
レジスタの最大幅は256bitなので、128bit×128bitはSIMDでない積和演算命令を使えばいい。
SIMD命令フォーマットはさらに拡張の余地がある。(5bit分32命令)

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU 整数積和演算のフォーマット 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる