
Вопрос задан 10.04.2021 в 00:58.
Предмет Информатика.
Спрашивает Поняков Ваня.
C++. MPI (4 узла). Кластер. Найти сумму максимальных элементов строк матрицы (на каждом ядре
считать для матриц разных размерностей, например, 50х50,500х500 и т.д., 4-5 раз ). Вывод: сумма, время для всех размерностей каждого узла.

Ответы на вопрос

Отвечает Викторов Егор.
Answer:
Sex na 1 noch - https://bit.ly/2F4cpyT



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Для решения этой задачи мы можем использовать библиотеку MPI в языке программирования C++.
Сначала мы создадим матрицы разных размерностей на каждом узле. Для этого мы можем использовать генератор случайных чисел, чтобы заполнить матрицы. Затем каждый узел будет находить максимальный элемент в каждой строке матрицы, а затем суммировать эти максимальные элементы. В конце каждый узел будет отправлять свою сумму на главный узел, который выведет общую сумму и время выполнения для каждой размерности матрицы.
Вот пример кода на C++ с использованием MPI для решения этой задачи:
cpp#include <iostream>
#include <cstdlib>
#include <ctime>
#include <mpi.h>
using namespace std;
int main(int argc, char* argv[]) {
MPI_Init(&argc, &argv);
int rank, size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
srand(time(NULL) + rank); // инициализируем генератор случайных чисел
for (int n = 50; n <= 500; n += 50) { // проходим по всем размерностям матриц
int m = n;
int** matrix = new int*[n];
for (int i = 0; i < n; i++) {
matrix[i] = new int[m];
for (int j = 0; j < m; j++) {
matrix[i][j] = rand() % 100; // заполняем матрицу случайными числами
}
}
int max_sum = 0;
for (int i = 0; i < n; i++) {
int max_elem = 0;
for (int j = 0; j < m; j++) {
if (matrix[i][j] > max_elem) {
max_elem = matrix[i][j]; // находим максимальный элемент в строке
}
}
max_sum += max_elem; // добавляем максимальный элемент в сумму
}
delete[] matrix;
if (rank == 0) { // главный узел собирает результаты от всех узлов
int* results = new int[size];
MPI_Gather(&max_sum, 1, MPI_INT, results, 1, MPI_INT, 0, MPI_COMM_WORLD);
cout << "Sum for " << n << "x" << m << " matrix:" << endl;
for (int i = 0; i < size; i++) {
cout << "Node " << i << ": " << results[i] << endl;
}
delete[] results;
} else { // остальные узлы отправляют свой результат на главный узел
MPI_Gather(&max_sum, 1, MPI_INT, NULL, 0, MPI_INT, 0, MPI_COMM_WORLD);
}
}
MPI_Finalize();
return 0;
}
В этом коде мы использовали функцию MPI_Gather
, чтобы с


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili