2016-09-29 7 views
1

내 프로그램의 병렬 처리 된 섹션에서 사용해야하는 일부 전역 변수가 있습니다.C에서 pragma omp 단축키

#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 for? privathread 부분 다음에 {? 마지막으로

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

은 좋은 방법이 C에서 큰 벡터와 함께 작동하도록하거나 내 프라 그마 OMP 내부의 malloc을 사용하고 privatethread 부분을 제거하는 것이 좋습니다 것입니다? (새 게시물에서이 엔딩 질문을하는 것이 더 좋은지 알려주십시오.)

답변

1

1. 아래 코드는 오류를 나타냅니다. 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 
} 

{대괄호를 #pragma omp privatethread.이 문은 모든 코드를 병렬로 실행하지 않으며 전역 범위 변수를 로컬로 만들어 스레드에 영구 저장합니다.