【发布时间】:2013-12-15 18:09:44
【问题描述】:
我正在尝试在 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?
【问题讨论】:
-
你用什么命令编译helloWorld?
-
我知道这有点晚了,但 mpicc helloWorld.c 通常会创建一个名为 a.out 的可执行文件。 mpicc -o helloWorld helloWorld.c 将创建一个名为 helloWorld 的可执行文件。