如何在 Microsoft Visual Studio 2017 或 2019 中启用或使用自动矢量化以及自动并行化?

Posted

技术标签:

【中文标题】如何在 Microsoft Visual Studio 2017 或 2019 中启用或使用自动矢量化以及自动并行化?【英文标题】:How to enable or use auto vectorization along with auto parallelization in Microsoft Visual Studio 2017 or 2019? 【发布时间】:2020-12-15 01:16:33 【问题描述】:

我正在尝试在下面的 for 循环中测试自动矢量化。我无法让自动矢量化工作。代码如下所示。

float dotproduct(float a[], float b[], int size) 
    int x = 0.0;
    for (int i = 0; i < size; i++) 
        x = x + a[i] * b[i];
    
    return x;


int main() 
    const int N = 8;

    float a[N] = 2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0;
    float b[N] = 9.0,8.0,7.0,6.0,5.0,4.0,3.0,2.0;
    
    dotproduct(a, b, N);
    cout << dotproduct(a, b, N);

    return 0;

我将/Qvec-report:2 /Qpar-report:2 行添加到我的项目属性页面的附加选项部分,但我没有收到说明矢量化是否失败的报告。

【问题讨论】:

你有没有试过把这个语法`#pragma loop(hint_parallel(8))`放在for循环之上? 是的,我尝试使用它,但仍然没有任何变化。 【参考方案1】:

没有矢量化报告,因为您在调试模式 (/Od) 下编译,在这种情况下,由于禁用了优化,因此不会应用自动矢量化。所以,切换到发布版本。

/O1/OS 会导致报告失败原因为 1404。

/Ox/O2 将尝试自动矢量化,但使用 /fp:precise(您现在已设置)此循环由于原因 1105 无法矢量化。指定 /fp:fast 将使其工作。

【讨论】:

以上是关于如何在 Microsoft Visual Studio 2017 或 2019 中启用或使用自动矢量化以及自动并行化?的主要内容,如果未能解决你的问题,请参考以下文章

微软发布了Visual Studio 2022 RC版,并将在11月8日发布正式版

如何下载microsoft visual studio

如何离线安装Visual Studio 2017

如何在 Microsoft Visual Studio 2019 中调试 nestjs 程序?

如何在 Microsoft Visual Studio 中加载 .xml 文件

如何在 Visual Studio 中启用 Microsoft 终端服务客户端控制?