我正在编写一个程序,尝试使用SSE和AVX SIMD指令加速Top K过滤算法。 我正在使用带有-o3,-msse3和-lrt标志的icc编译我的程序,运行时间大约为30ms。但是,当我在结尾处放置-g标志以使用vtune或gdb时,程序运行的时间会跳转到~100ms。
有人可以解释为什么会发生这种情况吗?我很困惑为什么-g会改变程序的编译。
答案 0 :(得分:1)
-g
(例如-O3
(与默认的-O0
相对))通常会增加可执行文件的大小,保留符号名称,类型信息,行号等,但不一定影响优化的代码。可以增加代码大小的增加以及程序的符号/加载时间。
可以使用strip [options] program
删除此额外调试数据。
请注意,使用具有更高优化值的-g
可能会导致调试器尝试逐步执行不存在的变量 - 因为它们已经过优化。产生令人困惑的结果。这并不是说这个功能没用。默认情况下,许多代码(包)使用-g -O2
进行编译,为用户提供某些调试的可能性,或者在需要优化可执行文件/库时进行剥离。