如何将无符号整数加载到 SIMD 中

Posted

技术标签:

【中文标题】如何将无符号整数加载到 SIMD 中【英文标题】:How to load unsigned ints into SIMD 【发布时间】:2015-05-17 11:53:27 【问题描述】:

我有一个 C 程序,其中有几个无符号整数数组。我正在使用这个声明uint32_t

我想使用 SIMD 对存储在每个数组中的数据执行一些操作。这就是我卡住的地方,因为看起来大多数 SSE 和 SSE2 函数只支持浮点数和双精度数。

我加载uint32_t 类型数据的最佳方式是什么?

【问题讨论】:

MOVDQA/MOVDQU 是 SSE2。 PADD[B/W/D/Q]许多 其他向量指令也是如此。为什么你认为 SSE2 只适用于float/double 【参考方案1】:

对于任何整数 SSE 类型,您通常使用 _mm_load_si128/_mm_loadu_si128

uint32_t a[N];

__m128i v = _mm_loadu_si128((__m128i *)a);

【讨论】:

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

如何以优雅有效的方式将无符号/有符号整数/长整数转换为 C 字符串?

如何在 x86(32 位)程序集中将无符号整数转换为浮点数?

将无符号整数存储在指针中

使用啥 ffmpeg 命令将无符号整数列表转换为音频文件?

将无符号整数输入属性传递给顶点着色器

如何将无符号字符数组解析为数值数据