openMp: необходимо распараллелить цикл с проблемой зависимости от данных - PullRequest
1 голос
/ 25 ноября 2010

Я хотел знать, существует ли способ распараллеливания "для цикла" , имеющего проблему с зависимостью от данных, с использованием OpenMP .

.для цикла , который мне нравится распараллеливать

int k = 0;
int A[100][100];
for(i = 0; i < 100; i++) {
    for(j = 0; j < 100; j++) {
           A[i][j] = k;
           k++;
    }
}

У кого-нибудь есть решение для этого ...

Ответы [ 2 ]

4 голосов
/ 25 ноября 2010

У вас на самом деле нет проблемы зависимости данных, потому что k может быть вычислено из i и j:

int A[100][100];
for(i = 0; i < 100; i++) {
    for(j = 0; j < 100; j++) {
        A[i][j] = i * 100 + j;
    }
}

Если вы можете датьболее реалистичный пример того, что вы пытаетесь сделать, возможно, мы сможем вам помочь больше.

0 голосов
/ 25 ноября 2010

Проблема, на первый взгляд, заключается в том, что k не объявляется как производное значение; это внешнее по отношению к циклу значение, которое может сбить с толку компилятор.

Вы можете переписать свой цикл, чтобы явно указать k как функцию i и j и сохранить то же поведение:

int A[100][100];
for(i = 0; i < 100; i++) {
    for(j = 0; j < 100; j++) {
           const int k = i * 100 + j;
           A[i][j] = k;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...