С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 1
Регистрация: 08.03.2020
Сообщений: 170
1

В программе вместо нескольких процессов запускается один

23.05.2022, 11:15. Показов 283. Ответов 0

Author24 — интернет-сервис помощи студентам
Всем привет.
У меня есть программа, в которой два процесса многократно обмениваются сообщениями длиной n байт. Программа использует технологию MPI. Проблема заключается в том, что используется только один процесс вместо 2х, хотя бы.

В чем может быть проблема?

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
#include "mpi.h"    
#include <iostream>
#include <conio.h>
#include <chrono>
 
using namespace std;
 
int main(int argc, char **argv)
{
 
    int rank; // rank of the processor
    int * sbuf = new int[10000000];
    int * rbuf = new int[10000000];
    int arr[4] = { 10, 1000, 100000, 10000000 };
    int size,next_proc;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank); //what rank is the current processor
    MPI_Comm_size(MPI_COMM_WORLD, &size); //how many processors
    next_proc = (rank + 1) % size;
    MPI_Status stat;
    //cout << MPI_Comm_size(MPI_COMM_WORLD, &size);
    for (int i = 0; i < 4; i++)
    {
        auto start = std::chrono::high_resolution_clock::now();
        // время перед началом выполнения
        MPI_Sendrecv(sbuf, arr[i], MPI_INT, next_proc, 0,
            rbuf, arr[i], MPI_INT, next_proc, 0, MPI_COMM_WORLD, &stat);
        auto elapsed = std::chrono::high_resolution_clock::now() - start; // время работы
        long long microseconds = std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count(); // результат в микросекундах
        cout << "Process " << rank << " gets message of " << arr[i] << " bytes in " << microseconds << " mks" << endl;
    }
    MPI_Finalize();
    delete[] sbuf;
    delete[] rbuf;
    _getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2022, 11:15
Ответы с готовыми решениями:

Как проверить запущен ли один из нескольких процессов?
Как проверить запущен ли один из нескольких процессов? есть 4 процесса которые нужно...

Цикл выполняется один раз вместо нескольких
Есть папка с 354 файлами Нужно,чтобы стало 299 void Data::renewFiles() { QDir dir; ...

Цикл выполняется один раз вместо нескольких
Есть папка из 354 файлов,нужно,чтобы осталось 299 void Data::renewFiles() { QDir dir; ...

Один запрос для вывода вместо нескольких
Здравствуйте. Пример таблицы в phpmyadmin id | title | group_id 1 | Кот | 0 2 |Рысь| 1 3 | Пес...

Один большой динамический массив вместо нескольких меньшего размера
Уважаемые форумчане, Прошу помочь советом. Интересует ответы на вопросы: Возможно ли? Если...

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

В односвязный список записывается только один элемент вместо нескольких
Мне нужно, чтобы в односвязный список записывалось сразу несколько элементов, но вместо этого...

Устанавливается связь один-к-одному вместо один-ко-многим
Здравствуйте, скажите пожалуйста почему между данными таблицами устанавливается связь один-к-одному...

Замена нескольких символов в строке, необязательно один на один
Здравствуйте. Помогите пожалуйста написать код для замены нескольких символов в заданной строке. К...

Pipe для нескольких процессов
Народ подскажите можно ли использовать именной pipe FIFO более, чем для 2 процессов? Для того,...

Поиск нескольких процессов сразу
У меня есть данный код if (GetProcess(NameProcess)) //Тут происходит поиск процесса ...


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

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