2010-01-25 3 views
5

Соответствует ли параллелограмма циклам, содержащим функциональные вызовы, , или это гораздо более удобное распараллеливание циклов, которые выполняют основную операцию внутри.Параллельные циклы, содержащие вызов функции

, например, подходит ли это для директив распараллеливания, как указано ниже?

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) 
} 
} 
+1

btw- не забудьте принять ответ, если какой-либо из них каким-то образом решил вашу проблему. Вы можете принять ответ, отметив зеленый галочку рядом с ним. – Kos

ответ

1

Три бита информации должна быть известно:

  1. имеет значения порядка что вы выполняете foo?
  2. действительно ли foo() влияет на общее состояние, и если да, то соответствующая блокировка?
  3. Как долго цикл выполняется без openmp?

Если у вас есть задача, которая занимает много времени - несколько секунд или более - и ее можно разбить на независимые части (иногда путем рефакторинга, например, путем разделения на задания и сбора результатов для каждой работы перед объединением), тогда его можно попытаться распараллелить.

Профиль!

0

Ответы на такие вопросы можно найти в издании MIT Press Book, используя OpenMP, который был написан некоторыми людьми, которые разработали спецификации OpenMP.

Дополнительную информацию вы можете найти на сайте openmp.org, включая форум с экспертами OpenMP. http://openmp.org/

 Смежные вопросы

  • Нет связанных вопросов^_^