我最近经常以内部函数的形式使用 x86 SIMD 指令 (SSE1234)。我发现令人沮丧的是,SSE ISA 有几个简单的指令,它们仅适用于浮点数或整数,但理论上两者的性能应该相同。例如,浮点向量和双精度向量都有从地址(movhps,movhpd)加载 128 位向量的高 64 位的指令,但对于整数向量没有这样的指令。
我的问题:
在整数向量上使用浮点指令时,是否有任何理由预期性能会受到影响,例如使用movhps将数据加载到整数向量?
我写了几个测试来检查,但我认为他们的结果不可信。编写一个正确的测试来探索这些事情的所有极端情况真的很困难,尤其是当指令调度最有可能涉及到这里时。
相关问题:
其他琐碎相似的事情也有几条基本相同的指令。例如,我可以对por、orps或orpd进行按位或运算。谁能解释这些附加说明的目的是什么?我猜这可能与应用于每条指令的不同调度算法有关。