【发布时间】:2016-05-02 15:43:06
【问题描述】:
我在一个装有 linux 系统的集群上运行一个 fortran 代码。当代码开始运行时,我希望它输出运行所在节点的一些基本信息,尤其是节点名称。如何在 fortran 中做到这一点。
【问题讨论】:
我在一个装有 linux 系统的集群上运行一个 fortran 代码。当代码开始运行时,我希望它输出运行所在节点的一些基本信息,尤其是节点名称。如何在 fortran 中做到这一点。
【问题讨论】:
如果您的代码与 MPI 并行化(这对于在集群上运行的代码来说很常见),那么只需调用 MPI_Get_processor_name() 即可。
如果没有,只需使用iso_c_binding 模块调用C 函数gethostname(),它再次执行此操作。
编辑:这是一个关于如何使用iso_c_binding 模块调用gethostname() 的示例。我绝对不是这方面的专家,所以它可能不是有史以来最有效的……
module unistd
interface
integer( kind = C_INT ) function gethostname( hname, len ) bind( C, name = 'gethostname' )
use iso_c_binding
implicit none
character( kind = C_CHAR ) :: hname( * )
integer( kind = C_INT ), VALUE :: len
end function gethostname
end interface
end module unistd
program hostname
use iso_c_binding
use unistd
implicit none
integer( kind = C_INT ), parameter :: sl = 100
character( kind = C_CHAR ) :: hn( sl )
character( len = sl ) :: fn
character :: c
integer :: res, i, j
res = gethostname( hn, sl )
if ( res == 0 ) then
do i = 1, sl
c = hn( i )
if ( c == char( 0 ) ) exit
fn( i: i ) = c
end do
do j = i, sl
fn( j: j ) = ' '
end do
print *, "->", trim( fn ), "<-"
else
print *, "call to gethostname() didn't work..."
end if
end program hostname
【讨论】:
MPI_Get_processor_name() 有效。但是我无法让gethostname() 工作,你能给出一个代码示例吗?
如果您想要的信息包含在环境变量中,那么简单的方法就是通过调用get_environment_variable 来获取它的值。对于主机名
program gethost
character*32 hostname
call get_environment_variable('HOST',hostname)
write(*,*) 'My gracious host is ',trim(hostname)
end program gethost
【讨论】:
HOSTNAME。非常感谢