首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用fortran MPI_Barrier分割故障

用fortran MPI_Barrier分割故障
EN

Stack Overflow用户
提问于 2017-05-24 23:04:42
回答 1查看 901关注 0票数 0

我见过有人使用MPI_Barrier (libpmpi.12.dylib)和C++ (Barrier cause a segmentation fault in C++)产生分割错误。然而,我并没有复制他们所犯的错误。

然而,现在我得到了相同的错误fortran MPI_Barrier。我的代码很简单,比如:

代码语言:javascript
复制
program main

implicit none

include 'mpif.h'


! local variables
!
character(len=80) :: filename, input
character(len=4) :: command
integer :: ierror, i, l, cmdunit
logical :: terminate
integer :: num_procs, my_id, impi_error
real :: program_start, program_end
call MPI_INIT(impi_error)
call MPI_COMM_RANK(MPI_COMM_WORLD,my_id,impi_error)
call MPI_COMM_SIZE(MPI_COMM_WORLD,num_procs,impi_error)
call MPI_Barrier(MPI_COMM_WORLD)
program_start = MPI_Wtime()
filename='sc.cmd'
cmdunit=8
print *, my_id, cmdunit
call MPI_Barrier(MPI_COMM_WORLD)
call MPI_Barrier(MPI_COMM_WORLD)
call MPI_Barrier(MPI_COMM_WORLD)
call MPI_Barrier(MPI_COMM_WORLD)
call MPI_Barrier(MPI_COMM_WORLD)
program_end = MPI_Wtime()
if (my_id == 0) then
    write(*,'(a,F25.16,a)') "MDStressLab runs in ", program_end -             program_start, " s."
endif
call MPI_FINALIZE(impi_error)
end program

密码没什么特别的。但是,当我使用命令mpif90 tmp.f90编译代码,然后使用命令mpirun -n 2 ./a.out运行时。它给了我:

代码语言:javascript
复制
           0           8
           1           8

Program received signal SIGSEGV: Segmentation fault - invalid memory     reference.

Backtrace for this error:

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x7FBF2C700E08
#1  0x7FBF2C6FFF90
#0  0x7F2EDF972E08
#2  0x7FBF2C3514AF
#1  0x7F2EDF971F90
#2  0x7F2EDF5C34AF
#3  0x7FBF2CA4F808
#4  0x400EB4 in MAIN__ at tmp.f90:?
#3  0x7F2EDFCC1808
#4  0x400EB4 in MAIN__ at tmp.f90:?
--------------------------------------------------------------------------
mpirun noticed that process rank 1 with PID 35660 on node min-virtual-machine exited on signal 11 (Segmentation fault).
--------------------------------------------------------------------------

有趣的是,它只有两个节点崩溃。它在1~10个节点上运行很好,除了2个节点。因为这也是在C和C++中随机发生的,所以我认为在MPI库中可能有一些隐藏的bug。这只是我的猜测。有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-25 01:59:06

只需替换

代码语言:javascript
复制
call MPI_Barrier(MPI_COMM_WORLD)

使用

代码语言:javascript
复制
call MPI_Barrier(MPI_COMM_WORLD, impi_error)

注意,如果您的Fortran编译器和MPI库支持Fortran 2008,您也可以选择替换

代码语言:javascript
复制
include mpif.h

使用

代码语言:javascript
复制
use mpi_f08

而且您不再需要impi_error参数了,因为Fortran 2008绑定使这个参数成为可选的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44169823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档