有没有使用MOVDQU和MOVUPD优于MOVUPS的情况?

Dam*_*ira 5 x86 assembly sse x86-64 intel

我试图了解intel x86-64上SSE的不同MOV指令.

根据这个,你应该在2个寄存器之间移动数据时使用对齐指令(MOVAPS,MOVAPD和MOVDQA),使用正确操作的类型.将寄存器移动到存储器时使用MOVUPS/MOVAPS,反之亦然,因为类型在移入/移出存储器时不会影响性能.

那么有没有理由使用MOVDQU和MOVUPD?我在链接上的解释是错误的吗?

Gri*_*tov 1

请注意,您引用的有关 SSE 移动性能的链接相当旧,可能仅适用于老一代的英特尔硬件。我了解到,最近的微架构提高了未对齐加载指令的性能,例如在它们用于实际对齐数据的情况下。总而言之,简短的基准测试是适用于您所拥有的特定硬件的有效信息的最佳来源。