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().我该如何改变代码?
谢谢!
打印以筛选变量的当前值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代码(我提供了大写字母的一些必要的修正).
供参考:
汇编(在gcc,mpich下):
$ mpicxx -c mpi1.cpp
$ mpicxx -o mpi1 mpi1.o
Run Code Online (Sandbox Code Playgroud)执行
$ mpirun -np 4 ./mpi1
Run Code Online (Sandbox Code Playgroud)产量
size is 4
size is 4
size is 4
2 function started.
thread2
3 function started.
thread3
3 function ended.
2 function ended.
size is 4
1 function started.
thread1
1 function ended.
Run Code Online (Sandbox Code Playgroud)请注意,这stdout可能会搞砸.
您确定要以正确的方式编译代码吗?
| 归档时间: |
|
| 查看次数: |
704 次 |
| 最近记录: |