-g флаг изменяет время выполнения и компиляцию программы

Я пишу программу, которая пытается ускорить фильтрацию Top K, используя инструкции SSE и AVX SIMD. Я компилирую свою программу, используя icc с флагами -o3, -msse3 и -lrt, и время выполнения составляет ~30 мс. Однако, когда я ставлю флаг -g в конце, чтобы использовать vtune или gdb, время, необходимое программе для запуска, переходит к ~100 мс.

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

1 ответ

-g с другими флагами оптимизации, такими как -O3 (в отличие от дефолта -O0), как правило, увеличивает размер исполняемого файла, сохраняя имена символов, информацию о типе, номера строк и т. д., не обязательно влияя на оптимизированный код. Такое увеличение размера кода и времени символа / загрузки программы может быть увеличено.

Эти дополнительные данные отладки могут быть удалены strip [options] program,

Обратите внимание, что с помощью -g более высокие значения оптимизации могут привести к тому, что отладчик попытается перебрать несуществующие переменные, то есть они были оптимизированы. Давать непонятные результаты. Это не значит, что эта функция бесполезна. Много кода (пакетов) компилируется с -g -O2 по умолчанию, предоставляя пользователю некоторый потенциал для отладки или удаления, когда требуется оптимизировать исполняемый файл / библиотеку.

Другие вопросы по тегам