Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 的MPI应该非并行执行,但其主体ofc是_C++_Multithreading_Mpi - Fatal编程技术网

C++ 的MPI应该非并行执行,但其主体ofc是

C++ 的MPI应该非并行执行,但其主体ofc是,c++,multithreading,mpi,C++,Multithreading,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::

如何在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();
}
显然,该代码没有做任何有用的事情,只是将每个进程的排名打印三次,但这只是一个示例


我建议找到一个在web上使用MPI的好例子。您最喜欢的搜索引擎应该是您在这里的朋友。

您是否考虑过使用OpenMP并行化for循环?MPI固有地启动多个进程而不是线程。你们知道,我真的需要用MPIOk来编写问题的解决方案,我知道,但我认为通过MPI来实现类似的功能是可能的。