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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU レジスタに型(属性)をつける

<<   作成日時 : 2016/02/04 05:30   >>

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

 SIMD系の命令を考えていたらレーンのサイズごとに命令のバリエーションが増えていくことに気付く。例えば加算のバリエーションはスカラデータ、1バイト単位×レーン数、2バイト単位×レーン数、4バイト単位×レーン数……など。さらに浮動小数点のSIMD形式もあって命令が複雑になる。で、レジスタに属性を付けて、属性によって演算の動作を変えることを考えてみた。

 SIMD形式でレジスタを分割したものをレーンと呼ぶことにする。ソースレジスタの属性がスカラー型の場合、単純にレジスタ同士の加算が行われ、結果もスカラー属性となる。ソースレジスタが8bit幅のレーンの場合、それぞれのレーンに対して加算が行われ、結果も8bit幅のレーンとなる。これで命令フォーマット側のバリエーションはなくせそうだ。
 スカラーとベクターの演算はどうか。これも可能になる。スカラー値と各ベクターのレーンについて演算が行われ、結果が保存される。
 ベクター同士の演算で属性が変わることもある。例えば全レーンの総和や平均値を求めたら結果はスカラーとなる。
 演算命令については、属性を考慮するものと属性を無視するものに分けられる。

 レジスタに属性を付加したので、一時的にレジスタを保存する場合には属性も一緒に保存しなければならない。具体的にはスタックによるレジスタの退避や割り込みによるレジスタの退避が必要。

 実行時のペナルティ。演算の方法は命令デコードが終わってもわからず、レジスタの属性をリードした後に確定する。つまりパイプラインが一段深くなる。

 レジスタに属性を付けるのはどのタイミングがよいか?レジスタに値がセットされるのはロード命令と演算の結果が保存されるとき。ロード時に属性を明示的に指定、または既存の値が入っているレジスタに対して属性を付加する。指定したレジスタの属性を読みだす手段も欲しい。
 属性については、例えば整数レーンと浮動小数点レーンを混在させてレジスタ内に構造体を作ることも可能だが指定方法が複雑になる。演算も複雑になるだろう。そこで整数のみのレーン、浮動小数点のみのレーン、両者混在について考えてみた。タグは演算の対象とはならず、一致するかどうか、ゼロかどうかでトラップを発生する。ただしタグは64bitレジスタ幅以上の場合について、属性の中に含めてしまってもよいかもしれない。

レジスタに付加する属性のフォーマット例:

属性指定はレジスタ幅と同じ
MSB … InValid(Null)
MSB-1 … タグ指定

例:8bitレジスタの属性(タグはなし)
I _ S S _ V V V
例:32bit以上の幅のレジスタの属性
I T _ _ … _ B F F n n n n _ _ S S _ V V V

VVV … ベクター指定 扱えないbit幅はトラップ
000 スカラー
001 8bit
010 16bit
011 32bit
100 64bit
101 128bit
110 256bit
111 512bit
SS … 飽和演算
00..なし
01..符号なし飽和
10..符号付き飽和
11..Reserved

nnn … 浮動小数点 LSBからのSIMD個数 BFF=0のとき無視される
nnn = 0 浮動小数点スカラー
n<=15 ベクター 浮動小数点幅×15がレジスタ幅未満、かつVVV=0(スカラー)の場合は全レーン
浮動小数点幅×nがレジスタ幅を越えるとトラップ
B … BCD浮動小数点指定
F … 浮動小数点サイズ指定

BFF
000 浮動小数点指定なし
001 Single
010 Double
011 Quad
100 (Reserved)
101 (Reserved)
110 BCD Double
111 BCD Quad

指定の優先順 Invalid > Tag > Floating > VectorとSatulation


Pretend & Play(R) Calculator Cash Register 電卓式レジ 米ドル付きPretend & Play(R) Calculator Cash Register 電卓式レジ 米ドル付き

Learning Resources
売り上げランキング : 4387

Amazonで詳しく見る
by G-Tools

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(1件)

タイトル (本文) ブログ名/日時
ぼくのかんがえたさいきょうCPU レジスタに型(属性)をつける その2
 ぼくのかんがえたさいきょうCPU レジスタに型(属性)をつけるの再考。 ...続きを見る
竹下世界塔の計算機よもやま話
2016/04/10 03:14

トラックバック用URL help


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

タイトル
本 文

コメント(1件)

内 容 ニックネーム/日時
面白そうなアイディアですね。
メモリ上のオブジェクトにハードウェアで型情報(タグ)をサポートするのは、バロースなど幾つかのアーキテクチャに観ることが出来ますが、レジスタに型があると純粋にアルゴリズムだけで記述することが出来そうですね。

また、レジスタ間接アドレスモードも型を参照してくれるとありがたいです。
メモリー上の配列の合計や最大を求めるようなケースで有用です。

あと、複素数と有理数(分数)を型としてサポート出来たら色々と捗りそうです。
えぐち
2016/03/01 08:23

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU レジスタに型(属性)をつける 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる