【问题标题】:Why two bitwise or AVX instructions? [duplicate]为什么要两条按位或 AVX 指令? [复制]
【发布时间】:2012-12-09 01:54:19
【问题描述】:

在 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]

这两个处理器操作之间有什么实际区别吗?如果不是:为什么有两条指令?如果不是:使用它们进行整数按位或是否安全?

【问题讨论】:

标签: x86 bit-manipulation avx instructions bitwise-or


【解决方案1】:

所有(或几乎所有)SEE/AVX 指令的 PS 和 PD 变体的存在有一个历史背景:曾几何时,当英特尔最初设计第一个 SSE 指令集时,他们认为未来的芯片架构将具有三个域: 整数单精度浮点(32位)、双精度浮点(64 -位)

注意:是 CPU 中的独立逻辑单元,它们很重要,因为在它们之间传输 SSE/AVX 寄存器内容时会有一点延迟。因此,如果将整数域指令的结果用作浮点域指令的输入,则可能会出现 1 或 2 个周期的延迟。

出于这个原因,英特尔将大多数逻辑按位和混洗指令镜像了 3 次:1 次用于整数,1 次用于 SP-FP,1 次用于 DP-FP。这些镜像指令执行的操作是相同的——包括整数和浮点类型。

目前大多数 x86 架构都有两个域:IntegerFloating Point。 FP 域处理单精度和双精度(32/64 位)。一些架构只有一个域用于所有 SSE/AVX 指令。未来的一些架构中可能会添加第三个双精度域。

【讨论】:

    【解决方案2】:

    运算结果没有区别。逻辑一致性有两种类型,因为有两种数据类型单压缩 (float32) 和双压缩 (float64)。

    在整数的情况下,你使用什么操作并不重要,只要与数据类型保持一致即可。如果您使用最大 32 位宽度包装 int,则使用单包装,如果更大,则使用双包装。试想一下,您可以将 32 位 int 提升到 64 位 int 而不会丢失,但如果是灾难路线,则反之亦然。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-20
      • 2023-04-02
      • 2013-06-06
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      相关资源
      最近更新 更多