生成最快的可执行文件

Mic*_*ick 4 c++ windows optimization visual-studio-2008

我有一个非常大的程序,我一直在visual studio下编译(v6然后迁移到2008).我需要可执行文件尽可能快地运行.该程序花费大部分时间处理各种大小的整数,并且IO很少.

显然我会选择最大化优化,但似乎有很多事情可以做,而不是在优化的标题下,这仍然会影响可执行文件的速度.例如,选择__fastcall调用约定或将结构成员对齐设置为大数.

所以我的问题是:我是否应该使用其他编译器/链接器选项来使程序更快,而不是从"属性"对话框的"优化"页面控制.

编辑:我已经广泛使用了分析器.

Mic*_*and 12

要考虑的另一个优化选项是优化尺寸.由于更好的缓存局部性,有时大小优化的代码比速度优化的代码运行得更快.

此外,除了优化操作之外,在分析器下运行代码并查看瓶颈所在.使用优秀的分析器花费的时间可以在性能上获得重大收益(特别是如果提供有关代码的缓存友好性的反馈).

最终,你可能永远不会知道"尽可能快".你最终需要解决"这对我们的目的来说足够快".


int*_*jay 8

配置文件引导的优化可以带来大的加速.使用PGO构建时,我的应用程序运行速度比普通优化构建快30%.基本上,您运行一次应用程序并让Visual Studio对其进行配置,然后根据收集的数据进行优化再次构建它.


int*_*nt3 5

1)使用__restrict减少别名.

2)使用__pure帮助编译器进行公共子表达式消除/死代码消除.

3)可以在这里这里找到SSE/SIMD的介绍.互联网并没有完全包含有关该主题的文章,但这已经足够了.有关内在函数的参考列表,您可以在MSDN中搜索"编译器内在函数".

4)对于"宏并行化",您可以尝试OpenMP.它是简单任务并行化的编译器标准 - 实质上,您使用少数#pragmas告诉编译器代码的某些部分是可重入的,并且编译器会自动为您创建线程.

5)我第二次认识到PGO可能非常有用.与#3和#4不同,添加它几乎毫不费力.


tsa*_*ter 5

你问的是哪些编译器选项可以帮助你加速你的程序,但这里有一些一般的优化技巧:

1)确保您的算法适合该作业.如果你编写一个O(shit平方)算法,那么编译器选项的数量不会对你有所帮助.

2)编译器选项没有硬性规定.有时优化速度,有时优化尺寸,并确保你的时间差异!

3)了解您正在使用的平台.了解该CPU的高速缓存如何运行,并编写专门利用硬件的代码.确保你没有到处跟踪指针来访问会破坏缓存的数据.了解可用的SIMD操作并使用内在函数而不是编写汇编.如果编译器肯定没有生成正确的代码(即以错误的方式写入未缓存的内存),则只编写汇编.确保对不会使用别名的指针使用__restrict.有些平台更喜欢你通过值而不是引用来传递矢量变量,因为它们可以放在寄存器中 - 我可以继续这样做但这应该足以指出你正确的方向!

希望这可以帮助,

-Tom