sonyps4.ru

Avx2 где используется. Смотреть что такое "AVX" в других словарях

Руководство для программистов по работе с расширенным набором инструкций AVX-512. Ожидалось, что блоки для обработки целочисленных значений и значений с плавающей запятой с поддержкой 512-бит команд появятся в составе процессоров Intel 14-нм поколения Skylake. Потом стало известно , что в поколении Skylake поддержка AVX-512 будет только в составе серверных процессоров Intel Xeon и ускорителей расчётов Xeon Phi (в 14-нм поколении ускорителей Knights Landing). В составе ускорителей Knights Landing обещана поддержка большего набора расширений AVX-512, чем в случае процессоров Xeon общего назначения. Это объясняется тем, что расширенный набор инструкций AVX-512 нацелен на развитие параллелизма в расчётах, что на данном этапе проще реализовать (и с лучшей отдачей) в ускорителях вычислений.

К слову, ускорители Intel Knights Landing опираются на значительно переделанную архитектуру Atom Silvermont. В конфигурации с 72 ядрами процессоры Knights Landing одновременно могут обрабатывать до 288 потоков и выдавать до 3 терафлопс на операциях с двойной точностью и до 6 терафлопс на операциях с одинарной точностью. Для таких решений поддержка AVX-512 — это то, что доктор прописал. Параллелизм — это их сущность. Поскольку поставки Knights Landing начнутся в текущем квартале, программное обеспечение с реализацией SIMD-инструкций AVX-512 — это вопрос сегодняшнего дня. Поскольку процессоры Skylake-EP за небольшим исключением будут использовать те же наборы AVX-512, что и Knights Landing, к моменту появления на рынке моделей Skylake-EP для новых расширений будет создана серьёзная программная поддержка. Выход Skylake-EP, напомним, ожидается во второй половине 2017 года.

Глубина поддержки инструкций AVX настольными и серверными платформами Intel (Intel, ComputerBase.de)

Также во второй половине 2017 года появятся первые 10-нм процессоры компании Intel, с которыми мы сегодня знакомы по кодовому имени Cannon Lake. В свежем документе Intel для программистов авторы сайта ComputerBase.de обнаружили , что клиентские процессоры Cannon Lake также будут поддерживать AVX-512. Как минимум речь идёт о расширениях AVX512IFMA, AVX512VBMI, SHA и UMPI. Всё вместе указывает на то, что в конце 2017 года можно ожидать широкую поддержку AVX-512 со стороны программистов. Для клиентского применения использование AVX-512 будет означать, что обработка массивных мультимедийных данных будет проходить с меньшей нагрузкой на процессор. Точнее, работа с использованием аппаратных ресурсов, совместимых с AVX-512, будет максимально эффективна. На этих задачах потребление снизится, а производительность вырастет.

Выигрыш от внедрения AVX-512 по сравнению с AVX-256/128 и предыдущими «мультимедийными» инструкциями

Добавим, архитектура процессоров AMD Zen, которая в продуктах компании начнёт свою жизнь в конце 2016 года или в начале 2017 года, будет оперировать двумя 256-битными инструкциями AVX за такт. Для этого каждое ядро Zen получит по два 256-битных FMAC (fused multiply — add capability). На практике подобная архитектура позволит за один такт выполнять одну 512-битную инструкцию. Как это реализовано у процессоров Intel Cannon Lake, мы пока сказать не можем.

15 октября 2016 в 15:34

Intel добавит в CPU инструкции для глубинного обучения

  • Искусственный интеллект ,
  • Процессоры

Некоторые из последних процессоров Intel поддерживают семейство векторных инструкций AVX-512 . Они выполняются блоками по 512 бит (64 байта). Преимущество аппаратной поддержки таких больших инструкций в том, что за один такт процессор обрабатывает больше данных.

Если код загружается 64-битными словами (8 байт), то теоретически, если не брать в учёт другие факторы, можно ускорить его выполнение в восемь раз, если использовать инструкции AVX-512.

