gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:52:57 34 4
gpt4 key购买 nike

我有 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com