我在使用C语言进行数学软件开发时使用标准gcc
编译器。我对编译器或编译器选项知之甚少,我只是想知道,是否可以使用其他编译器或选择更好的选项来制作更快的可执行文件?默认的Makefile设置选项-ffast-math
和-O3
,我认为它们都会对整体计算时间产生一些影响。我的软件使用的内存非常广泛,所以我想一些与内存管理相关的选项可能会起作用吗?
有什么想法吗?
答案 0 :(得分:9)
在尝试使用不同的编译器或随机的,任意的微优化之前,您确实需要获得一个不错的分析器和配置文件您的代码,以确切了解性能瓶颈是什么。实际情况可能与您的想象非常不同。获得配置文件后,您可以开始考虑可能有用的优化。例如。如果受内存带宽限制,更改编译器将无法帮助您。
答案 1 :(得分:5)
以下是有关gcc性能的一些提示: 用-Os,-O2和-O3做基准测试。有时-O2会更快,因为它会缩短代码。既然你说你使用了大量内存,那么也尝试使用-Os并进行测量。
另请查看-march = native选项(如果您为具有类似处理器的计算机生成可执行文件,则认为它是安全的)。有时它会对性能产生相当大的影响。如果您需要列出gcc与native一起使用的选项列表,请按以下步骤操作:
制作一个名为test.c的小型C程序,然后
$ touch test.c
$ gcc -march=native -fverbose-asm -S test.c
$ cat test.s
代码转到Gentoo论坛用户的信用。 它应该打印出gcc使用的所有优化的列表。请注意,如果您使用的是i7,gcc 4.5会将其检测为Atom,因此您需要手动设置-march和-mtune。
另请阅读本文档,它会对您有所帮助(依据我的Gentoo经验,-march =本地作品效果更好)http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html
您可以尝试使用4.4版本和4.5版本的新版本,例如-flto和-fwhole-program。这些应该有助于提高性能,但在试验它们时,我的系统不稳定。无论如何,请阅读本文档,它将帮助您了解GCC的一些优化选项http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
答案 2 :(得分:3)
答案 3 :(得分:1)
答案 4 :(得分:1)
正如您所说,您的程序内存很重,您可以测试使用与平台上标准库中不同的malloc实现。 例如,您可以尝试jemalloc(http://www.canonware.com/jemalloc/)。
答案 5 :(得分:1)
请记住,通过更改编译器或设置可以获得的大部分改进只能让您获得成比例的加速,而调整算法有时可以改善程序的O()
。在你花大量精力去调整设置之前一定要筋疲力尽。