gpt4 book ai didi

MPI_Rank 为所有进程返回相同的进程号

转载 作者:行者123 更新时间:2023-12-03 20:42:07 28 4
gpt4 key购买 nike

我正在尝试在 debian 7 上使用 openmpi 和 mpirun 运行这个示例 hello world 程序。

#include <stdio.h>
#include <mpi/mpi.h>

int main (int argc, char **argv) {
int nProcId, nProcNo;

int nNameLen;
char szMachineName[MPI_MAX_PROCESSOR_NAME];

MPI_Init (&argc, &argv); // Start up MPI

MPI_Comm_size (MPI_COMM_WORLD,&nProcNo); // Find out number of processes
MPI_Comm_rank (MPI_COMM_WORLD, &nProcId); // Find out process rank
MPI_Get_processor_name (szMachineName, &nNameLen); // Get machine name

printf ("Hello World from process %d on %s\r\n", nProcId, szMachineName);

if (nProcId == 0)
printf ("Number of Processes: %d\r\n", nProcNo);

MPI_Finalize (); // Shut down MPI

return 0;
}

我的问题是 MPI_Comm_Rank为进程的所有副本返回 0。当我在 shell 上运行这个命令时:
mpirun -np 4  helloWorld

它产生这个输出:
Hello World from process 0 on debian
Number of Processes: 1
Hello World from process 0 on debian
Number of Processes: 1
Hello World from process 0 on debian
Number of Processes: 1
Hello World from process 0 on debian
Number of Processes: 1

为什么进程数还是1?

最佳答案

确保 mpiccmpirun来自 相同的 MPI 实现 .当mpirun无法向启动的进程提供必要的 Universe 信息,最常见的原因是可执行文件是针对不同的 MPI 实现(甚至同一实现的不同版本)构建的,MPI_Init()回退到所谓的单例 MPI 初始化并创建一个 MPI_COMM_WORLD只包含调用过程。因此,结果是许多 MPI 进程在它们自己的独立 MPI_COMM_WORLD 中。实例。

通常像 mpicc --showme 这样的命令, which mpiccwhich mpirun可以帮助您确定是否确实如此。

关于MPI_Rank 为所有进程返回相同的进程号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20287564/

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