Programming/openMP2013. 11. 11. 21:31
pdf로 보다가 이제야 깨달은 엄청난 내용 -ㅁ-!
어떻게 보면 매우 당연하고 간단한 내용이지만
libgomp에서의 private 구현의 scope를 이용하여
block의 시작부분에서 동일한 이름의 변수를 생성하여 "복제"를 함으로 firstprivate 변수를 생성하고
block의 끝부분에서 바깥 scope의 변수로 값을 복제함으로서 lastprivate를 구현 변수를 동기화 한다.

다르게 보면.. private를 통한 shared memory 구조는
메모리 copy를 통한 함수범위 변수로 private를 구현한거라고 보면 될 듯하다.

4.8 Implementing FIRSTPRIVATE LASTPRIVATE COPYIN and COPYPRIVATE clauses

This seems simple enough for PARALLEL blocks. Create a private struct for communicating between the parent and subfunction. In the parent, copy in values for scalar and "small" structs; copy in addresses for others TREE_ADDRESSABLE types. In the subfunction, copy the value into the local variable.

It is not clear what to do with bare FOR or SECTION blocks. The only thing I can figure is that we do something like:

     #pragma omp for firstprivate(x) lastprivate(y)
     for (int i = 0; i < n; ++i)
       body;
which becomes

     {
       int x = x, y;
     
       // for stuff
     
       if (i == n)
         y = y;
     }
where the "x=x" and "y=y" assignments actually have different uids for the two variables, i.e. not something you could write directly in C. Presumably this only makes sense if the "outer" x and y are global variables.

COPYPRIVATE would work the same way, except the structure broadcast would have to happen via SINGLE machinery instead.
 
[링크 : http://gcc.gnu.org/./Implementing-FIRSTPRIVATE-LASTPRIVATE-COPYIN-and-COPYPRIVATE-clauses.html]

[링크 : http://gcc.gnu.org/onlinedocs/libgomp/]
[링크 : http://gcc.gnu.org/onlinedocs/libgomp/The-libgomp-ABI.html#The-libgomp-ABI]

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

openMP single 과 master의 차이점  (0) 2013.11.26
openMP parallel default  (0) 2013.11.18
openMP example  (0) 2013.09.29
openMP로 구현한 야매 sum()  (0) 2013.09.25
openmp 제한자(?)  (0) 2013.09.20
Posted by 구차니