Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2020, 10:30   #1
Progway_
Новичок
Джуниор
 
Регистрация: 07.04.2020
Сообщений: 1
По умолчанию Поиск минимального элемента в матрице с использованием MPI в Си

Задача состоит в том, чтобы написать программу для поиска наименьшего элемента динамического двумерного массива используя технологию MPI. Последовательный вариант программы написал, а вот с распараллеливанием испытываю трудности
Код:
#include <stdio.h>
#include "mpi.h"
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
    setlocale(LC_ALL, "RUS");
    int rows, cols, min, value, n;
    int done = 0, numprocs, rank, i, j;
    srand(time(NULL));
    double startwtime = 0.0, endwtime; 
    int namelen; 
    char processor_name[MPI_MAX_PROCESSOR_NAME]; 
    MPI_Init(&argc,&argv); 
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs); 
    MPI_Comm_rank(MPI_COMM_WORLD,&rank); 
    MPI_Get_processor_name(processor_name,&namelen); 
        while (!done) { 
        if (rank == 0) { 
            printf("Введите размерность матрицы\n");
            scanf("%d",&rows);
            scanf("%d",&cols);
            startwtime = MPI_Wtime(); 
        }
        if (rows == 0 || cols == 0) {
            done = 1; 
        } else { 
            int **arr = (int **) malloc(rows * sizeof(int*));    //Создание двумерного динамического массива
                for (i = 0; i < rows; i++) {
                    arr[i] = (int *) malloc(cols * sizeof(int));
            }
            for (i = 0; i < rows; i++) {         //заполнение массива рандомными значениями
                for (j = 0; j < cols; j++) {
                    arr[i][j] = rand();
                }
            }
            for (i = 0; i < rows; i++) {      // вывод массива на экран для наглядности
                for (j = 0; j < cols; j++) {
                    printf("%d\n",arr[i][j]);
                }
            }
            min = arr[0][0];                                                //выбор минимального значения как первого элемента матрицы
            for (i = 0; i < rows; i++) {                              //цикл поиска минимального значения
                for (j = 0; j < cols; j++) {                          //проходит по всей матрице
                    if(min > arr[i][j]){min = arr[i][j];}         //Необходимо распараллелить
                }
            }    
            if (rank == 0) { 
                endwtime = MPI_Wtime();
                printf("min = %d\n", min); 
                printf("wall clock time = %f\n", endwtime-startwtime); 
                fflush( stdout ); 
                for(i = 0; i < rows; i++) {
                        free(arr[i]);
                }
                free(arr);
            }
        }
    }
    MPI_Finalize();
    return 0;
}
Progway_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста решить две задачки - поиск минимального значения в векторе и поиск/перестановка положительных элементов в матрице Ruslan Rutkovsky Паскаль, Turbo Pascal, PascalABC.NET 6 12.05.2017 23:43
C#. Поиск минимального элемента Annet1 C# (си шарп) 4 15.06.2016 21:45
Поиск минимального элемента в дереве (СИ) Sterben Помощь студентам 0 03.06.2015 16:05
Программа на Си на нахождение минимального элемента и перемещения его перед максимальным с использованием указателя на список lst EroAlex Помощь студентам 0 28.12.2011 13:37
Поиск минимального элемента в матрице F1eCSo Помощь студентам 0 04.02.2010 17:20