我刚刚通读了 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 中一样重要吗?还是无论如何自动矢量化都有效?
最佳答案
除非您了解所有自动矢量化工作原理的每一个细节,否则您将很难预测每个循环将要做什么。如果这对您很重要,我觉得更好的方法是使用 /Qvec-report:2
定义的 here它应该告诉您给定循环是否自动矢量化以及原因。
关于c++ - 我是否需要在我的 for 循环中使用小于 (<) 运算符来进行自动矢量化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19800913/