Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1006393
  • 博文数量: 96
  • 博客积分: 1553
  • 博客等级: 上尉
  • 技术积分: 1871
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-25 14:50
个人简介

专注点,细心点,耐心点 知行合一

文章分类

全部博文(96)

文章存档

2018年(1)

2014年(4)

2013年(31)

2012年(56)

2011年(4)

分类: C/C++

2012-12-20 00:11:22

export set OMP_NUM_THREADS=3
编译:gcc -std=c99 -fopenmp openmp-test.c -Dsche

#include
#include
#include
#include
#include
#include
#include
#include

int main(int argc, char* argv[]) 
{
        setenv("OMP_NUM_THREADS", "10", 0);

        int nt = omp_get_num_threads();
        printf("threads %d\n", nt);

#ifdef normal
#pragma omp parallel for
        for(int i = 0; i < 10; ++i)
        {
                int id = omp_get_thread_num();
                printf( "hello world %d, id %d\n", i, id); 
        }
        return 0;
#endif

#ifdef pri
        int x = 100;
#pragma omp parallel for firstprivate(x) 
        for(int i = 0; i < 10; ++i)
        {
                x+=i;
                printf("x = %d\n", x);
        }
        printf("last x = %d\n", x);
        return 0;
#endif

#ifdef lastpri
        int x = 100;
#pragma omp parallel for firstprivate(x) lastprivate(x)
        for(int i = 0; i < 10; ++i)
        {
                x+=i;
                printf("x = %d\n", x);
        }
        printf("last x = %d\n", x);
        return 0;
#endif

#ifdef critical
        int x = 100;
        int sum = 0;
#pragma omp parallel for shared(sum)
        for(int i = 0; i < 5; ++i)
        {
#pragma omp critical
                sum += i*i;
        }
        printf("sum = %d\n", sum);
        return 0;
#endif

#ifdef critical
        int x = 100;
        int sum = 0;
#pragma omp parallel for shared(sum)
        for(int i = 0; i < 5; ++i)
        {
#pragma omp critical
                sum += i*i;
        }
        printf("sum = %d\n", sum);
        return 0;
#endif

#ifdef reduct
        int x = 100;
        int sum = 0;
#pragma omp parallel for reduction(+:sum)
        for(int i = 0; i < 5; ++i)
        {
                sum += i*i;
        }
        printf("sum = %d\n", sum);

        sum = 1;
#pragma omp parallel for reduction(*:sum)
        for(int i = 1; i < 5; ++i)
        {
                sum += i*i;
                printf("temp sum = %d\n", sum);
        }
        printf("sum = %d\n", sum);
        return 0;
#endif

#ifdef sche
        int sum = 0;
#pragma omp parallel for schedule(static, 4)
        for(int i = 0; i < 30; ++i)
        {
                sum += i*i;
                int id = omp_get_thread_num();
                printf( "i = %d, id = %d\n", i, id);
        }
        printf("sum = %d\n", sum);
        return 0;
#endif
}
阅读(1492) | 评论(0) | 转发(0) |
0

上一篇:libpcap介绍

下一篇:网络socket编程指南

给主人留下些什么吧!~~