没有针对MPI_CART_CREATE的特定子例程

时间:2014-06-19 18:14:00

标签: fortran mpi

我正在尝试使用我的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)

我无法弄清楚为什么会产生此错误,因为所有参考文档都表明这是正确的形式。为什么我会收到此错误?

2 个答案:

答案 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;
  • 的类型错误
  • ndimsperiods是标量,而不是数组。

答案 1 :(得分:1)

看起来你没有在这里传递正确的参数。您可以为此功能找到man page。我建议跟踪一个很好的MPI拓扑教程,因为这是一个很重要的主题方法。一个快速的谷歌搜索显示了不少,但这一个接近顶部和Fortran:http://scv.bu.edu/~kadin/Tutorials/Alliance/MPI/virtual_topology/cart_example2.html