Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top