почему моя программа зависает, когда я использую MPI_Send и MPI_Recv? - PullRequest
1 голос
/ 27 августа 2011

Существует простая коммуникационная программа, которую я использовал в 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;
}

1 Ответ

2 голосов
/ 29 августа 2011

Вам, вероятно, также необходимо передать аргумент, такой как -n 2, в команду mpiexec.exe, чтобы дать ему команду запустить 2 процесса.Я считаю, что аргумент -hosts - это просто альтернативный способ указать хосты, на которых может выполняться ваша программа, а не количество процессов, которые будут созданы.

...