使用SSE内在函数时结果不正确

chb*_*er0 1 c++ x86 sse simd intrinsics

我正在尝试使用SSE内在函数的8个浮点数组的每个元素,只是为了学习如何使用它们.但是,当我尝试这样写时:

alignas(16) float Numbers[8] = 
{0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f};    

__m128 Group1 = _mm_load_ps(Numbers);
__m128 Group2 = _mm_load_ps(Numbers + 4*sizeof(float));
__m128 Zero = _mm_setzero_ps();

__m128 Sum1 = _mm_add_ps(Group1, Group2);     // Sum1 = Group1 + Group2
__m128 Sum2 = _mm_hadd_ps(Sum1, Zero);        // Sum2[31:0] = Sum1[31:0] + Sum1[63:32]
                                              // Sum2[63:32] = Sum1[95:64] + Sum1[127:96]
__m128 Sum3 = _mm_hadd_ps(Sum2, Zero);        // Sum3[31:0] = Sum2[31:0] + Sum2[63:32]

float Result;
_mm_store_ss(&Result, Sum3);
Run Code Online (Sandbox Code Playgroud)

Result当它应该是28时,它出现了6.我一直在指这些内在函数的参考,但我无法找出我的逻辑在这里出了什么问题.有什么建议?

小智 5

尝试更改此行

__m128 Group2 = _mm_load_ps(Numbers + 4*sizeof(float));
Run Code Online (Sandbox Code Playgroud)

__m128 Group2 = _mm_load_ps(Numbers + 4);
Run Code Online (Sandbox Code Playgroud)

(Numbers是float [],而不是char [])