【发布时间】:2012-12-13 22:24:37
【问题描述】:
我浏览了 AVX 指令指南,虽然有 32 位整数值的加载、存储和置换操作,但其他操作(例如确定最小值或最大值)或随机操作仅适用于浮点数和双精度数。
所以,如果我想对 32 位整数使用这些操作,我需要将其类型转换为浮点数,然后再将其类型转换回来,还是我缺少其他一些指令?
另外,如果我想在 32 位整数上使用随机播放掩码,它们是否与浮点数相同?
【问题讨论】:
我浏览了 AVX 指令指南,虽然有 32 位整数值的加载、存储和置换操作,但其他操作(例如确定最小值或最大值)或随机操作仅适用于浮点数和双精度数。
所以,如果我想对 32 位整数使用这些操作,我需要将其类型转换为浮点数,然后再将其类型转换回来,还是我缺少其他一些指令?
另外,如果我想在 32 位整数上使用随机播放掩码,它们是否与浮点数相同?
【问题讨论】:
32B 向量的大部分整数运算都在 AVX2 扩展中(不是最初的 AVX 扩展,它几乎完全是浮点运算)。 Intel 最新的AVX Programming Reference 有完整的细节;您可能还想看看英特尔的blog post 宣布了一些细节。
不幸的是,您不能使用浮点最小值或最大值运算来模拟对整数数据的这些运算,因为当解释为浮点数据时,大量整数映射到 NaN 值,并且 NaN 比较的语义不会' t 做你想要的整数比较(你还需要处理浮点编码是符号大小的事实,所以负值的顺序是“反转的”,并且 +0 和 -0 比较相等) .
【讨论】:
integer -> floating -> integer 不一定是往返。