Fortran MPI代码中的标准输出
|
我有一个并行的fortran代码,其中我只希望rank = 0进程能够写到stdout,但是我不想用下面的代码乱扔代码:
if(rank==0) write(*,*) ...
所以我想知道做下面的事情是一个好主意,还是有更好的方法?
program test
use mpi
implicit none
integer :: ierr
integer :: nproc
integer :: rank
integer :: stdout
call mpi_init(ierr)
call mpi_comm_rank(mpi_comm_world, rank, ierr)
call mpi_comm_size(mpi_comm_world, nproc, ierr)
select case(rank)
case(0)
stdout = 6
case default
stdout = 7
open(unit=stdout, file=\'/dev/null\')
end select
write(stdout,*) \"Hello from rank=\", rank
call mpi_finalize(ierr)
end program test
这给出:
$ mpirun -n 10 ./a.out
Hello from rank= 0
感谢您的任何建议!
没有找到相关结果
已邀请:
3 个回复
乏摩纶誊伟
并非总是stdout。 Fortran 2003允许您检查stdout的单元号,因此,如果可以的话,应该使用它。 我的建议是保留
陈述。它们清楚地指示代码中发生了什么。如果您使用许多类似的I / O语句,则可以编写子例程以仅针对等级0或所有进程进行写入。这些名称可以具有表示预期用途的有意义的名称。
冲汉
)。我认为,在ѭ7旁边,这是最干净的解决方案。
舜辉
->
。 但我的担心在这里:/ dev / null将在类似UNIX的环境中工作。可以在Windows环境下使用吗?时髦的BlueGene系统怎么样?