现在的位置: 首页 > 综合 > 正文

开始学习openMP遇到的问题

2013年10月11日 ⁄ 综合 ⁄ 共 828字 ⁄ 字号 评论关闭

最近开始学习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());}
}

抱歉!评论已关闭.