Создание приложений для распределенной обработки данных. Результаты вычислений

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

Министерство Образования Республики Беларусь

Гомельский государственный технический университет имени П.О.Сухого

Кафедра “Информационные технологии”

Лабораторная работа  №7

“Создание приложений для распределенной обработки данных”

Выполнил: студент ИТ-32

Принял: преподаватель

Гомель 2014

Цель: необходимо разработать распределенное приложение MPI, осуществляющее решение СЛАУ согласна варианта.

Ход работы

Вариант 18

Гаусс блочный

Результаты вычислений отображены на рисунке 1.

Рисунок 1 – Результаты вычислений

Код приложения расположен в приложении А.

Вывод: в результате выполнения данной лабораторной работы было разработано распределенное приложение MPI, осуществляющее решение СЛАУ согласна варианта.


ПРИЛОЖЕНИЕ А

(обязательное)

Код программы

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

#include <windows.h>

#include <mpi.h>

#include <time.h>

int main(int argc, char** argv)

{

/* .......Variables Initialisation ......*/

time_t startTime = time(NULL);

MPI_Status status;

int n_size, NoofRows_Bloc, NoofRows, NoofCols;

int Numprocs, MyRank, Root = 0;

int irow, jrow, icol, index, ColofPivot, neigh_proc;

double **Matrix_A, *Input_A, *Input_B, *ARecv, *BRecv;

double *Output, Pivot;

double *X_buffer, *Y_buffer;

double *Buffer_Pivot, *Buffer_bksub;

double tmp;

FILE *fp;

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &MyRank);

MPI_Comm_size(MPI_COMM_WORLD, &Numprocs);

if (MyRank == 0)

{

if ((fp = fopen("./test1.A", "r")) == NULL)

{

printf("Can't open input matrix file");

exit(-1);

}

fscanf(fp, "%d %d", &NoofRows, &NoofCols);

n_size = NoofRows;

Matrix_A = new double*[n_size];

for (irow = 0; irow < n_size; irow++)

{                           

Matrix_A[irow] = new double[n_size];

for (icol = 0; icol < n_size; icol++)

fscanf(fp, "%lf", &Matrix_A[irow][icol]);

}

fclose(fp);

if ((fp = fopen("./test1.B", "r")) == NULL)

{

printf("Can't open input vector file");

exit(-1);

}

fscanf(fp, "%d", &NoofRows);

n_size = NoofRows;

Input_B = new double[n_size];

for (irow = 0; irow<n_size; irow++)

fscanf(fp, "%lf", &Input_B[irow]);

fclose(fp);

Input_A = new double[n_size * n_size];

index = 0;

for (irow = 0; irow<n_size; irow++)

for (icol = 0; icol<n_size; icol++)

Input_A[index++] = Matrix_A[irow][icol];

}

MPI_Bcast(&NoofRows, 1, MPI_INT, Root, MPI_COMM_WORLD);

MPI_Bcast(&NoofCols, 1, MPI_INT, Root, MPI_COMM_WORLD);

if (NoofRows != NoofCols)

{

MPI_Finalize();

if (MyRank == 0)

{

printf("Input Matrix Should Be Square Matrix ..... \n");

}

exit(-1);

}

MPI_Bcast(&n_size, 1, MPI_INT, 0, MPI_COMM_WORLD);

if (n_size % Numprocs != 0)

{

MPI_Finalize();

if (MyRank == 0)

{

printf("Matrix Can not be Striped Evenly ....No of processors (p) should divide the size of the Input matrix (n)\n");

}

exit(-1);

}

NoofRows_Bloc = n_size / Numprocs;

ARecv = new double[NoofRows_Bloc * n_size];

BRecv = new double[NoofRows_Bloc];

MPI_Scatter(Input_A, NoofRows_Bloc * n_size, MPI_DOUBLE, ARecv, NoofRows_Bloc * n_size,

MPI_DOUBLE, 0, MPI_COMM_WORLD);

MPI_Scatter(Input_B, NoofRows_Bloc, MPI_DOUBLE, BRecv, NoofRows_Bloc, MPI_DOUBLE, 0,

MPI_COMM_WORLD);

Buffer_Pivot = new double[NoofRows_Bloc + 1 + n_size];

for (neigh_proc = 0; neigh_proc < MyRank; neigh_proc++)

{

MPI_Recv(Buffer_Pivot, NoofRows_Bloc * n_size + 1 + NoofRows_Bloc, MPI_DOUBLE, neigh_proc,

neigh_proc, MPI_COMM_WORLD, &status);

for (irow = 0; irow < NoofRows_Bloc; irow++)

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.