c - 使用 AVX 的有符号/无符号整数的最小值

标签 c sse avx

我正在查看 AVX 指令指南,虽然有针对 32 位整数值的加载、存储和置换操作,但其他操作(例如确定最小值或最大值,或洗牌操作)仅适用于 float 和 double 。

那么,如果我想对 32 位整数使用这些操作,我是否需要将其类型转换为 float ,然后再将其类型转换回来,或者是否还缺少其他一些指令?

此外,如果我想在 32 位整数上使用它,洗牌掩码是否与 float 保持相同?

最佳答案

32B vector 的大部分整数运算都在 AVX2 扩展中(不是最初的 AVX 扩展,后者几乎全部是浮点运算)。英特尔最新AVX Programming Reference拥有完整的详细信息;您可能还想看看英特尔的 blog post宣布一些细节。

不幸的是,您无法使用浮点最小值或最大值运算来模拟对整数数据的这些操作,因为当解释为 float 据时,大量整数会映射到 NaN 值,而 NaN 比较的语义则不会。 t 执行您想要的整数比较操作(您还需要处理浮点编码是符号大小的事实,因此负值的顺序是“相反的”,并且 +0 和 -0 比较相等) .

关于c - 使用 AVX 的有符号/无符号整数的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13869574/

相关文章:

x86 - 英特尔avx2中的movemask指令是否有反指令?

c - 如何确定 foo.c 中的哪些预处理器宏源自 bar.h?

c - C 中出现段错误

c - 排序文本文件

visual-studio - 如何将 'long long'(或 __int64)转换为 __m64

c++ - 相当于 m256_f32 的 GCC

c - 在 C 中初始化指针最干净的方法是什么?

c - 在禁用优化的情况下,演示代码无法显示 4 倍快的 SIMD 速度

c - _mm_cvt_ss2si 给出的结果与简单舍入不同

c++ - 可以原子地获取和运算的最大数据类型?