【发布时间】:2014-08-22 03:37:07
【问题描述】:
我正在尝试在 Fortran 中学习一些 MPI 内容,但遇到了一些问题。这个乒乓球程序在说 SEGFAULT HERE 的两个 cmets 之间出现了段错误,但对于我的生活,我无法理解为什么会这样。
program MPI_PING_PONG
implicit none
include 'mpif.h'
integer rank, size, ierror, tag, status(MPI_STATUS_SIZE)
integer ping_pong_counter ! This will increment each time a message is received.
integer isEven
integer partner_rank
call MPI_INIT(ierror) ! Initialize MPI on all processes.
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror) ! Tell each process the size of the world.
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror) ! Tell each process its rank.
ping_pong_counter = 0
partner_rank = mod(rank + 1,2)
print *,'Process has rank ',rank
do
if (ping_pong_counter == 50) then
exit
endif
isEven = mod(ping_pong_counter,2)
if (rank == isEven) then
ping_pong_counter = ping_pong_counter + 1
print *,'Process ',rank,'sending counter value of ',ping_pong_counter
call MPI_SEND(ping_pong_counter,1,MPI_INTEGER,partner_rank,5,MPI_COMM_WORLD,ierror)
else
!******************** SEGFAULT HERE ********************!
call MPI_RECV(ping_pong_counter,1,MPI_INTEGER,partner_rank,5,MPI_COMM_WORLD,ierror)
!******************** SEGFAULT HERE ********************!
print *,'Process ',rank,' has received a counter with value ',ping_pong_counter
endif
enddo
end program MPI_PING_PONG
这是下面的输出:
Process has rank 0
Process 0 sending counter value of 1
Process has rank 1
Program received signal SIGSEGV: Segmentation Fault - invalid memory reference
Backtrace for this error:
#0: 0x7F49425F2117
#1: 0x7F49425F26F4
#2: 0x7F49425F20AF
#3: 0x7F49425F22C7
#4: 0X400DDF in mpi_ping_pong at MPI_PING_PONG.f90:28
【问题讨论】:
标签: segmentation-fault fortran mpi