将MPI_Isend和mpi_f08子阵列用于ifort中的高维数组会破坏数据

时间:2018-04-20 09:04:43

标签: fortran mpi intel-fortran fortran2008

我正在尝试使用onNextFrame(callback) { window.requestAnimationFrame(callback); } //And wrap the function that accesses the Dom directly like this onNextFrame(() => { let target = document.querySelector(`...`); ... }); 模块对一系列等级为4,5和6的阵列进行光环交换。以前我使用了子阵列类型,但结果很多,ifort无法跟踪所有这些类型,并在使用mpi_f08进行编译时开始破坏它们。

我正在使用

的代码
-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))

ifort 2017 with Intel MPI 2017为每条此类行提供以下警告:

MPI_WaitAll

尽管如此,光晕交换对于秩-4和-5阵列工作正常。但是,当涉及到rank-6数组时,数组数据会进入并来自完全错误的位置,而来自发送进程中的光晕的数据(不是传入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] 的数组段中)出现在大部分接收过程(未传递到MPI_Isend)。

使用ifort 2018和Intel MPI 2019预览会出现其他错误(不是警告):

MPI_Irecv

三个相互关联的问题:

  • 在导致警告的test_halo_6_aio.F90(60): 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] 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)) -------------------^ test_halo_6_aio.F90(60): error #7505: If an actual argument is an array section with vector subscript and corresponding dummy argument does not have VALUE attribute, it must not have ASYNCHRONOUS / VOLATILE attribute. [BUF] 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)) ^ MPI_Isend调用中,我的语法是否有问题?如何修复它以便不再触发警告?
  • 这是警告导致数组损坏的原因我看到的是排名为6的数组吗?
  • 如何避免破坏Rank-6阵列?

我已将失败的例子放入this gist

0 个答案:

没有答案