Поделиться через


Включение поддержки Windows 7 для Intel AVX

Затронутые платформы

Клиенты — Windows 7 с пакетом обновления 1 (SP1)
Серверы — Windows Server 2008 R2 с пакетом обновления 1 (SP1)

Влияние на функции

Уровень серьезности — низкий
Частота — низкая

Описание

Intel? Advanced Vector Extensions (AVX)? — это 256-разрядное расширение вектора SIMD с плавающей запятой в архитектуре Intel. Он включает расширения для наборов инструкций и регистров.

Корпорация Майкрософт разработала некоторые усовершенствования API, такие как функции XState, которые позволяют приложениям получать доступ к расширенной информации о функциях процессора и состоянии, включая AVX, и управлять ими.

Сценарии использования

Существует три общих уровня потенциального воздействия.

Уровень 1. Приложения, которые напрямую не используют Intel AVX, не увидят никакого влияния на их функциональность, даже если они вызывают библиотеки или используют компиляторы, которые косвенно используют или создают расширения Intel AVX. Это, безусловно, большинство приложений.

Уровень 2. Расширенные приложения, которые явно используют набор инструкций Intel AVX, смогут получать доступ к содержимому регистрации AVX и изменять их при возникновении аппаратного исключения. В эту категорию будет попадать очень небольшое число приложений, так как это подразумевает глубокое знание потока инструкций, выполняемого во время исключения, например приложений с разделами, написанными на языке ассемблера, или тех, которые создают машинный код во время выполнения (например, среды выполнения управляемого кода с JIT-компиляцией).

Уровень 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, чтобы получить маску включенных функций XState на процессорах x86 или x64, чтобы определить, какие функции присутствуют и включены в системе, прежде чем использовать функцию процессора XState или пытаться управлять контекстами XState

2. Если avx присутствует и вы хотите получить состояние AVX и управлять им из отлаживаемого приложения (например, GetThreadContext и SetThreadContext), отладчик должен использовать:

  • Функция InitializeContext для инициализации структуры контекста внутри буфера с необходимым размером и выравниванием
  • Функция CopyContext для копирования структуры исходного контекста (включая любой XState) в инициализированную структуру контекста назначения

3. Чтобы проверить, задать и найти состояние AVX в контексте процессора, отладчик должен использовать:

  • LocateXStateFeature для получения указателя на состояние процессора для отдельного компонента XState в структуре контекста
  • GetXStateFeaturesMask, чтобы вернуть маску функций XState, заданных в структуре контекста
  • SetXStateFeaturesMask, чтобы задать маску функций XState, заданных в структуре контекста