working
This commit is contained in:
@@ -9,7 +9,7 @@ add_definitions(-DOMPI_SKIP_MPICXX)
|
|||||||
set(HEADER_FILES
|
set(HEADER_FILES
|
||||||
)
|
)
|
||||||
set(SOURCE_FILES
|
set(SOURCE_FILES
|
||||||
)
|
Serialize_Deserialize_Vector.h)
|
||||||
|
|
||||||
add_executable(HW10 ${HEADER_FILES} ${SOURCE_FILES} main.cpp)
|
add_executable(HW10 ${HEADER_FILES} ${SOURCE_FILES} main.cpp)
|
||||||
set_property(TARGET HW10 PROPERTY CXX_STANDARD 11)
|
set_property(TARGET HW10 PROPERTY CXX_STANDARD 11)
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by Brady Bodily on 4/11/20.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "Matrix_Info.h"
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by Brady Bodily on 4/11/20.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef FINALPROJECT_MATRIX_INFO_H
|
|
||||||
#define FINALPROJECT_MATRIX_INFO_H
|
|
||||||
|
|
||||||
class Matrix_Info {
|
|
||||||
static int M, N;
|
|
||||||
double Matrix[0][0];
|
|
||||||
public:
|
|
||||||
Matrix_Info(int m, int n){
|
|
||||||
M = m;
|
|
||||||
N = n;
|
|
||||||
Matrix = Matrix[M][N];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // FINALPROJECT_MATRIX_INFO_H
|
|
||||||
37
FinalProject/Serialize_Deserialize_Vector.h
Normal file
37
FinalProject/Serialize_Deserialize_Vector.h
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
//
|
||||||
|
// Created by Brady Bodily on 4/13/20.
|
||||||
|
//
|
||||||
|
#include <vector>
|
||||||
|
#include<iostream>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
#ifndef HW10_SERIALIZE_DESERIALIZE_VECTOR_H
|
||||||
|
#define HW10_SERIALIZE_DESERIALIZE_VECTOR_H
|
||||||
|
class Serialize_Deserialize_Vector{
|
||||||
|
public:
|
||||||
|
static std::vector<double> Serialize(std::vector<std::vector<double> > data);
|
||||||
|
static std::vector<std::vector<double> > Deserialize(std::vector<double> data);
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<double> Serialize_Deserialize_Vector::Serialize(std::vector<std::vector<double> > data) {
|
||||||
|
std::vector<double>rdata = std::vector<double>(data.size()*data.size());
|
||||||
|
for(int i = 0; i < data.size(); i++){
|
||||||
|
for(int j= 0; j<data.size(); j++){
|
||||||
|
rdata[(i*data.size())+j]=data[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::vector<double> > Serialize_Deserialize_Vector::Deserialize(std::vector<double> data) {
|
||||||
|
std::vector<std::vector<double> > rdata = std::vector<std::vector<double> >(data.size()/2, std::vector<double>( sqrt(data.size())));
|
||||||
|
int index = 0;
|
||||||
|
for(int i = 0; i < sqrt(data.size()); i++){
|
||||||
|
for(int j = 0; j< sqrt(data.size()); j++) {
|
||||||
|
rdata[i][j]=data[index];
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rdata;
|
||||||
|
}
|
||||||
|
#endif // HW10_SERIALIZE_DESERIALIZE_VECTOR_H
|
||||||
Binary file not shown.
Binary file not shown.
@@ -84,6 +84,9 @@
|
|||||||
</MakeCommands>
|
</MakeCommands>
|
||||||
</Target>
|
</Target>
|
||||||
</Build>
|
</Build>
|
||||||
|
<Unit filename="/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/Serialize_Deserialize_Vector.h">
|
||||||
|
<Option target="HW10"/>
|
||||||
|
</Unit>
|
||||||
<Unit filename="/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/main.cpp">
|
<Unit filename="/Users/bradybodily/Repositories/CS5500_Parallel_Programming/FinalProject/main.cpp">
|
||||||
<Option target="HW10"/>
|
<Option target="HW10"/>
|
||||||
</Unit>
|
</Unit>
|
||||||
|
|||||||
Binary file not shown.
@@ -1,20 +1,24 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <mpi.h>
|
#include <mpi.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "Serialize_Deserialize_Vector.h"
|
||||||
|
|
||||||
#define MCW MPI_COMM_WORLD
|
#define MCW MPI_COMM_WORLD
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using sdv = Serialize_Deserialize_Vector;
|
||||||
|
|
||||||
//Problem size
|
//Problem size
|
||||||
int N;
|
int N;
|
||||||
//global variables
|
//global variables
|
||||||
double **A, **B, **AB, **AB_serial;
|
std::vector<std::vector<double> > A = std::vector<std::vector<double> >(0, std::vector<double>(0));
|
||||||
|
std::vector<std::vector<double> > B = std::vector<std::vector<double> >(0, std::vector<double>(0));
|
||||||
|
std::vector<std::vector<double> > AB = std::vector<std::vector<double> >(0, std::vector<double>(0));
|
||||||
|
std::vector<std::vector<double> > AB_serial = std::vector<std::vector<double> >(0, std::vector<double>(0));
|
||||||
|
|
||||||
void print_matrix(double **mat);
|
|
||||||
|
void print_matrix(std::vector<std::vector<double> > mat);
|
||||||
void serial_version();
|
void serial_version();
|
||||||
void compute_interval(int start, int interval);
|
void compute_interval(int start, int interval);
|
||||||
void multiplyMatrix(int rank, int size);
|
void multiplyMatrix(int rank, int size);
|
||||||
@@ -35,20 +39,21 @@ void read_in_matrices() {
|
|||||||
ifstream f("Matrix.txt");
|
ifstream f("Matrix.txt");
|
||||||
f >> N;
|
f >> N;
|
||||||
// Allocate memory
|
// Allocate memory
|
||||||
A = new double *[N];
|
A.resize(N);
|
||||||
for (int i = 0; i < N; ++i)
|
for (int i = 0; i < N; ++i)
|
||||||
A[i] = new double[N];
|
A[i].resize(N);
|
||||||
B = new double *[N];
|
B.resize(N);
|
||||||
for (int i = 0; i < N; ++i)
|
for (int i = 0; i < N; ++i)
|
||||||
B[i] = new double[N];
|
B[i].resize(N);
|
||||||
AB = new double *[N];
|
AB.resize(N);
|
||||||
for (int i = 0; i < N; ++i)
|
for (int i = 0; i < N; ++i)
|
||||||
AB[i] = new double[N];
|
AB[i].resize(N);
|
||||||
AB_serial = new double *[N];
|
AB_serial.resize(N);
|
||||||
for (int i = 0; i < N; ++i)
|
for (int i = 0; i < N; ++i)
|
||||||
AB_serial[i] = new double[N];
|
AB_serial[i].resize(N);
|
||||||
|
|
||||||
// Fill Matricies
|
// Fill Matricies
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < N; i++)
|
for (int i = 0; i < N; i++)
|
||||||
for (int j = 0; j < N; j++)
|
for (int j = 0; j < N; j++)
|
||||||
f >> A[i][j];
|
f >> A[i][j];
|
||||||
@@ -61,7 +66,7 @@ void read_in_matrices() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Function to print matrix
|
//Function to print matrix
|
||||||
void print_matrix(double **mat) {
|
void print_matrix(std::vector<std::vector<double> >mat) {
|
||||||
for (int i = 0; i < N; i++){
|
for (int i = 0; i < N; i++){
|
||||||
for (int j = 0; j<N; j++){
|
for (int j = 0; j<N; j++){
|
||||||
cout << mat[i][j] << " ";
|
cout << mat[i][j] << " ";
|
||||||
@@ -103,6 +108,17 @@ void multiplyMatrix(int rank, int size){
|
|||||||
read_in_matrices();
|
read_in_matrices();
|
||||||
}
|
}
|
||||||
MPI_Bcast(&N, 1, MPI_INT, 0, MCW);
|
MPI_Bcast(&N, 1, MPI_INT, 0, MCW);
|
||||||
|
if(rank) {
|
||||||
|
A.resize(N);
|
||||||
|
for (int i = 0; i < N; ++i)
|
||||||
|
A[i].resize(N);
|
||||||
|
B.resize(N);
|
||||||
|
for (int i = 0; i < N; ++i)
|
||||||
|
B[i].resize(N);
|
||||||
|
AB.resize(N);
|
||||||
|
for (int i = 0; i < N; ++i)
|
||||||
|
AB[i].resize(N);
|
||||||
|
}
|
||||||
// Record start time
|
// Record start time
|
||||||
MPI_Barrier(MCW);
|
MPI_Barrier(MCW);
|
||||||
time1 = MPI_Wtime();
|
time1 = MPI_Wtime();
|
||||||
@@ -117,25 +133,47 @@ void multiplyMatrix(int rank, int size){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Broadcast Matrix B and scatter relevant portions of Matrix A
|
//Broadcast Matrix B and scatter relevant portions of Matrix A
|
||||||
print_matrix(A);
|
std::vector<double> tmpB = std::vector<double>(N*N);
|
||||||
MPI_Bcast(B,N*N,MPI_DOUBLE,0,MCW);
|
|
||||||
MPI_Scatter(A, interval * N, MPI_DOUBLE, &A[rank * interval], interval * N,
|
tmpB = Serialize_Deserialize_Vector::Serialize(B);
|
||||||
MPI_DOUBLE, 0, MCW);
|
MPI_Bcast(&tmpB[0],N*N,MPI_DOUBLE,0,MCW);
|
||||||
|
if(rank)
|
||||||
|
B=Serialize_Deserialize_Vector::Deserialize(tmpB);
|
||||||
|
//print_matrix(B);
|
||||||
|
std::vector<double> tmpA = std::vector<double>(N*N);
|
||||||
|
tmpA = Serialize_Deserialize_Vector::Serialize(A);
|
||||||
|
MPI_Bcast(&tmpA[0], N*N, MPI_DOUBLE, 0, MCW);
|
||||||
|
// MPI_Scatter(&tmpA[0], interval * N, MPI_DOUBLE, &tmpA[rank * interval], interval * N,
|
||||||
|
// MPI_DOUBLE, 0, MCW);
|
||||||
|
if(rank)
|
||||||
|
A=Serialize_Deserialize_Vector::Deserialize(tmpA);
|
||||||
|
//print_matrix(A);
|
||||||
|
|
||||||
//Each processor cumputes the interval they are responsible for
|
//Each processor cumputes the interval they are responsible for
|
||||||
compute_interval(rank*interval,interval);
|
compute_interval(rank*interval,interval);
|
||||||
|
|
||||||
//Gather results
|
//Gather results
|
||||||
MPI_Gather(AB[rank * interval], interval * N, MPI_DOUBLE, &AB[0][0],
|
auto tmp_AB = Serialize_Deserialize_Vector::Serialize(AB);
|
||||||
|
// cout << "RANK: " << rank << " INTERVAL: "<< interval << " rank*N " << rank*N << " tmp_AB.size() "<<tmp_AB.size() << " " ;
|
||||||
|
// std::vector<double> tmp(interval*N);
|
||||||
|
// for(int i = (rank * interval*N),j=0; i < (rank * interval*N)+N; i++, j++){
|
||||||
|
// tmp[j]=tmp_AB[i];
|
||||||
|
// cout << tmp[j]<<" ";
|
||||||
|
// }
|
||||||
|
// cout << endl;
|
||||||
|
// std::vector<double> test(N*N);
|
||||||
|
MPI_Gather(&tmp_AB[rank * interval*N], interval * N, MPI_DOUBLE, &tmp_AB[rank*interval*N],
|
||||||
interval * N, MPI_DOUBLE, 0, MCW);
|
interval * N, MPI_DOUBLE, 0, MCW);
|
||||||
|
AB=Serialize_Deserialize_Vector::Deserialize(tmp_AB);
|
||||||
|
if(!rank)
|
||||||
|
print_matrix(AB);
|
||||||
//Record parallel finish time
|
//Record parallel finish time
|
||||||
MPI_Barrier(MCW);
|
MPI_Barrier(MCW);
|
||||||
|
|
||||||
time2 = MPI_Wtime();
|
time2 = MPI_Wtime();
|
||||||
|
|
||||||
if (!rank){
|
if (!rank){
|
||||||
|
cout << "made it here!!" <<endl;
|
||||||
//serial computation
|
//serial computation
|
||||||
serial_version();
|
serial_version();
|
||||||
|
|
||||||
|
|||||||
8
MakeJson/Serialize_Deserialize_Vector.h
Normal file
8
MakeJson/Serialize_Deserialize_Vector.h
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
//
|
||||||
|
// Created by Brady Bodily on 4/13/20.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef MAKEJSON_SERIALIZE_DESERIALIZE_VECTOR_H
|
||||||
|
#define MAKEJSON_SERIALIZE_DESERIALIZE_VECTOR_H
|
||||||
|
|
||||||
|
#endif // MAKEJSON_SERIALIZE_DESERIALIZE_VECTOR_H
|
||||||
Reference in New Issue
Block a user