我正在尝试使用该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 …