中科院计算流体力学最新讲义CFD2011-第14讲-MPI并行程序设计初步培训课件
合集下载
计算流体力学绪论课件

求解器多样
OpenFOAM提供了多种求解器,如 稳态求解器、瞬态求解器、非牛顿流 求解器等。
社区支持
OpenFOAM拥有庞大的用户社区, 提供了丰富的资源和支持,方便用户 学习和交流。
05
计算流体力学研究前沿与 展望
多尺度模拟
总结词
多尺度模拟是计算流体力学领域的重要 研究方向,旨在模拟和分析不同尺度下 的流体运动现象。
03
数值模拟方法
有限差分法
有限差分法是一种将偏微分方程离散化为差分方 程的方法,适用于求解偏微分方程。
优点:简单易行,适用于多种类型的偏微分方程 ,可以处理复杂的边界条件。
有限差分法的基本思想是将连续的偏微分方程离 散化为差分方程,通过求解差分方程来近似求解 原偏微分方程。这种方法在计算流体力学中广泛 应用于求解流体动力学方程。
有限元法
优点
精度较高,适用于处理复杂的偏微分 方程和边界条件。
缺点
计算量大,需要较大的存储空间和计 算资源,对于大规模问题的求解可能 存在挑战。
有限体积法
• 有限体积法是一种将偏微分方程离散化为有限体积方程的方法,适用于求解流体动力学方程。
• 有限体积法的基本思想是将连续的流体域离散化为有限个小的体积单元,在每个体积单元上近似解,然后通过求解有限体积方程来近似求解原偏微分方程。这种方法在计算流体力学中 广泛应用于流体动力学模拟。
详细描述
复杂流动模拟与控制涉及流体运动的多种复杂现象,如湍流、多相流、非牛顿流等。通 过模拟和分析这些复杂流动现象,可以为实际工程中的流体控制提供重要的理论依据和 技术支持。同时,复杂流动模拟与控制还能够为流体工程、航空航天、环境科学等领域
提供更加精准的预测和控制方法。
计算流体力学CFD课件

V
dV
0
空间位置固定的无穷小微团模型 V 0 t
随流体运动的无穷小微团模型
方程不同形式之间的转换
空间位置固定的有限控制体模型 tV dVSVdS0
空间位置固定的无穷小微团模型 V 0 t
方程不同形式之间的转换
空间位置固定的无穷小微团模型 V 0 t
随流体运动的无穷小微团模型
流动控制方程经常用物质导数来表达。
物质导数(运动流体微团的时间变化率)
采用流体微团模型来理解物质导数的概念:
沿流线运动的无穷小 流体微团,其速度等 于流线上每一点的当
物质导数(运动流体微团的时间变化率)
流体微团在流场中的运动-物质导数的示意图
物质导数(运动流体微团的时间变化率)
考虑非定常流动:
随流体运动的无穷小微团模型
动量方程
作用在流体微团上的体 积力的X方向分量=
fxdxdydz
随流体运动的无穷小微团模型
动量方程
作用在流体微 团上的X方向的 压力=
动量方程
作用在流体微 团上的X方向的 正应力=
动量方程
作用在流体微 团上的X方向的 切应力=
动量方程
作用在流体微 团上的X方向总 的表面力=
t
或
txuyv zw0
空间位置固定的无穷 小微团模型
空间位置固定的无穷小微团模型
连续性方程:
txuyv zw0
或
V0
t
空间位置固定的无穷 小微团模型
随流体运动的无穷小微团模型
随流体运动的无穷小微团模型
连续性方程 流体微团的质量:
质量守恒定律
随流体运动的无穷小 微团模型
随流体运动的无穷小微团模型
流体微团在流场中的 运动-物质导数的示 意图
机电一体化系统设计第三章 计算流体力学(CFD)简介

