如何在 Visual Studio 2015(用于 C++)中仅禁用 SIMD 自动矢量化优化?

Posted

技术标签:

【中文标题】如何在 Visual Studio 2015(用于 C++)中仅禁用 SIMD 自动矢量化优化?【英文标题】:How to disable only SIMD auto-vectorization optimization in Visual Studio 2015 (for C++)? 【发布时间】:2017-01-04 10:01:48 【问题描述】:

我的问题只是如何在 Visual Studio 2015 中仅禁用 SIMD 自动矢量化优化(保留发布模式的其他优化):

1) 正在编译的整个项目;

2) 部分代码。

在第一种情况下,我想了解如何在整个项目中禁用它。对于第二种情况,我想知道是否也可以对代码的特定区域执行此操作,类似于使用#pragma optimize("", off)#pragma optimize("", on) 时所有优化的可能。

这样做的目的是将一些手动优化的代码与编译器的自动 SIMD 矢量化进行性能比较。

【问题讨论】:

关闭 SSE 支持还不够? 你不能在 x64 上这样做,因为所有 x64 都至少有 SSE2。 @Mysticial 所以你的意思是我只有为 x86 编译才能做到这一点? @MSalters 你的意思是指定/arch:IA32? @blipblop 正确。 Visual Studio 不允许您在 x64 上禁用 SSE2,因为所有 x64 处理器都有 SSE2。所以从他们的角度来看,在 x64 构建上添加禁用 SSE2 的能力是没有意义的。您的特定用例非常小众。另一种方法是使用没有自动矢量化的旧版本 VS。 (VS2010-ish 和更早的 IIRC) 【参考方案1】:

使用/O2/Ox 构建时会自动启用Visual C++ 自动矢量化器。

要查看它在做什么,请使用 /Qvec-report:1/Qvec-report:2 构建。

您可以使用 #pragma loop(no_vector) 为特定循环禁用它

见MSDN

没有记录的方法可以全局禁用自动矢量化器,同时保持启用标准优化。

有关详细信息,请参阅此blog series、此video 和Auto-Vectorization Cookbook

【讨论】:

感谢您的回答。你在哪里找到上面的报价?我在您包含的任何链接中都没有找到(也没有在食谱中)。也许您错过了感兴趣的参考资料? 这不是一个引用,而是一个旁白。没有记录的编译器开关只是禁用自动矢量化器。

以上是关于如何在 Visual Studio 2015(用于 C++)中仅禁用 SIMD 自动矢量化优化?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2015 不适用于 Apache Cordova 工具

C# 6.0 功能不适用于 Visual Studio 2015

Visual Studio 2013/2015 测试项目模板 - 用于 NUnit?

如何将 tsconfig.json 文件添加到 Visual Studio 2015 项目以获取编译器选项?

如何利用visual studio2015编写uwp应用

如何在 Visual Studio 2017 中使用 Qt 库?