 | 3DNow!について
Round1では最適化コードでk6より約倍程度遅い。これはレイテンシが
K6の3DNow!の2から4に倍増した影響そのまま。
Round1はコードの前後依存性がかなり高いのでK6-3DNow!で既に並列性を
使い切っていたため、Athlonはパイプラインが延びた分のマイナス面を
露呈することになっている。
Round2ではRound1とは対照的に並列性が高いので、レイテンシの影響が
出ない上に、Athlonの強力なデコード能力によってK6-3DNow!を大幅に
上回る驚異の結果を出している。デコード性能の向上で3DNow!コードの
真の速度を出していると見ている。詳細はのちほど。
|
 | FPUについて
F3Benchの条件下でP6比で50%程度の高速化。スゴイ。
P6同様fxchの使用で遅くなる現象が見られる。スケジューラが賢く、
並列性を十分に抽出している証拠である。
Round1で異常に速いのは演算レイテンシが低いことを表している
可能性がある。ボトルネックのfsqrtが高速である可能性も大きい。
Round2では圧倒的に速く、K6-3DNow!SISDに匹敵する。P6との差は
乗算のスループットの差であろう。レイテンシの改善も考えられる。
CのSDKコードが遅いのはショートループが苦手というパイプライン
の性質が端的に出た例でしょう。
|
 | まとめ
多段パイプラインの特徴がマイナス面に出やすくなっている。
レイテンシの小さい3DNow!ではデコード性能の向上が良く効いている。
FPUが異常に速い。なにか面白い機能でも持っているのか?
高クロック駆動されるので実際の動作ではさらに他のものより速い。
詳しいデータシートが欲しい(爆)。
|
 | Athlonは最高456クロックという理論値を超えてるような結果を出している。
ちなみに36*18と1*36の行列積1*18を計算するので、乗算36*18=648回、加算
35*18=630回、読み出し36*18+36*18=1296回、書き込み18回が通常必要になる。
2要素のSIMDと2本のパイプラインで乗算&加算は320クロック程度で実行できる。読み出し
は36*18+36*18/3=864回に最適化し、SIMDで430クロック。
乗算&加算と読み出しは並列可能なので430クロックが実行限界。
K6はSIMD&2命令同時デコードなので、(648+630+864)/2/2=536がデコード性能限界。
AthlonはSIMD&3命令同時デコードで(648+630+864)/2/3=357。
このそれぞれの限界値に、書き込み、アドレス計算、データ移動が加わるのでさらにクロッ
クを消費する。
K6ではデコード性能が頭打ちで演算器が遊んでいる状態であり、Athlonではデコード性能
が十分高くデータの読み込みで頭打ちになっている。Athlonは理論値に近い値を出してい
る点、ロスが少なく条件付きの理論値でないことに注目したい。
(Athlonの内部構造は推測です。AMDから詳しいデータシートが出て、間違っていれば修正
します(汗)) |