Skip to content

Commit

Permalink
Some fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
krllvv committed Dec 20, 2023
1 parent 5a92321 commit 6a1ae82
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 18 deletions.
33 changes: 22 additions & 11 deletions tasks/task_1/kirillov_m_max_by_columns_matrix/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ TEST(Matrix_Column_Max, Test_Max1) {
21, 0, 3, 9,
7, 17, 1, 31};
}
std::vector<int> resParallel = getParallelMaxInColumns(matrix, rows, columns);
std::vector<int> resParallel =
getParallelMaxInColumns(matrix, rows, columns);
if (world.rank() == 0) {
std::vector<int> resSequential = getSequentialMaxInColumns(matrix, rows, columns);
std::vector<int> resSequential =
getSequentialMaxInColumns(matrix, rows, columns);
ASSERT_EQ(resParallel, resSequential);
}
}
Expand All @@ -31,9 +33,11 @@ TEST(Matrix_Column_Max, Test_Max2) {
if (world.rank() == 0) {
matrix = getRandomMatrix(rows, columns);
}
std::vector<int> resParallel = getParallelMaxInColumns(matrix, rows, columns);
std::vector<int> resParallel =
getParallelMaxInColumns(matrix, rows, columns);
if (world.rank() == 0) {
std::vector<int> resSequential = getSequentialMaxInColumns(matrix, rows, columns);
std::vector<int> resSequential =
getSequentialMaxInColumns(matrix, rows, columns);
ASSERT_EQ(resParallel, resSequential);
}
}
Expand All @@ -46,9 +50,11 @@ TEST(Matrix_Column_Max, Test_Max3) {
if (world.rank() == 0) {
matrix = getRandomMatrix(rows, columns);
}
std::vector<int> resParallel = getParallelMaxInColumns(matrix, rows, columns);
std::vector<int> resParallel =
getParallelMaxInColumns(matrix, rows, columns);
if (world.rank() == 0) {
std::vector<int> resSequential = getSequentialMaxInColumns(matrix, rows, columns);
std::vector<int> resSequential =
getSequentialMaxInColumns(matrix, rows, columns);
ASSERT_EQ(resParallel, resSequential);
}
}
Expand All @@ -62,9 +68,11 @@ TEST(Matrix_Column_Max, Test_Max4) {
if (world.rank() == 0) {
matrix = getRandomMatrix(rows, columns);
}
std::vector<int> resParallel = getParallelMaxInColumns(matrix, rows, columns);
std::vector<int> resParallel =
getParallelMaxInColumns(matrix, rows, columns);
if (world.rank() == 0) {
std::vector<int> resSequential = getSequentialMaxInColumns(matrix, rows, columns);
std::vector<int> resSequential =
getSequentialMaxInColumns(matrix, rows, columns);
ASSERT_EQ(resParallel, resSequential);
}
}
Expand All @@ -77,9 +85,11 @@ TEST(Matrix_Column_Max, Test_Max5) {
if (world.rank() == 0) {
matrix = getRandomMatrix(rows, columns);
}
std::vector<int> resParallel = getParallelMaxInColumns(matrix, rows, columns);
std::vector<int> resParallel =
getParallelMaxInColumns(matrix, rows, columns);
if (world.rank() == 0) {
std::vector<int> resSequential = getSequentialMaxInColumns(matrix, rows, columns);
std::vector<int> resSequential =
getSequentialMaxInColumns(matrix, rows, columns);
ASSERT_EQ(resParallel, resSequential);
}
}
Expand All @@ -88,7 +98,8 @@ int main(int argc, char** argv) {
boost::mpi::environment env(argc, argv);
boost::mpi::communicator world;
::testing::InitGoogleTest(&argc, argv);
::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners();
::testing::TestEventListeners& listeners =
::testing::UnitTest::GetInstance()->listeners();
if (world.rank() != 0) {
delete listeners.Release(listeners.default_result_printer());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
#include <vector>
#include <algorithm>
#include <random>
#include <limits>
#include <utility>
#include <boost/mpi/communicator.hpp>
#include <boost/mpi/collectives.hpp>
#include "matrix_column_max.h"
#include "task_1/kirillov_m_max_by_columns_matrix/matrix_column_max.h"

std::pair<int, int> getColIndexAndCount(size_t columns, int rank);
std::vector<int> getRandomMatrix(int rows, int columns) {
Expand All @@ -18,7 +20,8 @@ std::vector<int> getRandomMatrix(int rows, int columns) {
return matrix;
}

std::vector<int> getSequentialMaxInColumns(const std::vector<int>&matrix, size_t rows, size_t columns) {
std::vector<int> getSequentialMaxInColumns(const std::vector<int>&matrix,
size_t rows, size_t columns) {
std::vector<int> maxValues(columns, std::numeric_limits<int>::min());
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
Expand All @@ -28,7 +31,8 @@ std::vector<int> getSequentialMaxInColumns(const std::vector<int>&matrix, size_t
return maxValues;
}

std::vector<int> getParallelMaxInColumns(const std::vector<int>&matrixc, size_t rows, size_t columns) {
std::vector<int> getParallelMaxInColumns(const std::vector<int>&matrixc,
size_t rows, size_t columns) {
boost::mpi::communicator world;
std::vector<int>matrix(matrixc);
if (world.rank() != 0) {
Expand All @@ -40,7 +44,8 @@ std::vector<int> getParallelMaxInColumns(const std::vector<int>&matrixc, size_t
std::vector<int> localMaxValues(colsCount);
for (int i = colIndex; i < colsCount + colIndex; i++) {
for (int j = 0; j < rows; j++) {
localMaxValues[i - colIndex] = std::max(localMaxValues[i - colIndex], matrix[j * columns + i]);
localMaxValues[i - colIndex] =
std::max(localMaxValues[i - colIndex], matrix[j * columns + i]);
}
}
if (world.rank() != 0) {
Expand All @@ -53,7 +58,8 @@ std::vector<int> getParallelMaxInColumns(const std::vector<int>&matrixc, size_t
counts[i] = count;
offsets[i] = offset;
}
boost::mpi::gatherv(world, localMaxValues, globalMaxValues.data(), counts, offsets, 0);
boost::mpi::gatherv(world, localMaxValues,
globalMaxValues.data(), counts, offsets, 0);
return globalMaxValues;
}
return {};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@

std::vector<int> getRandomMatrix(int rows, int columns);

std::vector<int> getSequentialMaxInColumns(const std::vector<int>&matrix, size_t rows, size_t columns);
std::vector<int> getSequentialMaxInColumns(const std::vector<int>&matrix,
size_t rows, size_t columns);

std::vector<int> getParallelMaxInColumns(const std::vector<int>&matrixc, size_t rows, size_t columns);
std::vector<int> getParallelMaxInColumns(const std::vector<int>&matrixc,
size_t rows, size_t columns);

0 comments on commit 6a1ae82

Please sign in to comment.