OpenMP потоки и итерации - PullRequest
0 голосов
/ 12 мая 2018

Итак, у меня есть эта часть кода.

#pragma omp parallel for num_threads(4)
for (it = 0; it < itime; it++){
  for (i = 0; i < N; i++){
   do something1..
   for (j = 0; j < N; j++){
   do something2..
   }
  }
  do something3..
 }

Цикл for со счетчиком it повторяется 20 раз (0-19). Значение N не имеет значения в данный момент. Что происходит, так это то, что итерации «распределены» по 4 потокам.

thread #0 gets [0,1,2,3,4]
thread #1 gets [5,6,7,8,9]
thread #2 gets [10,11,12,13,14]
thread #3 gets [15,16,17,18,19]

Все, что я хочу сделать, это распределить итерации в моем собственном порядке, например: thread #0 [0,4,8,10,16] и т.д ...

Есть ли способ, которым я могу добиться этого с помощью openmp?

1 Ответ

0 голосов
/ 12 мая 2018

Это простое решение.

int numbers[] = { 0,4,8,10,16,1,2,3,5,6,7,9,11,12,13,14,15,17,18,19 };//define as u wish
#pragma omp parallel for num_threads(4)
for (int it = 0; it < 20; it++) {
        //cout <<"Thread "<< omp_get_thread_num() << " gets :" << numbers[it] << endl;
        int num = numbers[it];//use this instead of "it"
}

Возможно, это не лучшее решение.

...