SSE 4个32位整数乘法的总和

时间:2015-05-17 15:47:13

标签: c sse simd avx sse2

感谢this post我发现了如何乘以4个32位整数。

我现在要做的是总结结果。我怎样才能使用内在函数?我可以访问SSE,SSE2和AVX。我最初的想法是将res卸载到一个int数组中并对第一个和第三个元素求和,但我想知道是否有更好的方法。

这是我的代码看起来像

__m128i tmp1 = _mm_mul_epu32(a,b); /* mul 2,0*/
__m128i tmp2 = _mm_mul_epu32( _mm_srli_si128(a,4), _mm_srli_si128(b,4)); /* mul 3,1 */
__m128i res = _mm_unpacklo_epi32(_mm_shuffle_epi32(tmp1, _MM_SHUFFLE (0,0,2,0)), _mm_shuffle_epi32(tmp2, _MM_SHUFFLE (0,0,2,0)));

1 个答案:

答案 0 :(得分:3)

如果你只想要一个水平加法,即对结果向量中所有4个32位int元素求和,那么你可以移动并加两次,然后提取一个元素,例如:

.myMenu {
    padding: 0px !important;
}