0

我正在编写一个程序,试图使用 SSE 和 AVX SIMD 指令加速 Top K 过滤算法。我正在使用带有标志 -o3、-msse3 和 -lrt 的 icc 编译我的程序,运行时间约为 30 毫秒。但是,当我在末尾添加 -g 标志以使用 vtune 或 gdb 时,程序运行所需的时间会跳到 ~ 100 毫秒。

有人可以解释为什么会发生这种情况吗?我很困惑为什么 -g 会改变程序的编译。

4

1 回答 1

1

-g使用其他优化标志,例如-O3(与默认值相反-O0),通常会增加可执行文件的大小,保留符号名称、类型信息、行号等,但不一定会影响优化的代码。这种代码大小的增加,以及程序的符号/加载时间可能会增加。

这个额外的调试数据可以用strip [options] program.

请注意,使用-g更高的优化值可能会导致调试器尝试单步执行不存在的变量 - 因为它们已被优化掉。产生令人困惑的结果。这并不是说这个功能没有用。许多代码(包)-g -O2默认编译,给用户一些调试的潜力,或者在需要优化的可执行文件/库时进行剥离。

于 2014-05-22T13:58:10.230 回答