Расширение AVX-512 для системы команд x86 поддерживает 8 регистров масок, 512-разрядные упакованные форматы для целых и дробных чисел и операции над ними, тонкое управление режимами округления (позволяет переопределить глобальные настройки), операции broadcast, подавление ошибок в операциях с дробными числами, операции gather/scatter, быстрые математические операции, компактное кодирование больших смещений.

В первоначальный набор AVX-512 входит восемь групп инструкций:

  • AVX-512 Conflict Detection Instructions (CDI)
  • AVX-512 Exponential and Reciprocal Instructions (ERI)
  • AVX-512 Prefetch Instructions (PFI)
  • AVX-512 Vector Length Extensions (VL)
  • AVX-512 Byte and Word Instructions (BW)
  • AVX-512 Doubleword and Quadword Instructions (DQ)
  • AVX-512 Integer Fused Multiply Add (IFMA)
  • AVX-512 Vector Byte Manipulation Instructions (VBMI)
Семейство AVX-512 поддерживается в сопроцессоре Intel Xeon Phi (ранее Intel MIC) Knights Landing, некоторых процессорах Skylake Xeon (SKX), а также будущих процессорах Cannonlake, которые появятся в продаже в 2017 году. Перечисленные процессоры поддерживают не все из инструкций. Например, Knights Landing Xeon Phi поддерживает только CD, ER и PF. Процессор Skylake Xeon (SKX) поддерживает CD, VL, BW и DQ. Процессор Cannonlake - CD, VL, BW, DQ, IFMA.

Естественно, не любой код можно обратить в векторные инструкции, но и не нужно делать это со всем кодом, пишет в своём блоге Дэниель Лемир (Daniel Lemire), профессор информатики Университета Квебека. По его словам, важно оптимизировать «горячий код», который отнимает больше всего ресурсов процессора. Во многих системах «горячий код» построен из ряда циклов, которые прокручиваются миллиарды раз. Вот именно его следует оптимизировать, в этом основная выгода.

Например, если такой питоновский код перекомпилировать со стандартных 64-битных инструкций в AVX-512 с помощью MKL Numpy , то время исполнения снижается с 6-7 секунд до 1 секунды на том же процессоре.

Import numpy as np np.random.seed(1234) xx = np.random.rand(1000000).reshape(1000, 1000) %timeit np.linalg.eig(xx)

Аппаратная поддержка глубинного обучения

Нейросети и глубинное обучение - один из ярких трендов последнего времени. Google, Facebook и другие крупные компании пытаются применить нейросети где только можно: в системах рекомендаций, распознавании лиц, переводах текстов, распознавании речи, классификации фотографий и даже в настольных играх вроде го (но это скорее ради пиара, чем для коммерческой выгоды). Кое-кто пытается применить глубинное обучение в нестандартных областях, таких как .

Среди венчурных инвесторов сейчас есть понимание, что самая эффективная схема быстро разбогатеть - запустить стартап в области глубинного обучения, который сразу купит компания из «большой пятёрки» (Facebook, Google, Apple, Microsoft, Amazon). Эти фирмы в последнее время жёстко конкурируют в области скупки талантов, так что стартап уйдёт мгновенно и за большую цену из расчёта минимум $10 млн за сотрудника. Такой бизнес-план стал сейчас ещё проще, поскольку компании выпускают инструменты для разработки с открытыми исходниками, как это сделала Google с TensorFlow .

К несчастью для Intel, эта компания здесь плетётся в хвосте и почти не участвует в игре. Профессор Лемир признаёт, что сейчас отраслевым стандартом считаются графические процессоры Nvidia. Именно на них запускают код программ для машинного обучения.

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

Тем не менее, Intel готовит контратаку, в результате которой ситуация может перевернуться с ног на голову. В сентябре компания опубликовала новое справочное руководство Intel Architecture Instruction Set Extensions Programming Reference с указанием всех инструкций, которые будут поддерживаться в будущих процессорах. Если заглянуть в этот документ, то нас ждёт приятный сюрприз. Оказывается, семейство инструкций AVX-512 разбили на несколько групп и расширили.

В частности, две группы инструкций специально предназначены для глубинного обучения: AVX512_4VNNIW и AVX512_4FMAPS. Судя по описанию, эти инструкции могут быть полезными не только в глубинном обучении, но и во многих других задачах.

  • AVX512_4VNNIW: Vector instructions for deep learning enhanced word variable precision
  • AVX512_4FMAPS: Vector instructions for deep learning floating-point single precision

Описание тестовых систем и методики тестирования

Основанная цель тестирования - выявление того прироста производительности, который можно получить благодаря разгону неоверклокерских процессоров. Поэтому взятые нами для испытаний младшие представители в линейках Core i5 и i3, процессоры Core i5-6400 и i3-6100, были протестированы дважды: в номинальном режиме работы и на частоте 4,7 ГГц, которую, основываясь на полученном опыте, можно считать достаточно типичным оверклокерским режимом для CPU поколения Skylake. Кроме того, в тестах принял участие и полноценный оверклокерский процессор K-серии, Core i5-6600K. Его присутствие в испытаниях необходимо для того, чтобы оценить, различается ли быстродействие в разгоне у процессоров, предназначенных и не предназначенных для эксплуатации во внештатных режимах, и если да, то насколько. Core i5-6600K был протестирован нами дважды: как в номинальном режиме, так и при разгоне до 4,6 ГГц (это - предельно достижимая частота для нашего экземпляра с повышением напряжения питания до 1,425 В).

Полный список задействованных в тестовых системах комплектующих выглядит следующим образом:

  • Процессоры:
    • Intel Core i5-6600K (Skylake, 4 ядра, 3,5-3,9 ГГц, 6 Мбайт L3);
    • Intel Core i5-6400 (Skylake, 4 ядра, 2,7-3,3 ГГц, 6 Мбайт L3);
    • Intel Core i3-6100 (Skylake, 2 ядра + HT, 3,7 ГГц, 3 Мбайт L3).
    • Процессорный кулер: Noctua NH-U14S.
    • Материнская плата: ASUS Maximus VIII Ranger (LGA1151, Intel Z170).
    • Память: 2 × 8 Гбайт DDR4-3200 SDRAM, 16-18-18-36 (Corsair Vengeance LPX CMK16GX4M2B3200C16R).
    • Видеокарта: NVIDIA GeForce GTX 980 Ti (6 Гбайт/384-бит GDDR5, 1000-1076/7010 МГц).
    • Дисковая подсистема: Kingston HyperX Savage 480 GB (SHSS37A/480G).
    • Блок питания: Corsair RM850i (80 Plus Gold, 850 Вт).

Тестирование выполнялось в операционной системе Microsoft Windows 10 Enterprise Build 10586 с использованием следующего комплекта драйверов:

  • Intel Chipset Driver 10.1.1.8;
  • Intel Management Engine Interface Driver 11.0.0.1157;
  • NVIDIA GeForce 361.43 Driver.

Описание использовавшихся для измерения вычислительной производительности инструментов:

Бенчмарки :

  • BAPCo SYSmark 2014 ver 1.5 - тестирование в сценариях Office Productivity (офисная работа: подготовка текстов, обработка электронных таблиц, работа с электронной почтой и посещение интернет-сайтов), Media Creation (работа над мультимедийным контентом — создание рекламного ролика с использованием предварительно отснятых цифровых изображений и видео) и Data/Financial Analysis (статистический анализ и прогнозирование инвестиций на основе некой финансовой модели).
  • Futuremark 3DMark Professional Edition 1.5.915 — тестирование в сценах Sky Diver, Cloud Gate и Fire Strike.

Приложения :

  • Adobe After Effects CC 2015 — тестирование скорости рендеринга методом трассировки лучей. Измеряется время, затрачиваемое системой на обсчёт в разрешении 1920 × 1080@30fps заранее подготовленного видеоролика.
  • Adobe Photoshop CC 2015 — тестирование производительности при обработке графических изображений. Измеряется среднее время выполнения тестового скрипта, представляющего собой творчески переработанный Retouch Artists Photoshop Speed Test, который включает типичную обработку четырёх 24-мегапиксельных изображений, сделанных цифровой камерой.
  • Adobe Photoshop Lightroom 6.1 - тестирование производительности при пакетной обработке серии изображений в RAW-формате. Тестовый сценарий включает постобработку и экспорт в JPEG с разрешением 1920 × 1080 и максимальным качеством двухсот 12-мегапиксельных изображений в RAW-формате, сделанных цифровой камерой Nikon D300.
  • Adobe Premiere Pro CC 2015 — тестирование производительности при нелинейном видеомонтаже. Измеряется время рендеринга в формат H.264 Blu-Ray проекта, содержащего HDV 1080p25 видеоряд с наложением различных эффектов.
  • Autodesk 3ds max 2016 — тестирование скорости финального рендеринга. Измеряется время, затрачиваемое на рендеринг в разрешении 1920 × 1080 с применением рендерера mental ray стандартной сцены Hummer.
  • Blender 2.76 - тестирование скорости финального рендеринга в одном из популярных свободных пакетов для создания трёхмерной графики. Измеряется продолжительность построения финальной модели из Blender Cycles Benchmark rev4.
  • Microsoft Edge 20.10240.16384.0 - тестирование производительности при работе интернет-приложений, построенных с использованием современных технологий. Применяется специализированный тест WebXPRT 2015, реализующий на HTML5 и JavaScript реально использующиеся в интернет-приложениях алгоритмы.
  • TrueCrypt 7.2 — тестирование криптографической производительности. Используется встроенный в программу бенчмарк, задействующий тройное шифрование AES-Twofish-Serpent.
  • WinRAR 5.30 — тестирование скорости архивации. Измеряется время, затрачиваемое архиватором на сжатие директории с различными файлами общим объёмом 1,7 Гбайт. Используется максимальная степень компрессии.
  • x264 r2638 — тестирование скорости транскодирования видео в формат H.264/AVC. Для оценки производительности используется исходный 1080p@50FPS AVC-видеофайл, имеющий битрейт около 30 Мбит/с.
  • x265 1.8+188 8bpp — тестирование скорости транскодирования видео в перспективный формат H.265/HEVC. Для оценки производительности используется тот же видеофайл, что и в тесте скорости транскодирования кодером x264.

