为什么不能并行化以下循环?
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++)
适合并行处理
也许这有点令人困惑。它与逆序无关。关键是您应该能够单独执行每个步骤。
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++)
适合并行处理
也许这有点令人困惑。它与逆序无关。关键是您应该能够单独执行每个步骤。