求解器设置
动量 能量
状态方程 所支持的计算模型
紊流 燃烧 辐射 多相流 相转换 动区域 动网格
后处理
选择材料 边界条件 初始条件
FLUENT-通用CFD软件
Fluent基本步骤
问题的鉴定及预处理
定义你所需要的模型 确定即将模拟的区域 设计并创建网格
求解
建立数学模型 计算并监控
t(s)
Ma=0.8的均匀场内静止点声源的声辐射,观察 者位置(100m,0m,0m)
FLUENT-通用CFD软件
矢量图:直接给出二维或三维空间里矢量(如 速度)的方向及大小,一般用不同颜色和长度 的箭头表示速度矢量。矢量图能形象地显示流 动特征
某离心叶轮近轮盖处的速度分布
FLUENT-通用CFD软件
CFD算例
开度100%
压力分布
开度50%
开度10%
CFD算例
Frame 001 13 Dec 2004
压力分布
开度100%
Frame 001 10 Dec 2004
130
120
Volume Flow Rate(m3/h)
110
100
90 85
controlvalve 100%open
Frame 001 22 Feb 2005 title
Y
CFD算例
10.418 9.72344 9.02891 8.33438 7.63984 6.94531 6.25078 5.55625 4.86172 4.16719 3.47266 2.77813 2.08359 1.38906 0.694531
dxdydz v ndA 0 t V A
FLUENT官方培训教材(完整版)

Pressure Contours in a Squirrel Cage Blower (Courtesy Ford Motor Co.)
Gas outlet
Oil outlet
Three- Phase Inlet
Water outlet
Contours of Oil Volume Fraction in a Three-Phase Separator
Update Model
1. 定义模拟目的
你希望得到什么样的结果(例如,压降,流量),你如何使用这些结果? 你的模拟有哪些选择? 你的分析应该包括哪些物理模型(例如,湍流,压缩性,辐射)? 你需要做哪些假设和简化? 你能做哪些假设和简化(如对称、周期性)? 你需要自己定义模型吗? FLUENT使用UDF,CFX使用 User FORTRAN 计算精度要求到什么级别? 你希望多久能拿到结果? CFD是否是合适的工具?
Solid model of a Headlight Assembly
Pre-Processing Mesh Physics Solver Settings
4. 设计和划分网格
计算域的各个部分都需要哪种程度的网格密度? 网格必须能捕捉感兴趣的几何特征,以及关心变量的梯度,如速度梯度、压力梯度、温度梯度等。 你能估计出大梯度的位置吗? 你需要使用自适应网格来捕捉大梯度吗? 哪种类型的网格是最合适的? 几何的复杂度如何? 你能使用四边形/六面体网格,或者三角形/四面体网格是否足够合适? 需要使用非一致边界条件吗? 你有足够的计算机资源吗? 需要多少个单元/节点? 需要使用多少个物理模型?
Problem Identification Identify domain
2. 确定计算域
Gas outlet
Oil outlet
Three- Phase Inlet
Water outlet
Contours of Oil Volume Fraction in a Three-Phase Separator
Update Model
1. 定义模拟目的
你希望得到什么样的结果(例如,压降,流量),你如何使用这些结果? 你的模拟有哪些选择? 你的分析应该包括哪些物理模型(例如,湍流,压缩性,辐射)? 你需要做哪些假设和简化? 你能做哪些假设和简化(如对称、周期性)? 你需要自己定义模型吗? FLUENT使用UDF,CFX使用 User FORTRAN 计算精度要求到什么级别? 你希望多久能拿到结果? CFD是否是合适的工具?
Solid model of a Headlight Assembly
Pre-Processing Mesh Physics Solver Settings
4. 设计和划分网格
计算域的各个部分都需要哪种程度的网格密度? 网格必须能捕捉感兴趣的几何特征,以及关心变量的梯度,如速度梯度、压力梯度、温度梯度等。 你能估计出大梯度的位置吗? 你需要使用自适应网格来捕捉大梯度吗? 哪种类型的网格是最合适的? 几何的复杂度如何? 你能使用四边形/六面体网格,或者三角形/四面体网格是否足够合适? 需要使用非一致边界条件吗? 你有足够的计算机资源吗? 需要多少个单元/节点? 需要使用多少个物理模型?
Problem Identification Identify domain
2. 确定计算域
工程流体力学的计算方法CFD基础课件