Игры :

  • Company of Heroes 2. Настройки для разрешения 1280 × 800: Maximum Image Quality, Anti-Aliasing = Off, Higher Texture Detail, High Snow Detail, Physics = Off. Настройки для разрешения 1920 × 1080: Maximum Image Quality, High Anti-Aliasing, Higher Texture Detail, High Snow Detail, Physics = High.
  • Grand Theft Auto V. Настройки для разрешения 1280 × 800: DirectX Version = DirectX 11, FXAA = Off, MSAA = Off, NVIDIA TXAA = Off, Population Density = Maximum, Population Variety = Maximum, Distance Scaling = Maximum, Texture Quality = Very High, Shader Quality = Very High, Shadow Quality = Very High, Reflection Quality = Ultra, Reflection MSAA = Off, Water Quality = Very High, Particles Quality = Very High, Grass Quality = Ultra, Soft Shadow = Softest, Post FX = Ultra, In-Game Depth Of Field Effects = On, Anisotropic Filtering = x16, Ambient Occlusion = High, Tessellation = Very High, Long Shadows = On, High Resolution Shadows = On, High Detail Streaming While Flying = On, Extended Distance Scaling = Maximum, Extended Shadows Distance = Maximum. Настройки для разрешения 1920 × 1080: DirectX Version = DirectX 11, FXAA = Off, MSAA = x4, NVIDIA TXAA = Off, Population Density = Maximum, Population Variety = Maximum, Distance Scaling = Maximum, Texture Quality = Very High, Shader Quality = Very High, Shadow Quality = Very High, Reflection Quality = Ultra, Reflection MSAA = x4, Water Quality = Very High, Particles Quality = Very High, Grass Quality = Ultra, Soft Shadow = Softest, Post FX = Ultra, In-Game Depth Of Field Effects = On, Anisotropic Filtering = x16, Ambient Occlusion = High, Tessellation = Very High, Long Shadows = On, High Resolution Shadows = On, High Detail Streaming While Flying = On, Extended Distance Scaling = Maximum, Extended Shadows Distance = Maximum.
  • F1 2015. Настройки для разрешения 1280 × 800: Ultra High Quality, 0xAA, 16xAF. Настройки для разрешения 1920 × 1080: Ultra High Quality, SMAA + TAA, 16xAF. В тестировании используется трасса Melbourne.
  • Hitman: Absolution. Настройки для разрешения 1280 × 800: Ultra Quality, MSAA = Off, High Texture Quality, 16x Texture Aniso, Ultra Shadows, High SSAO, Global Illumination = On, High Reflections, FXAA = On, Ultra Level of Detail, High Depth of Field, Tesselation = On, Normal Bloom. Настройки для разрешения 1920 × 1080: Ultra Quality, 8x MSAA, High Texture Quality, 16x Texture Aniso, Ultra Shadows, High SSAO, Global Illumination = On, High Reflections, FXAA = On, Ultra Level of Detail, High Depth of Field, Tesselation = On, Normal Bloom.
  • Metro: Last Light Redux. Настройки для разрешения 1280 × 800: DirectX 11, High Quality, Texture Filtering = AF 16X, Motion Blur = Normal, SSAA = Off, Tessellation = Normal, Advanced PhysX = Off. Настройки для разрешения 1920 × 1080: DirectX 11, Very High Quality, Texture Filtering = AF 16X, Motion Blur = Normal, SSAA = On, Tessellation = Normal, Advanced PhysX = Off. При тестировании используется сцена Scene 1.
  • Tom Clancy"s Rainbow Six Siege. Настройки для разрешения 1280 × 800: Texture Quality = Ultra, Texture Filtering = Anisotropic 16x, LOD Quality = Ultra, Shading Quality = High, Shadow Quality = Very High, Reflection Quality = High, Ambient Occlusion = SSBC, Lens Effects = Bloom + Lens Flare, Zoom-In Depth of Field = On, Post-Process Anti-Aliasing = Off, Multisample Anti-Aliasing = Off. Настройки для разрешения 1920 × 1080: Texture Quality = Ultra, Texture Filtering = Anisotropic 16x, LOD Quality = Ultra, Shading Quality = High, Shadow Quality = Very High, Reflection Quality = High, Ambient Occlusion = SSBC, Lens Effects = Bloom + Lens Flare, Zoom-In Depth of Field = On, Post-Process Anti-Aliasing = Off, Multisample Anti-Aliasing = MSAA 4x.
  • Thief. Настройки для разрешения 1280 × 800: Texture Quality = Very High, Shadow Quality = Very High, Depth-of-field Quality = High, Texture Filtering Quality = 8x Anisotropic, SSAA = Off, Screenspace Reflections = On, Parallax Occlusion Mapping = On, FXAA = Off, Contact Hardening Shadows = On, Tessellation = On, Image-based Reflection = On. Настройки для разрешения 1920 × 1080: Texture Quality = Very High, Shadow Quality = Very High, Depth-of-field Quality = High, Texture Filtering Quality = 8x Anisotropic, SSAA = High, Screenspace Reflections = On, Parallax Occlusion Mapping = On, FXAA = On, Contact Hardening Shadows = On, Tessellation = On, Image-based Reflection = On.
  • Total War: Attila. Настройки для разрешения 1280 × 800: Anti-Aliasing = Off, Texture Resolution = Ultra; Texture Filtering = Anisotropic 4x, Shadows = Max. Quality, Water = Max. Quality, Sky = Max. Quality, Depth of Field = Off, Particle Effects = Max. Quality, Screen space reflections = Max. Quality, Grass = Max. Quality, Trees = Max. Quality, Terrain = Max. Quality, Unit Details = Max. Quality, Building Details = Max. Quality, Unit Size = Ultra, Porthole Quality = 3D, Unlimited video memory = Off, V-Sync = Off, SSAO = On, Distortion Effects = On, Vignette = Off, Proximity fading = On, Blood = On. Настройки для разрешения 1920 × 1080: Maximum Quality.

