티스토리 뷰
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
int main(int argc, char** argv)
{
char prompt[][11] = {"ordinary", "gcc_atomic", "critical", "atomic"};
int select_item;
if (argc < 2)
return 0;
select_item = atoi(argv[1]);
int shared_value = 0;
double t = omp_get_wtime();
#pragma omp parallel num_threads(16)
{
int i;
if(select_item == 0) // ordinary
{
#pragma omp parallel for shared(shared_value)
for( i = 0; i < 10000 ; i++)
shared_value++;
}
else if(select_item == 1) //gcc_atomic
{
for( i = 0; i < 10000 ; i++)
__sync_fetch_and_add(&shared_value, 1);
}
else if(select_item == 2) //critical
{
#pragma omp parallel for
for(i = 0; i < 10000 ; i++)
{
#pragma omp critical
{
shared_value++;
}
}
}
else if(select_item == 3) //omp_atomic
{
#pragma omp parallel for
for(i = 0; i < 10000 ; i++)
{
#pragma omp atomic
shared_value++;
}
}
}
t = omp_get_wtime() - t;
printf("[%s] shared_value : %d / %lf elapsed\n",prompt[select_item],shared_value, t);
}
' la fermata, 개발 > OpenMP' 카테고리의 다른 글
가위바위보 게임 (0) | 2019.02.19 |
---|---|
병렬 계수 정렬 (parallel counting sort) with OpenMP barrier / atomic (0) | 2019.02.19 |
행렬 곱셈 max_active_levels / set_nested (0) | 2019.02.19 |
행렬 곱셈 nest loop 2가지 사용해보기 (0) | 2019.02.19 |
병렬 합 / shared, atomic, reduction 사용해보기 (0) | 2019.02.19 |