我正在查看 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/