Итак, разгон, каким мы его знали несколько лет тому назад - до того, как Intel стала выпускать специализированные оверклокерские процессоры и блокировать возможность повышения рабочих частот в остальных CPU, наконец-то возвращается. Трудно сказать, откуда на самом деле было получено решение вопроса со снятием блокировки частоты базового тактового генератора у всего модельного ряда Skylake. Возможно, интеловская защита BCLK Governor оказалась не столь прочной и пала под натиском разработчиков BIOS материнских плат. Но и возможно, что подтолкнула их в нужную сторону сама Intel, ведь в конечном итоге выиграли все: и микропроцессорный гигант, и производители плат, и пользователи.

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

Но особую пикантность всей этой ситуации придаёт то, насколько всё удачно сложилось именно для Intel. Ведь открытие возможности разгона любых, в том числе и неоверклокерских, LGA1151-процессоров легко могло бы стать причиной падения спроса на флагманские модели Skylake. Однако продажи старших Skylake с официально разрешённым разгоном в безопасности. Дело в том, что при разгоне не-K-процессоров неожиданно возникает целый букет проблем, самая скверная из которых — снижение скорости выполнения AVX/AVX2-инструкций. В результате быстродействие при работе с целым рядом программ при оверклокинге не только не увеличивается, а напротив - падает. То есть реальную пользу от такого разгона можно извлечь лишь в тех случаях, когда речь идёт исключительно о работе в приложениях, не задействующих современные возможности процессорного FPU.

Всё это означает, что если речь идёт о профессиональной деятельности, для которой не хватает производительности работающих в номинальном режиме CPU, - выбирать можно, как и раньше, лишь из Core i5-6600K или Core i7-6700K. Разгон же не-К-процессоров фактически подходит лишь для того, чтобы поиграться - в обоих смыслах этого слова. С одной стороны, экспериментировать с разгоном таких процессоров безумно интересно, ведь это действительно что-то новое и отчасти запретное. С другой - игры относятся к числу тех приложений, которые AVX/AVX2-инструкции (пока?) не задействуют.

Впрочем, даже если вас интересуют исключительно игры и программы, где AVX/AVX2-расширения не используются и использоваться заведомо не будут, появившаяся у неоверклокерских процессоров поколения Skylake возможность разгона совсем не означает, что вы, выражаясь фигурально, сможете отмотать время назад и вернуться в золотой век Celeron 300A. В реалиях сегодняшнего дня нарастить производительность дешёвого процессора до уровня флагмана невозможно ни при каких обстоятельствах. После того как в середине 2000-х годов Intel поделила ассортимент потребительских процессоров на классы по числу вычислительных ядер и перечню поддерживаемых технологий, любая «межклассовая борьба» безвозвратно ушла в прошлое. И это наглядно показали проведённые тесты. Младший Core i3-6100 может претендовать лишь на то, чтобы при разгоне пытаться дотянуться до быстродействия начальных моделей Core i5. А младший Core i5-6400 может попробовать побороться с Core i5-6600K, но замахнуться на соперничество с Core i7-6700K ему, естественно, не по силам.

