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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU 条件判断+Nullfication

<<   作成日時 : 2012/05/20 04:07   >>

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

 PA-RISCの後続1命令を無効にするNullfication、いいんじゃないかと思えてきた。

 NullficationはNフラグを用意し、ある条件によってセットする。1つの命令はNフラグが立っていると実行をキャンセルされる。Nフラグが立っているかどうかに関わらず1命令分実行したらNフラグはクリアされる。この性質から依存関係は直前の命令の実行結果にのみ影響される。

 条件判断命令でレジスタ同士をある条件で比較した結果をNフラグに反映すれば、次の命令は条件によってスキップすることができる。これにより分岐命令を組み合わせれば条件分岐命令になる。

例:
CMP 条件、R1,R2,R0 # R1とR2がある条件で比較。条件が成立したらNフラグを立てる。
BR label # 条件が成立した場合はスキップされる。
...

これをMIPS/Alpha類似の比較結果を汎用レジスタに入れるプロセッサと比較してみる。

Alpha:
CMPEQ Ra,Rb,Rc # Rc=1 if Ra=Rb
BNE Rc,Label # branch if Rc≠0

 Alphaでの分岐命令は指定されたレジスタが0/非0、負の数/0と負の数/正の数/0と正の数、最下位ビットが1/0を見ている。
CMP命令は減算命令でもよく、結果をそのまま分岐するかどうかの判断にも使えるので、ループ命令で0かどうかの判断だとCMP命令は不要。
 Nullficationを使う場合は必ずNフラグを操作する命令が必要になる。メリットは分岐命令に条件判断が不要になり、分岐先の相対アドレス指定のフィールドが稼げる。実装の面から考えると分岐ユニットは汎用レジスタを参照する必要がない。また、後続は分岐命令でなくともよいので条件移動命令もできる。ただし2命令となる。

 マイクロ命令による逐次実行だと、Nフラグを用意して次命令はこれでスキップする。シングルパイプラインでは直前の命令の実行完了で判断できるので、次命令は実行はさせてもライトバックしないことにより命令をスキップしたことになる。スーパースカラではレジスタの依存関係と同様に待ち合わせ、直前命令の結果によって次命令をキャンセルする。OoO実行の場合はちょっと面倒で、直前の命令がNフラグの状態を変えたかどうかを監視して仕掛中の命令がキャンセルするかどうかを判断しなければならない。ただし分岐命令はNフラグをセットしない(必ずクリアされる)、という実装にすれば命令投入時の直前の命令だけを監視すればよい。

 これ、シングルパイプラインだとかなり実装は楽なんじゃないかと思う。そのかわり条件分岐に必ず2命令必要となるので効率は悪くなる。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU 条件判断+Nullfication 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる