From b2aaf0d6953f65027ff9730aa65449779cc9b0a5 Mon Sep 17 00:00:00 2001 From: Marcel Koch Date: Thu, 27 Jun 2024 14:05:31 +0200 Subject: [PATCH] [prec] add sor device test --- test/preconditioner/CMakeLists.txt | 1 + test/preconditioner/sor_kernels.cpp | 89 +++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 test/preconditioner/sor_kernels.cpp diff --git a/test/preconditioner/CMakeLists.txt b/test/preconditioner/CMakeLists.txt index b41897efaac..46696e29549 100644 --- a/test/preconditioner/CMakeLists.txt +++ b/test/preconditioner/CMakeLists.txt @@ -1,3 +1,4 @@ ginkgo_create_common_test(batch_jacobi_kernels DISABLE_EXECUTORS dpcpp) ginkgo_create_common_test(jacobi_kernels DISABLE_EXECUTORS dpcpp) ginkgo_create_common_test(isai_kernels) +ginkgo_create_common_test(sor_kernels) diff --git a/test/preconditioner/sor_kernels.cpp b/test/preconditioner/sor_kernels.cpp new file mode 100644 index 00000000000..cd12514bb28 --- /dev/null +++ b/test/preconditioner/sor_kernels.cpp @@ -0,0 +1,89 @@ +// SPDX-FileCopyrightText: 2017 - 2024 The Ginkgo authors +// +// SPDX-License-Identifier: BSD-3-Clause + +#include "core/preconditioner/sor_kernels.hpp" + +#include + +#include + +#include +#include +#include +#include + +#include "core/test/utils.hpp" +#include "core/utils/matrix_utils.hpp" +#include "test/utils/common_fixture.hpp" +#include "test/utils/executor.hpp" + + +class Sor : public CommonTestFixture { +protected: + using Csr = gko::matrix::Csr; + using Dense = gko::matrix::Dense; + + Sor() + { + gko::size_type n = 133; + index_type row_limit = 15; + auto nz_dist = std::uniform_int_distribution(1, row_limit); + auto val_dist = std::uniform_real_distribution(-1., 1.); + auto md = + gko::test::generate_random_matrix_data( + n, n, nz_dist, val_dist, rand_engine); + auto md_l = md; + auto md_u = md; + // make_upper/lower_triangular also removes the diagonal, so it is + // added back with make_unit_diagonal + gko::utils::make_lower_triangular(md_l); + gko::utils::make_unit_diagonal(md_l); + gko::utils::make_upper_triangular(md_u); + gko::utils::make_unit_diagonal(md_u); + + mtx->read(md); + d_mtx->read(md); + + result_l->read(md_l); + result_l->scale(gko::initialize({0.0}, ref)); + d_result_l = gko::clone(exec, result_l); + + result_u->read(md_u); + result_u->scale(gko::initialize({0.0}, ref)); + d_result_u = gko::clone(exec, result_u); + } + + std::default_random_engine rand_engine{42}; + + std::unique_ptr mtx = Csr::create(ref); + std::unique_ptr d_mtx = Csr::create(exec); + + std::unique_ptr result_l = Csr::create(ref); + std::unique_ptr d_result_l = Csr::create(exec); + std::unique_ptr result_u = Csr::create(ref); + std::unique_ptr d_result_u = Csr::create(exec); +}; + + +TEST_F(Sor, InitializeWeightedLFactorIsSameAsReference) +{ + gko::kernels::reference::sor::initialize_weighted_l(ref, mtx.get(), 1.24, + result_l.get()); + gko::kernels::GKO_DEVICE_NAMESPACE::sor::initialize_weighted_l( + exec, d_mtx.get(), 1.24, d_result_l.get()); + + GKO_ASSERT_MTX_NEAR(result_l, d_result_l, r::value); +} + + +TEST_F(Sor, InitializeWeightedLAndUFactorIsSameAsReference) +{ + gko::kernels::reference::sor::initialize_weighted_l_u( + ref, mtx.get(), 1.24, result_l.get(), result_u.get()); + gko::kernels::GKO_DEVICE_NAMESPACE::sor::initialize_weighted_l_u( + exec, d_mtx.get(), 1.24, d_result_l.get(), d_result_u.get()); + + GKO_ASSERT_MTX_NEAR(result_l, d_result_l, r::value); + GKO_ASSERT_MTX_NEAR(result_u, d_result_u, r::value); +}