为什么 Fortran 中的“stop”语句会阻止我的程序输出任何内容?

问题描述

我有一个非常基本的 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

我通过卸载旧版本并更新新编译器解决了这个问题,但似乎有更简单的方法。