★Round1のうるり的考察★
ぜひKazuさんのところの正式結果と併せて見てください。
とりあえずUpということで。表現方法に問題があるが、後々修正する予定(予定は未定か?)。
●FPUの速度差
fxchの使用に関わらず最速値で並べると、速い順に
P6 > K6 > P5 > mP6 > WC2 > M2
である。
P6は評判通りであった。文句なく高速である。
K6は意外だが2番手につけた、これは並列性が低いコードだったのでパイプライン化されていないという欠点が出ず、演算レイテンシが低いことが幸いした結果である。
P5が健闘している。fxchでパイプラインを有効にしてやることで高いFPU性能を発揮している。
mP6も健闘している。P5との速度差は平方根、除算の差か。傾向もP5に似ている。
WC2、M2は苦戦した。パイプライン化されていないFPUではつらかったか。
(WC2は本当にパイプライン化されていないのだろうか?データシートの表現がよくわからない)
パイプライン化されていないFPUには厳しかったようだ。唯一、K6が低レイテンシを武器に上位陣に割り込んでいる。
●fxchによる高速化
・fxchを並列処理することが可能なCPU
FPU使用時よりFPU&fxch使用時のほうが高速に処理されたのはP5,P6,mP6である。
これらは一般のベンチマークでFPUが高速であるとされるものである。
通常のPentium系に最適化されたアプリケーションはfxchを使うであろうからこれらのCPUは高速に処理するはずだ。
もっと並列性の高いプログラムの場合にはより大きな差になるだろう。
この件はRound2で分析する。
・遅くなるCPU
逆に遅くなったのはK6,WC2,M2である。
いわゆるおそいFPUをもつといわれるCPUである。
●out-of-order機能
特筆すべきはP6の安定性である。どのようなコードでも安定して高速である。
これはout-of-order機能が有効に働いて、CPUが処理しやすいように自分で命令の実行順序をかえているからである。このときコードに潜在する並列性を引き出すことから高速に動作することにもつながる。
●3DNow!の効果
・他との速度差
全体の中で3DNow!コードは抜群に効率がよい。これは低レイテンシである上に演算器が複数あることによる(K6,WC2ともに乗算、加減算を各1つもち並列動作可能)。
今回の計算では平方根と除算の計算があり、この負荷が大きい。3DNow!ではこれらの演算のレイテンシが非常に低く、そのうえ平方根が逆数の状態で求まるため計算上で非常に有利であった(除算の計算も速いため、逆数の状態で求まらなくとも結果は同じ)。・K6、WC2の速度差
K6とWC2の効率の差は平方根、逆数のレイテンシの違いとデコーダ性能、out-of-order機能の有無によるものであろう(厳密にどれとは言いづらい)。
・SISD、SIMDの速度差
並列性が低かったのでSIMDによる高速化率は低いが、それでも25〜30%程度は高速化している。
データをパックすることでレジスタ上で計算できる機会が増えること、演算をまとめてできること(SIMDだから当然だが)によって高速化していると思われる。