какой элемент отправляется OpenMP параллельно?

Я новый программист в OpenMP. Я хочу обрабатывать свои данные параллельно и использую OpenMP. Как узнать, какой элемент был обработан в цикле for, когда я использую его с OpenMP параллельно? Например:

#pragma omp parallel for
for(int i = 0; i < 10; i++){
myFunc(i);
}

Я не хочу отправлять 1, 3, 6 вместе или 2 4 7 вместе. Могу ли я узнать, какие номера отправляются вместе?

1

Решение

Вы должны прочитать о размере чанка, так как, возможно, это может помочь вам Примеры планирования

Например, если вы будете хорошо брать 1,2, 3,4 и 5,6 и так далее, вы можете сделать это просто с помощью этого кода:

#pragma omp parallel for schedule(static, 2)
for(int i = 0; i < 10; i++){
myFunc(i);
}

это schedule(static, 2) означает, что каждый поток будет принимать 2 продолжения числа, как это:

  • Нить 1: 1,2
  • Нить 2: 3,4
  • Нить 3: 5,6

И так до тех пор, пока нет больше данных. Если вы хотите другое планирование, взгляните на ссылку в начале поста. Но обратите внимание, что некоторые из них могут идти с дополнительными накладными расходами.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]