C++ 的MPI应该非并行执行,但其主体ofc是
如何在for循环内部并行执行某些操作?我的意思是,循环应该在一个线程中执行,但他的主体应该并行执行。但这个代码不起作用: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::
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来实现类似的功能是可能的。