diff --git a/FinalProject/CMakeLists.txt b/FinalProject/CMakeLists.txt index 0f92640..bd7103b 100644 --- a/FinalProject/CMakeLists.txt +++ b/FinalProject/CMakeLists.txt @@ -9,7 +9,7 @@ add_definitions(-DOMPI_SKIP_MPICXX) set(HEADER_FILES ) set(SOURCE_FILES - ) + Serialize_Deserialize_Vector.h) add_executable(HW10 ${HEADER_FILES} ${SOURCE_FILES} main.cpp) set_property(TARGET HW10 PROPERTY CXX_STANDARD 11) diff --git a/FinalProject/Matrix_Info.cpp b/FinalProject/Matrix_Info.cpp deleted file mode 100644 index bcb34e0..0000000 --- a/FinalProject/Matrix_Info.cpp +++ /dev/null @@ -1,5 +0,0 @@ -// -// Created by Brady Bodily on 4/11/20. -// - -#include "Matrix_Info.h" diff --git a/FinalProject/Matrix_Info.h b/FinalProject/Matrix_Info.h deleted file mode 100644 index 8bfaa2c..0000000 --- a/FinalProject/Matrix_Info.h +++ /dev/null @@ -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 diff --git a/FinalProject/Serialize_Deserialize_Vector.h b/FinalProject/Serialize_Deserialize_Vector.h new file mode 100644 index 0000000..6d34f81 --- /dev/null +++ b/FinalProject/Serialize_Deserialize_Vector.h @@ -0,0 +1,37 @@ +// +// Created by Brady Bodily on 4/13/20. +// +#include +#include +#include + +#ifndef HW10_SERIALIZE_DESERIALIZE_VECTOR_H +#define HW10_SERIALIZE_DESERIALIZE_VECTOR_H +class Serialize_Deserialize_Vector{ +public: + static std::vector Serialize(std::vector > data); + static std::vector > Deserialize(std::vector data); +}; + +std::vector Serialize_Deserialize_Vector::Serialize(std::vector > data) { + std::vectorrdata = std::vector(data.size()*data.size()); + for(int i = 0; i < data.size(); i++){ + for(int j= 0; j > Serialize_Deserialize_Vector::Deserialize(std::vector data) { + std::vector > rdata = std::vector >(data.size()/2, std::vector( 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 diff --git a/FinalProject/a.out b/FinalProject/a.out index 0babfc2..1962920 100755 Binary files a/FinalProject/a.out and b/FinalProject/a.out differ diff --git a/FinalProject/cmake-build-debug/CMakeFiles/HW10.dir/main.cpp.o b/FinalProject/cmake-build-debug/CMakeFiles/HW10.dir/main.cpp.o index 35f9ddd..c16be8f 100644 Binary files a/FinalProject/cmake-build-debug/CMakeFiles/HW10.dir/main.cpp.o and b/FinalProject/cmake-build-debug/CMakeFiles/HW10.dir/main.cpp.o differ diff --git a/FinalProject/cmake-build-debug/FinalProject.cbp b/FinalProject/cmake-build-debug/FinalProject.cbp index 6e27f0a..2fa5b69 100644 --- a/FinalProject/cmake-build-debug/FinalProject.cbp +++ b/FinalProject/cmake-build-debug/FinalProject.cbp @@ -84,6 +84,9 @@ + + diff --git a/FinalProject/cmake-build-debug/HW10 b/FinalProject/cmake-build-debug/HW10 index efcb79d..e091703 100755 Binary files a/FinalProject/cmake-build-debug/HW10 and b/FinalProject/cmake-build-debug/HW10 differ diff --git a/FinalProject/main.cpp b/FinalProject/main.cpp index b544b99..484a7e1 100644 --- a/FinalProject/main.cpp +++ b/FinalProject/main.cpp @@ -1,20 +1,24 @@ #include #include #include -#include -#include #include +#include "Serialize_Deserialize_Vector.h" #define MCW MPI_COMM_WORLD using namespace std; +using sdv = Serialize_Deserialize_Vector; //Problem size int N; //global variables -double **A, **B, **AB, **AB_serial; +std::vector > A = std::vector >(0, std::vector(0)); +std::vector > B = std::vector >(0, std::vector(0)); +std::vector > AB = std::vector >(0, std::vector(0)); +std::vector > AB_serial = std::vector >(0, std::vector(0)); -void print_matrix(double **mat); + +void print_matrix(std::vector > mat); void serial_version(); void compute_interval(int start, int interval); void multiplyMatrix(int rank, int size); @@ -35,20 +39,21 @@ void read_in_matrices() { ifstream f("Matrix.txt"); f >> N; // Allocate memory - A = new double *[N]; + A.resize(N); for (int i = 0; i < N; ++i) - A[i] = new double[N]; - B = new double *[N]; + A[i].resize(N); + B.resize(N); for (int i = 0; i < N; ++i) - B[i] = new double[N]; - AB = new double *[N]; + B[i].resize(N); + AB.resize(N); for (int i = 0; i < N; ++i) - AB[i] = new double[N]; - AB_serial = new double *[N]; + AB[i].resize(N); + AB_serial.resize(N); for (int i = 0; i < N; ++i) - AB_serial[i] = new double[N]; - + AB_serial[i].resize(N); // Fill Matricies + + for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) f >> A[i][j]; @@ -61,7 +66,7 @@ void read_in_matrices() { } //Function to print matrix -void print_matrix(double **mat) { +void print_matrix(std::vector >mat) { for (int i = 0; i < N; i++){ for (int j = 0; j tmpB = std::vector(N*N); + + tmpB = Serialize_Deserialize_Vector::Serialize(B); + MPI_Bcast(&tmpB[0],N*N,MPI_DOUBLE,0,MCW); + if(rank) + B=Serialize_Deserialize_Vector::Deserialize(tmpB); + //print_matrix(B); + std::vector tmpA = std::vector(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 compute_interval(rank*interval,interval); //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(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 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); - + AB=Serialize_Deserialize_Vector::Deserialize(tmp_AB); + if(!rank) + print_matrix(AB); //Record parallel finish time MPI_Barrier(MCW); time2 = MPI_Wtime(); if (!rank){ - + cout << "made it here!!" <