2016-09-29 3 views
1

У меня есть некоторые глобальные переменные, которые мне нужно использовать в параллельном разделе моей программы. Так что я написал это:pragma omp ярлыки в c

#define N 2000 
int x[N], matrix[N][N] 

int main(int argc, char **argv) 
... 
#pragma omp parallel 
{ 
    #pragma omp privatethread(x,matrix) 
    #pragma omp for 
    for(int k=0; k<100;++k) 
    /*some function to modify values of x and matrix differently 
    from run to run*/ 
    ... 
} 
... 

Является частью с #pragma эквивалентно:

... 
#pragma omp privatethread(x,matrix) parallel for 
... 

Есть ли разница между объявляя #pragma OMP параллельно затем #pragma OMP privatethread и объявив сначала #pragma omp privatethread, а затем #pragma omp parallel для? Должен ли я положить {после части privathread?

#pragma omp privatethread(x,matrix) 
{ //<-- here 
#pragma omp for 

Наконец, в том, что хороший способ работать с большими векторами в с или лучше использовать таНос внутри моей прагма OMP и удалить privatethread часть? (пожалуйста, дайте мне знать, если лучше, если я задам этот вопрос в новом сообщении)

ответ

1

1.The приведенный ниже код дает вам ошибку. Даже если вы удалите for.

... 
#pragma omp privatethread(x,matrix) parallel for 
... 

Декларация должна следовать этим синтаксисом

#pragma omp threadprivate (list) 

2.There никакой разницы между,

#pragma omp parallel 
{ 
    #pragma omp privatethread(list) 
    //CODE 
} 

и

#pragma omp privatethread(list) 
#pragma omp parallel 
{ 
    //CODE 
} 

Как вы можете видеть, вы не» t положить {скобки после #pragma omp privatethread. Это утверждение не запускает какой-либо код параллельно, оно просто делает глобальную переменную области локальной и постоянной для потока.

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