2011-10-12 54 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

相關問題