심심해서 만들어 보는 중인 openMP 예제
처음에는 for 루프로 결과값을 thread safe하게 했는데 퍼포먼스 저하가 생길것 같아서
private 변수를 쓰레드별로 만들어서 계산후 마지막에 합치는 식으로 개선해 봄
음.. 다음번은 어떻게 개선해볼까나? ㅋ
            
                    
                    
처음에는 for 루프로 결과값을 thread safe하게 했는데 퍼포먼스 저하가 생길것 같아서
private 변수를 쓰레드별로 만들어서 계산후 마지막에 합치는 식으로 개선해 봄
음.. 다음번은 어떻게 개선해볼까나? ㅋ
#include "omp.h"
#define BUFFLEN 4096
void thread()
{
        int idx;
        int arr[BUFFLEN];
        int res = 0;
#pragma omp parallel
{
        #pragma omp for
        for(idx = 0; idx < BUFFLEN; idx++)
        {
                arr[idx] = idx;
        }
        #pragma omp for
        for(idx = 0; idx < BUFFLEN; idx++)
        {
                #pragma omp critical
                {
                        res += arr[idx];
                }
//              printf("%d %d\n",idx, res);
        }
}
        printf("res = %d\n",res);
}
int main(int argc, const char *argv[])
{
        thread();
        return 0;
}#include "omp.h"
#define BUFFLEN 4096
#define NUMTHREAD 4
void thread()
{
        int idx;
        int arr[BUFFLEN];
        int res = 0;
        int mid[NUMTHREAD]; // thread num - next version need to malloc
#pragma omp parallel
{
        // initialize
        #pragma omp for
        for(idx = 0; idx < BUFFLEN; idx++)
                arr[idx] = idx;
        #pragma omp for
        for(idx = 0; idx < NUMTHREAD; idx++)
                mid[idx] = 0;
        #pragma omp for
        for(idx = 0; idx < BUFFLEN; idx++)
        {
                int tid = omp_get_thread_num();
                mid[tid] += arr[idx];
//              printf("%d %d\n",idx, res);
        }
        #pragma omp single
        for(idx = 0; idx < NUMTHREAD; idx++)
                res += mid[idx];
}
        printf("res = %d\n",res);
}
int main(int argc, const char *argv[])
{
        thread();
        return 0;
}'Programming > openMP' 카테고리의 다른 글
| openMP parallel default (0) | 2013.11.18 | 
|---|---|
| openMP gnu implement (0) | 2013.11.11 | 
| openMP로 구현한 야매 sum() (0) | 2013.09.25 | 
| openmp 제한자(?) (0) | 2013.09.20 | 
| openMP runtime 함수 및 환경변수 (0) | 2013.03.16 | 






