XNAMath のパフォーマンスをテストしたところ、SIMD 組み込み関数を使用した PC バージョンでは、simd を使用しない場合よりもパフォーマンスが低下しているように見えます。
内積を計算する関数を使用します。このコードをsimdなしでテストしました:
XMVECTOR4 Result;
Result.m128_f32[0] =
Result.m128_f32[1] =
Result.m128_f32[2] =
Result.m128_f32[3] = V1.m128_f32[0] * V2.m128_f32[0] + V1.m128_f32[1] * V2.m128_f32[1] + V1.m128_f32[2] * V2.m128_f32[2] + V1.m128_f32[3] * V2.m128_f32[3];
return Result;
そしてこれと:
XMVECTOR4 vTemp2 = V2;
XMVECTOR4 vTemp = _mm_mul_ps(V1,vTemp2);
vTemp2 = _mm_shuffle_ps(vTemp2,vTemp,_MM_SHUFFLE(1,0,0,0)); // Copy X to the Z position and Y to the W position
vTemp2 = _mm_add_ps(vTemp2,vTemp); // Add Z = X+Z; W = Y+W;
vTemp = _mm_shuffle_ps(vTemp,vTemp2,_MM_SHUFFLE(0,3,0,0)); // Copy W to the Z position
vTemp = _mm_add_ps(vTemp,vTemp2); // Add Z and W together
return XM_PERMUTE_PS(vTemp,_MM_SHUFFLE(2,2,2,2)); // Splat Z and return
そして、このループで:
for (int i = 0; i < 10000000; i++)
{
volatile XMVECTOR4 d = MVector4Dot(v1, v2);
}
simd なしのリリース モード バージョンでは約 9 ミリ秒かかり、約 20 ミリ秒かかります。
SIMD のパフォーマンスに影響を与える可能性のある理由はどれですか?
ありがとう。
更新:「/arch:SSE2」オプションを使用してプログラムをコンパイルします