计算 MPI 运行时间(Fortran)

本文介绍了如何在 Fortran 中利用 MPI 让所有进程同步开始计算,并选择最长运行时间的进程。在实现过程中,注意到了陷阱:由于时间测量的精度问题,双精度变量与单精度函数不匹配,可能导致精度丢失或运行错误。作者提醒读者在使用时要格外留意这些细节。
摘要由CSDN通过智能技术生成

计算 MPI 运行时间(Fortran)

实现

让所有进程同一时间开始运算,最后选取运行时间最长的那个进程的时间。

program main
    use mpi
    implicit none
    
    integer :: rank, size, ierr
    real(8) :: local_finish, local_start
    real :: local_elapsed, elapsed
    
    ! 初始化
    call MPI_INIT(ierr)

    call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
    call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)

    local_start = MPI_WTIME()
    call SLEEP(2)
    local_finish = MPI_WTIME()
    local_elapsed = local_finish - local_start
    call MPI_REDUCE(local_elapsed, elapsed, 1, MPI_REAL, MPI_MAX, 0, MPI_COMM_WORLD, ierr)
    if (rank == 0) then
        print *, "elapsed:", elapsed
    endif

    ! 结束
    call MPI_FINALIZE(ierr)
end program main

运行结果:

 elapsed:   2.000131 

陷阱

进程内的局部变量使用了双精度,而运行时间使用了单精度。local_finishlocal_s

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
此文档描述了Fortranmpi的使用。 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
### 回答1: 天津大学的并行计算实验主要使用MPI(Message Passing Interface)进行。MPI是一种用于实现并行计算的通信协议和编程模型。在这个实验中,我们使用MPI来实现并行计算任务的划分和通信。 首先,我们需要在实验环境中配置MPI,并编写MPI程序。MPI程序可以通过MPI库函数来实现任务的分配和通信。在该实验中,我们可以使用C、C++或Fortran等编程语言来编写MPI程序。 接下来,我们会设计一个适当的并行计算任务,并将其分解为多个子任务。每个子任务都会在不同的MPI进程中独立执行。这些子任务可以是相互独立的,并且可以并行执行,从而加快整个计算任务的完成。 在MPI程序中,我们会使用MPI库函数来实现进程间的通信。常用的MPI通信操作包括发送消息(MPI_Send)、接收消息(MPI_Recv)、广播(MPI_Bcast)和归约(MPI_Reduce)等。这些通信操作可以帮助不同的MPI进程之间共享信息和协调计算。 最后,在实验中我们可以通过运行MPI程序,观察并行计算任务的执行时间效率。我们可以调整并行任务的划分和MPI进程的数量,来优化并行计算的效果。 通过这个实验,我们可以学习并行计算的基本概念和MPI编程模型的使用。并行计算可以提高计算任务的效率和速度,能够充分利用计算机集群或并行计算系统的资源。这对于解决大规模计算问题和提高计算性能非常重要。 ### 回答2: 天津大学并行计算实验主要使用MPI编程模型进行计算MPI(Message Passing Interface)是一种消息传递接口,用于在分布式计算环境中进行并行计算。 在实验中,学生们通常使用C或Fortran编程语言,结合MPI库来编写并行程序。实验的目的是让学生掌握并行计算的基本概念和技术,并了解如何使用MPI来实现并行算法。 实验内容一般包括以下几个方面: 1. 并行矩阵乘法:学生们将了解矩阵乘法算法的基本原理,并使用MPI实现分布式矩阵乘法。他们需要将矩阵划分成多个小块,然后将计算任务分配给不同的进程,最后通过消息传递来组合计算结果。 2. 并行排序算法:学生们将学习不同的并行排序算法(如快速排序、归并排序等),并使用MPI实现并行排序。他们需要将待排序的数据分配给不同的进程,然后各自独立地进行排序,最后通过消息传递来合并有序数据。 3. 并行搜索算法:学生们将学习并行搜索算法(如广度优先搜索、深度优先搜索等),并使用MPI实现并行搜索。他们需要将搜索任务划分成多个子任务,然后分配给不同的进程并独立地进行搜索,最后通过消息传递来合并搜索结果。 通过这些实验,学生们能够深入理解并行计算的原理和技术,掌握MPI编程的基本方法。他们将学会如何将一个问题划分成多个子任务,并使用消息传递来实现进程之间的通信和协作。这些实验对于提高学生们的并行编程能力和分布式计算思维至关重要。 ### 回答3: 天津大学并行计算MPI实验是为了研究并行计算领域的技术,提高计算效率和解决复杂问题而进行的实验。MPI(Message Passing Interface)是一种在分布式计算环境中进行通信和并行计算的标准。该实验通常包括以下几个步骤: 首先,实验将介绍MPI的基本概念和原理,包括进程间通信、消息传递和任务分配等。学生们将了解MPI程序的架构和执行模型,掌握MPI编程的基本思想和方法。 其次,实验中会设计一些并行计算的问题,如矩阵相乘、图像处理等。学生们将利用MPI编写并行程序,将问题分解为多个子问题,并通过进程间通信协作解决。他们需要合理划分计算任务,确定消息传递的方式和时机,保证任务的正确性和效率。 然后,学生们将使用MPI库完成实验代码的编写,并通过MPI运行环境进行调试和性能分析。他们需要运行并行程序,观察计算过程中的消息交换情况,分析并解决可能出现的问题,如死锁、数据同步等。 最后,实验会进行性能测试和评估,比较串行计算与并行计算效率差异。学生们将记录实验结果,并分析调整参数对计算速度和负载均衡的影响。 通过这个实验,学生们可以理解并行计算的概念和原理,掌握MPI编程技术,培养分布式计算和并行算法设计的能力。并行计算MPI实验是天津大学计算机科学与技术专业中的重要实践环节,为学生提供了锻炼自己的机会,提高解决复杂计算问题的能力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值