Оптимизирует ли мой компилятор C ++ мой код? - PullRequest
6 голосов
/ 29 ноября 2009

При использовании современных компиляторов C ++ (включая MSVC, GCC, ICC), как я могу сказать, если он имеет:

  1. распараллелил код
  2. векторизовал циклы (или использовал другие специальные инструкции процессора)
  3. развернул петли
  4. обнаружена хвостовая рекурсия
  5. выполнено RVO (оптимизация возвращаемого значения)
  6. или оптимизирован каким-либо другим способом

без погружения в ассемблерный код, который создает компилятор?

Ответы [ 4 ]

18 голосов
/ 29 ноября 2009

Единственный способ, которым вы можете действительно сказать, - это проверить вывод на ассемблере (который, как вам кажется, не учитывается). Кроме этого, вы можете прочитать документацию, чтобы увидеть, какие типы оптимизации обеспечивает каждый уровень вашего компилятора.

Но, если честно, если вы не уверены, что уровни оптимизации вашего компилятора выполняют свою работу, вы, вероятно, не будете доверять документу: -)

Я бы посмотрел на ассемблера сам, это единственный способ, которым вы могли быть по-настоящему уверены.

3 голосов
/ 29 ноября 2009

Компилятор Intel имеет приличную возможность создания отчетов. Найдите -vec-report и -par-report в справочной документации или на справочной странице.

g ++ также имеет векторные отчеты, посмотрите на man-странице «vector», я не думаю, что g ++ имеет параллельную автоматическую генерацию кода.

Что касается последних трех вещей, я не думаю, что компиляторы сообщают об этом, поэтому вам, вероятно, придется собираться, чтобы получить эту информацию

0 голосов
/ 09 марта 2014

Я почти уверен, что если вы используете наибольшую глубину оптимизации в своем компиляторе, код будет распараллелен и циклы будут векторизованы, и многие другие методы векторизации также будут работать.

Чтобы использовать такую ​​глубину, используйте команду -O3 при запуске кода.

0 голосов
/ 29 ноября 2009

Для RVO или других вещей, имеющих отношение к копированию, просто поместите некоторые записи (printf) в copy-ctor и dtor вашего класса. Вы должны увидеть меньше объектов, копируемых вокруг, если оптимизация работает.

...