93 / 0 / 0
Регистрация: 29.10.2015
Сообщений: 15
1

MPI рассылка сообщения случайному процессу

17.11.2016, 03:06. Показов 1195. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
У меня есть задача на c++ с использованием MPI - "Процесс 0 генерирует сообщение и посылает другому случайному процессу из группы. Процесс-приёмник посылает его так же случайному процессу."
Не могу разобраться почему мой код не работает, почему то после передачи сообщение от ненулевого процесса следующему, программа зависает. Помогите пожалуйста найти ошибку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include "mpi.h"
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
 
int main(int argc, char **argv)
{
   int rank,numprocs;
   int module = 0, fMasmSize = 0;
   int max = 0;
   int *masm;
   double startwtime = 0.0;
   double endwtime;
   int masmSize = 0;
   MPI_Status status;
   if (int rc= MPI_Init(&argc, &argv))
   {
     cout << "Ошибка запуска, выполнение остановлено " << endl;
     MPI_Abort(MPI_COMM_WORLD, rc);
   }
   MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
   if(numprocs<2)
   {
    cout<<"Подключите больше одного процессора"<<endl;
        MPI_Finalize();
    return -1;
   }
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   int mes = 0;
   int rand_value;
   int size_mess = 0;   
   if(rank == 0)
   {
    rand_value = rand()%(numprocs-1) + 1;
    mes++;
    cout<<"Процесс № "<<rank<<" отправляет сообщение "<<mes<<" процессу № "<<rand_value<<"\n";
    MPI_Send(&mes, 1, MPI_INT, rand_value, 1, MPI_COMM_WORLD);
    
    
    
   }
   while(true)
{
   if(rank!=0)
   {
    MPI_Probe( MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status );
    MPI_Get_count( &status, MPI_INT, &size_mess );
    
    MPI_Recv(&mes, size_mess, MPI_INT,MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status);
    cout<<"Процесс № "<<rank<<" принял сообщение "<<mes<<"\n"<<"\n";
    
    rand_value = rand()%(numprocs-1) + 1;
    mes++;
    if(mes == 5)
    {
           MPI_Finalize();
           return 0;
    }
    cout<<rand_value<<"рандомное значение\n";
    cout<<"Процесс № "<<rank<<" отправляет сообщение "<<mes<<" процессу № "<<rand_value<<"\n";
    MPI_Send(&mes, 1, MPI_INT, rand_value, 1, MPI_COMM_WORLD);
    
        
   }
}
      MPI_Finalize();   
}
Добавлено через 4 часа 10 минут
Вроде разобрался, как mpi_send блокирует процесс пока сообщение не будет получено, следовательно если процесс пытается отослать сообщение сам себе возникает тупиковая ситуация. Я правильно понял?
P.S. с использованием mpi_isend всё заработало
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2016, 03:06
Ответы с готовыми решениями:

Вопрос про mpi (рассылка элементов массива)
Привет всем, вопрос у меня следующий: можно ли с помощью mpi организовать одновременный...

MPI программы: неблокирующие сообщения
...доброго времени суток, уважаемые форумчане!... имеется следующая задача: в исходном тексте...

Рассылка одного сообщения нескольким процессам
Здравствуйте! Задание звучит следующим образом &quot;Рассылка одного сообщения нескольким процессам&quot;....

Автоматическая рассылка сообщения на почту после регистрации
Доброго времени суток, уважаемые форумчане! Возник такой вопрос: как после регистрации...

0
17.11.2016, 03:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2016, 03:06
Помогаю со студенческими работами здесь

Рассылка СМС пользователям Exchange имеющим непрочитанные сообщения
Добрый день. С рассылкой скриптом смс сообщений через сервис email2sms разобрался. но как...

Рассылка сообщения в сеть, зная только открытые порты других устройств
Добрый день. Скажите пожалуйста, как послать сообщение в сеть всем пк. При этом я знаю только...

MPI - Как при неблокирующих обменах сделать чтобы процесс ожидал приема сообщения?
Вот написал так(подсмотрел в фортране пример) ожидание есть вроде но оно не заканчивается и в итоге...

Поиск по случайному деререву
Написать программу поиска по случайному дереву при обратном порядке обхода его. Дерево представлено...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru