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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU 強化論理演算命令

<<   作成日時 : 2012/02/22 04:54   >>

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

 マイクロプロセッサの論理演算命令、AND,OR,XORなどは2つのレジスタのそれぞれのビットに対して同じ演算を行うが、これは無駄ではないか?

 そう思ったのは8bitのマイコンから64bitのAlphaまで論理演算命令は各ビットに対して一斉に演算するという動作が変わってないからだ。検討しているのは32〜256bitのアーキテクチャだが、まったく同じ演算をする必要あるのかな。元々マイコンでも論理演算の結果必要なのは1bitだけだったり、あるいはI/Oアクセスでマスクしたりフラグを立てたりする8bitのアクセスだったりが多いはずだ。

 では、論理演算をSIMD風に、区画を分けて別々の演算を適用できないだろうか?

最低限必要な論理演算の種類を調べてみる。もっとも単純なのはMIPSで4種類。Alphaは整理されていて3×2パターンの6種類。第2オペランドを反転させることにより、より使いやすくしている。例えば、BIS命令でRavの特定のビットをRbvで指定して落とすことができる。

・Alphaの論理演算
AND Rc ← Rav AND Rbv
BIC Rc ← Rav OR Rbv
XOR Rc ← Rav XOR Rbv
BIS Rc ← Rav AND {NOT Rbv}
ORNOT Rc ← Rav OR {NOT Rbv}
EQV Rc ← Rav XOR {NOT Rbv}

・MIPSの論理演算
AND r1,r2,r3
OR r1,r2,r3
XOR r1,r2,r3
NOR r1,r2,r3

 最低でもAND,OR,NOT,XORがあればよさそう。2bit必要。

今のところALU命令のフォーマットは以下のとおり:
00 ff 4 s nnnnnnnn Rbbbbb Raaaaa Rddddd

nnnnnnnnがALU命令の種別だが、整数演算など他の命令もあるので使えるのは6〜7bitぐらい。2種で4bit埋め込むか。第2オペランドを反転させる指定を追加すれば5bitいける。

命令:

andor GR1,GR2,GR3
norandn GR1,GR2,GR3

 さて二種類の論理演算が適用可能だがレジスタのフィールドをどのように分けるか。32〜256bitのアーキテクチャに適用するためには上半分/下半分といった分け方では互換性を損なう。

案1:bit位置を2で割った余りが0のフィールド、1のフィールドに分けて適用。

andor GR1,GR2,GR3
→ GR3[30,28,26,...,2,0] = GR1[30,28,26,...,2,0] | GR2[30,28,26,...,2,0]、
  GR3[31,29,27,...,3,1] = GR1[31,29,27,...,3,1] & GR2[31,29,27,...,3,1]

案2:8bitずつ区切り、その位置を2で割った余りが0のフィールド、1のフィールドに分けて適用。

andor GR1,GR2,GR3
→ GR3[7:0] = GR1[7:0] | GR2[7:0]、
  GR3[15:8] = GR1[15:8] & GR2[15:8]、
  GR3[23:16] = GR1[23:16] | GR2[23:16]、
  GR3[31:24] = GR1[31:24] & GR2[31:24]

案1は「ハッカーのたのしみ」的に都合が良い。論理演算して1bitシフトしまた論理演算する、というテクニックに効く。
案2はSIMD命令との整合性がよい。また、普通に理解しやすい。

 今回は奇数のフィールド、偶数のフィールドに分けて論理演算を行うことを考えてみたが、さらに指定できれば mod4 に対して適用することも可能になる。が、今はそこまでは考えない。
 また、これらの実装はALUをいじるだけなので1サイクルで実行可能。

 元々の思いつきは論理演算がもったいないことと、リコンフィギャラブルプロセッサの仕組みについてである。リコンフィギャラブルプロセッサは魅力的だが、恐らくハード/ソフトの両方を知っていないと能力を引き出せない。コンパイラも簡単ではないだろうし、自由度が高すぎて持て余してしまう。ある程度従来の命令フォーマットに沿いつつ、実装依存でないような構成を考えてみた。

 これ、Verilog-HDLなどの論理シミュレータに効きそう。

 以下、ボツ案。

・レジスタの各ビットに対応して独立した論理演算を行う。論理演算の指定は特別なレジスタ。2bitのパターン×256bit分で512bit必要。
・レジスタを8bitずつ区切ってそれぞれに独立した論理演算を行う。論理演算の指定は特別なレジスタ。2bitのパターン×32bit分で64bit必要。
・特別なレジスタ(SR.logic)はタスクが切り替わると保存しなければならない。→△
・汎用レジスタで論理演算の種類を指定する?→論理演算の種類を読みだした後で論理演算を行うので、2サイクル必要。

※SR.logicというレジスタを用意し、オプションで実装するのもありかもしれない。
例:
logic GR1,GR2,GR3 # SR.logicに従った論理演算
logicn GR1,GR2,GR3 # SR.logicに従った論理演算、GR2は反転


ハッカーのたのしみ―本物のプログラマはいかにして問題を解くかハッカーのたのしみ―本物のプログラマはいかにして問題を解くか
ジュニア,ヘンリー・S. ウォーレン Jr.,Henry S. Warren

エスアイビーアクセス 2004-09
売り上げランキング : 30162

Amazonで詳しく見る
by G-Tools

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(1件)

タイトル (本文) ブログ名/日時
ぼくのかんがえたさいきょうCPU MIMD命令
SIMD命令は色々あるがMIMD命令ですよ。演算限定ですが。 ...続きを見る
竹下世界塔の計算機よもやま話
2012/02/25 03:47

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU 強化論理演算命令 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる