我刚刚注意到在我们的项目中没有设置“启用增强指令集”标志,这可能只是一个疏忽。
在启用该标志之前,我想问一下是否有人看到启用它的任何实际性能改进?
我想我们会看到一些改进,我们的应用程序会不断地进行基于浮点的计算,但这不是主要部分。
我刚刚注意到在我们的项目中没有设置“启用增强指令集”标志,这可能只是一个疏忽。
在启用该标志之前,我想问一下是否有人看到启用它的任何实际性能改进?
我想我们会看到一些改进,我们的应用程序会不断地进行基于浮点的计算,但这不是主要部分。
性能优势将取决于您的项目是否使用密集的数学计算。对于许多任务(网络、文本处理、数据管理)来说,情况并非如此,因为那里没有(或几乎没有)使用浮点运算。因此,根本不会有性能提升。
使用编译器生成的 SSE/SSE2 指令不会产生最佳性能。首先,您无法控制实际的代码生成。在某些情况下,您需要在旧系统上使用旧 (x87) 代码,而在新系统上使用启用 SSE/SSE2 的代码。您可能还想在大多数最新系统上利用 SSE3。为此,我建议使用cpuid
指令检查处理器类型,然后切换到可以充分利用处理器功能的实现。然后,您可以在面向 SSE/SSE2 的实现中使用编译器内在函数。要定位 SSE3,您需要一个我试图在 Internet 上找到的专用库。
我相信,必须存在执行处理器功能分析并允许最佳代码切换的库。我也只是需要一些时间上网看看。
简而言之:此设置仅启用直接映射到 SSE 指令的某些内在函数。在普通 C++ 程序中,您不使用这些内在函数,因此此设置不会提高性能。
如果您需要更高的性能,您可以尝试找到一个编译器来重写您的代码以使用 SSE 指令(英特尔声称它的编译器可以),但使用多核(使用 openMP 或 .net 4.0)或使用 GPU 可能更聪明,比 SSE 更快、更灵活。