Visual Studio 编译器标志 /arch 和性能
Posted
技术标签:
【中文标题】Visual Studio 编译器标志 /arch 和性能【英文标题】:Visual studio compiler flag /arch and performance 【发布时间】:2010-03-06 18:35:12 【问题描述】:我刚刚注意到在我们的项目中没有设置“启用增强指令集”标志,这可能只是一个疏忽。
在启用该标志之前,我想问一下是否有人看到启用它的任何实际性能改进?
我想我们会看到一些改进,我们的应用程序会不断地进行基于浮点的计算,但这不是主要部分。
【问题讨论】:
为什么不对您的应用程序进行测试/测量? 我会的,只是想知道其他人在比较之前/之后是否看到了任何改进 【参考方案1】:简而言之:此设置仅启用直接映射到 SSE 指令的某些内在函数。在普通 C++ 程序中,您不使用这些内在函数,因此此设置不会提高性能。
如果您需要更高的性能,您可以尝试找到一个编译器来重写您的代码以使用 SSE 指令(英特尔声称其编译器可以),但多核(使用 openMP 或 .net 4.0)可能更聪明,或者使用 GPU,它比 SSE 更快、更灵活。
【讨论】:
【参考方案2】:性能优势取决于您的项目是否使用密集的数学计算。对于许多任务(网络、文本处理、数据管理)来说,情况并非如此,因为那里没有(或几乎没有)使用浮点运算。因此,根本不会有性能提升。
使用编译器生成的 SSE/SSE2 指令不会产生最佳性能。首先,您无法控制实际的代码生成。在某些情况下,您需要在旧系统上使用旧 (x87) 代码,而在新系统上使用启用 SSE/SSE2 的代码。您可能还想在大多数最新系统上利用 SSE3。为此,我建议使用cpuid
指令检查处理器类型,然后切换到可以充分利用处理器功能的实现。然后,您可以在面向 SSE/SSE2 的实现中使用编译器内在函数。要定位 SSE3,您需要一个专门的库,我试图在 Internet 上找到它。
我相信,必须存在执行处理器功能分析并允许优化代码交换的库。我也只是需要一些时间上网看看。
【讨论】:
以上是关于Visual Studio 编译器标志 /arch 和性能的主要内容,如果未能解决你的问题,请参考以下文章
面向 XP 的 Visual Studio 2013 的 Visual C++ 编译器标志
Visual Studio C++ 编译器标志:-Zm200 是啥?
“首选 32 位”编译器标志对 Visual Studio(C#、VB)意味着啥?