2012-04-03 43 views
1

对不起,我确定犯了一个愚蠢的错误,但没有成功。错误的mpi处理器数量

我编写一个简单的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 

但我的电脑是酷睿i7与4个核。一切似乎都可以,即。 cat/proc/cpuinfo显示4个处理器

发生了什么??? 提前致谢!

+1

看起来不像是你的MPI代码的问题。你安装了哪个MPI库?你是如何安装它的? – 2012-04-03 10:02:26

+0

[MPI \ _Rank返回所有进程的相同进程号的可能的重复](http://stackoverflow.com/questions/20287564/mp​​i-rank-return-same-process-number-for-all-process) – 2014-06-16 15:19:04

回答

5

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

提示:

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

+0

好的,谢谢!!!你知道我必须改变我的mpi安装吗? – 2012-04-03 10:16:26

+0

你是如何安装它的?你用什么电脑?你使用win7吗? – lolo 2012-04-03 10:21:03

+0

不,不,我使用Ubuntu和常规安装。包mpich2 – 2012-04-03 10:51:39

0

我不知道你怎么能编译:

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

将改为

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

另一点是,MPI是消息传递的是过程不是核心或之间将消息传递接口处理器,如果你有一个4核心系统,你可以用你的RAM许可的进程来运行你的代码,但是只有4个进程在任何时候工作,其他进程必须等待,所以只使用4进程是有效的。

1

在这种情况下,您需要'mpich2'包中的mpiexec。

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

sudo apt-get purge mpi mpich2 openmpi-common 

要确保您已删除所有的包,请尝试以下命令

which mpiexec 

如果你什么也没得到回应,你就已经删除了所有的软件包。

然后重新安装MPICH2

sudo apt-get install mpich2 

尝试的软件包以编译,然后再次运行你的代码! 希望得到这个帮助!

0

INSTALL

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

现在编译并执行代码

enter image description here