详细描述
云计算技术使得大规模CFD模拟成为 可能,同时提供了灵活的计算资源和 数据管理方式。未来,云计算技术将 进一步优化,以降低计算成本和提高 计算效率。
THANKS
CFX
工业标准的CFD软件
CFX是全球公认的工业标准的CFD软件之一,广泛应用于能源、化工、航空航天、汽车等领域。它具 有强大的求解器和先进的物理模型,能够模拟复杂的流体流动和传热问题,并提供丰富的后处理功能 。
OpenFOAM
开源CFD软件
OpenFOAM是一款开源的CFD软件,由C编写,具有高度的灵活性和可定制性。它提供了丰富的工具包和案例库,适用于各 种流体动力学模拟,包括复杂流动、传热、化学反应等问题。
粘性。
热传导
流体在温度梯度作用下会产生 热传导现象。
流体动力学基本方程
质量守恒方程
表示流体质量随时间的变化规律 。
动量守恒方程
表示流体动量随时间的变化规律。
能量守恒方程
表示流体能量随时间的变化规律。
流体流动的分类
层流流动
均匀流动和非均匀流动
流体质点仅沿流线方向作有规则的线 运动,互不混杂。
根据流动是否具有空间均匀性进行分 类。
06
CFD未来发展与挑战
高精度算法与求解器
总结词
随着计算能力的不断提升,高精度算法和求解器在 CFD领域的应用将更加广泛。
详细描述
高精度算法和求解器能够提供更精确的流场模拟结果 ,有助于更深入地理解流体动力学现象。未来,高精 度算法和求解器将进一步优化,以适应更复杂、更高 要求的CFD模拟。
多物理场耦合模拟
有限体积法的优点在于能够很好地处 理流体流动中的非线性特性和复杂边 界条件,因此在工程流体力学中得到 了广泛应用。
云计算技术使得大规模CFD模拟成为 可能,同时提供了灵活的计算资源和 数据管理方式。未来,云计算技术将 进一步优化,以降低计算成本和提高 计算效率。
THANKS
CFX
工业标准的CFD软件
CFX是全球公认的工业标准的CFD软件之一,广泛应用于能源、化工、航空航天、汽车等领域。它具 有强大的求解器和先进的物理模型,能够模拟复杂的流体流动和传热问题,并提供丰富的后处理功能 。
OpenFOAM
开源CFD软件
OpenFOAM是一款开源的CFD软件,由C编写,具有高度的灵活性和可定制性。它提供了丰富的工具包和案例库,适用于各 种流体动力学模拟,包括复杂流动、传热、化学反应等问题。
粘性。
热传导
流体在温度梯度作用下会产生 热传导现象。
流体动力学基本方程
质量守恒方程
表示流体质量随时间的变化规律 。
动量守恒方程
表示流体动量随时间的变化规律。
能量守恒方程
表示流体能量随时间的变化规律。
流体流动的分类
层流流动
均匀流动和非均匀流动
流体质点仅沿流线方向作有规则的线 运动,互不混杂。
根据流动是否具有空间均匀性进行分 类。
06
CFD未来发展与挑战
高精度算法与求解器
总结词
随着计算能力的不断提升,高精度算法和求解器在 CFD领域的应用将更加广泛。
详细描述
高精度算法和求解器能够提供更精确的流场模拟结果 ,有助于更深入地理解流体动力学现象。未来,高精 度算法和求解器将进一步优化,以适应更复杂、更高 要求的CFD模拟。
多物理场耦合模拟
有限体积法的优点在于能够很好地处 理流体流动中的非线性特性和复杂边 界条件,因此在工程流体力学中得到 了广泛应用。
计算流体力学(中科院力学所_李新亮)——_经典转载 (1)

