c/c++语言开发共享如何获取MPI中的物理机数量

我可以使用MPI_Comm_size来获取总处理器的数量。 但是如何获得真实物理机的数量?

    如果物理机器是指一组处理元素,共享一个公共内存地址空间 ,那么MPI-3按类型拆分操作MPI_COMM_SPLIT_TYPE可用于移植获取此类机器的数量:

     int getNodeCount(void) { int rank, is_rank0, nodes; MPI_Comm shmcomm; MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, 0, MPI_INFO_NULL, &shmcomm); MPI_Comm_rank(shmcomm, &rank); is_rank0 = (rank == 0) ? 1 : 0; MPI_Allreduce(&is_rank0, &nodes, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); MPI_Comm_free(&shmcomm); return nodes; } 

    在Fortran:

     subroutine getNodeCount(count) use mpi implicit none integer, intent(out) :: count integer :: shmcomm, rank, is_rank0, ierr call MPI_COMM_SPLIT_TYPE(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, 0, & MPI_INFO_NULL, shmcomm, ierr) call MPI_COMM_RANK(shmcomm, rank, ierr) if (rank == 0) then is_rank0 = 1 else is_rank0 = 0 end if call MPI_ALLREDUCE(is_rank0, count, 1, MPI_INTEGER, MPI_SUM, & MPI_COMM_WORLD, ierr) call MPI_COMM_FREE(shmcomm, ierr) end subroutine getNodeCount 

    该函数首先将世界通信器分成能够创建共享存储器区域的组,即每个物理机器一组(给出上面的定义)。 然后,它通过对rank-0实体的数量求和来计算这些组的数量。 由于使用集体操作,该function必须由世界组中的所有等级调用。

    免责声明:未经测试的代码 – 使用风险由您自行承担。

    像这样的小function(未经测试可能需要调整)应该这样做。 它依赖于MPI_get_processor_name() ,它返回每个计算节点的唯一字符串。

     int getNodesNumer() { int rank, size; MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); char names[size][MPI_MAX_PROCESSOR_NAME]; int len; MPI_Get_processor_name( names[rank], &len ); MPI_Allgather( MPI_IN_PLACE, 0, 0, names[0], MPI_MAX_PROCESSOR_NAME, MPI_CHAR, MPI_COMM_WORLD ); int indexes[size]; int count = 0; for ( int i = 0; i < size; i++ ) { int found = 0; for ( int j = 0; j < count; j++ ) { if ( strncmp( names[i], names[indexes[j]], MPI_MAX_PROCESSOR_NAME ) == 0 ) { found = 1; break; } } if ( found == 0 ) { indexes[count++] = i; } } return count; } 

      以上就是c/c++开发分享如何获取MPI中的物理机数量相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544885.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