Зависимость от разности потоков и анти-зависимость - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь понять статью, касающуюся обнаружения зависимости при распараллеливании задач, и немного борюсь с примером.Учитывая A, B, C и D являются векторами объекта:

    do I=2,N
S1:    A(I) = B(I) + C(I)
S2:    D(I) = A(I + 1) + 1
S3:    C(I) = D(I)

Сосредоточение на зависимости между S1 и S2.Для меня это зависимость потока S1 -> S2, A находится в OUT (S1) и IN (S2), и A действительно используется в S2, подтверждая определение зависимости потока, данное Woolfe & Banerjee.Однако в экспликации говорится, что это антизависимость S2 -> S1.Это потому что мы внутри петли?И в этом случае, означает ли это, что в цикле любая зависимость от потока является обратной и независимой?

1 Ответ

0 голосов
/ 22 ноября 2018

Хорошо, наконец, это зависит не от объекта, а от используемой области памяти.В этом примере A (I) и A (I + 1) могут не относиться к одной и той же памяти (если нет псевдонимов).Таким образом, нет никакой зависимости между ними в текущей итерации.Однако, если мы немного развернем цикл, мы получим:

do I=2,N
  S1:    A(I) = B(I) + C(I)
  S2:    D(I) = -> A(I + 1) + 1
  S3:    C(I) = D(I)
  S1:    -> A(I + 1) = B(I + 1) + C(I + 1)
  S2:    D(I + 1) = A(I + 2) + 1
  S3:    C(I + 1) = D(I + 1)

Теперь, анти-зависимость появляется отчетливо.

Кажется очевидным сейчас ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...