2011-10-12 53 views
3

我想在单核电脑上运行并行代码,使用核心i7 CPU我可以编译我的代码,但运行时遇到问题。在单台计算机上执行MPI并行程序

我用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(); 
} 

我用MPICH2用的mpirun --version:1.3.1

+0

你应该告诉我们你正在运行的是什么版本的MPI。 – akappa

+0

另外您正在使用的是mpich2的版本。他们在1.2和1.3之间将流程管理器从MPD改为Hydra,因此有关如何启动并行应用程序的详细信息发生了变化。你可以看到它正在运行mpirun --version。 – akappa

+0

“假设”?呃,你的特定版本有这个问题。在最新版本中,您应该使用mpiexec和正确定义的机器文件。 – akappa

回答

0

如果您使用的是ubuntu操作系统,您可以使用mpiexec -n 8/path/to /应用程序执行您的代码,并且不需要机器文件,只要确保您正确安装了mpich库,就可以使用突触包图书馆安装经理。

2

在你MPICH2版本,它鼓励代替使用mpiexec的的mpirun。

要启动的应用程序,你应该写与此语法machinefile:对于每个机器

machine1[:number of cores] 
... 
machinen[:number of cores] 

一条线,以冒号之前芯的任选的数目,例如:

node0:2 
node1:3 

调用那么你的应用程序那样:

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

试试吧,告诉我们你会得到什么。

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

+0

我不知道我怎么能写机器文件 – peaceman

+1

对于你的简单情况,你想一个名为'machinefile'的文件用单行'localhost:8'。然后运行'mpiexec -f machinefile -n 8/path/to/application arguments'。 – Novelocrat

+0

现在我有编译问题。错误是usr/bin/ld:找不到-lcr collect2:ld返回1退出状态进程管理器工作但编译器现在不工作! – peaceman

相关问题