From 9de88752de41b5aed4fdefad299888f6bc68c380 Mon Sep 17 00:00:00 2001 From: Peter Munch Date: Sat, 9 Apr 2022 22:41:27 +0200 Subject: [PATCH] Test LA::d::V's shared-memory capability on a Cartesian virtual topology --- tests/lac/distributed_vector_sm.cc | 101 ++++++++++++++++++ .../lac/distributed_vector_sm.mpirun=4.output | 51 +++++++++ 2 files changed, 152 insertions(+) create mode 100644 tests/lac/distributed_vector_sm.cc create mode 100644 tests/lac/distributed_vector_sm.mpirun=4.output diff --git a/tests/lac/distributed_vector_sm.cc b/tests/lac/distributed_vector_sm.cc new file mode 100644 index 0000000000..79fbfb2d49 --- /dev/null +++ b/tests/lac/distributed_vector_sm.cc @@ -0,0 +1,101 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2021 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +// Test LinearAlgebra::distributed::Vector's shared-memory capability on a +// Cartesian virtual topology. + +#include + +#include + +#include "../tests.h" + +using namespace dealii; + + + +int +main(int argc, char **argv) +{ + Utilities::MPI::MPI_InitFinalize mpi(argc, argv, 1); + MPILogInitAll all; + + AssertDimension(Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD), 4); + + const auto my_rank = Utilities::MPI::this_mpi_process(MPI_COMM_WORLD); + + MPI_Comm sm_comm; + MPI_Comm_split_type( + MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, my_rank, MPI_INFO_NULL, &sm_comm); + AssertDimension(Utilities::MPI::n_mpi_processes(sm_comm), 4); + + MPI_Comm row_comm; + MPI_Comm_split(MPI_COMM_WORLD, my_rank / 2, my_rank, &row_comm); + + const auto my_row_rank = Utilities::MPI::this_mpi_process(row_comm); + + MPI_Comm column_comm; + MPI_Comm_split(MPI_COMM_WORLD, my_rank % 2, my_rank, &column_comm); + + IndexSet is_local(20); + IndexSet is_ghost(20); + + if (my_row_rank == 0) + { + is_local.add_range(0, 10); + is_ghost.add_range(10, 15); + } + else + { + is_local.add_range(10, 20); + is_ghost.add_range(5, 10); + } + + const auto test = [&](const auto sm_comm) { + const auto partitioner = + std::make_shared(is_local, + is_ghost, + row_comm); + + LinearAlgebra::distributed::Vector vector; + vector.reinit(partitioner, sm_comm); + + for (unsigned int i = 0; i < partitioner->locally_owned_size(); ++i) + vector.local_element(i) = 10 * my_rank + i; + + vector.update_ghost_values(); + + const auto local_size = + partitioner->locally_owned_size() + partitioner->n_ghost_indices(); + const auto sizes = Utilities::MPI::all_gather(sm_comm, local_size); + + for (unsigned int i = 0; i < sizes.size(); ++i) + { + for (unsigned int j = 0; j < sizes[i]; ++j) + deallog << vector.shared_vector_data()[i][j] << " "; + + deallog << std::endl; + } + deallog << std::endl; + }; + + test(MPI_COMM_WORLD); + test(row_comm); + test(column_comm); + + MPI_Comm_free(&column_comm); + MPI_Comm_free(&row_comm); + MPI_Comm_free(&sm_comm); +} diff --git a/tests/lac/distributed_vector_sm.mpirun=4.output b/tests/lac/distributed_vector_sm.mpirun=4.output new file mode 100644 index 0000000000..0de42438ec --- /dev/null +++ b/tests/lac/distributed_vector_sm.mpirun=4.output @@ -0,0 +1,51 @@ + +DEAL:0::0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000 10.0000 11.0000 12.0000 13.0000 14.0000 +DEAL:0::10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 5.00000 6.00000 7.00000 8.00000 9.00000 +DEAL:0::20.0000 21.0000 22.0000 23.0000 24.0000 25.0000 26.0000 27.0000 28.0000 29.0000 30.0000 31.0000 32.0000 33.0000 34.0000 +DEAL:0::30.0000 31.0000 32.0000 33.0000 34.0000 35.0000 36.0000 37.0000 38.0000 39.0000 25.0000 26.0000 27.0000 28.0000 29.0000 +DEAL:0:: +DEAL:0::0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000 10.0000 11.0000 12.0000 13.0000 14.0000 +DEAL:0::10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 5.00000 6.00000 7.00000 8.00000 9.00000 +DEAL:0:: +DEAL:0::0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000 10.0000 11.0000 12.0000 13.0000 14.0000 +DEAL:0::20.0000 21.0000 22.0000 23.0000 24.0000 25.0000 26.0000 27.0000 28.0000 29.0000 30.0000 31.0000 32.0000 33.0000 34.0000 +DEAL:0:: + +DEAL:1::0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000 10.0000 11.0000 12.0000 13.0000 14.0000 +DEAL:1::10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 5.00000 6.00000 7.00000 8.00000 9.00000 +DEAL:1::20.0000 21.0000 22.0000 23.0000 24.0000 25.0000 26.0000 27.0000 28.0000 29.0000 30.0000 31.0000 32.0000 33.0000 34.0000 +DEAL:1::30.0000 31.0000 32.0000 33.0000 34.0000 35.0000 36.0000 37.0000 38.0000 39.0000 25.0000 26.0000 27.0000 28.0000 29.0000 +DEAL:1:: +DEAL:1::0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000 10.0000 11.0000 12.0000 13.0000 14.0000 +DEAL:1::10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 5.00000 6.00000 7.00000 8.00000 9.00000 +DEAL:1:: +DEAL:1::10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 5.00000 6.00000 7.00000 8.00000 9.00000 +DEAL:1::30.0000 31.0000 32.0000 33.0000 34.0000 35.0000 36.0000 37.0000 38.0000 39.0000 25.0000 26.0000 27.0000 28.0000 29.0000 +DEAL:1:: + + +DEAL:2::0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000 10.0000 11.0000 12.0000 13.0000 14.0000 +DEAL:2::10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 5.00000 6.00000 7.00000 8.00000 9.00000 +DEAL:2::20.0000 21.0000 22.0000 23.0000 24.0000 25.0000 26.0000 27.0000 28.0000 29.0000 30.0000 31.0000 32.0000 33.0000 34.0000 +DEAL:2::30.0000 31.0000 32.0000 33.0000 34.0000 35.0000 36.0000 37.0000 38.0000 39.0000 25.0000 26.0000 27.0000 28.0000 29.0000 +DEAL:2:: +DEAL:2::20.0000 21.0000 22.0000 23.0000 24.0000 25.0000 26.0000 27.0000 28.0000 29.0000 30.0000 31.0000 32.0000 33.0000 34.0000 +DEAL:2::30.0000 31.0000 32.0000 33.0000 34.0000 35.0000 36.0000 37.0000 38.0000 39.0000 25.0000 26.0000 27.0000 28.0000 29.0000 +DEAL:2:: +DEAL:2::0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000 10.0000 11.0000 12.0000 13.0000 14.0000 +DEAL:2::20.0000 21.0000 22.0000 23.0000 24.0000 25.0000 26.0000 27.0000 28.0000 29.0000 30.0000 31.0000 32.0000 33.0000 34.0000 +DEAL:2:: + + +DEAL:3::0.00000 1.00000 2.00000 3.00000 4.00000 5.00000 6.00000 7.00000 8.00000 9.00000 10.0000 11.0000 12.0000 13.0000 14.0000 +DEAL:3::10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 5.00000 6.00000 7.00000 8.00000 9.00000 +DEAL:3::20.0000 21.0000 22.0000 23.0000 24.0000 25.0000 26.0000 27.0000 28.0000 29.0000 30.0000 31.0000 32.0000 33.0000 34.0000 +DEAL:3::30.0000 31.0000 32.0000 33.0000 34.0000 35.0000 36.0000 37.0000 38.0000 39.0000 25.0000 26.0000 27.0000 28.0000 29.0000 +DEAL:3:: +DEAL:3::20.0000 21.0000 22.0000 23.0000 24.0000 25.0000 26.0000 27.0000 28.0000 29.0000 30.0000 31.0000 32.0000 33.0000 34.0000 +DEAL:3::30.0000 31.0000 32.0000 33.0000 34.0000 35.0000 36.0000 37.0000 38.0000 39.0000 25.0000 26.0000 27.0000 28.0000 29.0000 +DEAL:3:: +DEAL:3::10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 5.00000 6.00000 7.00000 8.00000 9.00000 +DEAL:3::30.0000 31.0000 32.0000 33.0000 34.0000 35.0000 36.0000 37.0000 38.0000 39.0000 25.0000 26.0000 27.0000 28.0000 29.0000 +DEAL:3:: + -- 2.39.5