启用对 Intel AVX 的 Windows 7 支持

受影响的平台

客户端 - Windows 7 SP1
Server - 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 状态,调试器应使用:

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