2

对不起,我肯定犯了一个愚蠢的错误,但没有成功。

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

#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

4 回答 4

5

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

注意:

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

于 2012-04-03T10:11:59.907 回答
1

在这种情况下,您需要来自“mpich2”包的 mpiexec。

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

sudo apt-get purge mpi mpich2 openmpi-common

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

which mpiexec

如果您没有收到任何回复,则说明您已经删除了所有软件包。

然后重新安装mpich2的包

sudo apt-get install mpich2

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

于 2014-04-09T08:40:40.113 回答
0

我不知道你如何编译它:

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

将改为

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

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

于 2012-04-03T13:04:18.180 回答
0

安装

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

现在编译并执行代码

在此处输入图像描述

于 2017-02-12T19:42:14.080 回答