我刚读完auto-vectorization page on MSDN但仍然不能确切地理解哪些循环会被矢量化。
在the MSDN blogs上,我们得到一个可以自动矢量化的循环示例:
const int N = 1000;
float a[N], b[N];
// Initialize a[i] = i; b[i] = 100 + i
int main()
{
for (int n = 0; n < N; ++n) a[n] += b[n];
}
我通常使用n != N
成语而不是n < N
;这与OpenMP中的问题有关吗?或者自动矢量化无论如何都可以工作?
答案 0 :(得分:3)
除非你了解所有自动化工作的内容,否则你将很难预测每个循环将要做什么。如果这对你很重要,那么我觉得更好的方法是使用/Qvec-report:2
作为定义的here,它应该告诉你一个给定的循环是否是自动矢量化的以及为什么。