SIMD指令全解析:比较、转换与内存对齐
1. 真与假比较
“真”和“假”比较操作总是将真或假存储到目标通道中。不过,在大多数情况下,这些比较操作并非特别有用。对于将XMM或YMM寄存器置为0,pxor、xorps、xorpd、vxorps和vxorpd指令可能是更好的选择。在AVX2之前,使用真比较是将XMM或YMM寄存器的所有位都置为1的最短指令,不过pcmpeqb指令也常被使用(需注意该指令在微架构层面存在效率问题)。
需要注意的是,非AVX CPU不支持GT、GE、NGT和NGE指令。在这些CPU上,可以使用逆操作(例如,用NLT替代GE),或者交换操作数并使用相反的条件(就像在打包整数比较中那样)。
2. 无序与有序比较
当参与比较的两个源操作数中至少有一个是NaN时,无序关系为真;当两个源操作数都不是NaN时,有序关系为真。有序和无序比较的存在,使得我们可以根据对通道中最终布尔结果的不同解释,将错误条件通过比较操作以真或假的形式传递出去。顾名思义,无序比较的结果是不可比的。当比较两个值,其中一个不是数字时,必须始终将比较结果视为失败。
为了处理这种情况,可以使用有序或无序比较,将结果强制设为假或真,这与使用比较结果时最终期望的结果相反。例如,假设要比较一系列值,并且希望在所有比较都有效时,生成的掩码为真(例如,检查所有src1值是否都大于对应的src2值)。在这种情况下,应使用有序比较,若参与比较的值中有一个是NaN,则将特定通道置为假。另一方面,如果要检查比较后所有条件是否都为假,则可以使用无序比较,若任何一个值是NaN,则将结果强制设为真。
3. 信号与安静比较
信号比较在操作
超级会员免费看
订阅专栏 解锁全文
43

被折叠的 条评论
为什么被折叠?



