Краткое руководство по оптимизации приложения с помощью компиляторов Intel двенадцатой версии

Пошаговое руководство по повышению производительности приложения

Прежде чем начать оптимизировать производительность приложения, делать так называемый «тюнинг», необходимо проверить, вообще правильно ли работает приложение без флагов оптимизации. Для этого нужно его скомпилировать с флагом /Od (-O0). В данной версии компилятора при любом флаге уровня оптимизации подразумевается возможность использования инструкций SSE2. Чтобы запустить приложение на более старых IA-32 процессорах, например Intel® Pentium® III, необходимо также добавить флаг /arch:IA32 (Windows) или –mia32 (Linux).



    1. Попробуйте скомпилировать приложение с различными флагами уровня оптимизации (Windows /O1, /O2 или /O3; Linux и Mac OS X -O1, -O2, или -O3), и измерьте скорость выполнения в каждом случае. Как правило, можно начать с флага /O2 (–O2). Затем, попробуйте /O3 (-O3), если ваше приложение содержит много циклов. Эти флаги должны повысить производительность в том числе и не для процессоров Intel®, однако, для процессоров Intel® оптимизация будет интенсивнее.

    1. Попробуйте использовать флаги для конкретной линейки процессоров. Например, /QxSSE4.2 (–xsse4.2) для процессоров семейства Intel® Core™, в частности, для Intel Core i7, и /arch:SSE3 (-msse3) для совместимых не-Intel процессоров, поддерживающих, как минимум, набор инструкций SSE3. Другой вариант - использовать флаг /QxHOST (-xhost), который попытается применить оптимизации для конкретного процессора, на котором вы компилируете приложение. Опять же, на процессорах Intel данные оптимизации играют более существенную роль, чем на совместимых не-Intel процессорах.

    1. Включите межпроцедурную оптимизацию (Interprocedural Optimization, IPO) и оптимизацию по профилю (Profile-guided optimization, PGO). Затем измерьте производительность приложения с каждым из флагов по отдельности, и с обоими флагами.



    • С ростом объёма программ разработчики стали делать свой код всё более удобочитаемым и повторно используемым. Зачастую это приводит к тому, что процедуры становятся предельно общими, в то время как в конкретной программе можно обойтись и частным случаем. Задача межпроцедурной оптимизации - именно генерация таких частных случаев. Включается флагом /Qipo (-ipo).

      • PGO позволяет более эффективно использовать микроархитектуру процессора, проводить распределение инструкций, использовать кэш-память и делать более точное предсказание переходов. Она увеличивает производительность программы путем реорганизации кода для повышения эффективности работы кэша команд, снижения размера кода и уменьшения числа ситуаций с непредсказуемыми передачами управления. За данную оптимизацию отвечают флаги /Qprof-gen и /Qprof-use (-prof-gen и -prof-use).




        1. Оптимизируйте приложение для векторного и параллельного выполнения на многоядерных или многопроцессорных системах. Для этого можно воспользоваться советами новой функции Guided Auto-Parallelism (GAP), /Qguide (-guide); расширениями языка для C/C++ Intel® Cilk™ Plus; опциями /Qparallel (-parallel) или /Qopenmp (-openmp); или воспользоваться библиотеками Intel® Performance Libraries.

        1. Воспользуйтесь Intel® VTune™ Amplifier XE, чтобы выявить узкие места в приложении, которые, возможно, получится устранить. Используйте Intel® Inspector XE, чтобы диагностировать ошибки памяти в многопоточных приложениях и ускорить процесс разработки. Данные продукты не могут использоваться на не-Intel процессорах.



      По материалам Quick-Reference Guide to Optimization with Intel® Compilers version 12

      Etiquetas:
      Para obtener más información sobre las optimizaciones del compilador, consulte el aviso sobre la optimización.