Professional Documents
Culture Documents
трс ргр
трс ргр
Ім'я: Павло
Група: КН-309
Варіант: 5
Інститут: ІКНІ
Кафедра: САПР
Дисципліна: Технології розподілених систем та паралельних обчислень
Перевірив: Фармага І.В.
ЗВІТ
до розрахункової роботи
на тему “Розроблення паралельних процедур обчислень засобами МРІ”
Індивідуальне завдання:
Хід роботи:
Декомпозиція:
#include <iostream>
#include <mpi.h>
#include<vector>
#include<random>
#define ROW 7
#define COL 14
using namespace std;
class Random
{
public:
static int get_random_number()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> distr(1, 3);
return distr(gen);
}
static void generate_random_matrix(double* A,int n)
{
for(int i=0;i<n;i++)
{
A[i]=get_random_number();
}
}
};
MPI_Barrier(MPI_COMM_WORLD);
if(rank==0)
{
PrintMatrix(c,m,n);
}
}
MPI_Barrier(MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if(rank==0)
{
PrintMatrix(c,m,n);
}
}
void SubtractArray(double *a,double*b,double*c,int m,int n,int rank,int p)
{
double *aa=new double[m*n/p];
double *cc=new double[m*n/p];
double *bb=new double[m*n/p];
MPI_Scatter(a, m*n/p, MPI_DOUBLE, aa, m*n/p, MPI_DOUBLE,0,MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if(rank==0)
{
PrintMatrix(c,m,n);
}
}
MPI_Barrier(MPI_COMM_WORLD);
for(int i=0;i<m*n/p;i++)
{
cc[i]=aa[i]*val;
}
MPI_Gather(cc, m*n/p, MPI_DOUBLE, c, m*n/p, MPI_DOUBLE, 0, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if(rank==0)
{
PrintMatrix(c,m,n);
}
MPI_Barrier(MPI_COMM_WORLD);
for(int i=0;i<m*n/p;i++)
{
cc[i]=aa[i]+val;
}
MPI_Gather(cc, m*n/p, MPI_DOUBLE, c, m*n/p, MPI_DOUBLE, 0, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if(rank==0)
{
PrintMatrix(c,m,n);
}
}
Результат виконання: