我主要看MPI User's Guide inFortran和《高性能计算之并行编程技术——MPI并行程序设计》,两本书各有千秋,推荐从英文版入手。对于高级编程还要多自己琢磨,看更多的书。我感觉这两本学超级入门还行,稍微复杂点就不行了。
MPI,我学到了什么?
1、MPI编程分为对等模式和主从模式
对等模式:多进程(process,not thread)并列运行,通过Recv和Send来实现进程间的数据通信;
主从模式:主进程负责数据的I/O和广播(Bcast)、收集(Gather)或者归约(Reduce),一般这些已经满足常见要求。
组通信:包括散发、同步、全互换、组收集和广播、收集、归约等,组通信分为一对多、多对一、多对多等通信模式。
2、不连续数据通信
连续数据发送非常方便,两进程之间可以直接用Sendrecv。对于不连续的数据一般采用两种:派生数据类型和打包发送。这里主要讲派生类数据类型。
不连续数据通信是拓扑分块并行的基础。派生数据类型主要分为:连续复制类型、向量类型、索引类型、结构类型四种,其中MPI_Type_struct和MPI_Type_vector是非常实用的两种,在进行规则正方形拓扑分块时,向量类型十分有用;在不规则变量通信时,结构类型使通信加快,但程序写作要遵循一定格式。
3、理解MPI进程组、通信域、通信上下文之间的关系,为拓扑虚拟结构理解作准备
感觉用处不大,有感觉就行,有待以后有深入理解后补充。
4、拓扑结构(笛卡尔均匀分区)
可以看到之前的学习都比较有目的性,作为一个工具,没有必要面面俱到,那就将目的性彻底化,用笛卡尔分块完成拓扑并行编程。此后详细说明尝试过程。