【发布时间】:2010-05-21 06:33:28
【问题描述】:
我正在编写光线追踪器。
最近,我在程序中添加了线程,以利用 i5 四核上的额外内核。
奇怪的是,应用程序的调试版本现在运行速度较慢,但优化后的构建运行速度比我添加线程之前更快。
我将“-g -pg”标志传递给 gcc 以进行调试构建,并将“-O3”标志传递给优化构建。
主机系统:Ubuntu Linux 10.4 AMD64。
我知道调试符号会给程序增加很大的开销,但相对性能一直保持不变。 IE。更快的算法在调试和优化构建中总是运行得更快。
知道为什么我会看到这种行为吗?
调试版本使用“-g3 -pg”编译。带有“-O3”的优化版本。
Optimized no threading: 0m4.864s
Optimized threading: 0m2.075s
Debug no threading: 0m30.351s
Debug threading: 0m39.860s
Debug threading after "strip": 0m39.767s
Debug no threading (no-pg): 0m10.428s
Debug threading (no-pg): 0m4.045s
这让我相信“-g3”不应归咎于奇怪的性能增量,而是“-pg”开关。 “-pg”选项很可能添加了某种锁定机制来衡量线程性能。
由于“-pg”在线程应用程序上无论如何都被破坏了,我将删除它。
【问题讨论】:
-
strip您的调试版本,测量剥离的调试版本的性能并将此信息添加到您的问题中。 -
-pg没有添加调试符号,所以你的问题是有缺陷的。 “为什么调试符号会对性能产生不利影响”的答案是“它们不会”。
标签: linux performance multithreading gcc gprof