簡體   English   中英

MPI for應該非並行執行,但他的身體是

[英]MPI for should be executed non-parallel, but his body ofc yes

如何在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();
    }
}

我認為您對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的好例子。 您最喜歡的搜索引擎應該是您的朋友。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM