问题描述
我有一个非常基本的 Fortran 程序来尝试学习 MPI。我正在使用 Visual Studio 2019、MPICH2 和英特尔 oneAPI 工具包编译此脚本。程序如下
program hello
implicit none
include 'mpif.h'
integer :: rank,size,ierror,tag,status(MPI_STATUS_SIZE)
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD,ierror)
call MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierror)
print *,"node","says Hello World!"
call MPI_BARRIER(MPI_COMM_WORLD,ierror)
call MPI_FINALIZE(ierror)
! here
end program hello
这个程序按预期编译并运行,产生输出
PS C:\Users\gf715\Documents\VS_testing\test\Debug> mpiexec -n 4 test.exe
node 1 says Hello World
node 2 says Hello World
node 3 says Hello World
node 0 says Hello World
但是,如果我在结束程序之前添加一个 stop
语句(我在那里写了“here”注释),代码仍然会编译,但现在我运行它时不会产生任何输出:
PS C:\Users\gf715\Documents\VS_testing\test\Debug> mpiexec -n 4 test.exe
PS C:\Users\gf715\Documents\VS_testing\test\Debug>
我不记得在使用 Intel oneAPI 工具包之前遇到过这个问题(我曾经使用相同的设置,但使用 Parallel Studio XE Cluster Edition,当我的许可证到期时我被迫更改)。
为什么 stop
会阻止任何输出?
解决方法
回答我自己的问题。这是因为计算机上有多个版本的英特尔编译器(请参阅 https://community.intel.com/t5/Intel-Fortran-Compiler/Entry-Point-for-for-stop-core-quiet-Not-Found/td-p/1265058)
我通过卸载旧版本并更新新编译器解决了这个问题,但似乎有更简单的方法。