Intel Parallel Studio XE 2017: «Python к нам приходит» и другие новинки
На первой недели сентября этого года вышла в свет новая версия продукта Intel Parallel Studio XE 2017. Давайте разбираться, что интересного появилось в ней.
Как обычно, пакет студии доступен в трёх вариантах: Composer, Professional и Cluster Edition.
В первый вариант входят компиляторы (С/С++ и Fortran) и различные библиотеки. Ещё с прошлой версии XE 2016 таковых имелось целых 4 штуки:
- быстрая математическая библиотека Intel Math Kernel Library (MKL)
- библиотека для обработки данных и мультимедиа Intel Integrated Performance Primitives (IPP)
- библиотека шаблонов С++ Intel Threading Building Blocks (TBB)
- библиотека для машинного обучения и аналитики данных Intel Data Analytics Acceleration Library (DAAL).
В Professional Edition добавляются средства динамического анализа приложений, такие как профилировщик Intel VTune Amplifier, средство для прототипирования параллелизма и работы с векторизацией кода Intel Advisor, а так же поиска ошибок с памятью и потоками Intel Inspector. В флагманской версии Intel Parallel Studio XE Cluster Edition в наших руках весь набор инструментов, который поможет создать и оптимизировать наше приложение уже на кластере, с помощью Intel MPI и средств для работы с ним.
Кроме всего этого имеется библиотека IMSL от сторонних разработчиков Rogue Wave, часто используемая при вычислениях. Она доступна как в пакете с компилятором Fortran, так и как отдельное дополнение. Следующая табличка показывает распределение средств разработки по пакетам:
Важное дополнение во всех версиях студии (и не только) — появился пакет Intel Distribution for Python*, который позволяет использовать Python (2.7 и 3.5), «оптимизированный» заботливыми инженерами компании Intel, на Windows, Linux и OS X. В самом языке ничего нового не появилось, просто пакеты NumPy, SciPy, pandas, scikit-learn, Jupyter, matplotlib, и mpi4py теперь оптимизированы под «железо» с использованием библиотек Intel MKL, TBB, DAAL и MPI, за счёт чего приложение выполняется более эффективно и быстро. Кстати, выкачать этот пакет можно абсолютно безвозмездно с сайта Intel. Там же можно увидеть, чем же так хорош «затюненый» Python:
Очевидно, что производительность Intel Python приближает его по скорости работы к С/Intel MKL, при этом значительно опережая конкурентов. Кстати, хорошо известный профилировщик VTune Amplifier теперь так же поддерживает Python.
Из глобально новых продуктов в пакете Intel Parallel Studio XE это, пожалуй, самое главное.
Теперь о том, что появилось в каждом из составляющих пакета.
Компиляторы
По ним я обязательно напишу отдельный, более подробный блог. А здесь, «коротенько» перечислю то, что там появилось:
- Библиотека шаблонов С++ SIMD Data Layout Templates (SDLT) для решения проблемы перехода от массива структур (AoS — Array of Structures) к структуре массивов (SoA — Structure of Arrays), что приводит к уменьшению непоследовательных доступов к памяти и gather/scatter инструкций при векторизации.
- Поддержка процессоров второго поколения Intel Xeon Phi и новое имя mic_avx512.
- Ещё более полная поддержка OpenMP (как стандарта 4.0, так и более позднего 4.5).
- Новый функционал по оффлоду на Intel Xeon Phi с помощью OpenMP
- Возможность генерировать файлы (html или текстовые) с исходным кодом и интегрированным отчетом об оптимизации, что будет очень полезно разрабочтикам, работающим из командной строки без среды разработки. Кроме того, информативность самих отчетов об оптимизации и векторизации улучшена по многим направлениям.
- Новый атрибут, директива и опция компилятора для выравнивания кода (не данных, а именно самих инструкций для функций или циклов).
- Более широкая поддержка стандарта C++14, в частности теперь мы можем использовать шаблоны переменных, освобождать память определенного размера глобальным оператором delete, пользоваться constexpr функциями с заметно меньшими ограничениями, чем было в стандарте С++11. Полный список поддерживаемых возможностей стандарта можно найти на этой страничке.
- Стандарт С11 поддерживается теперь полностью (не путать с С++11, который уже давно поддерживается), за исключением ключевого слова _Atomic и соответствующего атрибута __attribute ((atomic)).
- Появился ряд новых опций компилятора, призванных упростить его использование. Например, ключик /fp: consistent (Windows) и -fp-model consistent (Linux), который включает в себя ряд других (/fp: precise /Qimf-arch-consistency: true /Qfma-).
- Новые возможности по оффлоду вычислений на интегрированную графику с использованием OpenMP. Например, теперь возможен асинхронный оффлод с помощью клаузы DEPEND в TARGET директиве. Кроме этого, компилятор может производить векторизацию с типом short.
- В компиляторе Fortran так же произошло много изменений. Особенно интересным будет существенное увеличение производительности кода на Coarray Fortran. В ряде случаев ускорение достигает трёх раз по сравнению с предыдущей реализацией. Так же появилась возможность говорить компилятору о выравнивании динамически выделяемых массивов, а стандарты Fortran 2008 и 2015 поддерживаются ещё более широко. В частности, теперь на вооружение опытного разработчика массив констант с подразумеваемой формой, возможность использовать BIND© для внутренних процедур, а указатели могут быть инициализированы при объявлении (да, до 2008 стандарта в Фортране это не поддерживалось).
И это лишь верхушка айсберга. На самом деле изменений огромное количество. В целом, компилятор, как и ожидалось, стал генерировать ещё более производительный код, поддерживая все последние новшества в «железе». А сравнения компилятора Intel на бенчмарках с конкурентами лишний раз доказывает это.
Как видно, на тестах SPECfp и SPECint преимущество версии 17.0 компилятора достаточно внушительное.
Intel VTune Amplifier XE 2017
Раз уж на рынок вышел процессор второго поколения Intel Xeon Phi (кодовое имя Knights Landing (KNL)), то конечно же в профилировщике появилась поддержка различных типов анализа для него, чтобы ваши приложения просто «полетели» после оптимизации. Здесь и анализ пропускной способности памяти, чтобы понять, какие данные нужно положить в быструю MCDRAM, и микроархитектурный анализ, и анализ масштабируемости MPI и OpenMP, и ещё много всего вкусного.
Кстати, у VTune имеется анализ HPC Performance Characterization, являющийся своего рода точкой входа для оценки производительности вычислительно-интенсивных приложений, и позволяющий посмотреть в деталях (в отличии от Application Performance Snapshot, про который речь пойдёт позднее) на три важных аспекта утилизации «железа» — СPU, память и FPU:
Как я уже говорил, теперь VTune умеет профилировать приложения на Python, выполняя анализ хотспотов через программное сэмплирование (Basic Hotspots analysis). Ещё одно нововведение — возможность профилировать приложения на языке Go, собирая аппаратные события PMU.
Новый тип анализа появился в версии 2017 — анализ дискового ввода-вывода (Disk Input and Output analysis). С его помощью можно отслеживать использование дисковой подсистемы, шин CPU и PCIe:
Кроме того, анализ помогает находить операции ввода-вывода с высокой латентностью, а так же дисбаланс между ними и реальными вычислениями.
Размер максимальной пропускной способности DRAM теперь определяется автоматически при анализе доступа к памяти (Memory Access analysis), позволяя тем самым понимать насколько хорошо она используется. В этом типе анализа так же добавлена поддержка кастомных аллокаторов памяти, что позволяет правильно определять объекты в памяти. Есть возможность соотнести промахи по кэшу к конкретной структуре данных, а не просто коду, приводящему к нему. Кстати, теперь не требуется установка специальных драйверов на Линуксе для выполнения этого анализа.
Дополнения появились и при профилировании OpenCL и GPU. VTune покажет общую сводку по проблемам с подробным описанием:
Кроме этого можно посмотреть исходный код или ASM для ядер OpenCL, а так же отлавливать случаи использование общей виртуальной памяти (Shared Virtual Memory).
Пользоваться профилировщиком удалённо и через командную строку стало ещё проще.
Новая группа Arbitrary Targets позволяет сгенерировать командную строку для анализа производительности на системе, недоступной с текущего хоста. Это может быть весьма полезным для микроархитектурного анализа, так как дает доступ к аппаратным событиям, доступным на платформе, которую мы выбрали:
В пакете с Parallel Studio появляются специальные «легковесные» инструменты, позволяющие получать общее представление о нашем приложении. Они получили вывеску Performance Snapshots, и имеют на данный момент три варианта:
- Application — для не MPI приложений
- MPI — правильно, для MPI приложений
- Storage — для анализа использования хранилища
Что они из себя представляют? Рассмотрим, для примера, инструмент Application Performance Snapshot:
Запустив его, на выходе мы имеем выосокоуровневую сводку по тому, где наше приложение может потеницально выиграть. С другой стороны, можем назвать это слабыми местами, которые нужно поправить. Мы получаем время выполнения приложения, производительность в флопсах, а так же ответ на 3 вопроса: как эффективно использовались вычислительные ядра CPU (CPU Utilization), как много мы тратили на работу с памятью (Memory Bound), и как использовался FPU (FPU Utilization). В итоге нам представляется общая картина о приложении. Если CPU Utilization показывает слишком маленькие значения, значит имеются проблемы с «параллельностью» приложения и эффективностью использования ядер. Например, дисбаланс нагрузки, слишком большие накладные расходы при планировке, проблемы синхронизации или же просто большое количество регионов, выполняемых последовательно. Следующая метрика скажет нам, упирается ли приложение в ограничения по памяти. Если цифры велики, значит возможны проблемы с использованием кэшей, ложным разделением данных (false sharing) или мы упираемся в пропускную способность.
Ну, а характеристика FPU Utilization может показать, что имеются проблемы с векторизацией (её отсутствием или неэффективностью), при условии наличия вычислений с числами с плавающей точкой.
Intel Advisor
Начиная с прошлой версии 2016, Advisor получил огромный функционал для работы с векторизацией, который был расширен и улучшен в новой версии.
Конечно появилась поддержка нового поколения Xeon Phi, как и в других средствах, и AVX-512. Например, Advisor может показать использование нового набора инструкций AVX-512 ERI, специфичного для KNL. Но даже если у нас нет пока новой железки, мы сможем получить определенные данные для AVX-512. Для этого необходимо дать указание компилятору генерировать две ветки кода (AVX и AVX-512) для циклов с помощью опций –axMIC-AVX512 –xAVX, а Advisor в своих результатах покажет информацию даже для той ветки, которая реально не выполнялась:
Кроме этого, появилась возможность измерения FLOPS’ов для всех процессоров, за исключением Xeon Phi предыдущего поколения, основанная на использовании инструментации и сэмплирования. Был также улучшен анализ доступа к памяти (Memory Access Analysis), который теперь даст нам ещё больше полезной информации (сравнение с размером кэша, выявление ненужных gather/scatter). В плане удобства использования также ряд улучшений. «Умный режим» (Smart Mode) позволит показать только те циклы, которые нам наиболее интересны, нажатием одной кнопки:
А выбрать сразу несколько типов анализа и запустить их за один раз стало возможным с помощью пакетного режима Batch Mode.
В сухом остатке с новой версией 2017 мы имеем большой набор новых фич, которые обязательно будут полезны при оптимизации приложений для разработчиков во всех областях. Попробовать в течение 30 дней новую версию можно, как всегда, абсолютно безвозмездно на этой страничке, как говорит один мой коллега: «С регистрацией, но без SMS».
Комментарии (1)
6 октября 2016 в 10:34
0↑
↓
Ребят, привет.Вы могли бы уточнить, для чего эта штука нужна? Для выполнения параллельных вычислений на многоядерной машине?