以前、このスレで話題に上ったハノイの塔ベンチマーク(
http://www.vector.co.jp/soft/dl/win95/hardware/se378371.html)
のメイン関数部を抜き出して、実行クロック数と分岐予測ミスをカウントするプログラムを
作ってみた→
http://balsamic.fam.cx/up-insalata/download/1203205200.zip DLpass:hanoi
計測は、オリジナルの関数をそのまま抜き出したものと、少し改変した関数で計測を行っている。
C2Dの結果は45nmのもので、65nmC2DはTest3の結果がもう少し悪かったような気がする。
この結果で分かることは、C2Dでは条件分岐命令を(意味が変わらないように)ちょっと変えただけで、
分岐予測ミスが大幅に減り、実行クロック数もかなり減っているのが分かる。
スタック操作は全く変えてないので、スタックマネージャが絡んでいるとは考えにくい。
Pentium2に関しては、パーシャルレジスタストールのペナルティが大きいので、
movzxを使ってパーシャルレジスタストールを回避することによって実行クロック数が大幅に減っている。
C2Dはパーシャルレジスタストールのペナルティはもともと小さい。
AthlonXPはインテルのようなパーシャルレジスタストールはそもそも無い。