MPI:如何启动将在不同线程中执行的三个函数

A.N*_*R.I 2 c++ multithreading mpi

我有3个功能和4个核心.我希望使用MPI和C++在新线程中执行每个函数我写这个

int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
size--;
if (rank == 0)
{
    Thread1();
}
else 
{
    if(rank == 1)
    {
        Thread2();
    }
    else
    {
        Thread3();
    }
}
MPI_Finalize();
Run Code Online (Sandbox Code Playgroud)

但它只执行Thread1().我该如何改变代码?

谢谢!

Aco*_*rbe 6

打印以筛选变量的当前值size(可能不会减少它),您会发现1.那就是:"有1进程运行".

您可能以错误的方式运行已编译的代码.考虑使用mpirun (或者mpiexec,取决于您的MPI实现)来执行它,即

 mpirun -np 4 ./MyCompiledCode
Run Code Online (Sandbox Code Playgroud)

-np参数指定的,你会开始的进程数量(这样做,你 MPI_Comm_size将有4个像您期望的).


但是,目前,由于C++,您没有明确使用任何内容.您可以考虑一些MPI的C++绑定,例如Boost.MPI.


我对你提供的代码做了一些工作.我改变了一点产生这个 工作的 mpi代码(我提供了大写字母的一些必要的修正).

供参考:

请注意,这stdout可能会搞砸.

您确定要以正确的方式编译代码吗?