0

我正在尝试在下面的 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 到我的项目属性页面的附加选项部分,但我没有收到说明矢量化是否失败的报告。

Qvec 和 Qpar 报告添加到项目属性页面

启用并行代码生成

4

1 回答 1

2

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

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

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

于 2020-12-15T01:39:26.907 回答