0 31 32 G3 (U ) 33 C p T u 31 v 32 w 33 Copyright by Li Xinliang Pr Re z
ui u j i j ), ( x j xi ij (2 ui 2 divV ), i j xi 3
波音787 波音777
Copyright by Li Xinliang 8
CFD 面临的挑战及主要任务:
多尺度复杂流动的数学模型化; 湍流的计算模型; 转捩的预测模型; 燃烧及化学反应模型; 噪声模型…… 可处理间断及多尺度流场的高分辨率、强鲁棒性、高效数值方法; 高精度激波捕捉法; 间断有限元法; …… 可处理复杂外形、易用性强的算法; 复杂外形—— 网格生成工作量大 多块分区算法; 无网格法; 粒子算法;
Mach10 正激波
60°
平板
Copyright by Li Xinliang
5
连续解 微分方程
U ( F Fv ) (G G v ) ( H H v ) 0 t x y z
Mach10 正激波
↓
网格划分 数值方法
60°
平板
↓
解的离散表示 代数方程
↓
Copyright by Li Xinliang
2
第1讲 流体力学基本方程
• 计算流体力学(CFD) 的概念及意义 • 流体力学的基本方程 • 偏微分方程组的类型 重点: 了解N‐S方程的由来及物理含义,熟练掌握N‐S方程 了解偏微方程的基本类型
Copyright by Li Xinliang 3
u v u 2 p u uv U v F1 (U ) uv F2 (U ) v 2 p uw vw w u ( E p ) E v ( E p )
计算流体力学(中科院力学所)_第12讲-不可压流动

V = 0 V 1 2 + V V = p + V t Re p + β V = 0 t V 1 2 + V V = p + V t Re
Vn
Step 1 : 得到 时间步的值 得到n
Step 2: 进行如下内迭代直至收敛
p k +1 p k + β V k = 0 t V k +1 V k 1 2 n + V n V n = p k + V t Re
在v的网格点上离散 交错网格示意图 压力p 压力 速度 u 速度v 速度
p pi , j p = i , j +1 y x i , j +1/ 2
pi , j
ui +1 / 2, j
vi , j +1 / 2
注: 对流项通常采用迎风格式离散
u
Copyright by Li Xinliang
拟压缩性方法 求解压力Poisson方程法 求解压力 方程法 涡流函数法 Simple方法 方法
讲义、 流体中文网) 流体论坛” “ 讲义、课件上传至 (流体中文网) -> “流体论坛” ->“ CFD基础理论 ” 流体中文网 基础理论 讲课录像及讲义上传至网盘 /browse.aspx/.Public
u13 L u1n u 23 L u 2 n u 33 L u3n L L u nn
a j x j 1 + b j x j + c j x j +1 = d j
x j = A j x j +1 + B j
2
Copyright by Li Xinliang
知识回顾
迭代法
2u 2u + = f ( x, y ) x 2 y 2 u = g ( x, y )
Vn
Step 1 : 得到 时间步的值 得到n
Step 2: 进行如下内迭代直至收敛
p k +1 p k + β V k = 0 t V k +1 V k 1 2 n + V n V n = p k + V t Re
在v的网格点上离散 交错网格示意图 压力p 压力 速度 u 速度v 速度
p pi , j p = i , j +1 y x i , j +1/ 2
pi , j
ui +1 / 2, j
vi , j +1 / 2
注: 对流项通常采用迎风格式离散
u
Copyright by Li Xinliang
拟压缩性方法 求解压力Poisson方程法 求解压力 方程法 涡流函数法 Simple方法 方法
讲义、 流体中文网) 流体论坛” “ 讲义、课件上传至 (流体中文网) -> “流体论坛” ->“ CFD基础理论 ” 流体中文网 基础理论 讲课录像及讲义上传至网盘 /browse.aspx/.Public
u13 L u1n u 23 L u 2 n u 33 L u3n L L u nn
a j x j 1 + b j x j + c j x j +1 = d j
x j = A j x j +1 + B j
2
Copyright by Li Xinliang
知识回顾
迭代法
2u 2u + = f ( x, y ) x 2 y 2 u = g ( x, y )
计算流体力学课件概述