В моем коде на С++ используется SSE, и теперь я хочу улучшить его, чтобы поддерживать AVX, когда он доступен. Поэтому я обнаруживаю, что AVX доступен и вызывает функцию, использующую команды AVX. Я использую Win7 SP1 + VS2010 SP1 и процессор с AVX.

Чтобы использовать AVX, необходимо включить следующее:

#include "immintrin.h"

а затем вы можете использовать встроенные функции AVX, такие как _mm256_mul_ps , _mm256_add_ps и т.д. Проблема заключается в том, что по умолчанию VS2010 производит код, который работает очень медленно и показывает предупреждение:

предупреждение C4752: найдено расширенные векторные расширения Intel (R); рассматривать использование /arch: AVX

Кажется, VS2010 фактически не использует инструкции AVX, но вместо этого имитирует их. Я добавил /arch:AVX в параметры компилятора и получил хорошие результаты. Но этот параметр говорит компилятору, когда это возможно, использовать команды AVX. Так что мой код может упасть на CPU, который не поддерживает AVX!

Итак, вопрос заключается в том, как заставить VS2010-компилятор создавать AVX-код, но только когда я прямо указываю встроенные функции AVX. Для SSE он работает, я просто использую внутренние функции SSE, и он генерирует код SSE без каких-либо параметров компилятора, таких как /arch:SSE . Но для AVX он по какой-то причине не работает.

2 ответов

Поведение, которое вы видите, является результатом дорогостоящего переключения состояний.

См. стр. 102 руководства Agner Fog:

Каждый раз, когда вы неправильно переключаетесь между командами SSE и AVX, вы платите чрезвычайно высокий штраф (~ 70).

Когда вы компилируете без /arch:AVX , VS2010 будет генерировать инструкции SSE, но все равно будет использовать AVX везде, где у вас есть встроенные функции AVX. Поэтому вы получите код с инструкциями SSE и AVX, которые будут иметь такие штрафы за переключение состояний. (VS2010 знает это, поэтому он выдает предупреждение, которое вы видите.)

Следовательно, вы должны использовать либо все SSE, либо все AVX. Задание /arch:AVX указывает компилятору использовать все AVX.

Похоже, вы пытаетесь создать несколько путей кода: один для SSE и один для AVX. Для этого я предлагаю вам разделить ваш SSE и AVX-код на два разных блока компиляции. (один скомпилирован с /arch:AVX и один без него). Затем соедините их вместе и сделайте диспетчер для выбора на основе того, на каком оборудовании оно работает.

Если вам требуется для объединения SSE и AVX, обязательно используйте _mm256_zeroupper() или _mm256_zeroall() , чтобы избежать штрафов за переключение состояний.

/* Use VZEROUPPER to avoid the penalty of switching from AVX to SSE. See Intel Optimization Manual (April 2011, version 248966), Section 11.3 */ #define VLEAVE _mm256_zeroupper

Затем VLEAVE(); вызывается в конце каждой функции, используя встроенные инструкции для AVX.

Улучшения

  • Новая схема кодирования инструкций VEX
  • Размер векторных регистров SIMD увеличивается со 128 (XMM) до 256 бит (регистры YMM0 - YMM15). Существующие 128-битные SSE инструкции будут использовать младшую половину новых YMM регистров, не изменяя старшую часть. Для работы с YMM регистрами добавлены новые 256-битные AVX инструкции. В будущем возможно расширение векторных регистров SIMD до 512 или 1024 бит.

Новая схема кодирования

Новая схема кодирования инструкций VEX использует VEX префикс. В настоящий момент существуют два VEX префикса, длиной 2 и 3 байта. Для 2-х байтного VEX префикса первый байт равен 0xC5, для 3-х байтного 0xC4. В 64-битном режиме первый байт VEX префикса уникален. В 32-битном режиме возникает конфликт с инструкциями LES и LDS, который разрешается старшим битом второго байта, он имеет значение только в 64-битном режиме, через неподдерживаемые формы инструкций LES и LDS. Длина существующих AVX инструкций, вместе с VEX префиксом, не превышает 11 байт. В следующих версиях ожидается появление более длинных инструкций.

