Соответствует ли параллелограмма циклам, содержащим функциональные вызовы, , или это гораздо более удобное распараллеливание циклов, которые выполняют основную операцию внутри.Параллельные циклы, содержащие вызов функции
, например, подходит ли это для директив распараллеливания, как указано ниже?
main(){
..
#omp paralel ..
for (i=0;i<100;i++){
a[i] = foo(&datatype , ...);
...
}
..
}
int foo(datatype *a,...){
//doing complex operations here
//calling other functions etc.
}
Спасибо Будет Ричард и Phkahler, , что комментарии были полезны, и я буду иметь глубокий взгляд на книги rchrd предложил. Но до конца дня от меня требуется сделать существующий код C (действительно большой цикл, который находится наверху программы), распараллеленный с помощью openMP, если это возможно.
В этот момент мне нужна помощь в том, чтобы сделать хотя бы некоторые части цикла параллельными. Чтобы сделать вещи простыми, а не parellelezing содержимого всего контура, как я могу сделать только часть его работу параллельно
for(i to N){
work1() --(serial)
work2() --(serial)
Work3() --(PARALLEL)
work4() --(serial)
}
//does it make sense adding critical sections except work3
#omp parallel for private(Ptr)
for(i to N){
#omp single
{
work1() --(serial)
work2() --(serial)
}
Work3(Ptr) --(PARALLEL)
#omp single
{
work4() --(serial)
}
}
btw- не забудьте принять ответ, если какой-либо из них каким-то образом решил вашу проблему. Вы можете принять ответ, отметив зеленый галочку рядом с ним. – Kos