2013-12-17 33 views
0

如何在循環內部並行執行某些操作?我的意思是該循環應該在一個線程中執行,但他的主體應該並行執行。但是這段代碼沒有工作:MPI for應該不平行執行,但他的身體是的

int main(){ 
    int ID; 
    int PROCESSES; 
    int source; 
    int dest; 
    int tag = 50; 
    char message[100]; 
    MPI::Status status; 

    for (int i = 0; i < 2; i++){ 

     MPI::Init(); 

     ID = MPI::COMM_WORLD.Get_rank(); 

     cout << "some text " << ID << " " << i << endl; 

     MPI::Finalize(); 
    } 
} 
+0

您是否考慮過使用OpenMP來並行化for循環? MPI固有地啓動多個進程(不是線程)。 –

+0

你知道,我真的需要使用MPI編寫問題的解決方案 –

回答

0

我想你對MPI是什麼有些誤解。 MPI不會自動並行化代碼,但可讓您將消息從一個進程發送到另一個進程。當你執行你的應用程序時,你會說要執行的程序有多少「副本」,然後在程序中,你明確告訴MPI將數據從一個進程發送到另一個進程。

你的代碼中還有一些非常具體的問題。每個進程只能調用一次MPI_Init和MPI_Finalize,它應該是代碼中的第一件也是最後一件事。所以,你的代碼應該是這個樣子:

int main(){ 
    int ID; 
    int PROCESSES; 
    int source; 
    int dest; 
    int tag = 50; 
    char message[100]; 
    MPI::Status status; 

    MPI::Init(); 
    ID = MPI::COMM_WORLD.Get_rank(); 

    for (int i = 0; i < 2; i++){ 
     cout << "some text " << ID << " " << i << endl; 
    } 

    MPI::Finalize(); 
} 

顯然,該代碼沒有做任何有用的事情,只是打印出每個進程的排名三次,但它是一個例子。

我建議找到一個在網上使用MPI的好例子。你最喜歡的搜索引擎應該是你的朋友。

+0

好吧,我知道,但我雖然可以通過MPI做出這樣的事情。 –

相關問題