gpt4 book ai didi

c - MPI中如何获取物理机数量

转载 作者:太空狗 更新时间:2023-10-29 14:57:13 24 4
gpt4 key购买 nike

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

最佳答案

如果物理机是指一组处理元素,共享一个公共(public)内存地址空间,那么 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 实体的数量求和来计算此类组的数量。由于使用集体操作,该函数必须被世界组中的所有等级调用。

免责声明:未经测试的代码 - 使用风险自负。

关于c - MPI中如何获取物理机数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34115227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com