Встречаем архитектуру Haswell и AVX2.0

Каждая новая процессорная архитектура привносит какие-то новшества. Иногда это касается только «внутренней кухни», вроде техпроцесса, планировщика и КЭШей. Такие изменения, как правило, вызывают бурные обсуждения среди всяческих аналитиков, но простых программистов заботят мало. Далеко не каждый способен представить, скажем, как отреагирует механизм предсказания переходов на изменение пары строчек внутри цикла. Как говорил классик «я знаю только то, что мне необходимо, и не собираюсь забивать голову ненужным хламом». Однако, время от времени изменения касаются святая святых - набора команд процессора. И вот тут появляется пространство для маневра, который может привести к ускорению кода в разы. Как многие уже знают, не стала исключением и архитектура SandyBridge, процессоры на базе которой появились в начале этого года. Именно в них появился набор инструкций Intel® AVX (Advanced Vector Instructions).

По своей сути AVX, как и его предшественник, SSE, предлагает решение проблемы векторизации. Принцип, заложенный в векторные инструкции процессоров, заключается в упаковке обрабатываемых данных в некий стандартный для железа вид, что само по себе может быть очень выгодно с точки зрения скорости – за один присест обрабатывается сразу несколько значений. Разумеется, за все нужно платить: в нашем случае такой «платой» является соблюдение ряда условий, одно из которых - использование только тех типов данных, для которых оптимизировано «железо». Впрочем, это тема отдельного разговора.

AVX как "первый блин" не вышел комом, но прогресс не стоит на месте и уже вовсю кипит работа над новым набором команд. Через каких-нибудь пару лет можно будет купить новенький процессор базе архитектуры «Haswell». Как это принято в Intel, название архитектуры взято с географической карты, а если быть более точным, - с карты штата Колорадо. Но нас интересует отнюдь не география, а новый набор команд AVX 2.0.

Можно долго углубляться в детали и инструкции AVX 2.0, но начнем с главного:


    • AVX способности распространились на целочисленные (integer ) типы и операции с ними.

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

    • FMA (Fused Multiply-Add) - одна инструкция выполняет несколько операций над упакованными данными.

    • Добавлены специализированные инструкции по манипуляции битов.




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

В подготовке поможет SDE, софтверный эмулятор новых инструкций, доступный для загрузки с этой страницы: /en-us/articles/intel-software-development-emulator

Для компиляции исходников стоит посмотреть на ранние сборки GCC 4.7.

И самое главное – документация! Первая спецификация (действительно первая публичная спецификация) доступна вот тут - /en-us/blogs/2011/06/13/haswell-new-instruction-descriptions-now-available. Владеющим английским также рекомендуется к прочтению вводная статья Introduction to Intel® Advanced Vector Extensions.

В следующем посте постараюсь погрузиться в тему AVX, а пока буду рад ответить на ваши вопросы!

Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.