繁体   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