最近开始学习openMP,OpenMP提供对于并行描述的高层抽象降低了并行编程的难度和复杂度,这样程序员可以把更多的精力投入到并行算法本身,而非其具体实现细节。
openMP经常与MPI同时提到,这两个的区别在于openMP针对单机上的多核环境,而MPI主要目的是协调主机间的并行运算,两者抽象的粒度不同。
初次写openMP程序,会遇到很多问题,现在我慢慢的整理汇总自己遇到的问题,给自己做个笔记也可以帮助其他入门人员尽早解决问题。
开发环境linux ubuntu,编译环境gcc
1. openMP自带一些库函数,常用的有omp_get_num_threads, omp_get_thread_num, 这些库函数存在于 omp.h中
在代码开始处添加 #include<omp.h> 即可使用这些库函数
2.使用gcc编译openMP文件
gcc -o XXX YYY.c -fopenmp
gcc -o 选项 将输入的文件yyy.c编译成一个名为xxx的二进制可执行程序
-fopen 参数用来识别openmp文件
3.运行生成的可执行程序 使用命令 ./ ,跟运行shell脚本一样
4.使用#pragma omp parall sections 可以指定不同的部分运行于不同的核,每套sections占用全部的核去分配
eg.
#pragma omp parallel sections
{
#pragma omp section
{printf("1 threadID=%d\n", omp_get_thread_num());}
#pragma omp section
{printf("2 threadID=%d\n", omp_get_thread_num());}
#pragma omp section
{printf("3 threadID=%d\n", omp_get_thread_num());}
#pragma omp section
{printf("4 threadID=%d\n", omp_get_thread_num());}
}