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 [])
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |