MPI并行编程:C/C++/Fortran实战指南

需积分: 36 5 下载量 42 浏览量 更新于2024-07-18 收藏 1.76MB PDF 举报
"这篇文档介绍了MPI(Message Passing Interface)在C、C++和Fortran语言中的使用,重点在于并行计算的概念和实践。" MPI(Message Passing Interface)是一种用于并行计算的接口标准,它允许程序员在分布式内存系统中编写并行程序。MPI不是一种编程语言,而是一个库,它提供了C、C++和Fortran的绑定,使得程序员可以通过调用预定义的函数来进行进程间通信。 在并行计算中,"并行"意味着多个线程或进程同时工作,以加速任务执行或处理大规模问题。创建并行程序通常涉及将大问题分解为独立的子任务,然后将这些子任务分配给不同的处理器。数据可以是共享的,即多个线程都能访问,也可以是本地的,仅对单个进程可见。 并行结构主要分为三类:分布存储、共享存储和混合存储。分布存储中,每个处理器有自己的本地存储,需要显式通信来交换数据;共享存储则允许处理器直接访问彼此的内存;混合存储结合了两者的特点。 并行编程模型主要有两种:消息传递和共享存储。在消息传递模型中,如MPI,进程通过发送和接收消息来协调工作。MPI提供了丰富的函数集合,包括点对点通信和群集通信,以及衍生数据类型的处理。在C/C++中,这些函数定义在`mpi.h`头文件中;在Fortran中,使用`mpif.h`或Fortran 90以后的模板`mpi`。 MPI的实现有多种,如MPICH和OpenMPI,它们都是开源的实现,提供了高效、可靠的并行通信功能。MPI库的使用对于开发高效的并行程序至关重要,尤其在科学计算和大数据处理领域。 通过学习和掌握MPI,开发者可以有效地利用多处理器系统,编写出高效、可扩展的并行应用程序,以应对复杂计算任务,显著提高计算效率。在实际编程过程中,理解并行计算的基本概念,熟悉MPI的六种基本函数,以及如何创建和管理消息通信域,是实现有效并行计算的关键。
2013-07-05 上传
此文档描述了Fortran上mpi的使用。 Fortran語言 1 MPI 平行計算程式設計 1 第一章 前言 5 1.1 MPI 平行計算軟體 6 1.2 國家高速網路與計算中心的平行計算環境 7 1.3 在IBM 電腦系統上如何使用MPI 8 1.3.1 IBM 電腦系統的MPI Fortran程式編譯指令 8 1.3.2 IBM 電腦系統的 Job command file 8 1.3.3 IBM 電腦系統的平行程式的執行指令 11 1.4 在PC Cluster上如何使用MPI 13 1.4.1 PC Cluster上的MPI Fortran程式編譯指令 13 1.4.2 PC Cluster 上的 Job command file 14 1.4.3 PC Cluster 上的平行程式執行指令 15 第二章 無邊界資料交換的平行程式 16 2.1 MPI 基本指令 17 2.1.1 mpif.h include file 17 2.1.2 MPI_INIT, MPI_FINALIZE 17 2.1.3 MPI_COMM_SIZE, MPI_COMM_RANK 18 2.1.4 MPI_SEND, MPI_RECV 19 2.2 無邊界資料交換的循序程式 T2SEQ 21 2.3 資料不切割的平行程式 T2CP 23 2.4 MPI_SCATTER,MPI_GATHER,MPI_REDUCE 28 2.4.1 MPI_SCATTER,MPI_GATHER 28 2.4.2 MPI_REDUCE, MPI_ALLREDUCE 30 2.5 資料切割的平行程式 T2DCP 32 第三章 需要邊界資料交換的平行程式 36 3.1 MPI_SENDRECV, MPI_BCAST 37 3.1.1 MPI_SENDRECV 37 3.1.2 MPI_BCAST 37 3.2 邊界資料交換的循序程式 T3SEQ 39 3.3 資料不切割的邊界資料交換平行程式 T3CP 40 3.4 資料切割的邊界資料交換平行程式(一) T3DCP_1 47 3.5 資料切割的邊界資料交換平行程式 (二) T3DCP_2 52 第四章 格點數不能整除的平行程式 57 4.1 格點數不能整除的循序程式 T4SEQ 58 4.2. MPI_SCATTERV、MPI_GATHERV 60 4.3 MPI_PACK、UNPACK、BARRIER、WTIME 62 4.3.1 MPI_PACK、MPI_UNPACK 62 4.3.2 MPI_BARRIER、MPI_WTIME 65 4.4 資料切割的平行程式 T4DCP 67 第五章 多維陣列的平行程式 72 5.1 多維陣列的循序程式 T5SEQ 73 5.2 多維陣列資料不切割的平行程式 T5CP 76 5.3 多維陣列末維資料切割的平行程式 T5DCP 85 5.4 與二維切割有關的 MPI 副程式 92 5.4.1 垂直座標圖示法則 (Cartesian Topology) 92 5.4.2 界定二維切割的 MPI 副程式MPI_CART_CREATE、 93 MPI_CART_COORDS、MPI_CART_SHIFT 93 5.4.3 定義固定間隔資料的 MPI 副程式 96 MPI_TYPE_VECTOR、MPI_TYPE_COMMIT 96 5.5 多維陣列末二維切割的平行程式 T5_2D 98 第六章 MPI程式的效率提昇 112 6.1 Nonblocking資料傳送 113 6.2 資料傳送的合併 122 6.3 以邊界資料計算取代邊界資料交換 126 6.4 輸出入資料的安排 128 6.4.1 事先切割輸入資料 128 6.4.2 事後收集切割過的輸出資料 131 第七章 導出的資料類別 133 7.1 導出的資料類別 134 7.2 陣列的轉換 139 7.3 兩方迴歸與管線法 149 第八章 多方依賴及SOR解法 155 8.1 四方依賴及SOR解法 156 8.2 黑白點間隔 SOR 解法 159 8.3 斑馬線 SOR 解法 168 8.4 八方依賴與四色點間隔SOR解法 175 第九章 有限元素法程式 183 9.1 有限元素法的循序程式 184 9.2 有限元素法的平行程式 187 附錄一 撰寫C語言的MPI程式 197 參考書目 200 Parallel Processing without Partition of 1-D Arrays 201 Parallel Processing with Partition of 1-D Arrays 202 Parallel on the 2nd Dimension of 2-D Arrays without Partition 203 Parallel on the 2nd Dimension of 2-D Arrays with Partition 204 Partition on the 3rd dimension of 3-D Arrays 205