【发布时间】:2018-04-19 23:10:24
【问题描述】:
Intel CPU 是否支持 TBM(尾随位操作)指令?
我正在尝试在 Intel 上使用 bextr 与直接参数,并在设置 tbm 的 CPUID 位时获得 SIGILL。
这是否意味着 Intel CPU 不支持 TBM?
检查 TBM 支持的正确方法是什么?
如果供应商 id 是 AuthenticAMD,则只应检查此位?
【问题讨论】:
-
甚至 AMD 也放弃了支持
-
bextr imm仅适用于 AMD。 Intel 仅支持 BMI/BMI2,与 TBM 有一些重叠。 -
@peter -
pextr如果您可以在循环外设置提取掩码,则可以在 1 uop 内完成工作。缺点是 3 个周期的延迟,它只在一个端口上运行。有趣的是,这样一条通用指令运行的微指令比受限得多的 bextr 更少。 -
@PeterCordes - 您可以阅读有关此类说明的硬件设计here。实际上,最昂贵的部分似乎是使用并行前缀和计算掩码隐含的控制线,因此与说 64 字节宽
WORD-grainar 相比,这部分对于 64 位位粒度压缩实际上更糟糕手术。当然,我猜蝴蝶网络本身需要的空间要少得多。值得注意的是,英特尔实现了最难的变体,在论文中称为“动态”。 -
可以说 AMD 没有“在硬件中”实现它们绝对是太糟糕了。如果您以 AMD 为目标,糟糕的性能使它们基本上无法使用:您只需跳过它们或创建一个单独的仅 AMD 代码路径(或者让 AMD 使用非 BMI2 代码路径,如果有的话)。我猜 AMD 的手有点勉强:他们在其余指令中非常有效地实现了 BMI2(总体上明显优于 Intel:大多数指令执行 4 个/周期),
pdep或pext没有单独的标志所以不支持他们并不是一个真正的选择。
标签: assembly cpu cpu-architecture cpuid bmi