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

MPI, Bcast. Завершение программы

30.03.2021, 01:48. Показов 2048. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!


Задание:

При получении стоп-сигнала 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
#include <stdio.h>
#include <mpi.h>
#include <iostream>
 
using namespace std;
int main(int argc, char* argv[]) {
    srand(4541);
    int root = 0;
    int ProcNum, ProcRank, RecvRank;
    MPI_Status Status;
    MPI_Init(&argc, &argv);// MPI_Init — обязательна для вызова, так как выполняет инициализацию библиотеки MPI.
    double t1, t2, dt;
    MPI_Comm_size(MPI_COMM_WORLD, &ProcNum); // количество процессов в коммуникаторе
    MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank); //MPI_Comm_rank — возвращает идентификатор(номер, ранг) процесса в рамках заданного коммуникатора.
 
 
    int data = NULL;
    bool run = true;
    while (run) {
        for (int i = 1; i < ProcNum; i++) {
            t1 = MPI_Wtime();
            MPI_Barrier(MPI_COMM_WORLD);
            if (ProcRank != 0) {
                data = rand() % 500 + (-250);
                cout << endl << "Process " << ProcRank << " Generated:  " << data << endl;
                if (data == -1) {
                    cout << "Generated stop signal_______________________________________: " << data << endl;
                }
            }
            MPI_Bcast(&data, 1, MPI_INT, ProcRank, MPI_COMM_WORLD);
            cout << "Proc: " << ProcRank << "  Recieved data: " << data << endl;
 
            t2 = MPI_Wtime();
            cout << "Process 0 is running";
            if (data == -1) {
                run = false;
                    break;
            }
        }
        
    }
    cout << "Time for one iteration b_cast in " << ProcRank << " process: " << t2 - t1;
    MPI_Barrier(MPI_COMM_WORLD);
    MPI_Finalize();
    return 0;
}
Вопрос:
Почему нулевой процесс ничег оне получает?

Как я понял, он не получает -1, из-за этого программа не завершается корректно.
Но если отправитель сигнала - 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
#include <stdio.h>
#include <mpi.h>
#include <iostream>
 
 
using namespace std;
int main(int argc, char* argv[]) {
    srand(4541);
    int root = 0;
    int ProcNum, ProcRank, RecvRank;
    MPI_Status Status;
    MPI_Init(&argc, &argv);// MPI_Init — обязательна для вызова, так как выполняет инициализацию библиотеки MPI.
    double t1, t2, dt;
    MPI_Comm_size(MPI_COMM_WORLD, &ProcNum); // количество процессов в коммуникаторе
    MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank); //MPI_Comm_rank — возвращает идентификатор(номер, ранг) процесса в рамках заданного коммуникатора.
 
 
    int data = NULL;
 
    while (true) {
        t1 = MPI_Wtime();
        if (ProcRank == 0) {
            data = rand() % 500 + (-250);
            if (data == -1) {
                cout << "Generated stop signal_______________________________________: " << data << endl;
            }
        }
        MPI_Bcast(&data, 1, MPI_INT, root, MPI_COMM_WORLD);
        MPI_Barrier(MPI_COMM_WORLD);
        t2 = MPI_Wtime();
 
        cout << "Proc: " << ProcRank << "  Recieved data: " << data << endl;
        if (data == -1)
            break;
    }
    cout << "Time for one iteration b_cast in "<<ProcRank<<" process: " << t2 - t1;
    MPI_Barrier(MPI_COMM_WORLD);
    MPI_Finalize();
    return 0;
}
Как принимать управляющие сигналы от побочных процессов и завершить все при получении сигнала -1 нулевым процессом?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2021, 01:48
Ответы с готовыми решениями:

Завершение потока после завершения программы
Создал поток в котором есть безконечный цикл, я в программе сразу закрываю хендл на поток чтобы...

Сборка программы с MPI
Никак не могу собрать простейшую программу с MPI типа Hello world. Компиляция проходит вроде...

C++ Компиляция простой MPI программы
Доброго вечера, в DevC++ 5.4.2 с использованием технологии MPI, MPICH2 (Настройка компилятора MinGW...

Завершение программы
Как завершить программу из другой функции(не Main)? Пробовал использовать system(&quot;exit&quot;);, но не...

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

завершение программы
помогите сообразить #include &lt;StdAfx.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Error LNK2019 при компиляции программы MPI
Здравствуйте! Это уже становится чересчур.. все решения перепробованы. Вобщем, на VS 2012...

Аварийное завершение программы
Программа завершается аварийно, но в файл записывает требуемую информацию. Укажите косяки. В...

Неожиданное завершение программы
простенькая программа, нужно ввести двумерный массив, после чего во втором массиве написать в iый...

Принудительное завершение программы
#include &lt;iostream&gt; using namespace std; int main() { setlocale (0,&quot;&quot;); int N; cout &lt;&lt;...

Аварийное завершение программы
#include &quot;B.h&quot; #include &quot;D1.h&quot; #include &quot;D2.h&quot; #include &lt;iostream&gt; #include &lt;typeinfo&gt; ...


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

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