Форум программистов, компьютерный форум, киберфорум
MPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 1
Регистрация: 17.11.2014
Сообщений: 30
1

MPI зависает на Recv

02.03.2016, 17:11. Показов 2082. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код:
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
int _tmain(int argc, char* argv [])
{
    int myrank, ranksize, i;
    MPI_Status status;
    MPI_Init(&argc, &argv);//Инициализация MPI
    //Определяем свой номер в группе:
    MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
    //Определяем размер группы:
    MPI_Comm_size(MPI_COMM_WORLD, &ranksize);
    cout << ranksize << endl;
    long split;//Разделитель между двумя частями массива для слияния
    long ub;//Правая граница части массива для сортировки
    long size;//размер массива
    int* mass;
 
    if (!myrank)
    {//Это процесс-мастер
 
        cout << "BBeguTe PA3MEP\n";
        do {
            fflush(stdin); cin.clear();
            size = 0;
            cin >> size;
            if (size <= 0)
                cout << "HeBePHbIu BBog, noBTopu\n";
        } while (size <= 0);
 
    }
 
    mass = new int;
    delete mass;
    ranksize = 3;
 
    if (!myrank) {
        mass = new int[size];
        size = loadFromFile("input.txt", mass, size);
    }
 
    MPI_Bcast(&size, 1, MPI_LONG, 0, MPI_COMM_WORLD);
 
    if (myrank) {
        mass = new int[size];
    }
 
 
    //Определяем размер диапазона для каждого процесса:
    long step = size / ranksize;
 
    if (!myrank) {
        
        ub = step - 1;
 
        if (ranksize > 1) {
            //Рассылаем исходные данные подчиненным процессам:
            for (i = 1; i < ranksize - 1; i++)
            {
                cout << "master data_size = " << step << endl;
 
                MPI_Send(mass + i * step, step, MPI_INT, i, 98, MPI_COMM_WORLD);
 
                cout << "master sended " << i << endl;
            }
 
            cout << "master data_size = " << size - step * (ranksize - 1) << endl;
 
            MPI_Send(mass + i * step, size - step * (ranksize - 1), MPI_INT, ranksize - 1, 98, MPI_COMM_WORLD);
 
            cout << "master sended " << i << endl;
        }
 
        cout << "master sended all\n";
    }
    else
    {//Это один из подчиненных процессов
        long cursize;
        
        if (myrank == ranksize - 1) {
            cursize = size - step * (ranksize - 1);
        }
        else {
            cursize = step;
        }
 
        ub = cursize - 1;
 
        cout << "slave " << myrank << " size = " << size << " cursize = " << cursize << endl;
 
        //Получаем исходные данные:
        MPI_Recv(mass, cursize, MPI_INT, 0, 98, MPI_COMM_WORLD, &status);//Тут виснет
 
        cout << "slave " << myrank << " received\n";
    }
 
    cout << myrank << " sort\n";
 
..............................................
Вывод на скрине. Почему так?
Миниатюры
MPI зависает на Recv  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2016, 17:11
Ответы с готовыми решениями:

Сокеты: после вызова send программа зависает на функции recv
Извеняюсь за такое назание темы, но уже перепробовал 100 вариантов и постоянно выкидывает данное...

Recv зависает СОКЕТЫ с++
Всем привет, Я создал 2 приложения на Win32 API(клиент/сервер), клиент отправляет текст, а сервер...

ошибка recv
привет, подскажите: есть 2 простеньких работающих скрипта 1-й коннектится к сайту и парсит...

send/recv
Всем доброго времени суток. При написании простейшей клиент-серверной программы с возможностью...

2
1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
02.03.2016, 17:51 2
Cheerd, Попробуй заменить Send на SSend
0
1 / 1 / 1
Регистрация: 17.11.2014
Сообщений: 30
03.03.2016, 17:38  [ТС] 3
Цитата Сообщение от avgoor Посмотреть сообщение
Cheerd, Попробуй заменить Send на SSend
Всё равно виснет

Добавлено через 23 часа 4 минуты
Ошибка была дальше по коду (неправильное destination), и почему-то консоль не успевала вывести то, что я до этой ошибки выводил, удаляйте тему.
0
03.03.2016, 17:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2016, 17:38
Помогаю со студенческими работами здесь

Hook на recv
Здравствуйте. Есть необходимость узнать, что у пользователя в браузере. Добрый человек на хабре...

Работа с Recv()
Всем доброго времени суток. Хочу задать такой вопрос. Например, на клиенте есть: for(;;){ ...

Вектор и recv
вообщем у меня такая проблема, пытаюсь создать массив с помощью вектора и в него запихнуть то что...

recv в listBox
Всем доброго времени суток. Что делать?! Объясните пожалуйста. Клиент посылает серверу сообщение:...


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

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