OpenMP для цикла при использовании другого индекса var для индексирования массива? - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь распараллелить цикл for, но я не уверен, как, потому что этот цикл использует переменную k, которая не i (i увеличивается на два, потому что я имею дело с двумя частями массива a за раз) для индекса массивов b и c.

for (int i = 0; i < asize; i +=2)
{
    b[k] = a[i];
    c[k] = a[i + 1];

    k++;
}

#pragma omp parallel for вызывает гонку данных с k и дает неправильные результаты

И #pragma omp parallel for private(k) заставляют каждый поток увеличивать k на свою собственную I.E. запись нескольких потоков в b[0] and c[0] одновременно также приводит к неверным результатам.

1 Ответ

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

Что-то в этом роде?

for (int k = 0; 2*k < asize; k++) // i = 2*k
{
    b[k] = a[2*k];
    c[k] = a[2*k + 1];
}
...