0

次のプログラムが機能しない理由がわかりません。「mpirun-np2a.out」で実行すると、「N:2」と出力されると思いますが、代わりにセグメンテーション違反が発生します。

ありがとうございました

main.f

  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

calc.f

  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 に答える