Intel® Parallel Studio XE 2015 — разговор о новых именах и «фишках»

26 августа 2014 года вышла очередная новая версия пакета инструментов Parallel Studio — 2015. О нововведениях предыдущей версии мы писали почти год назад, а теперь самое время обзорно рассказать о том, что появилось в последнем релизе.Не так давно я пытался пролить свет на запутанные имена программных продуктов Intel в соответствующем посте, но добрые ребята из маркетинга опять всё переиначили. Итак, знакомьтесь с новой философией в названиях: a01923ef1bdc401486722a25096612a5.pngОтныне все пакеты средств предлагаются под именем Intel® Parallel Studio XE 2015, но в разных версиях. Выходит, что теперь для того, чтобы пользоваться компилятором и библиотеками, вам нужен Intel® Parallel Studio XE 2015 Composer Edition. И жизнь у тысяч разработчиков сразу стала проще, а все баги ушли, испугавшись такого грозного названия. Ладно, давайте дальше без иронии. Если же к подобному базовому комплекту добавить широко известные и применяемые VTune + Inspector + Advisor, получим версию Pro. Накинув сверху Intel MPI и ITAC, мы получаем набор по имени Cluster Edition. Предвосхищаю путаницу с подобными именами, но, тем не менее, думаю, что народ постепенно к такому переименованию привыкнет, ведь логика присутствует.Естественно, что это только маркетинговые новшества. Давайте посмотрим, что мы получаем с приходом новой версии в техническом плане, а здесь действительно есть что попробовать.

Компиляторы Естественно, компилятор, как обычно, в новой версии стал ещё быстрее и производительнее прежнего. Частично, я уже описывал некоторые новые «плюшки» здесь, в основном фокусируясь на новых компиляторных отчетах.Здесь же я приведу больше конкретики о том, что появилось. Скажем, в данной версии компилятора «отныне и во веки веков» полностью поддерживаются стандарты C++11 и Fortran 2003.В первом добавлены новые строковые литералы, явное замещение виртуальных функций, thread_local и улучшение конструкторов объектов.В Фортрановском компиляторе добавили поддержку параметризованных производных типов, закрыв тем самым «брешь» в поддержке стандарта Fortran 2003. Интересная кстати возможность — некий отдаленный аналог шаблонов из С++, дающий нам право контролировать размер данных во время компиляции и выполнения программы:

TYPE humongous_matrix (k, d) INTEGER, KIND: k = kind (0.0) INTEGER (selected_int_kind (12)), LEN: d REAL (k) :: element (d, d) END TYPE

TYPE (humongous_matrix (8,10000000)) :: giant В этом примере, d можно задавать в рантайме и контролировать размер двумерного массива element. Кстати, k должен быть известен во время компиляции для того, чтобы задать длину целого типа в данном примере.

Кроме того, расширилась поддержка стандартов Fortran 2008 и OpenMP 4.0. В том же горячо мной любимом Фортране появилась конструкция BLOCK, весьма полезная при работе с DO CONCURRENT. Для OpenMP добавили поддержку директив CANCEL, CANCELLATION POINT и DEPEND для задач. Вообще, на OpenMP обратили самое пристальное внимание не только в новой версии компилятора, но и активно поработали над его расширенной поддержкой в профилировщике. Но об этом чуть позже.

Кроме такой богатой добавки в стандартах, были существенно переработаны отчеты об оптимизации, и в частности, о работе векторизатора. В упомянутом мной блоге я рассказывал про это подробнее. Здесь же хочу добавить, что интеграция с Visual Studio действительно работает, и теперь отчеты радуют глаз своей наглядностью:

bcc80c1da41b4d2a99f0684d3f5fd01d.png Ну и в завершении темы компилятора — добавлена возможность offload«а вычислений на интегрированную графику — Intel® Graphics Technology, реализованная с помощью директив. Тема объёмная, поэтому не буду распыляться в данном посте, а зарезервирую за собой право написать о ней отдельную историю.

