-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
по умолчанию, предоставляя пользователю некоторый потенциал для отладки или удаления, когда требуется оптимизировать исполняемый файл / библиотеку.