SSE 将整数加载到 __m128

Posted

技术标签:

【中文标题】SSE 将整数加载到 __m128【英文标题】:SSE loading ints into __m128 【发布时间】:2012-02-24 20:30:13 【问题描述】:

gcc 将 4 个 ints 加载到 __m128 并将 8 个整数加载到 __m256 (对齐/未对齐)的内在特性是什么? unsigned ints呢?

【问题讨论】:

澄清:您正在寻找 GCC 的内在函数,而不是英特尔的内在函数是否正确? 不知道确切,但在 gcc 4.6+“开箱即用”中可以使用。 使用software.intel.com/sites/landingpage/IntrinsicsGuide 查找您需要知道的所有内容。 【参考方案1】:

使用英特尔的 SSE intrinsics,您正在寻找的是:

_mm_load_si128() _mm_loadu_si128() _mm256_load_si256() _mm256_loadu_si256()

文档:

https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_load_si128 https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_load_si256

签名和未签名之间没有区别。您需要将指针转换为 __m128i*__m256i*


请注意,这些是 Intel 的 SSE 内在函数,可在 GCC、Clang、MSVC 和 ICC 中使用。GCC 内在函数仅在 GCC AFAIK 中有效。

【讨论】:

很好,非常感谢。我还有其他后续问题:***.com/questions/9437860/sse-ints-vs-floats-practice

以上是关于SSE 将整数加载到 __m128的主要内容,如果未能解决你的问题,请参考以下文章

如何将 16 字节的内存加载到 Rust __m128i 中?

c/c++ 代码中使用sse指令集加速

将常量浮点数加载到 SSE 寄存器中

SSE:从 const __m128 * 转换为 const float *

SSE 加载/存储内存事务

如何使用 SSE 将 _m128i 转换为无符号整数?