抱歉,我确定犯了一个愚蠢的错误,但没有成功。
我正在编译一个简单的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个处理器
发生了什么事? 在此先感谢!!!!
答案 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)