【问题标题】:Do Intel CPUs support Trailing Bit Manipulation (TBM) instructions?英特尔 CPU 是否支持尾随位操作 (TBM) 指令?
【发布时间】:2018-04-19 23:10:24
【问题描述】:

Intel CPU 是否支持 TBM(尾随位操作)指令?

我正在尝试在 Intel 上使用 bextr 与直接参数,并在设置 tbmCPUID 位时获得 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 个/周期),pdeppext 没有单独的标志所以不支持他们并不是一个真正的选择。

标签: assembly cpu cpu-architecture cpuid bmi


【解决方案1】:

intel 指令集参考,2017 年 10 月版,当然似乎没有列出带有立即操作数的版本。同样,在cpuid 中没有提到tbm 标志。 Intel 将其列为保留的 AMD 规范中的第 21 位。看来您确实必须检查供应商 ID。

出于好奇,您在哪个英特尔 cpu 上进行了尝试,它会为 cpuid 中的保留 tbm 位返回 1

【讨论】:

  • 一个Intel(R) Xeon(R) CPU E5-2690 v4 @ 2.60GHz
  • @gnzlbg:在 i7-6700k 上,对于 eax=0x80000001 / CPUID,我得到 ecx=0x121(没有设置第 21 位)。按照从低位到高位的顺序,that indicates LAHF in long mode, LZCNT, and PREFETCHW.。我很惊讶你得到了 21 位。 Sandpile 没有提到它被用于英特尔的其他东西。
  • @gnzlbg:您确定您使用的 CPUID 正确吗?也许尝试像etallen.com/cpuid.html 这样的独立CPUID 转储程序来仔细检查。例如运行 cpuid -l 0x80000001 -r 以获取原始转储。
  • @PeterCordes 需要,我正在检查处理器信息而不是扩展处理器信息...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
  • 2014-11-27
  • 2011-09-01
  • 2012-01-01
相关资源
最近更新 更多