티스토리 뷰
#include <stdio.h>
#include <omp.h>
#include "timers.h"
#define N 10
void share_aSum(int a[N])
{
int i, sum = 0;
timer_start(1);
#pragma omp parallel for shared(sum)
for(i = 0; i < N ; i++)
{
sum += a[i];
}
timer_stop(1);
printf("share_aSum : %lfsec / sum : %d\n",timer_read(1),sum);
}
void share_atomic_aSum(int a[N])
{
int i, sum = 0;
timer_start(2);
#pragma omp parallel for shared(sum)
for(i = 0; i < N ; i++)
{
__sync_fetch_and_add(&sum, i);
}
timer_stop(2);
printf("share_atomic_aSum : %lfsec / sum : %d\n",timer_read(2),sum);
}
void reduction_aSum(int a[N])
{
int i, sum = 0;
timer_start(3);
#pragma omp parallel for reduction(+ : sum)
for(i = 0; i < N; i++)
{
sum += i;
}
timer_stop(3);
printf("reduction_aSum : %lfsec / sum : %d\n",timer_read(3), sum);
}
void aInit(int a[N])
{
int i;
for(i = 0; i < N ; i++)
a[i] = i+1;
}
int main(int argc, char** argv)
{
if(argc < 2)
return 0;
int a[N];
aInit(a);
share_aSum(a);
share_atomic_aSum(a);
reduction_aSum(a);
return 0;
}
' la fermata, 개발 > OpenMP' 카테고리의 다른 글
행렬 곱셈 max_active_levels / set_nested (0) | 2019.02.19 |
---|---|
행렬 곱셈 nest loop 2가지 사용해보기 (0) | 2019.02.19 |
shared, private 비교 (0) | 2019.02.19 |
스케쥴 사용하기 (static, dynamic, guided) (0) | 2019.02.19 |
행렬 곱셈 parallel / parallel for (0) | 2019.02.19 |