Новые инструкции

Инструкция Описание
VBROADCASTSS, VBROADCASTSD, VBROADCASTF128 Копирует 32-х, 64-х или 128-ми битный операнд из памяти во все элементы векторного регистра XMM или YMM.
VINSERTF128 Замещает младшую или старшую половину 256-ти битного регистра YMM значением 128-ми битного операнда. Другая часть регистра-получателя не изменяется.
VEXTRACTF128 Извлекает младшую или старшую половину 256-ти битного регистра YMM и копирует в 128-ми битный операнд-назначение.
VMASKMOVPS, VMASKMOVPD Условно считывает любое количество элементов из векторного операнда из памяти в регистр-получатель, оставляя остальные элементы несчитанными и обнуляя соответствующие им элементы регистра-получателя. Также может условно записывать любое количество элементов из векторного регистра в векторный операнд в памяти, оставляя остальные элементы операнда памяти неизменёнными
VPERMILPS, VPERMILPD Переставляет 32-х или 64-х битные элементы вектора согласно операнду-селектору (из памяти или из регистра).
VPERM2F128 Переставляет 4 128-ми битных элемента двух 256-ти битных регистров в 256-ти битный операнд-назначение с использованием непосредственной константы (imm) в качестве селектора.
VZEROALL Обнуляет все YMM регистры и помечает их как неиспользуемые. Используется при переключении между 128-ми битным режимом и 256-ти битным.
VZEROUPPER Обнуляет старшие половины всех регистров YMM. Используется при переключении между 128-ми битным режимом и 256-ти битным.

Также в спецификации AVX описана группа инструкций PCLMUL (Parallel Carry-Less Multiplication, Parallel CLMUL)

  • PCLMULLQLQDQ xmmreg,xmmrm
  • PCLMULHQLQDQ xmmreg,xmmrm
  • PCLMULLQHQDQ xmmreg,xmmrm
  • PCLMULHQHQDQ xmmreg,xmmrm
  • PCLMULQDQ xmmreg,xmmrm,imm

Применение

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

Поддержка в операционных системах

Использование YMM регистров требует поддержки со стороны операционной системы. Следующие системы поддерживают регистры YMM:

Микропроцессоры с AVX

Совместимость между реализациями Intel и AMD обсуждается в XOP instruction set .

Будущие расширения

Схема кодирования инструкций VEX легко допускает дальнейшее расширение набора инструкций AVX. В следующей версии, AVX2, планируется добавить инструкции для работы с целыми числами, FMA3 (увеличит производительность при обработке чисел с плавающей запятой в 2 раза ), загрузку распределенного в памяти вектора (gather) и прочее.

Различные планируемые дополнения системы команд x86 :

  • CLMUL
  • AMD FMA4
  • AMD XOP
  • AMD CVT16

Примечания


Наборы расширения базовых инструкций процессоров семейства x86
MMX | MMXEXT | SSE | SSE2 | SSE3 | SSSE3 | SSE4 | ATA | 3DNow! | 3DNowExt | SSE5 | AVX | AES

Wikimedia Foundation . 2010 .

Смотреть что такое "AVX" в других словарях:

    Avx - {{{image}}} Sigles d une seule lettre Sigles de deux lettres > Sigles de trois lettres AAA à DZZ EAA à HZZ IAA à LZZ MAA à PZZ QAA à TZZ UAA à XZZ … Wikipédia en Français

    AVX - Sigles d’une seule lettre Sigles de deux lettres > Sigles de trois lettres Sigles de quatre lettres Sigles de cinq lettres Sigles de six lettres Sigles de sept… … Wikipédia en Français



Загрузка...