我用C语言在数学软件开发中使用标准的gcc编译器。我不太了解编译器或编译器选项,我只是想知道,有没有可能使用另一个编译器或选择更好的选项来制作更快的可执行文件?默认的Makefile设置选项-ffast-math和-O3,我认为这两个选项对整体计算时间都有一些影响。我的软件使用内存非常广泛,所以我想一些与内存管理相关的选项可以解决这个问题?
有什么想法吗?
发布于 2010-06-03 18:23:15
在尝试不同的编译器或随机的、任意的微优化之前,你真的需要一个像样的分析器和profile你的代码,以找出确切的性能瓶颈是什么。实际情况可能与你想象的截然不同。一旦你有了一个概要文件,你就可以开始考虑什么可能是有用的优化。例如,如果你受到内存带宽的限制,改变编译器不会对你有任何帮助。
发布于 2010-06-03 18:15:34
这里有一些关于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=native运行得更好) http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html
您可以尝试在4.4年末和4.5早期版本中使用新选项,如-flto和- early program。这些应该有助于提高性能,但在试验它们时,我的系统不稳定。无论如何,也请阅读本文档,它将帮助您理解GCC的一些优化选项http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
https://stackoverflow.com/questions/2964667
复制相似问题