我有 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();
但它只执行 Thread1()。我必须如何更改代码?
谢谢!
最佳答案
打印以筛选变量 size
的当前值(可能没有递减),您会发现 1
。即:“有 1
进程正在运行”。
您可能以错误的方式运行编译后的代码。考虑使用 mpirun
(或 mpiexec
,取决于您的 MPI 实现)来执行它,即
mpirun -np 4 ./MyCompiledCode
-np
参数指定您将启动的进程数(这样做,您的 MPI_Comm_size
将如您所期望的那样为 4)。
不过目前,由于 C++,您没有使用任何明确的东西。您可以考虑 MPI 的一些 C++ 绑定(bind),例如 Boost.MPI
.
我在 code 上做了一些工作你提供。我稍微改变了一下,生成了 this 工作 mpi 代码(我用大写字母提供了一些需要的更正)。
仅供引用:
编译(在 gcc、mpich 下):
$ mpicxx -c mpi1.cpp $ mpicxx -o mpi1 mpi1.o
执行
$ mpirun -np 4 ./mpi1
输出
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.
请注意 stdout
可能被搞砸了。
您确定您以正确的方式编译代码吗?
关于c++ - MPI:如何启动将在不同线程中执行的三个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13108937/