启用 Windows 7 对 Intel AVX 的支持

受影响的平台

客户端 - Windows 7 SP1
服务器 - Windows Server 2008 R2 SP1

功能影响

严重性 - 低
频率 - 低

说明

Intel 高级矢量扩展 (AVX) 是 Intel 体系结构的 256 位 SIMD 浮点矢量扩展。 它包括指令集和寄存器集的扩展。

Microsoft 开发了一些 API 增强功能,例如 XState 函数,使应用程序能够访问和操作扩展处理器功能信息和状态,包括 AVX。

使用方案

潜在影响有三个一般级别。

级别 1: 不直接使用 Intel AVX 的应用程序不会看到对其功能的任何影响,即使它们调用库或使用间接使用或生成 Intel AVX 扩展的编译器也是如此。 这代表了迄今为止大多数应用程序。

级别 2: 当引发硬件异常时,显式使用 Intel AVX 指令集的高级应用程序将能够访问和更改 AVX 寄存器内容。 极少数应用程序属于此类别,因为它意味着对异常时执行的指令流有深入的了解,例如,使用汇编语言编写的部分的应用程序或在运行时生成计算机代码的应用程序 (例如,具有实时编译) 的托管代码运行时。

级别 3: 调试器应用程序将能够访问和操作正在调试的应用程序中的 AVX 状态。

如何利用功能

级别 1: 应用程序无需执行任何操作来使用 Intel AVX。

级别 2: 此类别中的应用程序可以选择在发生异常时从其异常筛选器中访问和操作 AVX 状态。 通过 GetExceptionInformation 获取基本处理器上下文后,筛选器应:

1. 检查 CONTEXT_XSTATE 标志的值。 此标志指示上下文中至少存在一个 XState 功能。
2. 如果是这种情况,请调用 GetXStateFeaturesMask 并测试返回掩码中 XSTATE_AVX 标志的值。 这表示上下文中存在 AVX 状态。
3. 调用 LocateXStateFeature 以检索存储 AVX 状态的实际位置。

级别 3: 无需更新现有调试器应用程序,除非它们希望访问 Intel AVX 寄存器:

1. 若要确定是否启用了 AVX,调试器应使用:

  • GetEnabledXStateFeatures 获取 x86 或 x64 处理器上已启用的 XState 功能的掩码,以确定在使用 XState 处理器功能或尝试操作 XState 上下文之前系统上存在和启用的功能

2. 如果存在 AVX,并且你希望从正在调试的应用程序检索和操作 AVX 状态, (例如 GetThreadContext 和 SetThreadContext) ,则调试器应使用:

  • InitializeContext 函数,用于使用必要的大小和对齐方式初始化缓冲区内的上下文结构
  • CopyContext 函数,用于复制源上下文结构 (包括任何 XState) 到初始化的目标上下文结构上

3. 若要在处理器上下文中测试、设置和定位 AVX 状态,调试器应使用:

  • LocateXStateFeature 用于检索指向上下文结构中单个 XState 功能的处理器状态的指针
  • GetXStateFeaturesMask,用于返回上下文结构中设置的 XState 功能的掩码
  • SetXStateFeaturesMask 用于设置上下文结构中 XState 功能集的掩码