fortran:如何获取集群的节点名称

时间:2016-05-02 01:56:07

标签: linux fortran

我在装有linux系统的集群上运行fortran代码。当代码开始运行时,我希望它输出运行它的节点的一些基本信息,尤其是节点名称。怎么在fortran做。

2 个答案:

答案 0 :(得分:3)

如果您的代码与MPI并行化 - 这对于在群集上运行的代码来说很常见 - 那么只需调用MPI_Get_processor_name()即可。 如果没有,只需使用iso_c_binding模块调用C函数gethostname(),这也就是这样。

编辑:以下是有关如何使用gethostname()模块调用iso_c_binding的示例。我绝对不是那么专家所以它可能不是最有效的......

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

答案 1 :(得分:3)

如果您想要的信息包含在环境变量中,那么简单的方法就是通过调用get_environment_variable来获取其值。对于主机名

program gethost
character*32 hostname
call get_environment_variable('HOST',hostname)
write(*,*) 'My gracious host is ',trim(hostname)
end program gethost