为什么需要两个按位或AVX指令?

7

AVX中有两个指令用于执行按位或操作:VORPD和VORPS。文档中说明:

VORPD (VEX.256 encoded version)
DEST[63:0] <- SRC1[63:0] BITWISE OR SRC2[63:0]
DEST[127:64] <- SRC1[127:64] BITWISE OR SRC2[127:64]
DEST[191:128] <- SRC1[191:128] BITWISE OR SRC2[191:128]
DEST[255:192] <- SRC1[255:192] BITWISE OR SRC2[255:192]

并且。
VORPS (VEX.256 encoded version)
DEST[31:0] <- SRC1[31:0] BITWISE OR SRC2[31:0]
DEST[63:32] <- SRC1[63:32] BITWISE OR SRC2[63:32]
DEST[95:64] <- SRC1[95:64] BITWISE OR SRC2[95:64]
DEST[127:96] <- SRC1[127:96] BITWISE OR SRC2[127:96]
DEST[159:128] <- SRC1[159:128] BITWISE OR SRC2[159:128]
DEST[191:160] <- SRC1[191:160] BITWISE OR SRC2[191:160]
DEST[223:192] <- SRC1[223:192] BITWISE OR SRC2[223:192]
DEST[255:224] <- SRC1[255:224] BITWISE OR SRC2[255:224]

这两种处理器操作是否有任何实际区别呢?如果没有,为什么会有两个指令?同样地,如果没有区别,使用它们进行整数按位或运算是否安全?


相关:https://dev59.com/23E85IYBdhLWcg3wYSZk - Paul R
2个回答

3
所有(或几乎所有)SEE / AVX指令都存在PS和PD两个变体,这是有历史背景的:曾经,当英特尔最初设计第一个SSE指令集时,他们认为未来的芯片架构将具有三个“领域”:整数单精度浮点(32位)、双精度浮点(64位)。 注意:领域是CPU内部分离的逻辑单元,它们很重要,因为在它们之间传输SSE / AVX寄存器内容会有一小段延迟。因此,如果整数领域中的指令结果用作浮点领域中的指令输入,则可能会出现1或2个周期的延迟。
因此,英特尔将大多数逻辑位和洗牌指令镜像了三次:一次为整数,一次为SP-FP,一次为DP-FP。这些镜像指令执行的操作是相同的,包括整数和浮点变体之间。
目前,大多数x86架构都有两个领域:整数浮点。FP领域处理单精度和双精度(32/64位)。有些架构仅具有一个领域,用于所有SSE / AVX指令。未来的一些架构可能会增加第三个双精度领域。

2

这个操作的结果没有区别。由于有两种数据类型,即单精度包装(float32)和双精度包装(float64),因此存在逻辑一致性的两种类型。

对于整数,使用哪种操作并不重要,只需与数据类型保持一致即可。如果将int与最大32位宽度捆绑在一起,则使用单精度包装;如果更大,则使用双精度包装。可以将32位int转换为64位int而不会丢失,但反过来则是一场灾难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接