1. [Wiki](https://feex.it/wiki/)
2. [硬件](https://feex.it/wiki/hardware/)
3. [系统与架构](https://feex.it/wiki/hardware/system/)
4. BMI2

# BMI2

架构参考: Feex

BMI2 增加了标量 x86 位和整数操作，例如并行位沉积/提取、可变位移和与标志位无关的乘法。它与 BMI1 是分开的。

## 您需要了解的内容

BMI2 增加了标量 x86 位和整数操作，例如并行位沉积/提取、可变位移和与标志位无关的乘法。它与 BMI1 是分开的。

## 工作原理

PEXT 将选定的输入位收集为紧凑的低阶结果；PDEP 将低阶输入位分散到掩码选定的位置。其他 BMI2 指令包括 BZHI、MULX、RORX、SHLX、SHRX 和 SARX。尽管采用 VEX 编码，但这些指令均操作标量整数寄存器。

## 适用场景

紧凑的棋盘表示或位字段编解码器可以使用 PEXT/PDEP 在紧凑和稀疏的位布局之间进行映射。它们的执行开销因不同微架构实现而大相径庭，因此算法应针对具有代表性的输入进行基准测试，而不是假定简短的指令序列一定更快。

## 如何检查支持与启用状态

CPUID.07H.00H:EBX 第 8 位枚举 BMI2。检查实际使用的指令在特定目标上的性能，并确保特性分发逻辑位于无需不受支持特性的编译代码之外。

应检查具体的指令和操作数形式，而不是从相邻的扩展中推测支持情况。标量整数特性通常使用通用寄存器；与向量相关的编码并不自动意味着存在向量状态要求。

## 该特性未确立的内容

BMI2 不是 AVX 向量扩展，不能仅因其编码为 VEX 就认为需要 YMM 状态。它并不意味着支持 ADX 或 BMI1。MULX 与常规乘法在寄存器和标志位行为上有所不同。

## 实践中的兼容性与性能

正确性不仅取决于速度，还取决于边界用例。零输入、溢出、进位标志、操作数宽度、对齐和内存顺序都可能改变语义。建议优先使用记录了这些细节并提供受支持回退方案的编译器或库接口。

## 实用验证核对清单

1. 记录所涉及的具体处理器或平台型号，以及应用程序、操作系统和运行时的版本。保留实际错误或要求的原始措辞。
2. 查阅该具体型号的制造商参考资料，然后检查程序运行环境中生效的功能与启用状态。
3. 逐项比对所选二进制文件或后端的每项要求。仅凭名称相似的特性、别名或宽泛的技术标签是不够的。
4. 确认应用程序选择了预期的实现。在不满足要求时，使用其文档中记录的诊断工具和受支持的回退方案。
5. 每次只进行一项受支持的更改并重复相同的负载测试。保留原始配置和恢复路径以便随时使用。

## 若特性已列出但软件无法使用

首先排查出现故障的具体组件。硬件数据库描述的是记录在案的功能；操作系统或虚拟机监控程序可能会呈现不同的生效环境。非法指令错误同样需要调查实际发生故障的指令和二进制构建版本，因为数据损坏或不相关的未受支持指令也可能产生类似症状。

安装适用于该特定平台的受支持应用程序、驱动程序或运行时版本，并在需要时使用厂商文档记录的基线或回退构建版本。软件更新无法凭空创造处理器缺失的指令。固件和安全策略的更改应遵循系统制造商的规程和恢复计划，而非通用的优化方案。

## 相关特性与实用区别

[BMI1](https://feex.it/wiki/l/zh-hans/hardware/system/bmi1/) · [ADX](https://feex.it/wiki/l/zh-hans/hardware/system/adx/) · [x86-64-v3](https://feex.it/wiki/l/zh-hans/hardware/system/x86-64-v3/)

## 本说明的来源与适用范围

[Intel 64 和 IA-32 架构软件开发人员手册](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html) · [x86-64 psABI：处理器架构和微架构级别](https://gitlab.com/x86-psABIs/x86-64-ABI/-/blob/master/x86-64-ABI/low-level-sys-info.tex)

这些参考资料确立了架构行为和软件要求。它们并不独立验证关联硬件型号页面上的每个特性值。如需了解型号支持情况，请使用该页面的制造商证据并检查实际生效的系统配置。本文不提供基准测试、认证或独立审查日期。

## 相关内容

这些实体与本文相关联。每个链接上均显示类型。

[BMI1: 架构参考](https://feex.it/wiki/l/zh-hans/hardware/system/bmi1/)[ADX: 架构参考](https://feex.it/wiki/l/zh-hans/hardware/system/adx/)[x86-64-v3: 架构参考](https://feex.it/wiki/l/zh-hans/hardware/system/x86-64-v3/)

## 来源与验证

编辑归属：Feex。未记录独立审核日期。 [我们的研究方式](https://feex.it/wiki/research/).

- [Intel 64 和 IA-32 架构软件开发人员手册 ](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)· 第 1 卷和第 2 卷描述了指定名称的指令族和 CPUID；第 3 卷描述了状态、分页、VMX 和保护控制。架构文档并不代表对某一特定型号的支持。
- [x86-64 psABI：处理器架构和微架构级别 ](https://gitlab.com/x86-psABIs/x86-64-ABI/-/blob/master/x86-64-ABI/low-level-sys-info.tex)· 机器接口，处理器架构：基线和累积 v2/v3/v4 特性表、操作系统状态检查以及部署建议。

## 这篇文章有用吗？

回答"是"或"否"即可。如果您愿意，可以选择一个原因，或添加一段简短附言。

速览

本页面的简要身份信息。详细规格、来源和完整内容保留在正文中。

---

Source: [Canonical Feex Wiki page](https://feex.it/wiki/l/zh-hans/hardware/system/bmi2/)

[Developer guide](https://feex.it/wiki/developers/) | [API policy](https://feex.it/developers/api-policy/) | [Agent guidance](https://feex.it/wiki/llms.txt)
