如何在 Microsoft Visual Studio 2017 或 2019 中启用或使用自动矢量化和自动并行化?
How to enable or use auto vectorization along with auto parallelization in Microsoft Visual Studio 2017 or 2019?
我正在尝试在下面的 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
添加到我的项目 属性 页面的附加选项部分,但我没有收到说明矢量化是否失败的报告。
没有矢量化报告,因为您是在调试模式 (/Od
) 下编译的,在这种情况下,由于禁用了优化,因此未应用自动矢量化。因此,切换到发布版本。
/O1
和 /OS
将导致失败原因为 1404 的报告。
/Ox
和 /O2
将尝试自动向量化,但是使用 /fp:precise
(您现在已设置)此循环由于原因 1105 无法向量化。指定 /fp:fast
会让它工作。
我正在尝试在下面的 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
添加到我的项目 属性 页面的附加选项部分,但我没有收到说明矢量化是否失败的报告。
没有矢量化报告,因为您是在调试模式 (/Od
) 下编译的,在这种情况下,由于禁用了优化,因此未应用自动矢量化。因此,切换到发布版本。
/O1
和 /OS
将导致失败原因为 1404 的报告。
/Ox
和 /O2
将尝试自动向量化,但是使用 /fp:precise
(您现在已设置)此循环由于原因 1105 无法向量化。指定 /fp:fast
会让它工作。