티스토리 뷰

#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);
}

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함