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 구차니