Callgrind на O1 или O3 для профилирования производительности?

Мне нужно профилировать мой код C ++, и valgrind --tool=callgrind это феноменальный инструмент для этого. Мне было интересно, однако, должен ли я профилировать свой код с -g -pg -O1 или же -g -pg -O3 (GCC 4.4.7)? Последнее дает более точное представление о производительности моей программы, но я беспокоюсь, что -O3 запутает профилировщик и запутает, какие функции источника являются фактическими узкими местами. Возможно, я просто напуган рассказами о старых женах, но решил, что должен попросить об этом, прежде чем проводить потенциально несколькочасовой тест.

1

Решение

Этот поток в другом стеке потока может очистить ваш разум: флаги оптимизации при профилировании

Проблема не в профилировании с оптимизацией, а в отладке с оптимизацией (-g -pg).

Как сказал Quantdev, вы должны «всегда использовать те же параметры, которые использовались для создания производственных двоичных файлов», и вы не собираетесь создавать производственный двоичный файл с отладочной информацией.

Если темы не достаточно, дайте нам знать.

1

Другие решения