Я новый программист в OpenMP. Я хочу обрабатывать свои данные параллельно и использую OpenMP. Как узнать, какой элемент был обработан в цикле for, когда я использую его с OpenMP параллельно? Например:
#pragma omp parallel for
for(int i = 0; i < 10; i++){
myFunc(i);
}
Я не хочу отправлять 1, 3, 6 вместе или 2 4 7 вместе. Могу ли я узнать, какие номера отправляются вместе?
Вы должны прочитать о размере чанка, так как, возможно, это может помочь вам Примеры планирования
Например, если вы будете хорошо брать 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 продолжения числа, как это:
И так до тех пор, пока нет больше данных. Если вы хотите другое планирование, взгляните на ссылку в начале поста. Но обратите внимание, что некоторые из них могут идти с дополнительными накладными расходами.
Других решений пока нет …