#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