VTune™ Amplifier XE В новой версии студии изменился в лучшую сторону и VTune. Теперь у нас ещё больше возможностей для профилировки как на CPU, так и GPU. Например, раз уж мы теперь можем делать оффлоад на GPU, то и соответствующий анализ имеется, правда, пока только на Windows. Там же расширили и поддержку для OpenCL. Кроме того, появилась функция анализа TSX транзакций. Кстати, очень хороший обзор транзакционной памяти в процессоре Haswell представлен здесь.Но это все полезные приятности для весьма ограниченного числа разработчиков. А вот то, что точно смогут оценить почти все, кто сталкивается с параллелизмом — это анализ масштабируемости OpenMP. Теперь по окончании профилировки, на странице Summary будет выдаваться отдельный пункт для OpenMP при условии, что приложение собиралось с соответствующим ключиком (и Intel«овским компилятором) и в нем есть параллельные области.

533d91c15e7e4a69854cde3a1d41aec6.png

Мы наглядно можем увидеть, какое количество времени наше приложение работало последовательно, и, соответственно, оценить, как оно в дальнейшем будет масштабироваться, принимая во внимание закон Амдаля. Более того, есть аппроксимация идеального времени выполнения параллельной части, которая вычисляется без учёта оверхеда и с идеальным балансом загрузки. Значит, мы можем теперь заранее оценить, стоит ли вкладывать усилия в тот или иной кусок кода или алгоритм. Как это принято, есть возможность сразу перейти на интересующий нас код. Удобная штука, которая, я уверен, будет полезной для многих разработчиков.

Что ещё? Возможность использовать внешние коллекторы. Допустим, мы написали скрипт, который собирает различные события, происходящие в ОС, и хотим, чтобы они были собраны во время профилировки нашего приложения. Теперь есть и такая возможность, причём результат будет сгруппирован и показан на одной временной шкале.

Для любителей поработать на «яблоках», создан графический интерфейс для OS X. Профилировки там нет, зато можно просмотреть результаты, собранные на Linux или Windows, ну или удаленно собрать профили.

Inspector и Advisor Напоследок оставил средства, которые могут значительно упростить жизнь любому разработчику, эдакий бонус в пакете Parallel Studio XE.В Инспекторе значительно переработан механизм нахождения ошибок, связанных с общими данными. По заверениям разработчиков и основываясь на сравнении версии XE 2013 Update 3 и «свежевыпущенной», ускорение работы достигает 20 раз, что не может не радовать. Кроме того, уменьшилось и количество используемой при этом памяти.

Интересная возможность — это новый граф, который показывает использование памяти в реальном времени. Запустили анализ работы с памятью, и смотрим на него, осознавая при этом, как активно тратится память. Выглядит он следующим образом:

ad688585bba64e8d9de6d2f8b602f9f7.png

По завершении анализа, вы сможете также найти возможные ошибки, которые привели к значительному увеличению используемой памяти, перейдя на нужный кусок кода и пробежавшись по стеку:

ed84594b581445e3b32d222830875587.pngЧто нового появилось в Advisor«е? Это конечно возможность моделирования для Xeon Phi! Напомню, что это средство без реализации какой либо параллельной модели, или проще, ничего не переписывая в коде, позволяет оценить возможный прирост производительности в разных частях нашего приложения. Причем имеется возможность отпрофилировать его и узнать, на какие места обратить пристальное внимание. Скажем, что будет если мы распараллелим в этом цикле и запустим вычисление? Во сколько раз ускоримся? Все что нужно, это вставить в интересующий нас участок кода аннотации и запустить средство.Так вот, теперь можно заранее оценить, насколько наш алгоритм хорош для запуска на Xeon Phi:

2ebe2dcd977a47bc81aa42b273d1e689.png

На этих изображениях видно, что в одном случае алгоритм хорошо масштабируется и целесообразность использования Xeon Phi высока, а вот другой, напротив, начиная с 16 потоков не масштабируется.Кроме того, появилась возможность спрогнозировать поведение при изменении количества итераций и их продолжительности/сложности:

f1a4df69491a4679a7bc267d69300cf0.png

В общем, появилось множество разных «вкусняшек», которые точно пригодятся при разработке высокооптимизированного параллельного и последовательного кода. Всем их можно и нужно пробовать здесь совершенно безвозмездно, то есть даром, как обычно, 30 дней.

© Habrahabr.ru