OpenMPI - 在不同的过程中排名相同
OpenMPI - same rank on different procs
我一直在使用 OpenMPI,但在从我的 proc 中请求等级时我没有得到预期的行为。
我有一个简单的 C 程序,它应该打印每个进程的排名:
minimal.c :
#include <stdio.h>
#include "mpi.h"
int
main (int argc, char *argv[])
{
unsigned int procs;
unsigned int self;
MPI_Comm com;
/* MPI ini */
MPI_Init (&argc, &argv);
com = MPI_COMM_WORLD;
MPI_Comm_size (com, &procs);
MPI_Comm_rank (com, &self);
printf("My rank is %d\n", self);
/* MPI Finalize */
MPI_Finalize();
return 0;
}
我用 :
编译
mpicc minimal.c -o minimal
现在,如果我 运行 在我自己的计算机上执行以下命令:
mpirun -np 2 minimal
我得到以下跟踪:
$ mpirun -np 2 minimal
My rank is 0
My rank is 0
我觉得这很令人不安。
所以,我继续挖掘 mpi运行 手册,最后用 -display-devel-map 和 - 打印了额外的信息报告绑定,这是我得到的痕迹:
$ mpirun -np 2 -display-devel-map -report-bindings minimal
Data for JOB [53858,1] offset 0
Mapper requested: NULL Last mapper: round_robin Mapping policy: BYCORE Ranking policy: SLOT
Binding policy: CORE:IF-SUPPORTED Cpu set: NULL PPR: NULL Cpus-per-rank: 1
Num new daemons: 0 New daemon starting vpid INVALID
Num nodes: 1
Data for node: UX31A Launch id: -1 State: 2
Daemon: [[53858,0],0] Daemon launched: True
Num slots: 2 Slots in use: 2 Oversubscribed: FALSE
Num slots allocated: 2 Max slots: 0
Username on node: NULL
Num procs: 2 Next node_rank: 2
Data for proc: [[53858,1],0]
Pid: 0 Local rank: 0 Node rank: 0 App rank: 0
State: INITIALIZED App_context: 0
Locale: [BB/..]
Binding: [BB/..]
Data for proc: [[53858,1],1]
Pid: 0 Local rank: 1 Node rank: 1 App rank: 1
State: INITIALIZED App_context: 0
Locale: [../BB]
Binding: [../BB]
[UX31A:04861] MCW rank 1 bound to socket 0[core 1[hwt 0-1]]: [../BB]
[UX31A:04861] MCW rank 0 bound to socket 0[core 0[hwt 0-1]]: [BB/..]
My rank is 0
My rank is 0
这让我很困惑。
我正在使用 Ubuntu 16.04 和来自 apt repos 的 OpenMPI 包。我的电脑是华硕 UX31a。
如果有人能给我一些关于这里发生的事情的见解,我将不胜感激。
谢谢!
感谢 Gilles Gouaillardet,我终于找到了发生的事情!
结果我安装了 mpich
库和 openmpi
个垃圾箱!
这是我所做的:
检查我的二进制文件中使用了哪个库:
$ ldd minimal
...
libmpich.so.12 => /usr/lib/x86_64-linux-gnu/libmpich.so.12
...
$ dpkg -S /usr/lib/x86_64-linux-gnu/libmpich.so.12
libmpich12:amd64: /usr/lib/x86_64-linux-gnu/libmpich.so.12.1.0
检查哪个包提供了我的 mpicc
和 mpirun
二进制文件:
$ which mpirun
/usr/bin/mpirun
$ dpkg -S mpirun
openmpi-bin: /usr/bin/mpirun.openmpi
...
我删除了我安装的 mpich
个软件包
sudo apt-get remove libmpich12 libmpich-dev
我安装了我需要的 openmpi
库
sudo apt-get install libopenmpi-dev
完成后我再次编译:
$ mpicc minimal.c -o minimal
$ mpirun -np 2 minimal
My rank is 0
My rank is 1
万岁!
我一直在使用 OpenMPI,但在从我的 proc 中请求等级时我没有得到预期的行为。
我有一个简单的 C 程序,它应该打印每个进程的排名:
minimal.c :
#include <stdio.h>
#include "mpi.h"
int
main (int argc, char *argv[])
{
unsigned int procs;
unsigned int self;
MPI_Comm com;
/* MPI ini */
MPI_Init (&argc, &argv);
com = MPI_COMM_WORLD;
MPI_Comm_size (com, &procs);
MPI_Comm_rank (com, &self);
printf("My rank is %d\n", self);
/* MPI Finalize */
MPI_Finalize();
return 0;
}
我用 :
编译mpicc minimal.c -o minimal
现在,如果我 运行 在我自己的计算机上执行以下命令:
mpirun -np 2 minimal
我得到以下跟踪:
$ mpirun -np 2 minimal My rank is 0 My rank is 0
我觉得这很令人不安。
所以,我继续挖掘 mpi运行 手册,最后用 -display-devel-map 和 - 打印了额外的信息报告绑定,这是我得到的痕迹:
$ mpirun -np 2 -display-devel-map -report-bindings minimal Data for JOB [53858,1] offset 0 Mapper requested: NULL Last mapper: round_robin Mapping policy: BYCORE Ranking policy: SLOT Binding policy: CORE:IF-SUPPORTED Cpu set: NULL PPR: NULL Cpus-per-rank: 1 Num new daemons: 0 New daemon starting vpid INVALID Num nodes: 1 Data for node: UX31A Launch id: -1 State: 2 Daemon: [[53858,0],0] Daemon launched: True Num slots: 2 Slots in use: 2 Oversubscribed: FALSE Num slots allocated: 2 Max slots: 0 Username on node: NULL Num procs: 2 Next node_rank: 2 Data for proc: [[53858,1],0] Pid: 0 Local rank: 0 Node rank: 0 App rank: 0 State: INITIALIZED App_context: 0 Locale: [BB/..] Binding: [BB/..] Data for proc: [[53858,1],1] Pid: 0 Local rank: 1 Node rank: 1 App rank: 1 State: INITIALIZED App_context: 0 Locale: [../BB] Binding: [../BB] [UX31A:04861] MCW rank 1 bound to socket 0[core 1[hwt 0-1]]: [../BB] [UX31A:04861] MCW rank 0 bound to socket 0[core 0[hwt 0-1]]: [BB/..] My rank is 0 My rank is 0
这让我很困惑。
我正在使用 Ubuntu 16.04 和来自 apt repos 的 OpenMPI 包。我的电脑是华硕 UX31a。
如果有人能给我一些关于这里发生的事情的见解,我将不胜感激。
谢谢!
感谢 Gilles Gouaillardet,我终于找到了发生的事情!
结果我安装了 mpich
库和 openmpi
个垃圾箱!
这是我所做的:
检查我的二进制文件中使用了哪个库:
$ ldd minimal ... libmpich.so.12 => /usr/lib/x86_64-linux-gnu/libmpich.so.12 ...
$ dpkg -S /usr/lib/x86_64-linux-gnu/libmpich.so.12 libmpich12:amd64: /usr/lib/x86_64-linux-gnu/libmpich.so.12.1.0
检查哪个包提供了我的
mpicc
和mpirun
二进制文件:$ which mpirun /usr/bin/mpirun
$ dpkg -S mpirun openmpi-bin: /usr/bin/mpirun.openmpi ...
我删除了我安装的
mpich
个软件包sudo apt-get remove libmpich12 libmpich-dev
我安装了我需要的
openmpi
库sudo apt-get install libopenmpi-dev
完成后我再次编译:
$ mpicc minimal.c -o minimal
$ mpirun -np 2 minimal
My rank is 0
My rank is 1
万岁!