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

アクセスカウンタ

zoom RSS LOOP命令の調査:分岐の予測を改善するものだが

<<   作成日時 : 2010/01/19 17:43   >>

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

 分岐予測機構があっても、ループ命令の終了時点では必ずミスをする。ほとんどの場合、ループ先頭に戻るTaken方向なのだが、終了時だけはNot Takenになるからだ。このループのカウントに使うレジスタを専用のものにすればどうか。以下に示したループ専用レジスタを持つプロセッサは、設定値からデクリメントし、ゼロになったらループを抜ける。このループ専用レジスタの値を見れば分岐がNot Takenになることがわかる。

・PowerPC
bcctr命令
カウンタ CTR

・IA-32
LOOPcc命令
カウンタ ECX/CX

・IA-64
br.cloop命令
カウンタ ar.lc ループ用カウンタ
その他にモジュロ・スケール・ループ命令がある。

 欠点はループをカウントするレジスタが特殊扱いで1本しかないこと。多重ループの場合は汎用レジスタを使うしかない。
また、OSのコンテキストスイッチ切り換えの時に退避する対象となること。私の浅い理解では、OSのコンテキストスイッチ切り換えはOSによるNMIと認識している。強制的な割り込みなのでそれまで使っていたリソースを退避しなければならない。この点でループ機構を持つプロセッサは手数が増える。
 IA-32は8086設計当時にZ80のDJNZ命令を意識したのではないだろうか。なお、68000にもDBcc,W Dn,Labelという命令がある。このあたりのまだマイクロ命令で動作していたプロセッサでは分岐のペナルティは考えていないはずだ。IA-64はIA-32の機能をそのまま載せただけと考えられる。かつ、モジュロ・スケール・ループ命令のついでとして実装されていると思われる。PowerPCは組み込み用途もあるので、大げさなOSのない環境では大いに利用できる。
他のRISC系プロセッサはループ命令を持たない。ループカウンタを持つループ命令はCISC的な考えの名残りだろう。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(2件)

内 容 ニックネーム/日時
メインフレームは、BCT というループ用命令がありますが、カウンタレジスタは汎用レジスタ(どれでも使用可能)でした。

POWER や IA-64 はおそらく分岐予測を意識していると思います(ループ分岐命令で特定レジスタを監視さえすれば100%当てられるようになる)。専用レジスタにすると OoOE のレジスタリネーミングとは相性が悪くなると思いますが。

x86 の ECX(RCX) レジスタは、Loop 命令やストリング命令では特別扱いとはいえ、一般命令では他の汎用レジスタと同一の括りですから、POWER みたいな専用レジスタ(SPR.CTR)とはまた趣が違いますね。
m.ukai
2010/01/20 11:47
本アーキは各レジスタにコンディションコードを持たせているので、LOOP命令による監視はできそうですね。あとはwhile文の様に先頭で判断する命令など。検討してみます。
houmei
2010/01/20 20:35

コメントする help

ニックネーム
本 文




LOOP命令の調査:分岐の予測を改善するものだが 竹下世界塔の計算機よもやま話/BIGLOBEウェブリブログ
文字サイズ:       閉じる