openMP实验总结报告43845.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《openMP实验总结报告43845.pdf》由会员分享,可在线阅读,更多相关《openMP实验总结报告43845.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、openMP 实验报告 目录 openMP 实验报告.错误!未定义书签。OpenMP 简介.错误!未定义书签。实验一.错误!未定义书签。实验二.错误!未定义书签。实验三.错误!未定义书签。实验四.错误!未定义书签。实验五.错误!未定义书签。实验六.错误!未定义书签。实验七.错误!未定义书签。实验八.错误!未定义书签。实验总结.错误!未定义书签。在学习了 MPI 之后,我们又继续学习了有关 openMP 的并行运算,通过老师的细致讲解,我们对 openMP 有了一个初步的了解:OpenMP 简介 OpenMP 是一种用于共享内存并行系统的多线程程序设计的库(Compiler Directive)
2、,特别适合于多核 CPU 上的并行程序开发设计。它支持的语言包括:C语言、C+、Fortran;不过,用以上这些语言进行程序开发时,并非需要特别关注的地方,因为现如今的大多数编译器已经支持了 OpenMP,例如:Sun Compiler,GNU Compiler、Intel Compiler、Visual Studio 等等。程序员在编程时,只需要在特定的源代码片段的前面加入 OpenMP 专用的#pargma omp 预编译指令,就可以“通知”编译器将该段程序自动进行并行化处理,并且在必要的时候加入线程同步及通信机制。当编译器选择忽略#pargma omp预处理指令时,或者编译器不支持 Op
3、enMP 时,程序又退化为一般的通用串行程序,此时,代码依然可以正常运作,只是不能利用多线程和多核 CPU 来加速程序的执行而已。OpenMP 使得程序员可以把更多的精力投入到并行算法本身,而非其具体实现细节。对基于数据分集的多线程程序设计,它是一个很好的选择。同时,使用OpenMP 也提供了更强的灵活性,可以较容易的适应不同的并行系统配置。线程粒度和负载平衡等是传统多线程程序设计中的难题,然而,在 OpenMP 中,OpenMP库从程序员手中接管了部分这两方面的工作,从而使得程序员可以更加专注于具体的算法本身,而非如何编程使得代码在 CPU 负载平衡和线程粒度方面做出平衡。但是,作为高层抽象
4、,OpenMP 并不适合需要复杂的线程间同步和互斥的场合。OpenMP 的另一个缺点是不能在非共享内存系统(如计算机集群)上使用。在这样的系统上,MPI 使用较多。实验步骤:通过编写了一些程序,验证了关于 openMP 的一些简单的性质。实验一 代码:#include#include#include int main(int argc,char*argv)int id,numb;omp_set_num_threads(3);#pragma omp parallel private(id,numb)id=omp_get_thread_num();numb=omp_get_num_threads(
5、);printf(I am thread%d out of%d n,id,numb);system(pause);return 0;实验结果:可以看到,因为三个进程同步执行,所以输出顺序是乱序的,就是表示运行优先级相同。当把进程数改成 10 的时候,得到下面的结果:与上面的到的结论(并行并行运算)相同。实验二 代码:#include#include#include int main(int argc,char*argv)int id;omp_set_num_threads(2);#pragma omp parallel printf(what will you seen);#pragma om
6、p for for(int i=1;i=5;+i)printf(i=%d of%dn,i,omp_get_thread_num();printf(How many answersn);system(pause);return 0;实验运行结果:可以看到,在设置进程为 2 的情况之下,运算(计算规模)被等可能的分配给各个进程。实验三 代码:#include#include#include int main()#pragma omp parallel sections 实验四 代码:#include#include#include int main()#pragma omp parallel fo
7、r(int i=0;i 100;+i)std:cout i +std:endl;#pragma omp barrier for(int j=0;j 10;+j)std:cout j -std:endl;system(pause);return 0;运行结果:结果分析:在语句#pragma omp barrier 的作用下,只有当上面所有的进程计算工作全部完成之后,才会继续barrier之后的工作。实验五 代码:#include#include#include#include using namespace std;int main()int sum=0;cout Before:sum endl
8、;#pragma omp parallel for for(int i=0;i 100;i+)#pragma omp critical(a)sum+=i;sum+=i*2;cout After:sum endl;system(pause);return 0;运行结果:结果分析:CRITICAL 指令指定一块同一时间只能被一条线程执行的代码区域 各个线程还是并行执行 for 里面的语句,但当你们执行到 critical 里面时,要注意有没有其他线程正在里面执行,如果有的话,要等其他线程执行完再进去执行。实验六 代码:#include#include#include#include using n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- openMP 实验 总结报告 43845
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内