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) 으로 간단하게 동일한 방식을 이용해 처리할 수 있다.
[링크 : 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 |
