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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU Nullificationの拡張

<<   作成日時 : 2015/06/25 00:23   >>

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

 春イベントが終わり放心状態で遠征と演習のみ惰性でやっています。艦これの話です。さて。


 条件によって続く命令を無効化するNullificationの拡張について考えてみる。

Nullificationの概要

比較命令 成立したら次の命令をスキップ
命令1 {この命令が無効化される}
命令2
...

 PA-RISCのNullification機能は、比較命令が条件によってNフラグを立てる。
Nフラグが立っていると命令の実行がキャンセルされる。Nフラグは次の命令を実行するときに必ず落とされるので、結果1命令だけがキャンセルされる。

 では拡張したNullificationについて考えてみよう。1命令のみのスキップではなくn命令のスキップができるようにする。ここでNカウンタというのを用意する。
比較命令で条件が成立するとNカウンタに値を設定する。Nカウンタがゼロでない場合は命令の実行を無効化する。次の命令にすすむごとにNカウンタは−1され、0で止まる。これにより連続した複数の命令のスキップが可能になる。

 これはほんのすこし先に分岐する条件分岐命令とプログラムの動きは変わらない。では内部では何が変わるか。パイプライン動作するプロセッサを前提にすると、分岐命令ではPCが書き換わるのでパイプラインが乱れる。分岐予測機構があればそれが動作し実行ペナルティを抑えるべく働くだろう。
 拡張Nullificationではどうか。PCをいじらずに後続命令の実行を次々とキャンセルしていく。あまりにも長いとパイプラインが空になってしまう。
 ではどの程度の長さまで許容できそうなのか。2命令同時実行のスーパースカラ実行であれば、2命令スキップしてもパイプラインの空きは1サイクル分。ストオブオーダ実行だとさらに隠蔽される。ではどこに影響がでるかというと、命令バッファが余計に命令を送り続けることになり命令バッファのアンダーランが起きやすくなる。最終的には命令の空読みを続けるような動作になってしまう。
 ここから、連続したNullificationは分岐実行時のペナルティとなるサイクル程度であればよさそうだ。例えば、2命令同時実行で分岐時のペナルティが4サイクルだとすると、4×2=8命令連続のNullificationまでは同等以上ということになる。

 さてもう少し拡張して、分岐の機構を使わずに命令実行を巻き戻すことを考える。命令バッファはこれからパイプラインに投入する命令を蓄えているが、命令の投入が終わったものを消去せずに残しておけば、命令バッファのポインタを戻すことで以前実行していた命令から再実行できる。これは分岐命令で前の番地に飛んだ時とプログラムの動きは変わらない。

 注意点として、命令バッファを巻き戻すやり方は命令の並び順ではなく今まで実行した命令の並び順で動作する。これは、別の分岐命令で飛んできた後に命令の巻き戻しをやると、プログラムの実行がその分岐命令の実行元まで戻ってしまうということになる。これを防ぐためには、さかのぼった命令列に分岐命令があった場合はそれより上にさかのぼらないようにしなければならない。割り込みの場合も同様だが、より安全には命令バッファをフラッシュしなければならない。

 別の考えでは、これらをうまく分岐命令の動作内に隠蔽すれば、近距離のアドレスへの分岐は分岐予測器などの動作を汚さずにより短いサイクルで実行を続けられる可能性がある。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




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