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 |