Во время лекции мой профессор дал нам следующий цикл:
for (int i = 0; i < 100; i++) {
a[i] = a[i] + b[i];
b[i + 1] = c[i] + d[i];
}
Он указал на зависимость между итерациями цикла, потому что строка три устанавливает значение, которое используется в следующей итерации в строке 2 (устанавливает b[i+1]
, который становится b[i]
в следующей итерации).Поэтому мы не можем запускать каждую итерацию цикла параллельно.
Затем он дал нам развернутую версию:
a[1] = a[1] + b[1];
for (int i = 0; i < 98; i++) {
b[i+1] = c[i] + d[i];
a[i+1] = a[i] + b[i];
}
b[99] = c[99] + d[99];
Он утверждает, что теперь каждая итерация цикла может быть запущена впараллельно.Проблема, которую я вижу, состоит в том, что в строке 3 задается, что станет b[i]
в следующей итерации в строке 4, и поэтому мы все еще не можем выполнять каждую итерацию параллельно.
Прав ли я, говоря это?Если да, то есть ли правильно развернутая версия первого цикла, где каждая итерация может быть распараллелена?