Fortran Coder

标题: Fortran MPI并行中 mpi_in_place如何在规约函数MPI_REDUCE中使用? [打印本页]

作者: xuanyz    时间: 2020-3-23 20:10
标题: Fortran MPI并行中 mpi_in_place如何在规约函数MPI_REDUCE中使用?
本帖最后由 kyra 于 2020-3-25 09:11 编辑

初步学些fortran mpi 并行编程,采用的工具为vs2010+ivf2011 已经构造好mpi环境,并且已经测试通过了 hello world
今天学习了规约函数MPI_REDUCE的使用
你解决的问题和编程思路:
变量homephi=1.0;
开辟4个进程 利用规约函数 MPI_REDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM,IERROR)结合mpi_in_place
计算  4个homephi 的和
理想结果应该为 4.0
程序如下
[Fortran] 纯文本查看 复制代码
program main
        include 'mpif.h'
        character * (MPI_MAX_PROCESSOR_NAME) processor_name
        integer myid, numprocs, namelen, rc,ierr
        real*8 homepi

        call MPI_INIT( ierr )
        call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr )
        call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr )
        call MPI_GET_PROCESSOR_NAME(processor_name, namelen, ierr)

        homepi=1.0

        if(myid.NE.0)then
          call MPI_REDUCE(homepi, homepi,1, MPI_DOUBLE_PRECISION,
     &                   MPI_SUM, 0, MPI_COMM_WORLD, ierr )
         else
         call MPI_REDUCE(MPI_IN_PLACE, homepi,1, MPI_DOUBLE_PRECISION,
     &                   MPI_SUM, 0, MPI_COMM_WORLD, ierr )
         write(*,33) homepi
33      format(' sum  value of pi = ',f10.8)
       endif

        call MPI_FINALIZE(rc)
        end

程序调试正常,结合cmd命令窗输入如下命令
mpiexec -n 4 mpitest_f77
计算的结果为
sum  value of pi =3.00000000

显然不对呀,理论结果应该是4呀!!!!!!!!!!!!!!!!!!!

请教高手指教,程序出错的原因,以及修改思路,先谢谢了!!





作者: li913    时间: 2020-3-24 11:47
我这里执行没问题。ivf2020+vs2019+intel mpi

QQ截图20200324114458.png (10.22 KB, 下载次数: 325)

QQ截图20200324114458.png

作者: xuanyz    时间: 2020-3-24 15:46
感谢li913,
代码没问题,那问题出在哪里了呢?  
是我的mpi版本库不对吗?
作者: li913    时间: 2020-3-24 15:50
不知道,你输出进程数和进程号看看。
作者: xuanyz    时间: 2020-3-24 15:54
试过多次了,看到的结果应该是,进程为0的部分不对,数值都是0,而其他几个进程的结果都是正确的
作者: xuanyz    时间: 2020-3-24 16:03
运行结果截图为

捕获.JPG (47.55 KB, 下载次数: 340)

运行结果截图

运行结果截图

作者: li913    时间: 2020-3-24 16:05
这个就不好说了。可能是库的问题。
作者: xuanyz    时间: 2020-3-24 16:09
好的,谢谢了,我再自己试一试吧




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2