gpt4 book ai didi

x86 - 4 个 32 位整数的 SSE 乘法

转载 作者:行者123 更新时间:2023-12-02 05:37:06 25 4
gpt4 key购买 nike

如何将 4 个 32 位整数乘以另外 4 个整数?我没有找到任何可以做到这一点的指令。

最佳答案

如果您需要有符号 32x32 位整数乘法,则以下示例位于 software.intel.com看起来它应该做你想做的:

static inline __m128i muly(const __m128i &a, const __m128i &b)
{
__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 */
return _mm_unpacklo_epi32(_mm_shuffle_epi32(tmp1, _MM_SHUFFLE (0,0,2,0)), _mm_shuffle_epi32(tmp2, _MM_SHUFFLE (0,0,2,0))); /* shuffle results to [63..0] and pack */
}

您可能需要两种构建 - 一种用于旧 CPU,一种用于最新 CPU,在这种情况下,您可以执行以下操作:

static inline __m128i muly(const __m128i &a, const __m128i &b)
{
#ifdef __SSE4_1__ // modern CPU - use SSE 4.1
return _mm_mullo_epi32(a, b);
#else // old CPU - use SSE 2
__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 */
return _mm_unpacklo_epi32(_mm_shuffle_epi32(tmp1, _MM_SHUFFLE (0,0,2,0)), _mm_shuffle_epi32(tmp2, _MM_SHUFFLE (0,0,2,0))); /* shuffle results to [63..0] and pack */
#endif
}

关于x86 - 4 个 32 位整数的 SSE 乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10500766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com