2013-05-12 5 views
1

"공유"가 openMP에서 무엇을하는지 명확하지 않습니다. spec은 "공유 할 하나 이상의 목록 항목을 작업별로 선언합니다 ..."라고 말하지만 그 점은 분명하지 않습니다. 예를 들어키워드 "공유"가 경쟁 조건을 방지합니까?

, 나는 다음과 같은 코드가있는 경우 : NUM1와

#pragma omp parallel for shared(num1) 
    for(i=0; i<m; i++) { 
     for(j=0; j < n; j++) { 
      if(myFunc(i,j) < 0) { 
       num1 += 256*u(i,j); 
      } 
     } 
    } 

윌이 정지 레이스 조건 및 루프에 대한이의 말에 정확한 결과를 제공? 그렇지 않다면 정확히 무엇을합니까?

답변

0

이것은 경쟁 조건을 중지합니까?

아니, 그것은 won't :

그 여러 스레드가 제대로

공유 부분은 똑같이 만들어 (예 : CRITICAL 섹션을 통해로) 공유 변수에 액세스 보장하는 프로그래머의 책임입니다 여러 스레드에서 볼 수있는 변수.

당신은 중요한 부분 또는 동기화 해에 대한 원자 액세스를 사용할 수 있지만, 경우에 당신은 더 나은 reduction 절을 사용하십시오 :

#pragma omp parallel for reduction(+:num1) 
+0

난 아직도 않습니다 어떤 공유하지 않습니다. 변수가 이미 여러 스레드에서 표시되지 않습니까? 그들은 메모리를 공유하지 않습니까? –

관련 문제