openMP를 차근차근 보다 보니 으헉?!스러운 문제 발견
지금까지 private(a) 이런식으로 private 변수로 지정하지 않아도 잘만 돌아가고 있었다?!?!
엄밀하게는
이런식으로 a를 private 변수로 해주어야 하나
for문 특성(?)상 for문 변수는 독립적으로 돌아가기 때문에
기본값으로 private화 시킨다는 것 같은데..
pdf 문서중에 단 하나의 문서에서만 언급하고 있고
나머지에서는 전부 private() 해주고 있었는데.. 어느게 맞는걸까?
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 |
댓글을 달아 주세요
다녀갑니다 ^^
2013.12.12 21:52 [ ADDR : EDIT/ DEL : REPLY ]알차게 하루를 보내셔요~~
^^
2013.12.16 22:47 신고 [ ADDR : EDIT/ DEL ]
2017.12.11 17:21 [ ADDR : EDIT/ DEL : REPLY ]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:59 신고 [ ADDR : EDIT/ DEL ]일단 openMP를 통해서 프로세스 분리 함으로서 공유문제가 발생하고 동기화 문제도 생기니까
private()를 통해서 값을 분리하고
나중에 합쳐야 했던걸로 기억을 합니다.