并行程序设计基础——非阻塞通信实现Jacobi迭代

目录

一、非阻塞通信实现Jacobi迭代

二、重复非阻塞通信

1、标准模式-MPI_SEND_INIT

2、同步模式-MPI_SSEND_INIT

3、缓存模式-MPI_BSEND_INIT

4、就绪模式-MPI_RSEND_INIT

5、MPI_RECV_INIT

三、重复非阻塞通信实现Jacobi迭代


        上一节我们介绍了MPI非阻塞通信的接口、特征和使用方法,本节将采用非阻塞通信接口来实现Jacobi迭代。

        传送门→MPI非阻塞通信接口:

并行程序设计基础——非阻塞通信-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/L_peanut/article/details/141217286?spm=1001.2014.3001.5501        传送门→Jacobi迭代:

并行程序设计基础——并行模式之对等模式-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/L_peanut/article/details/141057062?spm=1001.2014.3001.5502        我们通过使用不同的方式,提高了Jacobi迭代的性能,这里我们将通过非阻塞通信再次提升Jacobi迭代的性能,实现Jacobi迭代中通信与计算的重叠。

一、非阻塞通信实现Jacobi迭代

        为实现计算与通信的最大重叠,一个通信的原则就是“尽早开始通信,尽晚完成通信”,在开始通信和完成通信之间进行计算,这样通信启动的越早,结束的越晚,就有可能有更多的计算任务可以和通信重叠,同时也可以使得通信在计算任务执行期间完成,而不需要专门的等待时间。

        我们修改Jacobi迭代过程如下:

        程序仍按照列分成四块进行计算:

program main
implicit none

include 'mpif.h'
integer totalsize, mysize, steps
parameter (totalsize = 16)
parameter (mysize = totalsize/4, steps = 10)

integer n, myid, numprocs, i, j, rc, ierr
integer begin_col, end_col
integer left, right, tag1, tag2
integer status(MPI_STATUS_SIZE)
integer req(4)
real a(totalsize, mysize+2), b(totalsize, mysize+2)

call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, numprocs, ierr)
print *, "Process ", myid, " of ", numprocs, " is alive!"

!数组赋值
do j = 1, mysize+2
    do i = 1, totalsize
        a(i,j) = 0.0
    enddo
enddo

do i = 1, totalsize
    a(i, 1) = 8.0
    a(i, mysize+2) = 8.0
enddo

if(myid .eq. 0) then
    do i = 1, totalsize
        a(i, 2) = 8.0
    enddo
endif

if(myid .eq. 3) then
    do i = 1, totalsize
        a(i, mysize+1) = 8.0
    enddo
endif

do i = 1, mysize+2
    a(1, i) = 8.0
    a(totalsize, i) = 8.0
enddo

tag1 = 3
tag2 = 4

!计算当前进程的左右相邻进程
if(myid .gt. 0) then
    left = myid - 1
else
    left = MPI_PROC_NULL
endi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/870847.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity的地编系统

目录 基础操作与流程: 模型和材质制作: 六边形地图系统: 无缝大地图实现: 插件与扩展功能: 导航与寻路系统: 案例教学与视频教程: 技术问答与社区支持: Unity地编系统中如何…

云原生系列 - Nginx(基础篇)

前言 学习视频:尚硅谷Nginx教程(亿级流量nginx架构设计)本内容仅用于个人学习笔记,如有侵扰,联系删学习文档: 云原生系列 - Nginx(基础篇) 1、简介 1.1、背景介绍 Nginx(enginex)是一个高性能的HTTP和…

javaer快速入门 goweb框架 gin

gin 入门 前置条件 安装环境 配置代理 # 配置 GOPROXY 环境变量,以下三选一# 1. 七牛 CDN go env -w GOPROXYhttps://goproxy.cn,direct# 2. 阿里云 go env -w GOPROXYhttps://mirrors.aliyun.com/goproxy/,direct# 3. 官方 go env -w GOPROXYhttps://goproxy.…

阻抗控制中的dynamic movement primitives(DMP) model

在阻抗控制中,Dynamic Movement Primitives (DMP) 模型被用于实现一种高度灵活且可泛化的轨迹模仿学习方法。DMP模型由美国南加州大学(University of Southern California)的Stefan Schaal教授团队于2002年提出,它通过将动态系统建…

FreeRTOS 快速入门(三)之任务管理

目录 一、任务创建与删除1、什么是任务2、创建任务3、任务的删除 二、任务优先级和 Tick1、任务优先级2、Tick3、 修改优先级 三、任务状态1、阻塞状态(Blocked)2、暂停状态(Suspended)3、就绪状态(Ready)4、状态转换 四、Delay 函数五、空闲任务及其钩子函数1、介绍2、使用钩子…

议题揭晓 | 8 月 24 日,deepin 23 Release Party 暨武汉 LUG 等你来!

查看原文 Hi,Linuxer! 历经三年的精心打磨和无数次的迭代测试,deepin 23 已正式发布,不少伙伴已上手体验,我们也收到了诸多积极反馈。 为了庆祝这一里程碑,本次武汉LUG暨deepin 23 线下发布活动&#xf…

二叉树(四)

一、二叉树的性质 二、练习 1.某二叉树共有399个节点,其中有199个度为2的节点,则二叉树中的叶子节点数为( )。 A.不存在这样的树 B.200 C.198 D.199 答案:B 参考二叉树的性质第三条 2.在具有2…

单位严禁非授权设备接入网络,此方案高效防护,安心无忧!

MAC与IP地址绑定策略 MAC地址(媒体访问控制地址)与IP地址(互联网协议地址)作为计算机网络中的两大关键标识符,分别在数据链路层与网络层各司其职。将二者绑定,是网络安全领域的一项常用手段,旨…

零基础5分钟上手亚马逊云科技核心云开发知识 - 网络基础

简介: 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

Spring发送邮件性能优化?如何集成发邮件?

Spring发送邮件安全性探讨!Spring发送邮件功能有哪些? 邮件发送的性能逐渐成为影响用户体验的重要因素之一。AokSend将探讨如何在Spring框架中进行Spring发送邮件的性能优化,确保系统能够高效、稳定地处理大量邮件请求。 Spring发送邮件&am…

Chat App 项目之解析(三)

Chat App 项目介绍与解析(一)-CSDN博客文章浏览阅读76次。Chat App 是一个实时聊天应用程序,旨在为用户提供一个简单、直观的聊天平台。该应用程序不仅支持普通用户的注册和登录,还提供了管理员登录功能,以便管理员可以…

《黑神话:悟空》媒体评分解禁 M站均分82

《黑神话:悟空》媒体评分现已解禁,截止发稿时,M站共有43家媒体评测,均分为82分。 部分媒体评测: God is a Geek 100: 毫无疑问,《黑神话:悟空》是今年最好的动作游戏之一&#xff…

计算机网络部分基础知识

网络协议的意义 单台主机内部的设备之间需要发送和接收消息,那么和相隔很远的两台主机之间发送消息有什么区别呢?两台主机通过网络发送消息,相当于两个网卡设备之间进行通信,最大的区别在于距离变长了。而距离变长带来的结果就是&…

<Linux> 进程控制

目录 一、进程创建 1. fork函数 2. fork函数返回值 3. 写时拷贝 4. fork常规用法 5. fork调用失败原因 6. 如何创建多个子进程? 二、进程终止 1. 进程退出场景 2. 进程退出码 3. errno 4. 进程异常退出 5. 进程常见退出方法 5.1 return退出 5.2 exit退出 5.3 _ex…

【FPGA数字信号处理】- 数字信号处理如何入门?

​数字信号处理(Digital Signal Processing,简称DSP)是一种利用计算机或专用数字硬件对信号进行处理的技术,在通信、音频、视频、雷达等领域发挥着越来越重要的作用,也是FPGA主要应用领域之一。 本文将详细介绍数字信…

Web3链上聚合器声呐已全球上线,开启区块链数据洞察新时代

在全球区块链技术高速发展的浪潮中,在创新发展理念的驱动下,区块链领域的工具类应用备受资本青睐。 2024年8月20日,由生纳(香港)国际集团倾力打造的一款链上应用工具——“声呐链上聚合器”,即“声呐链上数…

ESP RainMaker OTA 自动签名功能的安全启动

【如果您之前有关注乐鑫的博客和新闻,那么应该对 ESP RainMaker 及其各项功能有所了解。如果不曾关注,建议先查看相关信息,知晓本文背景。】 在物联网系统的建构中,安全性是一项核心要素。乐鑫科技对系统安全给予了极高的重视。ES…

OpenCV学堂 | 汇总 | 深度学习图像去模糊技术与模型

本文来源公众号“OpenCV学堂”,仅用于学术分享,侵权删,干货满满。 原文链接:汇总 | 深度学习图像去模糊技术与模型 引言 深度学习在图像去模糊领域展现出了强大的能力,通过构建复杂的神经网络模型,可以自…

Golang | Leetcode Golang题解之第337题打家劫舍III

题目: 题解: func rob(root *TreeNode) int {val : dfs(root)return max(val[0], val[1]) }func dfs(node *TreeNode) []int {if node nil {return []int{0, 0}}l, r : dfs(node.Left), dfs(node.Right)selected : node.Val l[1] r[1]notSelected : …

Kotlin Multiplatform 跨平台开发的优化策略与实践

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 Kotlin Multiplatform 跨平台开发的优化策略与实践 在当今快速发展的软件开发领域,跨平台开发技术正变得越来越重要。Kotlin Multi…