Programming/openMP2013. 12. 12. 20:09
openMP를 차근차근 보다 보니 으헉?!스러운 문제 발견

int a;
#pragma omp parallel for
for(a = 0; a < 100; a++)
     printf("%d",a); 

일단 for loop의 변수인 a의 경우
개별 쓰레드 별로 변수를 가지고 있고 개별로 증가를 해야 하는데
지금까지 private(a) 이런식으로 private 변수로 지정하지 않아도 잘만 돌아가고 있었다?!?!

엄밀하게는
int a;
#pragma omp parallel for private(a)
for(a = 0; a < 100; a++)
     printf("%d",a);  

이런식으로 a를 private 변수로 해주어야 하나
for문 특성(?)상 for문 변수는 독립적으로 돌아가기 때문에
기본값으로 private화 시킨다는 것 같은데..

pdf 문서중에 단 하나의 문서에서만 언급하고 있고
나머지에서는 전부 private() 해주고 있었는데.. 어느게 맞는걸까? 

'Programming > openMP' 카테고리의 다른 글

openCV + openMP  (0) 2015.09.30
openMP affinity 관련..  (0) 2015.07.23
openMP parallel for private  (4) 2013.12.12
openMP private copyin copyprivate firstprivate lastprivate  (0) 2013.11.28
openMP reduction 절  (0) 2013.11.28
openMP atomic과 critical  (0) 2013.11.26
Posted by 구차니

댓글을 달아 주세요

  1. 다녀갑니다 ^^
    알차게 하루를 보내셔요~~

    2013.12.12 21:52 [ ADDR : EDIT/ DEL : REPLY ]
  2. 소리



    for (i=0; i<BLOCK_SIZE(id,p,n); i++)
    #pragma omp parallel for
    for (j=0; j<n; j++)
    a[i][j] = MIN(a[i][j],a[i][k]+tmp[j]);

    #pragma omp parallel for private(j)
    for (i=0; i<BLOCK_SIZE(id,p,n); i++)
    for (j=0; j<n; j++)
    a[i][j] = MIN(a[i][j],a[i][k]+tmp[j]);

    다음과 같이 이중 for문에서 private해줘야하는거 아닌가요?
    하나의 for문에서는 private을 해줄 필요가 없지 안나요?

    2017.12.11 17:21 [ ADDR : EDIT/ DEL : REPLY ]
    • 본지가 오래되서... 기억이 잘 안나지만..
      일단 openMP를 통해서 프로세스 분리 함으로서 공유문제가 발생하고 동기화 문제도 생기니까
      private()를 통해서 값을 분리하고
      나중에 합쳐야 했던걸로 기억을 합니다.

      2017.12.11 17:59 신고 [ ADDR : EDIT/ DEL ]