2015-10-14 3 views
0

До сих пор я использовал OpenMP для параллелизации для цикла на C++. Однако мне интересно, могу ли я выполнять другие строки кодов, которые не являются циклами в Parallel.OpenMP-распараллеливание цикла non-for

void minimization(int *a, int *x) { 
// this part of the code is dependent of other library. 
} 

void checkForNaN(int *a){ 
// check nan points 
} 

int main() { 
    // read data 
    minimization (a,b); 
    checkForNaN(x); 
} 

Рассмотрим пример фрагмента кода выше, в результате чего minimization(,) и checkForNaN() независимы что результаты либо одного не влияет на другой раз. Можно ли его распараллелить?

Я имею в виду что-то вроде этого:

int main() { 
     // read data 
#pragma omp parallel 
    { 
     minimization (a,b); 
     checkForNaN(x); 
    } 
} 

ли это выглядит правильно?

ответ

4

Это то, что OMP Разделы используется для :)

int main() { 
    #pragma omp parallel sections 
    { 
     #pragma omp section 
     { 
      minimization(a,b); 
     } 

     #pragma omp section 
     { 
      checkForNaN(x); 
     } 
    } 
} 
+1

Вы можете также использовать задачи OpenMP для достижения той же цели (задачи OMP #pragma). Существует хорошая дискуссия о различиях между задачами и разделами в http://stackoverflow.com/questions/13788638/difference-between-section-and-task-openmp – Harald

1

Нет, это не выглядит правильно. он выполнит minimization(a,b); и checkForNaN(x); во всех ваших темах.

Вместо этого будет делать распараллеливание:

int main() { 
    // read data 
    #pragma omp parallel sections 
    { 
    #pragma omp section 
    { 
     minimization (a,b); 
    } 
    #pragma omp section 
    { 
     checkForNaN(x); 
    } 
    } 
} 
+0

Я понятия не имею, почему вы продолжаете публиковать тот же самый ответ, что и меня около 1 минуты позже в сообщениях сегодня: p ... – Samidamaru

+0

Этот ответ не является точным. Добавлен код @kcc__. – MikeCAT

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