在单台计算机上执行MPI并行程序

5

我希望能在一台装有Intel Core i7的电脑上运行并行代码。我已经成功编译了代码,但在运行时遇到了问题。

我使用mpicxx编译代码,但当我运行" mpirun -np 8 ./a.out"时,只有一个进程在运行。我的操作系统是Linux Ubuntu 11.04。

请问我应该怎么做才能让它正常工作呢?

例如,我想要运行这段代码:

#include <iostream>
#include <mpi.h>
using namespace std;

int main(int argc, char **argv)
{
    int mynode, totalnodes;
    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD, &totalnodes);
    MPI_Comm_rank(MPI_COMM_WORLD, &mynode);
    cout << "Hello world from process " << mynode;
    cout << " of " << totalnodes << endl;
    MPI_Finalize();
}

我使用带有mpirun --version:1.3.1的mpich2。

你应该告诉我们你正在运行哪个版本的MPI。 - akappa
另外,请问您正在使用的mpich2版本是哪个?在1.2和1.3版本之间,进程管理器从MPD更改为Hydra,因此启动并行应用程序的详细信息也会发生变化。您可以通过运行mpirun --version来查看它的版本。 - akappa
当您尝试按上述方式运行它时,会发生什么事情? - Jonathan Dursi
如果你想从每个核心打印“Hello world”,这是行不通的。 - pyCthon
如果你正在使用MPI的C语法,那么也有C++语法可供选择。 - pyCthon
显示剩余2条评论
2个回答

2
在您的mpich2版本中,鼓励使用mpiexec代替mpirun。
要启动应用程序,您应该编写一个带有以下语法的机器文件:
machine1[:number of cores]
...
machinen[:number of cores]

每台机器一行,可在冒号前加上核心数,例如:

node0:2
node1:3

你可以这样调用你的应用程序:

mpiexec -f machinefile -n <number of processes> yourapplication

试试看,告诉我们你得到了什么。

请记住,在默认配置中,mpich2需要无需登录的ssh配置才能启动进程。


我不知道如何编写机器文件。 - peaceman
1
对于您的简单情况,您需要一个名为machinefile的文件,其中包含单行localhost:8。然后运行mpiexec -f machinefile -n 8 /path/to/application arguments - Phil Miller
现在我遇到了编译问题。错误是usr/bin/ld:无法找到-lcr collect2:ld返回1退出状态。进程管理器可以工作,但编译器现在无法工作! - peaceman
1
这是一个问答网站,而不是“我们帮你解决问题”的网站。请分别提出每个问题。 - akappa

2
如果您使用的是Ubuntu操作系统,您可以使用mpiexec -n 8 /path/to/application来执行您的代码,并且不需要机器文件,只需确保您已正确安装了mpich库即可。您可以使用Synaptic软件包管理器安装库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接