Вот, наконец, добрался попробовать Си++ компилятор, входящий в состав Intel Parallel Studio XE 2011 beta. Привожу краткий отчет о своих экспериментах.
Скачать и попробовать новую версию Parallel Studio можно здесь: Intel Parallel Studio XE 2011 for Windows* Beta Registration. Лицензия на beta-версию предоставляется на несколько месяцев, так что времени для экспериментов с инструментом вполне достаточно. Размер дистрибутива (for IA-32/Intel 64 - 1 GB) несколько удивляет, но в настоящее время, думаю, скачать его не будет проблематично.
Меня и коллег в Intel Parallel Studio интересовал собственно один единственный вопрос - сборка PVS-Studio. Хотелось посмотреть, получим ли мы прирост производительности? и каков будет этот прирост.
Меня не интересуют абстрактные маленькие программы-примеры, где быстро что-то считают математическое. Это слишком оторвано он реальности. А у нас в руках есть свой собственный совершенно реальный проект, представляющий собой работу над графами (деревом разбора).
Анализатор PVS-Studio имеет конфигурацию для сборки под Win32 и Win64. Нас кончено в первую очередь интересовала 64-битная сборка, но, к сожалению, с ней не заладилось. Мы используем Boost, который нам не удалось собрать для Win64. Возможно, мы что-то делали не правильно и руки у нас не там. Однако кажется причина все таки в дефекте компилятора, в результате чего на многих файлах мы получили сообщения вида:
c:\boost_1_44_0\libs\iostreams\src\file_descriptor.cpp(294)
(col. 1): internal error: 0_1374
compilation aborted for libs\iostreams\src\file_descriptor.cpp
(code 4)
С другими конфигурациями библиотеки Boost проблем не возникло:
Как видно Debug успешно собирается как в 32-битном, так и 64-битном режиме. К сожалению, Debug-версии нам не интересны, поэтому пришлось ограничиться сравнением Release Win32 и Release Win64.
Еще попутным мелким неприятным моментом оказалось, что Intel C++ до сих пор так и не научился поддерживать "nullptr", появившийся в C++0x. Пришлось сделать вставку в stdafx.h:
#ifdef __INTEL_COMPILER
#define nullptr 0
#endif
А теперь самое интересное - замер скорости работы внутренних тестов. Простая перекомпиляция проекта ничего не дает, даже приводит к замедлению его работы:
Однако уже использование ключей /Qipo "Multifile interprocedural optimization" и /GA "Optimize for Windows Applications" дает заметный прирост производительности:
А вот использование опции /Qparallel (Tells the auto-parallelizer to generate multithreaded code for loops that can be safely executed in parallel) ничего заметного не дало. Но возможно мы просто "не умеем их готовить", и к своему стыду были не заинтересованы продолжать изучение. Не интересно по той причине, что более подробные эксперименты с возможностями оптимизации имеют смысл для нас только относительно 64-битной версии. Надеемся релиз Intel Parallel Studio будет более стабильный и тогда можно будет продолжить. Однако уже видно, что можно получить существенный выигрыш от смены компилятора. Рекомендую попробовать.