为什么当我使用 MPI_Send 和 MPI_Recv 时我的程序挂起?

发布于 2024-12-01 20:35:03 字数 1114 浏览 3 评论 0原文

我在 MPICH2 中使用了一个简单的通信程序。当我使用 执行程序时

mpiexec.exe -hosts 2 o00 o01  -noprompt mesajlasma.exe

程序启动但没有结束。通过使用资源监视器程序,我可以看到它仍在主机“o01”上运行。当我按 CTRL + c 时,它就结束了。然后我可以看到我的程序运行正常,

为什么我的程序没有结束。卡在哪里了?为什么当我使用 MPI_Send 和 MPI_Recv 时我的程序挂起?

提前致谢

// mesajlasma.cpp

#include "stdafx.h"
#include "string.h"
#include "mpi.h"

int main(int argc, char* argv[])
{

    int  nTasks, rank;
    char mesaj[20];
    MPI_Status status;

    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&nTasks);
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);

    //printf ("\nNumber of threads = %d, My rank = %d\n", nTasks, rank);

    if(rank == 1)
    {
        strcpy_s(mesaj, "Hello World");
        if (MPI_SUCCESS==MPI_Send(mesaj, strlen(mesaj)+1, MPI_CHAR, 0, 99, MPI_COMM_WORLD)) printf("_OK!_\n");
    }


    if(rank == 0)
    {
        MPI_Recv(mesaj, 20, MPI_CHAR, 1, 99, MPI_COMM_WORLD, &status);
        printf("Received Message:%s\n", mesaj);
    }

    MPI_Finalize();

    return 0;
}

There is a simple communication program that I used in MPICH2. when I execute the program by using

mpiexec.exe -hosts 2 o00 o01  -noprompt mesajlasma.exe

The program starts but does not end. I can see it is still running on the host computer "o01" by using resource monitor program. When I press CTRL + c, it is ended. Then I can see that my program ran properly

Why doesn't my program end. Where does it stuck? why does my program hang when I use MPI_Send and MPI_Recv?

Thanks in advance

// mesajlasma.cpp

#include "stdafx.h"
#include "string.h"
#include "mpi.h"

int main(int argc, char* argv[])
{

    int  nTasks, rank;
    char mesaj[20];
    MPI_Status status;

    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&nTasks);
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);

    //printf ("\nNumber of threads = %d, My rank = %d\n", nTasks, rank);

    if(rank == 1)
    {
        strcpy_s(mesaj, "Hello World");
        if (MPI_SUCCESS==MPI_Send(mesaj, strlen(mesaj)+1, MPI_CHAR, 0, 99, MPI_COMM_WORLD)) printf("_OK!_\n");
    }


    if(rank == 0)
    {
        MPI_Recv(mesaj, 20, MPI_CHAR, 1, 99, MPI_COMM_WORLD, &status);
        printf("Received Message:%s\n", mesaj);
    }

    MPI_Finalize();

    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

菩提树下叶撕阳。 2024-12-08 20:35:03

您可能还需要将 -n 2 之类的参数传递给 mpiexec.exe 命令,以指示它启动 2 个进程。我相信 -hosts 参数只是指定程序可以运行的主机的另一种方法,而不是指定将创建多少个进程。

You probably also need to pass an argument like -n 2 to your mpiexec.exe command in order to instruct it to launch 2 processes. I believe that the -hosts argument is just an alternative way to specify the hosts on which your program can run, not how many processes will be created.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文