Programming/openMP2013. 11. 28. 12:29
private는 지역변수로 개별 쓰레드에서만 유효한 변수로 선언된다.
물론 shared memory 구조를 채택한 openMP에서는
이러한 독립 변수를 메인 쓰레드의 변수와 동기화 하여 사용하도록 하기에
동기화를 해야할 필요성이 생기게 된다.


private는 초기화 하지 않고 쓰레드별 독립 변수로 만들어주고
firstprivate는 메인 쓰레드의 값을 초기화 값으로  쓰레드별 독립 변수로 만들어주고 
lastprivate는 쓰레드 종료후 동기화시 가장 마지막 으로 종료된 쓰레드의 값을 메인 쓰레드로 복사한다.
copyin은 threadprivate 사용시 마스터 쓰레드의 값을 모든 쓰레드로 동기화 하는데 사용한다.


lastprivate는 크게 의미가 없어 보이기도 하는데..
디버깅 용도로 가장 부하가 많이 걸려 늦게 끝나는 쓰레드 번호를 리턴하는데 쓰면 될 거 같기도 하다.

그리고 copyin은 공유된 변수가 하위로 전파되는 거니
copyin이 사용되면 연산을 전부 무효화 하고 다시 계산 해야 할지도 모르겠다. 

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

openMP affinity 관련..  (0) 2015.07.23
openMP parallel for private  (4) 2013.12.12
openMP reduction 절  (0) 2013.11.28
openMP atomic과 critical  (0) 2013.11.26
openMP single 과 master의 차이점  (0) 2013.11.26
Posted by 구차니
Programming/openMP2013. 11. 28. 12:08
reduction은 수동으로 병합할 변수를 자동으로 합쳐주는 역활을 한다.

[링크 : http://gcc.gnu.org/.../Implementing-REDUCTION-clause.html#Implementing-REDUCTION-clause]


예전에 sum() 병렬 처리 함수의 경우
atomic이나 critical을 사용해 데이터 동기화를 맞추었지만 성능저하가 있었고
2013/09/25 - [Programming/openMP] - openMP로 구현한 야매 sum()

이를 개선하기 위해 계산후
마지막에 마스터 쓰레드에서 합치도록 했는데
2013/09/29 - [Programming/openMP] - openMP example 

이런 마스터 쓰레드 합침을 reduction(+:sum) 으로 간단하게 동일한 방식을 이용해 처리할 수 있다.


 
$ cat test.c
#include "omp.h"

#define BUFFLEN 4096
#define NUMTHREAD 4

void thread()
{
        int idx;
        int arr[BUFFLEN];
        int res = 0;

#pragma omp parallel
{
        // initialize
        #pragma omp for
        for(idx = 0; idx < BUFFLEN; idx++)
                arr[idx] = idx;

        #pragma omp for reduction(+:res)
        for(idx = 0; idx < BUFFLEN; idx++)
        {
                int tid = omp_get_thread_num();
                res += arr[idx];
        }
}
        printf("res = %d\n",res);
}

int main(int argc, const char *argv[])
{
        thread();
        return 0;
}

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

openMP parallel for private  (4) 2013.12.12
openMP private copyin copyprivate firstprivate lastprivate  (0) 2013.11.28
openMP atomic과 critical  (0) 2013.11.26
openMP single 과 master의 차이점  (0) 2013.11.26
openMP parallel default  (0) 2013.11.18
Posted by 구차니
연말 할인은 한번도 안사본줄 알았는데..
저번 컴플릿 팩을 지른게 이런 할인이었던 건가!?!? 웬지 익숙해!!!!


Posted by 구차니



'게임 > 툼 레이더 시리즈' 카테고리의 다른 글

툼 레이더 리부트 정리 귀차나 -_-  (0) 2013.12.09
툼 레이더 리부트 - 7  (0) 2013.11.28
툼 레이더 리부트 - 6  (0) 2013.11.28
툼 레이더 리부트 - 5  (0) 2013.11.28
툼 레이더 리부트 - 4  (0) 2013.11.28
Posted by 구차니




Posted by 구차니




'게임 > 툼 레이더 시리즈' 카테고리의 다른 글

툼 레이더 리부트 - 8 / 엔딩 / 에필로그  (0) 2013.11.28
툼 레이더 리부트 - 7  (0) 2013.11.28
툼 레이더 리부트 - 5  (0) 2013.11.28
툼 레이더 리부트 - 4  (0) 2013.11.28
툼 레이더 리부트 - 3  (0) 2013.11.28
Posted by 구차니



'게임 > 툼 레이더 시리즈' 카테고리의 다른 글

툼 레이더 리부트 - 7  (0) 2013.11.28
툼 레이더 리부트 - 6  (0) 2013.11.28
툼 레이더 리부트 - 4  (0) 2013.11.28
툼 레이더 리부트 - 3  (0) 2013.11.28
툼 레이더 리부트 - 2  (0) 2013.11.28
Posted by 구차니



'게임 > 툼 레이더 시리즈' 카테고리의 다른 글

툼 레이더 리부트 - 6  (0) 2013.11.28
툼 레이더 리부트 - 5  (0) 2013.11.28
툼 레이더 리부트 - 3  (0) 2013.11.28
툼 레이더 리부트 - 2  (0) 2013.11.28
툼 레이더 리부트 - 오프닝  (0) 2013.11.28
Posted by 구차니



'게임 > 툼 레이더 시리즈' 카테고리의 다른 글

툼 레이더 리부트 - 5  (0) 2013.11.28
툼 레이더 리부트 - 4  (0) 2013.11.28
툼 레이더 리부트 - 2  (0) 2013.11.28
툼 레이더 리부트 - 오프닝  (0) 2013.11.28
툼 레이터 리부트 - 챕터명  (0) 2013.11.28
Posted by 구차니



Posted by 구차니