티스토리 뷰

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

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함