并行程序设计基础——非阻塞通信实现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
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿核试Bug愁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值