Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 如何在MPI_init之前更改MPI错误处理程序?_Fortran_Mpi_Intel Fortran - Fatal编程技术网

Fortran 如何在MPI_init之前更改MPI错误处理程序?

Fortran 如何在MPI_init之前更改MPI错误处理程序?,fortran,mpi,intel-fortran,Fortran,Mpi,Intel Fortran,我有一个Fortran代码,主要用于运行大型MPI计算,但偶尔我想在没有MPI可用于快速数据处理任务的机器上运行它 我有一个逻辑变量,它决定程序是否在MPI模式下运行,如果为false,代码将不会调用任何MPI子例程。目前,我决定是否在MPI模式下运行的方法是测试是否存在一个虚拟文件“NO_MPI”,我不喜欢它,因为它不美观,而且我通常忘记在非MPI环境下运行时需要创建这个文件 当代码在非MPI环境中运行时,MPI_init子例程将失败并导致程序崩溃。所以我要做的是用可选的错误输出调用它: 调用

我有一个Fortran代码,主要用于运行大型MPI计算,但偶尔我想在没有MPI可用于快速数据处理任务的机器上运行它

我有一个逻辑变量,它决定程序是否在MPI模式下运行,如果为false,代码将不会调用任何MPI子例程。目前,我决定是否在MPI模式下运行的方法是测试是否存在一个虚拟文件“NO_MPI”,我不喜欢它,因为它不美观,而且我通常忘记在非MPI环境下运行时需要创建这个文件

当代码在非MPI环境中运行时,
MPI_init
子例程将失败并导致程序崩溃。所以我要做的是用可选的错误输出调用它:

调用MPI\u init(ierr)

然后,如果返回错误,则继续以非MPI模式处理节点

问题是默认的MPI错误处理程序将中止程序而不返回错误。对于任何其他MPI子例程,解决方案为:

调用MPI\u Comm\u set\u errhandler(MPI\u Comm\u WORLD,MPI\u ERRORS\u RETURN)

告诉MPI不要中止并返回错误代码。但是,我不能在
MPI_init
之前调用此子例程而不得到错误
在初始化MPICH之前尝试使用MPI例程

在调用
MPI\u init
之前,是否有任何方法可以更改默认的错误处理程序,或者使用编译器标志指定它?我将IFORT编译器与MPICH一起使用


我觉得必须有某种方法来测试
MPI_init
中的错误代码,否则当默认行为是中止而不返回错误时,允许
MPI_init
接受可选错误返回作为参数有什么意义呢?

抱歉,您不能。谢谢。您是否了解应该如何使用MPI_init子例程的错误返回?或者仅仅是所有的MPI子例程都有可选的错误返回,而在MPI_init的情况下,它是无用的?如果您的实现决定中止而不是返回错误代码,那么您基本上会被卡住。这不是第一次问这个问题,所以请随意问MPI论坛是否有(计划)一个可移植的解决方案。当你说“没有可用的MPI”时,我可以问一下吗?如果你仍然调用MPI_Init,你如何链接代码?你的代码到底是如何失败的?MPI标准要求支持所谓的“单例MPI_INIT”。基本上,当您在没有
mpiexec
的情况下运行可执行文件时,它的行为应该与使用了
mpiexec-n1…
一样。只要您的代码以仅使用1个MPI级别运行的方式编写,您就不需要任何特殊的机制来区分这些情况。