openmp学习笔记

来源:互联网 发布:oee计算软件 编辑:程序博客网 时间:2024/05/22 21:11



#pragma omp parallel 仅在您指定了 -fopenmp 编译器选项后才会发挥作用。在编译期间,GCC 会根据硬件和操作系统配置在运行时生成代码,创建尽可能多的线程。每个线程的起始例程为代码块中位于指令之后的代码。这种行为是 隐式的并行化,而 OpenMP 本质上由一组功能强大的编译指示组成,帮您省去了编写大量样本文件的工作。

用gcc编译时添加-fopenmp选项(cite from http://www.ibm.com/developerworks/cn/aix/library/au-aix-openmp-framework/#first_program)

如gcc -o test 1.c -fopenmp

如果是c++把gcc改为g++即可

#include<omp.h>#include<iostream>int main(){    #pragma omp parallel num_threads(5)    {        std::cout<<"Hello world!\n";    }}



#include<omp.h>#include<iostream>int main(){    omp_set_num_threads(5);    #pragma omp parallel    {        std::cout<<"Hello world!\n";    }}
以上两种设置线程个数的方法等效

#include<stdio.h>int main(int argc,char *argv[]){        double sum;        double a[256],b[256];        int status;        int n=256;        int i;        for(i=0;i<n;i++){            a[i]=i*0.5;            b[i]=i*2.0;        }        sum=0;        #pragma omp parallel for reduction(+:sum)        for(i=1;i<=n;i++){            sum=sum+a[i]*b[i];        }        printf("sum=%f \n",sum);}

用#pragma omp for reduction(+:sum)而不是#pragma omp parallel for reduction(+:sum)便出现

reduction variable ‘sum’ is private in outer context

原创粉丝点击