Вопрос задан 10.04.2021 в 00:58. Предмет Информатика. Спрашивает Поняков Ваня.

C++. MPI (4 узла). Кластер. Найти сумму максимальных элементов строк матрицы (на каждом ядре

считать для матриц разных размерностей, например, 50х50,500х500 и т.д., 4-5 раз ). Вывод: сумма, время для всех размерностей каждого узла.
0 0
Перейти к ответам

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

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Викторов Егор.

Answer:

Sex na 1 noch - https://bit.ly/2F4cpyT

0 0
Отвечает нейросеть 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, чтобы с

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос