Как узнать поддерживает ли процессор avx

Обновлено: 06.07.2024

Аббревиатура AVX расшифровывается как Advanced Vector Extensions. Это наборы инструкций для процессоров Intel и AMD, идея создания которых появилась в марте 2008 года. Впервые такой набор был встроен в процессоры линейки Intel Haswell в 2013 году. Поддержка команд в Pentium и Celeron появилась лишь в 2020 году.

Прочитав эту статью, вы более подробно узнаете, что такое инструкции AVX и AVX2 для процессоров, а также — как узнать поддерживает ли процессор AVX.

AVX и AVX2 – что это такое

AVX/AVX2 — это улучшенные версии старых наборов команд SSE. Advanced Vector Extensions расширяют операционные пакеты со 128 до 512 бит, а также добавляют новые инструкции. Например, за один такт процессора без инструкций AVX будет сложена 1 пара чисел, а с ними — 10. Эти наборы расширяют спектр используемых чисел для оптимизации подсчёта данных.

Наличие у процессоров поддержки AVX весьма желательно. Эти инструкции предназначены, прежде всего, для выполнения сложных профессиональных операций. Без поддержки AVX всё-таки можно запускать большинство игр, редактировать фото, смотреть видео, общаться в интернете и др., хотя и не так комфортно.

Как узнать, поддерживает ли процессор AVX

Далее будут показаны несколько простых способов узнать это. Некоторые из методов потребуют установки специального ПО.

Для того чтобы узнать, поддерживает ли ваш процессор инструкции AVX, можно воспользоваться предлагаемым способом. Перейдите на этот сайт. В правом верхнем углу страницы расположена зелёная кнопка Добавить процессор. Нажмите её.


В открывшемся окне вам будет предложено указать параметры выбора нужного процессора. Все указывать не обязательно.


В результате выполнения поиска будет сформирована таблица с параметрами выбранного из списка процессора. Прокрутите таблицу вниз. В строке Поддержка инструкций и технологий будет показана подробная информация.



В строке Instructions показаны все инструкции и другие технологии, поддерживаемые вашим процессором.

Ещё один способ узнать, есть ли AVX на процессоре, воспользоваться официальным сайтом производителя процессоров. В строке поиска браузера наберите название процессора и выполните поиск. Если у вас процессор Intel, выберите соответствующую страницу в списке и перейдите на неё. На этой странице вам будет предоставлена подробная информация о процессоре.


Если у вас процессор от компании AMD, то лучше всего будет воспользоваться сайтом AMD. Выберите пункт меню Процессоры, далее — пункт Характеристики изделия и затем, выбрав тип (например, Потребительские процессоры), выполните переход на страницу Спецификации процессоров. На этой странице выполните поиск вашего процессора по названию и посмотрите подробную информацию о нём.



Выводы

В этой статье мы довольно подробно рассказали о поддержке процессорами инструкций AVX, AVX2, а также показали несколько способов, позволяющих выяснить наличие такой поддержки конкретно вашим процессором. Надеемся, что дополнительная информация об используемом процессоре будет полезна для вас, а также поможет в выборе процессора в будущем.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Чтобы убедиться в работоспособности AVX кода лучше написать к нему Unit-тесты. Однако встаёт вопрос: как запустить эти Unit-тесты, если ни один ныне продаваемый процессор не поддерживает AVX? В этом вам поможет специальная утилита от Intel — Software Development Emulator (SDE). Всё, что умеет SDE — это запускать программы, на лету эмулируя новые наборы инструкций. Разумеется, производительность при этом будет далека от таковой на реальном железе, но проверить корректность работы программы таким образом можно. Использовать SDE проще простого: если у вас есть unit-тест для AVX кода в файле avx-unit-test.exe и его нужно запускать с параметром «Hello, AVX!», то вам просто нужно запустить SDE с параметрами
sde -- avx-unit-test.exe "Hello, AVX!"
При запуске программы SDE сэмулирует не только AVX инструкции, но также и инструкции XGETBV и CPUID, так что если вы используете предложенный ранее метод для детектирования поддержки AVX, запущенная под SDE программа решит, что AVX действительно поддерживается. Кроме AVX, SDE (вернее, JIT-компилятор pin, на котором SDE построен) умеет эмулировать SSE3, SSSE3, SSE4.1, SSE4.2, SSE4a, AES-NI, XSAVE, POPCNT и PCLMULQDQ инструкции, так что даже очень старый процессор не помешает вам разрабатывать софт под новые наборы инструкций.

Оценка производительности AVX кода

Некоторое представление о производительности AVX кода можно получить с помощью другой утилиты от Intel — Intel Architecture Code Analyzer (IACA). IACA позволяет оценить время выполнения линейного участка кода (если встречаются команды условных переходов, IACA считает, что переход не происходит). Чтобы использовать IACA, нужно сначала пометить специальными маркерами участки кода, которые вы хотите проанализировать. Маркеры выглядят следующим образом:
; Начало участка кода, который надо проанализировать
%macro IACA_START 0
mov ebx, 111
db 0x64, 0x67, 0x90
%endmacro

  • -32 — означает, что входной объектный файл (MS COFF) содержит 32-битный код. Для 64-битного кода нужно указывать -64. Если на вход IACA подаётся не объектный файл (.obj), а исполняемый модуль (.exe или .dll), то этот аргумент можно не указывать.
  • -arch AVX — показывает IACA, что нужно анализировать производительность этого кода на будущем процессоре Intel с поддержкой AVX (т.е. Sandy Bridge). Другие возможные значения: -arch nehalem и -arch westmere.
  • -cp DATA_DEPENDENCY просит IACA показать, какие инструкции находятся на критическом путе для данных (т.е. какие инструкции нужно соптимизировать, чтобы результат работы этого кода вычислялся быстрее). Другое возможное значение: -cp PERFORMANCE просит IACA показать, какие инструкции «затыкают» конвеер процессора.
  • -mark 0 говорит IACA проанализировать все помеченные маркерами участки кода. Если задать -mark n, IACA будет анализировать только n-ый размеченный участок кода.
  • -o avx-sample задаёт имя файла, в который будут записаны результаты анализа. Можно опустить этот параметр, тогда результаты анализа будут выведены в консоль.

Analysis Report
---------------
Total Throughput: 2 Cycles; Throughput Bottleneck: FrontEnd, Port2_ALU, Port2_DATA, Port4
Total number of Uops bound to ports: 6
Data Dependency Latency: 14 Cycles; Performance Latency: 15 Cycles

N - port number, DV - Divider pipe (on port 0), D - Data fetch pipe (on ports 2 and 3)
CP - on a critical Data Dependency Path
N - number of cycles port was bound
X - other ports that can be used by this instructions
F - Macro Fusion with the previous instruction occurred
^ - Micro Fusion happened
* - instruction micro-ops not bound to a port
@ - Intel(R) AVX to Intel(R) SSE code switch, dozens of cycles penalty is expected
! - instruction not supported, was not accounted in Analysis

| Num of | Ports pressure in cycles | |
| Uops | 0 - DV | 1 | 2 - D | 3 - D | 4 | 5 | |
------------------------------------------------------------
| 1 | | | | 1 | 2 | X | X | | | CP | vmovups ymm0, ymmword ptr [ecx]
| 2^ | | | | X | X | 1 | 1 | | 1 | | vbroadcastss ymm1, dword ptr [edx]
| 1 | 1 | | | | | | | | | CP | vmulps ymm0, ymm0, ymm1
| 2^ | | | | 1 | | X | | 2 | | CP | vmovups ymmword ptr [ecx], ymm0
| 0* | | | | | | | | | | | vzeroupper

Самыми важными метриками здесь являются Total Throughput и Data Dependency Latency. Если код, который вы оптимизируете, это небольшая подпрограмма, и в программе есть зависимость по данным от её результата, то вам нужно стараться сделать Data Dependency Latency как можно меньше. В качестве примера может служить приведённый выше листинг подпрограммы vec4_dot_avx. Если же оптимизируемый код — это часть цикла, обрабатывающего большой массив элементов, то ваша задача — уменьшать Total Throughput (вообще-то эта метрика должна была бы называться Reciprocal Throughput, ну да ладно).

Использование AVX в коде на C/C++

  • Microsoft C/C++ Compiler начиная с версии 16 (входит в Visual Studio 2010)
  • Intel C++ Compiler начиная с версии 11.1
  • GCC начиная с версии 4.4
  • /arch:AVX — для Microsoft C/C++ Compiler и Intel C++ Compiler под Windows
  • -mavx — для GCC и Intel C++ Compiler под Linux
  • /QxAVX — для Intel C++ Compiler
  • /QaxAVX — для Intel C++ Compiler
Определение поддержки AVX системой
  • Windows 7
  • Windows Server 2008 R2
  • Linux с ядром 2.6.30 и выше

Нетрудно заметить, что маски XSTATE_MASK_* соответствуют аналогичным битам регистра XFEATURE_ENABLED_MASK.
В дополнение к этому, в Windows DDK есть описание функции RtlGetEnabledExtendedFeatures и констант XSTATE_MASK_XXX, как две капли воды похожих на GetEnabledExtendedFeatures и XSTATE_MASK_* из WinNT.h. Т.о. для определения поддержки AVX со стороны Windows можно воспользоваться следующим кодом:
int isAvxSupportedByWindows() const DWORD64 avxFeatureMask = XSTATE_MASK_LEGACY_SSE | XSTATE_MASK_GSSE;
return GetEnabledExtendedFeatures( avxFeatureMask ) == avxFeatureMask;
>
Если ваша программа должна работать не только в Windows 7 и Windows 2008 R2, то функцию GetEnabledExtendedFeatures нужно подгружать динамически из kernel32.dll, т.к. в других версиях Windows этой функции нет.

В Linux, насколько мне известно, нет отдельной функции, чтобы узнать о поддержке AVX со стороны ОС. Но вы можете воспользоваться тем фактом, что поддержка AVX было добавлена в ядро 2.6.30. Тогда остаётся только проверить, что версия ядра не меньше этого значения. Узнать версию ядра можно с помощью функции uname.

Использование AVX-инструкций
Тестирование AVX кода

Если вы используете набор инструкций AVX посредством intrinsic-функций, то, кроме запуска этого кода под эмулятором SDE, у вас есть ещё одна возможность — использовать специальный заголовочный файл, эмулирующий 256-битные AVX intrinsic-функции через intrinsic-функции SSE1-SSE4.2. В этом случае у вас получится исполняемый файл, который можно запустить на процессорах Nehalem и Westmere, что, конечно, быстрее эмулятора. Однако учтите, что таким методом не получиться обнаружить ошибки генерации AVX-кода компилятором (а они вполне могут быть).

Оценка производительности AVX кода

Использование IACA для анализа производительности AVX кода, созданного C/C++ компилятором из intrinsic-функций почти ничем не отличается от анализа ассемблерного кода. В дистрибутиве IACA можно найти заголовочный файл iacaMarks.h, в котором описаны макросы-маркеры IACA_START и IACA_END. Ими нужно пометить анализируемые участки кода. В коде подпрограммы маркер IACA_END должен находиться до оператора return, иначе компилятор «соптимизирует», выкинув код маркера. Макросы IACA_START/IACA_END используют inline-ассемблер, который не поддерживается Microsoft C/C++ Compiler для Windows x64, поэтому если для него нужно использовать специальные варианты макросов — IACA_VC64_START и IACA_VC64_END.

Заключение

В этой статье было продемонстрировано, как разрабатывать программы с использованием набора инструкций AVX. Надеюсь, что это знание поможет вам радовать своих пользователей программами, которые используют возможности компьютера на все сто процентов!


Первым делом я хочу сказать что использую один и тот же комплект ОЗУ на обеих системах AMD и Intel, и я хотел бы особо отметить слоты ОЗУ в системной плате ASRock B560M-HDV, они отвратительны без преувеличений, эта конструкция от Asus с одной защелкой просто ужасна, каждый раз перемещая модули ОЗУ между системами я слышу скрип контактов в углу слота который без защелки.


MSI RTX 3070 сливают дешевле любой другой, это за копейки Дешевая 3070 Gigabyte Gaming - успей пока не началось

Рано или поздно либо дорожки у модулей ОЗУ познают отвал, либо слот ОЗУ, крайне рекомендую обходить стороной системные платы с такими "крутыми" слотами ОЗУ без второй защелки, это не только противно звучит при использовании, но и явно сокращает срок службы оборудования.

Я очень рад, что Gigabyte не страдает экономией на слотах ОЗУ в ущерб надежности и долговечности как это делает Asus и ASRock (по сути тот же Asus), но меня удручает осознание того, что новенькая ASRock B560 может скоро пойти в мусорное ведро из-за максимально дешевых слотов которые Asus (ASRock) применяют даже в дорогих платах.

реклама

var firedYa28 = false; window.addEventListener('load', () => < if(navigator.userAgent.indexOf("Chrome-Lighthouse") < window.yaContextCb.push(()=>< Ya.Context.AdvManager.render(< renderTo: 'yandex_rtb_R-A-630193-28', blockId: 'R-A-630193-28' >) >) >, 3000); > > >);

P.S. На видеокарте я специально до конца стараюсь не защелкивать ибо доступ к защелке видеокарты, как правило, затруднен.

Теперь продолжим по теме Cinebench и AVX инструкций, сколько бы я ретестов не делал, каждый раз было очевидно занижение результатов AMD начиная с версии Cinebench R20, я уже и HPET таймер привлек к тестам, и процессоры зафиксировал на одинаковой частоте, и сейчас вот пришла очередь затронуть AVX.

Тестовые условия

Частота ядер зафиксирована на отметке 3.9 ГГц, HPET по умолчанию (включен), R7 2700X с одним активным CCX.

ПК отключен от сети интернет, чтобы минимизировать погрешность из-за возможной скрытной фоновой активности Windows 10.

реклама

Информация в CPU-Z остается прежняя при отключении AVX с помощью командной строки потому не буду дублировать скриншоты.

Enable AVX: bcdedit /set xsavedisable 0
Disable AVX: bcdedit /set xsavedisable 1



В процессе тестирования GTX 750 Ti была заменена на R9 290, но на результаты это никак не повлияло в итоге.


Результаты тестов

реклама

Cinebench R15







Cinebench R20







Cinebench R23

Здесь результат R7 2700X со включенным AVX имеет погрешность в меньшую сторону, возможно видеодрайвер в фоне что-то сделал или какая-то служба Windows 10 подгрузила, но я это заметил уже после сбора всех результатов.

Чтобы не искажать данной погрешностью общую картину, я возьму устойчивый результат из предыдущих моих тестов который получен в таких же условиях со включенным AVX и HPET по умолчанию с зафиксированными частотами ядер.

Я конечно мог удалить "неудачный" результат на который что-то из фона Windows 10 повлияло, но мне нужно будет снова доставать ОЗУ из противных слотов с одной защелкой от Asus (ASRock), так что оставлю как напоминание о возможной погрешности результатов по вине операционной системы.





Результаты Windows 7 отсутствуют т.к. разработчики 23 версии теста подключили библиотеки Microsoft что отказываются работать на "неправильной" системе.

Rage II

Я думал использовать игру, чтобы посмотреть есть ли значительная разница от AVX с процессором AMD Ryzen, но игра просто падала в ошибку с отключенным AVX через Windows.



Я даже установил R9 290 вместо GTX 750Ti в ПК с R7 2700X, Delux MicroATX 450W судя по всему очень рад новому партнеру, хотя пришлось скрутить один переходник с молекса на 8pin VGA.

В итоге установка видеокарты от AMD не повлияла никак на игру и она падает с ошибкой, причем замечу, с Windows 7 данная игра прекрасно работала на процессоре Phenom II x4 830 без AVX.



Чтобы наверняка исключить возможность вины Windows 10, я провел тесты еще и на основном ПК с R5 1600AF и Windows 7, при отключении AVX средствами Windows игра все так же падает.



Похоже здесь лежит вина на основе Windows Vista, в той самой на которой построены Windows 7/8/10/11.

AIDA64

Так как с игрой не срослось я решил пойти в AIDA64, однако замечу, AIDA64 активно использует AVX2, но я не нашел способ отключить AVX2 отдельно от AVX.



















А еще я обнаружил что изменение множителя AVX2 в BIOS никак не влияло на результаты тестов несмотря на то, что AIDA64 использует AVX2.

Я пробовал разные варианты множителя, но результат оставался прежним всегда во всех тестах AIDA64.



SiSoftware Sandra Lite (san3149)

Не получив вменяемых результатов со стороны AIDA64 я вспомнил про "Сандру", она умеет тестировать отдельно AVX и AVX2.

К сожалению множитель AVX2 в BIOS действительно неисправен, как его не крути, а результаты одинаковы даже в "Сандре", впрочем, это же Intel, ничего удивительного.







Разбор результатов

Cinebench

И снова очевидна картина с занижением результатов процессоров от AMD, процессор от Intel даже с отключенным AVX иногда получает заметно большее преимущество относительно AMD.


Если сравнить прирост от использования AVX инструкций, то у AMD прирост близок к уровню погрешности нежели к реальным изменениям, тем временем Intel получает почти 10% прироста с использованием AVX, видимо не просто так разработчики подсунули библиотеки от Intel в Cinebench R20/R23.

На использование AVX2 разница точно не вытягивает с i3-10105F, просто обращаю внимание на это, когда перейдем к AIDA64 и SiSoftware Sandra станет понятно почему я обратил на это внимание.


AIDA64

Тесты AIDA64 активно используют AVX и AVX2 в зависимости от того что доступно, и управлять тем что использует AIDA64 невозможно, в итоге использовался AVX2 как с i3-10105F, так и с R7 2700X (1CCX), на этом моменте я просто напомню что Zen/Zen+ имеют лишь совместимость с AVX2, но не полноценную поддержку.

Здесь в полной мере можно заметить насколько сильный прирост дает AVX2 с которым Zen/Zen+ лишь совместимы, однако без помощи AVX2 процессор i3-10105F выглядит жалко по сравнению с R7 2700X даже несмотря на одинаковое количество ядер и частоты.

Еще можно отметить что даже при использовании AVX2 инструкций с которыми у Zen/Zen+ не лучшие отношения, R7 2700X показал прирост почти в 5%, а в худшем случае почти 3%, когда в Cinebench прирост от AVX даже до 2% с трудом дотягивал.


SiSoftware Sandra Lite (san3149)

Вот и настал черед самого интересного, в отличие от AIDA64 данный арифметический тест использует как AVX так и AVX2, и результаты для этих инструкций раздельно представлены.

У Zen/Zen+ действительно с AVX2 дела обстоят не лучшим образом и производительность падает на

4-6% относительно SSE4, тем временем i3-10105F при работе с короткими целочисленными данными имеет 15% прирост относительно SSE4 инструкций.

С AVX/FMA инструкциями относительно SSE4 однозначно нельзя сказать что лучше, R7 2700X или i3-10105F.

Особо бросается в глаза разница с AVX/FMA инструкциями у i3-10105F, она едва доходит до +2%, а в Cinebench R20/23 разница подлетала под +10%, магия библиотек от Intel.


Если же сравнить R7 2700X с i3-10105F при одинаковом количестве ядер и частотах, то i3-10105F смог обойти R7 2700X (1CCX) только используя AVX2 инструкции и то лишь в одном случае из четырёх, во всех остальных случаях i3-10105F отстает от R7 2700X (1CCX) до


Заключение

Факт того что Cinebench R20/R23 больше любит процессоры от Intel снова подтвердился, оно и не удивительно учитывая что разработчики внедрили библиотеки от Intel в свой бенчмарк.

Судя по всему Intel завышает результаты своих процессоров через манипуляции с AVX инструкциями в своих библиотеках которые внедрены в Cinebench начиная с 20 версии.

AIDA64 тем временем отлично реагирует на AVX2 инструкции, и в двух тестах из трёх i3-10105F смог обойти один CCX модуль Zen+ что с AVX2 дружит только на уровне совместимости, однако i3-10105F не справился с усложненным тестом SinJulia и сильно отстал в производительности от Zen+.

Без помощи AVX2 инструкций i3-10105F сильно отстал от одного модуля R7 2700X на равных частотах, а еще может показаться что R7 2700X всегда использовал AVX инструкции даже когда они отключены.


SiSoftware Sandra показала что в чистой производительности i3-10105F весьма слаб по сравнению с R7 2700X при условии одинакового количества ядер и частот, и не способен без помощи AVX2 обойти старый Zen+, по сути ситуация аналогична, как и в AIDA64, только разрыв не столь серьезный.

В целом сложно сказать есть ли от AVX прирост производительности относительно SSE4, возможно результаты искажены проблемами ядра Windows Vista на котором основаны Windows 7/8/10/11.

Например, Rage II явно пытается AVX использовать, но падает с ошибкой, когда на системе у которой физически не было AVX (Phenom II) эта игра прекрасно работала, а еще отсутствие значительной разницы от AVX с Zen+ в AIDA64.

Отдельно отмечу множитель AVX2 в BIOS, он абсолютно не влиял на результаты тестов, как бы я его не крутил.

Я это еще приметил сразу при покупке LGA1200 системы когда пытался крутить AVX2 множитель чтобы в стресс тесте посмотреть будут ли изменения, но изменений в потреблении мощности не было, и теперь я уже точно знаю что множитель просто не работает.



Ну а еще рекомендую обходить стороной системные платы у которых распаяны слоты ОЗУ на одной защелке, может быть они удобнее при установке модуля (я не заметил особой разницы в удобстве между классическими слотами), но они крайне опасны при извлечении модуля.

На сегодняшний день известно, что поддержка аппаратной виртуализации Intel VT-x/VT-d и AMD-V необходима для работы виртуальных машин, таких как VirtualBox и VMware Workstation, а также для работы так называемых программ эмуляторов мобильных операционных систем, например для ОС Android.

В наше время почти все современные компьютеры имеют поддержку данной технологии, но есть конечно и такие которые не поддерживают. И для того чтобы узнать, имеет ли наш процессор поддержку данной технологии, мы для начало зайдем в BIOS нашего компьютера и посмотрим есть ли там интересующая нас настройка. Я добавил в статью несколько примеров того как выглядит пункт включения виртуализации в разных версиях BIOS.

В основном включение этого параметра находится на вкладке advanced, далее как видно на картинке ниже, под названием intel virtualization technology и скрывается доказательство того, что данный компьютер поддерживает эту технологию.

Включаем virtualization technology в BIOS

В данной версии BIOS переходим во вкладку advanced BIOS features, где так же видим в пункте virtualization поддержку данной технологии.

Включаем виртуализацию в BIOS

И здесь в пункте advanced BIOS features видно, что аппаратная виртуализация поддерживается процессором.


Ну и последний вариант, где во вкладке advanced в пункте secure virtual machine mode, мы также может включить данную технологию.


Сайт утилиты SecurAble

После запуска, программа сразу покажет информацию о том поддерживает или не поддерживает технологию виртуализации ваш процессор. Увидеть это можно в третьем по счету блоке. Как вы уже догадались, если стоит надпись yes значит поддержка есть.

Проверяем поддержку виртуализации AMD-V

Если написано Locked OFF, это значит что, поддержка данной технологии есть, но её надо включить. А включается она, как мы уже знаем, в BIOS-е нашего компьютера.

Виртуализация AMD-V выключена в BIOS

Ну и если блок имеет надпись NO, значит технология аппаратной виртуализации не поддерживается вашим процессором.

Процессор intel поддержки VT-x VT-d не имеет

О ставляйте своё мнение о данной статье, ну и конечно же задавайте свои вопросы, если у вас что-то вдруг пошло не так.

Читайте также: