0

我不明白为什么以下程序不起作用。当我使用“mpirun -np 2 a.out”运行它时,我希望它打印“N:2”,但它却给了我一个段错误。

谢谢

主文件

  program main

  implicit none

  include 'mpif.h'

  integer me, ngs,ierror

  call  inimpi(me, ngs)

  call calc

  call mpi_finalize( ierror )

  stop
  end

inimpi.f

  subroutine  inimpi(me, ngs)

  include  'mpif.h'

  integer me, ngs, ierror

  call  mpi_init( ierror )
  call  mpi_comm_rank( mpi_comm_world, me,  ierror )
  call  mpi_comm_size( mpi_comm_world, ngs, ierror )

  return
  end

计算

  subroutine  calc

  include 'mpif.h'

  integer  p, e, ierror

  p = 1

  call mpi_reduce(p, e, 1, mpi_integer,
 &     mpi_sum, mpi_comm_world, ierror)

  print *, "N: ", e
  return
  end
4

1 回答 1

3

取自 mpich2 文档:

int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, 
               MPI_Op op, int root, MPI_Comm comm)

您没有指定rootfor mpi_reduce。因此,mpi_comm_world被用作rootierror被用作MPI_Comm。你的意思是使用MPI_Allreduce不需要根参数的?

哦,如果可能的话,尝试使用use mpi而不是include 'mpif.h',这甚至可能会捕获当前错误。

于 2013-03-16T11:08:34.873 回答