windows:
如何建立Openmp编程环境
OpenMP在Windows环境下比较容易实现,只要打开VS2008中的编译选项/openmp,设置一下环境变量OMP_NUM_THREADS就可以了。
一般是新建一个c++项目,以次选择Project -> (alt+f7)属性 -> 配置属性(configuration property) -> c/c++ -> 语言(Language),打开OpenMP支持;
设置环境变量:我的电脑 -> 属性 -> 高级 -> 环境变量,新建一个OMP_NUM_THREADS变量,值设为2,即为程序执行的线程数。
至于其它环境变量,在使用的时候我们再设置就可以了,所以暂时不考虑。这样,就可以进行OpenMP程序设计了。
测试例子1:
#include "omp.h"
int main(int argc, char* argv[])
{
#pragma omp parallel
for(;;)
{
int i = 0 ;
i++;
int y = i;
}
return 0;
}
Linux:
下载安装gcc4.2后,编译的时候加上-fopenmp参数即可。
gcc -fopenmp test_omp.c
g++ -fopenmp test_omp.cc
gfortran -fopenmp test_omp.f90(95)
“#pragma omp parallel”是一条OpenMP标准的语句,它的含义是让它后面的语句按照多线程来执行。需要注意的是每个线程都去做相同的事情。
[xuyc@sv168 openmp]$ gcc –fopenmp –o helloworld helloworld.c
[xuyc@sv168 openmp]$ OMP_NUM_THREADS=10
[xuyc@sv168 openmp]$ export OMP_NUM_THREADS
[xuyc@sv168 openmp]$ ./helloworld
Hello world!
Hello world!
Hello world!
Hello world!
OMP_NUM_THREADS=2 ./helloc
如果不定义OMP_NUM_THREADS,默认会等于CPU数量,在8核心的机器上,会打印出8行"Hello World".
例子1 helloworld.c
01 #include
//#include "omp.h" 如果用intel的icc 编译器,就要写上这行
02 int main( argc, argv)
03 int argc;
04 char **argv;
05 {
06 #pragma omp parallel
07 printf( "Hello world!/n" );
08 return 0;
09 }