月刊ASCII4月号にSSEのスループットとレイテンシが掲載されていました。
#「Intel Architecture Optimization-Reference Manual」よりの抜粋
そこで
ADDPS/SUBPS 1every2cycles(Throuhput) 4cycles(Latency)
ADDSS/SUBSS 1every cycles
3cycles
MULPS
1every2cycles
5cycles
MULSS
1every cycles
4cycles
# 「PS」はPackedSingle(パックド単精度) 「SS」はScalarSingle(スカラ単精度)
とあり、ここまでは、まあスループットが処理クロック数で
加算器と乗算器が別にあって、パイプラインが1本だから
加算・乗算を交互に行えばCPUクロック*4flopsだなと
思って眺めていたところ
# 3DNow!は加算器・乗算器が別でパイプラインが2本のため
# 乗算と加算が同時に1クロックで処理可能なため
# 加算・乗算を交互に行ってCPUクロック*4flopsとなります
DIVPS/SQRTPS 1every36/58cycles
36/58cycles
DIVSS/SQRTSS 1every18/29cycles
18/30cycles
となっているではありませんか
3DNow!の除算は8クロック(逆数は6クロック)平方根は12クロックですから
ここでもintelの手抜きがみられます。
# 最近intelのFPUマイクロプログラムの除算・平方根に失望したばかり
# 詳しいクロック数は解りませんが、SSEと同じぐらいです
# AMD FPUの除算・平方根のマイクロプログラムはintelの半分の処理時間です。(優秀!!!)
これでは私のベンチマーク(オイラー法)では
K6-2/300@FPU 108
P2-300@FPU 106
K6-2/300@3DNow! 26
P!!!-300@SSE 75(推測:レジスタが競合するのでもう少しかかるかも)
P!!!-500@SSE 45(推測)
となりそうです。
わたしの勘違いであることを祈ります。