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

How to disable only SIMD auto-vectorization optimization in Visual Studio 2015 (for C++)?

提问人:blipblop 提问时间:1/4/2017 最后编辑:sepp2kblipblop 更新时间:1/5/2017 访问量:2505

问:

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

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

2)对于部分代码。

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

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

Visual-Studio 编译矢 量化 SIMD

评论

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

答:

2赞 Chuck Walbourn 1/5/2017 #1

使用 或 进行构建时,会自动启用可视化 C++ 自动矢量化器。/O2/Ox

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

您可以通过使用#pragma loop(no_vector)

请参阅 MSDN

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

有关详细信息,请参阅此博客系列、此视频自动矢量化手册

评论

0赞 blipblop 1/6/2017
谢谢你的回答。你到底在哪里找到上面的报价?我没有在您包含的任何链接中找到(也没有在食谱中)。也许您错过了感兴趣的参考资料?
0赞 Chuck Walbourn 1/6/2017
这与其说是一句话,不如说是一句旁白。没有记录在案的编译器开关可以禁用自动矢量化器。