2018/12/24
13
能源工业:图a是CFD模拟的500 [Mwe]电站煤粉锅炉炉内
燃烧。结果显示了在燃烧器喷流交叉形成的高温、高氧区, NOX生成速率大。
图b显示的是管壳换热器的流线及温度分布。同时考虑管外 流体、管内流体、以及管壁部分的耦合传热。
图c是模拟燃料电池中氧浓度的分布。用户开发了专门的电 化学反应模型,通过催化层的电化学反应速率模拟当地的电 流密度。
2018/12/24 8
CFD拥有包括流体流动、传热、辐射、多相流 、化学反应、燃烧等问题丰富的通用物理模 型;还拥有诸如气蚀、凝固、沸腾、多孔介 质、相间传质、非牛顿流、喷雾干燥、动静 干涉、真实气体等大批复杂
现象的实用模型。
2018/12/24
9
航空航天:图a为模拟美国F22战斗机的结果,图中 显示的是对称面上的马赫数分布。计算共采用了 260万个网格单元。模拟的升力、阻力及力矩系数 都与实验值吻合的很好。 图b是某飞机多段翼周围的压力分布 图c是美国J-31型涡轮喷气发动机的整机模拟。包 括进气道、压缩机、燃烧室、尾喷管四个部分。
图c 模拟出添加剂的浓度分布。改变添加剂的投放位置,用 CFD模拟来优化添加剂浓度分布,以达到最好的防腐效果
2018/12/24
15
冶金工业:图a 模拟的钢水铸造过程,图中显示的是铸造
模具内的流线及表面温度分布 图b是模拟连续加热炉,该炉采用直接加热方式,从图中温度 分布可以看出,钢带有一角的温度过高,这会影响钢产品的 质量。 图c是模拟优化铸造炉内烧嘴的类型和位置。很好地模拟出了 融池内因浮力驱动产生的二次流现象,及诸如回流区、涡、 表面波的发展、温度分布的不均匀性等设计缺陷。
2018/12/24
10
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算流体力学讲义
第六讲 MPI并行程序设计 (2)
李新亮 lixl@ ;力学所主楼219; 82543801
知识点: 阻塞通信与非阻塞通信 非连续数据的发送与接收 OpenMP并行程序设计初步
讲义、课件上传至 (流体中文网) -> “流体论坛” ->“ CFD基础理论” 也可到如下网址下载:/browse.aspx/.Public
call MPI_recv(A1,N,MPI_real,1,99,MPI_Comm_World,status,ierr)
Else
call MPI_recv(A1,N,MPI_real,0,99,MPI_Comm_World,status,ierr)
call MPI_send(A(1,1),N,MPI_real,0,99,MPI_Comm_world,ierr)
a.exe
a.exe
计算节点
2
“对等式”程序设计思想 ✓站在其中一个进程的角度思考
如果我是其中一个进程; 我应当做…… 完成我需要完成的任务
对等式 设计
a.exe a.exe
a.exe
a.exe
计算节点
3
基本的MPI函数(6个) ➢ MPI初始化 MPI_Init(ierr) ; MPI结束 MPI_Finalize(ierr) ➢ 得到当前进程标识
Sum= ……
计算某变量
MPI_Isend(sum ….) 发送该变量
sum=……
不能给变量重新赋值 (发送可能尚未完成)
MPI_Irecv(sum1, ……) sum=sum0+sum1
数据不能立即使用 (接收可能未完成)
MPI_Isend(sum, …, request, …)
……
Call MPI_Wait(request,status,ierr)
• 非阻塞消息接收 • MPI_IRecv(buf,count,datatype,source,tag,comm,request,ierr) • In buf,count,datatype,source,tag,comm • Out request,ierr
• 非阻塞通信的完成 • MPI_Wait(request,status,ierr) 等待消息收发完成
MPI_Recv() 返回后缓冲区数据可使用
Call MPI_Recv(sum1,……) Sum=sum0+sum1 ……
7
非阻塞发送
非阻塞接收
启动发送
发
立即返回
送
消 计
息 算
启动接收
立即返回 计 算
通信完成
通信完成
释放发送缓冲区
引用接收数据
非阻塞消息发送与接收
接 收 消 计算
与 息 通信
重叠
8
• 非阻塞消息发送 • MPI_ISend(buf,count,datatype,dest,tag,comm,request,ierr) • In buf,count,datatype,dest,tag,comm • Out request,ierr • Request (返回的非阻塞通信对象, 整数)
串行程序
real A(N,N),B(N,N),h
…..
Do i=1,N
i=N
B(I,1)=(A(I,2)-A(I,1))/h
B(I,N)=(A(I,N)-A(I,N-1))/h
enddo
Do j=2,N-1
Do i=1,N
B(i,j)=(A(i,j+1)-A(i,j-1))/(2.*h)
Enddo
Enddo
MPI_Test(request, flag,stutus,ierr) MPI_Waitall(const,request_array,status,ierr) 等待多个消息完成 • In request • Out status, flag (logical型)
9
非阻塞通信调用后立即返回,缓冲区不能立即使用
Sum=……
√
MPI_Irecv(sum1, ……, request, …) …… Call MPI_Wait(request,status,ierr)
Sum=sum0+sum1 √
10
利用通信与计算重叠技术提高效率
例: 计算差分
i=1
(fy )i,j (fi,j 1fi,j 1 )/2 (h ) i=2
MPI_Comm_rank(MPI_COMM_WORLD,myid,ierr) ➢ 得到通信域包含的进程数
MPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr)
➢ 消息发送
MPI_Send(buf,count,datatype,dest,tag,comm, ierr)
1
MPI 程序的运行原理:
知识回顾
➢ 服务器(前端机)编译
➢ 可执行代码复制 N 份,每个节点运行一份
调用MPI库函数 得到每个节点号 my_id 根据my_id 不同,程序执行情况不同
➢ 调用MPI 库函数进行通讯
MPI 编程的基本思想: 主从式,对等式 重点:对等式程序设计
服务器/前端机
Hale Waihona Puke a.exeendif1
0 J=1,2,3 ……………………….
N-1, N
11
并行程序—— 以两个进程并行为例
0
real A(N,N/2),B(N,N/2),A1(N),h
……
……
If(myid .eq. 0) then
J=1,2 ……N/2
call MPI_send(A(1,N/2),N,MPI_real,1,99,MPI_Comm_world,ierr)
阻塞发送
MPI_Send( A, … )
MPI_Recv( B , …)
开始
阻塞接收 开始
结束
消息成功发出 缓冲区可释放
结束
消息成功接收 缓冲区数据可使用
阻塞式发送与接收
6
MPI_Send( ) 返回后缓冲区可释放
sum= ……
call MPI_Send(sum,……)
sum= ……
变量可重复利用
➢ 消息接收
MPI_Recv(buf,count,datatype,source,tag,comm,status,ierr)
4
MPI的消息发送机制—— 两步进行 MPI_Send( A, … ) 发送 配合使用 MPI_Recv( B, … ) 接收
发送 变量A
接收 到变量B
5
一、 阻塞式通信与非阻塞式通信
第六讲 MPI并行程序设计 (2)
李新亮 lixl@ ;力学所主楼219; 82543801
知识点: 阻塞通信与非阻塞通信 非连续数据的发送与接收 OpenMP并行程序设计初步
讲义、课件上传至 (流体中文网) -> “流体论坛” ->“ CFD基础理论” 也可到如下网址下载:/browse.aspx/.Public
call MPI_recv(A1,N,MPI_real,1,99,MPI_Comm_World,status,ierr)
Else
call MPI_recv(A1,N,MPI_real,0,99,MPI_Comm_World,status,ierr)
call MPI_send(A(1,1),N,MPI_real,0,99,MPI_Comm_world,ierr)
a.exe
a.exe
计算节点
2
“对等式”程序设计思想 ✓站在其中一个进程的角度思考
如果我是其中一个进程; 我应当做…… 完成我需要完成的任务
对等式 设计
a.exe a.exe
a.exe
a.exe
计算节点
3
基本的MPI函数(6个) ➢ MPI初始化 MPI_Init(ierr) ; MPI结束 MPI_Finalize(ierr) ➢ 得到当前进程标识
Sum= ……
计算某变量
MPI_Isend(sum ….) 发送该变量
sum=……
不能给变量重新赋值 (发送可能尚未完成)
MPI_Irecv(sum1, ……) sum=sum0+sum1
数据不能立即使用 (接收可能未完成)
MPI_Isend(sum, …, request, …)
……
Call MPI_Wait(request,status,ierr)
• 非阻塞消息接收 • MPI_IRecv(buf,count,datatype,source,tag,comm,request,ierr) • In buf,count,datatype,source,tag,comm • Out request,ierr
• 非阻塞通信的完成 • MPI_Wait(request,status,ierr) 等待消息收发完成
MPI_Recv() 返回后缓冲区数据可使用
Call MPI_Recv(sum1,……) Sum=sum0+sum1 ……
7
非阻塞发送
非阻塞接收
启动发送
发
立即返回
送
消 计
息 算
启动接收
立即返回 计 算
通信完成
通信完成
释放发送缓冲区
引用接收数据
非阻塞消息发送与接收
接 收 消 计算
与 息 通信
重叠
8
• 非阻塞消息发送 • MPI_ISend(buf,count,datatype,dest,tag,comm,request,ierr) • In buf,count,datatype,dest,tag,comm • Out request,ierr • Request (返回的非阻塞通信对象, 整数)
串行程序
real A(N,N),B(N,N),h
…..
Do i=1,N
i=N
B(I,1)=(A(I,2)-A(I,1))/h
B(I,N)=(A(I,N)-A(I,N-1))/h
enddo
Do j=2,N-1
Do i=1,N
B(i,j)=(A(i,j+1)-A(i,j-1))/(2.*h)
Enddo
Enddo
MPI_Test(request, flag,stutus,ierr) MPI_Waitall(const,request_array,status,ierr) 等待多个消息完成 • In request • Out status, flag (logical型)
9
非阻塞通信调用后立即返回,缓冲区不能立即使用
Sum=……
√
MPI_Irecv(sum1, ……, request, …) …… Call MPI_Wait(request,status,ierr)
Sum=sum0+sum1 √
10
利用通信与计算重叠技术提高效率
例: 计算差分
i=1
(fy )i,j (fi,j 1fi,j 1 )/2 (h ) i=2
MPI_Comm_rank(MPI_COMM_WORLD,myid,ierr) ➢ 得到通信域包含的进程数
MPI_Comm_size(MPI_COMM_WORLD,numprocs,ierr)
➢ 消息发送
MPI_Send(buf,count,datatype,dest,tag,comm, ierr)
1
MPI 程序的运行原理:
知识回顾
➢ 服务器(前端机)编译
➢ 可执行代码复制 N 份,每个节点运行一份
调用MPI库函数 得到每个节点号 my_id 根据my_id 不同,程序执行情况不同
➢ 调用MPI 库函数进行通讯
MPI 编程的基本思想: 主从式,对等式 重点:对等式程序设计
服务器/前端机
Hale Waihona Puke a.exeendif1
0 J=1,2,3 ……………………….
N-1, N
11
并行程序—— 以两个进程并行为例
0
real A(N,N/2),B(N,N/2),A1(N),h
……
……
If(myid .eq. 0) then
J=1,2 ……N/2
call MPI_send(A(1,N/2),N,MPI_real,1,99,MPI_Comm_world,ierr)
阻塞发送
MPI_Send( A, … )
MPI_Recv( B , …)
开始
阻塞接收 开始
结束
消息成功发出 缓冲区可释放
结束
消息成功接收 缓冲区数据可使用
阻塞式发送与接收
6
MPI_Send( ) 返回后缓冲区可释放
sum= ……
call MPI_Send(sum,……)
sum= ……
变量可重复利用
➢ 消息接收
MPI_Recv(buf,count,datatype,source,tag,comm,status,ierr)
4
MPI的消息发送机制—— 两步进行 MPI_Send( A, … ) 发送 配合使用 MPI_Recv( B, … ) 接收
发送 变量A
接收 到变量B
5
一、 阻塞式通信与非阻塞式通信