我正在尝试使用我的mpi实现的拓扑,但是我使用MPI_CART_CREATE
遇到了错误。
示例Fortran代码
use mpi
implicit none
integer :: ierror, nproc, ring_comm
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, nproc, ierror)
call MPI_CART_CREATE(MPI_COMM_WORLD, 1, nproc, .false., 1, ring_comm, ierror)
call MPI_FINALIZE(ierror)
产生错误:
call MPI_CART_CREATE(MPI_COMM_WORLD, 1, nproc, .false., 1, ring_comm, ierror)
1
Error: There is no specific subroutine for the generic 'mpi_cart_create' at (1)
我无法弄清楚为什么会产生此错误,因为所有参考文档都表明这是正确的形式。为什么我会收到此错误?
答案 0 :(得分:4)
根据标准(并且对于一个版本给出here)子例程的绑定是
MPI_CART_CREATE(COMM_OLD, NDIMS, DIMS, PERIODS, REORDER, COMM_CART, IERROR)
INTEGER COMM_OLD, NDIMS, DIMS(*), COMM_CART, IERROR
LOGICAL PERIODS(*), REORDER
问题中的代码使用
MPI_CART_CREATE(COMM_OLD, NDIMS, DIMS, PERIODS, REORDER, COMM_CART, IERROR)
INTEGER COMM_OLD, NDIMS, DIMS, COMM_CART, REORDER, IERROR
LOGICAL PERIODS
所以:
reorder
; ndims
和periods
是标量,而不是数组。答案 1 :(得分:1)
看起来你没有在这里传递正确的参数。您可以为此功能找到man page。我建议跟踪一个很好的MPI拓扑教程,因为这是一个很重要的主题方法。一个快速的谷歌搜索显示了不少,但这一个接近顶部和Fortran:http://scv.bu.edu/~kadin/Tutorials/Alliance/MPI/virtual_topology/cart_example2.html。