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

アクセスカウンタ

zoom RSS ぼくのかんがえたさいきょうCPU 明示的なデータハザード解消

<<   作成日時 : 2013/10/16 02:35   >>

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

 ありあまる汎用レジスタをどう活用するか。

 アウトオブオーダ実行は、それを前提としない従来の命令列について、動的に依存関係を解決しているところが難しい。では事前に依存関係を解消できるようなしくみは考えられるか?



 ここで汎用レジスタr0〜r31の32本を考えてみる。全レジスタは読むことができるが、いったん書き込むとリセットするまで読み出すことはできない。
これを実現するためにr0〜r31に対応する1bitのw0〜w31フラグを用意する。

 RB(Register Barrier)命令というのを用意する。


L1:
LD [r0+r1],r31 # 書き込み完了するとw31フラグが立つ
LD [r0+r2],r30 # 書き込み完了するとw30フラグが立つ
RB # --- ここでr30,r31の書き込み完了を待つ。w30,w31クリア
L2:
ADD r4,r31,r21 # 書き込み完了するとw21フラグが立つ
ADD r3,r30,r20 # 書き込み完了するとw20フラグが立つ
RB # --- ここでr20,r21の書き込み完了を待つ。w20,w21クリア
...

L1:〜最初のRB命令までにある命令はリソースがある限り同時に実行しても問題ない。L2:〜次のRB命令の間も同様。
 RB命令は、その命令に到達するまでの命令列からデスティネーションとして指定されたレジスタ番号をすべて覚えておき、それら全てに書き込みが完了するまで待つ。
※実際にはr0〜r31を書き込み対照にする命令がパイプラインの実行ステージに入ったら対応するw0〜w31への書き込み予告フラグを用意しなければならないだろう。

 このようにRB〜次のRBまでの間にある命令列はどのような順番、あるいは同時に実行しても問題ない。書き込みが同じ番号のレジスタを指定している場合は動作を保証しない(またはトラップ)。

 このような命令セットとレジスタの構造にしたことにより、命令の実行順を意識しない区間を設定することができた。ただしこの粒度は最大で32命令(=書き込めるレジスタの本数)となる。アウトオブオーダ実行だとこのような区切りがなく連続的に処理していくので、比較すると性能は落ちるだろう。
 性能が落ちる要因はレジスタの本数で、アウトオブオーダ実行ではプログラムから見えるレジスタ本数よりも多いリネーミング用のレジスタを中に抱えている。実装はこちらの方がはるかに単純になる。

・分岐命令について
すべてのレジスタの書き込み完了まで待たなくてもよいが、命令の流れが変わることによって書き込み対象のレジスタがかぶるようなことがあるとわかりにくくなりそう。
→もしかしてRB命令は分岐命令のカテゴリにしてしまったほうがよいのか?

・浮動小数点レジスタについてはどうか
浮動小数点レジスタを対象にしたFRB命令を用意する。

・割り込みについて
RB命令に挟まれた間は実行順序が入れ替わっても問題ないが、割り込みが発生すると元の命令には戻れない。結果を破棄して直前のRB命令から再実行する。これを実現するためにはRB命令の場所をどこかで覚えておかないといけない。

 このような構造にするとRB命令は頻繁に出てくるようになるので、いっそ命令フォーマットの1bitを使ったほうがよいかも。そうすると、全命令でこのbitを立てると従来のパイプライン動作での汎用レジスタのように扱えるようになる、はず。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(1件)

タイトル (本文) ブログ名/日時
【自作向け最上位モデル】CPU「AMD FX-9370」
Piledriver(開発コード名)コアを搭載する8コアCPUで、ベースクロックが4.4GHz、Boost時に4.7GHzで動作 ...続きを見る
ぱふぅ家のサイバー小物
2013/10/23 19:13

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文




ぼくのかんがえたさいきょうCPU 明示的なデータハザード解消 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる