Loops 循环展开以实现并行性

Loops 循环展开以实现并行性,loops,parallel-processing,loop-unrolling,Loops,Parallel Processing,Loop Unrolling,在一次讲座中,我的教授给了我们以下循环: for (int i = 0; i < 100; i++) { a[i] = a[i] + b[i]; b[i + 1] = c[i] + d[i]; } 他声称循环的每个迭代现在都可以并行运行。我看到的问题是第3行设置了在第4行的下一次迭代中将成为b[I],因此我们仍然不能并行运行每个迭代 我这样说对吗?如果是这样的话,是否有一个适当展开的第一个循环版本,其中每个迭代都可以并行化?我猜你在写下教授给出的展开版本时犯了一个错误。为

在一次讲座中,我的教授给了我们以下循环:

for (int i = 0; i < 100; i++) {
    a[i] = a[i] + b[i];
    b[i + 1] = c[i] + d[i];
}
他声称循环的每个迭代现在都可以并行运行。我看到的问题是第3行设置了在第4行的下一次迭代中将成为
b[I]
,因此我们仍然不能并行运行每个迭代


我这样说对吗?如果是这样的话,是否有一个适当展开的第一个循环版本,其中每个迭代都可以并行化?

我猜你在写下教授给出的展开版本时犯了一个错误。为了与第一个算法等效,它应该如下所示:

a[0] = a[0] + b[0];
for (int i=0 ; i<99 ; ++i) {
    b[i+1] = c[i] + d[i];
    a[i+1] = a[i+1] + b[i+1];
}
b[100] = c[100] + d[100];
a[0]=a[0]+b[0];
对于(int i=0;i
a[0] = a[0] + b[0];
for (int i=0 ; i<99 ; ++i) {
    b[i+1] = c[i] + d[i];
    a[i+1] = a[i+1] + b[i+1];
}
b[100] = c[100] + d[100];