并行计算方法:MPI框架资料及我的数值实验报告
23 JANUARY 2014大二下的时候选了数学系的并行计算方法课程,这里将相关的一些资料以及我做的任务、“考试”的报告放上来,希望可以供他人参考。我选择的任务是使用共轭梯度法解线性方程组,最后的“考试”题目是使用共轭梯度法来解决一个$-\Delta u=f$的二维泊松方程。
这门课我们用的是MPI这个框架,相关的参考书有:张林波的《并行计算导论》,Michael J.Quinn的《MPI与OpenMP并行程序设计(C语言版)》,这两本书都不是很好买,前面那本书似乎已经绝版了,不过想要获取的话是有办法的。前面那本书比较是“导论”,讲得比较粗,后面那本书是以任务为导向的,一边介绍新的函数一边编程,即学即用,这也是外国这类语言教材的特点,我比较喜欢这种方式。在线的资料也有很多,网上关于MPI中的每个函数都有资料,这里推荐中科大网站上的MPI资料,讲得比较详细,举的例子也很好。老师上课的时候将“张林波在中科院暑期班”的课件直接拿过来用,不知道公开放在这里是否合适,就不上传了,需要的可以再联系我。
并行计算除了MPI还有很多其它框架。实现并行计算也不一定要通过自己编写C语言程序来做,像Matlab也是有并行计算的模块的,似乎计算机系的并行计算课程讲的就是matlab中的并行计算。毕竟这是数学系的数值课程,主要还是自己编程的内容。
选这门课的一共大约20人,实际大约有15人经常到课。据老师的说法,前一年有几个人没有完成“考试”的题目,90分以上大约只有一两个。我最后这门课得了90分,按照往年的情况应该是比较高的。调试这几个程序还是很辛苦的,花了不少功夫。下面将我自己的报告和源程序一起放上来。预条件共轭梯度法矩阵选择我找个时间写一下,是借用网上的某个资料的方法,现在找不到了。各个文件的说明:
presentation.pdf:上课演示所用PPT
report.pdf:实验报告
bcg.c:串行Block CG源程序
cg.in: 串行CG、并行CG、预条件并行CG输入文件
mpi_cg.c: 并行CG源程序
mpi_pcg.c: 预条件并行CG源程序
bcg.in: 串行Block CG输入文件
cg.c: 串行CG源程序
mpi_poisson.c:一维泊松问题并行CG求解
mpi_poisson_2d.c:二维泊松问题并行CG求解
poisson.xlsx:一维泊松问题并行运行时间数据
poisson2d.xlsx:二维泊松问题并行运行时间数据
2019年1月更新:请见Github repo: poisson_mpi