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

 手机用户2502911563 发布于 2023-02-13 19:13

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

#include 
#include 

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?

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

    通常是命令mpicc --showme,which mpicc并且which mpirun可以帮助您确定是否确实如此.

    2023-02-13 19:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有