为什么不能并行化以下循环?

Why can't the following loop be parallelized?

double A[N] = { ... }, B[N] = { ... };

for (int i = 1; i < N; i++) {
  A[i] = B[i] – A[i –1];
}

为什么不能使用 #pragma omp parallel for 构造并行化此循环?

代码中的原因很简单。要计算 A[i],您需要先计算 A[i-1]。共有 N 个步骤,其中每一步都取决于上一步。

一般来说,如果将 header 更改为 for(int i=N-1; i>0; i--)

后循环会产生完全相同的结果,则循环 for(int i=1; i<N; i++) 适合并行处理

也许这有点令人困惑。它与逆序无关。关键是您应该能够单独执行每个步骤。