mpi处理器数量错误

时间:2012-04-03 09:56:45

标签: mpi processors

抱歉,我确定犯了一个愚蠢的错误,但没有成功。

我正在编译一个简单的mpi hello世界:

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

int main (argc, argv)
     int argc;
     char *argv[];
{
  int rank, size;

  MPI_Init (&argc, &argv);      /* starts MPI */
  MPI_Comm_rank (MPI_COMM_WORLD, &rank);        /* get current process id */
  MPI_Comm_size (MPI_COMM_WORLD, &size);        /* get number of processes */
  printf( "Hello world from process %d of %d\n", rank, size );
  MPI_Finalize();
  return 0;
}

> mpicc -o hello_world_c hello_world.c
> mpirun -np 4 hello_world_c

但回归:

Hello world from process 0 of 1
Hello world from process 0 of 1
Hello world from process 0 of 1
Hello world from process 0 of 1

但我的电脑是一款拥有4核心的核心i7。一切似乎都没问题,即。 cat / proc / cpuinfo显示4个处理器

发生了什么事? 在此先感谢!!!!

4 个答案:

答案 0 :(得分:5)

您的代码没有任何问题。 唯一的问题是你的mpi安装。

注意:

处理器与核心之间存在差异。它不是一回事。

答案 1 :(得分:1)

在这种情况下,你需要来自&amp; mpich2&#39;的mpiexec。封装

首先,删除计算机上安装的所有mpi软件包。 如果您的服务器是Ubuntu,则可以使用以下命令:

sudo apt-get purge mpi mpich2 openmpi-common

要确保已删除所有包,请尝试使用此命令

which mpiexec

如果你没有得到任何答复,你已经删除了所有包裹。

然后重新安装mpich2的包

sudo apt-get install mpich2

尝试再次编译并运行代码! 希望这有帮助!

答案 2 :(得分:0)

我不知道如何编译它:

 int main (argc, argv)
 int argc;
 char *argv[];

将更改为

 int main (int argc, char *argv[])

另一点是mpi是消息传递接口,它在进程之间传递消息而不是核心或处理器如果你有一个4核系统,你可以运行代码,你的ram允许有如此多的进程,但只有4个进程在任何时候工作和其他进程必须等待,因此只使用4个进程是有效的。

答案 3 :(得分:0)

安装

sudo apt-get install libopenmpi-dev openmpi-bin openmpi-doc

现在编译并执行代码

enter image description here