В прошлом году, когда я писал обзор первой версии Intel Parallel Studio, это уже был мощный инструмент, позволявший усовершенствовать приложения за счет использования нескольких процессорных ядер для параллельной обработки кода. Новейшая версия продукта, появившаяся вслед за недавним форумом разработчиков Intel Developer Forum (IDF), дополнительно усовершенствована и позволяет разработчикам полностью использовать все возможности современной аппаратуры.
Parallel Studio объединяет четыре продукта: Parallel Composer, Parallel Advisor, Parallel Inspector и Parallel Amplifier. И подобно предшествующей версии представляет собой плагин для Visual Studio 2005, 2008 или 2010. Усовершенствования в нынешнем релизе по сравнению с прошлогодним коснулись главным образом Parallel Composer, где появилась поддержка новых языковых расширений в виде Cilk Plus, и Parallel Advisor, который одновременно стал своего рода автоматизированным учебником по программированию.
Во время IDF я потратил некоторое время на встречи и разговоры с глазу на глаз с сотрудниками Intel. Они надеются, что люди смогут использовать данный инструмент, чтобы “поиграться” с параллелизмом и одновременно изучить его.
Parallel Advisor явно предназначен именно для этого. Но он годится не только для обучения. Это инструмент для профессионалов, которым могут пользоваться даже специалисты по параллелизму.
Intel Parallel Studio 2011 стоит 799 долл., а отдельные его компоненты — 399 долл. каждый. Имеется также 30-дневная испытательная версия Parallel Studio. Продукт работает с различными версиями Visual Studio (2005, 2008, 2010), кроме редакции Express.
Parallel Composer
Parallel Composer предназначен для написания программного кода и состоит из расширений языка C++ и библиотек, упрощающих написание параллельных программ. В результате усовершенствований в Parallel Composer появились поддержка Cilk Plus, третьей версии Threading Building Blocks и еще находящейся в стадии бета-тестирования версии Array Building Blocks. В совокупности эти библиотеки и расширения значительно упрощают написание параллельного кода.
Cilk изначально представлял собой язык, разработанный в Массачусетском технологическом институте на основе Си. Он включал конструкции, предназначенные для параллельного программирования. Но в июле 2009 г. компанию Cilk Arts, являвшуюся главным центром изучения и развития Cilk на коммерческой основе, поглотила Intel, которая начала встраивать Cilk в свой компилятор C++. В результате появился Cilk Plus — набор расширений для C++. Таким образом, теперь компилятор поддерживает не только расширения OpenMP для C++, но и Cilk Plus. А писать на Cilk Plus оказалось очень просто. Вот строка из сборника примеров:
cilk_for(int i=0; i
Это параллельный цикл, использующий несколько ядер, когда это возможно.
Cilk Plus состоит фактически всего из трех ключевых слов, добавленных к C++: cilk_for, cilk_spawn и cilk_sync. Ключевое слово cilk_spawn порождает функцию в виде отдельного потока, который выполняется параллельно с текущим потоком. Это довольно просто. А cilk_sync ожидает завершения запущенных потоков.
Разумеется, поскольку эти ключевые слова встроены в язык C++, который распознается компилятором Intel C++, написанный вами код нельзя перенести в другие компиляторы. В зависимости от ваших потребностей это может стать проблемой, а может и не стать. Intel C++ Compiler, который поставляется вместе с Parallel Studio, входит в состав Parallel Composer. Помимо компилятора Parallel Composer включает Parallel Building Blocks — две библиотеки шаблонов, помогающих писать параллельный код. Основная причина их появления связана с тем, что стандартная библиотека C++ (содержащая все обычно используемые классы типа std::map) не гарантирует выполнение потоков. С чисто технической точки зрения вы можете постараться и написать с помощью стандартной библиотеки код, который обеспечит выполнение потоков, но это потребует большого объема работы.
Достоинство Parallel Building Blocks заключается в том, что вы будете избавлены от этого тяжелого труда. Вся библиотека целиком гарантирует выполнение потоков и включает большой объем кода, который избавляет вас от головной боли, связанной с выяснением того, кто, что и когда делает.
Архитектурно Parallel Building Blocks представляет собой две самостоятельные библиотеки: Threading Building Blocks и Array Building Blocks. Первая не является новой, но в состав Parallel Studio 2011 входит ее свежая версия 3.0.
Array Building Blocks — это новая библиотека массива, которая значительно упрощает выделение потоков в структурах данных. (К моменту написания этой статьи в состав Parallel Studio 2011 входила еще бета-версия Array Building Blocks, хотя работала она уже вполне стабильно).
Parallel Advisor 2011
Писать параллельный код не всегда легко. А если у вас уже имеется большой объем кода, написанного без использования параллелизма, то попытки выяснить, как превратить его в параллельный, могут стать причиной сильной головной боли. Вот тут на сцену и выступает Parallel Advisor 2011. Он анализирует вашу программу и дает рекомендации, где следует добавить параллельность.
Когда я писал обзор первой версии Parallel Studio, то упомянул, что она включала продукт Parallel Advisor Lite. В то время было не вполне ясно, почему в названии присутствует слово Lite. Хотя у меня до сих пор нет на этот счет полной уверенности, думаю, потому что корпорация предполагала включить полнофункциональный продукт в состав следующей версии, которую мы теперь и рассматриваем. Полнофункциональная версия называется Parallel Advisor 2011. Она значительно усовершенствована по сравнению с прошлогодней Lite.
Parallel Advisor открывает в Visual Studio окно потока работ, в ходе которого производится анализ и даются рекомендации по использованию параллельного кода. Первый этап процесса называется Survey Target. На этом этапе Parallel Advisor запускает вашу программу и анализирует ее работу, чтобы определить, где целесообразно использовать параллелизм.
По завершении анализа вы можете использовать данный инструмент, чтобы включить в программу аннотации в предложенных точках, в которых параллельное исполнение даст эффект. От этого код не станет параллельным. Но это будет указанием для Parallel Advisor вести мониторинг последующего кода на очередном этапе для проверки возможности параллелизма.
После добавления аннотаций вы заново компонуете программу и запускаете ее еще раз. Код по-прежнему является последовательным, не параллельным, но Parallel Advisor теперь специально ведет мониторинг в указанных точках и пытается определить, насколько возрастет скорость работы, если данный фрагмент станет параллельным.
Получив все рекомендации, вы будете знать, где стоит добавить параллелизм. Затем вы можете приступить непосредственно к добавлению параллельного кода, используя Cilk Plus и Parallel Building Blocks. Продукт произведет проверку и выявит потенциальные проблемы с совместным использованием данных, появившиеся в результате внесенных в код изменений.
Я прошел через все перечисленные этапы, воспользовавшись одной из нескольких прилагаемых к Parallel Studio программ. Скорость ее исполнения заметно возросла. У моего компьютера был всего лишь двухъядерный процессор, но планировщик задач Windows показал, что нагрузка распределялась между двумя ядрами.
Хотя это еще не искусственный интеллект, Parallel Advisor, безусловно, представляет собой шаг в этом направлении. Вам не нужно быть ассом параллелизма, чтобы проанализировать свой код и выяснить, добавлять ли к нему параллелизм.
Parallel Advisor выполнит за вас огромный объем тяжелой работы. В сущности, результат будет примерно такой же, как если бы рядом с вами сидел один из специалистов Intel по параллельным вычислениям.