小编Ed *_*ett的帖子

在ifort中将MPI_Isend与mpi_f08子数组一起用于高维数组会破坏数据

我正在尝试使用该mpi_f08模块在一系列4、5和6级阵列上进行光晕交换。以前,我为此使用了子数组类型,但最终得到了很多结果,以致ifort无法跟踪所有它们,并在使用进行编译时开始破坏它们-ipo

我正在使用以下代码

call MPI_Isend(Array(1:kthird, ksizex_l, 1:ksizey_l, 1:ksizet_l, 1:size5, 1:size6), size, MPI_Double_Complex, ip_xup, 0 + tag_offset, comm, reqs(1))
call MPI_Irecv(Array(1:kthird, 0, 1:ksizey_l, 1:ksizet_l, 1:size5, 1:size6), size, MPI_Double_Complex, ip_xdn, 0 + tag_offset, comm, reqs(2))
Run Code Online (Sandbox Code Playgroud)

(然后再致电MPI_WaitAll

将ifort 2017与Intel MPI 2017一起为每条这样的行给出以下警告:

test_mpif08.F90(51): warning #8100: The actual argument is an array section or assumed-shape array, corresponding dummy argument that has either the VOLATILE or ASYNCHRONOUS attribute shall be an assumed-shape array.   [ARRAY]
Run Code Online (Sandbox Code Playgroud)

尽管如此,光环交换对于等级4和-5阵列也能正常工作。但是,对于第6级数组,数组数据进出的位置完全错误,来自发送过程中光环的数据(不在传递给数组的段中MPI_Isend)出现在接收的大部分中进程(未传递到MPI_Irecv)。

使用ifort 2018和Intel …

fortran mpi intel-fortran fortran2008

5
推荐指数
0
解决办法
180
查看次数

标签 统计

fortran ×1

fortran2008 ×1

intel-fortran ×1

mpi ×1